Linux Verzeichnis-Struktur: Filesystem Hierarchy Standard (FHS)

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

Wurzelverzeichnis: /

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:

  1. /bin - Dateien/Befehle, die von allen Anwendern benutzt werden dürfen
  2. /boot - Dateien des Bootloaders: Grub, Lilo
  3. /dev - Gerätedateien
  4. /etc - spezifische Konfigurationsdateien
  5. /home - Home-Verzeichnisse
  6. /lib - Kernel-Module, dynamische Bibliotheken
  7. /media - Portable Datenträger wie Speichersticks, ext. Festplatten
  8. /mnt - Einhängepunkt für Dateisysteme
  9. /opt - zusätzliche Softwarepakete
  10. /root - Home-Verzeichnis Root
  11. /sbin - Systembefehle
  12. /srv - Server-Dienste-Dateien
  13. /tmp - temporäres Verzeichnis
  14. /usr - 2. Verzeichnisebene
  15. /var - variable Daten

Dateien auf einer Partition

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.

Das /bin Verzeichnis: grundlegende Systembefehle (für alle Benutzer)

/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:

  1. cat - Dateien aneinanderhängen
  2. chgrp - Gruppenzugehörigkeit ändern
  3. chmod – Dateizugriffsrechte ändern
  4. chown – Besitzer ändern
  5. cp – Kopieren
  6. cpio - kopieren von Dateien in oder aus Archive
  7. date – Systemdatum / Systemzeit anzeigen
  8. dd - konvertieren oder kopieren von Daten
  9. df - zeigen des freien Festplattenplatzes
  10. dmesg – Betriebssystemmeldung anzeigen
  11. echo - wiedergeben einer Textzeile
  12. false – Fehlerstatuscodes erzeugen
  13. gzip - komprimieren von Daten
  14. hostname – Rechnername anzeigen
  15. kill – Prozess „killen“
  16. ln – Verknüpfung setzen
  17. login - Einloggen
  18. ls - Verzeichnisinhalt zeigen
  19. mkdir - Erstellen eines Verzeichnisses
  20. mknod - Erstellen spezieller Gerätedateien
  21. more - Daten seitenweise blätternd zeigen
  22. mount – Dateisysteme einhängen
  23. mv - verschieben / umbenennen
  24. netstat – Netzwerkinformationen anzeigen
  25. ping – Ip-Adressen testen
  26. ps - Prozessstatus anzeigen
  27. pwd - aktuelle Verzeichnis anzeigen
  28. rm – löschen
  29. rmdir - löschen leerer Verzeichnisse
  30. sed - editieren von Daten ohne Interaktion
  31. sh - Kommandozeileninterpreter
  32. stty - zeigen oder setzen von Einstellungen eines Datenendgerätes
  33. su - startet eine Bedienoberfläche mit neuer Benutzeridentität
  34. sync - schreiben der Inhalte von Datenpuffern auf den Datenträger
  35. tar – Dateiarchive verwalten
  36. true – Erfolgsstatuscodes erzeugen
  37. umount - aushängen von Dateisystemen
  38. uname – Systeminformationen anzeigen

/boot: Daten zum Booten

In diesem Verzeichnis werden alle Dateien abgelegt, welcher der Bootloader wie Grub oder Lilo benötigt.

/dev: Gerätedateien

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.

/etc : Konfigurationsdateien

In dem /etc Verzeichnis findet man Konfigurationsdateien zu vielen wichtigen Anwendungen und Programmen. Hier die wichtigsten Beispiele:

  1. opt (Programme in /opt)
  2. X11 (X-Window-Systems)
  3. Mysql (MySQL)
  4. Proftpd (ProFTP)
  5. conf.d (Sammlung von Konfig-Files bei Gentoo)
  6. exports - Zugriffsrechte für NFS-Freigaben
  7. fstab – Konfig-File, wie Dateisysteme eingehängt werden
  8. ftpusers - enthält die Namen der vom ftp-Aufruf auszuschließenden Benutzer
  9. group - zeilenweise Informationen zu den eingetragenen Benutzergruppen
  10. host.conf – Namensauflösung
  11. hosts – Namensauflösung
  12. inittab – Konfiguration von init
  13. mtab - dynamisch erzeugte Informationen zu den eingehängten Dateisystemen
  14. networks - statische Informationen zu den verfügbaren Netzwerken
  15. passwd - Kennwortdatei
  16. profile - systemweite Konfiguration des Anmeldevorgangs
  17. resolv.conf - Konfigurationsdatei für die Namensauflösung
  18. securetty - Zugangsberechtigungen für entfernte Anmeldevorgänge
  19. services - Portkennungen für einzelne Dienste

/home: Benutzerverzeichnisse

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.

/lib: Kernel-Module / Bibliotheken

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.

/mnt: temporärer Einhängepunkt für Dateisysteme

Das Verzeichnis dient zum kurzzeitigen Einhängen von Dateisystemen.

/media: Einhängepunkt für Wechseldatenträger

Dieses Verzeichnis wird dazu genutzt, um portable Wechsel-Datenträger wie externe USB-Festplatten, USB-Sticks, usw. einzuhängen.

/opt: zusätzliche Softwarepakete

Dies ist ein Verzeichnis für zusätzliche Software. Oftmals werden Spiele in diesem Verzeichnis gespeichert.

/sbin: Systembefehle des Administrators

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

/srv : Daten, die von Diensten angeboten werden

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.

/tmp : temporäre Dateien

Verzeichnis für temporäre Dateien.

Das Verzeichnis /usr

/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:

  1. bin - Benutzerbefehle
  2. include - Header-Dateien
  3. lib -Bibliotheken
  4. share - von der Architektur unabhängige Daten
  5. X11R6 - X-Window-System
  6. games - Spiele

/usr/bin : Benutzerbefehle

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.

/usr/include : Header-Dateien

Die Header-Dateien enthalten die verschiedenen Include-Dateien mit Prototypdefinitionen.

/usr/lib : Bibliotheken

Modularer Programmcode, welcher von verschiedenen Programmen geteilt wird.

/usr/local : lokal installierte Programme

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.

/usr/sbin : weitere Systembefehle

Weitere Systembefehle für den Administrator. Diese werden aber nicht für den Boot-Vorgang gebraucht.

Das Verzeichnis /var

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

  1. /var/cache - von Anwendungsprogrammen zwischengespeicherte Daten
  2. /var/lib - variable Statusinformationen
  3. /var/local - variable Daten im Zusammenhang mit /usr/local
  4. /var/lock - Verzeichnis für Lock-Dateien zur Prozesssynchronisation
  5. /var/log - Verzeichnis für Logdateien
  6. < /var/opt - variable Daten im Zusammenhang mit /opt
  7. /var/run - Daten, welche für laufende Prozesse Bedeutung haben
  8. /var/spool - Verzeichnis für abzuarbeitende Warteschlangen (Druckaufträge, E-Mail-Versandaufträge ...)
  9. /var/tmp - temporäre Dateien, die über einen Neustart hinweg erhalten bleiben