Mehr als 10'000 Verzeichnisse legt eine durchschnittliche Linux-Distribution an und die meisten Anwender kommen sich dort recht verloren vor. Hat man jedoch die Struktur des Dateisystems erst einmal durchschaut, findet man sich unter jeder Linux-Variante zurecht.


Unterhalb des Wurzelverzeichnisses „/“ bindet Linux echte und
virtuelle Verzeichnisse sowie Netzwerkfreigaben ein.

Der Aufbau des Linux-Verzeichnisbaums folgt einer klaren Struktur, die unter fast allen Distributionen gleich ist. Sie orientiert sich seit Jahren am Filesystem Hierarchy Standard (FHS) [1], der inzwischen in Version 2.3 vorliegt. Er stammt von der Filesystem Hierarchy Standard Group und definiert, welche Verzeichnisse zwingend und optional zu einem Linux-System gehören und wo sich was zu befinden hat. Diese Regeln sind für Distributoren und Softwareentwickler eine Hilfe, standardkonforme Pakete zu erstellen und ermöglichen es interessierten Nutzern, sich über die Verzeichnisstruktur zu informieren.

Programme und Bibliotheken

Anwendungen befinden sich unter Linux in Verzeichnissen, die „bin“ (für Binaries = ausführbare Programme) im Namen tragen. Die absolute Grundausstattung, die zwingend auf der Systempartition liegen muss, findet man in /bin und /sbin. Das erstgenannte Verzeichnis enthält Linux-Standard-Tools für alle Benutzer, wie die Shell, Anwendungen zur Datei- und Prozessverwaltung und Tools zur Textmanipulation. Die Programme stehen allen Benutzern des Systems zur Verfügung. Dagegen liegen unter /sbin Werkzeuge zur Systemverwaltung, von denen viele nur der Benutzer root ausführen darf und das daher bei den meisten Distributionen nicht zum Suchpfad normaler Benutzer gehört. Beispielsweise findet man dort die Programme zum Laden und Entladen von Kernelmodulen, ifconfig für die Konfiguration von Netzwerkgeräten und shutdown zum Herunterfahren und Neustarten des Systems.

Diese Grundausstattung reicht zwar zum Booten im Single-User-Modus aus und man kann auch eine Netzwerkverbindung herstellen, doch sonst lässt sich mit dem System nur wenig anfangen. Die für Benutzer interessanten Anwendungen wie Browser, Bildbearbeitungen und Mail-Clients liegen im Verzeichnis /usr/bin. /usr, das eine eigene Verzeichnishierarchie beherbergt, enthält auch ein Verzeichnis sbin, worin sich wie auch in /sbin administrative Befehle befinden. Dort gibt es beispielsweise die Programme für die Verwaltung eines lokalen Mailservers, der unterhalb von /usr installiert ist.

Weitere Programme können sich unterhalb von /opt befinden, wobei das Verzeichnis nur von wenigen Distributionen genutzt wird. So lagen unter Open-Suse KDE und Gnome immer in eigenen Verzeichnissen unter /opt, künftig werden die beiden Desktop-Umgebungen jedoch auch dort in die /usr-Hierarchie installiert. Gebräuchlich ist die Nutzung von /opt für die Installation großer Anwendungen, die sich nicht an die Linuxübliche Verzeichnisstruktur halten.

Bibliotheken liegen nach ihrem englischen Namen Libraries in den lib-Verzeichnissen. Sie stellen Anwendungen gemeinsam genutzte Funktionen zur Verfügung. So greifen alle Anwendungen zur Darstellung von Grafiken im PNG-Format auf die libpng zu.

Die Bibliotheken, die beim Systemstart verfügbar sein müssen, liegen unterhalb von /lib. In diesem Verzeichnis findet man unter /lib/modules auch die Module der installierten Kernel. Bibliotheken, die nur von Programmen der /usr-Hierarchie genutzt werden, gehören nach /usr/lib.

Bei /usr/local wiederholt sich der Aufbau unterhalb von /usr. Man findet dort sowohl die Ordner bin und sbin als auch lib. Dieser Zweig des Dateibaums ist nach der Installation eines Linux-Systems leer und dient der Aufnahme von selbst übersetzten Programmen. Software, die hier landet, wird nicht von der Paketverwaltung erfasst.

Unterhalb von /usr gibt es noch mehr Interessantes zu entdecken: Eine wahre Fundgrube ist /usr/share, in dessen Unterverzeichnissen die Programme architekturunabhängige Daten wie Icons, Wallpapers, Dokumentation und vieles andere mehr ablegen. Dort gibt es Schätze zu entdecken, etwa zusätzliche Dokumentationen zu den installierten Paketen. So installieren einige Distributionen eine ausführliche Referenz zur MySQL-Datenbank und ein Handbuch zur Grafik-Tool-Sammlung Image-Magick. Die sogenannten Manpages (Handbuchseiten) landen unter /usr/share/man.

Weniger interessant zum Stöbern sind die Verzeichnisse unter /usr/share/locale mit den Lokalisierungsdateien der installierten Programme.

Nach der Installation oft fast leer sind die Verzeichnisse /usr /src und /usr/include. /usr/src nimmt Quelltexte auf; dort findet man im Unterverzeichnis linux die Quelltexte des Kernels. /usr/include enthält die Header-Dateien für den C-Compiler. Dieses Verzeichnis füllt sich, wenn die sogenannten devel-Pakete (Entwicklerpakete) installiert sind, die man zum Kompilieren von Software benötigt.

Konfiguration und mehr

Unverzichtbar für jedes Linux-System ist das Verzeichnis /boot, das statische Dateien des Bootmanagers aufnimmt. Auch der Linux-Kernel muss laut FHS entweder hier oder aber im Wurzelverzeichnis selbst liegen. In /boot befinden sich außerdem die Konfigurationsdateien der installierten Kernel und bei vielen Distributionen der bei der Installation gesicherte Master Boot Record (MBR).

Die systemweiten Konfigurationsdateien sind im Verzeichnis /etc und seinen Unterverzeichnissen gespeichert. Viele Distributionen nutzen den nicht im FHS enthaltenen Ordner /etc /sysconfig für die Speicherung von Variablen, die von den Distributionswerkzeugen ausgewertet werden. Unterhalb von /etc/init.d liegen die Runlevel-Skripte und Verzeichnisse, über die beim Booten Dienste gestartet und Systemeinstellungen vorgenommen werden. Die Distributionen liefern zur Steuerung, welche Dienste wann starten sollen, eigene Tools mit: Fedora und Mandriva verwenden chkconfig, unter OpenSuse kommt insserv zum Einsatz und Debian und Ubuntu verwalten die Dienste mit update-rc.d.

/var ist der Speicherort für variable Systemdateien. Dessen Unterverzeichnis spool ist eine Art Zwischenablage für viele Programme. Der Druckerdienst Cups speichert dort Druckaufträge und ein lokaler Mailserver verwaltet unter Spool die Mailqueue. Erste Anlaufstelle für die Fehlersuche ist /var/log, in dem man die Protokolldateien des Systems findet. Neben der zentralen Logdatei /var/log/messages gibt es dort auch die Protokolle der installierten Dienste. Normale Benutzer dürfen zwar einen Blick in /var/log werfen, für die dort gespeicherten Protokolle fehlt ihnen jedoch das Leserecht.

Im FHS beschrieben, aber fast nur von OpenSuse konsequent genutzt wird das Verzeichnis /srv. Es soll die von Diensten wie Web- und FTP-Servern angebotenen Dateien aufnehmen. OpenSuse richtet unter anderem das Verzeichnisse /srv/www ein, wohingegen andere Distributionen wie Debian, Fedora und Mandriva weiterhin /var/www für die Dateien des Webservers nutzen.

Das Verzeichnis /lost+found gibt es einmal auf jedem Dateisystem. Es ist das virtuelle Fundbüro des Systems. Kann Linux nach einem Absturz und der folgenden Prüfung des Dateisystems einzelne Datenfragmente keiner Datei mehr zuordnen, speichert es diese in /lost+found.

Der Ordner /tmp nimmt temporäre Dateien auf, weshalb es nötig ist, dass dort auch normale Benutzer Schreibrechte haben. Allerdings ist das Sticky Bit gesetzt, was bewirkt, dass Benutzer nur Dateien in /tmp lesen, ändern und löschen dürfen, die ihnen gehören, nicht aber die anderer Anwender.

In /dev befinden sich die Gerätedateien, Pseudodateien, über welche Linux auf Hardware wie die Partitionen der Festplatte zugreift. Moderne Distributionen verwalten die Gerätedateien mit udev, das Gerätedateien dynamisch anlegen kann.

Eine Sonderstellung nehmen /proc und /sys ein: Bei procfs und sysfs handelt es sich um virtuelle Dateisysteme, die nur zur Laufzeit des Systems gemountet und befüllt werden. Startet man den Rechner von einer Rettungs-CD und wirft einen Blick in diese Ordner des installierten Systems, sind sie leer. Die Dateien darin enthalten Informationen über die laufenden Prozesse, angeschlossene Hardware und Kernel-Einstellungen, beispielsweise das Powermanagement.

Home, sweet home

Unterhalb von /home befinden sich die Verzeichnisse der normalen Benutzer. Hier – und nur hier – dürfen diese standardmäßig nach Belieben schalten und walten. Das eigene Home-Verzeichnis ist dabei nicht nur der Platz für Dokumente und aus dem Internet heruntergeladener Dateien, auch die Anwendungen legen dort ihre Daten und die individuelle Konfiguration des Benutzers ab. Die Namen der Konfigurationsdateien und -verzeichnisse beginnen mit einem Punkt, womit sie als versteckte Dateien gelten und weder mit ls noch in der Default-Ansicht des Konqueror oder von Nautilus angezeigt werden.

Diese Einstellungen sind für andere Benutzer und sogar für die Paketverwaltung des Systems tabu. Wird eine Anwendung, etwa Firefox, deinstalliert, bleiben die Benutzerdaten wie Cookie-Einstellungen und die Bookmarks erhalten. Startet eine Anwendung plötzlich nur bei einem Benutzer des Systems nicht mehr, kann man die eigene Konfigurationsdatei umbenennen und so herausfinden, ob das Problem auf eine fehlerhafte Einstellungsdatei zurückzuführen ist.

Nicht unterhalb von /home, sondern auf der obersten Ebene des Verzeichnisbaums liegt /root, das Home-Verzeichnis des Systemadministrators, weil es in derselben Partition liegen muss wie „/“.

Unter einem Dach


Die Einträge in der Datei /etc/fstab definieren, wo und mit welchen Optionen Partitionen und Netzwerkdateisysteme in den Verzeichnisbaum eingehängt werden.

Fast jedes Verzeichnis eines Linux-Systems kann auf einem eigenen Datenträger mit eigenem Dateisystem liegen. Ausgenommen davon sind alle, deren Inhalt auch im Single-User-Modus zur Verfügung stehen muss, und die nötig sind, um das System zu booten. So müssen die Verzeichnisse /bin, /sbin, /etc, /lib, /dev und /root auf der Root-Partition liegen.

Getreu dem Motto „Alles ist eine Datei“ sind alle Datenträger über einen Verzeichnisbaum, das Wurzelverzeichnis, zugänglich. Wechseldatenträger wie CDs und USB-Sticks bindet Linux in den – oft dynamisch erzeugten – Verzeichnissen unter /media ein, das Verzeichnis /mnt soll den Inhalt von Datenträgern aufnehmen, die nur vorübergehend eingebunden werden. Viele Distributionen erstellen unterhalb von /mnt Ordner, in die sie die Windows-Partitionen des Rechners einhängen. Welche Dateisysteme in welchem Verzeichnis eingehängt sind, verrät das Kommando mount.

Auch eine Linux-Installation kann sich über mehrere Partitionen oder sogar mehrere Rechner verteilen. So legen einige Distributionen bei einer Standardinstallation eine separate Partition für /home an und trennen damit die Benutzer- von den Systemdaten. Die individuellen Einstellungen der Benutzer müssen bei diesem Setup nicht erst gesichert werden, wenn man einmal das System neu aufspielen muss. Diese Änderung kann man sogar noch nachträglich vornehmen, wenn auf der Linux-Partition der Platz knapp wird. Dazu muss man das System mit dem Boot-Parameter init S im Single-User-Modus booten, in dem man dann als Benutzer root die Benutzerverzeichnisse in /home auf eine andere Partition, zum Beispiel /dev/hda6 verschiebt. Mit dem Eintrag

/dev/hda6 /home ext3 defaults 1 2

in der Datei /etc/fstab wird beim nächsten Systemstart die Partition /dev/hda6 im Verzeichnis /home eingehängt.

Manche Nutzer schätzen es, /usr auf eine eigene Partition zu legen, die im Alltagsbetrieb nur readonly gemountet wird; in Serverumgebungen erhält oft das Spool-Verzeichnis des Mailservers unter /var/spool/mail eine eigene Partition.

Auch auf Netzwerkfreigaben wie Samba- und NFS-Shares greift man über Verzeichnisse zu. Diese werden wie Partitionen mit dem Kommando mount ins Dateisystem eingebunden. So hängt der Befehl

smbmount //tyrant/mp3 /mnt/samba -o username=Benutzername
die Freigabe mp3 auf dem Rechner tyrant ins Verzeichnis /mnt/samba ein. Alternativ kann man auch Netzwerkfreigaben, die dauerhaft verfügbar sein sollen, über eine Zeile in der /etc/fstab in den Verzeichnisbaum einbinden. Für das obige Beispiel würde der Eintrag so lauten:
//tyrant/mp3 /mnt/samba smbfs username=Username,password=Passwort 0 0
Möchte man den Benutzernamen und das Passwort nicht in der für jeden lesbaren Datei /etc/fstab hinterlegen, gibt man stattdessen mit
credentials=/etc/smb.pass

den Pfad zu einer Datei an, die die Informationen in der Form

username=Benutzername
password=Passwort

enthält. Diese Datei muss root gehören und darf nur von ihm lesbar sein.

Hat man die Verzeichnisstruktur erst einmal durchschaut, findet man sich leicht auf jedem Linux-System zurecht. Die einzelnen Distributionen gehen zwar mit ihren Systemtools oft eigene Wege, denen man jedoch gut folgen kann, wenn man bei der Suche am richtigen Ort ansetzt.

Literatur

[1] FHS: www.pathname.com


© Heise Zeitschriften Verlag GmbH & Co. KG