LPIC-1 101 Spickzettel

Kompakte Referenz zum Üben — Befehle, Parameter, Konfig-Pfade. Nach Themenblöcken sortiert.

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/DateiBedeutung
/boot/grub/grub.cfggenerierte Konfiguration – nicht von Hand editieren!
/etc/default/grubEinstellungen (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

BefehlZweck
lsmodgeladene 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
depmodAbhängigkeitsdatei neu erzeugen (modules.dep)
uname -rlaufende Kernelversion

Modul-Konfiguration (Autoload/Blacklist): /etc/modprobe.d/*.conf, Beispiel blacklist nouveau

Hardware erkennen (101.1)

BefehlZweck
lspciPCI-Geräte
lsusbUSB-Geräte
lscpuCPU-Infos
lsblkBlockgeräte/Partitionen als Baum
dmesgKernel-Ringpuffer, u.a. Hardware-Erkennung beim Boot
lshwausfü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
RunlevelBedeutungsystemd Target
0Halt / Shutdownpoweroff.target
1 / SSingle User / Rescuerescue.target
2Multiuser ohne Netzwerk (Debian: mit)multi-user.target
3Multiuser, Netzwerk, kein GUImulti-user.target
5Multiuser + grafisches Logingraphical.target
6Rebootreboot.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

BefehlZweck
ldd <programm>zeigt benötigte shared libs + ob gefunden
ldconfigLibrary-Cache neu aufbauen nach Änderungen
ldconfig -paktuellen Cache-Inhalt anzeigen
ldconfig -vausführlich, zeigt jede Bibliothek
LD_LIBRARY_PATHUmgebungsvariable, 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)

BefehlZweck
dpkg -i paket.debinstallieren (keine Abhängigkeitsauflösung!)
dpkg -r paketentfernen, Konfig bleibt
dpkg -P paketpurge – auch Konfig entfernen
dpkg -l [muster]installierte Pakete auflisten
dpkg -L paketDateien eines Pakets anzeigen
dpkg -S /pfad/dateizu welchem Paket gehört diese Datei
dpkg --configure -aabgebrochene Installationen fortsetzen
dpkg-reconfigure paketPaket 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)

BefehlZweck
apt updatePaketlisten von Repos aktualisieren
apt upgradeinstallierte Pakete aktualisieren
apt full-upgradeupgrade + darf Pakete entfernen/installieren
apt install paketinstallieren
apt remove paketentfernen, Konfig bleibt
apt purge paketentfernen inkl. Konfig
apt autoremoveverwaiste Abhängigkeiten löschen
apt search begriffPakete suchen
apt show paketPaketdetails
apt-cache policy paketverfü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)

BefehlZweck
rpm -i paket.rpminstallieren
rpm -U paket.rpmupgrade (installiert auch neu, falls nicht vorhanden)
rpm -F paket.rpmfreshen – nur updaten wenn bereits installiert
rpm -e paketentfernen (erase)
rpm -q paketist installiert? Version anzeigen
rpm -qaalle installierten Pakete
rpm -qi paketInfos
rpm -ql paketDateiliste des Pakets
rpm -qf /pfadwelches Paket besitzt die Datei
rpm -qp --info paket.rpmInfos einer nicht installierten .rpm-Datei
rpm -Vaalle Pakete auf Integrität prüfen (verify)
rpm --import KEYGPG-Key importieren

Datenbank: /var/lib/rpm/

RedHat: YUM / DNF (high-level)

BefehlZweck
yum install paketinstallieren (dnf: gleiche Syntax)
yum remove paketentfernen
yum updatePakete aktualisieren
yum search begriffsuchen
yum list installedinstallierte Pakete
yum info paketDetails
yum provides /pfadwelches Paket liefert die Datei
yum historyTransaktionshistorie (Rollback möglich)
yum clean allCache 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

ElementBedeutung
$VAR / ${VAR}Variable auslesen
export VAR=wertVariable in Kindprozesse vererben
echo $PATHSuchpfad für Befehle
alias ll='ls -la'Kurzbefehl definieren
unalias llAlias löschen
historyBefehlsverlauf, !n ruft Zeile n erneut auf, !! letzter Befehl
type befehlist es Alias, builtin, oder Datei?
which befehlPfad eines Befehls im $PATH
man befehl / man -k stichwortHandbuchseite / Volltextsuche in Kurzbeschreibungen

Quoting: 'einfach' = alles wörtlich · "doppelt" = Variablen/Backticks werden ausgewertet · \ escaped ein einzelnes Zeichen

Dateimanagement – Basis

Befehlwichtige 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
rmdirnur leere Verzeichnisse
touchDatei anlegen/Zeitstempel aktualisieren
ls-l lang, -a versteckte, -h human-readable, -t nach Zeit, -S nach Größe, -R rekursiv, -i Inode
finds.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

BefehlOptionen
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)

BefehlZweckwichtige Optionen
catDateien ausgeben/verketten, ignoriert Kodierungcat a b > c zwei Dateien in eine neue umleiten, -A/--show-all Sonderzeichen sichtbar machen (^I Tab, $ Zeilenende)
less/morePager, seitenweise Anzeigeless liest nicht die ganze Datei ein + hat Suche, more älter/muss ganze Datei laden; g/G = Anfang/Ende der Datei
head/tailAnfang/Ende einer Datei (Default: 10 Zeilen)-n 5 erste/letzte 5 Zeilen, tail -f live mitverfolgen (neue Zeilen sofort anzeigen)
cutFelder/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
sortZeilen 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
uniqaufeinanderfolgende 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)
wcWö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
treinzelne 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
sedStream Editor – zeilenweise, nicht-interaktivs/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,
awkspaltenbasierte 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
pasteZeilen mehrerer Dateien nebeneinanderstellen-d ',' Trennzeichen ändern (z.B. für CSV); Eingabedateien dürfen unterschiedlich viele Zeilen haben
joinzwei (sortierte) Dateien über gemeinsame Spalte verknüpfen (SQL-Join-ähnlich)
tacDatei zeilenweise rückwärts ausgeben ("cat" rückwärts)
nlZeilen nummerieren-ba nummeriert auch leere Zeilen (Default: keine leeren Zeilen mitgezählt)
foldZeilen auf feste Breite umbrechen
fmtTextabsätze neu umbrechen/formatieren
expand/unexpandTabs ↔ Leerzeichen umwandeln
odOctal Dump – Datei in Oktal/Hex/ASCII anzeigen-x hexadezimal, -b oktal, -c ASCII-Zeichen
hexdumpHexdump, dezimal/oktal/hex steuerbar-C zeigt zusätzlich ASCII-Spalte, -v zeigt auch wiederholte Zeilen einzeln an (sonst mit * abgekürzt)
splitDatei in mehrere Teile zerlegen (auch binär)-l 5000 Zeilen pro Teil (Default: 1000), -b 5000 Bytes pro Teil
diffTextdateien vergleichen-u unified Format, -r Verzeichnisse rekursiv vergleichen; cmp = Binärvergleich Byte für Byte (Alternative für Nicht-Textdateien)
patchdiff-Ausgabe (Patch-Datei) auf eine Datei anwenden
seqZahlenfolge erzeugenseq 6 gibt 1–6 untereinander aus, -s ' ' Separator statt Zeilenumbruch, seq 1 5 20 = Start Schrittweite Ende (hier: 1,6,11,16)
md5sum / sha256sum / sha512sumPrüfsummen erzeugen/prüfensha512sum 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.StreamStandard
0stdinTastatur
1stdoutBildschirm
2stderrBildschirm
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

BefehlOptionen
ps auxBSD-Syntax: alle Prozesse aller User, mit %CPU/%MEM
ps -efUNIX-Syntax: alle Prozesse, mit PPID
ps -ef --forestBaumansicht der Prozesshierarchie
top / htopdynamische Live-Ansicht (k killen, r renice, q beenden)
pgrep namePID(s) per Namen finden
pstreeProzessbaum 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
SignalNummerBedeutung
SIGHUP1Hangup – oft "Konfig neu laden"
SIGINT2entspricht Strg+C
SIGKILL9hart beenden, kann nicht abgefangen werden
SIGTERM15Standard bei kill, bittet um sauberes Beenden
SIGSTOP19anhalten (nicht abfangbar)
SIGCONT18fortsetzen

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

OptionBedeutung
-iGroß-/Kleinschreibung ignorieren
-vinvertieren – Zeilen OHNE Treffer
-r / -Rrekursiv durch Verzeichnisse
-nZeilennummer mit ausgeben
-cnur Anzahl der Treffer
-lnur Dateinamen mit Treffer
-wganzes Wort muss matchen
-EExtended Regex (= egrep)
-onur den Treffer ausgeben, nicht ganze Zeile
-A3/-B3/-C33 Zeilen nach/vor/um den Treffer mitzeigen

Reguläre Ausdrücke (BRE/ERE)

ZeichenBedeutung
.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, \snur 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-Modusv zeichenweise, V zeilenweise, Strg+v blockweise markieren

Navigation (Normal-Modus)

TasteBedeutung
h j k llinks, runter, hoch, rechts
w / bein Wort vor / zurück
0 / $Zeilenanfang / Zeilenende
gg / Gzum Dateianfang / -ende
:nzu Zeile n springen
Strg+F / Strg+BSeite vor / zurück

Editieren

TasteBedeutung
xZeichen löschen
ddZeile löschen (ausschneiden)
dwWort löschen
yyZeile kopieren (yank)
p / Peinfügen nach / vor Cursor
urückgängig
Strg+rwiederholen (redo)
.letzten Befehl wiederholen
5ddZahl 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

BefehlBedeutung
:wspeichern
:w dateiunter neuem Namen speichern
:qbeenden (nur wenn keine Änderungen)
:q!beenden ohne zu speichern, Änderungen verwerfen
:wq / :x / ZZspeichern und beenden

Partitionen & Dateisysteme 104.1 – 104.2

Partitionierung

BefehlZweck
fdisk -lPartitionstabellen anzeigen (MBR & GPT lesbar)
fdisk /dev/sdainteraktiv partitionieren (MBR, mit GPT-Unterstützung)
gdisk /dev/sdainteraktiv, speziell für GPT
partedPartitionierung, unterstützt auch Skript-Modus, größere Platten
partprobeKernel über geänderte Partitionstabelle informieren
lsblk -fPartitionen + Dateisystemtyp + Mountpoint
blkidUUID 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
DateisystemMerkmale
ext2kein Journaling
ext3/ext4Journaling, ext4 = Standard bei vielen Distros, unterstützt große Dateien
xfsJournaling, gut für große Dateien, kann nicht verkleinert werden
btrfsCopy-on-Write, Snapshots, eingebautes RAID
vfat/FAT32keine Rechte/Journaling, kompatibel (USB-Sticks, EFI-Partition)
swapkein Dateisystem im klassischen Sinn – Auslagerungsspeicher

Dateisystem-Integrität

BefehlZweck
fsck /dev/sda1Dateisystem prüfen/reparieren (nur auf unmounted FS!)
fsck -fPrüfung erzwingen, auch wenn "clean"
fsck -yalle Fragen automatisch mit "yes" beantworten
e2fsckfsck speziell für ext2/3/4
tune2fs -l /dev/sda1ext-Dateisystem-Parameter anzeigen
tune2fs -L labelLabel setzen
dumpe2fsSuperblock- und Gruppendetails eines ext-FS
xfs_repairXFS reparieren
badblocksDatenträ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

BefehlZweck
mount /dev/sda1 /mntmanuell einhängen
mount -t ext4 /dev/sda1 /mntDateisystemtyp explizit angeben
mount -o ro,noexec /dev/sda1 /mntmit Mount-Optionen
mount -aalles aus /etc/fstab mounten
umount /mnt oder umount /dev/sda1aushängen
umount -l /mntlazy 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 /mntwer 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
SpalteBedeutung
1Gerät (Device, UUID oder LABEL)
2Mountpoint
3Dateisystemtyp
4Mount-Optionen (kommagetrennt)
5dump-Flag: 1 = sichern, 0 = ignorieren (fast immer 0)
6fsck-Reihenfolge: 0 = nicht prüfen, 1 = zuerst (nur root-FS), 2 = danach

wichtige Mount-Optionen

OptionBedeutung
ro / rwnur lesen / lesen+schreiben
noexecProgramme dort dürfen nicht ausgeführt werden
nosuidSUID/SGID-Bits werden ignoriert
nodevGerätedateien darauf werden ignoriert
noatimeZugriffszeit nicht bei jedem Lesen aktualisieren (Performance)
defaults= rw,suid,dev,exec,auto,nouser,async
auto / noautobei mount -a einbinden oder nicht
user / nouserdü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
WertDateiVerzeichnis
r (4)lesenInhalt (Namen) auflisten
w (2)schreibenDateien anlegen/löschen
x (1)ausführenhineinwechseln (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
WerAktionRecht
u (user/owner)+ hinzufügenr
g (group)- entfernenw
o (other)= exakt setzenx
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

BitOktalSymbolWirkung
SUID4000s statt x bei owner (z.B. -rwsr-xr-x)Datei läuft mit Rechten des Besitzers, nicht des Aufrufers (z.B. /usr/bin/passwd)
SGID2000s statt x bei groupbei Datei: läuft mit Gruppenrechten; bei Verzeichnis: neue Dateien erben die Gruppe des Verzeichnisses
Sticky Bit1000t 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

DateiInhalt
/etc/passwdUser: Name:x:UID:GID:Kommentar:Home:Shell
/etc/shadowverschlüsselte Passwörter (nur root lesbar)
/etc/groupGruppen: Name:x:GID:Mitglieder
/etc/gshadowGruppenpasswörter