Um das Konzept der Verweise zu verstehen, wird dies am besten an einem Beispiel verdeutlicht. Zunächst wird eine normale Datei angelegt:
$ pwd /home/franz/exemple $ ls $ touch a $ ls -il a 32555 -rw-rw-r-- 1 franz franz 0 Dez 10 08:12 a |
Die Option -i des Kommandos ls zeigt Ihnen als erste Spalte der Ausgabe die Inode-Nummer einer jeden Datei. Wie Sie sehen können, waren vor dem Erzeugen der Datei a keine anderen Dateien in diesem Verzeichnis vorhanden. Interessant ist auch das dritte Feld der Ausgabe, der Verweiszähler einer jeden Datei.
Das Kommando touch a kann in Wirklichkeit in zwei verschiedene Aktionen unterteilt werden:
Erzeugung eines Inodes des Typs ,,normale Datei``, dem das System die Nummer 32555 zugewiesen hat.
Erzeugung eines Verweises auf diesen Inode mit dem Namen a im aktuellen Verzeichnis /home/franz/example. Also stellt die Datei /home/franz/example/a lediglich einen Verweis auf den Inode mit der Nummer 32555 dar. Wie der Verweis-Zähler zeigt, ist dies momentan noch der einzige.
Wenn wir nun aber
$ ln a b $ ls -il a b 32555 -rw-rw-r-- 2 franz franz 0 Dez 10 08:12 a 32555 -rw-rw-r-- 2 franz franz 0 Dez 10 08:12 b $ |
eingeben, haben wir einen weiteren Verweis auf den selben Inode erzeugt. Wie Sie sehen können, haben wir keine Datei mit dem Namen b erzeugt, sondern einfach nur einen weiteren Verweis auf den Inode mit der Nr. 32555 im selben Verzeichnis hinzugefügt. In der Ausgabe des Befehls ls -l erkennen Sie, das der Verweis-Zähler nun einen Wert von 2 aufweist.
Falls wir nun:
$ rm a $ ls -il b 32555 -rw-rw-r-- 1 franz franz 0 Dez 10 08:12 b $ |
ausführen, sehen wir, dass, obwohl wir die ,,Original-Datei`` gelöscht haben, der Inode immer noch existiert. Jetzt stellt allerdings die Datei /home/franz/example/b den einzigen Verweis dar.
Also wird ein Inode nur dann referenziert, falls mindestens ein namentlicher Verweis in einem beliebigen Verzeichnis existiert.[1] Verzeichnisse selbst werden ebenfalls als Inodes gespeichert, ihr Verweis-Zähler zeigt jedoch, im Gegensatz zu allen anderen Dateitypen die Anzahl ihrer Unterverzeichnisse an. In einem Verzeichnis existieren immer mindestens zwei Verweise. Einen auf das aktuelle (,,.``) und einen auf das übergeordnete Verzeichnis (,,..``).
Typische Beispiele für nicht referenzierte Dateien (also solche, die keinen Namen tragen), sind Netzwerkverbindungen. Sie werden niemals einen Eintrag in Ihrem Dateibaum finden, der zu Ihrer Verbindung mit http://www.linux-mandrake.com/ gehört, egal welches Verzeichnis Sie auch betrachten. Analog existiert auch eine Datei, wenn Sie eine Ein- und Ausgabeumleitung auf einer Shell durchführen, die aber ebenfalls nicht referenziert wird.
[1] | Jedenfalls wenn das Verzeichnis im gleichen Dateisystem vorhanden ist. |