Linux · Tag 1 · Kapitel 07 von 12

Dateisystem & FHS — der Verzeichnisbaum erklärt

Auf Linux ist alles eine Datei. Und alle Dateien hängen an einem einzigen Baum, dessen Aufbau seit 30 Jahren standardisiert ist: dem Filesystem Hierarchy Standard. Wer ihn kennt, findet sich auf jedem Linux-System sofort zurecht.

📚 Kapitel 07 ⏱️ ca. 35 min Lesezeit 🎯 Theorie
7.1

Was ist der Filesystem Hierarchy Standard?

Theorie

Der 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:

🗺️
Warum FHS gut für dich ist

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

  1. Trennung von „statisch“ und „variabel“. Software liegt in Bereichen, die sich nicht ständig ändern (/usr). Daten und Logs in Bereichen, die wachsen (/var).
  2. 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).
  3. Trennung von „Boot-relevant“ und „Rest“. Was schon vor dem Mount von /usr nutzbar sein muss, liegt direkt unter / (z.B. /bin, /sbin).
7.2

„Alles ist eine Datei“ — die Unix-Philosophie

Konzept

Eine 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“?

ArtSymbol bei ls -lBeispiel
Reguläre Datei (Text, Binary, …)-/etc/hosts
Verzeichnisd/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)pselten direkt sichtbar
Sockets/run/systemd/notify

Demonstration: die Tastatur als Datei lesen

bash
# /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
💡
Mentales Modell

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.

7.3

Der Linux-Verzeichnisbaum auf einen Blick

Übersicht

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

/ ← Wurzel (Root-Verzeichnis) │ ├── bin/ Standard-Benutzerbefehle (heute Symlink zu /usr/bin) ├── sbin/ System-Befehle für root (Symlink zu /usr/sbin) ├── boot/ Kernel, initramfs, GRUB ├── dev/ Gerätedateien (alles ist eine Datei!) ├── etc/ Systemweite Konfigurationsdateien ├── home/ User-Heimatverzeichnisse │ ├── admin/ │ └── meier/ ├── lib/ Bibliotheken (Symlink zu /usr/lib) ├── lib64/ 64-Bit-Bibliotheken (Symlink zu /usr/lib64) ├── media/ automatische Mountpoints für Wechselmedien ├── mnt/ manueller Mountpunkt ├── opt/ optionale „große“ Drittsoftware (z.B. /opt/oracle) ├── proc/ virtuelles Dateisystem — Prozesse & Kernel ├── root/ Home-Verzeichnis des root-Users ├── run/ Laufzeit-Daten (PIDs, Sockets) — wird beim Boot geleert ├── srv/ Daten von Servern (selten genutzt) ├── sys/ virtuelles Dateisystem — Hardware-Informationen ├── tmp/ temporäre Dateien — werden regelmäßig gelöscht ├── usr/ "Userland" — Programme, Bibliotheken, Doku │ ├── bin/ Programme für normale User │ ├── sbin/ Programme für Admins │ ├── lib/ Bibliotheken │ ├── local/ lokal installierte (nicht-Paketmanager-) Software │ └── share/ architektur-unabhängige Daten (Manpages, Icons) └── var/ veränderliche Daten — Logs, Caches, Datenbanken ├── log/ Systemlogs ├── www/ Webserver-Daten └── spool/ Druckaufträge, Mail, cron-Queues
⚠️
Achtung: //root

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

7.4

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

VerzeichnisFür wen?Wofür?
/binAlle UserBoot-essenzielle User-Befehle: ls, cp, cat, bash
/sbinRoot / AdminsBoot-essenzielle System-Befehle: mount, fsck, shutdown
/usr/binAlle UserSonstige User-Befehle: git, vim, python3
/usr/sbinRoot / AdminsSonstige Admin-Tools: nginx, useradd, dnf
🔗
Wussten Sie schon? — Warum es /bin UND /usr/bin gibt

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

7.5

/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

PfadWas steht drin?
/etc/passwdListe aller User-Accounts (öffentlich lesbar)
/etc/shadowVerschlüsselte Passwörter (nur root)
/etc/groupGruppen und ihre Mitglieder
/etc/hostnameName dieser Maschine
/etc/hostslokale Namensauflösung (vor DNS)
/etc/resolv.confDNS-Server-Konfiguration
/etc/fstabMount-Tabelle: was wird beim Boot gemountet?
/etc/sudoerswer darf was via sudo?
/etc/ssh/sshd_configSSH-Server-Einstellungen
/etc/systemd/systemd-Unit-Dateien (Dienste)
/etc/dnf/Paketmanager-Konfiguration
/etc/os-releaseWelche Distro und welche Version?
💡
Goldene Regel

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.

7.6

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

/home/admin/ ├── .bashrc ← Bash-Konfiguration (Aliase, PS1, …) ├── .bash_history ← Historie der Befehle ├── .bash_profile ← Login-Shell-Setup ├── .ssh/ ← SSH-Keys und known_hosts │ ├── id_ed25519 │ └── authorized_keys ├── .config/ ← Anwendungs-Configs (XDG-Standard) ├── Documents/ ├── Downloads/ └── projekte/
📁
Tilde — ~

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.

7.7

/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

PfadInhalt
/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
⚠️
Klassiker-Fehler: /var/log läuft voll

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

7.8

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

7.9

/opt vs. /usr/local — wohin mit eigener Software?

Detail

Wenn du Software installierst, die nicht aus dem Paketmanager kommt, hast du zwei traditionelle Orte:

PfadWofü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
💡
Faustregel

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.

7.10

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/sdaerste Festplatte (SATA/SCSI)
/dev/sda1erste Partition auf /dev/sda
/dev/nvme0n1erste NVMe-SSD
/dev/nulldie berühmte „Mülltonne“ — alles, was hineingeht, ist weg
/dev/zeroliefert unendlich viele Null-Bytes
/dev/randomkryptografisch sicherer Zufall
/dev/urandomschneller Zufall, für die meisten Zwecke ausreichend
/dev/tty1erste virtuelle Konsole
/dev/pts/0SSH/Terminal-Session

/proc — Prozess- und Kernel-Infos

/proc ist ein virtuelles Dateisystem (procfs), das den aktuellen Zustand von Prozessen und Kernel als „Dateien“ ausgibt:

bash
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:

bash
# 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
🧠
Wussten Sie schon?

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.

7.11

/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
⚠️
Vorsicht!

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

7.12

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

PfadWofü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.
bash
# Alle aktuell gemounteten Dateisysteme anzeigen
mount

# Übersichtlicher
df -h

# Tree-Ansicht der Mounts
findmnt
7.13

Mach mit: rein in den Baum

Praxis

Jetzt selbst schauen, bevor wir in Kapitel 8 mit Navigation richtig einsteigen. Tipp die Befehle ab — bitte nichts ändern, nur lesen.

bash
# 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
  1. Wofür steht das Akronym FHS und wozu ist es da?
  2. Erkläre die Unix-Philosophie „alles ist eine Datei“ in einem Satz.
  3. Was ist der Unterschied zwischen / und /root?
  4. Was steht in /etc?
  5. Warum gibt es /bin und /usr/bin — und was hat sich daran auf modernen Distros geändert?
  6. Was ist /proc und wo liegen die Dateien dort physisch?
  7. Welcher Unterschied besteht zwischen /tmp und /var/tmp?
  8. Wann nutzt man /opt, wann /usr/local?
  1. Filesystem Hierarchy Standard. Standardisiert, welche Verzeichnisse wofür da sind, sodass jede Linux-Distro ähnlich aufgebaut ist und Admins sich überall zurechtfinden.
  2. 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.
  3. / = Wurzel des gesamten Dateisystems. /root = Home-Verzeichnis speziell des Users „root“. Zwei unterschiedliche Dinge mit ähnlichem Namen.
  4. Systemweite Konfigurationsdateien (z.B. /etc/passwd, /etc/hosts, /etc/ssh/sshd_config).
  5. Historisch: / auf kleiner Boot-Disk, /usr auf großer Daten-Disk. Auf modernen Distros (Rocky 9, Fedora 17+, Ubuntu 20.04+) sind /bin, /sbin & Co. nur noch Symlinks nach /usr/bin usw. — der UsrMerge.
  6. /proc ist 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.
  7. /tmp ist meist tmpfs (im RAM) und wird beim Reboot komplett geleert. /var/tmp liegt auf Disk und übersteht Reboots, wird aber nach ca. 30 Tagen automatisch aufgeräumt.
  8. /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.