Linux-Dateisystem: Unterschied zwischen den Versionen
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
| Zeile 3: | Zeile 3: | ||
== Verzeichnisbaum == | == Verzeichnisbaum == | ||
| − | + | {{#drawio:fhs}} | |
Linux besitzt ein hierarchisches Dateisystem. Es besteht aus: | Linux besitzt ein hierarchisches Dateisystem. Es besteht aus: | ||
| Zeile 15: | Zeile 15: | ||
'''Im Gegensatz zu Windows kennt Linux keine Laufwerksbuchstaben.''' | '''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> | + | Jeder Datenträger wird an einer Stelle des einen Verzeichnisbaums eingehängt (gemountet), z. B. eine zweite Festplatte unter <code>/srv/daten</code> oder ein USB-Stick unter <code>/media/thomas/stick</code> (Debian/Ubuntu) bzw. <code>/run/media/thomas/stick</code> (Rocky/RHEL/Fedora). |
;Eingehängte Dateisysteme anzeigen | ;Eingehängte Dateisysteme anzeigen | ||
| Zeile 65: | Zeile 65: | ||
* Das Verzeichnis unmittelbar oberhalb des aktuellen Verzeichnisses | * Das Verzeichnis unmittelbar oberhalb des aktuellen Verzeichnisses | ||
| − | * Jedes Verzeichnis | + | * Jedes Verzeichnis besitzt genau ein Elternverzeichnis |
* Zwei Punkte <code>..</code> kennzeichnen das Elternverzeichnis (abhängig vom aktuellen Verzeichnis) | * Zwei Punkte <code>..</code> kennzeichnen das Elternverzeichnis (abhängig vom aktuellen Verzeichnis) | ||
| + | * Sonderfall: Das Elternverzeichnis von <code>/</code> ist <code>/</code> selbst | ||
| + | |||
| + | ;Ausprobieren | ||
| + | * cd /.. | ||
| + | * pwd | ||
== Pfadnamen == | == Pfadnamen == | ||
| Zeile 86: | Zeile 91: | ||
* Beginnt nicht mit <code>/</code> | * Beginnt nicht mit <code>/</code> | ||
| − | ;Beispiel | + | ;Beispiel: aus <code>/usr/share</code> heraus nach <code>/usr/local/bin</code> |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| − | ../local/bin | + | cd /usr/share |
| + | cd ../local/bin | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Zeile 107: | Zeile 113: | ||
| <code>/boot</code> || Kernel, initramfs und Dateien des Bootmanagers | | <code>/boot</code> || Kernel, initramfs und Dateien des Bootmanagers | ||
|- | |- | ||
| − | | <code>/dev</code> || Gerätedateien (Devices), von <code>udev</code> | + | | <code>/dev</code> || Gerätedateien (Devices), vom Kernel angelegt (devtmpfs), von <code>udev</code> verwaltet |
|- | |- | ||
| <code>/etc</code> || Konfigurationsdateien des Systems (keine Binärprogramme) | | <code>/etc</code> || Konfigurationsdateien des Systems (keine Binärprogramme) | ||
| Zeile 113: | Zeile 119: | ||
| <code>/home</code> || Heimatverzeichnisse der Benutzer | | <code>/home</code> || Heimatverzeichnisse der Benutzer | ||
|- | |- | ||
| − | | <code>/media</code> || Mountpunkte für Wechselmedien, automatisch verwaltet | + | | <code>/media</code> || Mountpunkte für Wechselmedien, automatisch verwaltet (Rocky/RHEL: <code>/run/media</code>) |
|- | |- | ||
| <code>/mnt</code> || Mountpunkt für von Hand eingehängte Dateisysteme | | <code>/mnt</code> || Mountpunkt für von Hand eingehängte Dateisysteme | ||
| Zeile 143: | Zeile 149: | ||
<pre> | <pre> | ||
lrwxrwxrwx 1 root root 7 /bin -> usr/bin | lrwxrwxrwx 1 root root 7 /bin -> usr/bin | ||
| + | lrwxrwxrwx 1 root root 7 /lib -> usr/lib | ||
| + | lrwxrwxrwx 1 root root 9 /lib64 -> usr/lib64 | ||
lrwxrwxrwx 1 root root 8 /sbin -> usr/sbin | lrwxrwxrwx 1 root root 8 /sbin -> usr/sbin | ||
| + | </pre> | ||
| + | |||
| + | ;Dasselbe Programm über zwei Wege | ||
| + | * type -a ls | ||
| + | |||
| + | <pre> | ||
| + | ls is /usr/bin/ls | ||
| + | ls is /bin/ls | ||
</pre> | </pre> | ||
| Zeile 181: | Zeile 197: | ||
| <code>log</code> || Logdateien (wichtiges Verzeichnis für Administratoren) | | <code>log</code> || Logdateien (wichtiges Verzeichnis für Administratoren) | ||
|- | |- | ||
| − | | <code>log/journal</code> || Persistentes Journal von systemd-journald | + | | <code>log/journal</code> || Persistentes Journal von systemd-journald (nur wenn persistente Speicherung aktiv ist) |
|- | |- | ||
| <code>lib</code> || Statusdaten von Diensten, z. B. Datenbanken, Paketverwaltung | | <code>lib</code> || Statusdaten von Diensten, z. B. Datenbanken, Paketverwaltung | ||
| Zeile 195: | Zeile 211: | ||
| <code>opt</code> || Veränderliche Daten der Software aus <code>/opt</code> | | <code>opt</code> || Veränderliche Daten der Software aus <code>/opt</code> | ||
|- | |- | ||
| − | | <code>www</code> || Daten des Webservers | + | | <code>www</code> || Daten des Webservers |
|- | |- | ||
| <code>run</code> || Symlink auf <code>/run</code> | | <code>run</code> || Symlink auf <code>/run</code> | ||
| Zeile 218: | Zeile 234: | ||
|} | |} | ||
| − | == Konfiguration: /usr/lib, / | + | == Konfiguration: /usr/lib, /run und /etc == |
| − | Konfiguration gibt es an drei Stellen. | + | Konfiguration gibt es an drei Stellen. Bei gleichnamigen Dateien gewinnt die höhere Stufe: |
{| class="wikitable" | {| class="wikitable" | ||
! Stufe !! Ort !! Zuständig | ! Stufe !! Ort !! Zuständig | ||
|- | |- | ||
| − | | 1 || <code>/usr/lib/ | + | | 1 || <code>/usr/lib/...</code> || Vorgabe der Distribution bzw. des Pakets |
|- | |- | ||
| − | | 2 || <code>/ | + | | 2 || <code>/run/...</code> || Zur Laufzeit erzeugt, verschwindet beim Reboot |
|- | |- | ||
| − | | 3 || <code>/ | + | | 3 || <code>/etc/...</code> || Administrator |
|} | |} | ||
| + | |||
| + | Der Administrator hat also immer das letzte Wort. | ||
;Beispiele | ;Beispiele | ||
| Zeile 236: | Zeile 254: | ||
* /usr/lib/tmpfiles.d/ gegenüber /etc/tmpfiles.d/ | * /usr/lib/tmpfiles.d/ gegenüber /etc/tmpfiles.d/ | ||
* /usr/lib/sysctl.d/ gegenüber /etc/sysctl.d/ | * /usr/lib/sysctl.d/ gegenüber /etc/sysctl.d/ | ||
| + | |||
| + | Der SSH-Dienst heißt bei Debian/Ubuntu <code>ssh.service</code>, bei Rocky/RHEL <code>sshd.service</code>. | ||
;Wirksame Konfiguration anzeigen | ;Wirksame Konfiguration anzeigen | ||
| Zeile 241: | Zeile 261: | ||
* systemd-analyze cat-config tmpfiles.d | * systemd-analyze cat-config tmpfiles.d | ||
| − | Dateien unter <code>/usr/lib</code> werden nicht bearbeitet | + | 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>/etc/systemd/system/NAME.service.d/</code>. |
== Praxis == | == Praxis == | ||
| − | ;Verzeichnisbaum bis zur zweiten Ebene anzeigen | + | ;Verzeichnisbaum bis zur zweiten Ebene anzeigen (tree ggf. nachinstallieren) |
* tree -L 2 -d / | * tree -L 2 -d / | ||
* ls -l / | * ls -l / | ||
| − | ;Belegung ermitteln | + | ;Belegung ermitteln (als root, sonst fehlen Verzeichnisse) |
* du -sh /var/* 2>/dev/null | * du -sh /var/* 2>/dev/null | ||
* du -sh /usr/* 2>/dev/null | * du -sh /usr/* 2>/dev/null | ||
| Zeile 256: | Zeile 276: | ||
* dpkg -S /usr/bin/ls | * dpkg -S /usr/bin/ls | ||
* rpm -qf /usr/bin/ls | * rpm -qf /usr/bin/ls | ||
| + | |||
| + | Bei Debian 12 sind viele Pakete noch unter dem alten Pfad registriert, dort hilft <code>dpkg -S /bin/ls</code>. | ||
;Wo liegt ein Kommando? | ;Wo liegt ein Kommando? | ||
Aktuelle Version vom 16. Oktober 2026, 10:24 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. eine zweite Festplatte unter /srv/daten oder ein USB-Stick unter /media/thomas/stick (Debian/Ubuntu) bzw. /run/media/thomas/stick (Rocky/RHEL/Fedora).
- 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 besitzt genau ein Elternverzeichnis
- Zwei Punkte
..kennzeichnen das Elternverzeichnis (abhängig vom aktuellen Verzeichnis) - Sonderfall: Das Elternverzeichnis von
/ist/selbst
- Ausprobieren
- cd /..
- pwd
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
- aus
/usr/shareheraus nach/usr/local/bin
cd /usr/share
cd ../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), vom Kernel angelegt (devtmpfs), von udev verwaltet
|
/etc |
Konfigurationsdateien des Systems (keine Binärprogramme) |
/home |
Heimatverzeichnisse der Benutzer |
/media |
Mountpunkte für Wechselmedien, automatisch verwaltet (Rocky/RHEL: /run/media)
|
/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 7 /lib -> usr/lib lrwxrwxrwx 1 root root 9 /lib64 -> usr/lib64 lrwxrwxrwx 1 root root 8 /sbin -> usr/sbin
- Dasselbe Programm über zwei Wege
- type -a ls
ls is /usr/bin/ls ls is /bin/ls
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 (nur wenn persistente Speicherung aktiv ist) |
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 |
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, /run und /etc
Konfiguration gibt es an drei Stellen. Bei gleichnamigen Dateien gewinnt die höhere Stufe:
| Stufe | Ort | Zuständig |
|---|---|---|
| 1 | /usr/lib/... |
Vorgabe der Distribution bzw. des Pakets |
| 2 | /run/... |
Zur Laufzeit erzeugt, verschwindet beim Reboot |
| 3 | /etc/... |
Administrator |
Der Administrator hat also immer das letzte Wort.
- 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/
Der SSH-Dienst heißt bei Debian/Ubuntu ssh.service, bei Rocky/RHEL sshd.service.
- 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 /etc/systemd/system/NAME.service.d/.
Praxis
- Verzeichnisbaum bis zur zweiten Ebene anzeigen (tree ggf. nachinstallieren)
- tree -L 2 -d /
- ls -l /
- Belegung ermitteln (als root, sonst fehlen Verzeichnisse)
- 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
Bei Debian 12 sind viele Pakete noch unter dem alten Pfad registriert, dort hilft dpkg -S /bin/ls.
- Wo liegt ein Kommando?
- type -a ls
- echo $PATH
