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.
Das Dateisystem · Lektion 12
Symbolische Links
Lerne, wie sich symbolische und harte Links bei Pfadauflösung, Inode-Identität und Dateisystemumfang unterscheiden.
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 LINKzeigt den Link selbst.readlink LINKgibt seinen gespeicherten Zieltext aus.stat LINKmeldet üblicherweise Linkmetadaten, währendstat -L LINKbei GNU coreutils dem Link folgt.find -Lfolgt 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?
Nutze das Lab Dateien und Verzeichnisse unter Linux verwalten, um Links an entbehrlichen Dateien zu üben und Inode-Nummern zu vergleichen.
Lektion abgeschlossen
Sie haben Symbolische Links abgeschlossen
Du kannst nun die richtige Art von Dateisystemlink auswählen und untersuchen.
Verwende
ln -s TARGET LINKfür einen pfadbasierten symbolischen Link.Löse relative Ziele vom enthaltenden Verzeichnis des Links aus auf.
Verwende
ln EXISTING LINKfü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