Linux-Dateisystem: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
=Verzeichnisbaum= | = Linux-Dateisystem = | ||
== Verzeichnisbaum == | |||
*Dateien (Files) | |||
*Verzeichnissen (Directories) | <!-- Vorhandene Baumgrafik hier stehen lassen --> | ||
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 <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 | ;Beispiel | ||
<syntaxhighlight lang="bash"> | |||
==Aktuelles Verzeichnis== | /home/thomas | ||
*Das Verzeichnis, in dem man sich aktuell befindet | </syntaxhighlight> | ||
* | |||
*Ein einfacher Punkt . kennzeichnet das aktuelle Verzeichnis | === ~ (Tilde) bzw. $HOME (Shellvariable) kennzeichnen das Homeverzeichnis === | ||
==Elternverzeichnis== | |||
*Das Verzeichnis unmittelbar oberhalb des aktuellen Verzeichnisses | ;Eigenes Homeverzeichnis | ||
*Jedes Verzeichnis außer / besitzt genau ein Elternverzeichnis | * echo $HOME | ||
*Zwei Punkte .. kennzeichnen das Elternverzeichnis (abhängig vom aktuellen Verzeichnis) | * 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 | ;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 | ;Beispiel | ||
*../local/bin | <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] | |||
Version vom 24. August 2026, 10:31 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