Was ist der Filesystem Hierarchy Standard?
TheorieDer Filesystem Hierarchy Standard (FHS) ist ein Dokument der Linux Foundation, das beschreibt, welches Verzeichnis wofür da ist — in welchem Ordner Konfigurationen liegen müssen, wohin Logs gehören, wo Benutzerprogramme installiert werden.
Die erste Version erschien 1994, die aktuelle (Version 3.0) ist von 2015. Praktisch alle Linux-Distributionen halten sich daran. Das hat einen großen Vorteil:
Wenn du auf eine fremde Linux-Maschine kommst (egal ob Debian, Rocky
oder Alpine), weißt du vor dem ersten Befehl, wo du suchen
musst: /etc für Configs, /var/log für Logs,
/home für User-Daten. Das ist ein riesiger Vorteil gegenüber
Windows, wo ein Programm seine Daten in C:\Programme, C:\ProgramData,
HKEY_LOCAL_MACHINE und %APPDATA% gleichzeitig ablegen kann.
Drei Leitprinzipien des FHS
- Trennung von „statisch“ und „variabel“. Software liegt in
Bereichen, die sich nicht ständig ändern (
/usr). Daten und Logs in Bereichen, die wachsen (/var). - Trennung von „shareable“ und „unshareable“. Dinge, die
mehrere Rechner per Netz teilen können (
/usr,/home) werden anders behandelt als reine Lokal-Daten (/etc,/var/run). - Trennung von „Boot-relevant“ und „Rest“. Was schon vor dem
Mount von
/usrnutzbar sein muss, liegt direkt unter/(z.B./bin,/sbin).
„Alles ist eine Datei“ — die Unix-Philosophie
KonzeptEine der radikalen Ideen aus den Bell Labs der 1970er war: auch Geräte und Kommunikationskanäle sollen wie Dateien aussehen. Damit kann man auf eine Festplatte, einen Drucker, eine USB-Maus, ja sogar auf das Netzwerk mit denselben Befehlen zugreifen wie auf eine Textdatei.
Was ist auf Linux alles eine „Datei“?
| Art | Symbol bei ls -l | Beispiel |
|---|---|---|
| Reguläre Datei (Text, Binary, …) | - | /etc/hosts |
| Verzeichnis | d | /etc |
| Symbolischer Link (Softlink) | l | /etc/os-release → ../usr/lib/os-release |
| Block-Device (Festplatte) | b | /dev/sda |
| Character-Device (Tastatur, Maus, Pipe) | c | /dev/tty1, /dev/null |
| Named Pipe (FIFO) | p | selten direkt sichtbar |
| Socket | s | /run/systemd/notify |
Demonstration: die Tastatur als Datei lesen
# /dev/random ist eine Datei voller Zufallszahlen
head -c 16 /dev/random | xxd
# /dev/null ist die berühmte "Mülltonne" — was rein geht, ist weg
echo "Geheim" > /dev/null
# /dev/zero liefert unendlich viele Null-Bytes
head -c 1024 /dev/zero | wc -c
Wenn du in Linux einen Drucker ansprichst, schreibst du in eine Datei
unter /dev/. Wenn du das Netzwerk konfigurierst, schreibst du in
eine Datei in /sys/class/net/. Das ist die große
Eleganz von Unix: ein Werkzeug-Set für viele Aufgaben.
Der Linux-Verzeichnisbaum auf einen Blick
ÜbersichtAlles unter Linux hängt an einer einzigen Wurzel: / (gesprochen
„Slash“ oder „Root“). Es gibt KEINE Laufwerksbuchstaben wie C: oder D:. Eine
zweite Festplatte wird einfach irgendwo in den Baum gemountet.
/ ≠ /rootDas ist eine der häufigsten Verwechslungen für Einsteiger:
/ ist das Root-Verzeichnis (die Wurzel
des Dateisystems). /root ist das Home-Verzeichnis
des Users „root“. Zwei völlig verschiedene Dinge mit ähnlichem Namen.
/bin · /sbin · /usr/bin · /usr/sbin
Detail
Diese vier Verzeichnisse beherbergen die ausführbaren Programme. Der Unterschied erklärt sich aus zwei Achsen: User vs. Admin und Boot-essenziell vs. Rest.
| Verzeichnis | Für wen? | Wofür? |
|---|---|---|
/bin | Alle User | Boot-essenzielle User-Befehle: ls, cp, cat, bash |
/sbin | Root / Admins | Boot-essenzielle System-Befehle: mount, fsck, shutdown |
/usr/bin | Alle User | Sonstige User-Befehle: git, vim, python3 |
/usr/sbin | Root / Admins | Sonstige Admin-Tools: nginx, useradd, dnf |
/bin UND /usr/bin gibtBei modernen Distros (Rocky 9, Fedora 17+, Ubuntu 20.04+) sind /bin,
/sbin, /lib, /lib64 nur noch
Symlinks nach /usr/bin, /usr/sbin,
/usr/lib, /usr/lib64. Das nennt sich
„UsrMerge“.
Historischer Grund: In den 1970ern war
/ auf einer kleinen, schnellen Disk, /usr auf einer
großen, langsamen Disk. Booten mit der schnellen Disk → essenzielle Tools in
/bin. Heute irrelevant — daher die Zusammenführung.
Auf Rocky 9 prüfe es mit ls -l / —
du wirst bin -> usr/bin sehen.
/etc — das Herz der Konfiguration
Detail
/etc (von et cetera, „und so weiter“) enthält
die systemweiten Konfigurationsdateien. Wenn du irgendwo auf
einem Linux-Server etwas konfigurieren willst, fängst du in
/etc an zu suchen.
Wichtige Dateien und Unterordner
| Pfad | Was steht drin? |
|---|---|
/etc/passwd | Liste aller User-Accounts (öffentlich lesbar) |
/etc/shadow | Verschlüsselte Passwörter (nur root) |
/etc/group | Gruppen und ihre Mitglieder |
/etc/hostname | Name dieser Maschine |
/etc/hosts | lokale Namensauflösung (vor DNS) |
/etc/resolv.conf | DNS-Server-Konfiguration |
/etc/fstab | Mount-Tabelle: was wird beim Boot gemountet? |
/etc/sudoers | wer darf was via sudo? |
/etc/ssh/sshd_config | SSH-Server-Einstellungen |
/etc/systemd/ | systemd-Unit-Dateien (Dienste) |
/etc/dnf/ | Paketmanager-Konfiguration |
/etc/os-release | Welche Distro und welche Version? |
Bevor du in /etc eine Datei änderst, mach ein Backup:
sudo cp /etc/datei /etc/datei.bak. Wenn du dich verkonfigurierst,
ist die Original-Datei einen Befehl weit weg.
/home und /root — wo die User wohnen
Detail
/home enthält die Heimatverzeichnisse
aller normalen User. Jeder User tn01 bekommt automatisch
/home/tn01/. Dort liegen seine Dateien, sein Browser-Profil,
seine Mailbox.
/root ist eine Ausnahme: das Home-Verzeichnis
des root-Users liegt direkt unter der Wurzel, nicht in
/home. Begründung: /home könnte ein gemountetes
Netzwerk-Volume sein (NFS, AD-Profile). Wenn der Mount fehlschlägt, soll root
sich trotzdem einloggen und reparieren können.
Was liegt im Home?
Typischerweise versteckte Konfigurationsdateien („Dotfiles“, beginnen mit Punkt) und sichtbare User-Ordner:
~Das Zeichen ~ ist ein Kürzel für „mein eigenes Home“.
cd ~ bringt dich direkt rein, cd ~/projekte ins
Projekte-Verzeichnis. ~admin wäre das Home von User admin.
/var — alles, was sich verändert
Detail
/var (von variable) ist der Container
für alle Daten, die sich während des laufenden Betriebs ändern.
Wenn dein System gerade einfriert, liegt der Fehler statistisch wahrscheinlich
in einem überlaufenden /var.
Wichtige Unterverzeichnisse
| Pfad | Inhalt |
|---|---|
/var/log/ | Systemlogs: messages, secure, journal/ |
/var/www/ | Webserver-Daten (Apache, nginx) |
/var/lib/ | persistenter Status von Diensten (z.B. /var/lib/mysql) |
/var/cache/ | regenerierbare Caches (dnf-Pakete, Browser-Cache) |
/var/spool/ | Warteschlangen: Druck, Mail, cron-Jobs |
/var/tmp/ | temporäre Dateien — anders als /tmp: überlebt Reboots |
/var/mail/ | Mailboxen lokaler User |
/var/log läuft vollWenn ein Dienst plötzlich extrem viele Logs schreibt (z.B. eine
DDoS-Attacke auf nginx), kann /var/log die Festplatte voll
machen und das System lahmlegen. Deshalb gehört /var in
Produktion auf eine eigene Partition — dann kann
es notfalls vollaufen ohne dass / davon betroffen ist.
/tmp — temporär heißt wirklich temporär
Detail
/tmp ist der Mülleimer für kurzlebige Daten.
Jeder User darf dort schreiben. Bei Rocky/RHEL ist /tmp ein
sogenanntes tmpfs — ein RAM-basiertes Dateisystem:
- Liegt im Arbeitsspeicher, nicht auf der Disk
- Wird beim Reboot vollständig geleert
- Standard-Größe: meist die Hälfte des verfügbaren RAM
- Schnell, weil RAM, aber begrenzt
# Anschauen ob /tmp tmpfs ist
findmnt /tmp
# Sieht etwa so aus:
# TARGET SOURCE FSTYPE OPTIONS
# /tmp tmpfs tmpfs rw,nosuid,nodev,size=...
/tmp vs. /var/tmp/tmp = kurzlebig, geht beim Reboot weg
(tmpfs).
/var/tmp = etwas länger lebig, übersteht
Reboots, wird aber auch irgendwann (~30 Tage) automatisch geleert.
/opt vs. /usr/local — wohin mit eigener Software?
Detail
Wenn du Software installierst, die nicht aus dem Paketmanager kommt, hast du zwei traditionelle Orte:
| Pfad | Wofür? | Beispiele |
|---|---|---|
/opt |
Große, geschlossene Komplettpakete einer Drittfirma, die ihren eigenen Ordner mitbringen | /opt/oracle, /opt/google/chrome, /opt/zoom |
/usr/local |
Selbst kompilierte Open-Source-Software, die sich in das normale
FHS-Schema einfügt (/usr/local/bin, /usr/local/lib, …) |
Eigene ./configure && make install-Builds |
Hat die Software ein klassisches bin/, lib/,
share/-Layout? → /usr/local. Ist sie
ein abgeschlossener Klumpen, der gerne in einem einzigen Verzeichnis lebt
(z.B. eine 2-GB-Java-Anwendung)? → /opt.
Die magischen Verzeichnisse: /dev, /proc, /sys
Faszinierend
Diese drei Verzeichnisse existieren auf der Disk gar nicht. Sie werden vom Kernel zur Laufzeit gefüllt — wie virtuelle Fenster ins Innere des Systems.
/dev — Gerätedateien
Jedes Gerät, das der Kernel kennt, hat eine Datei in /dev:
/dev/sda | erste Festplatte (SATA/SCSI) |
/dev/sda1 | erste Partition auf /dev/sda |
/dev/nvme0n1 | erste NVMe-SSD |
/dev/null | die berühmte „Mülltonne“ — alles, was hineingeht, ist weg |
/dev/zero | liefert unendlich viele Null-Bytes |
/dev/random | kryptografisch sicherer Zufall |
/dev/urandom | schneller Zufall, für die meisten Zwecke ausreichend |
/dev/tty1 | erste virtuelle Konsole |
/dev/pts/0 | SSH/Terminal-Session |
/proc — Prozess- und Kernel-Infos
/proc ist ein virtuelles Dateisystem (procfs), das den
aktuellen Zustand von Prozessen und Kernel als „Dateien“ ausgibt:
cat /proc/cpuinfo # alles über deine CPU
cat /proc/meminfo # alles über den RAM
cat /proc/version # Kernel-Version
cat /proc/uptime # wie lange läuft das System?
# Jeder Prozess hat ein Unterverzeichnis mit seiner PID:
ls /proc/1/ # alles über Prozess 1 (systemd)
cat /proc/1/cmdline # mit welchen Argumenten wurde systemd gestartet?
/sys — Hardware-Informationen
/sys (sysfs) zeigt die Hardware-Sicht des Kernels. Du kannst
z.B. einzelne CPU-Kerne aus- und einschalten:
# Block-Devices anschauen
ls /sys/block/
# Netzwerk-Interfaces
ls /sys/class/net/
# Aktueller CPU-Takt
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
Wenn du cat /proc/cpuinfo tippst, gibt es diese Datei
nirgendwo auf der Festplatte. Der Kernel erzeugt den Inhalt
in dem Moment, in dem du ihn anforderst — direkt aus seinen internen
Strukturen. Das ist die elegante Umsetzung von „alles ist eine Datei“ auf
Kernel-Internas.
/boot — Kernel und Bootloader
Detail
/boot enthält alles, was zum Starten des Systems
nötig ist:
- Kernel-Images (
vmlinuz-…) — der Linux-Kernel selbst - initramfs (
initramfs-…) — RAM-Disk mit Boot-Treibern - GRUB-Konfiguration (
grub2/) — Bootloader-Menü - auf UEFI-Systemen:
/boot/efi/mit EFI-Bootloadern
Wenn du /boot mit alten Kernel-Versionen vollmüllst (passiert
nach vielen Updates), bekommt das nächste Kernel-Update keinen Platz mehr und
schlägt fehl. Lösung: alte Kernels aufräumen mit sudo dnf
remove $(dnf repoquery --installonly --latest-limit=-2 -q).
/mnt und /media — Mounten von Devices
Detail
Linux kennt keine Laufwerksbuchstaben. Eine zweite Festplatte oder ein USB-Stick wird gemountet — also an einer Stelle in den Baum eingehängt. Zwei Standard-Punkte gibt es dafür:
| Pfad | Wofür? |
|---|---|
/media |
Automatisch gemountete Wechselmedien — USB-Stick, externe Disk, CD-ROM. Der Desktop hängt die Geräte dort ein. |
/mnt |
Manuell gemountete Filesysteme. Reserviert für temporäre Admin-Mounts:
mount /dev/sdb1 /mnt zum schnellen Datenrettungs-Job. |
# Alle aktuell gemounteten Dateisysteme anzeigen
mount
# Übersichtlicher
df -h
# Tree-Ansicht der Mounts
findmnt
Mach mit: rein in den Baum
PraxisJetzt selbst schauen, bevor wir in Kapitel 8 mit Navigation richtig einsteigen. Tipp die Befehle ab — bitte nichts ändern, nur lesen.
# Top-Level-Verzeichnisse ansehen
ls /
# Mit Long-Listing — siehst du die Symlinks (l) und Verzeichnisse (d)?
ls -l /
# Was ist in /etc?
ls /etc/
# Welche Distro läuft hier?
cat /etc/os-release
# Wer kann sich einloggen?
cat /etc/passwd
# Wie viel RAM hat das System?
cat /proc/meminfo | head
# Welche Disks sind angeschlossen?
ls /dev/sd* 2>/dev/null
ls /dev/nvme* 2>/dev/null
Kontrollfragen zum Kapitel
Selbst-Check- Wofür steht das Akronym FHS und wozu ist es da?
- Erkläre die Unix-Philosophie „alles ist eine Datei“ in einem Satz.
- Was ist der Unterschied zwischen
/und/root? - Was steht in
/etc? - Warum gibt es
/binund/usr/bin— und was hat sich daran auf modernen Distros geändert? - Was ist
/procund wo liegen die Dateien dort physisch? - Welcher Unterschied besteht zwischen
/tmpund/var/tmp? - Wann nutzt man
/opt, wann/usr/local?
- Filesystem Hierarchy Standard. Standardisiert, welche Verzeichnisse wofür da sind, sodass jede Linux-Distro ähnlich aufgebaut ist und Admins sich überall zurechtfinden.
- Auf Unix/Linux sind nicht nur Texte, sondern auch Geräte, Prozesse und Kommunikationskanäle als Dateien dargestellt — damit man sie mit denselben Werkzeugen lesen und schreiben kann.
/= Wurzel des gesamten Dateisystems./root= Home-Verzeichnis speziell des Users „root“. Zwei unterschiedliche Dinge mit ähnlichem Namen.- Systemweite Konfigurationsdateien (z.B.
/etc/passwd,/etc/hosts,/etc/ssh/sshd_config). - Historisch:
/auf kleiner Boot-Disk,/usrauf großer Daten-Disk. Auf modernen Distros (Rocky 9, Fedora 17+, Ubuntu 20.04+) sind/bin,/sbin& Co. nur noch Symlinks nach/usr/binusw. — der UsrMerge. /procist ein virtuelles Dateisystem (procfs), das vom Kernel zur Laufzeit erzeugt wird. Die Dateien dort liegen nicht auf der Disk, sondern werden bei jedem Zugriff aus den internen Kernel-Strukturen generiert./tmpist meist tmpfs (im RAM) und wird beim Reboot komplett geleert./var/tmpliegt auf Disk und übersteht Reboots, wird aber nach ca. 30 Tagen automatisch aufgeräumt./opt= große geschlossene Drittpakete mit eigenem Verzeichnis-Layout (z.B. Oracle)./usr/local= selbst kompilierte Open-Source-Software, die sich in das klassische bin/lib/share-Schema einpasst.