Hard-/Softlinks – Teil 1: Theorie (laaaangweilig !!)

Der Begriff „verlinken“ ist grundsätzlich jedem geläufig. Bezogen auf ein Dateisystem kann man ganz grob zwei Linkarten unterscheiden: Hardlinks und Softlinks
Doch was ist der Unterschied? Und wann setzt man was ein?

Der Unterschied zwischen Hard- und Softlinks liegt darin, dass ein Softlink ein Link auf die Ursprungsdatei, ein Hardlink jedoch ein weiterer Link von der Ursprungsdatei ist.
Was hier ähnlich klingt, sind aber zwei komplett unterschiedliche Situationen.
Ich versuche das mal an einem Beispiel zu beschreiben.
Kleine Vorwarnung:
Das folgende Beispiel ist sehr sehr primitiv gehalten. Die Dateiablage selber ist wesentlich komplexer und die Experten unter Euch mögen mir die sehr vereinfachte Erklärung entschuldigen. Ich denke aber, daß das Grundprinzip dadurch leichter zu verstehen ist, als bei einer hoch technischen Erklärung.

Es ist ein Irrtum, zu glauben, daß eine Datei in einem Verzeichnis abgespeichert wird. Aber genau diese Denkweise verursacht die größten Probleme beim Verstehen von Hardlinks.
Ich mache es kurz, eine Datei wird NICHT in einem Verzeichnis abgespeichert, sondern auf der Festplatte (oder einen anderen Datenträger).

Wow! – na das ist ja mal eine Überraschung….

Ok, schauen wir uns das genauer an.
Unsere Datei ist eine einfache Worddatei mit dem Inhalt: „Lorem ipsum dolor …..“ und wir wollen diese Datei auf dem Laufwerk „C:“ im Verzeichnis „Daten“ -> „Dokumente“ unter dem Namen „Mein-Text.docx“ speichern.
Da die Datei auf der Festplatte abgespeichert wird, benötigt sie erstmal eine eindeutige Identifizierungsnummer, die vom Dateisystem vergeben wird. Unter Linux nennt man das Inode, unter Windows ist es die FileID. Mit dieser Nummer ist die Datei eindeutig gekennzeichnet und kann immer wieder gefunden werden. Ebenso bekommt sie einen Dateinamen, mit dem sie nun für uns User leserlich (und vor allem aussagekräftig) zu erkennen ist. Egal wie oft man diesen Namen ändert – die Inode, oder FileID, bleibt immer die Selbe. Was jetzt noch fehlt, ist die Information, wo diese Datei erscheinen (!) soll. In unserem Fall soll diese Datei im Verzeichnis „Daten\Dokumente“ erscheinen – also teilen wir dies der Datei mit. Das Dateisystem gibt noch seinen eigenen Senft, in Form von Dateirechten, dazu und fertig ist das Datenpaket.
01_Hard-Softlink_01

Wir finden diese Datei jetzt im Arbeitsplatz unter „C:\Daten\Dokumente\Mein-Text.docx.“

Nun möchten wir diese Datei in das Verzeichnis „C:\Daten\Backup“ verlinken.

Softlink:
Der Softlink ist der (unter Windows-Usern) bekannteste Weg. Am schnellsten könnte man jetzt mit der rechten Maustaste die Datei in das Verzeichnis Backup ziehen und im erscheinenden Requester die Auswahl „Hierher verknüpfen“ auswählen.
Schon hat man eine Verknüpfung und wenn man diese mit einem Doppelklick öffnet, dann würde unsere Worddatei geöffnet werden.
Aber wie läuft das nun ab.
Diese Verknüpfung hat die Dateiendung „.lnk“. Genau gesagt, handelt es sich hierbei wieder um eine kleine Datei, nur dass diese Datei keine Daten beinhaltet, sondern eine Art Wegweiser auf die gewünschte Datei. In unserem Fall hat die Verknüpfung einen Wegweiser auf „C:\Daten\Dokumente\Mein-Text.docx“.
01_Hard-Softlink_02
Das wichtigste ist jedoch, dass es sich dabei um eine neue, eigene Datei handelt, was an der anderen Inode/FildeID zu erkennen ist.
01_Hard-Softlink_03
Ergebnis Windows
01_Hard-Softlink_03a
Ergebnis Linux
01_Hard-Softlink_03b

Hardlink:
Bei einem Hardlink läuft die Sache anders ab. Hier wird nicht eine neue Datei (also ein Wegweiser) zur gewünschten Datei erzeugt, sondern man gibt der Datei die zusätzliche Information, dass sie sich noch in einem anderen Verzeichnis zeigen soll.
In unserem Fall wird der Worddatei mitgeteilt, dass sie zusätzlich noch im Verzeichnis „C:\Daten\Backup“ mit dem Dateinamen „Mein-Text.docx“ erscheinen soll. Der Dateiname muss hier mit angegeben werden, denn nicht nur weitere Pfade, sondern auch weitere Dateinamen können unterschiedlich sein.
01_Hard-Softlink_04
Der Effekt ist nun, dass in beiden Verzeichnissen die gleiche Datei erscheint.
01_Hard-Softlink_05
Ergebnis Windows
01_Hard-Softlink_05a
Ergebnis Linux
01_Hard-Softlink_05b

Was passiert …
… wenn man nun die Datei „Mein-Text.docx“ im Verzeichnis „C:\Daten\Dokumente“ löscht ?

Softlink:
Wird die Datei „C:\Daten\Dokumente\Mein-Text.docx“ gelöscht, dann ist diese Datei nicht mehr existent. Da aber der Softlink eigentlich nur ein Wegweiser zu der gelöschten Datei war, führt dieser „Wegweiser“ in´s Nichts. Er verweist auf eine Datei an einem Ort, den/die es nicht mehr gibt.
Man bekommt eine Fehlermeldung.
01_Hard-Softlink_06

Hardlink:
Beim Löschen der Datei „C:\Daten\Dokumente\Mein-Text.docx“ wird in der Datei der Pfad „C:\Daten\Dokumente\Mein-Text.docx“ gelöscht. Da aber diese Datei eine weitere Pfadangabe enthält, bleibt diese Datei auf der Festplatte erhalten – die Datei hat ja den weiteren „Auftrag“ auch im Verzeichnis „C:\Daten\Backup\Mein-Text.docx“ zu erscheinen.
01_Hard-Softlink_07
Erst wann man die die Datei „C:\Daten\Backup\Mein-Text.docx“ ebenfalls löscht (genau genommen also den Eintrag in der Datei, dass sie auch in dem Verzeichnis Backup zu erscheinen hat) erkennt das Dateisystem, dass keine weiteren Verzeichnisse mehr angegeben sind und somit wird vom Dateisystem die Datei mit der Inode/FildID XXX gelöscht.
01_Hard-Softlink_08

Dies ist wie gesagt eine sehr rudimantäre Darstellung. Technisch gesehen ist es weit komplexer, aber ich denke, dass in dieser stark vereinfachten Art der Erklärung die Zusammenhänge durchaus verständlich aufgezeigt werden konnten. Sollte ja auch nur die Verständnisbasis für die kommenden Beispiele sein.

7 Gedanken zu „Hard-/Softlinks – Teil 1: Theorie (laaaangweilig !!)“

  1. Vielen Dank. Ein sehr einfacher und verständlicher Artikel. Genau das richtige für den Einstieg

  2. Klare Sache, toll erklärt! Danke.
    Was noch fehlt wäre ein kleiner Wegweiser, welche Variante für welchen Einsatz am geeignetsten ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

4 × 4 =