Zum Inhalt springen

Der Verzeichnisbaum

Windows gibt jedem Laufwerk einen Buchstaben: C: für die Systemplatte, D: für die zweite, E: für den USB-Stick. Linux macht das anders. Es gibt genau einen Verzeichnisbaum, und seine Wurzel heisst / (gesprochen «Slash» oder «Root»). Jede Platte, jede Partition, jeder USB-Stick und jede Netzwerkfreigabe wird irgendwo in diesen Baum eingehängt (englisch mount). Ein USB-Stick erscheint also nicht als E:, sondern zum Beispiel als Verzeichnis /media/anna/STICK.

Das zweite Prinzip: Alles ist eine Datei. Auch Geräte, laufende Prozesse und Kernel-Einstellungen erscheinen im Baum als Dateien. Deine erste Festplatte ist /dev/sda, der Zufallsgenerator ist /dev/urandom, und /proc/cpuinfo beschreibt deine CPU. Du kannst sie mit denselben Werkzeugen lesen wie eine Textdatei.

Hands-on: Schau dir drei Dateien an, die keine Dateien im klassischen Sinn sind.

Terminal-Fenster
head -5 /proc/cpuinfo
cat /proc/uptime
ls -l /dev/sda /dev/null

Die Zahl in /proc/uptime sind Sekunden seit dem Start. /dev/sda beginnt in der ls-Ausgabe mit b für block device; dazu mehr auf der nächsten Seite.

Damit sich alle Distributionen gleich anfühlen, legt der Filesystem Hierarchy Standard (FHS) fest, was wohin gehört. Die wichtigsten Verzeichnisse:

Verzeichnis Inhalt
/bin, /sbin Grundlegende Programme (ls, cp) und Systemprogramme für den Admin (fdisk, reboot). Heute Symlinks auf /usr/bin und /usr/sbin, siehe unten.
/boot Kernel und Bootloader (GRUB).
/dev Gerätedateien: Platten, Terminals, /dev/null.
/etc Systemweite Konfigurationsdateien, fast alles im Textformat.
/home Die Home-Verzeichnisse der Benutzer, etwa /home/anna.
/lib Bibliotheken und Kernel-Module. Ebenfalls ein Symlink auf /usr/lib.
/usr Der grösste Teil des Systems: Programme, Bibliotheken, Dokumentation. Nur lesend genutzt im Normalbetrieb.
/opt Zusätzliche, meist grosse Fremdsoftware in eigenem Ordner pro Programm.
/var Variable Daten: Logs (/var/log), Mail-Spool, Datenbanken, Webseiten (/var/www).
/tmp Temporäre Dateien, werden beim Neustart gelöscht. Jeder darf hier schreiben.
/proc Virtuell: Kernel und Prozesse als Dateien, existiert nur im Arbeitsspeicher.
/sys Virtuell: Hardware und Treiber als Dateien.
/media Automatisch eingehängte Wechselmedien (USB-Stick, DVD).
/mnt Leerer Mountpoint für manuelles, vorübergehendes Einhängen.
/srv Daten von Diensten, die der Server anbietet (Web, FTP), auf Ubuntu meist leer.
/root Home-Verzeichnis des Superusers root. Nicht mit / verwechseln.
flowchart TD
    root["/"] --> bin["bin → usr/bin"]
    root --> boot
    root --> dev
    root --> etc
    root --> home
    root --> usr
    root --> var
    root --> tmp
    root --> proc
    home --> anna["anna"]
    home --> ben["ben"]
    usr --> usrbin["bin"]
    usr --> usrlib["lib"]
    usr --> local
    var --> log
    var --> www
    etc --> fstab
    etc --> ssh

Hands-on: Lass dir die erste Ebene des Baums anzeigen. Du brauchst dafür find, das auf der letzten Seite dieses Moduls ausführlich kommt.

Terminal-Fenster
find / -maxdepth 1 -type d

Zerlegt: find ist der Befehl, / das Startverzeichnis, -maxdepth 1 steigt nur eine Ebene ab und -type d liefert nur Verzeichnisse (directories). Dasselbe als Baum, schöner lesbar:

Terminal-Fenster
sudo apt install tree
tree -d -L 1 /
tree -d -L 2 /usr

Und wie viele Verzeichnisse hat dein System insgesamt? Von Hand zählen ist mühsam, die Shell kann das:

Terminal-Fenster
sudo find / -type d | wc -l

Das | ist eine Pipe: Die Ausgabe von find wird nicht auf den Bildschirm geschrieben, sondern direkt an wc -l (word count, Option -l für Zeilen) weitergereicht. sudo brauchst du, weil dein Benutzer nicht in jedes Verzeichnis hineinschauen darf. Pipes sind das Thema von Modul 7, hier reicht das Bild vom Rohr zwischen zwei Befehlen.

Welche Dateisysteme gerade im Baum hängen, zeigt findmnt. Der ältere Befehl mount liefert dieselbe Information als lange Liste.

Terminal-Fenster
findmnt --real
lsblk -f
df -h
  • findmnt --real zeigt nur echte Dateisysteme, ohne die virtuellen wie /proc und /sys. Ohne die Option siehst du den ganzen Baum der Mounts.
  • lsblk -f listet die Blockgeräte (Platten und Partitionen), deren Dateisystem, UUID und Mountpoint.
  • df -h (disk free) zeigt belegten und freien Platz pro Dateisystem, mit -h in lesbaren Einheiten.

In einer frischen Ubuntu-VM sieht lsblk -f ungefähr so aus:

NAME FSTYPE FSVER LABEL UUID MOUNTPOINTS
sda
├─sda1 vfat FAT32 8A1C-3F7B /boot/efi
└─sda2 ext4 1.0 3f1d2c4e-8b2a-4b1e-9d6f-1a2b3c4d5e6f /

Eine Platte sda mit zwei Partitionen: die kleine EFI-Partition für den Bootvorgang und die grosse Systempartition, die auf / eingehängt ist.

Beim Systemstart baut Linux den Baum anhand der Datei /etc/fstab (file system table) auf. Jede Zeile beschreibt ein Dateisystem, die sechs Spalten sind durch Leerzeichen oder Tabs getrennt:

/etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=3f1d2c4e-8b2a-4b1e-9d6f-1a2b3c4d5e6f / ext4 defaults 0 1
UUID=8A1C-3F7B /boot/efi vfat umask=0077 0 1
/swap.img none swap sw 0 0
Spalte Bedeutung
file system Das Gerät, meist über seine UUID statt /dev/sda2, weil Gerätenamen sich ändern können.
mount point Wo im Baum es erscheint.
type Dateisystemtyp: ext4, vfat, swap, nfs …
options defaults reicht meistens. Weitere: ro (nur lesen), noexec, noauto.
dump Für das alte Backup-Programm dump, heute praktisch immer 0.
pass Reihenfolge der Dateisystemprüfung beim Booten: 1 für /, 2 für andere, 0 für keine Prüfung.

Hands-on: Vergleiche deine fstab mit dem, was tatsächlich eingehängt ist.

Terminal-Fenster
cat /etc/fstab
findmnt /

Was in der Spalte type steht, ist das Format, mit dem Daten auf der Partition organisiert sind. Linux kann sehr viele davon lesen, aber nicht jedes taugt als Systempartition, weil zum Beispiel FAT keine Linux-Rechte speichern kann.

Typ Wofür
ext4 Der Standard unter Ubuntu und Debian. Robust, schnell, mit Journal. Nimm das, wenn du keinen Grund für etwas anderes hast.
xfs Standard bei RHEL und Fedora Server. Gut für sehr grosse Dateien und Volumes.
btrfs Mit Snapshots und integrierten Prüfsummen. Standard bei openSUSE und Fedora Workstation.
vfat FAT32. Für die EFI-Partition und USB-Sticks, weil es jedes Betriebssystem lesen kann. Keine Linux-Rechte.
ntfs Das Windows-Dateisystem. Linux liest und schreibt es mit dem Kernel-Treiber ntfs3.
tmpfs Dateisystem im Arbeitsspeicher, zum Beispiel für /run. Inhalt ist nach dem Neustart weg.

Der Installer erstellt standardmässig eine ext4-Partition für / und eine vfat-Partition für /boot/efi.

Lösung anzeigen
Terminal-Fenster
script labs/linux/04-dateisystem/verzeichnisbaum.txt
ls -l /
# Antwort 1: 20 Einträge, davon bin, lib, lib64 und sbin als Symlinks nach /usr
findmnt /
df -h /
# Antwort 2: /dev/sda2, ext4, etwa 15G frei
sudo find / -type d | wc -l
# Antwort 3: rund 12000 Verzeichnisse
grep -v '^#' /etc/fstab
# Antwort 4: Die Zeile mit Mountpoint /; pass = 1 heisst, dieses Dateisystem wird beim Booten als erstes geprüft
exit

Die konkreten Zahlen sind bei dir anders.

Selbstcheck · 6 Fragen

1. Wo erscheint ein USB-Stick unter Linux?
2. Welches Verzeichnis enthält die Konfigurationsdateien des Systems?
3. Was bedeutet das | in «find / -type d | wc -l»?
4. Welche Aussagen zu /bin stimmen? (mehrere Antworten möglich)
5. Welches Dateisystem nimmt Ubuntu standardmässig für /?
6. Warum stehen in /etc/fstab UUIDs statt /dev/sda2?