Die interne Struktur der Verzeichnisse hängt vom verwendeten Dateisystem ab. Wenn Sie genau wissen möchten, was passiert, schauen Sie sich die Implementierungen von Dateisystemen an.
Grundsätzlich ist ein Verzeichnis in den meisten Dateisystemen ein assoziatives Array zwischen Dateinamen (Schlüsseln) und Inodennummern (Werten). So etwas¹:
1167010 .
1158721 ..
1167626 subdir
132651 barfile
132650 bazfile
Diese Liste ist in einer Kette von (normalerweise) 4-KB-Blöcken mehr oder weniger effizient codiert. Beachten Sie, dass der Inhalt regulärer Dateien auf ähnliche Weise gespeichert wird. Bei Verzeichnissen macht es keinen Sinn zu wissen, welche Größe tatsächlich in diesen Blöcken verwendet wird. Aus diesem Grund du
beträgt die Größe der von gemeldeten Verzeichnisse ein Vielfaches von 4 KB.
Inodes sind dazu da, Blöcke miteinander zu verbinden, um eine Einheit zu bilden, nämlich eine "Datei" im allgemeinen Sinne. Sie werden durch eine Nummer identifiziert, die eine Art von Adresse ist, und jede wird normalerweise als einzelner spezieller Block gespeichert.
All dies wird im Kernel-Modus verwaltet. Die Software fordert lediglich die Erstellung eines Verzeichnisses mit einer Funktion an, int mkdir(const char *pathname, mode_t mode);
die zu einem Systemaufruf führt, und der Rest wird hinter den Kulissen ausgeführt.
Über links struktur:
Ein fester Link ist keine Datei, sondern lediglich ein neuer Verzeichniseintrag (dh eine Zuordnung von Name zu Inode-Nummer ), der auf eine bereits vorhandene Inode-Entität² verweist. Dies bedeutet, dass auf denselben Inode über verschiedene Pfadnamen zugegriffen werden kann. Da Metadaten (Berechtigungen, Eigentumsrechte, Zeitstempel usw.) im Inode gespeichert sind, sind diese eindeutig und unabhängig vom Pfadnamen, der für den Zugriff auf die Datei ausgewählt wurde.
Ein symbolischer Link ist eine Datei und unterscheidet sich von ihrem Ziel. Dies bedeutet, dass es eine eigene Inode hat. Früher wurde es wie eine normale Datei behandelt: Der Zielpfad wurde in einem Datenblock gespeichert. Aus Gründen der Effizienz werden in neueren ext- Dateisystemen Pfade, die kürzer als 60 Byte sind, im Inode selbst gespeichert (unter Verwendung der Felder, die normalerweise zum Speichern der Zeiger auf Datenblöcke verwendet würden).
-
1. dies wurde erhalten mit ls -ai1 testdir
.
2. Wessen Typ muss sich heutzutage von 'directory' unterscheiden?