File Linking

Links sind zusätzliche Zeiger auf Dateien oder Verzeichnisse. Die Frage ist meist, worin der Unterschied zwischen harten (hard) und symbolischen (soft) Links besteht. „Weiche“ Links gibt es nicht - so etwas ist in der Regel ein Übersetzungsfehler.

Soft Links

Ein symbolischer Link zeigt auf eine Datei oder ein ganzes Verzeichnis. Im Prinzip ist ein symbolischer Link eine Textdatei, die den kompletten Pfad zur Ziel-Datei enthält und in einem Dateilisting selbst als „symbolische Link-Datei“ markiert ist (bei ls -l mit vorangestelltem l). Löscht man die Ziel-Datei oder benennt sie um, bleibt der symbolische Link erhalten, führt danach aber ins Leere. Symbolische Links funktionieren partitionsübergreifend und erinnern an die Verknüpfungen/Shortcuts in Windows. Sie werden im Verzeichnislisting besonders hervorgehoben angezeigt.

Prominente symbolische Links ab CentOS 7 sind direkt unter / zu finden: /bin, /lib, /lib64 und /sbin, die auf entsprechende Unterverzeichnisse in /usr zeigen - was bereits 2012 in Fedora 17 Einzug hielt.

Hard Links

Ein harter Link ist ein Dateiname, der auf den Inode einer Datei zeigt, der wiederum auf den eigentlichen Speicherplatz der Datei auf der Platte verweist. Den ersten harten Link erzeugt das Betriebssystem beim Erstellen der Datei automatisch. Weitere harte Links sind nichts anderes als Dateinamen für den gleichen Inhalt (was auch Speicherplatz spart) und werden konsequenterweise als Dateien und nicht als Links angezeigt.

Daher gilt: alle harten Links auf die gleiche Datei besitzen die gleichen Datei-/Benutzer-/Gruppen-Berechtigungen, Zeitstempel sowie denselben Link-Count und Inhalt.

Wird eine Datei gelöscht, wird zunächst ihr Dateiname entfernt. Ein zweiter Dateiname (ein Hard Link) auf den Inhalt der Datei funktioniert dann immer noch. Erst wenn keine weiteren harten Links auf den Inhalt der Datei zeigen, wird auch der Inode gelöscht und damit der Speicherplatz vom Dateisystem freigegeben. Harte Links können jedoch nicht auf Verzeichnisse zeigen und gelten nur innerhalb einer Partition.

Anschaulich:

[inode/File Content]
├── [hard link 1 (= filename.txt)] --- [softlink]
├── [hard link 2 (= filename2.asc)]
└── [hard link n (...)]

So erstellt man…

  • Hard Links: ln path/to/existing/file path/to/new/filename

  • Soft Links: ln -s path/to/existing/file path/to/new/link-name

Um die Inodes von Dateien und Links einzusehen, verwendet man

ls -li
# or if `ll` alias is set:
ll -i

Tipp

So findet man alle harten Links zu einer Datei (als Startpunkt der Suche macht nur das lokale Dateisystem Sinn; der Parameter xdev sorgt dafür, dass find auch im gleichen Dateisystem bleibt):

find / -xdev -samefile myfile

Built on 2022-06-03