VMware ESXi and vSphere Cluster Management

Symbolische Links in Linux verstehen und verwenden

Lerne, was symbolische Links unter Linux sind, wie du sie mit ln -s erstellst, prüfst, reparierst und von harten Links unterscheidest.

Ein symbolischer Link ist ein spezielles Dateisystemobjekt, das auf den Pfad einer anderen Datei oder eines Verzeichnisses verweist. Die gebräuchlichen Kurzformen sind Symlink und Soft Link. Das Betriebssystem löst den gespeicherten Zielpfad beim Zugriff auf und folgt diesem Verweis.

Ein Symlink speichert dabei nicht den Inhalt der Zieldatei. Link und Ziel sind zwei getrennte Dateisystemobjekte. Der Link enthält im Wesentlichen eine Pfadangabe, während die Zieldatei ihre eigenen Metadaten und Daten besitzt.

Grundbegriffe: Link, Ziel und Linkname

Das Ziel ist die Datei oder das Verzeichnis, auf das der Symlink verweist. Der Linkname ist der Name beziehungsweise Pfad, unter dem der Verweis angelegt wird.

Beispiel: Bei kurz.txt als Symlink auf original.txt ist kurz.txt der Linkname und original.txt das Ziel. Wird kurz.txt gelesen, versucht Linux, den gespeicherten Zielpfad aufzulösen und die Zieldatei zu öffnen.

Symbolische Links erstellen

Die Standardmethode ist ln mit der Option -s. Die Reihenfolge ist wichtig: Zuerst kommt das Ziel, danach der neue Linkname.

ln -s ZIEL LINKNAME

Link auf eine Datei

Mit den folgenden Befehlen entsteht eine Beispieldatei und ein relativer Symlink im selben Verzeichnis:

printf 'Beispielinhalt\n' > original.txt
ln -s original.txt verweis.txt
ls -l verweis.txt
cat verweis.txt

Die letzte Ausgabe stammt aus original.txt, obwohl der Zugriff über verweis.txt erfolgt.

Link auf ein Verzeichnis

Symbolische Links können auch auf Verzeichnisse zeigen:

mkdir -p ~/projekte/aktuelles-projekt
ln -s ~/projekte/aktuelles-projekt ~/aktuelles-projekt
cd ~/aktuelles-projekt
pwd

Der Linkname darf noch nicht unbeabsichtigt durch eine andere Datei, ein Verzeichnis oder einen vorhandenen Link belegt sein. Prüfe einen bestehenden Eintrag vor dem Entfernen mit ls -ld LINKNAME. Verwende keine erzwungene Überschreibung, wenn die Bedeutung des vorhandenen Pfads nicht eindeutig geklärt ist.

Absolute und relative Zielpfade

Ein absoluter Pfad beginnt beim Wurzelverzeichnis / und beschreibt den vollständigen Weg zum Ziel. Ein relativer Pfad beginnt nicht bei /, sondern wird relativ zum Verzeichnis interpretiert, in dem der Link gespeichert ist.

Absoluter Pfad

Beispiel: /home/ana/projekt/daten.txt

Stärke: Eindeutige Zielangabe, unabhängig vom aktuellen Arbeitsverzeichnis.

Einschränkung: Der Link wird oft unbrauchbar, wenn die Struktur auf einen anderen Rechner, unter einen anderen Einhängepunkt oder in ein anderes Basisverzeichnis verschoben wird.

Geeignet: Für feste systemweite Ziele, deren vollständiger Pfad stabil bleibt.

Relativer Pfad

Beispiel: ../daten/ziel.txt

Stärke: Eine vollständige Verzeichnisstruktur kann gemeinsam verschoben werden, ohne dass sich der Link ändern muss.

Einschränkung: Der Pfad muss aus Sicht des Linkverzeichnisses korrekt berechnet werden.

Geeignet: Für portable Projekt- und Anwendungsverzeichnisse.

Beim Planen eines relativen Links zählt nicht das Verzeichnis, in dem du gerade im Terminal stehst, sondern der Speicherort des Links. Angenommen, die Struktur sieht so aus:

projekt/
├── links/
└── daten/
    └── ziel.txt

Vom Verzeichnis projekt/links aus führt der Weg zum Ziel über eine Ebene zurück und dann nach daten. Deshalb lautet der Zielpfad ../daten/ziel.txt:

ln -s ../daten/ziel.txt projekt/links/ziel.txt

Wenn projekt als Ganzes verschoben wird und die relative Struktur gleich bleibt, funktioniert der Link weiterhin. Wird nur der Link oder nur ein Teil der Struktur verschoben, kann der relative Bezug dagegen nicht mehr stimmen.

Links anzeigen und untersuchen

Anzeige mit ls -l

ls -l zeigt einen symbolischen Link mit einem besonderen Dateityp und einem Pfeil zum gespeicherten Ziel an:

ls -l verweis.txt

Eine typische Darstellung beginnt mit l, zum Beispiel lrwxrwxrwx. Das erste Zeichen steht für „Link“. Der Name links vom Pfeil ist der Linkname; der Text rechts vom Pfeil ist der gespeicherte Zielpfad. Die scheinbaren Berechtigungen eines Symlinks sind normalerweise nicht die entscheidenden Zugriffsrechte. Für den Zugriff sind vor allem die Rechte der beteiligten Verzeichnisse und des Ziels relevant.

Gespeichertes Ziel mit readlink ausgeben

readlink verweis.txt

readlink gibt den im Link gespeicherten Pfad aus. Bei einem relativen Link wird dieser relative Text ausgegeben, nicht automatisch ein vollständiger Pfad.

Für eine möglichst vollständig aufgelöste Zielkette kannst du readlink -f oder realpath verwenden:

readlink -f verweis.txt
realpath verweis.txt

Diese Befehle folgen auch weiteren Links. Ist das Ziel nicht vorhanden, kann die vollständige Auflösung fehlschlagen oder keine verwertbare Ausgabe liefern. Für die Untersuchung des tatsächlich gespeicherten Textes ist readlink LINKNAME daher oft besser geeignet.

Inodes: Warum Link und Ziel getrennt sind

Eine Inode ist eine Datenstruktur eines Linux-Dateisystems. Sie enthält Metadaten wie Dateityp, Besitzer, Berechtigungen, Zeitstempel und Verweise auf Datenblöcke. Der Dateiname liegt getrennt davon in einem Verzeichniseintrag. Die Inode-Nummer identifiziert die Inode innerhalb eines Dateisystems.

Ein symbolischer Link besitzt eine eigene Inode. Diese Inode beschreibt den Link und seinen gespeicherten Pfad. Die Inode des Ziels beschreibt dagegen das eigentliche Zielobjekt und bei einer regulären Datei auch dessen Daten. Deshalb haben Symlink und Ziel normalerweise unterschiedliche Inode-Nummern.

printf 'Inhalt\n' > original.txt
ln -s original.txt verweis.txt
ls -li original.txt verweis.txt

Die beiden angezeigten Inode-Nummern sind verschieden. Das beweist, dass der Symlink ein eigenes Dateisystemobjekt ist. Die Ausgabe von ls -li verbindet diese Prüfung mit der Linkdarstellung.

Verhalten bei Lesen, Bearbeiten und Löschen

Ein funktionierender Symlink leitet Dateioperationen zum Ziel weiter. Wird der Inhalt über den Link geändert, ist die Änderung beim direkten Zugriff auf das Ziel sichtbar:

printf 'Start\n' > original.txt
ln -s original.txt verweis.txt
printf 'Neue Zeile\n' >> verweis.txt
cat original.txt

Das Anhängen über verweis.txt verändert also original.txt. Umgekehrt erscheinen Änderungen, die direkt an der Zieldatei vorgenommen werden, beim nächsten Lesen über den Link.

Das Löschen des Links löscht normalerweise nur den Link:

rm verweis.txt

original.txt bleibt dabei erhalten. Wird dagegen das Ziel gelöscht, bleibt der Symlink als eigener Eintrag zurück, kann aber nicht mehr zu den ursprünglichen Daten führen.

Defekte oder hängende Links erkennen

Ein defekter Link, auch hängender Link genannt, verweist auf ein Ziel, das nicht erreichbar oder nicht vorhanden ist. Typische Ursachen sind:

  • Das Ziel wurde gelöscht, umbenannt oder verschoben.
  • Ein relativer Zielpfad wurde aus dem falschen Bezugspunkt berechnet.
  • Ein benötigtes Dateisystem ist nicht eingehängt.
  • Die beteiligten Verzeichnisse oder das Ziel können wegen fehlender Berechtigungen nicht durchsucht oder geöffnet werden.

Mit ls -l und readlink prüfst du zunächst Darstellung und gespeicherten Pfad:

ls -l LINKNAME
readlink LINKNAME

test -L prüft, ob der Pfad selbst ein symbolischer Link ist. test -e prüft, ob der Pfad einschließlich seines Ziels auf ein vorhandenes erreichbares Objekt zeigt:

test -L LINKNAME && echo 'ist ein symbolischer Link'
test -e LINKNAME || echo 'Ziel nicht vorhanden oder nicht erreichbar'

Für eine Suche nach defekten Links unterhalb des aktuellen Verzeichnisses eignet sich:

find . -xtype l

find . -type l findet dagegen alle symbolischen Links, unabhängig davon, ob ihre Ziele funktionieren. -xtype l ist nützlich, um speziell nicht auflösbare Links zu finden.

Defekten Link reparieren

Prüfe zuerst, ob das Ziel lediglich verschoben oder umbenannt wurde. Kann der korrekte Zielpfad nicht wiederhergestellt werden, entfernst du den Link und legst ihn neu an:

rm LINKNAME
ln -s KORREKTES_ZIEL LINKNAME

Symbolische und harte Links im Vergleich

Ein hartes Link ist ein zusätzlicher Verzeichniseintrag für dieselbe Inode. Es ist damit ein weiterer Name für dieselben Daten. Ein Symlink ist dagegen eine eigene Inode mit einem Pfadverweis.

Verweisart: Symbolischer Link speichert einen Pfad; hartes Link bezeichnet dieselbe Inode wie der ursprüngliche Name.

Inode-Nummer: Symbolischer Link und Ziel haben unterschiedliche Inodes; harte Links teilen sich eine Inode.

Eigene Existenz: Ein Symlink ist ein eigenes Dateisystemobjekt und kann als Link bestehen bleiben, wenn das Ziel fehlt. Ein harter Link ist ein weiterer Name für die weiterhin vorhandene Inode.

Dateisysteme und Partitionen: Symlinks können auf Ziele in anderen Dateisystemen oder Partitionen zeigen. Harte Links sind in der Regel auf dasselbe Dateisystem beschränkt.

Verzeichnisse: Symlinks können auf Verzeichnisse zeigen. Harte Links auf Verzeichnisse sind üblicherweise eingeschränkt, um Dateisystemstrukturen und Schleifen zu vermeiden.

Löschen des ursprünglichen Namens: Beim harten Link bleiben die Daten über den anderen Namen erreichbar. Beim Symlink bleibt der Verweis bestehen, aber das Ziel kann fehlen.

Anzeige: ls -l zeigt bei Symlinks einen Pfeil und das Ziel. Ein hartes Link sieht wie ein gewöhnlicher Dateiname aus.

Einsatz: Symlinks eignen sich für Pfad-Aliase, Verzeichnisse und flexible Strukturen. Harte Links eignen sich für zusätzliche Namen derselben Daten innerhalb eines Dateisystems.

Wichtige Befehle im Überblick

ln -s: Erstellt einen symbolischen Link. Ziel und Linkname müssen in dieser Reihenfolge angegeben werden.

ls -l: Zeigt Linktyp, Linknamen und gespeicherten Zielpfad an.

ls -i oder ls -li: Zeigt Inode-Nummern, optional zusammen mit der Langform der Dateiinformationen.

readlink: Gibt den gespeicherten Zielpfad eines Symlinks aus.

readlink -f oder realpath: Versucht, eine vollständige Zielkette aufzulösen.

test -L: Prüft, ob der angegebene Pfad selbst ein Symlink ist.

test -e: Prüft, ob der Pfad mit erreichbarem Ziel existiert.

find -type l: Findet symbolische Links.

find -xtype l: Findet symbolische Links, deren Ziel nicht auflösbar ist.

rm: Entfernt den Linknamen. Ohne ausdrücklichen Pfad zum Ziel wird das Ziel dadurch nicht gelöscht.

Praktische Einsatzfälle

  • Ein häufig verwendetes Dokument oder Verzeichnis erhält einen kurzen, leicht merkbaren Zugriffspfad.
  • Ein stabiler Einstiegspunkt verweist auf die aktuell verwendete Version einer Software oder Konfiguration.
  • Eine Freigabe oder Projektstruktur bekommt mehrere bewusst geplante Zugriffspfade.
  • Administrierte Systeme verwenden Symlinks, um feste Namen auf wechselnde Versionen zu setzen, sofern Aktualisierung und Rücknahme dokumentiert sind.

Plane vor dem Anlegen, ob das Ziel absolut oder relativ angegeben werden soll. Dokumentiere in verwalteten Umgebungen den Zweck, das erwartete Ziel und die Auswirkungen eines Umzugs. Ein Link ist kein Ersatz für eine Sicherung: Fällt das Ziel aus, stellt der Link die Daten nicht wieder her.

Fehler systematisch untersuchen

Der Zugriff meldet „Datei oder Verzeichnis nicht gefunden“

  1. Zeige den Eintrag mit ls -l LINKNAME.
  2. Lies den gespeicherten Wert mit readlink LINKNAME.
  3. Prüfe das Ziel mit test -e LINKNAME.
  4. Bei einem relativen Pfad: Berechne den Weg vom Verzeichnis des Links, nicht vom aktuellen Arbeitsverzeichnis.
  5. Prüfe bei externen Datenträgern oder Mountpoints, ob das erforderliche Dateisystem eingehängt ist.
  6. Entferne und erstelle den Link mit dem korrekten Ziel neu, falls der Pfad nicht repariert werden kann.

Der Link zeigt an einen unerwarteten Ort

Meist wurde der relative Pfad aus dem falschen Bezugspunkt geplant. Ermittle den Speicherort des Links und berechne den Weg von dort zum Ziel. Wenn die Struktur gemeinsam verschoben werden soll, ist ein korrekt berechneter relativer Link oft passend. Für ein dauerhaft festes Systemziel kann ein absoluter Link verständlicher sein.

Der Link funktioniert nach dem Verschieben nicht mehr

Prüfe mit readlink, ob ein absoluter Pfad gespeichert ist. Bei einem relativen Pfad müssen Link und Ziel ihre relative Lage behalten haben. Ein absoluter Link benötigt nach einem Umzug möglicherweise eine Anpassung; ein relativer Link kann dagegen durch das Verschieben eines vollständigen Projektbaums stabil bleiben.

Prüfungshinweise

  • Definition: Ein Symlink ist eine spezielle Datei mit einem gespeicherten Zielpfad, nicht mit einer Kopie des Zielinhalts.
  • Eigenständigkeit: Link und Ziel besitzen getrennte Dateisystemobjekte und beim Symlink getrennte Inodes.
  • Befehl: Die Syntax lautet ln -s ZIEL LINKNAME; das Ziel steht zuerst.
  • Relative Pfade: Sie werden vom Verzeichnis des Links aus interpretiert.
  • Löschen: rm LINKNAME entfernt den Symlink, nicht sein Ziel.
  • Defekt: Ein Link kann bestehen bleiben, obwohl sein Ziel gelöscht, verschoben, umbenannt oder nicht eingehängt ist.
  • Abgrenzung: Ein hartes Link ist ein weiterer Name für dieselbe Inode, während ein Symlink auf einen Pfad verweist.

Für die weiterführende Arbeit mit diesem Thema kannst du den internen Beitrag Symbolische Links als Bezugspunkt verwenden.