ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

ln

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/terminal.png ln steht für link und erzeugt eine Verknüpfung zu einer Datei oder einem Verzeichnis. Man kann danach auf eine Datei nicht nur über ihren ursprünglichen Namen bzw. Pfad, sondern auch über den Namen des Links zugreifen. Dies ist zum Beispiel nützlich, wenn ein Programm eine bestimmte Programmbibliothek verlangt, die veraltet ist. Man kann nun einfach eine Verknüpfung mit dem Namen der veralteten Bibliothek auf die installierte Version setzten.

Man unterscheidet zwischen Hardlinks und symbolischen (oder Soft-) Links, die zwar in etwa dasselbe bewirken, aber technisch völlig unterschiedlich realisiert sind. Symbolische Links (Verknüpfungen) können nicht nur auf der Kommandozeile (Terminal), sondern beispielsweise mit den Dateimanagern von GNOME (Nautilus) und KDE (Dolphin) erstellt werden. Aber auch andere Dateimanager können "Symlinks" erstellen, nur ist diese Funktion im Kontextmenü (rechte Maustaste) als "Senden an → Desktop / Arbeitsfläche usw." versteckt.

Ein Hardlink ist einfach ein Verzeichniseintrag mit einem Namen, der auf eine Datei zeigt. Jede Datei hat immer mindestens einen Hardlink, denn ansonsten könnte man sie im Dateisystem nicht finden. Auch die Verzeichniseinträge . und .. sind in Wirklichkeit Hardlinks, die auf das aktuelle bzw. das übergeordnete Verzeichnis zeigen. Ein Verzeichnis hat also immer mindestens zwei Hardlinks, nämlich den eigentlichen Namen und ., und zusätzlich noch einen pro untergeordnetem Verzeichnis. (Je ein .. pro Verzeichnis.)

Für normale Operationen wie das Erstellen eines Verzeichnisses oder einer Datei benötigt man natürlich nicht den ln-Befehl. Dieser wird nur verwendet, um zusätzliche Links zu erzeugen. Wie viele Hardlinks aktuell auf eine Datei oder ein Verzeichnis zeigen, kann man der zweiten Spalte einer ls -l-Ausgabe entnehmen. Diese verschiedenen Links sind exakt gleichwertig und es ist völlig unerheblich, welcher zuerst da war. Änderungen an Inhalt oder Datei-Attributen wirken sich auf alle Links aus. (Weil es sich ja tatsächlich um exakt dieselbe Datei handelt). Erst wenn alle Links auf eine Datei gelöscht wurden, ist die Datei wirklich gelöscht.

Einen gravierenden Nachteil haben Hardlinks allerdings. Auf Grund der Technik, die dahinter steckt, ist es nicht möglich Hardlinks über die Grenzen von Dateisystemen hinweg einzusetzen. Um sich nicht immer Gedanken darüber machen zu müssen, ob das Ziel vielleicht auf einem anderen Dateisystem liegen könnte, werden deswegen fast ausschließlich "symbolische Verknüpfungen" genutzt. Das Erzeugen von Hardlinks auf Verzeichnisse ist sogar ganz verboten, weil sonst die Gefahr eines Zirkelschlusses bestünde.

Symbolische Verknüpfungen

Symbolische Verknüpfungen (oder "Softlinks") wurden geschaffen, um diese Unzulänglichkeit der Hardlinks zu umgehen. Sie funktionieren ähnlich wie die HTML-Links auf Webseiten. Ein symbolischer Link ist einfach eine kleine Datei bei der das l-Bit gesetzt ist, und die den Pfad des Zieles enthält. Dieser Pfad kann sowohl relativ (../anderes_verz/datei), als auch absolut (/usr/share/irgendwo/datei) sein. In einer ls -l Auflistung wird das Ziel des Softlinks nach einem Pfeil (->) angezeigt.

Symbolische Verknüpfungen sind, wie schon angedeutet, auch über Dateisystemgrenzen hinweg möglich, weswegen sie bevorzugt eingesetzt werden. Allerdings fehlt ihnen die direkte Verbindung zum Speicherplatz der Zieldatei. Wird diese gelöscht, so bleibt die Verknüpfung als "toter Link" zurück und zeigt von nun an ins Leere.

Installation

Das Programm ln ist im essentiellen Paket

  • coreutils

von Ubuntu enthalten und ist deshalb auf jedem System bereits installiert.

Aufruf

Die allgemeine Syntax lautet [1]:

ln [OPTION]... ZIEL [Verknüpfungsname] 

oder um mehrere Dateien in ein Verzeichnis zu verlinken:

ln [OPTION]... Ziele... LINKVERZEICHNIS 

ln kennt folgende Optionen:

ln-Optionen
OptionBeschreibung
-i oder --interactivefragt vor dem Überschreiben nach
-s oder --symbolicerzeugt eine symbolische Verknüpfung anstatt eines Hardlinks
-f oder --forcevorhandene Ziele entfernen

Die gleiche Funktionalität wie ln hat auch der Befehl cp in Verbindung mit den Optionen -l (Hardlink) oder -s (Softlink). Außerdem lassen sich Softlinks in den grafischen Dateimanagern durch Kopieren mit gleichzeitig gedrückten Tasten und Strg einrichten.

Beispiele

Im folgenden Beispiel wird eine Verknüpfung auf dem Desktop (Verknüpfung_mit_Tagesplaner) zu einer Datei mit dem Namen haupt.doc im Homeverzeichnis des Benutzers BENUTZER erstellt:

ln -s /home/BENUTZER/Dokumente/Tagesplaner/Aufgaben/haupt.doc /home/BENUTZER/Arbeitsfläche/Verknüpfung_mit_Tagesplaner 

Weitere Beispiele zur praktischen Verwendung finden sich im Artikel opt.

Hinweis:

Wenn bei Erstellung eines symbolischen Links der erste Parameter ein relativer Pfad ist, ist dieser relativ zum zweiten Parameter (dem Link), nicht zu dem Ort, an dem man sich gerade befindet (da der Pfad dann als relativer Pfad gespeichert wird).

Verknüpfung löschen

Um eine Verknüpfung zu löschen, kann man

verwenden.

Tote Verknüpfungen

Folgender Befehl sucht im aktuellen Verzeichnis (.) nach fehlerhaften Links:

find -L . -type l 

mount --bind

Eine weitere – allerdings eher selten genutzte – Möglichkeit, Daten an mehreren Orten im Dateisystem erscheinen zu lassen, bietet der Befehl mount. Nach dem Befehl:

mount --bind /PFAD/VERZEICHNIS1 /PFAD/VERZEICHNIS2 

(wobei beide Verzeichnisse tatsächlich existieren müssen) erscheint bis zum nächsten Systemstart der Inhalt von VERZEICHNIS1 auch unter VERZEICHNIS2. Details sind der Manpage: von bind zu entnehmen.

Diese Revision wurde am 24. Januar 2014 09:44 von aasche erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Shell