Linux-Dateisystem: Unterschied zwischen den Versionen
| (15 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| + | = Linux-Dateisystem = | ||
| − | + | == Verzeichnisbaum == | |
| − | + | {{#drawio:fhs}} | |
| + | |||
| + | Linux besitzt ein hierarchisches Dateisystem. Es besteht aus: | ||
| − | |||
* Dateien (Files) | * Dateien (Files) | ||
| − | Dateien | + | * Verzeichnissen (Directories) |
| − | + | ||
| + | Ein Verzeichnis kann Dateien und Unterverzeichnisse (Subdirectories) enthalten. | ||
| + | Das oberste Verzeichnis heißt Rootverzeichnis (kurz Root) und wird durch <code>/</code> 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 <code>/media/thomas/stick</code> oder eine zweite Festplatte unter <code>/srv/daten</code>. | ||
| + | |||
| + | ;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. <code>/home/hans</code> | ||
| + | * Der Benutzer <code>root</code> hat sein Homeverzeichnis unter <code>/root</code> | ||
| + | |||
| + | ;Beispiel | ||
| + | <syntaxhighlight lang="bash"> | ||
| + | /home/thomas | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | === ~ (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 <code>cd</code> (change directory) verändert | ||
| + | * Ein einfacher Punkt <code>.</code> kennzeichnet das aktuelle Verzeichnis | ||
| + | |||
| + | ;Anzeigen und zurückwechseln | ||
| + | * pwd | ||
| + | * cd - | ||
| + | |||
| + | === Elternverzeichnis === | ||
| + | |||
| + | * Das Verzeichnis unmittelbar oberhalb des aktuellen Verzeichnisses | ||
| + | * Jedes Verzeichnis außer <code>/</code> besitzt genau ein Elternverzeichnis | ||
| + | * Zwei Punkte <code>..</code> 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 <code>/</code> | ||
| + | * Gilt unabhängig vom aktuellen Verzeichnis | ||
| + | |||
| + | ;Beispiel | ||
| + | <syntaxhighlight lang="bash"> | ||
| + | /usr/local/bin | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | === Relativer Pfadname === | ||
| + | |||
| + | * Beschreibt ausgehend vom aktuellen Verzeichnis den Weg zum Ziel | ||
| + | * Beginnt nicht mit <code>/</code> | ||
| + | |||
| + | ;Beispiel | ||
| + | <syntaxhighlight lang="bash"> | ||
| + | ../local/bin | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | ;Relativen Pfad auflösen | ||
| + | * realpath ../local/bin | ||
| + | |||
| + | == Verzeichnisstruktur == | ||
| + | |||
| + | {| class="wikitable" | ||
| + | ! Verzeichnis !! Inhalt | ||
| + | |- | ||
| + | | <code>/bin</code> || Symlink auf <code>/usr/bin</code> | ||
| + | |- | ||
| + | | <code>/sbin</code> || Symlink auf <code>/usr/sbin</code> | ||
| + | |- | ||
| + | | <code>/lib</code>, <code>/lib64</code> || Symlinks auf <code>/usr/lib</code> bzw. <code>/usr/lib64</code> | ||
| + | |- | ||
| + | | <code>/boot</code> || Kernel, initramfs und Dateien des Bootmanagers | ||
| + | |- | ||
| + | | <code>/dev</code> || Gerätedateien (Devices), von <code>udev</code> zur Laufzeit erzeugt | ||
| + | |- | ||
| + | | <code>/etc</code> || Konfigurationsdateien des Systems (keine Binärprogramme) | ||
| + | |- | ||
| + | | <code>/home</code> || Heimatverzeichnisse der Benutzer | ||
| + | |- | ||
| + | | <code>/media</code> || Mountpunkte für Wechselmedien, automatisch verwaltet | ||
| + | |- | ||
| + | | <code>/mnt</code> || Mountpunkt für von Hand eingehängte Dateisysteme | ||
| + | |- | ||
| + | | <code>/opt</code> || Software, die nicht zum Installationsumfang der Distribution gehört | ||
| + | |- | ||
| + | | <code>/proc</code> || Virtuelles Dateisystem: Prozesse und Kernelparameter | ||
| + | |- | ||
| + | | <code>/root</code> || Heimatverzeichnis des Administrators | ||
| + | |- | ||
| + | | <code>/run</code> || Laufzeitdaten seit dem Systemstart (tmpfs) | ||
| + | |- | ||
| + | | <code>/srv</code> || Daten der von diesem System bereitgestellten Dienste (z. B. Web, FTP) | ||
| + | |- | ||
| + | | <code>/sys</code> || Virtuelles Dateisystem mit Kernel- und Geräteinformationen (SysFS) | ||
| + | |- | ||
| + | | <code>/tmp</code> || Temporäre Dateien | ||
| + | |- | ||
| + | | <code>/usr</code> || Statische Dateien, kann read-only gemountet sein | ||
| + | |- | ||
| + | | <code>/var</code> || Variable Dateien, muss beschreibbar sein | ||
| + | |} | ||
| + | |||
| + | Alle vom Paketmanager verwalteten Programme und Bibliotheken liegen unterhalb von <code>/usr</code>. <code>/bin</code>, <code>/sbin</code>, <code>/lib</code> und <code>/lib64</code> sind Symlinks dorthin. | ||
| + | |||
| + | ;Prüfen | ||
| + | * ls -ld /bin /sbin /lib /lib64 | ||
| + | |||
| + | <pre> | ||
| + | lrwxrwxrwx 1 root root 7 /bin -> usr/bin | ||
| + | lrwxrwxrwx 1 root root 8 /sbin -> usr/sbin | ||
| + | </pre> | ||
| − | + | === Unterverzeichnisse von /usr === | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | {| class="wikitable" | |
| − | + | ! Verzeichnis !! Inhalt | |
| − | + | |- | |
| + | | <code>bin</code> || Programme für alle Benutzer | ||
| + | |- | ||
| + | | <code>sbin</code> || Programme für den Administrator | ||
| + | |- | ||
| + | | <code>lib</code> || Bibliotheken, Kernelmodule, Unitdateien der Distribution | ||
| + | |- | ||
| + | | <code>lib64</code> || Architekturabhängige Bibliotheken (RHEL/Rocky/SUSE) | ||
| + | |- | ||
| + | | <code>libexec</code> || Hilfsprogramme, die nur von anderen Programmen aufgerufen werden | ||
| + | |- | ||
| + | | <code>include</code> || Header-Dateien für C-Programme | ||
| + | |- | ||
| + | | <code>local</code> || Selbst installierte Software, vom Paketmanager unangetastet | ||
| + | |- | ||
| + | | <code>share</code> || Architekturunabhängige Daten: Doku, Manpages, Icons, Zeitzonen | ||
| + | |- | ||
| + | | <code>src</code> || Quelltexte (Kernel, DKMS-Module) | ||
| + | |} | ||
| − | + | Bei Debian und Ubuntu liegen die architekturabhängigen Bibliotheken unter <code>/usr/lib/x86_64-linux-gnu</code> (Multiarch). | |
| − | + | <code>/usr/local</code> ist wie <code>/usr</code> aufgebaut (<code>bin</code>, <code>sbin</code>, <code>lib</code>, <code>share</code>, <code>etc</code>) und ist der Ort für eigene Skripte und selbst kompilierte Programme. | |
| − | + | === Unterverzeichnisse von /var === | |
| − | |||
| − | |||
| − | + | {| class="wikitable" | |
| + | ! Verzeichnis !! Inhalt | ||
| + | |- | ||
| + | | <code>log</code> || Logdateien (wichtiges Verzeichnis für Administratoren) | ||
| + | |- | ||
| + | | <code>log/journal</code> || Persistentes Journal von systemd-journald | ||
| + | |- | ||
| + | | <code>lib</code> || Statusdaten von Diensten, z. B. Datenbanken, Paketverwaltung | ||
| + | |- | ||
| + | | <code>cache</code> || Zwischenspeicher für Programme, jederzeit löschbar | ||
| + | |- | ||
| + | | <code>spool</code> || Warteschlangen, z. B. Drucksystem, Cron, Mail | ||
| + | |- | ||
| + | | <code>mail</code> || Postfächer der Benutzer | ||
| + | |- | ||
| + | | <code>tmp</code> || Temporäre Dateien, die einen Reboot überdauern | ||
| + | |- | ||
| + | | <code>opt</code> || Veränderliche Daten der Software aus <code>/opt</code> | ||
| + | |- | ||
| + | | <code>www</code> || Daten des Webservers (Debian/Ubuntu) | ||
| + | |- | ||
| + | | <code>run</code> || Symlink auf <code>/run</code> | ||
| + | |- | ||
| + | | <code>lock</code> || Symlink auf <code>/run/lock</code> | ||
| + | |} | ||
| − | + | PID- und Sperrdateien liegen unter <code>/run</code>, weil sie bereits gebraucht werden, bevor <code>/var</code> eingehängt ist. | |
| − | + | === Weitere Verzeichnisse === | |
| − | |||
| − | |||
| − | |||
| − | + | {| class="wikitable" | |
| + | ! Verzeichnis !! Inhalt | ||
| + | |- | ||
| + | | <code>/efi</code> bzw. <code>/boot/efi</code> || EFI System Partition (FAT32) bei UEFI-Systemen | ||
| + | |- | ||
| + | | <code>/snap</code> || Einhängepunkte der Snap-Pakete (Ubuntu) | ||
| + | |- | ||
| + | | <code>/var/lib/flatpak</code> || Systemweit installierte Flatpaks | ||
| + | |- | ||
| + | | <code>/var/lib/docker</code>, <code>/var/lib/containers</code> || Images und Container von Docker bzw. Podman | ||
| + | |} | ||
| − | + | == Konfiguration: /usr/lib, /etc und /run == | |
| − | |||
| − | |||
| − | |||
| + | Konfiguration gibt es an drei Stellen. Die höhere Stufe gewinnt: | ||
| − | = | + | {| class="wikitable" |
| + | ! Stufe !! Ort !! Zuständig | ||
| + | |- | ||
| + | | 1 || <code>/usr/lib/…</code> || Vorgabe der Distribution bzw. des Pakets | ||
| + | |- | ||
| + | | 2 || <code>/etc/…</code> || Administrator | ||
| + | |- | ||
| + | | 3 || <code>/run/…</code> || 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 <code>/usr/lib</code> werden nicht bearbeitet – Änderungen gehören nach <code>/etc</code>, entweder als gleichnamige Datei oder als Drop-in im Verzeichnis <code>…service.d/</code>. | |
| − | |||
| − | / | ||
| − | |||
| − | == | + | == 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 | ||
| − | + | == Quiz == | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | [https://forms.gle/iuHAAggrKmB8mKyH9 Quiz] | |
| − | |||
Aktuelle Version vom 24. August 2026, 10:33 Uhr
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
