Linux-Dateisystem
Linux-Dateisystem
Verzeichnisbaum
Linux besitzt ein hierarchisches Dateisystem. Es besteht aus:
- Dateien (Files)
- Verzeichnissen (Directories)
Ein Verzeichnis kann Dateien und Unterverzeichnisse (Subdirectories) enthalten.
Das oberste Verzeichnis heißt Rootverzeichnis (kurz Root) und wird durch / gekennzeichnet.
Im Gegensatz zu Windows kennt Linux keine Laufwerksbuchstaben.
Jeder Datenträger wird an einer Stelle des einen Verzeichnisbaums eingehängt (gemountet), z. B. ein USB-Stick unter /media/thomas/stick oder eine zweite Festplatte unter /srv/daten.
- Eingehängte Dateisysteme anzeigen
- findmnt
- df -hT
- lsblk -f
Die Struktur ist im Filesystem Hierarchy Standard (FHS 3.0) beschrieben.
- Dokumentation auf dem System
- man 7 hier
- man 7 file-hierarchy
Wichtige Verzeichnisse
Homeverzeichnis
- Das Verzeichnis, in dem man sich unmittelbar nach dem Anmelden befindet
- Wird vom Systemverwalter eingerichtet
- Jeder Anwender besitzt ein festes Homeverzeichnis, z. B.
/home/hans - Der Benutzer
roothat sein Homeverzeichnis unter/root
- Beispiel
/home/thomas
~ (Tilde) bzw. $HOME (Shellvariable) kennzeichnen das Homeverzeichnis
- Eigenes Homeverzeichnis
- echo $HOME
- cd ~
- cd
- Homeverzeichnis eines anderen Benutzers
- cd ~hans
Aktuelles Verzeichnis
- Das Verzeichnis, in dem man sich aktuell befindet
- Wird mit dem Befehl
cd(change directory) verändert - Ein einfacher Punkt
.kennzeichnet das aktuelle Verzeichnis
- Anzeigen und zurückwechseln
- pwd
- cd -
Elternverzeichnis
- Das Verzeichnis unmittelbar oberhalb des aktuellen Verzeichnisses
- Jedes Verzeichnis außer
/besitzt genau ein Elternverzeichnis - Zwei Punkte
..kennzeichnen das Elternverzeichnis (abhängig vom aktuellen Verzeichnis)
Pfadnamen
Absoluter Pfadname
- Beschreibt ausgehend vom Rootverzeichnis den Weg zum Zielverzeichnis oder zur Zieldatei
- Beginnt immer mit
/ - Gilt unabhängig vom aktuellen Verzeichnis
- Beispiel
/usr/local/bin
Relativer Pfadname
- Beschreibt ausgehend vom aktuellen Verzeichnis den Weg zum Ziel
- Beginnt nicht mit
/
- Beispiel
../local/bin
- Relativen Pfad auflösen
- realpath ../local/bin
Verzeichnisstruktur
| Verzeichnis | Inhalt |
|---|---|
/bin |
Symlink auf /usr/bin
|
/sbin |
Symlink auf /usr/sbin
|
/lib, /lib64 |
Symlinks auf /usr/lib bzw. /usr/lib64
|
/boot |
Kernel, initramfs und Dateien des Bootmanagers |
/dev |
Gerätedateien (Devices), von udev zur Laufzeit erzeugt
|
/etc |
Konfigurationsdateien des Systems (keine Binärprogramme) |
/home |
Heimatverzeichnisse der Benutzer |
/media |
Mountpunkte für Wechselmedien, automatisch verwaltet |
/mnt |
Mountpunkt für von Hand eingehängte Dateisysteme |
/opt |
Software, die nicht zum Installationsumfang der Distribution gehört |
/proc |
Virtuelles Dateisystem: Prozesse und Kernelparameter |
/root |
Heimatverzeichnis des Administrators |
/run |
Laufzeitdaten seit dem Systemstart (tmpfs) |
/srv |
Daten der von diesem System bereitgestellten Dienste (z. B. Web, FTP) |
/sys |
Virtuelles Dateisystem mit Kernel- und Geräteinformationen (SysFS) |
/tmp |
Temporäre Dateien |
/usr |
Statische Dateien, kann read-only gemountet sein |
/var |
Variable Dateien, muss beschreibbar sein |
Alle vom Paketmanager verwalteten Programme und Bibliotheken liegen unterhalb von /usr. /bin, /sbin, /lib und /lib64 sind Symlinks dorthin.
- Prüfen
- ls -ld /bin /sbin /lib /lib64
lrwxrwxrwx 1 root root 7 /bin -> usr/bin lrwxrwxrwx 1 root root 8 /sbin -> usr/sbin
Unterverzeichnisse von /usr
| Verzeichnis | Inhalt |
|---|---|
bin |
Programme für alle Benutzer |
sbin |
Programme für den Administrator |
lib |
Bibliotheken, Kernelmodule, Unitdateien der Distribution |
lib64 |
Architekturabhängige Bibliotheken (RHEL/Rocky/SUSE) |
libexec |
Hilfsprogramme, die nur von anderen Programmen aufgerufen werden |
include |
Header-Dateien für C-Programme |
local |
Selbst installierte Software, vom Paketmanager unangetastet |
share |
Architekturunabhängige Daten: Doku, Manpages, Icons, Zeitzonen |
src |
Quelltexte (Kernel, DKMS-Module) |
Bei Debian und Ubuntu liegen die architekturabhängigen Bibliotheken unter /usr/lib/x86_64-linux-gnu (Multiarch).
/usr/local ist wie /usr aufgebaut (bin, sbin, lib, share, etc) und ist der Ort für eigene Skripte und selbst kompilierte Programme.
Unterverzeichnisse von /var
| Verzeichnis | Inhalt |
|---|---|
log |
Logdateien (wichtiges Verzeichnis für Administratoren) |
log/journal |
Persistentes Journal von systemd-journald |
lib |
Statusdaten von Diensten, z. B. Datenbanken, Paketverwaltung |
cache |
Zwischenspeicher für Programme, jederzeit löschbar |
spool |
Warteschlangen, z. B. Drucksystem, Cron, Mail |
mail |
Postfächer der Benutzer |
tmp |
Temporäre Dateien, die einen Reboot überdauern |
opt |
Veränderliche Daten der Software aus /opt
|
www |
Daten des Webservers (Debian/Ubuntu) |
run |
Symlink auf /run
|
lock |
Symlink auf /run/lock
|
PID- und Sperrdateien liegen unter /run, weil sie bereits gebraucht werden, bevor /var eingehängt ist.
Weitere Verzeichnisse
| Verzeichnis | Inhalt |
|---|---|
/efi bzw. /boot/efi |
EFI System Partition (FAT32) bei UEFI-Systemen |
/snap |
Einhängepunkte der Snap-Pakete (Ubuntu) |
/var/lib/flatpak |
Systemweit installierte Flatpaks |
/var/lib/docker, /var/lib/containers |
Images und Container von Docker bzw. Podman |
Konfiguration: /usr/lib, /etc und /run
Konfiguration gibt es an drei Stellen. Die höhere Stufe gewinnt:
| Stufe | Ort | Zuständig |
|---|---|---|
| 1 | /usr/lib/… |
Vorgabe der Distribution bzw. des Pakets |
| 2 | /etc/… |
Administrator |
| 3 | /run/… |
Zur Laufzeit erzeugt |
- Beispiele
- /usr/lib/systemd/system/ssh.service gegenüber /etc/systemd/system/ssh.service
- /usr/lib/tmpfiles.d/ gegenüber /etc/tmpfiles.d/
- /usr/lib/sysctl.d/ gegenüber /etc/sysctl.d/
- Wirksame Konfiguration anzeigen
- systemctl cat ssh.service
- systemd-analyze cat-config tmpfiles.d
Dateien unter /usr/lib werden nicht bearbeitet – Änderungen gehören nach /etc, entweder als gleichnamige Datei oder als Drop-in im Verzeichnis …service.d/.
Praxis
- Verzeichnisbaum bis zur zweiten Ebene anzeigen
- tree -L 2 -d /
- ls -l /
- Belegung ermitteln
- du -sh /var/* 2>/dev/null
- du -sh /usr/* 2>/dev/null
- Zu welchem Paket gehört eine Datei?
- dpkg -S /usr/bin/ls
- rpm -qf /usr/bin/ls
- Wo liegt ein Kommando?
- type -a ls
- echo $PATH