Wie werden symbolische Links intern von UNIX / Linux-Systemen verwaltet? Es ist bekannt, dass ein symbolischer Link auch ohne eine tatsächliche Zieldatei existieren kann (Dangling Link). Was ist das, was intern eine symbolische Verbindung darstellt?
In Windows lautet die Antwort reparse point
.
Fragen:
Ist die Antwort ein inode
in UNIX / Linux?
Wenn ja, wird die Inode-Nummer für Ziel und Links gleich sein?
Wenn ja, kann der Link inode andere Berechtigungen haben als der Inode des Zieles (falls einer existiert)?
Es geht nicht um UNIX / Linux, sondern um Dateisystem-Implementierung - aber ja, Unix / Linux verwendet Inodes auf Kernel-Ebene und Dateisystem-Implementierungen haben Inodes (zumindest virtuelle).
Im allgemeinen sind symbolische Links einfach Dateien (übrigens sind Verzeichnisse auch Dateien), die haben:
file-type
im "inode", das dem System mitteilt, dass diese Datei ein "symbolischer Link" Virtuelle Dateisysteme können auch symbolische Links haben. Überprüfen Sie daher FUSE oder andere Implementierungsquellen des Dateisystems. (ext2 / ext3 / ufs..etc)
Also,
Ist die Antwort ein Inode in UNIX / Linux?
hängt von der Dateisystemimplementierung ab, aber ja, im Allgemeinen enthält der Inode einen "Dateityp" (und Besitzer, Zugriffsrechte, Zeitstempel, Größe, Zeiger auf Datenblöcke). Es gibt Dateisysteme, die nicht inode
s (in einer physischen Implementation) haben, sondern nur "virtuelle Inodes", um die Kompatibilität mit dem Kernel aufrechtzuerhalten.
Wenn ja, wird die Inode-Nummer für Ziel und Links gleich sein?
Nein . Normalerweise ist der Symlink eine Datei mit einem eigenen Inode (mit Dateityp, eigenen Datenblöcken, etc.)
Wenn ja, kann der Link inode Berechtigungen haben, die sich von denen des Ziels unterscheiden Inode (falls vorhanden)?
Hier geht es um wie Symlink-Dateien behandelt werden. Normalerweise erlaubt der Kernel keine Änderungen an den Symlink-Berechtigungen - und Symlinks haben immer Standardberechtigungen. Sie könnten Ihr eigenes Dateisystem schreiben, das unterschiedliche Berechtigungen für symbolische Links zulässt, aber Sie würden in Schwierigkeiten geraten, weil gängige Programme wie chmod
die Berechtigungen für symbolische Links selbst nicht ändern, also wäre ein solches Dateisystem sowieso sinnlos)
Um den Unterschied zwischen Hardlinks und Symlinks zu verstehen, sollten Sie zuerst die Verzeichnisse verstehen.
Verzeichnisse sind Dateien (mit einem Flag im Inode differenziert), die dem Kernel sagen, "handle diese Datei als eine Karte von file-name
bis inode_number
". Hardlinks sind einfach Dateinamen, die auf das gleiche inode
abgebildet werden. Also, wenn die Verzeichnis-Datei enthält:
Das bedeutet, in diesem Verzeichnis befinden sich 3 Dateien:
Dies ist der Hauptunterschied zu Symlinks, bei denen der Inode von file_b
(inode 1001) Inhalt "file_a" und ein Flag "dies ist ein symbolischer Link" haben kann. In diesem Fall wäre file_b
ein Symlink, der auf file_a
zeigt.
Sie können das auch ganz einfach selbst ausprobieren:
%Vor% Die Option -i
auf ls
zeigt Inode-Nummern in der ersten Spalte an. Sie können sehen, dass der Symlink eine andere Inode-Nummer hat, während der Hardlink dieselbe hat. Sie können auch den Befehl stat(1)
verwenden:
Wenn Sie dies programmgesteuert durchführen möchten, können Sie den Systemaufruf lstat(2)
verwenden, um Informationen über den Symlink selbst (seine Inode-Nummer usw.) zu finden, während stat(2)
Informationen über das Ziel des Symlinks, wenn es existiert. Beispiel in Python:
Tags und Links linux linux-kernel unix symlink inode