Neben allen anderen Antworten möchte ich auf folgende wichtige Eigenschaften hinweisen:
Ein Softlink ist eine echte Referenz, dh es ist eine kleine Datei, die einen Pfadnamen enthält. Das Auflösen eines Softlinks geschieht für die Anwendung transparent: Wenn ein Prozess eine Datei öffnet, /this/path/here
beispielsweise einen Symlink, auf /that/other/path
den verwiesen wird, übernimmt /that/other/path
das Betriebssystem die gesamte Abwicklung des Öffnens . Wenn /that/other/path
es sich um einen Symlink handelt, wird dies auch vom Betriebssystem behandelt. Tatsächlich folgt das Betriebssystem der Kette von Symlinks, bis es etwas anderes findet (z. B. eine reguläre Datei) oder bis es viele Einträge erreicht SYMLOOP_MAX
(siehe sysconf(3)
). In diesem Fall gibt das Betriebssystem (genauer: den entsprechenden Systemaufruf) einen Fehler zurück und setzt errno
zu ELOOP
. Somit wird ein zirkulärer Verweis xyz -> xyz
den Prozess nicht blockieren. ( path_resolution(7)
Einzelheiten zu Linux-Systemen finden Sie unter .)
Beachten Sie, dass ein Prozess durch die Verwendung von lstat(2)
und durch lchown(2)
andere (siehe symlink(7)
für die ganze Geschichte) prüfen kann, ob ein Pfadname ein Symlink ist oder nicht, und seine (in der Inode-Tabelle gespeicherten) Dateiattribute ändern kann .
In Bezug auf die Berechtigung werden Sie feststellen, dass Symlinks immer die Berechtigung 777 haben ( rwxrwxrwx
in symbolischer Notation). Dies ist darauf zurückzuführen, dass andere Berechtigungen ohnehin durch Zugriff auf die eigentliche Datei umgangen werden können. Umgekehrt macht 777 für einen Symlink die Symlink-Datei nicht zugänglich, wenn sie überhaupt nicht zugänglich war. Beispielsweise macht ein Symlink mit den Berechtigungen 777, der auf eine Datei mit den Berechtigungen 640 zeigt, die Datei nicht für "andere" (die allgemeine Öffentlichkeit) zugänglich. Mit anderen Worten, auf eine Datei kann xyz
nur dann über einen Symlink zugegriffen werden, wenn sie direkt, dh ohne Indirektion, zugänglich ist. Daher haben die Berechtigungen des Symlinks keinerlei Auswirkungen auf die Sicherheit.
Einer der wichtigsten sichtbaren Unterschiede zwischen Hardlinks und Symlinks (auch als Softlinks bezeichnet) besteht darin, dass Symlinks zwischen Dateisystemen funktionieren, während Hardlinks auf ein Dateisystem beschränkt sind. Das heißt, eine Datei auf Partition A kann symbolisch mit Partition B verknüpft werden, aber von dort aus kann keine feste Verknüpfung hergestellt werden. Dies ergibt sich aus der Tatsache, dass ein Hardlink tatsächlich ein Eintrag in einem Verzeichnis ist, das aus einem Dateinamen und einer Inode-Nummer besteht, und dass Inode-Nummern nur pro Dateisystem eindeutig sind.
Der Begriff Hardlink ist eigentlich etwas irreführend. Während für Symlinks Quelle und Ziel klar voneinander zu unterscheiden sind (der Symlink hat einen eigenen Eintrag in der Inode-Tabelle), gilt dies nicht für Hardlinks. Wenn Sie einen Hardlink für eine Datei erstellen, sind der ursprüngliche Eintrag und der Hardlink in Bezug auf das, was zuerst vorhanden war, nicht zu unterscheiden. (Da sie sich auf denselben Inode beziehen, teilen sie ihre Dateiattribute wie Eigentümer, Berechtigungen, Zeitstempel usw.) Dies führt zu der Aussage, dass jeder Verzeichniseintrag tatsächlich ein Hardlink ist und dass das Hardlinken einer Datei nur das Erstellen eines zweiten bedeutet. oder dritter, oder vierter ...) Hardlink. Tatsächlich speichert jeder Inode einen Zähler für die Anzahl der Hardlinks zu diesem Inode.
Beachten Sie schließlich, dass normale Benutzer Verzeichnisse möglicherweise nicht fest verknüpfen. Das liegt daran, dass dies mit äußerster Vorsicht geschehen muss: Ein unachtsamer Benutzer kann Zyklen in den ansonsten streng hierarchischen Dateibaum einführen, auf die alle üblichen Tools (wie fsck
) und das Betriebssystem selbst nicht vorbereitet sind.