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:
- /bin - Dateien/Befehle, die von allen Anwendern benutzt werden dürfen
- /boot - Dateien des Bootloaders: Grub, Lilo
- /dev - Gerätedateien
- /etc - spezifische Konfigurationsdateien
- /home - Home-Verzeichnisse
- /lib - Kernel-Module, dynamische Bibliotheken
- /media - Portable Datenträger wie Speichersticks, ext. Festplatten
- /mnt - Einhängepunkt für Dateisysteme
- /opt - zusätzliche Softwarepakete
- /root - Home-Verzeichnis Root
- /sbin - Systembefehle
- /srv - Server-Dienste-Dateien
- /tmp - temporäres Verzeichnis
- /usr - 2. Verzeichnisebene
- /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:
- cat - Dateien aneinanderhängen
- chgrp - Gruppenzugehörigkeit ändern
- chmod – Dateizugriffsrechte ändern
- chown – Besitzer ändern
- cp – Kopieren
- cpio - kopieren von Dateien in oder aus Archive
- date – Systemdatum / Systemzeit anzeigen
- dd - konvertieren oder kopieren von Daten
- df - zeigen des freien Festplattenplatzes
- dmesg – Betriebssystemmeldung anzeigen
- echo - wiedergeben einer Textzeile
- false – Fehlerstatuscodes erzeugen
- gzip - komprimieren von Daten
- hostname – Rechnername anzeigen
- kill – Prozess „killen“
- ln – Verknüpfung setzen
- login - Einloggen
- ls - Verzeichnisinhalt zeigen
- mkdir - Erstellen eines Verzeichnisses
- mknod - Erstellen spezieller Gerätedateien
- more - Daten seitenweise blätternd zeigen
- mount – Dateisysteme einhängen
- mv - verschieben / umbenennen
- netstat – Netzwerkinformationen anzeigen
- ping – Ip-Adressen testen
- ps - Prozessstatus anzeigen
- pwd - aktuelle Verzeichnis anzeigen
- rm – löschen
- rmdir - löschen leerer Verzeichnisse
- sed - editieren von Daten ohne Interaktion
- sh - Kommandozeileninterpreter
- stty - zeigen oder setzen von Einstellungen eines Datenendgerätes
- su - startet eine Bedienoberfläche mit neuer Benutzeridentität
- sync - schreiben der Inhalte von Datenpuffern auf den Datenträger
- tar – Dateiarchive verwalten
- true – Erfolgsstatuscodes erzeugen
- umount - aushängen von Dateisystemen
- 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:
- opt (Programme in /opt)
- X11 (X-Window-Systems)
- Mysql (MySQL)
- Proftpd (ProFTP)
- conf.d (Sammlung von Konfig-Files bei Gentoo)
- exports - Zugriffsrechte für NFS-Freigaben
- fstab – Konfig-File, wie Dateisysteme eingehängt werden
- ftpusers - enthält die Namen der vom ftp-Aufruf auszuschließenden Benutzer
- group - zeilenweise Informationen zu den eingetragenen Benutzergruppen
- host.conf – Namensauflösung
- hosts – Namensauflösung
- inittab – Konfiguration von init
- mtab - dynamisch erzeugte Informationen zu den eingehängten Dateisystemen
- networks - statische Informationen zu den verfügbaren Netzwerken
- passwd - Kennwortdatei
- profile - systemweite Konfiguration des Anmeldevorgangs
- resolv.conf - Konfigurationsdatei für die Namensauflösung
- securetty - Zugangsberechtigungen für entfernte Anmeldevorgänge
- 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:
- bin - Benutzerbefehle
- include - Header-Dateien
- lib -Bibliotheken
- share - von der Architektur unabhängige Daten
- X11R6 - X-Window-System
- 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
- /var/cache - von Anwendungsprogrammen zwischengespeicherte Daten
- /var/lib - variable Statusinformationen
- /var/local - variable Daten im Zusammenhang mit /usr/local
- /var/lock - Verzeichnis für Lock-Dateien zur Prozesssynchronisation
- /var/log - Verzeichnis für Logdateien
- < /var/opt - variable Daten im Zusammenhang mit /opt
- /var/run - Daten, welche für laufende Prozesse Bedeutung haben
- /var/spool - Verzeichnis für abzuarbeitende Warteschlangen (Druckaufträge, E-Mail-Versandaufträge ...)
- /var/tmp - temporäre Dateien, die über einen Neustart hinweg erhalten bleiben