Der folgende Text stammt aus dem »Debian GNU/Linux Guide« von John Goerzen und Ossama Othman. Ins Deutsche übersetzt von Michael »grisu« Bramer. Der Text steht unter der GNU General Public License.
Hardlinks und Inodes
Jede Datei auf deinem System wird durch eine Inode repräsentiert (steht für »Information Node« (Informationsknoten) und wird englisch wie »eye-node« ausgesprochen). Eine Inode enthält alle Informationen der Datei. Jedoch wird die Inode nicht sofort sichtbar. Stattdessen ist jede Inode mit dem Dateisystem durch einen oder mehrere Hardlinks verknüpft. Hardlinks enthalten den Namen der Datei und die Inode-Nummer. Die Inode enthält die Datei selbst, zum Beispiel den Standort auf der Platte, die Zugriffsrechte, den Dateityp und so weiter. Das System kann anhand der Inode-Nummer jede Inode finden.
Eine einfache Datei kann über mehr als einen Hardlink verfügen. Das bedeutet, dass mehrere Dateinamen auf dieselbe Datei verweisen können (sie sind also mit derselben Inode-Nummer verbunden). Es dürfen jedoch keine Hardlinks zwischen Dateisystemen vorkommen. Alle Hardlinks zu einer bestimmten Datei (Inode) müssen sich auf demselben Dateisystem befinden, da jedes Dateisystem seine eigenen Inodes hat und es bei verschiedenen Dateisystemen doppelte Inode-Nummern geben kann.
Da alle Hardlinks einer Datei auf dieselbe Datei verweisen, kannst du Änderungen in der Datei unter einem Dateinamen vornehmen und dann mit einem anderen Dateinamen die Änderungen ansehen:
konsolero@nitidelo ~ $ cd; echo "hello" > firstlink
cd wechselt in dein Homeverzeichnis und legt dort die Datei firstlink an, die das Wort »hello« enthält. Du leitest also die Ausgabe von echo (echo gibt nur die Argumente aus) in die Datei firstlink um.
konsolero@nitidelo ~ $ cat firstlink
Bestätigt den Inhalt von firstlink.
konsolero@nitidelo ~ $ ln firstlink secondlink
Erzeugt einen Hardlink: secondlink zeigt jetzt auf dieselbe Inode wie firstlink.
konsolero@nitidelo ~ $ cat secondlink
Bestätigt, dass secondlink dasselbe ist wie firstlink.
konsolero@nitidelo ~ $ ls -l
Beachte, dass die Anzahl der Hardlinks von firstlink und secondlink 2 ist.
konsolero@nitidelo ~ $ echo "change" >> secondlink
Das ist eine weitere Shell-Umleitung – kümmer dich nicht um die Details. Wir haben das Wort »change« an secondlink angehängt. Überprüf dies mit cat secondlink.
konsolero@nitidelo ~ $ cat firstlink
firstlink hat ebenfalls das Wort »change« angefügt, da firstlink und secondlink auf dieselbe Datei verweisen. Es spielt keine Rolle, wie du die Datei nennst, wenn du Änderungen vornimmst.
konsolero@nitidelo ~ $ chmod a+rwx firstlink
Ändert die Rechte für firstlink. Gib das Kommando ls -l ein, um zu sehen, dass die Rechte von secondlink ebenfalls geändert wurden. Die Rechte werden also in der Inode gespeichert, nicht in den Links.
konsolero@nitidelo ~ $ rm firstlink
Löscht diesen Link. Das ist eine Feinheit von rm - es löscht in Wirklichkeit Links, keine Dateien. Gib jetzt ls -l ein und überzeug dich davon, dass secondlink immer noch da ist. Beachte auch die um 1 verminderte Anzahl der Hardlinks von secondlink.
konsolero@nitidelo ~ $ rm secondlink
Löscht den anderen Link. Wenn zu einer Datei keine Links mehr vorhanden sind, löscht Linux die Datei selbst – das ist die Inode.
Alle Dateien funktionieren so, sogar spezielle Typen von Dateien, wie beispielsweise Geräte (zum Beispiel /dev/hda).
Ein Directory ist einfach eine Liste von Dateinamen und Inode-Nummern – also eine Liste von Hardlinks. Wenn du einen Hardlink erstellst, fügst du nur einen neuen Eintrag in die Liste des Directories ein. Wenn du eine Datei löscht, löscht du nur einen Hardlink aus dem Directory.
