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.txtendetecho *.???- alle Dateien mit einer Endung aus drei Zeichen (z.B....jpgaber nicht...jpeg)echo [dD]*- alle Dateien, die mit einem kleinen oder großendbeginnenecho *[dD]*- alle Dateien, die mit ein kleines oder großesdirgendwo 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 Programmsequm 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 varfor 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
lshwlsblklscpufreeless /proc/cpuinfols /sys/...acpizur Problemanalyse
dmesg,dmesg -w,dmesg |grep -C2 firmware- Firmware liegt in
/lib/firmwareund wird manchmal über Pakete aus unfreien Quellen installiert
- Firmware liegt in
htop,top,iotophdparm,hdparm /dev/sdasmartctl,smartctl -a /dev/sdabadblocks,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.confRebootfeste 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.orgping 46.38.234.157ping 2001:470:142:5::116