# Verzeichnisstruktur

Abbildung: Die Linux-Verzeichnisstruktur (Ausschnitt)

Bei der Unmenge von Dateien in Unix-Systemen (auf meinem System sind es 106839!) ist eine hierarchische Struktur unabdingbar. Lange Zeit hat jedes Unix-Derivat seine eigenen Vorstellungen vom Aufbau seiner Dateiverwaltung mitgebracht, aber unterdessen ist man sich mehr oder weniger einig geworden und erarbeitete den Filesystem Hierarchie Standard, der wichtige Strukturen definiert. Die meisten Distributionen folgen diesen Richtlinien, wobei Abweichungen oft durch unterschiedliche Auslegung des Standards begründet werden.

Neben der Beschreibung der vorgesehenen Verwendung jedes Verzeichnisses, werden auch konkrete Kommandos genannt, die mindestens in diesen Verzeichnissen vorhanden sein müssen. Des Weiteren finden systemspezifische Vorgaben und optionale Komponenten Erwähnung.

Sobald der Kernel aktiv ist, lädt er als erstes das Root-Filesystem, in dem alle für die Aufgaben des Kernels notwendigen Programme und Konfigurationsdateien angesiedelt sein müssen.

Zu den Programmen gehören:

- Dienstprogramme zum Prüfen und Reparieren des Dateisystems
- Programme zum Sichern der Systemdaten und zur Installation neuer Systemteile
- Eventuell wichtige Netzwerkprogramme

Wenden wir uns also zunächst dem Inhalt des Wurzelverzeichnisses zu. Verzeichnisse und Dateien, die als optionale Komponenten im Standard enthalten sind, werden farblich dargestellt.

## Verzeichnisse in der Wurzel

`/bin` | Die wichtigsten Kommandos, um mit dem System arbeiten zu können, findet man hier. Sie dürfen von allen Nutzern ausgeführt werden. Zu den Kommandos gehören `cat`, `chgr`, `chmod`, `chown`, `cp`, `date`, `dd`, `df`, `dmesg`, `echo`, `ed`, `false`, `kill`, `ln`, `login`, `ls`, `mkdir`, `mknod`, `more`, `mount`, `mv`, `ps`, `pwd`, `rm`, `rmdir`, `sed`, `setserial`, `sh`, `stty`, `su`, `sync`, `true`, `umount`, `uname` (`sh` ist meist ein Link auf `bash`).
`/boot` | Hier findet man die statischen Dateien des Bootmanagers und die Kernel. (In früheren Linux-Versionen wurden der "Haupt"-Kernel im Root-Verzeichnis installiert und nur die optionalen Kernel in diesem Verzeichnis.)
`/dev` | In diesem Verzeichnis stehen die Gerätedateien (Devices), die die gesamte Hardware beschreiben (Festplatte, Floppy, RAM...), sowie einige Devices mit speziellen Aufgaben. Drei Informationen sind für jedes Device relevant:
`brw-rw-rw- 1 root disk 2, 0 Nov 8 20:48 /dev/fd0`
Art des Zugriffs: Blockorientiert (b) - gepufferter Zugriff, z.B. Festplatten Zeichenorientiert (c) - ungepufferter Zugriff, z.B. Bildschirm, Drucker
`brw-rw-rw- 1 root disk 2, 0 Nov 8 20:48 /dev/fd0`
Hauptgerätenummer (major device number): Nummer des zu verwendenden Treibers Unter jeder Nummer existiert je ein Treiber für zeichen- und blockorientierte Geräte (z.B. Nummer 2 für Terminals (c) und Floppys (b)) Beschreibung vergebener Nummern unter `/usr/src/linux/Documentation/devices.txt`
`brw-rw-rw- 1 root disk 2, 0 Nov 8 20:48 /dev/fd0`
Nebengerätenummer (minor device number): Nummer der zuständigen Routine in einem Treiber Dient z.B. zur Unterscheidung der Diskettenformate im Floppytreiber Für ein zweites CD-ROM usw. Ein etwas ungewöhnliches Device ist `/dev/null`, der Mülleimer von Unix. Möchte man z.B. bei der Suche nach Dateien Fehlermeldungen (permission denied) vermeiden, hilft Folgendes:
`user@sonne> find / -name "*" 2> /dev/null`
Den Mechanismus erläutert der Abschnitt Ein/Ausgabe-Umleitung. Wichtige Gerätedateien sind:
Datei | Beschreibung
cdrom | Link auf eine entsprechende Datei (z.B. cdu535)
cua* | Serielle Schnittstellen (ausgehende Verbindungen)
fd* | Diskettenlaufwerke
hd* | IDE-Festplatten
kmem | Speicherauszug (core)
lp | Parallele Schnittstellen
mouse | Link auf die entsprechende Datei
port | IO-Ports
sd* | SCSI-Festplatten
tty* | Terminalkonsolen
ttys* | Serielle Schnittstellen (eingehende Verbindungen)
`/etc` | Enthält alle lokalen Konfigurationsdateien (Tastatur, X, Netzwerk...)
`/home` | Alle Heimatverzeichnisse der Nutzer findet man hier. Nach dem Login landet jeder Benutzer (i.d.R.) in seinem Home. Heimatverzeichnisse können vom Systemverwalter auch an anderer Stelle angesiedelt werden.
`/lib` | Die beim Systemstart benötigten Bibliotheken stehen hier. Ebenso liegen die Kernelmodule in einem eigenen Unterverzeichnis unterhalb von `/lib`.
`/mnt` | Mountpunkt für temporäre Partitionen
`/opt` | Software, die nicht zum üblichen Installationsumfang von Unix-Systemen gehören, werden oft unter diesem Zweig installiert. So werden nahezu alle kommerziellen Softwarepakete hier eingerichtet; auch die Programme zur KDE befinden sich hier.
`/root` | Heimatverzeichnis des Administrators. In realen Unix-Installationen werden die Heimatverzeichnisse aller Nutzer oft auf einem Server gehalten. Bei einem Ausfall eines solchen Servers sollte aber zumindest Root in der Lage sein, vernünftig mit dem System zu arbeiten.
`/sbin` | Wichtige System-Programme (beim Booten benötigt; Ausführung erfordert Root-Rechte)
`/tmp` | Temporäre Dateien können hier abgelegt werden, jeder Nutzer ist dazu berechtigt.
`/usr` | Zweite Hierarchie
`/var` | Variable Daten

Der Filesystem Hierarchie Standard bezeichnet die Verzeichnisse unter `/usr` (user system ressources) als "zweite Hierarchie". Schauen wir uns an, was dort stehen sollte:

## Verzeichnisse unter `/usr`

`X11R6` | X Window System (Version 11, Release 6)
`X386` | X Window System (Version 11, Release 5 auf x86er)
`bin` | Die meisten Nutzerprogramme
`games` | Spiele und Lernprogramme
`include` | Headerdateien für C-Programme
`lib` | Allgemeine Bibliotheken (außer X11)
`local` | Lokale Hierarchie. Hier hat der Administrator die Möglichkeit, Nicht-Standard-Pakete einzuspielen.
`sbin` | (weniger wichtige) Systemprogramme
`share` | Architektur-abhängige Dateien
`src` | Quelldateien zu den Paketen

Einige (symbolische) Links sind ebenso vorgeschrieben:

## Links unter `/usr`

`/usr/spool` | Link auf `/var/spool`
`/usr/tmp` | Link auf `/var/tmp`
`/usr/spool/lock` | Link auf `/var/lock`

Es gibt eine Menge Daten, die permanenter Veränderung unterliegen oder nur kurze Zeit existieren. Protokollierungen fallen ebenso in diese Kategorie, wie auch Mails, zu druckende Dateien, News, ... Insbesondere auf Servern sollte dem Verzeichnis `/var` eine eigene Partition gegönnt werden.

## Verzeichnisse unter `/var`

`account` | Prozessnutzungsprotokoll (falls unterstützt)
`cache` | Zwischenspeicher von Programmen
`crash` | Speicherauszug bei Systemabsturz (falls unterstützt)
`games` | Variable Spieledaten
`lock` | Sperren (Dateien, Geräte, etc.)
`log` | Protokolle über Systemvorgänge
`mail` | Mailboxen der Nutzer
`opt` | Variable Daten der optionalen Programme
`run` | Dateien zu laufenden Prozessen
`spool` | Von Anwendungen gespoolte Daten
`state` | Variable Status Informationen
`tmp` | Temporäre Dateien, die zwischen Reboots erhalten bleiben
`yp` | Dateien des Network Information Systems

Speziell für Linux-Systeme definiert der Standard Weiteres:

## Linux Systeme

allgemein | Der Name des Standard-Kernels ist `vmlinux` oder `vmlinuz`
`/dev` | Enthält nur die im Dokument ''Linux Allocated Devices'' beschriebenen Links (sonst wie oben)
`/proc` | Enthält Kernel- und Prozessinformationen in einem virtuellen Dateisystem
`/sbin` | Enthält zusätzlich Routinen zum `ext2`-Dateisystem und `lilo`
`/usr/src` | Enthält zusätzlich die Kernelquellen

Des Weiteren werden im Standard Daten nach folgenden Kriterien unterschieden:

- Statische und variable Daten
- Gemeinsam und exklusiv nutzbare Daten