Symbolische Verknüpfung

Verknüpfung von Datei in Dateisystem
(Weitergeleitet von Symbolic link)

Eine symbolische Verknüpfung, auch symbolischer Link, Symlink oder Softlink genannt, ist eine Verknüpfung in einem Dateisystem (Dateien und Verzeichnisse), die auf eine andere Datei oder ein anderes Verzeichnis verweist. Es ist also lediglich eine Referenz auf die Zieldatei bzw. das Zielverzeichnis. Ein Löschen oder Verschieben der eigentlichen Datei führt üblicherweise dazu, dass die Referenz „ins Leere“ weist. Anders als ein Hardlink ist diese Referenz nicht gleichwertig zum eigentlichen Dateisystem-Eintrag der referenzierten Datei.

Unixoide Systeme

Bearbeiten

In einem unixoiden System (z. B. Unix, Linux oder Mac OS) kann man mit dem folgenden Befehl eine symbolische Verknüpfung erstellen[1]

ln -s /Zieldatei /Referenz

oder verständlicher

ln -s /Pfad_1/echte_Datei /Pfad_2/Symlink

Es lässt sich auch ein Link namens „/home/wiki/nullink“ erstellen, der auf /dev/null zeigt:

ln -s /dev/null /home/wiki/nullink

Ob die Datei „/home/wiki/nullink“ eine symbolische Verknüpfung ist, findet man mit einem dieser Befehle heraus:

file /home/wiki/nullink
ls -l /home/wiki/nullink

Der Unterschied zwischen einer symbolischen Verknüpfung und einem harten Link besteht darin, dass eine symbolische Verknüpfung auf einen Pfad zeigt, d. h. technisch handelt es sich um eine Textdatei mit einem Pfad wie /usr/lib/anton.tar oder ../../Datei_2_Ebenen_hoeher.txt als Inhalt, zusammen mit einer Markierung, dass es sich hier um einen symbolischen Link handelt. Ein harter Link zeigt dagegen auf die Datei (oder das Verzeichnis, auch nur eine spezielle Art von Datei) selbst, die technisch meist durch einen Inode repräsentiert wird. Das hat zur Folge, dass ein harter Link immer noch funktioniert, wenn die Zieldatei umbenannt oder auf derselben Partition (oder demselben „Volume“) verschoben wurde (dabei bleibt der Inode nämlich erhalten). Zeigt aber eine symbolische Verknüpfung darauf, bekommt sie nichts davon mit, wenn die Zieldatei verschoben oder umbenannt wird, womit die symbolische Verknüpfung dann ins Leere zeigt. Gleiches gilt, wenn eine symbolische Verknüpfung mit relativem Ziel(pfad) selbst verschoben wird, da sie den Weg (Pfad) zum Ziel von ihrem alten Ort ausgehend beschreibt.

Der Vorteil symbolischer Verknüpfungen ist, dass diese partitions- und dateisystemübergreifend sind und auch problemlos auf Verzeichnisse verweisen können, was bei harten Links nicht der Fall ist. (Zwar sind harte Links auf Verzeichnisse prinzipiell möglich, sollten aber vermieden werden und dürfen in der Regel nur vom Systemverwalter angelegt werden.) Symbolische Verknüpfungen können Benutzer verwirren, da es auf den ersten Blick so scheint, als sei die verknüpfte Datei in mehreren Verzeichnissen gleichzeitig vorhanden; das Löschen der Originaldatei führt aber dazu, dass alle symbolischen Verknüpfungen, die darauf verweisen, ins Leere gehen und die Datei insofern verloren ist (die verbleibenden, ins Leere weisenden Verknüpfungen werden auch broken symlinks genannt). (Bei harten Links ist dies erst der Fall, wenn auch der letzte Name, d. h. die letzte Referenz auf den Inode dieser Datei, gelöscht wurde.)

Symbolische Verknüpfungen auf Verzeichnisse können problematisch sein, wenn Benutzer oder Programme unbedarft mit Verzeichnisbäumen umgehen. Leicht entsteht eine endlose Schleife und damit ein Pufferüberlauf des Verzeichnispfadpuffers, was zu Abstürzen oder gefährlichen Fehlfunktionen führt. Auch kann das Löschen eines Verzeichnisbaums dazu führen, dass die Inhalte des symbolisch verknüpften Verzeichnisses ebenfalls gelöscht werden.

Unix versucht dem zu einem gewissen Grad vorzubeugen, indem es verbietet, eine symbolische Verknüpfung auf ein Verzeichnis über den Systembefehl „rmdir“ zu löschen, damit unbedarft mit symbolischen Verknüpfungen umgehende Programme eine Fehlermeldung erhalten und fehlschlagen, wenn sie eine solche Verknüpfung entfernen wollen. Das Kommando „rm -r“ hingegen entfernt zwar den symbolischen Link, nicht jedoch dessen Ziel.

Desktop-Shortcuts

Bearbeiten

Desktop-Umgebungen wie KDE Plasma Workspaces oder Gnome bieten auf unixoiden Systemen die Möglichkeit sogenannte Shortcuts (en: „räumliche Abkürzung“) zu erstellen und nutzen, die normalerweise die Endung *.desktop tragen. Dabei handelt es sich um Dateiverknüpfungen, die aus einer Textdatei bestehen und eine INI-Dateien ähnliche Struktur aufweisen.[2] Diese Konfigurationsdatei kann einen Pfad oder Befehl, Beschriftungen, Hilfetexte, Symbole und diverse andere Attribute definieren, die die Arbeitsoberfläche interpretieren und ausführen kann. Diese Shortcuts sind im Gegensatz zu symbolischen Links für Anwendungen und Benutzer nicht transparent. Deshalb sind sie mit den Windows-Shortcuts oder MacOS Alias zu vergleichen, bieten aber mehr Funktionen als diese.

Als Unix-System beherrscht Mac OS auch harte und symbolische Links. Erstere werden üblicherweise nicht verwendet, außer in der Apple-eigenen Dateisicherung Time Machine. Symbolische Links werden, wie in Unix üblich, über die Kommandozeile erzeugt.

Zusätzlich hat macOS von seinem Vorgänger Mac OS Classic sogenannte Aliase geerbt,[3] spezielle Dateien mit versteckten Eigenschaften, die auf eine andere Datei oder einen Ordner verweisen. Sie sind wesentlich mächtiger als die Windows-Shortcuts oder Desktop-Shortcuts, da die Unterstützung dieser Aliase tief im Betriebssystem verankert ist (im klassischen macOS im Alias Manager). Ein Alias kann zusätzlich einer auf demselben Dateisystem („Volume“) verschobenen Datei folgen. Dazu werden in den versteckten Informationen (in der Resource Fork) nicht nur der Pfad auf die Zieldatei, sondern auch ihre Inode-Nummer sowie die Volume-Id gespeichert.

Seit Windows Vista bzw. Windows Server 2008 (beide intern Windows NT 6.0) stehen über die Win32-API echte symbolische Verknüpfungen zur Verfügung, die transparent im Dateisystem vorliegen und auf Dateien und Verzeichnisse des eigenen Computers verweisen können. Symbolische Verknüpfungen können eine relative Zielangabe enthalten. Im Gegensatz zu unixoiden Systemen ist der Gebrauch von symbolischen Verknüpfungen unter Windows eher unüblich.

Zum Anlegen dieser symbolischen Verknüpfung wird das Recht Create Symbolic Link benötigt. Dieses steht standardmäßig nur Benutzern mit Administratorrechten zur Verfügung, nicht aber dem Systembenutzer 'SYSTEM'. Weiterhin muss beim Anlegen der Verknüpfung bekannt sein, ob das Ziel eine Datei oder ein Verzeichnis ist: in letzterem Fall ist der Befehl um den Parameter /D (wie Directory) bzw. um /J zu ergänzen. Aus diesen Gründen sind die symbolischen Verknüpfungen von Windows nicht vollständig kompatibel zu POSIX.

Anlegen symbolischer Verknüpfungen ab Windows Vista:

 c:\>mklink "C:\EinLink.pdf" "D:\EinDokument.pdf"
 c:\>mklink /d "D:\Pfad1\Neues Verzeichnis" "..\Pfad2\Reales Verzeichnis"
 c:\>mklink /d "C:\Netzwerkfreigabe" "\\meinserver\meinefreigabe"

Die zweite Zeile zeigt, dass die Zielangabe auch ein relativer Pfad sein kann, der dann erst bei Aufruf der symbolischen Verknüpfung aufgelöst wird, d. h. sollten z. B. D:\Pfad1 und D:\Pfad2 an eine andere Stelle verschoben werden, z. B. von D:\ nach D:\Archiv\, so würde die Auflösung der symbolischen Verknüpfung im Gegensatz zur Verwendung einer absoluten Angabe immer noch funktionieren. Andererseits, wenn D:\Pfad1\ und D:\Pfad2\ nicht mehr einen gemeinsamen Elternpfad teilen würden, wiese die relative symbolische Verknüpfung dann auf einen nicht mehr vorhandenen Pfad.

Anzeigen, wohin eine symbolische Verknüpfung verweist – der Parameter /al filtert die Ausgabe auf symbolische Verknüpfung –:

 c:\>dir /al
 Datenträger in Laufwerk C: ist abc
 Verzeichnis von C:\
 07.12.2010  10:28    <SYMLINK>   EinLink.pdf [D:\EinDokument.pdf]

Löschen symbolischer Verknüpfungen:

 c:\>del "C:\EinLink.pdf"
 c:\>rmdir "D:\Pfad1\Neues Verzeichnis"
 c:\>rmdir "C:\Netzwerkfreigabe"

Weitere Systeme

Bearbeiten

AmigaDOS nutzt den Befehl makelink für harte und weiche Links, wenn das Dateisystem dies unterstützt.

Andere Verwendungen

Bearbeiten

Da das Linkziel üblicherweise ein Pfad auf eine andere Datei ist, und dies eine relativ kurze Zeichenkette ist, werden symbolische Links in vielen modernen Dateisystemen auf eine besonders effiziente Weise gespeichert, so dass kein Datenblock für das Linkziel belegt werden muss und damit auch der Zugriff auf diese Daten sehr schnell erfolgen kann.

Das Linkziel kann jedoch eine beliebige Zeichenfolge sein (also nicht notwendigerweise einen Pfad zu einer anderen Datei darstellen).

Diese beiden Eigenschaften machen sich manche Programme zunutze, indem sie kurze Daten nicht in regulären Dateien ablegen, sondern im Linkziel eines symbolischen Links (z. B. Mozilla Firefox und Thunderbird, um anzugeben, von welchem Prozess ein Profil gerade in Benutzung ist).

Einzelnachweise

Bearbeiten
  1. Manpage von ln, gefunden unter ln – make links between files. Ehemals im Original (nicht mehr online verfügbar); abgerufen am 22. Mai 2014.@1@2Vorlage:Toter Link/unixhelp.ed.ac.uk (Seite nicht mehr abrufbar. Suche in Webarchiven)
  2. Joe: Anatomy of a .desktop File. In: The Linux Critic. 7. April 2010, abgerufen am 20. Februar 2014 (englisch).
  3. Verknüpfung – Alias, maceinsteiger.de