# Verzeichnisstruktur

Als Verzeichnisstruktur (auch Verzeichnisbaum oder Ordnerstruktur) wird im engeren Sinn die hierarchische Gestalt des gesamten Dateisystems eines einzelnen Computers bezeichnet und im weiteren Sinn ein Verzeichnisdienst für beliebige Objekte (wie z. B. Benutzer, Geräte, Dienste, Dateifreigaben und Pakete) eines Firmennetzes. Üblich ist eine Baumstruktur, die bei einer Wurzel beginnt und sich dann beliebig verzweigt.
Die Verzeichnisstruktur ist somit eine logisch strukturierte Abstraktion aller eingebundenen virtuellen oder physischen Dateisysteme unter einem laufenden Betriebssystem und umfasst auch Pseudo-Dateisysteme (procfs, sysfs, …) und externe Ressourcen wie z. B. den Verzeichnisdienst eines Firmennetzes oder anderer Netzwerk-Ressourcen, wenn diese (als virtuelle Dateisysteme) eingebunden sind (z. B. ein Gmail-Postfach per GmailFS oder ein WebDAV-Cloudspeicher per davfs2).
Der Begriff „Unix-Dateisystem“ bezeichnet historisch die gesamte (logische, teils per fstab strukturierte) Verzeichnisstruktur auf Unix-artigen Betriebssystemen, obwohl es auch ein physisches Dateisystem mit dem Namen Unix File System (UFS) gibt.

## Eigenschaften

In jeder Ebene des Baumes können sowohl Dateien als auch Verzeichnisse liegen; letztere bilden die nächste Ebene des Baumes. Die Verzeichnisstruktur ergibt sich dadurch, dass Verzeichnisse wiederum Verzeichnisse, nun Unterverzeichnis genannt, enthalten können, ausgehend von einem Wurzelverzeichnis (englisch root directory). Name und Position jedes Eintrags (Datei oder [Unter-]Verzeichnis) können durch eine entsprechende Pfadangabe spezifiziert werden, die an der Wurzel beginnt und alle zu durchlaufenden Verzeichnisse auflistet.
Beispiel: In nebenstehender Abbildung gibt es im Baum des „Unix-Dateisystems“ die Datei /home/anwendername/Foto.png, also ausgehend vom Wurzelverzeichnis / in dessen Unterverzeichnis home, darunter im Unterverzeichnis anwendername liegt die Datei Foto.png.
Die Möglichkeit, Querverbindungen – also Ordner- oder Dateiverknüpfungen, auch über Ebenen hinweg – zu schaffen, macht genau genommen aus der Baumgestalt der Verzeichnisstruktur ein Netz, denn die strenge Hierarchie geht verloren. Entsprechend kann dieselbe Datei unter Umständen über verschiedene Pfade spezifiziert werden.
Beschränkungen auf eine einzige Ebene (trivialer Baum) sind von eingebetteten Systemen bekannt. Ältere Dateisysteme, wie sie teilweise noch auf Großrechnern gebräuchlich sind, haben eine relativ starre Verzeichnisstruktur mit teilweise genau festgelegter Anzahl von Ebenen, ohne die Möglichkeit, rasch Unterverzeichnisse zu erstellen.

## Ordner

Der Begriff Ordner (englisch folder) wird in den meisten Fällen als Synonym für Verzeichnisse bzw. Unterordner (englisch sub-folder) für Unterverzeichnisse verwendet. Im Detail ist ein Ordner konzeptionell jedoch eher ein Objekt der grafischen Oberfläche, während das Verzeichnis als Bestandteil des Dateisystems betrachtet wird.

## Berechtigungen

Die ersten Berechtigungskonzepte gaben jedem Benutzer einfach ein eigenes Verzeichnis oberhalb der Wurzelebene. Anklänge aus dieser Zeit findet man noch im speziellen Benutzerkonto root unter Unix, das zunächst sämtliche Systemberechtigungen hat. Obwohl inzwischen deutlich weiter entwickelt, hält das heute noch allgemein gebräuchliche Unix-Berechtigungskonzept weiterhin enge Verbindung zur Verzeichnisstruktur, indem pro Verzeichnis (und pro Datei) für einen Benutzer (dem Eigentümer), für eine definierte Gruppe von Benutzern, und für den ganzen Rest jeweils eine Berechtigung vergeben wird. Eine echte n:m-Zuordnung (d. h. die Zuweisung von Rechten/Verboten für jeden Benutzer separat) zwischen Verzeichnissen oder Dateien und berechtigten Benutzerkonten ist damit also noch nicht möglich, will man nicht für jedes Verzeichnis eine eigene Gruppe anlegen. Neuere Lösungen wie ACLs bieten komfortablere Möglichkeiten.

## Zugriff

Ein Programm greift auf die Massenspeicher über das Dateisystem zu. Unter Unix und ähnlichen Betriebssystemen werden dazu Systemaufrufe zur Verfügung gestellt. Die wichtigsten Systemaufrufe sind hier:
* Systemaufrufe für Verzeichnisse:
** mkdir, rmdir Erzeugen und Löschen eines Verzeichnisses
** opendir, closedir Öffnen und Schließen eines Verzeichnisses
** readdir Lesen von Verzeichniseinträgen
** chdir Wechseln in ein anderes Verzeichnis
* Systemaufrufe für Dateien:
** creat, unlink Erzeugen und Löschen einer Datei
** open, close Öffnen und Schließen einer Datei
** read, write Lesen und Schreiben
** seek Neupositionieren des Schreib-/Lese-Zeigers
Außerdem bietet das Betriebssystem Verwaltungsfunktionen, zum Beispiel für das Umbenennen, das Kopieren und Verschieben, Erzeugen eines Dateisystems auf einem neuen Datenträger, für Konsistenzprüfung, Komprimierung oder Sicherung (je nach Betriebssystem und Dateisystem verschieden).
Die Umsetzung der Systemaufrufe eines Programms wird oft vom Kernel eines Betriebssystems implementiert und unterscheidet sich bei den verschiedenen Dateisystemen. Der Kernel übersetzt die Zugriffe dann in die Blockoperationen des jeweiligen Massenspeichers. (Anmerkung: Tatsächlich trifft dies nur auf sogenannte monolithische Kernel zu. Hingegen sind auf einem Microkernel oder Hybridkernel aufgebaute Systeme so konzipiert, dass die Dateisystemoperationen nicht vom Kernel selbst ausgeführt werden müssen.)
Wenn ein Programm eine Datei mittels open öffnet, wird der Dateiname im Verzeichnis gesucht. Die Blöcke auf dem Massenspeicher ermittelt das Betriebssystem aus den entsprechenden Beschreibungsstrukturen. Falls eine Datei im Verzeichnis gefunden wird, erhält das Betriebssystem auch ihre Beschreibungsstruktur und damit die Referenzen zu den zugehörigen Clustern und gelangt über diese zu den konkreten Blöcken.
Mit read kann das Programm dann auf die Cluster der Datei (und damit auf die Blöcke auf dem Massenspeicher) zugreifen. Wird eine Datei aufgrund von write größer, wird bei Bedarf ein neuer Cluster aus der Freiliste entnommen und in der Beschreibungsstruktur der Datei hinzugefügt. Auch die anderen Systemaufrufe lassen sich so in Cluster- bzw. Blockzugriffe übersetzen.

## Hintergrund

Viele Betriebssysteme bieten die Möglichkeit, Festplatten und RAID-Systeme zu partitionieren. Solche Partitionen wie auch ganze Festplatten können mit einem Dateisystem formatiert werden, das heißt, es wird ein leeres Verzeichnis angelegt und der zugeordnete Plattenplatz unter die Verwaltung des Dateisystems gestellt.
Einzelne Dateisysteme können unter unixoiden Systemen (z. B. BSD, System V, Linux, macOS) an beliebiger Stelle innerhalb der Verzeichnisstruktur des Rechners eingehängt („gemountet“) werden und ergänzen dann den Baum um einen weiteren, in sich ggf. verzweigten Ast. Dessen Ursprung bezeichnet man auch als Einhängepunkt, englisch mount point. Andere Betriebssysteme, etwa DOS, Windows oder OpenVMS, vergeben für jedes Dateisystem eine eigene Bezeichnung, so dass mehrere Verzeichnisbäume nebeneinander existieren. Seit Windows 2000 können auch in dessen Dateisystem NTFS Verzeichnisse als Einhängepunkte verwendet werden.
Neuere Entwicklungen für Dateisysteme können einige Techniken relationaler Datenbanken oder objektorientierter Strukturierung verfügbar machen. Konventionelle Verzeichnisstrukturen mit hierarchischer Anlage sind dann eine unter mehreren Möglichkeiten, Informationen anzulegen, zu verändern, wiederaufzufinden und zu lesen.

## Standardisierung

Vorwiegend im Bereich der unixoiden Systeme gibt es Bemühungen, die Verzeichnisstruktur unabhängig vom eingesetzten Betriebssystem zu standardisieren. Durch eine einheitliche Verzeichnisstruktur sind beispielsweise bestimmte ausführbare Dateien oder Konfigurationsdateien immer am selben Ort zu finden, was die Software-Entwicklung, die Migration von einem Betriebssystem zu einem anderen und die Einarbeitung von Anwendern stark vereinfacht. Neben den POSIX-, SUS- und LSB-Standards, die alle auch die Verzeichnisstruktur beschreiben, ist der Filesystem Hierarchy Standard (FHS) eine bedeutende Normierung einer Verzeichnisstruktur.