Überblick über Filesystem Hierarchy Standard (FHS)

Red Hat ist dem Filesystem Hierarchy Standard (FHS) verpflichtet. Dabei handelt es sich um ein gemeinsam mit anderen Institutionen erarbeitetes Dokument, in dem die Namen und Speicherstellen vieler Dateien und Verzeichnisse festgelegt sind. Unser Unternehmen wird sich auch weiterhin nach diesem Standard richten, damit Red Hat Linux ihn auch in Zukunft erfüllt.

Das aktuelle FHS-Dokument ist die maßgebende Referenz für alle FHS-konformen Dateisysteme, wobei der Standard jedoch viele Bereiche undefiniert oder erweiterbar lässt. In diesem Abschnitt geben wir Ihnen einen Überblick über den Standard sowie eine Beschreibung jener Teile des Dateisystems, die vom Standard nicht beschrieben werden.

Den vollständigen Standard finden Sie unter:

http://www.pathname.com/fhs

Die Konformität mit diesem Standard beinhaltet sehr viele Aspekte. Die beiden wichtigsten sind sicherlich die Kompatibilität mit anderen Systemen und die Möglichkeit, die Partition /usr als schreibgeschützte Partition zu mounten (da sie gemeinsam genutzte ausführbare Dateien enthält und keine Änderungen durch den Benutzer vorgesehen sind). Da /usr schreibgeschützt gemountet werden kann, besteht die Möglichkeit, /usr über die CD-ROM oder über ein schreibgeschütztes NFS-System von einem anderen Rechner aus zu mounten.

FHS-Organisation

Die hier beschriebenen Verzeichnisse und Dateien stellen nur eine kleine Teilmenge von den im Dokument zum Dateisystemstandard angegebenen Verzeichnissen und Dateien dar. Die umfassendsten Informationen finden Sie im neuesten Dokument zum Dateisystemstandard FHS.

/dev-Verzeichnis

Das Verzeichnis /dev enthält Dateisystemeinträge, die die an das System angeschlossenen Geräte darstellen. Diese Dateien sind für das korrekte Funktionieren des Systems unerlässlich.

/etc-Verzeichnis

Das Verzeichnis /etc ist für lokale Konfigurationsdateien reserviert. In /etc dürfen keine Binärdateien abgelegt werden. Sämtliche Binärdateien, die zu einem früheren Zeitpunkt in /etc abgelegt wurden, müssen jetzt nach /sbin oder - wenn möglich - nach /bin verschoben werden.

Die Verzeichnisse X11 und skel müssen Unterverzeichnisse von /etc sein:

/etc
  |- X11
  |- skel

Im Verzeichnis X11 werden X11-Konfigurationsdateien wie XF86Config abgelegt. Im Verzeichnis skel werden Benutzerdateien-"Gerippe" abgelegt. Wenn ein neuer Benutzer erstellt wird, dienen sie dazu, ein Home-Verzeichnis zu füllen.

/lib-Verzeichnis

Das Verzeichnis /lib sollte nur jene Bibliotheken enthalten, die für das Ausführen der Binärdateien in /bin und /sbin gebraucht werden. Diese gemeinsam benutzten Bibliothek-Images sind insbesondere für das Booten des Systems und das Ausführen von Befehlen innerhalb des Root-Dateisystems von Bedeutung.

/mnt-Verzeichnis

Das /mnt-Verzeichnis bezieht sich auf zeitweilig gemountete Dateisysteme wie CD-ROMs und Disketten.

/opt-Verzeichnis

Das Verzeichnis /opt liefert einen Bereich für die Speicherung von großen und statischen Software-Paketen.

Für Pakete, die es vermeiden möchten, ihre Dateien über das Dateisystem abzulegen, bietet /opt ein logisches und vorhersehbares organisatorisches System unter dem Verzeichnis dieses Pakets. Für den Systemadministrator bedeutet dies eine einfache Art und Weise, die Rolle jeder Datei innerhalb eines bestimmten Pakets zu bestimmen.

Wenn zum Beispiel ein bestimmtes Software-Pakte in /opt den Namen sample besitzt, dann können alle zugehörigen Dateien in Verzeichnisse innerhalb von /opt/sample abgelegt werden (z.B. /opt/sample/bin für Binärdateien und /opt/sample/man für man-Seiten).

Große Pakete, die zahlreiche Unterpakete umfassen, die jeweils verschiedene Aufgaben erfüllen, werden in /opt positioniert, so dass das große Paket eine standardmäßige Organisation erhält. Das sample-Paket kann auf diese Weise verschiedene Tools in eigenen Unterverzeichnissen besitzen - beispielsweise /opt/sample/tool1 und /opt/sample/tool2, die wiederum ihre eigenen Verzeichnisse wie bin - man u.ä. aufweisen.

/sbin-Verzeichnis

Das Verzeichnis /sbin enthält die ausführbaren Dateien, die nur vom Rootbenutzer verwendet werden und ausschließlich dem Booten und Mounten von /usr sowie Wiederherstellungsvorgängen dienen. Laut FHS gilt:

"/sbin enthält gewöhnlich Dateien, die zum Booten des Systems unerlässlich sind, sowie Binärdateien in /bin. Jede nach dem Mounten von /usr verwendete ausführbare Datei (sofern keine Probleme aufgetreten sind) muss in /usr/sbin und die lokalen Systemverwaltungsdateien in /usr/local/sbin abgelegt werden."

Die folgenden Programme sollten sich in /sbin befinden:

arp, clock, getty, halt, init, fdisk,
fsck.*, ifconfig, lilo, mkfs.*, mkswap, reboot,
route, shutdown, swapoff, swapon, update

/usr-Verzeichnis

Im Verzeichnis /usr werden Dateien abgelegt, die allen Benutzern auf einer Site zur Verfügung gestellt werden. Für das Verzeichnis /usr wird in der Regel eine eigene Partition angelegt. Es sollte möglich sein, diese Partition schreibgeschützt zu mounten. /usr muss die folgenden Unterverzeichnisse enthalten:

/usr
  |- bin
  |- doc
  |- etc
  |- games
  |- include
  |- kerberos
  |- lib
  |- libexec	    
  |- local
  |- man
  |- sbin
  |- share
  |- src
  |- X11R6

Das Verzeichnis bin enthält ausführbare Dateien, doc enthält nicht FHS-Dokumentation, etc enthält Konfigurationsdateien für das gesamte System, games ist für Spiele reserviert, include enthält C-Header-Dateien, kerberos enthält Binärdateien und vieles mehr für Kerberos, und lib enthält Objektdateien und Bibliotheken, die nicht konzipiert wurden, um direkt von Benutzern oder Shell-Skripten verwendet zu werden. Das Verzeichnis libexec enthält kleinere Hilfsprogramme, die von anderen Programmen aufgerufen werden, sbin enthält die Binärdateien für die Systemadministration (solche Binärdateien, die nicht zu /sbin gehören), share enthält Dateien, die nicht architekturspezifisch sind, src ist für den Quellcode reserviert und X11R6 ist für das X Window System gedacht (XFree86 in Red Hat Linux).

/usr/local-Verzeichnis

Laut FHS gilt:

"Die Hierarchie /usr/local kann vom Systemadministrator für die Installation lokaler Software benutzt werden. Bei der Aktualisierung der Systemsoftware muss ein Überschreiben ausgeschlossen werden. Das Verzeichnis kann für Programme und Daten verwendet werden, auf die innerhalb einer Gruppe von Computern zugegriffen werden kann und die nicht in /usr abgelegt sind."

Das Verzeichnis /usr/local hat eine ähnliche Struktur wie das Verzeichnis /usr. Es enthält die folgenden Unterverzeichnisse, deren Verwendungszweck jeweils dem der Unterverzeichnisse im Verzeichnis /usr ähnlich ist:

/usr/local
       |- bin
       |- doc
       |- etc
       |- games
       |- info
       |- lib
       |- man
       |- sbin
       |- src

/var-Verzeichnis

Der Dateisystemstandard FHS erfordert, dass das Mounten von /usr im Read-Only-Modus möglich sein soll. Daher sollten Programme, die Protokolldateien schreiben oder spool- bzw. lock-Verzeichnisse benötigen, am besten in das Verzeichnis /var schreiben. Laut Dateistandardsystem FHS enthält /var:

"…variable Datendateien. Dazu gehören Spool-Verzeichnisse und Spool-Dateien, Systemverwaltungs- und Protokollierungsdaten sowie zwischengespeicherte Dateien."

/var muss die folgenden Unterverzeichnisse enthalten:

/var
  |- arpwatrch
  |- cache
  |- db
  |- ftp
  |- gdm
  |- kerberos
  |- lib
  |- local
  |- lock
  |- log
  |- named
  |- nis
  |- opt
  |- preserve
  |- run
  +- spool
       |- anacron
       |- at
       |- cron
       |- fax
       |- lpd
       |- mail
       |- mqueue
       |- news
       |- rwho
       |- samba
       |- slrnpull
       |- squid
       |- up2date
       |- uucp
       |- uucppublic
       |- vbox
       |- voice
  |- tmp
  |- www
  |- yp

Systemprotokolldateien wie wtmp und lastlog werden im Verzeichnis /var/log abgelegt. Das Verzeichnis /var/lib enthält auch die RPM-Systemdatenbanken. LOCK-Dateien werden in /var/lock abgelegt. Das Verzeichnis /var/spool enthält Unterverzeichnisse, in denen verschiedene Systeme Datendateien speichern können.

/usr/local in Red Hat Linux

Der Verwendungszweck des Verzeichnisses /usr/local unterscheidet sich in Red Hat Linux geringfügig von der im Dateisystemstandard FHS definierten Verwendung. Laut Dateistandard soll in /usr/local Software abgelegt werden, die bei Aktualisierungen der System-Software geschützt werden soll. Das Aktualisieren von Red Hat mit dem RPM-System und Gnome-RPM ist sicher, was das Überschreiben angeht. Es ist daher nicht nötig, Dateien dadurch zu schützen, dass Sie sie im Verzeichnis /usr/local ablegen. Stattdessen wird empfohlen, /usr/local für lokal verwendete Software zu nutzen.

Angenommen, Sie haben z.B. /usr über NFS schreibgeschützt von jake gemountet. Wenn Sie ein bestimmtes Paket oder Programm installieren möchten, auf jake aber nicht schreibend zugreifen können, sollten Sie es unter /usr/local installieren. Falls es Ihnen irgendwann gelingen sollte, den Systemadministrator von jake dazu zu bringen, das Programm auf /usr zu installieren, können Sie es von /usr/local wieder deinstallieren.