Um auf allen Linux-Distributionen einen Standard für die Verzeichnis-Struktur festzulegen, wurde der Filesystem Hierarchy Standard (FHS) eingeführt. Somit ist die Struktur der Verzeichnisse und Dateien vorgeschrieben und auf allen Linux-Distributionen wie Suse, Debian oder Gentoo nahezu identisch. Administratoren finden sich schnell auf allen Linux-Systemen zurecht und können zügig durch die Dateistrukturen navigieren.
Der FHS gruppiert Dateien in zwei „Dateiarten“: die erste Gruppe sind die „shareable files“, also Dateien, die auch anderen Anwendern im Netzwerk zur Verfügung stehen können, in der Regel nicht verändert werden und daher nur lesend zur Verfügung gestellt werden. Daher werden diese Dateien auch statische Dateien genannt. Zu diesen Dateien gehören Binärdateien, Bibliotheken oder Dokumentationen. Diese Dateien werden normalerweise in den Verzeichnissen /usr, /etc, /opt, /boot usw. abgelegt. Auf die statischen Dateien reicht in der Regel ein Nur-Lese-Zugriff.
„Unshareable Files“ werden anderen Anwendern und Programmen nicht zur Verfügung gestellt. Variable Dateien werden regelmäßig geändert. Beispiele für variable Dateien sind Log-, E-Mail- oder Drucker-Datei
Damit das System booten und administrative Aufgaben erledigen kann, muss es auf bestimmte Verzeichnisse und Dateien im Wurzelverzeichnis, also direkt unter / vorfinden. Somit ist das System bzw. der Administrator in der Lage, Reperaturen, Diagnosen und Wiederherstellungsversuche durchzuführen. Folgende Verzeichnisse (oder symbolische Links auf Verzeichnisse) müssen in einem FHS-kompatiblen Dateisystem im Wurzelverzeichnis vorhanden sein:
Es ist möglich, Linux-Verzeichnisse auf verschiedene Partitionen und Laufwerke zu verteilen. So macht es zum Beispiel Sinn, das /home Laufwerk auf einer separaten Partition zu legen, damit Anwender das komplette Linux-System nicht „voll laufen lassen“ können. Außerdem ist es möglich, Verzeichnisse beispielsweise auf einer anderen Festplatte im System oder gar auf einem Netzlaufwerk zu legen.
Man kann aber nicht alle Verzeichnisse beliebig auf andere Partitionen, Festplatten oder Laufwerke legen. Einige Verzeichnisse müssen zwingend auf einer gemeinsamen Partition befinden, da sie Dateien und Programme enthalten, welche beim Booten bzw. Systemstart benötigt werden. Dies sind die Verzeichnisse /bin, /sbin, /etc, /dev, /lib und, falls vorhanden, auch /root. Die anderen Verzeichnisse können sich auf anderen Partitionen befinden und werden dann beim Booten gemountet.
/bin enthält alle Befehle, die sowohl vom Administrator als auch vom Benutzer aufgerufen werden können und auch dann benötigt werden, wenn keine anderen Dateisysteme eingehängt sind (z.B. im Single User Mode). Darüber hinaus können auch Skripte, die solche Befehle verwenden, dort abgelegt werden.
Das Verzeichnis /bin darf keine Unterverzeichnisse enthalten! Folgende Programme oder symbolische Links auf die Unix-Kommandos werden in /bin mindestens benötigt:
In diesem Verzeichnis werden alle Dateien abgelegt, welcher der Bootloader wie Grub oder Lilo benötigt.
In dem Verzeichnis /dev befinden sich Spezial-Dateien (special file) oder Gerätedateien (device file). So findet man in diesem Verzeichnis die Gerätedateien von Festplatten (hda, hdb, etc), von CD-Laufwerken, Modems, usw.
In dem /etc Verzeichnis findet man Konfigurationsdateien zu vielen wichtigen Anwendungen und Programmen. Hier die wichtigsten Beispiele:
Das Homeverzeichnis ist laut FHS optional, also auf einem FHS kompatiblen System nicht zwingend erforderlich. Trotzdem findet man auf nahezu jedem Linux-System das /home Verzeichnis, in denen benutzerspezifische Konfigurationsdateien und Daten Platz finden.
Das Verzeichnis /lib steht für library und beinhaltet die installierten dynamischen Bibliotheken und Kernel-Module, die zum Starten des Systems und für die Programme in /bin und /sbin benötigt werden. Das Unterverzeichnis modules beinhaltet die oben genannten Kernel-Module, falls diese installiert sind.
Das Verzeichnis dient zum kurzzeitigen Einhängen von Dateisystemen.
Dieses Verzeichnis wird dazu genutzt, um portable Wechsel-Datenträger wie externe USB-Festplatten, USB-Sticks, usw. einzuhängen.
Dies ist ein Verzeichnis für zusätzliche Software. Oftmals werden Spiele in diesem Verzeichnis gespeichert.
Das Verzeichnis /bin wurde bereits erläutert. Auf Programme in /bin dürfen auch Benutzer zugreifen. Programme, die sich aber in /sbin aufhalten, dürfen nur vom Systemadministrator durchgeführt werden. Beispiele: shutdown, fastboot, fasthalt, fdisk, fsck, getty, halt, ifconfig, init, mkfs, reboot, route, swapon, swapoff, update
In /srv sollen Daten von Diensten abgelegt werden, die von dem System angeboten werden. Darunter fallen beispielsweise die Daten vom Webserver (bsp. Apache), E-Mail-, FTP- oder File-Server.
Verzeichnis für temporäre Dateien.
/usr steht für unix system resources und nicht wie einige Linux-Anwender meinen für „User“ oder ähnliches. Dieses Verzeichis kann von mehreren Rechnern gemeinsam verwendet werden und ist somit „shareable“. Hier einige wichtige Verzeichnisse in /usr:
In diesem Verzeichnis befinden sich die meisten Programme, welche die Benutzer ausführen dürfen. Hier findet man auch die ausführbaren Dateien der installierten Anwenderprogramme wie Firefox, GIMP, vim, usw.
Die Header-Dateien enthalten die verschiedenen Include-Dateien mit Prototypdefinitionen.
Modularer Programmcode, welcher von verschiedenen Programmen geteilt wird.
Diese Hierarchie ist nach der grundlegenden Installation leer und dient als Platz für weitere Programme. Die meisten Installationsprogramme von zusätzlicher Software verwenden dieses Verzeichnis. /usr/local/<programmname> enthält die Dateien des Programms, während in /usr/local/bin und /usr/local/lib meistens Links zu den Binärpaketen und Bibliotheken zu finden sind.
Weitere Systembefehle für den Administrator. Diese werden aber nicht für den Boot-Vorgang gebraucht.
Das /var-Verzeichnis steht für variable Daten, die sich während des Betriebs regelmäßig ändern oder die neu angelegt bzw. gelöscht werden