13.9Die Linux-Verzeichnisstruktur

Ein typisches Unix-System besteht aus Tausenden von Dateien. Während der Entwicklung von Unix haben sich bestimmte Regeln herauskristallisiert, in welchen Verzeichnissen welche Dateien normalerweise gespeichert werden. Diese Regeln wurden an die Besonderheiten von Linux angepasst und in einem eigenen Dokument zusammengefasst: dem Filesystem Hierarchy Standard (FHS). Die meisten Linux-Distributionen halten sich bis auf wenige Ausnahmen an diesen Standard.

http://refspecs.linuxfoundation.org/fhs.shtml

Die in diesem Abschnitt zusammengefassten Informationen geben eine erste Orientierungshilfe. Dabei wurde nicht nur der FHS berücksichtigt, sondern auch die Gepflogenheiten populärer Linux-Distributionen.

Das Dateisystem beginnt mit dem Wurzelverzeichnis. Dort befinden sich normalerweise keine Dateien, sondern nur Verzeichnisse:

/bin

enthält elementare Linux-Kommandos zur Systemverwaltung, die von allen Benutzern ausgeführt werden können. Weitere Programme befinden sich in /usr/bin. Bei modernen Distributionen ist /bin einfach ein Link auf /usr/bin; die Trennung zwischen /bin und /usr/bin wurde damit aufgehoben.

/boot

enthält Dateien, die zum Booten des Systems (im Regelfall durch GRUB) verwendet werden. Bei den meisten Distributionen befindet sich hier auch der Kernel.

/dev

enthält alle Device-Dateien. Auf fast alle Hardware-Komponenten – etwa die serielle Schnittstelle oder eine Festplattenpartition – wird über sogenannte Device-Dateien zugegriffen. Diese werden dynamisch durch das udev-System eingerichtet (siehe Abschnitt 13.10, »Device-Dateien«). Bei den meisten Distributionen befindet sich das /dev-Verzeichnis in einer RAM-Disk, d.h., der Inhalt des Verzeichnisses bleibt bei einem Neustart des Rechners nicht erhalten.

/etc

enthält Konfigurationsdateien für das ganze System. Innerhalb von /etc gibt es eine Menge Unterverzeichnisse, die die Konfigurationsdateien in Gruppen ordnen – z.B. /etc/X11 für alle X-spezifischen Dateien. Viele Dateien aus /etc sind in den Konfigurationskapiteln dieses Buchs beschrieben. Werfen Sie auch einen Blick in das Stichwortverzeichnis (Buchstabe E)!

/home

enthält die Heimatverzeichnisse aller regulären Linux-Anwender. Das Heimatverzeichnis ist jenes Verzeichnis, in dem sich der Anwender nach dem Einloggen automatisch befindet und auf dessen Dateien er uneingeschränkte Zugriffsrechte hat. Ein Sonderfall ist wie so oft root: Dessen Heimatverzeichnis lautet /root.

/lib[64]

enthält einige gemeinsame Bibliotheken (Shared Libraries) oder symbolische Links darauf. Die Dateien werden zur Ausführung von Programmen benötigt. /lib/modules enthält Kernelmodule, die im laufenden Betrieb dynamisch aktiviert bzw. deaktiviert werden. Weitere Bibliotheken befinden sich in /usr/lib[64]. Das Verzeichnis /lib/firmware enthält die Firmware diverser Hardware-Komponenten (z.B. WLAN-Controller).

Bei aktuellen Distributionen ist /lib ein Link auf /usr/lib. Damit werden alle Bibliotheken zentral im /usr-Verzeichnis abgelegt.

/lost+found

ist normalerweise leer. Enthält es doch Dateien, dann handelt es sich um Dateifragmente, die beim Versuch, das Dateisystem durch fsck zu reparieren, nicht mehr zugeordnet werden konnten. Mit anderen Worten: Es wurden Sektoren gefunden, aber es ist unklar, zu welcher Datei der Sektor einmal gehört hat. Anstatt derartige Dateifragmente einfach zu löschen, kopiert fsck diese in das lost+found-Verzeichnis. fsck wird automatisch während des Systemstarts ausgeführt, wenn Linux nicht ordnungsgemäß beendet wurde (Stromausfall, Absturz etc.) oder wenn das Dateisystem längere Zeit nicht mehr überprüft wurde. Das Ziel von fsck ist es, das Dateisystem wieder in einen klar definierten Zustand zu bringen.

/media

enthält Unterverzeichnisse wie cdrom oder usb-stick-name, an deren Stelle externe Dateisysteme eingebunden werden. Traditionell war hierfür /mnt üblich, in den vergangenen Jahren hat sich stattdessen aber /media durchgesetzt. Bei neuen Distributionen gibt es mittlerweile wieder einen anderen Ort: externe Datenträger werden im Verzeichnis /run/media/benutzername/datenträgername in das Dateisystem integriert.

/opt

ist für Zusatzpakete vorgesehen, wird von den gängigen Distributionen aber nur selten genutzt – vermutlich deswegen, weil unklar ist, wie sich Zusatzpakete von normalen Paketen unterscheiden.

/proc

enthält Unterverzeichnisse für alle laufenden Prozesse. Es handelt sich hierbei nicht um echte Dateien! Das /proc-Verzeichnis spiegelt lediglich die Linux-interne Verwaltung der Prozesse wider.

/root

enthält die Dateien des Benutzers root, also des Systemadministrators.

/run

enthält bei vielen aktuellen Distributionen Dateien mit den Prozess-IDs sowie weiteren Informationen von manchen Systemdiensten. In der Vergangenheit wurden diese Dateien im Verzeichnis /var/run gespeichert. Das Unterverzeichnis /run/lock/ enthält Locking-Dateien. Bei älteren Distributionen finden Sie die Locking-Dateien stattdessen in /var/lock. Bei vielen Distributionen werden entweder das gesamte /run-Verzeichnis oder zumindest einzelne /run-Unterverzeichnisse in einer RAM-Disk abgelegt. Die überwiegend sehr kleinen Dateien in /run werden somit nie physikalisch auf einer Festplatte oder SSD gespeichert und gehen beim Neustart des Rechners verloren.

/sbin

enthält Kommandos zur Systemverwaltung. Ein gemeinsames Merkmal aller darin gespeicherten Programme ist, dass sie nur von root ausgeführt werden dürfen. Bei modernen Distributionen ist /sbin ein Link auf /usr/sbin; alle Kommandos zur Systemverwaltung befinden sich nun in /usr/sbin.

/share

enthält manchmal architekturunabhängige Dateien, also Dateien, die unabhängig vom Prozessor sind. Der korrekte Ort ist eigentlich /usr/share.

/srv

enthält bei einigen Distributionen (Fedora, RHEL) Daten für Server-Prozesse, z.B. /srv/www für alle Apache-Dokumente oder /srv/ftp für FTP-Dateien.

/sys

enthält ab Kernel 2.6 das sysfs-Dateisystem. Es liefert wie das proc-Dateisystem Informationen über den Zustand des Rechners.

/tmp

enthält temporäre Dateien. Oft werden temporäre Dateien aber auch in /var/tmp gespeichert.

/usr

enthält alle Anwendungsprogramme, das komplette X-System, die Quellcodes zu Linux etc. Der Inhalt dieses Verzeichnisses ändert sich normalerweise nur bei Paketinstallationen und Updates. Für veränderliche Dateien ist das Verzeichnis /var vorgesehen. Tabelle 13.9 gibt aber eine kurze Beschreibung der wichtigsten Unterverzeichnisse von /usr.

/var

enthält veränderliche Dateien. Wichtige Unterverzeichnisse sind adm (distributionsabhängige Administrationsdateien), lock (Locking-Dateien zum Zugriffsschutz auf Devices), log (Logging-Dateien), mail (E-Mail-Dateien, oft auch in /var/spool/mail), run (Dateien mit Prozess-IDs von manchen Systemdiensten) und spool (zwischengespeicherte Druckdateien, News-Dateien etc.).

Verzeichnis

Inhalt

/usr/bin

ausführbare Programme

/usr/games

Spiele; evtl. Link auf /usr/share/games

/usr/include

C-Include-Dateien

/usr/lib[64]

diverse Libraries, außerdem zahllose Unterverzeichnisse für C-Compiler, diverse andere Programmiersprachen, große Programmpakete wie emacs oder LaTeX etc.

/usr/local

Anwendungen und Dateien, die nicht unmittelbar zur Linux-Distribution gehören oder später installiert wurden

/usr/sbin

nur von root ausführbare Programme

/usr/share

architekturunabhängige Daten (z.B. Emacs-Lisp-Dateien, Ghostscript-Zeichensätze etc.), Dokumentation (/usr/share/doc)

/usr/src

Quellcode zu Linux und eventuell zu anderen Programmen)

Tabelle 13.9/usr-Verzeichnisse

Die grundsätzliche Struktur der Verzeichnisse auf Wurzelebene ist also recht gut zu verstehen. Die Probleme beginnen erst mit der Unterteilung von /usr und /var in zahllose Unterverzeichnisse. Prinzipiell werden dabei viele Verzeichnisse gleich benannt wie in der Wurzel-Ebene – etwa bin für ausführbare Programme.

Dabei tritt das Problem auf, dass es mehrere Gruppen ausführbarer Programme gibt: textorientierte Kommandos, X-Programme etc. In der Vergangenheit gab es für diese Programmgruppen einzelne Verzeichnisse, z.B. /usr/bin/X11 für Programme mit grafischer Benutzeroberfläche. Mittlerweile bemühen sich die meisten Distributionen, möglichst alle Programme in ein Verzeichnis zu installieren, also nach /usr/bin. Symbolische Links stellen die Kompatibilität zu vergangenen Standards her.