Symbolische Links
100%

Das Dateisystem · Lektion 12

Symbolische Links

Lerne, wie sich symbolische und harte Links bei Pfadauflösung, Inode-Identität und Dateisystemumfang unterscheiden.

Ein Verzeichniseintrag gibt einem Inode einen Namen. Ein Hardlink erstellt einen weiteren Verzeichniseintrag für denselben Inode, während ein symbolischer Link einen anderen Inode erzeugt, dessen Inhalt ein aufzulösender Pfadname ist. Dieser Unterschied bestimmt Identität, Lebensdauer und Verhalten über Dateisystemgrenzen hinweg.

Einen symbolischen Link erstellen und untersuchen

Erstelle einen Symlink mit ln -s TARGET LINK_NAME:

$ printf '%s\n' 'example' > myfile
$ ln -s -- myfile myfilelink
$ ls -li myfile myfilelink
151   -rw-r--r-- 1 user user 8 ... myfile
93403 lrwxrwxrwx 1 user user 6 ... myfilelink -> myfile

Der Symlink besitzt einen eigenen Inode und speichert den Text myfile. Wenn ein Programm myfilelink folgt, setzt sich die Pfadauflösung beim Ziel fort. Zeige den gespeicherten Text an, ohne ihm zu folgen:

$ readlink myfilelink

Welcher Befehl erstellt den symbolischen Link myfilelink mit dem Zieltext myfile?

Relative und absolute Symlink-Ziele

Ein absolutes Ziel beginnt bei /. Ein relatives Ziel wird relativ zum Verzeichnis aufgelöst, das den Symlink enthält – nicht relativ zum aktuellen Verzeichnis der Shell, wenn jemand ihn später öffnet.

$ mkdir -p tree/data tree/current
$ printf '%s\n' 'value' > tree/data/item
$ ln -s ../data/item tree/current/item

Das Verschieben der gesamten tree-Hierarchie erhält diese relative Beziehung. Wird nur der Link oder das Ziel verschoben, kann sie brechen. Ein Symlink darf ein nicht vorhandenes Ziel enthalten und heißt dann verwaist oder defekt.

Von welchem Ort aus wird ein relatives Symlink-Ziel aufgelöst?

Einen Hardlink erstellen

Erstelle ohne -s einen weiteren Namen für eine vorhandene gewöhnliche Datei:

$ ln -- myfile myhardlink
$ ls -li myfile myhardlink
151 -rw-r--r-- 2 user user 8 ... myfile
151 -rw-r--r-- 2 user user 8 ... myhardlink

Beide Namen gehören zum selben Dateisystem und verweisen auf dieselbe Inode-Nummer. Die Linkanzahl beträgt nun 2. Keiner der Namen ist von Natur aus das „Original“; Änderungen des Inhalts über einen Namen verändern das gemeinsame Objekt, und das Entfernen eines Namens lässt den anderen bestehen.

Hardlinks können Dateisystemgrenzen nicht überschreiten, weil eine Inode-Nummer nur innerhalb ihres Dateisystems Bedeutung besitzt. Linux hindert gewöhnliche Benutzer außerdem daran, Hardlinks auf Verzeichnisse anzulegen, und kann Links auf Dateien einschränken, die ihnen nicht gehören. Dadurch werden Zyklen und Sicherheitsprobleme vermieden.

Was teilen zwei Hardlinks auf dieselbe gewöhnliche Datei?

Lebensdauer und Löschen

Das Entfernen eines Symlinks entfernt das Linkobjekt und nicht sein Ziel:

$ rm -- myfilelink

Das Entfernen eines Hardlink-Namens verringert die Linkanzahl des gemeinsamen Inodes. Das Dateisystem kann das Objekt erst zurückgewinnen, wenn die Anzahl null ist und keine offenen Dateibeschreibungen oder anderen Dateisystemreferenzen es am Leben halten.

Vermeide beim Entfernen eines Symlinks auf ein Verzeichnis einen abschließenden Schrägstrich, weil die Pfadauflösung dadurch abhängig vom Befehl der Verzeichnissemantik folgen kann. Untersuche ihn mit ls -ld -- LINK und entferne bewusst den Linknamen.

Was geschieht normalerweise, wenn du den Symlink selbst entfernst?

Links sicher folgen

Symlinks können ein privilegiertes Programm aus einem erwarteten Verzeichnis heraus umleiten oder sich zwischen Validierung und Nutzung ändern. Sichere Programme sollten Check-then-open-Rennen bei Pfadnamen vermeiden und für Sprache und Betriebssystem geeignete verzeichnisrelative, No-Follow- oder eingeschränkt auflösende Schnittstellen verwenden.

Für gewöhnliche Untersuchungen:

  • ls -ld LINK zeigt den Link selbst.
  • readlink LINK gibt seinen gespeicherten Zieltext aus.
  • stat LINK meldet üblicherweise Linkmetadaten, während stat -L LINK bei GNU coreutils dem Link folgt.
  • find -L folgt Links und kann auf Zyklen treffen; verwende es nur bewusst.

Als lrwxrwxrwx angezeigte Berechtigungen sind keine allgemeine Zugriffsgewährung. Der Zugriff wird durch Verzeichnisverfolgung, Richtlinie zum Folgen von Links und Zielberechtigungen entschieden; bei manchen Regeln für geschützte Verzeichnisse ist außerdem die Symlink-Eigentümerschaft relevant.

Was gibt readlink LINK standardmäßig aus?

Lektion abgeschlossen

Sie haben Symbolische Links abgeschlossen

Du kannst nun die richtige Art von Dateisystemlink auswählen und untersuchen.

  • Verwende ln -s TARGET LINK für einen pfadbasierten symbolischen Link.

  • Löse relative Ziele vom enthaltenden Verzeichnis des Links aus auf.

  • Verwende ln EXISTING LINK für einen weiteren Inode-Namen im selben Dateisystem.

  • Unterscheide das Entfernen eines Symlinks vom Entfernen eines Hardlinks.

  • Vermeide unsicheres Folgen von Links bei privilegierten oder rekursiven Operationen.

Lernfortschritt speichern

Erstellen Sie ein kostenloses Konto, um diese Lektion zu speichern und auf jedem Gerät weiterzulernen.

Kostenloses Konto erstellen
Zurück zu Das Dateisystem