ubuntuusers.de

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 setzen.

Man unterscheidet zwischen Hardlinks und symbolischen (oder Soft-) Links, die zwar in etwa dasselbe bewirken, aber technisch völlig unterschiedlich realisiert sind. Symbolische Links - auch Verknüpfungen genannt - können nicht nur via Kommandozeile (Terminal), sondern mit diversen grafischen Dateimanagern erstellt werden.

Ein Hardlink ist einfach ein Eintrag im Dateisystem mit einem Namen, der auf den tatsächlichen Speicherplatz einer Datei zeigt. Jede Datei hat immer mindestens einen Hardlink, denn ansonsten könnte man sie nicht ohne weiteres 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 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 manuelle Erzeugen von Hardlinks auf Verzeichnisse ist sogar ganz verboten, um die Interpretation von .. konsistent zu halten.

Symbolische Verknüpfungen

Symbolische Verknüpfungen ("Symlinks", "Softlinks" oder oft auch nur Verknüpfungen genannt) 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 der Zieldatei enthält. Dieser Pfad kann sowohl relativ (../anderes_verzeichnis/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 tatsächlichen Speicherplatz der Zieldatei. Wird diese gelöscht, so bleibt die Verknüpfung als "toter Link" zurück und zeigt von nun an ins Leere. Dies kann auch beim Verschieben der Zieldatei passieren, vor allem bei Verwendung eines absoluten Pfades im Softlink.

Installation

Das Programm ln ist im essentiellen Paket

  • coreutils

Befehl zum Installieren der Pakete:

sudo apt-get install coreutils 

Oder mit apturl installieren, Link: apt://coreutils

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

Anwendung

Mit so gut wie allen grafischen Dateimanagern wie z.B. Nautilus, Dolphin, Caja, Thunar, etc. können Verknüpfungen via Kontextmenü (rechte Maustaste) erstellt werden. Manchmal ist diese Funktion im Untermenü "Senden an → Desktop / Arbeitsfläche usw." versteckt.

Außerdem lassen sich Softlinks in den grafischen Dateimanagern durch Verschieben via Maus (linke Maustaste) mit gleichzeitig gedrückten Tasten und Strg errichten.

Terminal

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
Option Beschreibung
-i oder --interactive fragt vor dem Überschreiben nach
-s oder --symbolic erzeugt eine symbolische Verknüpfung anstatt eines Hardlinks
-r oder --relative erzeugt - auch bei Angabe absoluter Pfade - eine Verknüpfung mit relativen Pfaden zueinander (setzt -s voraus)
-f oder --force vorhandene mit dem VERKNÜPFUNGSNAMEn gleichnamige Verknüpfungen oder auch Dateien überschreiben

Hinweis:

Wenn bei Erstellung eines symbolischen Links der erste Parameter ein relativer Pfad ist, wird ein Softlink mit relativem Pfad erstellt (auch wenn die Option -r nicht verwendet wird). Der angegebene relative Pfad wird für den Softlink direkt verwendet und somit relativ zum zweiten Parameter (dem Link) interpretiert. Der Ort an dem man sich gerade befindet ist für den Softlink somit grundsätzlich bedeutungslos. Einzig der Speicherort des Softlinks (zweiter Parameter) wird bei Angabe eines relativen Pfades durch den aktuellen Ort beeinflusst.

Beispiele

Mit diesem Befehl können Hardlinks für den Inhalt ganzer Verzeichnisse erstellt werden. Eventuell enthaltene Ordner werden dabei neu angelegt und die Dateien hart verlinkt:

cp -al QUELLE ZIEL 

Siehe auch weiter unten Kopieren

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

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

Weitere Beispiele zur praktischen Verwendung finden sich im Artikel opt.

Verknüpfungen löschen

Verknüpfungen, egal welcher Art, kann man identisch zu jeder anderen Datei

  • in einer Konsole mit dem Befehl rm oder

  • mit einem beliebigen Dateimanager

löschen.

Verknüpfungen finden

Mit folgendem Befehl kann man sowohl die Anzahl als auch die Orte der Hardlinks einer DATEI ausgeben. Ist die ausgegebene Hardlinks-Anzahl größer als die ausgegebenen Orte, so existieren weitere Hardlinks außerhalb vom STARTPUNKT:

find STARTPUNKT -xdev -samefile DATEI -printf '%n %p\n' 

Um alle Hardlinks, optional gefiltert mit TEST, ab einem STARTPUNKT zu finden, verwendet man (dabei werden in der ersten Spalte zusätzlich die Nummern der zugehörigen Inodes ausgegeben):

find STARTPUNKT -xdev [TEST] -printf '%i %n %p\n' | fgrep -f <(find . -xdev -printf '%i\n' | sort -n | uniq -d) | sort -n 

Um Verknüpfungen rekursiv im VERZEICHNIS aufzuspüren bietet sich folgender Befehl an:

find VERZEICHNIS -type l 

Des Weiteren kann man mittels ls sich das Ziel der Verknüpfung anzeigen lassen:

ls -l VERZEICHNIS/VERKNÜPFUNGSNAME 

Hinweis:

Bei Verknüpfungen mit Ordnern gilt das gleiche, wobei darauf zu achten ist keinen abschließenden / zu verwenden, da sonst der Verknüpfung gefolgt wird.

Folgender Befehl sucht im aktuellen Verzeichnis (.) und dessen Unterverzeichnissen nach fehlerhaften Verknüpfungen:

find . -xtype l 

Einfacher kann man Verknüpfungen mit dem Programm symlinks finden und auch teilweise bearbeiten.

Alternativen

Kopieren (cp)

Die gleiche Funktionalität wie ln hat auch der Befehl cp in Verbindung mit den Optionen -l (Hardlink) oder -s (Softlink). Sollten Ordner oder Unterordner bei zu erstellenden Hardlinks enthalten sein, werden diese - exklusive Inhalt natürlich - tatsächlich kopiert.

Einbinden (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.

Soll diese Lösung auch nach einem Neustart des Systems bestehen bleiben bzw. automatisch beim Systemstart wieder angewandt werden, bietet sich eine Automatisierung des Einbindens mittels fstab oder Systemd Mount-Unit an.

Diese Revision wurde am 12. Januar 2023 15:08 von gmuehlbacher erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Shell