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.
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.
Wichtige Befehle im Überblick
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“
- Zeige den Eintrag mit
ls -l LINKNAME. - Lies den gespeicherten Wert mit
readlink LINKNAME. - Prüfe das Ziel mit
test -e LINKNAME. - Bei einem relativen Pfad: Berechne den Weg vom Verzeichnis des Links, nicht vom aktuellen Arbeitsverzeichnis.
- Prüfe bei externen Datenträgern oder Mountpoints, ob das erforderliche Dateisystem eingehängt ist.
- 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 LINKNAMEentfernt 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.