GNU / Linux für Fachinformatiker (Systemintegration)
Unterrichtsmaterialien
- Live DVD
- https://learning.lpi.org/pdfstore/LPI-Learning-Material-101-500-de.pdf Andere Sprachen
- https://learning.lpi.org/pdfstore/LPI-Learning-Material-102-500-de.pdf Andere Sprachen
- Berliner_Straßenverzeichnis.txt
Folien
- GNU / Linux für Fachinformatiker (Systemintegration)
- Unterrichtsmaterialien
- Folien
- Installation Hyper-V
- Windows-Server
- Einrichtung Hyper-V VM
- Aufgabe Dateipfade
- Dateisysteme
- Aufgabe Dateien und Ordner
- Zusatz
- Manuelle Installation
- Root-Passwort fixen via GRUB-"Hack"
/etc/fstaberzeugen mitnano- Aufgabe Pipelines
- Frage 1:
- Frage 2:
- Task-Switching und Speicherschutz (Multitasking)
- "Virtualisierung"
- Aufgabe Reguläre Ausdrücke
- Aufgabe Netzwerk
- Aufgabe TMUX
- WSL - Windows Subsystem for Linux
- Logical Volume Manager (LVM)
- Aufgabe VIM
- Aufgabe
xargs - Oktale Zugriffsberechtigungen (Einführung)
- Beispiele:
- Aufgabe / Wiederholung Systeminstallation
- Kurs Teil 2
- Begriffe / Programme für grafische Oberflächen
- Dienstprogramme
- Diagnose / Debugging
- Aufgabe numerische Zugriffsmodi
- Zusatzaufgabe
- Shellscripting
- Aufgabe Scripting
- Hinweise
- Zusatz
- Aufgabe Kontrollstrukturen
- Aufgabe
read: - Anmerkungen zu
read - Aufgabe Scripting / Netzwerk
- Beispiel für die Bedienung:
- Mit Überprüfung:
- Aufgabe
while-Schleife - Zusatz
- Aufgabe Netzwerkdienst
Installation Hyper-V
... und bei der Gelegenheit auch WSL.
Windows-Server
Einrichtung Hyper-V VM
Maschine Erstellen
- Name "Live" oder so (eigentlich egal)
- Generation 2 (nicht egal!)
- 4096 MB Arbeitsspeicher (2048 reichen eigentlich auch)
- Festplatte ist erstmal egal
- Live-Medium live-dvd.iso (wie oben)
Zusätzliche Konfiguration
- Rechtsklick auf "Live" → Einstellungen
- Prozessor: CPU-Kerne nach Bedarf (z.B. 4)
- Arbeitsspeicher: kein dynamischer Arbeitsspeicher
- Sicherheit: Sicheren Start deaktivieren (wichtig!)
Aufgabe Dateipfade
Benutzt ls um folgende Ausgabe anzuzeigen:
-r--r--r-- 1 root root 12M 17. Nov 11:30 /boot/vmlinuz
-r--r--r-- 1 root root 12M 17. Nov 11:30 vmlinuz
-r--r--r-- 1 root root 12101568 17. Nov 11:30 ../boot/vmlinuz
-r--r--r-- 1 root root 12M 17. Nov 11:30 ../vmlinuz
^- Größe beachten ^- Pfad beachten
Antwort wieder als Screenshot im Privatchat
Hiniweis:
- Absolute Pfade beginnen immer mit einem
/. - Relative Pfade beginnen niemals mit
/. - Relative Pfade gelten relativ zum Arbeitsverzeichnis.
- Das Arbeitsverzeichnis wechselt man mit
cd.
Hinweis: Es gibt mehrere Dateien namens vmlinuz im System. Diese sehen aber unterschiedlich aus und alle Beispiele hier zeigen die selbe Datei.
Zusatz: Sorge dafür, dass alle vier Zeilen direkt untereinander stehen.
Dateisysteme
Aufgabe Dateien und Ordner
Mit dem Kommando tree kann man Dateien in einer Baumansicht anzeigen.
Erstelle folgenden Ordnerbaum. Ortsnamen sind Ordner, Bahnhöfe sind Dateien.
~$ tree -C DE/
DE/
├── Berlin
│ ├── Berlin Alexanderplatz
│ ├── Berlin Friedrichstraße
│ ├── Berlin Ostbahnhof
│ ├── Berlin Ostkreuz
│ └── Betriebsbahnhof Rummelsburg
└── Brandenburg
├── Brand Tropical Island
├── Cottbus
│ ├── Cottbus Hbf
│ ├── Cottbus-Merzdorf
│ ├── Cottbus-Sandow
│ └── Cottbus-Wilmersdorf Nord
├── Lübbenau (Spreewald)
├── Lübben (Spreewald)
├── Raddusch
└── Vetschau
4 directories, 14 files
Schickt mir am Ende via Teams einen Screenshot per Privatnachricht.
Hinweis: Benötigte Kommandos sind touch und mkdir. Nutzt cd, um weniger Schreibarbeit zu haben. Wenn ihr euch vertippt, müsst ihr auch rm, rmdir, oder mv nutzen.
Hinweis: Nicht nur Leerzeichen müssen besonders behandelt werden ;-)
Zusatz
Man kann den ganzen Ordnerbaum mit zwei Befehlen erstellen. Postet mir die Befehlszeilen.
Manuelle Installation
Teil 1, Freitag 28. Nov.
~# fdisk /dev/sda
: g
: n
> 1
> 2048
> +64M
: n
> 2
> (enter)
> +20G
: n
> 3
> (enter)
> -8G
: n
> 4
> (enter)
> (enter)
: t
> 1
> 1
: w
~# mkfs.vfat -F32 -n SYSTEM /dev/sda1
~# mkfs.ext3 -L Debian /dev/sda2
~# mkfs.btrfs -L home /dev/sda3
~# mkswap -L SWAP /dev/sda4
~# mount /dev/sda2 /mnt
~# debootstrap --variant=minbase trixie /mnt
~# mount -o rbind /dev /mnt/dev
~# mount -o rbind /proc /mnt/proc
~# mount -o rbind /sys /mnt/sys
~# chroot /mnt
~# apt-get install --no-install-recommends grub-efi network-manager init nano linux-image-amd64
~# update-initramfs -u
~# mkdir /boot/efi
~# mount /dev/sda1 /boot/efi
~# grub-install
~# update-grub
Root-Passwort fixen via GRUB-"Hack"
- Im grub-Menü
edrücken in der
linux ...-Zeilequietersetzen durchinit=/bin/bash- Amerikanische Tastatur (muhahaha)
F10zum durchbooten- → Prozess
1wird eine bash als root-User (win!) - → Filesystem ist aber readonly :-(
~# mount -o remount,rw /~# passwd
...~# mount -o remount,ro /
/etc/fstab erzeugen mit nano
# Quelle Mountpunkt Typ Optionen Dump/Pass
/dev/sda2 / ext4 rw 0 0
/dev/sda3 /home btrfs defaults 0 0
/dev/sda1 /boot/efi vfat ro,umask=0077 0 0
UUID=... none swap sw 0 0
Teil 2, Dienstag, 2. Dez. (Legacy-Boot)
~# fdisk /dev/sda
: o
: n
> p
> 1
> 2048
> -8G
: n
> p
> 2
> (enter)
> (enter)
: w
~# mkfs.btrfs /dev/sda1
~# mkswap /dev/sda2
~# mount /dev/sda1 /mnt
~# btrfs subvolume create /mnt/trixie
~# btrfs sub cre /mnt/home
~# debootstrap --variant=minbase trixie /mnt/trixie
~# umount /mnt
~# mount -o subvol=trixie /dev/sda1 /mnt
~# mount -o rbind /dev /mnt/dev
~# mount -o rbind /proc /mnt/proc
~# mount -o rbind /sys /mnt/sys
~# chroot /mnt
~# apt-get install --no-install-recommends grub-pc net-tools ifupdown busybox-static nano vim isc-dhcp-client iputils-ping linux-image-amd64 init systemd-
~# grub-install /dev/sda
~# update-grub
~# passwd
...
-> REBOOT
Aufgabe Pipelines
überfliegt die man-pages zu den Mini-Pipeline-Programmen
wc, grep, sort, uniq, cut, tr
Frage 1:
Wie viele verschiedene Straßen- u. Platznamen gibt es in Berlin?
Hinweis: Es gibt 13171 Einträge im Straßenverzeichnis. Hier kommen einige Straßen jedoch mehrfach vor, wenn sie durch mehrere Bezirke gehen.
Antwort via Teams-Privatnachricht.
Zusatz: Wie kann man genau die Einträge auflisten, die mehrfach vorkommen?
Frage 2:
Wie viele verschiedene Stadtteile gibt es laut Liste in Berlin.
Task-Switching und Speicherschutz (Multitasking)
"Virtualisierung"
Historisch wird bereits Einfacher Speicherschutz als Virtualisierung betrachtet. Heutzutage sind mit dem Begriff idR. Hypervisor-Techniken gemeint, die Abstufungen sind jedoch vielfältig.
Aufgabe Reguläre Ausdrücke
Geht die Lektionen auf https://regexone.com durch.
Hinweis: beachtet den Erklärtext. Es geht darum die Muster mit den jeweils angegeben Techniken zu finden, nicht nur irgendwie.
Zusatz: Versucht die selben Suchmuster im Programm grep nachzuvollziehen. Beachtet, dass dort das Suchmuster als Argument, und der Suchtext als "Eingabedatenstrom" übergeben werden.
Hinweis: Die Regex-Syntax von der Webseite entspricht grep -P. Nutzt außerdem grep --color=auto -P ....
Aufgabe Netzwerk
Stellt sicher, dass ihr auf einem Rechner im Schulungsraum arbeitet.
Verbindet euch mit nc/netcat/ncat zu 10.0.9.104 Port 1024.
Schickt mir einen Screenshot des Textes, der euch entgegen kommt.
Zusatz: Schaut in der man-Page zu ncat nach, wie ihr den augehenden Port bestimmen könnt. Verbindet euch von Port 2048 aus.
Hinweis: Das Programm auf dem Server ist
~$ ncat -vklp 1024 0.0.0.0 -c 'cat "Text.txt"'
Aufgabe TMUX
Benutzt tmux um Text vom Terminal zu kopieren.
Auf dem Dozentenrechner (ssh user@10.0.9.104) liegt eine Datei namens "ソニー株式会社" (der Name der Firma Sony). Benutzt die Kopieren-und-Einfügen-Funktion von tmux um den Dateinamen zu Kopieren und jeweils eine Datei namens "ソニー株式会社-NAME" (mit eurem Namen) anzulegen.
Strg+b[→ zum Text scrollenStrg+SPACE→ Text markierenAlt+w→ kopiert den TextStrg+b]→ fügt den Text ein
Hinweis: Benutze dazu eine eigene tmux-Session → Strg+b d (um die gemeinsame Session zu verlassen), tmux (ohne Argument) starten.
WSL - Windows Subsystem for Linux
\> wsl --update
\> wsl --install -d debian
\> wsl --set-version debian 2
\> wsl --list -v
-> sollte Debian in WSLv2 listen
\> wsl
-> Startet die Linux-Shell
~$ sudo apt-get update
~$ sudo apt-get install pciutils usbutils psutils psmisc net-tools x11-apps kcalc
^^ für die Beispile, die wir hier fahren
Logical Volume Manager (LVM)
Aufgabe VIM
Startet im Terminal das Programm vimtutor und geht das Tutorial durch.
Zusatz (einfach):
- Probiert den vi-Modus in
kateaus.
Zusatz (Advanced!):
- Wie kann man eigentlich automatisch Klammern schließen lassen?
Wie kann ich Zeilennummern einblenden
- in roter Farbe ;-)
- Wie kann man in einem Shellscript IF-Bedingungen einklappen
Hinweis: vergesst nicht, Pause zu machen.
Aufgabe xargs
LPIC-1 101 Handbuch, Seite 298 (nach gedruckter Seitenzahl), Aufgabe 4:
Der Befehl
convert image.jpeg -resize 25% small/image.jpegerzeugt eine kleinere Version von "image.jpeg" und legt das resultierende Bild in einer gleichnamigen Datei des Unterverzeichnis "small" ab. Wie ist es mitxargsmöglich, für jedes in der Datei "filelist.txt" aufgeführte Bild den gleichen Befehl auszuführen?
Hinweis um die Voraussetzungen zu erfüllen:
~$ sudo apt-get install imagemagick
~$ wget "https://plutz.net/training/damago_2025_11/[attachment]/"HVServer-{1..5}.png
~$ mkdir small/
~$ printf %s\\n HVServer*png >filelist.txt
~$ convert HVServer-1.png -resize 25% small/HVServer-1.png
(die letzte Zeile ist nur ein Beispielhafter Aufruf. Dieser Befehl soll via xargs automatisiert werden)
Oktale Zugriffsberechtigungen (Einführung)
U G O
rwx rwx rwx
111 111 111
7 7 7
6 4 4
110 100 100
rw- r-- r--
rwx r-x r-x
7 5 5
Beispiele:
~$ chmod 644 filelist.txt, ~$ chmod 755 filelist.txt
Aufgabe / Wiederholung Systeminstallation
Legte eine neue VM in Hyper-V an
Installiert Archlinux gemäß der Anleitung auf
Hinweis: Die Signaturprüfung des Downloadmediums kann bequem in wsl ausgeführt werden.
Hinweis: Bei der GRUB-Installation sollte auch das Paket "efibootmgr" mit installiert sein
Kurs Teil 2
Begriffe / Programme für grafische Oberflächen
Grafikserver:
xorgXorg vt07export DISPLAY=:0; ...
Display-Manager
lightdm,gdm,lxdm,nodm, ...- Startet den Grafikserver und fragt idR. Benutzerlogins ab
Session-Manager
- Startet die Komponenten des grafischen Desktops (Menüleiste, Programmautostart, ...)
Window-Manager
- Zichnet "Fensterdekoration" / "Titelleiste"
- Verwaltet Größenänderungen u. Position von Fenstern
Dienstprogramme
setxkbmap(Tatstaturbelegung)setxkbmap de,setxkbmap us
xrandr(Bildschirmauflösung)- Beispiel:
xrandr --output eDP-1 --mode 1024x768 - Beispiel:
xrandr --output eDP-1 --rotate left
- Beispiel:
xinputxinput list-props "Gerätename"xinput set-prop "Gerätename" "Propertyname" Wertz.B.:
xinput set-prop "Microsoft Vmbus HID-compliant Mouse" "libinput Natural Scrolling Enabled" 1
Diagnose / Debugging
xev(Input-Events zeigen)
Aufgabe numerische Zugriffsmodi
Legt die Dateien a, b, c, d, e an.
Ändert mit chmod die Zugriffsmodi (Berechtigungen) so, dass folgendes Bild entsteht:
-----w---- 1 damago damago 0 9. Jan 09:58 a
----r-x--- 1 damago damago 0 9. Jan 09:58 b
---x---r-- 1 damago damago 0 9. Jan 09:58 c
--w-----w- 1 damago damago 0 9. Jan 09:58 d
-r-------t 1 damago damago 0 9. Jan 09:58 e
Benutzt die numerische ("oktale") Angabe für den Zugriffsmodus. Beachtet, das "t" in der letzten Datei.
Antwort bitte als Screenshot oder Shellkommando per Teams-Chat.
Zusatzaufgabe
d----w---- 1 damago damago 0 9. Jan 10:11 a
p---r-s--- 1 damago damago 0 9. Jan 10:11 b
---S---r-- 1 damago damago 0 9. Jan 10:12 c
s-w-----w- 1 damago damago 0 9. Jan 10:14 d
lrwxrwxrwx 1 damago damago 1 9. Jan 10:11 e -> e
Shellscripting
- Befehle genauso wie in der interaktiven Shell
- Scriptdateien beginnen mit
#!/bin/shbzw.#!/bin/bash - Scriptdateien sollten Ausführungsrechte haben
- Häufig liegen Scriptdateien nicht im normalen Ausführungspfad wie "/bin" oder "/usr/bin". Zum Ausführen auf der Shell muss dann der Pfad der Datei mit angegeben werden, im einfachsten Fall:
./scriptdatei
Aufgabe Scripting
Schreibt ein Shellscript, das
- nach eurem Namen fragt
- den Namen von der Tastatur liest und
- euch dann mit eurem Namen begrüßt.
Eingaben können mittels read in eine Variable gelesen werden.
Hinweise
Variablen werden beim Auslesen mit
$dollarzeichengeschrieben, bei der Zuweisung ohne.readhat keine eigene man-Page. Es ist ein Builtin der Shell, und wird z.B. in der man-Page der "dash" unter "Builtins" dokumentiert (man-Pages können mittels/durchsucht werden).
Zusatz
Der Befehlt head -n1 liest ebenfalls genau eine Zeile vom Terminal. Benutzt eine "Command Substitution" ($(...)) um den Namen in eine Variable zu lesen, ohne read zu benutzen.
Aufgabe Kontrollstrukturen
Erweitert das Begrüßungsscript folgendermaßen
neben dem eingelesenen Namen soll auch eine Variable "stunde" gesetzt werden
- Um die aktuelle Stunde herauszubekommen kann das Programm
dateverwendet werden - die Variable wird dann einfach via Command Substitution gesetzt
- Zum Testen soll zunächst in der Grußausgabe einfach die Stunde mit aufgeführt werden (z.B. "11 Uhr: Hallo Friedbert!")
Hinweis: Ihr müsst hier selbst recherchieren, wie man
datedazu bekommt, nur die Stunde der aktuellen Uhrzeit auszugeben.- Um die aktuelle Stunde herauszubekommen kann das Programm
Das Programm
testkann Zahlen vergleichen (man-Page). Ergebnis eines Vergleichs ist der "Return-Code" des Programms. Dieser ist auf der Kommandozeile nicht sichtbar.Mit dem
&&Operator können Kommandos verkettet werden. Das zweite Kommando wird dann nur ausgeführt, wenn das erste einen erfolgreichen Return-Code liefert:test ... && echo Guten Morgen- Schreibt das Script mit einem
testund&&so weiter, dass zu jeder Stund kleiner 13 ein "Guten Morgen" ausgegeben wird und zu jeder Stunde größer/gleich 13 ein "Guten Abend"
- Schreibt das Script mit einem
Mit
if ... then ... else ... fikann man Verzweigungen aufgrund eines Return Codes bauen.Hinter dem if-Schlüsselwort kommt ein Programmaufruf, der entweder erfolgreich oder fehlerhaft beendet:
if test...bei Erfolg werden die Kommandos in einem
then-Blockausgeführt:if ... then ... ...Optional kann ein
else-Blockangegeben werden, der ausgeführt wird, wenn das Bedingungsprogramm mit einem Fehler beendet:if ... then ... ... else ... ...Abgeschlossen wird das eine solche
if-Gruppe mit dem Schlüsselwortfi("if" rückwärts)if ... then ... ... else ... ... fiAufgabe: Schreibt die Uhrzeit-Weiche mit if-Bedingungen.
Innerhalb eines
then- bzw.else-Blocks kann eine weitere if-Abfrage stehen (if ... then ... fi). Dies bezeichnet man als "Verschachtelung", bzw. "Verschachtelte Bedingung":if ... then ... if ... then ... ... fi ... else ... ... fiHier müsst ihr darauf achten, die Anweisungen aus dem äußeren und dem inneren
if-Block nicht zu vermischen.Unterscheidet in verschachtelten if-Blöcken folgende Uhrzeiten:
- 0 - 9 Uhr: Guten Morgen
- 10 - 13 Uhr: Mahlzeit
- 14 - 18 Uhr: Guten Tag
- 19 - 24 Uhr: Guten Abend
Zusatz: Zwischen 23:00 und 4:00 Uhr soll die Begrüßung "Huuuhuuu" sein.
Zusatz: Schaut euch das
elif-Schlüsselwort an um die Verschachtelungstiefe der if-Abfragen zu reduzieren.
Aufgabe read:
Lest mit read aus einer Zeile die Variablen "eins" "zwei" "drei" und "vier" ein.
Gebt alle vier Variable einzeln aus, und beantwortet folgende Fragen:
Welche Eingabe muss ich machen, damit die Variable "drei" den wert "schnabbeldifoo" bekommt?
Welche Werte nehmen die Variablen an, wenn in der Eingabe fünf oder sechs verschiedene Worte übergeben werden?
Anmerkungen zu read
~$ echo alpha beta gamma |read eins zwei drei
→ Das Pipe-Konstrukt zwingt die Shell dazu, read in einem Unterprozess auszuführen. Deshalb stehen mir die gelesenen Variablenwerete nich in der Aufrufshell zur Verfügung.
Ein Heredoc kann helfen:
~$ read eins zwei drei <<EOF
alpha beta gamma
EOF
Eine Command Substitution im Heredoc erlaubt das lesen von Programmrückgaben:
~$ read stunde minute sekunde <<EOF
$(date "+%H %M %s")
EOF
Aufgabe Scripting / Netzwerk
Der read-Befehl kann mehrere Variablen auf einmal einlesen. Diese werden an Leerzeilen separiert.
Benutzt
readum von einer Zeile die Variablen "method", "info" und "proto" zu lesen.gebt mittels
cateine Datei aus, die dem Dateinamen aus "info" entspricht.Richtet das Script als inetd-Service auf Port 1080 ein.
Beispiel für die Bedienung:
~$ echo foo /etc/inetd.conf bar |nc localhost 1080
-> soll die Datei inetd.conf auf dem Terminal ausgeben.
(Das macht jetzt noch nicht viel sinn, wird aber bald weiter entwickelt)
Mit Überprüfung:
Bevor cat die Datei ausgibt soll überprüft werden, ob diese existiert und gelesen werden kann. Hierzu kann das test-Programm benutzt werden.
- Schreibt eine if/test-Abfrage um zu überprüfen, ob die Datei "$info" existiert. Gebt die Datei in dem Fall wie bisher mit
cataus. Ansonsten soll ausgegeben werden "Not Found".
Aufgabe while-Schleife
Schreibt eine Scriptdatei mit einer einzelnen While-Schleife:
while TESTPROGRAMM; do
KOMMANDO
KOMMANDO
...
done
Die Schleife soll prüfen, ob die Datei "TEST" im Heimverzeichnis existiert und lesbar ist. Solange dies der Fall ist, soll die Schleife konstant einen Punkt (".") auf dem Terminal ausgeben. Das Programm endet, sobald die Datei TEST verschwindet oder Leserechte verliert.
Hinweis: zum testen muss die Datei "TEST" natürlich existieren.
Zusatz
Damit die Schleife nicht eine Billion Punkte ins Terminal schreibt, soll sie durch ein sleep ausgebremst werden. Außerdem sollen alle Punkte auf der selben Zeile aufgereiht werden.
Aufgabe Netzwerkdienst
Das inetd-Script aus der vorletzten Aufgabe soll angepasst werden. Nachdem die Variablen "method", "info" und "proto" gelesen wurden, sollen noch weitere Zeilen eingelesen werden, bis eine Leerzeile auftaucht.
Der Inhalt der gelesenen Zeilen wird ignoriert.
Schleifenbedingung ist, dass die zuletzt gelesene Zeile nicht leer ist (siehe man-Page zu test).
Die Ausgabe der "$info"-Datei erfolgt erst, nachdem eine Leerzeile gelesen wurde.








