Verzeichnisstruktur

Aus Mikiwiki
Zur Navigation springen Zur Suche springen

Die Verzeichnisstruktur (auch: Verzeichnisbaum) ist eine logische Gestalt der Dateisysteme, die über Verzeichnisse verfügen. Meist ist es eine Baumstruktur, die bei einer Wurzel beginnt und sich dann beliebig verzweigt. In jeder Ebene des Baumes können sowohl Dateien als auch Verzeichnisse liegen, letztere bilden die nächste Ebene des Baumes. Name und Position jeder Datei kann durch eine entsprechende Pfadangabe bezeichnet werden, die an der Wurzel beginnt und alle zu durchlaufenden Verzeichnisse auflistet.

Festgelegte Verzeichnisstrukturen vereinfachen den Dateienaustausch zwischen Rechnern.

Die Linux-Gemeinde begann schon im Herbst 1993 an der Standardisierung der Verzeichnisstruktur. Ziel war es, portierte Software von fremden Unix-Varianten mit möglichst wenig Aufwand in jeder Linux-Distribution einzusetzen. Dem Projekt FSSTND (Filesystem Standard) folgte der Filesystem Hierarchy Standard / FHS, der noch heute die Vorgaben für alle Distributionen setzt.

Jeder Linux/Unix-Rechner benötigt einen bestimmten Kern von Dateien und Verzeichnissen. Selbst wenn er alle weiteren Dateien (etwa über NFS) aus dem Netz holt, muss dieser Bereich während dem Bootvorgang zur Verfügung stehen. Diese Dateien liegen oft auf einer eigenen Bootpartition im sogenannten Bootbereich; hier liegt also ein komplett gebrauchsfertiges Unix-System. Hier sollte auch alles liegen, was der Administrator für die Wiederherstellung von Dateien aus einer Sicherung benötigt. Dazu gehört eine Shell einschliesslich aller benötigten Bibliotheken, ein Texteditor sowie Software zum Zugriff auf Systembestandteile (z. B. fdisk, mkfs und mount); eine vollständige Liste findet sich in der Spezifikation des FHS.

Als Faustregel sollten 20% des Dateisystems immer frei sein. Zur sauberen Trennung sollten eigene Partitionen für folgende Bereiche eingerichtet werden.

Bereich Grösse Beschreibung
/ etwa 80 MB nur statische Daten
/tmp etwa 50 MB
/var etwa 100 MB
/usr etwa 200 MB Dazu ein separates Verzeichnis "/usr/local".
/home
/usr/local
swap RAM x 2 Etwa entsprechend der doppelten Grösse des vorhandenen Arbeitsspeichers. Bei zwei vorhandenen Festplatten sollte der Swap-Bereich immer auf die zweite Platte, ansonsten nach Möglichkeit ans Ende der Platte.

Üblicherweise sind folgende Verzeichnisse vorhanden.

Verzeichnis Beschreibung
/ Das Wurzelverzeichnis (auch: Root-Verzeichnis). Viele Dienstprogramme (daemons) verwenden es als Arbeitsverzeichnis. Produziert ein solcher Dienst einen Core-Dump, so darf dieser auf keinen Fall das Root-Dateisystem füllen. Ein Root-Dateisystem mit weniger als 15 MB freiem Platz sollte deshalb unbedingt "read-only" eingehängt werden.
/bin Wichtige Programme.
/boot Hier lagern auf einem modernen Linux-System der Linux-Kernel, ein RAM-Disk-Image mit essentiellen Kernelmodulen sowie die Konfigurationsdateien des Bootloaders (GRUB oder Lilo). Zwar gehören diese Dateien zum Kern eines Linux-Systems, sie müssen aber nicht unbedingt auf der Partition mit dem Root-Verzeichnis liegen.
/dev Gerätedateien. Diese Dateien sind Knoten zu einem normalerweise physikalischen Gerät wie Festplatte, Drucker oder Modem. Diese Knoten sind Kommunikationspunkte mit den Gerätetreibern; die Treiber selber werden von Fall zu Fall modular hinzugeladen. Die Knoten werden mit dem Befehl mknod erstellt. Unter Linux ist das Anlegen neuer Spezialdateien auch mit dem Skript "/dev/MAKEDEV" möglich. Die Benennung der Gerätedateien ist je nach Unix-Version verschieden.

Ansehen der Gerätedateien im Verzeichnis "/dev". Die beiden Zahlen vor dem Datum bezeichnen die durch den Hersteller bestimmte "major number" bzw. "minor number".

$ ls -lL /dev
insgesamt 56
crw-rw----  1 root   audio     14,  14 2008-11-02 11:17 admmidi
crw-rw----+ 1 root   audio     14,  12 2008-11-02 11:17 adsp
crw-rw----  1 root   video     10, 175 2008-11-02 11:17 agpgart
...

Neuanlegen eines zeichenorientierten ("c") Geräts.

$ mknod /dev/tty/c c <majorNumber> <minorNumber>
/etc Konfigurationsdaten für System und Anwendungen (z. B. Apache, Samba). Hier findet sich alles, was beim Systemstart oder -stop geschieht, welche Benutzer dem System bekannt sind, welche Partitionen eingehängt werden usw.
  • In der Datei "/etc/fstab" bzw. "/etc/vfstab" steht, welche Partitionen im System eingehängt werden.
  • Im Verzeichnis "/etc/init.d" stehen die Skripte, die beim Systemstart bzw. -stop ausgeführt werden.
  • In der Datei "/etc/passwd" bzw. "/etc/shadow" steht das verschlüsselte Passwort jedes Benutzers.
/home Die Heimatverzeichnisse der Benutzer (diese liegen auf BSD-Systemen unter "/usr/home"). In lokalen Netzen koppeln Administratoren dieses Verzeichnis oft mit einem Automounter, der das jeweils benötigte Verzeichnis dynamisch von einem Dateiserver holt, sobald der Benutzer sich anmeldet.
/lib Systembibliotheken und Kernelmodule.
/media Einhängepunkt für einige weitere Dateisysteme. Wechselmedien erhalten eigene Verzeichnisse, z. B. "/media/floppy" oder "/media/cdrom". Befindet sich z. B. keine CD-ROM im Laufwerk, so ist auch das Verzeichnis "/media/cdrom/" leer.
/media Einhängepunkt für vorübergehend benötigte Dateisysteme, etwa bei der Reparatur eines Rechners oder beim kurzfristigen Zugriff auf ein Netzwerkdateisystem.
/proc Ein virtuelles Dateisystem. Angelegt durch den Linux-Kernel existiert es nur im Arbeitsspeicher. Die enthaltenen Informationen betreffen das laufende System: Prozesse, Zustände, Belegungen usw. Dieses Dateisystem stellt Kernelvariablen bereit, etwa für die Konfiguration einer Netzwerkschnittstelle oder von USB-Geräten.

Informationen zum aktuellen Prozessor.

$ cat /proc/cpuinfo
/root Heimatverzeichnis von Benutzer "root".
/run Vom System für das Starten Diensten und Ressourcen benötigte Dateien.
/sbin Wichtige Systemprogramme.
/tmp Temporäre Dateien.
/usr Hier versammelt sich meist der Hauptteil der Anwendungen, sodass das Verzeichnis oft recht gross ist. Hier sind viele auch im Verzeichnis "/" vorhandene Verzeichnisse enthalten.
  • Passend zu "/bin" gibt es ein Verzeichnis "/usr/bin".
  • Systemprogramme stehen auch in "/usr/sbin".
  • Dynamische Bibliotheken stehen auch in "/usr/lib".

Das Verzeichnis "/usr/etc" darf laut FHS nicht existieren - die Konfigurationsdaten aller Programme landen in "/etc". "/usr" enthält zudem eine Reihe weiterer Unterverzeichnisse:

  • "/usr/src" enthält Quelltexte.
  • "/usr/include" enthält Include-Dateien für verschiedene Programmiersprachen.
  • "/usr/share/doc", "/usr/share/man" und "/usr/share/info" enthalten Dokumentationsdateien für die installierten Softwarepakete.

Ohne die Werkzeuge der Distribution installierte Programme werden üblicherweise unter "/usr/local" abgelegt. Ein privat erstelltes Skript findet in "/usr/local/bin" seinen Platz. Die zugehörige Dokumentation findet sich unter "/usr/local/man". Es bietet sich zudem an, "/usr/local" genau wie "home" als eigene Partition anzulegen. Nach einem Wechsel der Distribution reicht dann ein einfacher Einhängebefehl oder eine Ergänzung in der Datei "/etc/fstab" und die eigenen Dateien stehen wieder zur Verfügung.

Zusätzliche Software darf - um dem FHS zu entsprechen - ausser in "/usr" auch in "/opt" landen. Während "/usr" die Dateien nach Funktionen gliedert (Binaries liegen in "/usr/bin", Bibliotheken in "/usr/lib"), sortiert "/opt" die Dateien nach dem Hersteller oder dem Softwarepaket. Ein extremes Beispiel dafür für diese systemübergreifende Konvention ist Solaris mit seinen zahlreichen "/opt/SUNW*"-Paketen. Unter Linux finden sich oft Installationen mit "/opt/kde3" oder "/opt/gnome".

Die Dateien unter "/usr" und "/opt" ändern sich naturgemäss selten, da nur die Installation zusätzlicher Software Veränderungen verursacht. Es bietet sich darum an, diese beiden Verzeichnisse nach der Initialisierung nur lesbar (read-only) einzuhängen, um versehentliche oder absichtliche Veränderungen zu unterbinden. Bei einer Sicherung ist Vollständigkeit wichtig - eine tägliche Sicherung von Bereichen, die sich nur selten ändern ist jedoch meist überflüssig.

/var Variable Daten. Ein laufendes Betriebssystem produziert eine Vielzahl sich schnell ändernder Daten, die üblicherweise hierhin geschrieben werden. Dieses Verfahren trennt die veränderlichen Dateien von der nur lesbar eingehängten "/usr"-Partition. Wichtige Verzeichnisse sind:
  • "/var/log" für die Log- und Protokolldateien.
  • "/var/mail" für die Maildateien der Benutzer; ältere Linux-Systeme benutzen hierfür auch das Verzeichnis "/var/spool/mail".
  • "/var/spool" für die Dateien von Spoolern.
  • "/var/run" für die PID-Dateien mit den Prozessnummern laufender Daemons für die Interprozess-Kommunikation.

Vor allem Protokolldaten können abhängig von der Auslastung des Systems schnell zu einer erheblichen Grösse anwachsen. Befinden sich solche Dateien auf der Hauptpartition und sie laufen über, stürzt der Rechner in eine Reihe bizarrer Fehlfunktionen ab, weil Programme benötigte temporäre Dateien nicht mehr anlegen können. "/var" sollte deshalb auf einer eigenen Partition untergebracht werden.

Um beispielsweise Exploits bei E-Mail-Benutzern zu verhindern, kann der Befehl quota verwendet werden.

Auch die Datenverzeichnisse von Diensten (z. B. eines HTTP- oder FTP-Servers) erhalten meist ein eigenes Verzeichnis. Der Umgang mit diesen Einhängepunkten unterscheidet sich unter den Distributionen stark. Der FHS schreibt vor, dass solche Daten in einem gesonderten Verzeichnis "/srv" liegen sollen. SUSE hält sich daran und lässt die Document Root von Apache in der Voreinstellung auf "/srv/www" zeigen. Debian und andere Distributionen dagegen verwenden "/var/www". Das Dateiverzeichnis des FTP-Daemon liegt oft in "/home/ftp".

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
Wikipedia ger Verzeichnisstrukturwbm Enzyklopädischer Artikel