Die Dateisystem-Struktur unter Unix ist komplett anders organisiert als bei herkömmlichen Endbenutzer-Betriebssystemen (gemeint sind hier DOS, Win95, OS/2 etc.). Ein Unix-Sytem kennt zum Beispiel keine Laufwerke. Die gesamte Struktur besteht aus einem großen Verzeichnisbaum, angefangen bei '/', dem Root- bzw. Wurzelverzeichnis.
Datenspeicher wie Festplatten, CD-ROMs, MOs, Disketten etc. werden an geeigneter Stelle in den Verzeichnisbaum "montiert" (engl. mount). Diese Geräte müssen nicht notwendigerweise am lokalen System angeschlossen sein, sondern können von einem anderen Rechner montiert werden. Für den Benutzer eines Unix-Systems ist es ohne weiteres nicht ersichtlich, auf welchem Gerät bzw. auf welchem Rechner die Daten tatsächlich liegen. Für die tägliche Arbeit sind diese Informationen auch unerheblich.
Das Einfügen in den Verzeichnisbaum geschieht mit dem Befehl "mount". Sollen sie wieder aus dem System entfernt werden, so ist der Befehl "umount" zu verwenden. In dem abzumontierenden Verzeichnis darf dabei keine Datei mehr geöffnet sein, sonst verweigert umount seinen Dienst.
Bevor ein Gerät auf diese Weise in das System eingebunden werden kann, muß auf ihm ein Dateisystem erzeugt werden. Dieses bestimmt, wie die Daten gespeichert werden - u.a. wie lang Dateinamen sein dürfen. Normalerweise hat jedes Betriebsystem sein eigenes Dateisystem. Linux ist hier keine Ausnahme, allerdings enthält Linux nicht nur die Linux-typischen Dateisysteme wie ext2 und xiafs, sondern auch die anderer Systeme wie MSDOS, VFAT, Novell etc. Folgendes Fragment soll einen kleinen Vorgeschmack auf die Vielseitigkeit von Linux geben.
mount -t iso9660 -r /dev/scd0 /cdrom0 mount -t ext2 /dev/sdc1 /home mount -t msdos /dev/sdc2 /dos mount -t vfat -r /dev/sdc3 /win95 mount -t nfs -r tuonela:/pub /pub ncpmount -S FILESERV1 /netware -U joey -P |
Die Daten auf Unix-Dateisystemen bestehen üblicherweise ausschließlich aus Dateien. Selbst Verzeichnisse sind Dateien - sie enthalten jedoch spezielle Verzeichnisinformationen, also Namen, Benutzerrechte und die exakte Position auf den Datenspeichern.
Im Gegensatz zu DOS werden einzelne Verzeichnisse in Pfaden mit einem normalen Schrägstrich voneinander getrennt. Ein weiterer Unterschied besteht darin, daß Dateinamen unter Unix je nach zugrundeliegender Kodierung bis zu 255 Zeichen lang sein können und mehrere Punkte enthälten dürfen. Liegt dem Verzeichnis ein DOS-Verzeichnis zugrunde, welches problemlos in den Verzeichnisbaum eingebunden werden kann, dann besteht natürlich weiterhin die unter DOS übliche 8.3 Konvention.
Da Unix ein Mehrbenutzer-Betriebssystem ist, existieren für jede Datei Zugriffsrechte. Diese sind aufgeteilt in einen User-, Gruppen- und Weltanteil. Pro Anteil können Lese-, Schreib- und Ausführungsrechte (für Programme) vergeben werden.
Ein Benutzer gehört immer mindestens einer Benutzergruppe an (siehe /etc/group). Jede Datei gehört genau einem Benutzer und einer Gruppe. Auf diese Weise können bestimmte Dateien für bestimmte Personenkreise zum Lesen oder Schreiben zugänglich gemacht werden. So kann z.B. die Benutzung der Diskettenlaufwerke oder der Modems eingeschränkt werden, indem sie nur für eine bestimmte Gruppe beschreibbar sind. In diese Gruppen werden nur authorisierte Personen eingetragen.
Das Konzpt von Unix ist zwar schon recht alt, dennoch hat sich bisher kein Standard durchgesetzt, wo welche Dateien zu speichern sind. Fast jedes Unix-System hat seine eigenen Regeln aufgestellt. Wer mit mehreren unterschiedlichen System arbeitet, wird sich über kurz oder lang darüber ärgern.
Selbst die einzelnen Linux-Distributionen hatten ihre Dateien verschieden angeordnet. Wer früher auf einem Rechner Slackware, auf einem zweiten Debian GNU/Linux und auf einem dritten die LST installiert hatte, der fand viele Dateien auf jedem Rechner in einem anderen Verzeichnissen wieder. Es herrschte also Chaos.
Daher haben sich '94 mehrere Entwickler von Linux und Linux-spezifischer Software zusammengesetzt und eine einheitliche "Linux Filesystem Structure" ausgearbeitet. Ziel dieser Arbeit war es, eine einheitliche Verzeichnisstruktur für Linux-basierte Systeme zu schaffen. Als Ergebnis wurde das im Anhang benannte Dokument geschrieben. Alle gängigen Distributionen halten sich weitestgehend an diesen Standard. Dadurch sind sie generell einfacher zu warten, es ist klar, wo welche Dateien zu suchen sind.
| bin | Enthält normale Programme und Skripte. |
| sbin | Programme, die nur für die Systemadministration interessant sind und auch nur von dieser aufgerufen werden sollten. |
| man | Dokumentation von Programmen, Dateien und Funktionen als Manual-Seiten. |
| info | Dokumentation im Info-Format. |
| doc | Dokumentation der installierten Pakete in beliebigem Format. |
| lib | Zusätzliche Dateien für die verschiedenen Programmpakete. Perl und Emacs suchen dort z.B. ihre Dateien. |
| include | Headerdateien für C- und C++ Programmierung |
| src | Quellcode z.B. vom Linux-Kernel |
Zusätzlich liegen in /usr standardmäßig noch zwei weitere Hierarchien: /usr/local und /usr/X11R6. In diesen befindet sich erneut die gleiche Unterteilung wie in /usr.
Alle lokal installierten Programmpakete, die nicht von vorhnherein in der Distribution enthalten sind, werden üblicheweise unterhalb von /usr/local installiert. So kann diese Hierarchie bei einem Betriebssystem-Update komplett abgehängt oder auf Band ausgelagert und anschließend wieder eingespielt werden.
Da sich mittlerweile ziemlich viele Programme angesammelt haben, die unter X11 laufen, hat man sich entschieden, für diese unter /usr/X11 bzw. /usr/X11R6 eine eigene Hierarchie einzurichten.
Meistens werden für diese Daten ebenfalls eine oder mehrere physikalische Platten verwendet. In einem größeren Cluster von Maschinen befinden sich diese Verzeichnisse zentral auf einem Server und werden per NFS (Network File System) auf den Arbeitsrechnern montiert.
Analog zu /usr/lib gibt es ein Verzeichnis /var/lib, indem für jedes Programm, welches derartige Dateien erzeugt, ein eigenes Unterverzeichnis angelegt wird.
Analog zum /usr-Verzeichnis enthält auch dieses ein eigenes Unterverzeichnis für Konfigurationsdateien der Programme.
Ein spezielles Verzeichnis ist /etc/skel. In ihm sind Vorgaben für persönliche Konfigurationsdateien der Benutzer gespeichert. Sie werden in das Verzeichnis eines neuen Benutzers kopiert, wenn er mit dem adduser-Befehl angelegt wird.
Dieses Verzeichnis enthält zwar viele Dateien, belegt jedoch meistens nur 1 bis 3 Megabytes. Da fast alle Konfigurationsdateien unter Unix simple Textdateien sind, belegen sie kaum Speicherplatz.
Viele Programme benötigen nur eine einzige Datei, um ihre Einstellungen zu lesen. Wenn ein Paket jedoch gleich einen ganzen Satz an Konfigurationsdateien verwendet, dann wird von den Leuten, von denen die Distribution zusammengestellt wird, meist ein eigenes Unterverzeichnis unterhalb von /etc angelegt.
Wie Sie sicherlich schon festgestellt haben, werden Dateien und Verzeichnisse, welche mit einem Punkt beginnen, nicht ohne weiteres von "ls" angezeigt. Wenn Sie diese Dateien sehen möchen, benutzen Sie stattdessen "ls -a".
Auch hier gilt, wenn ein Programm mehrere Dateien benötigt, dann wird meistens ein eigenes Unterverzeichnis angelegt, in dem sie gespeichert werden. Normalerweise können diese benutzerspezifischen Konfigurationsdateien systemweite Einstellungen überschreiben. Sie werden nach der systemweiten Konfiguration gelesen. Bei einigen Programmen wird die entsprechende Datei aus /etc jedoch garnicht mehr gelesen, wenn eine benutzerspezifische existiert (z.B. beim FVWM). Hier ersetzt sie komplett die systemweite. Das jeweilige Verhalten ist abhängig vom Programm und anhand der Manual-Seiten zu klären.
Die Konfigurationsdateien wie z.B. newsfeeds (Daten zu angeschlossenen Systemen) oder expire.ctl (Angaben, welche Newsgruppen wielange aufgehoben werden sollen) werden in /etc/news gespeichert.
Programme, die vom Administrator zum Start benötigt werden, liegen in /usr/sbin (z.B. in.nnrpd oder innd). User-Programme wie z.B. rnews, welches vom UUCP-Subsystem aufgerufen wird, liegen in /usr/bin.
Variable Daten wie die Active-Datei, welche eine Liste der auf diesem System vorhandenen Newsartikel enthält, liegt in /var/lib/news. Die eigentlichen Newsartikel werden im "echten" Spoolverzeichnis in /var/spool/news gespeichert, während die Logdateien in /var/log/news abgelegt werden.
Die Dokumentation erstreckt sich im Fall der Manual-Seiten über verschiedene Abschnitte in /usr/man sowie einem Verzeichnis in /usr/doc.
Martin Schulze