Linux-Dateisystem: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 3: Zeile 3:
 
== Verzeichnisbaum ==
 
== Verzeichnisbaum ==
  
−
<!-- Vorhandene Baumgrafik hier stehen lassen -->
+
{{#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> oder eine zweite Festplatte unter <code>/srv/daten</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 außer <code>/</code> besitzt genau ein Elternverzeichnis
+
* 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> zur Laufzeit erzeugt
+
| <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 (Debian/Ubuntu)
+
| <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, /etc und /run ==
+
== Konfiguration: /usr/lib, /run und /etc ==
  
−
Konfiguration gibt es an drei Stellen. Die höhere Stufe gewinnt:
+
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/…</code> || Vorgabe der Distribution bzw. des Pakets
+
| 1 || <code>/usr/lib/...</code> || Vorgabe der Distribution bzw. des Pakets
 
|-
 
|-
−
| 2 || <code>/etc/…</code> || Administrator
+
| 2 || <code>/run/...</code> || Zur Laufzeit erzeugt, verschwindet beim Reboot
 
|-
 
|-
−
| 3 || <code>/run/…</code> || Zur Laufzeit erzeugt
+
| 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 – Änderungen gehören nach <code>/etc</code>, entweder als gleichnamige Datei oder als Drop-in im Verzeichnis <code>…service.d/</code>.
+
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 root hat 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/share heraus 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

Quiz

Quiz