LPI-Themen
Buch:
- https://learning.lpi.org/pdfstore/LPI-Learning-Material-010-160-de.pdf
- https://learning.lpi.org/pdfstore/LPI-Learning-Material-010-160-en.pdf
FLOSS-Lizenzen
Siehe auch:
Begriffe:
Proprietäre (proprietary) Software - Das Gegenmodell zu freier Software
- d.h. unfrei / kommerziell
- Achtung: auch FLOSS-Software kann kommerziell sein!
Anwendungsprogramme
Server
Bezeichnet A: Die Server-Hardware
B: Das Dienstprogramm, das einen Service bereitstellt
Begriffe:
- Server, Service, Daemon, Hintergrunddienst
MySQL / MariaDB / SQL-Datenbanken
~# apt install mariadb-server
~# mariadb
-> Spaß haben!
~$ apt install sequeler libgd-5.0-mysql
SQLite ist eine einfache SQL-Datenbank ohne Server:
~$ apt install sqlite3 sqlitebrowser
Andere Datenbanken
NoSQL (idR. Objekt-Datenbanken)
- CouchDB
- MongoDB (Proprietär)
Normales Dateisystem ist eine hierarchische Objektdatenbank
Webservices
~# apt install apache2 libapache2-mod-php phpmyadmin
~# mariadb
> create user admin identified by "Pa$$w0rt";
> grant all on *.* to admin with grant option;
Netzwerkdateisysteme
NFS
~# apt install nfs-server
~# nano /etc/exports
/srv *(rw)
~# exportfs -a
~# mount -t nfs server:/pfad /zielordner/
SMB / CIFS
- Früher: Server Message Block
- Heute: Common Internet File System
Im Dateimanager:
smb://servername/
Auf der Shell:
~# mount -t cifs //server/exportordner/ /zielordner/ -o user=Windows-User
~# man mount.cifs
Server:
~# apt install samba
~# smbpasswd -a USER
SMB-Userkonten sollten identisch mit Linux-Systembenutzerkonten sein
Im Dateimanager: smb://localhost/user
→ Zeigt das Heimverzeichnis
Configfile: /etc/samba/smb.conf
# Defaults sind OK für einzelne Freigaben
# Kommentare sehr hilfreich zum Verständnis
[Share]
comment = Öffentliche Freigabe
path = /srv
guest ok = yes
read only = no
Netzwerke (Für Benutzer)
~# apt install network-manager
~$ nmtui
Shellsyntax
Unix-Shell: auch "Bourne"-Shell (nach Stephen R. Bourne) bzw. POSIX-Shell
Shell auch Synonym für Benutzeroberfläche, umgangssprachlich idR. ein Kommandozieleninterface.
- bash: "Bourne Again Shell" des GNU-Projektes
- ksh (Korn Shell, ebenfalls eine Bourne Shell)
- zsh (Zsh, auch eine Bourne Shell)
- dash (nicht-interaktive Bourne-Shell zum schnellen Ausführen von Shellscripten)
- ash (minimalistsische interaktive Bourne-Shell, Teil von busybox)
- csh - keine Bourne-Shell
Shellsyntax
~$ programm -xyz foobar
^ ^ ^
| Parameter / Optionen / Argumente
Programmaufruf
- Optionen: Programmparameter, die das Verhalten des Programms beeinflussen
- Argument: Arbeitsinformation für das Programm
Per Konvention folgen nach einem Parameter "--
" nur noch Arbeitsargumente:
~$ mkdir ./-lh
~$ ls -lh -- -lh
(Beachte `-lh` ist einmal Option, einmal Argument)
Quoting
'singel quotes'
oder "double quotes"
verhindern, dass die Shell bestimmte Sonderzeichne, wie >
, oder Leerzeichen interpretiert. Mit double quotes sind einige sonderzeichen, wie \\
oder $
noch aktiv. Mit single quotes nicht!
Single quotes sind "verbindlicher" als double quotes.
Einzelne Zeichen lassen sich per Backslash \\
quoten:
~$ foo=schnabbeldiwauwau
~$ echo \$foo
-> gibt den Text "`$foo`" aus statt der Variable
Umleitungen
>
Ausgabeumleitung in eine Datei (überschreiben), (stdout nach Datei)2>
Fehlerumleitung in Datei (stderr nach Datei)>>
Ausgabeumleitung in eine Datei (anhängen), (stdout nach Datei)2>>
Fehlerumlaitung an Datei<
Umleitung aus einer Datei (stdin aus Datei)|
Umleitung in ein Programm (stdout nach stdin)
Substitutions
- Variablensubstitution:
$foobar
,${foobar}
- Kommandosubstitution:
$(kommando argumente)
,`kommando argumente`
- Arithmetische Substitution:
$(( 5 + 5 ))
Shellglobs / Shell Patterns / Globbing
ls *.txt
,ls [sm]*
Generiert eine Vielzahl von Parametern (je nach Verzeichnisinhalt)*
- Beschreibt einen Dateinamenteil aus beliebig vielen beliebigen Zeichen?
- Beschreibt einen Dateinamenteil aus genau einem beliebigen Zeichen[xyz]
- Beschreibt einen Dateinamenteil aus irgendeinem der angegebenen Zeichenecho *.txt
- gibt Dateien Aus, deren Name auf.txt
endetecho *.???
- alle Dateien mit einer Endung aus drei Zeichen (z.B....jpg
aber nicht...jpeg
)echo [dD]*
- alle Dateien, die mit einem kleinen oder großend
beginnenecho *[dD]*
- alle Dateien, die mit ein kleines oder großesd
irgendwo im Namen enthalten
List-Expansion
Typische "Bashisms" (bzw. ksh
, usw.), tauchen aber in POSIX, bzw. der originalen Bourne-Shell nicht auf:
~$ echo Schnabbeldi{Foo,Bar,Qua,Quux}
~$ echo {1..99}
~$ echo {01..99}
~$ echo {a..z}
Manchmal praktisch um Schnell Dateien anzulegen, oder Schleifen zu bauen. Funktioniert aber nicht in jeder Shell (Vorsicht beim Shellscripting!).
Konditionale Ausführung
~$ programm1 && programm2
→ programm2
wird ausgeführt wenn programm1
erfolgreich beendet (return-Status 0
).
~$ programm1 || programm2
→ programm2
wird ausgeführt wenn programm1
nicht erfolgreich beendet (return-Status ungleich 0
).
~$ ! programm
→ negiert den Rückgabewert, 0
wird 1
, ungleich 0
wird 0
. Wird eher in while
-Schleifen und if
-Bedingungen verwendet.
Verkettungen:
~$ true || false && echo wird ausgeführt
~$ true || { false && echo wird nicht ausgeführt; }
~$ false || { false && echo wird auch nicht ausgeführt; }
Programmstrukturen
Bedingungen
if PROGRAMM; then
....
....
elif PROGRAMM; then
....
else
....
fi
PROGRAMM
in if
-Bedingungen ist häufig [
, bzw. test
(siehe man
-page).
PROGRAMM
darf eine komplexe Verknüpfung sein, z.B.:
if ! [ -d "$lockdir" ] && mkdir "$lockdir"; then ...
For-Schleifen
for x in Ainz Zwaj Draj Fiah Fümpf; do
....
done
Variable $x
bekommt in jedem Schleifendurchlauf einen anderen Wert aus der angegebenen Liste.
for x in $(seq 1 35); do ....
(benutzt das Programmseq
um eine Zahlenliste zu generieren)for x in *; do ...
for x in $(cat worte); do ....
for x in {1..35}; do ....
(in einigen Shells)
While-Schleife
while PROGRAMM; do
....
done
Schleifen können durch Umleitungen verbunden werden wie Programme:
while read line; do
....
done <Datei
grep wort Datei | while read wort; do
....
done | sort
Weiteres Material zur Shellsyntax
~$ man dash
→ sehr gute, kompakte Beschreibung der Shellsyntax
Dateipfade, absolut, relativ, usw.
mc
- Midnight Commandertree
- https://web.mit.edu/mprat/Public/web/Terminus/Web/main.html
Reguläre Ausdrücke / RegEx
~$ man 7 regex
-
~$ grep -E 'Muster'
→ Zeigt eine Zeile in der irgendwo Muster
vorkommt
~$ grep -Eo 'Muster'
→ (mit Parameter -o
) zeigt genau das erfasste Muster
Beispiele aus dem Unterricht:
~$ wget -qO - de.wikipedia.org | grep -Eo '<img [^>]*>' | grep -Eo 'src="[^"]*"'
Shellscripting
- Erste Zeile:
#!/bin/sh
- Ausführbar machen:
chmod a+x SCRIPTDATEI
Ausführen via Pfad zur Datei:
~$ /home/user/SCRIPTDATEI
~$ ./SCRIPTDATEI
- oder Pfad-Variable anpassen:
PATH=${PATH}:${HOME}/.bin/
in~/.bashrc
Parameter lesen aus: $1
, $2
, usw...
Zeilen dürfen mitten im Kommando umgebrochen werden, wenn der Zeilenumbruch via \
escaped wird → bessere Lesbarkeit von langen Pipelines
Variablen können zugewiesen werden via:
var=...
read var
for var in ...
Bei der Benutzung werden variablen als $var
oder ${var}
geschrieben.
Shellscript: Image Scraper
Paketsystem
Debian und Debian-Derivate:
- dpkg
.deb
-Pakete- CLI-Tool:
apt
- GUI-Tool:
synaptic
RedHat
- rpm
.rpm
-Pakete- CLI-Tool:
yum
,dnf
- GUI-Tool:
dnfdragora
Hardware
lshw
lsblk
lscpu
free
less /proc/cpuinfo
ls /sys/
...acpi
zur Problemanalyse
dmesg
,dmesg -w
,dmesg |grep -C2 firmware
- Firmware liegt in
/lib/firmware
und wird manchmal über Pakete aus unfreien Quellen installiert
- Firmware liegt in
htop
,top
,iotop
hdparm
,hdparm /dev/sda
smartctl
,smartctl -a /dev/sda
badblocks
,badblocks -s /dev/sda
- in Debian im Paket "e2fsprogs"
Netzwerk
via DHCP:
~# dhclient -v eth0
Verbindung manuell (ohne DHCP)
~# ip addr add 1.2.3.4/5 dev eth0
~# ip route add default via 1.2.3.1
- Statt "default" kann auch spezifisch ein Netz angeeben werden
~# echo nameserver 1.2.3.2 > /etc/resolv.conf
Rebootfeste Konfiguration:
/etc/network/interfaces
- siehe:
~$ man 5 interfaces
- siehe:
IPv4 / IPv6
dig A gnu.org
→ IPv4dig AAAA gnu.org
→ IPv6ping -4 gnu.org
,ping -6 gnu.org
ping 46.38.234.157
ping 2001:470:142:5::116