Zum Hauptinhalt springen

FHS

Der Filesystem Hierachy Standard (kurz FHS) ist eine Richtlinie, wie Distributionen in der Linux-Welt das Dateisystem organisieren sollen. Soll heißen: welche Datei des Systems sollte in welchem Ordner liegen. Theoretisch ist das alles nämlich völlig frei wählbar!

Vorgestellt werden nun die einzelnen Posten dieses Standards - fast alle Distributionen weichen an der einen oder anderen Stelle davon ab. Und manche aktuelle Entwicklung hat den Standard auch schon überholt (letzte Fassung aus dem Jahr 2015)

Links:

Grundlegende Idee war, dass Dateien im Linux-Dateisystem kategoriesierbar sind in Hinblick auf:

  • Statisch und Nicht-Statisch (Statisch bedeutet: im laufenden System unveränderlich)
  • Shareable und Unshareable (Spezifisch für einen Rechner oder teilbar zwischen Rechnern)

Root-Filesystem - die oberste Ebene

Allgemein anerkannt ohne große Abweichungen

  • /boot: Dateien die zum Systemstart benötigt werden
  • /dev: Gerätedateien
  • /etc: Konfiguration des Systems
  • /home: Heimatverzeichnisse der Benutzer
  • /mnt: Manueller Einhängepunkt des Administrators
  • /opt: Optionale Software (oft von Drittanbietern)
  • /root: Heimatverzeichnis des Superusers
  • /run: Dateien laufender Prozesse
  • /srv: Daten von Diensten (Webserver, FTP-Server)
  • /tmp: Temporäre, flüchtige Dateien

Verzeichnisse die ich hier weggelassen habe: /bin, /sbin und /lib. Sie waren gedacht für rudimentäre Programme und Bibliotheken, die in jedem Linux-System vorhanden sein müssen. (Der Standard listet dieses auch explizit auf: Essentielle User-Kommandos)

Der sogenannte usr-Merge hob diese spezielle Bedeutung auf - mehr dazu weiter unten.

Linux spezifische Abweichungen

  • /proc: Linux spezifisch: Spezielles virtuelles Dateisystem mit Prozessinformationen
  • /sys: Linux spezifisch: Spezielles virtuelles Dateisystem zum Kernel-Zugang

Ohne heutige Bedeutung

  • /media: Früher wurden CDROM-Laufwerke und ähnliches hier eingebunden. Das klappte in der Regel nur mit Root-Rechten. Das ist heutzutage mit dem Verschwinden der CDROM-Laufwerke und dem Aufkommen vieler anderer Wechselmedien (USB-Sticks, MemoryCards, ...) unrealistisch.

Unter-Hierarchien

Einige der obigen Verzeichnisse wurden auch noch genauer aufgeschlüsselt. Größere Unter-Hierachien definiert der Standard für die Verzeichnisse /usr und /var.

/usr: Unix System Resources

Das Verzeichnis lag zu Unix-Zeiten oft auf einem Netzwerk-Laufwerk und wurde von vielen Clients benutzt um Speicherplatz zu sparen. Es enthielt auch bin, sbin und lib Verzeichnisse für alle Programme, die nicht ganz Daily-Business waren bzw. zu groß für den kleinen Client. Oder ganz einfach nicht vom Standard im jeweiligen Root-Verzeichnis gefordert wurden.

Dazu kamen Unterverzeichnisse für Source-Code der installierten Anwendungen (src und include) sowie das share-Verzeichnis für Architektur-unabhängige Daten (Handbücher, ...)

Eine Sonderrolle spielt das Verzeichnis /usr/local: es bildete nochmal die gleiche Struktur wie /usr ab und ist bis heute gedacht für lokal und manuell installierte Software (also nicht über die Paketverwaltung der Distribution)

/var: Variable Daten

Das können sein: Spool-Directories (Drucker, Mails), Log-Dateien, Laufzeit-Dateien, ... Zwei Aspekte dominieren: sie werden im laufenden Betrieb des Systems erzeugt und sind teilweise sehr variabel in Anzahl und Größe.

Das var-Verzeichnis wurde spezifiert mit folgender Idee:

Ein Programm, das installiert wird, ist mit seinen statischen Dateien ins /usr-Verzeichnis zu kopieren und alles, was dann später vom Programm angelegt wird, soll nach /var

Der usr-Merge

Im Laufe des letzten Jahrzehnts (also seit ca. 2010) haben sich fast alle Linux-Distributionen entschlossen die Trennung von zum Beispiel /bin und /usr/bin aufzuheben. Sie ist angesichts heutigen Plattenplatzes nicht mehr notwendig und macht einiges auch zu aufwändig.

Deshalb verlinken heutige Distributionen oft /bin nach /usr/bin usw. und kopieren alle ausführbaren Programme in letzteres. Sie verletzen damit natürlich nicht den FHS, denn cp liegt zwar dem Namen nach im /usr/bin - Ordner, ist aber immer noch sichtbar mit ls bin.