Boot, Kernel & Systemstart 101.1 – 101.3 / 102.2
Vom Einschalten bis zum Login: Firmware → Bootloader → Kernel → Init → Runlevel/Target
Bootvorgang – Reihenfolge
- BIOS/UEFI – Firmware, initialisiert Hardware, sucht Bootgerät (BIOS: MBR im 1. Sektor, 512 Byte, davon 446 Byte Bootcode; UEFI: EFI System Partition, FAT32,
/boot/efi)
- Bootloader (GRUB2) lädt Kernel + initramfs
- Kernel entpackt sich, initialisiert Hardware, mountet initramfs als temporäres Root
- initramfs/initrd lädt Treiber (z.B. für RAID/LVM/verschlüsselte Platten), mountet echtes Root-FS
- init-Prozess (PID 1) – systemd, SysVinit oder Upstart übernimmt, startet Dienste
GRUB2 – Bootloader
| Pfad/Datei | Bedeutung |
/boot/grub/grub.cfg | generierte Konfiguration – nicht von Hand editieren! |
/etc/default/grub | Einstellungen (Timeout, Default-Eintrag, Kernel-Parameter) |
/etc/grub.d/ | Skripte, aus denen grub.cfg generiert wird (z.B. 40_custom) |
update-grub # Debian/Ubuntu: grub.cfg neu erzeugen
grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL/Fedora Variante
grub-install /dev/sda # Bootloader in MBR installieren
GRUB Editiermodus
Im Bootmenü Eintrag markieren, e drücken → Zeilen editieren (z.B. init=/bin/bash anhängen für Rescue), mit Strg+X / F10 booten. c öffnet die GRUB-Kommandozeile.
Kernel-Module
| Befehl | Zweck |
lsmod | geladene Module anzeigen (liest /proc/modules) |
modinfo <modul> | Infos zu einem Modul |
modprobe <modul> | Modul + Abhängigkeiten laden |
modprobe -r <modul> | Modul entfernen |
insmod <datei.ko> | Modul direkt laden, keine Abhängigkeitsauflösung |
rmmod <modul> | Modul direkt entfernen |
depmod | Abhängigkeitsdatei neu erzeugen (modules.dep) |
uname -r | laufende Kernelversion |
Modul-Konfiguration (Autoload/Blacklist): /etc/modprobe.d/*.conf, Beispiel blacklist nouveau
Hardware erkennen (101.1)
| Befehl | Zweck |
lspci | PCI-Geräte |
lsusb | USB-Geräte |
lscpu | CPU-Infos |
lsblk | Blockgeräte/Partitionen als Baum |
dmesg | Kernel-Ringpuffer, u.a. Hardware-Erkennung beim Boot |
lshw | ausführliche Hardwareliste |
Relevante /proc-Dateien: /proc/cpuinfo, /proc/meminfo, /proc/interrupts, /proc/ioports, /proc/bus/usb
Init-Systeme & Runlevel / Targets
SysVinit (klassisch)
Konfig: /etc/inittab
Skripte: /etc/init.d/
Runlevel-Links: /etc/rc<N>.d/ (S=start, K=kill)
init 0/telinit 3 – Runlevel wechseln
runlevel – aktuellen anzeigen (vorherig+aktuell)
systemd (heute Standard)
Einheiten: /etc/systemd/system/ (lokal), /usr/lib/systemd/system/ (Pakete)
systemctl start|stop|restart|status <unit>
systemctl enable|disable <unit> – Autostart
systemctl isolate multi-user.target – "Runlevel" wechseln
systemctl get-default / set-default
Runlevel ↔ systemd-Target
| Runlevel | Bedeutung | systemd Target |
| 0 | Halt / Shutdown | poweroff.target |
| 1 / S | Single User / Rescue | rescue.target |
| 2 | Multiuser ohne Netzwerk (Debian: mit) | multi-user.target |
| 3 | Multiuser, Netzwerk, kein GUI | multi-user.target |
| 5 | Multiuser + grafisches Login | graphical.target |
| 6 | Reboot | reboot.target |
Herunterfahren / Neustarten
shutdown -h now # sofort herunterfahren
shutdown -r +10 "Wartung" # Reboot in 10 Min mit Nachricht
shutdown -c # geplantes Shutdown abbrechen
halt / poweroff / reboot
Logs beim Systemstart
dmesg – Kernel-Meldungen (auch /var/log/dmesg)
journalctl -b – systemd-Journal des aktuellen Boots, -b -1 vorheriger Boot
- /var/log/boot.log, /var/log/messages (SysV-Systeme)
Shared Libraries verwalten 102.3
Dynamisch gelinkte Programme brauchen .so-Bibliotheken zur Laufzeit
| Befehl | Zweck |
ldd <programm> | zeigt benötigte shared libs + ob gefunden |
ldconfig | Library-Cache neu aufbauen nach Änderungen |
ldconfig -p | aktuellen Cache-Inhalt anzeigen |
ldconfig -v | ausführlich, zeigt jede Bibliothek |
LD_LIBRARY_PATH | Umgebungsvariable, zusätzliche Suchpfade (temporär) |
ldd -v <prog> | Versionsinfo der Symbole |
Konfig: /etc/ld.so.conf (Suchpfade) inkl. /etc/ld.so.conf.d/*.conf · Cache: /etc/ld.so.cache (binär, von ldconfig erzeugt)
Namenskonvention
libname.so.MAJOR.MINOR — z.B. libc.so.6. Symlinks verbinden die "SONAME" mit der konkreten Version.
Statisch gelinkte Programme brauchen keine shared libs → ldd zeigt "not a dynamic executable".
Paketmanagement 102.3 – 102.4
Debian-Welt: dpkg/apt · RedHat-Welt: rpm/yum/dnf
Debian: dpkg (low-level)
| Befehl | Zweck |
dpkg -i paket.deb | installieren (keine Abhängigkeitsauflösung!) |
dpkg -r paket | entfernen, Konfig bleibt |
dpkg -P paket | purge – auch Konfig entfernen |
dpkg -l [muster] | installierte Pakete auflisten |
dpkg -L paket | Dateien eines Pakets anzeigen |
dpkg -S /pfad/datei | zu welchem Paket gehört diese Datei |
dpkg --configure -a | abgebrochene Installationen fortsetzen |
dpkg-reconfigure paket | Paket neu konfigurieren |
Konfig-Verzeichnis dpkg: /etc/dpkg/ (u.a. dpkg.cfg) · Datenbank: /var/lib/dpkg/ (status, available)
Debian: APT (high-level, löst Abhängigkeiten)
| Befehl | Zweck |
apt update | Paketlisten von Repos aktualisieren |
apt upgrade | installierte Pakete aktualisieren |
apt full-upgrade | upgrade + darf Pakete entfernen/installieren |
apt install paket | installieren |
apt remove paket | entfernen, Konfig bleibt |
apt purge paket | entfernen inkl. Konfig |
apt autoremove | verwaiste Abhängigkeiten löschen |
apt search begriff | Pakete suchen |
apt show paket | Paketdetails |
apt-cache policy paket | verfügbare/installierte Version + Priorität |
apt-get/apt-cache | ältere Skript-taugliche Vorgänger von apt |
Repos: /etc/apt/sources.list + /etc/apt/sources.list.d/*.list · Zwischenspeicher: /var/cache/apt/archives/ (.deb-Dateien) · Präferenzen/Pinning: /etc/apt/preferences.d/
RedHat: RPM (low-level)
| Befehl | Zweck |
rpm -i paket.rpm | installieren |
rpm -U paket.rpm | upgrade (installiert auch neu, falls nicht vorhanden) |
rpm -F paket.rpm | freshen – nur updaten wenn bereits installiert |
rpm -e paket | entfernen (erase) |
rpm -q paket | ist installiert? Version anzeigen |
rpm -qa | alle installierten Pakete |
rpm -qi paket | Infos |
rpm -ql paket | Dateiliste des Pakets |
rpm -qf /pfad | welches Paket besitzt die Datei |
rpm -qp --info paket.rpm | Infos einer nicht installierten .rpm-Datei |
rpm -Va | alle Pakete auf Integrität prüfen (verify) |
rpm --import KEY | GPG-Key importieren |
Datenbank: /var/lib/rpm/
RedHat: YUM / DNF (high-level)
| Befehl | Zweck |
yum install paket | installieren (dnf: gleiche Syntax) |
yum remove paket | entfernen |
yum update | Pakete aktualisieren |
yum search begriff | suchen |
yum list installed | installierte Pakete |
yum info paket | Details |
yum provides /pfad | welches Paket liefert die Datei |
yum history | Transaktionshistorie (Rollback möglich) |
yum clean all | Cache leeren |
Repos: /etc/yum.repos.d/*.repo · Hauptkonfig: /etc/yum.conf bzw. /etc/dnf/dnf.conf
Merkhilfe
dpkg ≈ rpm (installiert einzelne Datei, kennt keine Repos) · apt ≈ yum/dnf (kennt Repos, löst Abhängigkeiten automatisch auf)
Virtualisierung & Linux als Gast 102.5
Konzepte, keine tiefen Details – LPI 101 fragt Grundwissen ab
Begriffe
- Hypervisor Typ 1 (bare-metal) – läuft direkt auf Hardware, z.B. KVM, Xen, ESXi
- Hypervisor Typ 2 (hosted) – läuft in einem Betriebssystem, z.B. VirtualBox, VMware Workstation
- Vollvirtualisierung – Gast merkt nicht, dass er virtualisiert wird (CPU-Extensions Intel VT-x/AMD-V)
- Paravirtualisierung – Gast-Kernel weiß Bescheid, angepasste Treiber (schneller, weniger kompatibel)
- Container (LXC, Docker) – teilen sich den Host-Kernel, kein eigener Kernel, leichtgewichtig
Erkennungsmerkmale eines Gastes
dmesg | grep -i virtual
systemd-detect-virt
lscpu # Zeile "Hypervisor vendor"
cat /proc/cpuinfo | grep hypervisor
Praktische Punkte
- Virtuelle Disks:
qcow2 (KVM, unterstützt Snapshots), vmdk (VMware), vdi (VirtualBox)
- Guest Additions / Tools verbessern Grafik, Zeitsync, Zwischenablage, Shared Folders
- Zeit in VMs: Uhr sollte per NTP synchronisiert werden (Drift durch Pausieren/Snapshot)
- Ressourcenzuteilung: virtuelle CPUs, RAM, Storage werden vom Host verwaltet/begrenzt
Kommandozeile & Dateimanagement 103.1 – 103.3
Shell-Grundlagen
| Element | Bedeutung |
$VAR / ${VAR} | Variable auslesen |
export VAR=wert | Variable in Kindprozesse vererben |
echo $PATH | Suchpfad für Befehle |
alias ll='ls -la' | Kurzbefehl definieren |
unalias ll | Alias löschen |
history | Befehlsverlauf, !n ruft Zeile n erneut auf, !! letzter Befehl |
type befehl | ist es Alias, builtin, oder Datei? |
which befehl | Pfad eines Befehls im $PATH |
man befehl / man -k stichwort | Handbuchseite / Volltextsuche in Kurzbeschreibungen |
Quoting: 'einfach' = alles wörtlich · "doppelt" = Variablen/Backticks werden ausgewertet · \ escaped ein einzelnes Zeichen
Dateimanagement – Basis
| Befehl | wichtige Optionen |
cp | -r rekursiv, -p Attribute erhalten, -a Archivmodus, -i nachfragen, -v verbose |
mv | -i nachfragen, -n nie überschreiben |
rm | -r rekursiv, -f force (keine Nachfrage), -i nachfragen |
mkdir | -p Elternverzeichnisse mit anlegen |
rmdir | nur leere Verzeichnisse |
touch | Datei anlegen/Zeitstempel aktualisieren |
ls | -l lang, -a versteckte, -h human-readable, -t nach Zeit, -S nach Größe, -R rekursiv, -i Inode |
find | s.u. |
find – wichtigste Optionen
find /pfad -name "*.txt" # Name (case-sensitive)
find /pfad -iname "*.txt" # case-insensitive
find /pfad -type f|d|l # Datei/Verzeichnis/Symlink
find /pfad -size +10M # größer als 10 MB
find /pfad -mtime -7 # in letzten 7 Tagen geändert
find /pfad -mmin -30 # in letzten 30 Min. geändert
find /pfad -user max # Besitzer
find /pfad -perm 644 # exakte Rechte
find /pfad -exec rm {} \; # pro Treffer ausführen
find /pfad -exec rm {} + # gesammelt ausführen (schneller)
Archivierung & Komprimierung
| Befehl | Optionen |
tar | -c erstellen, -x extrahieren, -t Inhalt anzeigen, -v verbose, -f datei Archivdatei, -z gzip, -j bzip2, -J xz |
tar -czvf archiv.tar.gz ordner/ # erstellen mit gzip
tar -xzvf archiv.tar.gz # entpacken
tar -tzvf archiv.tar.gz # Inhalt auflisten ohne Entpacken
gzip/gunzip (.gz) · bzip2/bunzip2 (.bz2, besser komprimiert, langsamer) · xz/unxz (.xz, beste Kompression) · zip/unzip (.zip) · Option -k bei gzip/bzip2/xz behält Originaldatei
Textverarbeitung / Filter (103.2)
| Befehl | Zweck | wichtige Optionen |
cat | Dateien ausgeben/verketten, ignoriert Kodierung | cat a b > c zwei Dateien in eine neue umleiten, -A/--show-all Sonderzeichen sichtbar machen (^I Tab, $ Zeilenende) |
less/more | Pager, seitenweise Anzeige | less liest nicht die ganze Datei ein + hat Suche, more älter/muss ganze Datei laden; g/G = Anfang/Ende der Datei |
head/tail | Anfang/Ende einer Datei (Default: 10 Zeilen) | -n 5 erste/letzte 5 Zeilen, tail -f live mitverfolgen (neue Zeilen sofort anzeigen) |
cut | Felder/Zeichen aus jeder Zeile ausschneiden | -d Trennzeichen (Default: Tab), -f Feld(er) z.B. -f1,3 / -f2-4, -c Zeichenposition z.B. -c1-5, -b Byte-Position, --complement invertieren (alles außer den gewählten Feldern), --output-delimiter=';' Ausgabe-Trennzeichen ändern; kann Felder nicht umsortieren |
sort | Zeilen sortieren | -n numerisch, -r absteigend (reverse), -u unique (entfernt Duplikate), -k nach Spalte sortieren, -t Trennzeichen, -f ignoriert Groß/Klein, -o datei Ausgabe in Datei schreiben |
uniq | aufeinanderfolgende doppelte Zeilen zusammenfassen | -c Anzahl mitzählen, -d nur Duplikate anzeigen, -u nur Unikate anzeigen; Eingabe muss vorher sortiert sein (erkennt Duplikate nur direkt nebeneinander) |
wc | Wörter/Zeilen/Bytes zählen (word count) | -l Zeilen, -w Wörter, -c Bytes, -m Zeichen; ohne Optionen: "Zeilen Wörter Bytes Dateiname"; bei Eingabe über Pipe wird kein Dateiname mit ausgegeben |
tr | einzelne Zeichen ersetzen/löschen (Translate) | tr 'a-z' 'A-Z' Zeichenbereich ersetzen, -d Zeichen löschen, -s/--squeeze-repeats mehrfache Wiederholungen zusammenfassen, Zeichenklassen wie [:lower:], [:upper:]; liest nur von stdin, keine Dateien direkt |
sed | Stream Editor – zeilenweise, nicht-interaktiv | s/alt/neu/ ersetzt 1. Vorkommen je Zeile, s/alt/neu/g global (alle Vorkommen), -i in-place ändern (-i.bak mit Backup), -n '3,5p' nur bestimmte Zeilen ausgeben (mit p=print), d Zeilen löschen, y 1:1-Zeichenersetzung (wie tr), a Text einfügen, q Verarbeitung nach Zeile n abbrechen, -e mehrere Ausdrücke kombinieren, -f skript Anweisungen aus Datei; Adressierung: Zeilenzahl, Bereich 1,4, $=letzte Zeile, oder Regex /Muster/; anderer Trenner als / möglich, z.B. s,alt,neu, |
awk | spaltenbasierte Textverarbeitung / Mini-Programmiersprache | '{print $1}' Spalte 1 ausgeben, -F: Feldtrenner setzen, $0 ganze Zeile, $NF letztes Feld, NR aktuelle Zeilennummer, NF Feldanzahl der aktuellen Zeile |
paste | Zeilen mehrerer Dateien nebeneinanderstellen | -d ',' Trennzeichen ändern (z.B. für CSV); Eingabedateien dürfen unterschiedlich viele Zeilen haben |
join | zwei (sortierte) Dateien über gemeinsame Spalte verknüpfen (SQL-Join-ähnlich) | |
tac | Datei zeilenweise rückwärts ausgeben ("cat" rückwärts) | |
nl | Zeilen nummerieren | -ba nummeriert auch leere Zeilen (Default: keine leeren Zeilen mitgezählt) |
fold | Zeilen auf feste Breite umbrechen | |
fmt | Textabsätze neu umbrechen/formatieren | |
expand/unexpand | Tabs ↔ Leerzeichen umwandeln | |
od | Octal Dump – Datei in Oktal/Hex/ASCII anzeigen | -x hexadezimal, -b oktal, -c ASCII-Zeichen |
hexdump | Hexdump, dezimal/oktal/hex steuerbar | -C zeigt zusätzlich ASCII-Spalte, -v zeigt auch wiederholte Zeilen einzeln an (sonst mit * abgekürzt) |
split | Datei in mehrere Teile zerlegen (auch binär) | -l 5000 Zeilen pro Teil (Default: 1000), -b 5000 Bytes pro Teil |
diff | Textdateien vergleichen | -u unified Format, -r Verzeichnisse rekursiv vergleichen; cmp = Binärvergleich Byte für Byte (Alternative für Nicht-Textdateien) |
patch | diff-Ausgabe (Patch-Datei) auf eine Datei anwenden | |
seq | Zahlenfolge erzeugen | seq 6 gibt 1–6 untereinander aus, -s ' ' Separator statt Zeilenumbruch, seq 1 5 20 = Start Schrittweite Ende (hier: 1,6,11,16) |
md5sum / sha256sum / sha512sum | Prüfsummen erzeugen/prüfen | sha512sum datei > SUMS Prüfsumme in Datei schreiben, sha512sum -c SUMS Datei anhand Prüfsumme verifizieren |
# cut Beispiel: 3. Spalte einer CSV mit ; als Trenner
cut -d';' -f3 datei.csv
# sort + uniq: häufigste Werte zählen
sort datei.txt | uniq -c | sort -rn
Kompression (Ergänzung)
gzip/bzip2/xz komprimieren die Originaldatei und ersetzen sie (löschen das Original); -d entpackt (bzw. gunzip/bunzip2/unxz); zcat/bzcat/xzcat zeigen den Inhalt an, ohne zu entpacken. xz erzielt die beste Kompression, ist aber am langsamsten.
Streams, Pipes & Redirects 103.4
| Nr. | Stream | Standard |
| 0 | stdin | Tastatur |
| 1 | stdout | Bildschirm |
| 2 | stderr | Bildschirm |
befehl > datei # stdout überschreiben
befehl >> datei # stdout anhängen
befehl 2> fehler.log # stderr in Datei
befehl > out 2>&1 # stdout UND stderr in dieselbe Datei
befehl &> alles.log # Kurzform für > datei 2>&1 (bash)
befehl < eingabe.txt # stdin aus Datei
befehl1 | befehl2 # Pipe: stdout1 → stdin2
befehl 2> /dev/null # Fehlermeldungen verwerfen
Praktische Kombinationen
ls -l /etc | tee liste.txt # tee: Ausgabe gleichzeitig anzeigen UND speichern
ls -l /etc | tee -a liste.txt # -a anhängen statt überschreiben
cmd1 && cmd2 # cmd2 nur wenn cmd1 erfolgreich (Exit 0)
cmd1 || cmd2 # cmd2 nur wenn cmd1 fehlschlägt
cmd1 ; cmd2 # beide nacheinander, unabhängig vom Erfolg
xargs # stdin in Argumente eines Befehls umwandeln
find . -name "*.log" | xargs rm # pro Fund rm aufrufen
$? – Exit Code
Nach jedem Befehl gibt echo $? den Rückgabewert aus: 0 = Erfolg, ungleich 0 = Fehler.
Prozesse & Jobs 103.5 – 103.6
Prozesse anzeigen
| Befehl | Optionen |
ps aux | BSD-Syntax: alle Prozesse aller User, mit %CPU/%MEM |
ps -ef | UNIX-Syntax: alle Prozesse, mit PPID |
ps -ef --forest | Baumansicht der Prozesshierarchie |
top / htop | dynamische Live-Ansicht (k killen, r renice, q beenden) |
pgrep name | PID(s) per Namen finden |
pstree | Prozessbaum grafisch |
Prozesse beenden
kill PID # SIGTERM (15) – sauber beenden, abfangbar
kill -9 PID # SIGKILL – sofort, nicht abfangbar
kill -1 PID # SIGHUP – oft: Konfig neu laden
kill -l # alle Signalnamen auflisten
killall firefox # nach Prozessname statt PID
pkill -u max # alle Prozesse eines Users beenden
| Signal | Nummer | Bedeutung |
| SIGHUP | 1 | Hangup – oft "Konfig neu laden" |
| SIGINT | 2 | entspricht Strg+C |
| SIGKILL | 9 | hart beenden, kann nicht abgefangen werden |
| SIGTERM | 15 | Standard bei kill, bittet um sauberes Beenden |
| SIGSTOP | 19 | anhalten (nicht abfangbar) |
| SIGCONT | 18 | fortsetzen |
Jobsteuerung (Vordergrund/Hintergrund)
befehl & # im Hintergrund starten
Strg+Z # laufenden Job anhalten (Vordergrund → stopped)
jobs -l # Hintergrundjobs dieser Shell auflisten
fg %1 # Job 1 in den Vordergrund holen
bg %1 # angehaltenen Job im Hintergrund fortsetzen
disown %1 # Job von der Shell "abkoppeln"
nohup befehl & # läuft weiter, auch wenn Terminal/Shell schließt
Priorität (nice / renice)
- Nice-Werte reichen von -20 (höchste Priorität) bis +19 (niedrigste)
- Standard beim Start:
0
- Nur root darf negative (höhere) Prioritäten vergeben
nice -n 10 befehl # mit niedrigerer Priorität starten
renice -n 5 -p 1234 # Priorität eines laufenden Prozesses ändern
renice 5 1234 # ältere Syntax, gleiche Wirkung
Prozesse im Hintergrund als Daemon prüfen
uptime – Load Average (1/5/15 Min) · free -h – RAM/Swap · vmstat – Systemstatistik · /proc/<pid>/ – Details zu einzelnem Prozess (cmdline, status, fd)
Suchen & Reguläre Ausdrücke 103.7
grep
| Option | Bedeutung |
-i | Groß-/Kleinschreibung ignorieren |
-v | invertieren – Zeilen OHNE Treffer |
-r / -R | rekursiv durch Verzeichnisse |
-n | Zeilennummer mit ausgeben |
-c | nur Anzahl der Treffer |
-l | nur Dateinamen mit Treffer |
-w | ganzes Wort muss matchen |
-E | Extended Regex (= egrep) |
-o | nur den Treffer ausgeben, nicht ganze Zeile |
-A3/-B3/-C3 | 3 Zeilen nach/vor/um den Treffer mitzeigen |
Reguläre Ausdrücke (BRE/ERE)
| Zeichen | Bedeutung |
. | ein beliebiges Zeichen |
* | vorheriges Zeichen 0-n mal |
+ | vorheriges Zeichen 1-n mal (nur ERE / grep -E) |
? | vorheriges Zeichen 0-1 mal (nur ERE) |
^ | Zeilenanfang |
$ | Zeilenende |
[abc] | Zeichenklasse: a, b oder c |
[^abc] | negierte Zeichenklasse |
[0-9], [a-z] | Bereich |
{2,4} | 2 bis 4 Wiederholungen (ERE, oder \{2,4\} in BRE) |
(abc\|xyz) | Alternative – Klammern in ERE ohne Backslash: (abc|xyz) |
\d, \w, \s | nur in PCRE (grep -P): Ziffer / Wortzeichen / Whitespace |
grep -E '^root:.*:0:0:' /etc/passwd
grep -rn 'TODO' ./src
grep -c 'error' logfile.txt
egrep '(warning|error)' logfile.txt
BRE vs. ERE
Normales grep nutzt Basic RE: + ? | ( ) müssen escaped werden (\+). grep -E/egrep nutzt Extended RE: diese Zeichen wirken direkt.
vi / vim Editor 103.8
Modi
- Normal-Modus – Start, Navigation, Befehle (Esc zum Zurückkehren)
- Insert-Modus – Text eingeben: i vor Cursor, a nach Cursor, o neue Zeile darunter, O darüber
- Command-/Ex-Modus – : gefolgt vom Befehl
- Visual-Modus – v zeichenweise, V zeilenweise, Strg+v blockweise markieren
Navigation (Normal-Modus)
| Taste | Bedeutung |
h j k l | links, runter, hoch, rechts |
w / b | ein Wort vor / zurück |
0 / $ | Zeilenanfang / Zeilenende |
gg / G | zum Dateianfang / -ende |
:n | zu Zeile n springen |
Strg+F / Strg+B | Seite vor / zurück |
Editieren
| Taste | Bedeutung |
x | Zeichen löschen |
dd | Zeile löschen (ausschneiden) |
dw | Wort löschen |
yy | Zeile kopieren (yank) |
p / P | einfügen nach / vor Cursor |
u | rückgängig |
Strg+r | wiederholen (redo) |
. | letzten Befehl wiederholen |
5dd | Zahl vor Befehl = Wiederholung, hier 5 Zeilen löschen |
Suchen & Ersetzen
/suchtext # vorwärts suchen, n = nächstes, N = vorheriges
?suchtext # rückwärts suchen
:%s/alt/neu/g # in der ganzen Datei ersetzen
:s/alt/neu/g # nur aktuelle Zeile
:5,10s/alt/neu/g # nur Zeilen 5-10
:%s/alt/neu/gc # mit Bestätigung pro Treffer
Speichern & Beenden
| Befehl | Bedeutung |
:w | speichern |
:w datei | unter neuem Namen speichern |
:q | beenden (nur wenn keine Änderungen) |
:q! | beenden ohne zu speichern, Änderungen verwerfen |
:wq / :x / ZZ | speichern und beenden |
Partitionen & Dateisysteme 104.1 – 104.2
Partitionierung
| Befehl | Zweck |
fdisk -l | Partitionstabellen anzeigen (MBR & GPT lesbar) |
fdisk /dev/sda | interaktiv partitionieren (MBR, mit GPT-Unterstützung) |
gdisk /dev/sda | interaktiv, speziell für GPT |
parted | Partitionierung, unterstützt auch Skript-Modus, größere Platten |
partprobe | Kernel über geänderte Partitionstabelle informieren |
lsblk -f | Partitionen + Dateisystemtyp + Mountpoint |
blkid | UUID und Dateisystemtyp aller Blockgeräte |
MBR vs. GPT
MBR: max. 4 primäre Partitionen (oder 3 primär + 1 erweiterte mit logischen), max. 2 TiB. GPT: bis zu 128 Partitionen, keine 2-TiB-Grenze, Redundanz durch Backup-Header.
Dateisysteme erstellen
mkfs.ext4 /dev/sda1
mkfs -t xfs /dev/sda1
mkswap /dev/sda2 # Swap-Bereich anlegen
swapon /dev/sda2 # Swap aktivieren
swapoff /dev/sda2 # Swap deaktivieren
swapon -s # aktive Swap-Bereiche anzeigen
| Dateisystem | Merkmale |
| ext2 | kein Journaling |
| ext3/ext4 | Journaling, ext4 = Standard bei vielen Distros, unterstützt große Dateien |
| xfs | Journaling, gut für große Dateien, kann nicht verkleinert werden |
| btrfs | Copy-on-Write, Snapshots, eingebautes RAID |
| vfat/FAT32 | keine Rechte/Journaling, kompatibel (USB-Sticks, EFI-Partition) |
| swap | kein Dateisystem im klassischen Sinn – Auslagerungsspeicher |
Dateisystem-Integrität
| Befehl | Zweck |
fsck /dev/sda1 | Dateisystem prüfen/reparieren (nur auf unmounted FS!) |
fsck -f | Prüfung erzwingen, auch wenn "clean" |
fsck -y | alle Fragen automatisch mit "yes" beantworten |
e2fsck | fsck speziell für ext2/3/4 |
tune2fs -l /dev/sda1 | ext-Dateisystem-Parameter anzeigen |
tune2fs -L label | Label setzen |
dumpe2fs | Superblock- und Gruppendetails eines ext-FS |
xfs_repair | XFS reparieren |
badblocks | Datenträger auf defekte Blöcke prüfen |
Speicherplatz & Inodes
df -h # Speicherplatz pro Dateisystem, human-readable
df -i # Inode-Auslastung
du -sh ordner/ # Größe eines Verzeichnisses summiert
du -h --max-depth=1 # Größe pro Unterordner, 1 Ebene tief
Mounten & /etc/fstab 104.3
| Befehl | Zweck |
mount /dev/sda1 /mnt | manuell einhängen |
mount -t ext4 /dev/sda1 /mnt | Dateisystemtyp explizit angeben |
mount -o ro,noexec /dev/sda1 /mnt | mit Mount-Optionen |
mount -a | alles aus /etc/fstab mounten |
umount /mnt oder umount /dev/sda1 | aushängen |
umount -l /mnt | lazy unmount – löst später, wenn nicht mehr "busy" |
mount (ohne Argumente) | alle aktuell gemounteten Dateisysteme anzeigen |
findmnt | übersichtliche Baumansicht der Mounts |
lsof /mnt oder fuser -m /mnt | wer blockiert einen Mountpoint ("device busy") |
/etc/fstab – Aufbau (6 Spalten)
UUID=xxxx-xxxx / ext4 defaults 0 1
/dev/sdb1 /data xfs defaults,noatime 0 2
/swapfile none swap sw 0 0
| Spalte | Bedeutung |
| 1 | Gerät (Device, UUID oder LABEL) |
| 2 | Mountpoint |
| 3 | Dateisystemtyp |
| 4 | Mount-Optionen (kommagetrennt) |
| 5 | dump-Flag: 1 = sichern, 0 = ignorieren (fast immer 0) |
| 6 | fsck-Reihenfolge: 0 = nicht prüfen, 1 = zuerst (nur root-FS), 2 = danach |
wichtige Mount-Optionen
| Option | Bedeutung |
ro / rw | nur lesen / lesen+schreiben |
noexec | Programme dort dürfen nicht ausgeführt werden |
nosuid | SUID/SGID-Bits werden ignoriert |
nodev | Gerätedateien darauf werden ignoriert |
noatime | Zugriffszeit nicht bei jedem Lesen aktualisieren (Performance) |
defaults | = rw,suid,dev,exec,auto,nouser,async |
auto / noauto | bei mount -a einbinden oder nicht |
user / nouser | dürfen normale User mounten |
Wechseldatenträger/Removable Media typischerweise unter /media/, temporäre eigene Mounts unter /mnt/
Dateizugriffsrechte & Eigentümer 104.4 / 105.5
Rechte lesen
-rwxr-xr-- 1 max devs 4096 Aug 25 10:00 script.sh
│└┬┘└┬┘└┬┘
│ │ │ └─ other: r-- (4)
│ │ └──── group: r-x (5)
│ └─────── owner: rwx (7)
└───────── Dateityp: - Datei, d Verzeichnis, l Symlink
| Wert | Datei | Verzeichnis |
| r (4) | lesen | Inhalt (Namen) auflisten |
| w (2) | schreiben | Dateien anlegen/löschen |
| x (1) | ausführen | hineinwechseln (cd), Datei-Metadaten lesen |
chmod
chmod 755 datei # oktal: rwxr-xr-x
chmod u+x,g-w datei # symbolisch: owner +x, group -w
chmod -R 644 ordner/ # rekursiv
chmod a+r datei # a = all (u+g+o)
Symbolische chmod-Syntax
| Wer | Aktion | Recht |
| u (user/owner) | + hinzufügen | r |
| g (group) | - entfernen | w |
| o (other) | = exakt setzen | x |
| a (all = ugo) | | |
chown / chgrp
chown max datei # Besitzer ändern
chown max:devs datei # Besitzer + Gruppe
chown :devs datei # nur Gruppe ändern
chown -R max:devs ordner/ # rekursiv
chgrp devs datei # nur Gruppe (Alternative zu chown :group)
Sonderrechte: SUID, SGID, Sticky Bit
| Bit | Oktal | Symbol | Wirkung |
| SUID | 4000 | s statt x bei owner (z.B. -rwsr-xr-x) | Datei läuft mit Rechten des Besitzers, nicht des Aufrufers (z.B. /usr/bin/passwd) |
| SGID | 2000 | s statt x bei group | bei Datei: läuft mit Gruppenrechten; bei Verzeichnis: neue Dateien erben die Gruppe des Verzeichnisses |
| Sticky Bit | 1000 | t statt x bei other (z.B. drwxrwxrwt) | in einem Verzeichnis dürfen User nur eigene Dateien löschen (z.B. /tmp) |
chmod 4755 datei # SUID setzen
chmod u+s datei # SUID symbolisch
chmod 2775 ordner/ # SGID auf Verzeichnis
chmod 1777 /tmp # klassisches Sticky-Bit Beispiel
umask
Bestimmt, welche Rechte bei neuen Dateien/Verzeichnissen standardmäßig entzogen werden.
umask # aktuellen Wert anzeigen, z.B. 0022
umask 027 # neuen Wert setzen (nur für diese Shell-Session)
# Standardrechte: Dateien 666, Verzeichnisse 777
# tatsächliche Rechte = Standard MINUS umask
# Beispiel umask 022: Datei 666-022=644, Verzeichnis 777-022=755
ACLs (erweiterte Rechte, optional)
getfacl datei
setfacl -m u:max:rw datei # zusätzlich User max rw geben
setfacl -x u:max datei # Eintrag entfernen
User & Gruppen – Basisdateien
| Datei | Inhalt |
| /etc/passwd | User: Name:x:UID:GID:Kommentar:Home:Shell |
| /etc/shadow | verschlüsselte Passwörter (nur root lesbar) |
| /etc/group | Gruppen: Name:x:GID:Mitglieder |
| /etc/gshadow | Gruppenpasswörter |