Symbolische Verknüpfung

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 12. März 2014 um 13:27 Uhr durch Robbit (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Zur Navigation springen Zur Suche springen

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.

Unix

In einem Unix-System kann man mit dem folgenden Befehl eine symbolische Verknüpfung erstellen

ln -s /Quelldatei /Zieldatei(Optional)

oder verständlicher

ln -s /Pfad/echte_Datei /Pfad/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" als Inhalt und einer Markierung, dass es sich um einen symbolischen Link handelt. Ein harter Link zeigt dagegen auf die Datei (oder das Verzeichnis, welches auch nur eine spezielle Art von Datei ist) selbst, technisch meist durch einen Inode repräsentiert, was zur Folge hat, dass ein harter Link immer noch funktioniert, wenn die Zieldatei umbenannt oder auf derselben Partition (oder auf demselben "Volume") verschoben wurde (dabei bleibt der Inode nämlich erhalten). Zeigt aber eine symbolische Verknüpfung darauf, bekommt sie davon nichts 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 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 ("super user") 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. Bei harten Links ist dies erst der Fall, wenn auch der letzte Name, d. h. die letzte Referenz auf diese 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 (sogenannter broken symlink).

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

Grafische Arbeitsumgebungen wie der 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 tagen . Dabei handelt es sich um Dateiverknüpfungen, die aus einer INI-Dateien ähnlichen Struktur aufgebauten Textdatei bestehen.[1] Dieses 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.

Mac OS X

Als Unix-System beherrscht Mac OS X 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 Mac OS X von seinem Vorgänger Mac OS sogenannte Aliase geerbt,[2] 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 Mac OS 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.

Windows

Unter Windows gibt es fünf Arten von Verknüpfungen.

Dateiverknüpfung

Bei der Dateiverknüpfung von Microsoft Windows handelt es sich um eine gewöhnliche, sehr kleine Datei, welche die versteckte Dateiendung *.lnk verwendet. Im engeren Sinne werden solche Dateiverknüpfung nicht als Link, sondern Shortcut unter Microsoft Windows bezeichnet. Diese kleinen Windows-Shortcuts verweisen auf eine andere Datei oder auf ein Verzeichnis. Außerdem kann der Shortcuts Angaben enthalten, wie das Ziel zu öffnen ist. Eine Dateiverknüpfung kann einen vom Ziel abweichenden Namen besitzen und wird gewöhnlich mit einem Pfeil links unten im Symbol (Icon) versehen.

Ein Windows-Shortcuts ist erkennbar, das heißt, der Benutzer sieht die Verknüpfung im Windows-Explorer oder anderen Dateimanagern als Verknüpfung. Die meisten Anwendungen verfolgen solchen Shortcuts aber nicht; wenn die Anwendung versucht, die Dateiverknüpfung zu öffnen, wird in der Regel nicht automatisch das Ziel geöffnet, sondern die Anwendung versucht erfolglos, die Verknüpfung selbst zu öffnen. In Windows-Shortcuts sind keine relativen (.\Unterordner\Datei.txt), sondern nur absolute Pfadangaben möglich.

Ordnerverknüpfung

Bei der Ordnerverknüpfung[3] von Windows handelt es sich um ein Verzeichnis mit dem Attribut read only und/oder system[4], das eine auf das Ziel verweisende Dateiverknüpfung mit dem festen Namen target.lnk sowie eine (versteckte) Datei desktop.ini mit (mindestens) folgendem Inhalt enthält:

 [.ShellClassInfo]
 CLSID2={0AFACED1-E828-11D1-9187-B532F1E9575D}

Eine Ordnerverknüpfung ist (im Windows Explorer) transparent.

Ordnerverknüpfungen werden von Windows selbst erzeugt und verwendet, beispielsweise in der Netzwerkumgebung.

Shell Objects

shell objects[5] oder shell folder sind in der Windows Registry definierte Objekte, die u. a. auch die Funktion einer Verknüpfung realisieren können. Die (mindestens) notwendigen Registry-Einträge für ein solches shell object sind wie folgt (die CLSID\{00000000-0000-0000-0000-000000000000} wird hier als Platzhalter verwendet):

 [HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000000}]
 @="angezeigter Name"
 [HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000000}\DefaultIcon]
 @="..." ; Pfad zum anzuzeigenden Symbol
 [HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000000}\InProcServer32]
 @="%SystemRoot%\\System32\\ShDocVw.Dll"
 "ThreadingModel"="Apartment"
 [HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000000}\Instance]
 "CLSID"="{0AFACED1-E828-11D1-9187-B532F1E9575D}"
 [HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000000}\Instance\InitPropertyBag]
 "Attributes"=hex:15,00,00,00
 "Target"="..." ; absoluter (nur ohne "TargetKnownFolder" oder "TargetSpecialFolder")
                ; oder relativer Pfad zum Zielobjekt
 "TargetKnownFolder"="{guidguid-guid-guid-guid-guidguidguid}" ; GUID des Zielordners, ab Windows Vista
 "TargetSpecialFolder"="0x00xy" ; CSIDL des Zielobjekts
 [HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000000}\ShellFolder]
 "Attributes"=hex:00,00,00,00

Windows verwendet solche verknüpfenden shell objects selbst, beispielsweise für die virtuellen Ordner Eigene Dateien auf dem Desktop sowie Schriftarten und Verwaltung in der Systemsteuerung.

Ein shell object ist (im Windows Explorer) transparent.

Symbolische Verknüpfung

Seit Windows Vista bzw. Windows Server 2008 (beide intern Windows NT 6.0) stehen über das 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.

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. Weiterhin muss beim Anlegen der Verknüpfung bekannt sein, ob das Ziel eine Datei oder ein Verzeichnis ist. 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 anderer Stelle verschoben werden, z. B. von D:\ nach D:\Archiv\ würde die Auflösung der symbolischen Verknüpfung immer noch funktionieren im Gegensatz zur Verwendung einer absoluten Angabe. 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"

Symbolische Verknüpfungen unter Windows bleiben (genau wie unter UNIX) auch nach einem Neustart des Systems bestehen.

Abzweigungspunkte

Unabhängig davon gibt es seit der NTFS-Ausgabe 3.0, dem von Windows 2000 standardmäßig verwendeten Dateisystem, sogenannte Abzweigungspunkte (englisch auch file system reparse points oder junction points und kurz junctions genannt). Allerdings mangelte es bei Windows 2000 an mitgelieferten Werkzeugen zur Verwaltung von Abzweigungspunkten. Abzweigungspunkte sind den symbolischen Verknüpfungen auf Verzeichnisse sehr viel ähnlicher als die üblichen Verknüpfungen. Diese Abzweigungspunkte entsprechen unter Linux weitgehend dem Einhängen von Verzeichnissen an einer weiteren Stelle mittels mount --rbind.

Abzweigungspunkte können ab Windows Vista über eine Befehlszeile mit dem Befehl mklink /J angelegt werden und bei älteren Windows-Ausgaben mit den bei Microsoft erhältlichen Zusatzanwendungen junction.exe[6] und linkd.exe[7] – erstgenannte Anwendung aus den Sysinternals und letztere aus den Windows 2003 Resource Kit Tools.

Mit den folgenden Befehlen

C:\>mklink /J "C:\Neues Verzeichnis" "D:\Pfad\Reales Verzeichnis"

oder

C:\>junction "C:\Neues Verzeichnis" "D:\Pfad\Reales Verzeichnis"

oder

C:\>linkd "C:\Neues Verzeichnis" "D:\Pfad\Reales Verzeichnis"

kann ein Abzweigungspunkt "C:\Neues Verzeichnis" angelegt werden, der "D:\Pfad\Reales Verzeichnis" referenziert. Der Inhalt von "D:\Pfad\Reales Verzeichnis" (das Ziel des Abzweigungspunkt, englisch junction target) kann im Explorer nun auch unter "C:\Neues Verzeichnis" (englisch junction directory) aufgerufen und gestartet werden. Abzweigungspunkte bleiben ebenfalls nach einem Windows-Neustart erhalten.

Die Aufhebung eines Abzweigungspunktes erfolgt über folgende Befehle:

>C:\>rmdir "C:\Neues Verzeichnis"

oder

C:\>junction -d "C:\Neues Verzeichnis"

oder

C:\>linkd "C:\Neues Verzeichnis" /D

Wobei der Übergabewert „d“ für delete – englisch für „löschen“ – und "C:\Neues Verzeichnis" für das Ziel des angelegten Abzweigungspunktes steht.

Im Unterschied zu echten symbolischen Verknüpfungen werden in Abzweigungspunkten stets absolute Pfade gespeichert:

C:\>mklink /J "Neue Verbindung" Zielordner
 Verbindung erstellt für Neue Verbindung <<===>> Zielordner

 C:\>dir /al junction
 Datenträger in Laufwerk C: ist abc
 Verzeichnis von C:\
 07.12.2010  10:30    <VERBINDUNG> Neue Verbindung [C:\Zielordner]

Auf der Befehlszeile können Abzweigungspunkte auch mit dem DIR-Befehl angezeigt werden, wobei anstelle eines <DIR> (für normale Verzeichnisse) dann <VERBINDUNG> (oder englisch <JUNCTION>) ausgegeben wird. Dabei wird dann auch – ab Vista – das Verweisziel angezeigt, welches bei älteren Windows-Ausgaben gesondert über die genannten Zusatzanwendungen abgefragt werden muß.

Ordnerüberblendung

Ab Windows Vista werden Schreibvorgänge von Programmen, die keine Schreibberechtigung für das entsprechende Verzeichnis besitzen, unter bestimmten Voraussetzungen ohne Fehlermeldung durchgeführt; der eigentliche Schreibvorgang wird in ein Schattenverzeichnis im Benutzerprofil umgeleitet. Dieses Schattenverzeichnis wird für diesen Benutzer dem eigentlichen Verzeichnis überblendet, so dass es für ihn aussieht, als sei der Schreibvorgang erfolgreich durchgeführt worden.

Damit ermöglicht Microsoft es Programmen, welche das Konzept der eingeschränkten Benutzerrechte nicht korrekt unterstützen, trotzdem ohne Fehlermeldung abzulaufen.

Cygwin und Verknüpfungen

Die Cygwin-Umgebung unterstützt POSIX-kompatible harte Links und symbolische Verknüpfungen. Harte Links werden dabei transparent auf harte Links von Windows abgebildet. Vorhandene Abzweigungspunkte werden als symbolische Verknüpfung angezeigt. Von Cygwin aus angelegte symbolische Verknüpfungen werden allerdings emuliert, da die Windows-eigenen symbolischen Verknüpfungen nicht vollständig POSIX-kompatibel sind. Solche Verknüpfungen sind daher nur für Cygwin Programme sichtbar, sonstige Programme sehen nur eine Datei mit Systemattribut. Dies gilt auch unter Vista und Windows 7. Cygwin unterstützt auch symbolische Verknüpfungen, die von Microsoft SFU angelegt wurden. Umgekehrt gilt dies nicht. SFU verwendet ebenfalls Dateien zur Emulation, aber in einem abweichenden Format.

Übersicht

Eigenschaft/Aktion Symbolische Verknüpfung Harter Link Abzweigungspunkt
Löschen der symbolischen Verknüpfung/des harten Links/des Abzweigungspunktes... Ziel merkt nichts Referenzzähler wird um 1 reduziert; wenn 0, ist das Ziel logisch gelöscht Ziel wird gelöscht (außer bei Verwendung geeigneter Tools)
Verschieben des Ziels Symbolische Verknüpfung wird ungültig Harter Link bleibt gültig Abzweigepunkt wird ungültig
Relative Zielangabe möglich (entfällt) unmöglich (wird beim Speichern expandiert)
Laufwerksbuchstabe- bzw. Partitions- bzw. Volumen-übergreifend möglich unmöglich (da Verweis auf denselben Dateideskriptor) möglich
Auslesen des Ziels möglich möglich
Windows für Dateien ab Vista / Windows 2008; anlegen nur mit Administratorrechten ja nein
für Verzeichnisse nein ja
Unix für Dateien ja ja (entfällt)
für Verzeichnisse ja ja (anlegen als root, jedoch nicht bei allen Dateisystemen) (entfällt)

Siehe auch

Einzelnachweise

  1. Joe: Anatomy of a .desktop File. In: The Linux Critic. 7. April 2010, abgerufen am 20. Februar 2014 (englisch).
  2. Verknüpfung – Alias, maceinsteiger.de
  3. Specifying a Namespace Extension's Location auf Microsoft.com
  4. Das Attribut „Schreibgeschützt“ kann von einem Ordner nicht entfernt werden
  5. Creating Shell Extensions with Shell Instance Objects
  6. Junction 1.06 – Seite bei Microsoft; Stand: 8.9.2010 (Abgerufen am: 7.11.2012)
  7. Windows Server 2003 Resource Kit Tools (englisch) – Seite bei Microsoft; Stand: 28.4.2003 (Abgerufen am: 7.11.2012)