Wie aus einem Pfad eine Datei wird
Ein Dateisystem verwaltet die Dateien auf einem Datenträger, und ein Inode ist die Karteikarte, auf der alles über eine Datei steht außer ihrem Namen. Wer versteht, wie ein Pfad zu einem Inode führt, versteht auch, warum eine Datei zwei Namen haben kann.
In einer Bibliothek führt der Katalog von der Signatur zum Regal. Das Dateisystem tut dasselbe für Pfade wie /home/anna/bericht.txt.
Am Ende dieser Lektion
Notiz
Ich kann erklären, wie das Dateisystem einen Pfad Schritt für Schritt in eine Datei auflöst.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Inode | die Karteikarte einer Datei, ohne ihren Namen | |
| Verzeichnis | eine Datei, die Namen auf Inode-Nummern abbildet | |
| Block | ein fester Abschnitt des Datenträgers | 4096 Bytes |
| Pfad | der Weg von der Wurzel zu einer Datei | /etc/passwd |
| Wurzelverzeichnis | das oberste Verzeichnis, geschrieben als / | |
| Hardlink | ein zweiter Name für denselben Inode |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Inode beschreibt alles außer dem Namen
Unter Linux hat jede Datei einen Inode mit einer Nummer. Im Inode stehen die Größe, der Besitzer, die Rechte, die Zeitstempel und die Nummern der Blöcke, in denen der Inhalt liegt. Der Name steht nicht im Inode.
Der Datenträger ist in Blöcke zerlegt, meist 4096 Bytes groß. Eine Datei von 5000 Bytes belegt deshalb zwei Blöcke. Der Rest des zweiten Blocks bleibt ungenutzt.
Die Karteikarte von /etc/passwd ansehen
stat /etc/passwdHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Verzeichnis listet Namen und Nummern auf
Ein Verzeichnis ist selbst eine Datei mit eigenem Inode. Sein Inhalt ist eine Liste: Name und Inode-Nummer, Zeile für Zeile. So kommt ein Name zu seinem Inode. Zwei Einträge dürfen auf denselben Inode zeigen.
Jedes Verzeichnis enthält den Eintrag . für sich selbst und .. für das übergeordnete Verzeichnis. Im Wurzelverzeichnis zeigt .. wieder auf die Wurzel.
Beispiel: drei Verzeichnisse und eine Datei
| Inode | Art | Inhalt |
|---|---|---|
| 2 | Verzeichnis (Wurzel) | . = 2, .. = 2, home = 5 |
| 5 | Verzeichnis (home) | . = 5, .. = 2, anna = 9 |
| 9 | Verzeichnis (anna) | . = 9, .. = 5, bericht.txt = 14 |
| 14 | Datei | 6200 Bytes in 2 Blöcken |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Pfad wird Schritt für Schritt aufgelöst
Das System beginnt beim Wurzelverzeichnis, dessen Inode-Nummer fest bekannt ist. Für jeden Teil des Pfads liest es das aktuelle Verzeichnis und sucht den Namen. Der gefundene Inode ist das nächste Verzeichnis oder am Ende die Datei.
Für /home/anna/bericht.txt sind es drei Suchschritte: Wurzel, home, anna. Fehlt ein Name oder ist ein Teil in der Mitte eine Datei, schlägt die Auflösung fehl.
Beispiel: /home/anna/bericht.txt auflösen
| Schritt | Verzeichnis (Inode) | Gesuchter Name | Gefunden |
|---|---|---|---|
| 1 | Wurzel (2) | home | 5 |
| 2 | home (5) | anna | 9 |
| 3 | anna (9) | bericht.txt | 14 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Den Pfad /etc/passwd Schritt für Schritt zeigen
namei /etc/passwdHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Hardlink ist ein zweiter Name
Mit ln legen Sie einen zweiten Verzeichniseintrag an, der auf denselben Inode zeigt. Beide Namen sind gleichwertig. Ändern Sie die Datei über einen Namen, sehen Sie es über den anderen.
Im Inode steht ein Zähler, wie viele Namen auf ihn zeigen. Erst wenn der Zähler 0 erreicht und niemand die Datei offen hat, gibt das System die Blöcke frei. rm löscht also einen Namen und nicht unbedingt die Daten.
Eine Datei mit einem Namen anlegen
printf "Hallo\n" > ~/notiz.txtHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Einen zweiten Namen dafür anlegen
ln ~/notiz.txt ~/zweitname.txtHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Inode-Nummern beider Namen vergleichen
ls -i ~/notiz.txt ~/zweitname.txtHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Wie viele Namen zeigen auf den Inode?
stat -c "%h" ~/notiz.txtHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele glauben, der Name gehöre zur Datei und rm lösche die Daten sofort. Der Name steht aber im Verzeichnis, nicht im Inode. rm entfernt den Eintrag und zählt die Namen herunter. Die Daten verschwinden erst, wenn kein Name mehr auf den Inode zeigt.