LPI-Themen

Buch:

FLOSS-Lizenzen

../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

../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 Zeichen
  • echo *.txt - gibt Dateien Aus, deren Name auf .txt endet
  • echo *.??? - alle Dateien mit einer Endung aus drei Zeichen (z.B. ...jpg aber nicht ...jpeg)
  • echo [dD]* - alle Dateien, die mit einem kleinen oder großen d beginnen
  • echo *[dD]* - alle Dateien, die mit ein kleines oder großes d 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 Programm seq 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

https://mywiki.wooledge.org/BashFAQ

Dateipfade, absolut, relativ, usw.

Reguläre Ausdrücke / RegEx

→ 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
  • 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

IPv4 / IPv6

  • dig A gnu.org → IPv4
  • dig AAAA gnu.org → IPv6
  • ping -4 gnu.org, ping -6 gnu.org
  • ping 46.38.234.157
  • ping 2001:470:142:5::116