Hier gibt es viele recht richtige Antworten, aber ich glaube nicht, dass irgendjemand die ursprüngliche Fehlwahrnehmung wirklich in Angriff genommen hat. Die ursprüngliche Frage lautet im Grunde: "Wenn ich einen symbolischen Link erstelle, kann ich ihn später leicht identifizieren. Ich kann jedoch nicht herausfinden, wie ein fester Link zu identifizieren ist." Und ja, die Antworten beschränken sich im Grunde auf "Sie können nicht" und erklären mehr oder weniger, warum, aber niemand scheint zu erkennen, dass es wirklich verwirrend und seltsam ist.
Wenn Sie all dies lesen und herausgefunden haben, was los ist, dann sind Sie gut. du musst mein kleines bisschen nicht lesen. Wenn Sie immer noch verwirrt sind, fahren Sie fort.
Die wirklich sehr kurze Antwort ist, dass ein fester Link überhaupt kein Link ist, nicht so wie ein symbolischer Link. Es handelt sich um einen neuen Eintrag in der Verzeichnisstruktur, der auf die gleiche Anzahl von Bytes verweist wie der ursprüngliche Verzeichniseintrag. Sobald Sie ihn erstellt haben, ist er genauso "echt" und legitim wie der erste. Jede "normale" Datei auf Ihrem Laufwerk verfügt über mindestens einen festen Link. ohne das würdest du es in keinem sehenVerzeichnis, und wäre nicht in der Lage, darauf zu verweisen oder es zu verwenden. Wenn Sie also eine Datei Fred.txt haben und Wilma.txt und Barney.txt fest damit verknüpfen, verweisen alle drei Namen (und Verzeichniseinträge) auf dieselbe Datei, und sie sind alle gleichermaßen gültig. Das Betriebssystem kann nicht erkennen, dass einer der Einträge erstellt wurde, als Sie in Ihrem Texteditor auf "Speichern" geklickt haben, und die anderen wurden mit dem Befehl "ln" erstellt.
Das Betriebssystem muss jedoch nachverfolgen, wie viele verschiedene Einträge auf dieselbe Datei verweisen. Wenn Sie Wilma.txt löschen, ist es keine Überraschung, dass Sie keinen Speicherplatz auf Ihrem Laufwerk freigeben. Wenn Sie jedoch Fred.txt (die 'Original'-Datei) löschen, wird trotzdem kein Speicherplatz auf Ihrem Laufwerk freigegeben, da die Daten auf dem Laufwerk, die als Fred.txt bezeichnet wurden, weiterhin auch Barney.txt sind. Nur wenn Sie alle Verzeichniseinträge löschen, wird der von den Daten selbst belegte Speicherplatz vom Betriebssystem freigegeben.
Wenn Barney.txt eine symbolische Verknüpfung gewesen wäre, hätte das Löschen von Fred.txt die Zuordnung des Speicherplatzes aufgehoben, und Barney.txt wäre jetzt eine fehlerhafte Verknüpfung. Wenn Sie eine Datei verschieben oder umbenennen, auf die eine symbolische Verknüpfung verweist, wird die Verknüpfung unterbrochen. Sie können eine fest verknüpfte Datei jedoch beliebig verschieben oder umbenennen, ohne die anderen Verzeichniseinträge zu unterbrechen, die auf diese Datei / Daten verweisen, da es sich bei allen um Verzeichniseinträge handelt, die auf denselben Datenblock auf dem Laufwerk verweisen Inode # dieser Daten).
[Es ist zwei Jahre später und das letzte bisschen verwirrte mich für eine Minute, also denke ich, dass ich es klären werde. Wenn Sie "mv ./Wilma.txt ../elsewhere/Betty.txt" eingeben, scheint es, als würden Sie die Datei verschieben, aber in Wirklichkeit ist dies nicht der Fall. Was Sie wirklich tun, ist, eine Werbebuchung aus der Verzeichnisliste Ihres aktuellen Verzeichnisses zu entfernen, die besagt, dass "der Name 'Wilma.txt' mit den Daten verknüpft ist, die mit inode ###### gefunden werden können. #, "und Hinzufügen einer neuen Werbebuchung zur Verzeichnisliste von directory ../elsewhere, die besagt, dass" der Name 'Betty.txt' mit den Daten verknüpft ist, die über inode ####### gefunden werden können ". Aus diesem Grund können Sie eine 2-Gigabyte-Datei genauso schnell wie eine 2-Kilobyte-Datei verschieben, solange Sie sie an einen anderen Speicherort auf demselben Laufwerk verschieben.]
Da das Betriebssystem nachverfolgen muss, wie viele verschiedene Verzeichniseinträge auf den gleichen Datenblock verweisen, können Sie feststellen , ob eine bestimmte Datei fest verknüpft ist, auch wenn Sie nicht mit Sicherheit feststellen können, ob der Verzeichniseintrag auf Sie verweist guck mal ist das 'original' oder nicht. Eine Möglichkeit ist der Befehl "ls", insbesondere "ls -l" (das ist ein L in Kleinbuchstaben nach dem Bindestrich).
Ein früheres Beispiel ausleihen ....
-rw-r--r-- 3 stephane stephane 0 Nov 12 19:55 f1
Der erste Buchstabe ist ein Bindestrich, es handelt sich also nicht um ein Verzeichnis oder etwas anderes Exotisches, sondern um eine „normale“ Datei. Aber wenn es wirklich normal wäre, wäre diese Zahl nach dem rwx-ish-Teil "1", wie in "es gibt einen Verzeichniseintrag, der auf diesen Datenblock zeigt". Aber es ist Teil einer Demonstration von Hardlinks, also steht stattdessen "3".
Beachten Sie, dass dies möglicherweise zu seltsamem und mysteriösem Verhalten führen kann (wenn Sie sich nicht um harte Links gekümmert haben). Wenn Sie Fred.txt in Ihrem Texteditor öffnen und einige Änderungen vornehmen, werden Sie dieselben Änderungen in Wilma.txt und Barney.txt sehen? Vielleicht. Wahrscheinlich. Wenn Ihr Texteditor die Änderungen speichert, indem er die Originaldatei öffnet und die Änderungen darauf schreibt, werden alle drei Namen weiterhin auf denselben (neu geänderten) Text zeigen. Wenn Ihr Texteditor jedoch eine neue Datei erstellt (Fred-new-temp.txt), schreibt er Ihre geänderte Version in diese Datei, löscht Fred.txt und benennt Fred-new-temp.txt in Fred.txt um. Wilma und Barney werden es tun verweist weiterhin auf die ursprüngliche Version, nicht auf die neu geänderte Version. Wenn du harte Links nicht verstehst, kann das dich leicht verrückt machen. :) [Okay, ich persönlich kenne keineTexteditoren , die das Neue-Datei / Umbenennen-Ding machen würden, aber ich kenne viele andere Programme, die genau das tun, also sei wachsam.]
Ein letzter Hinweis: Eines der Dinge, auf die 'fsck' (Dateisystemprüfung) prüft, ist, ob sich Datenblöcke auf Ihrem Laufwerk befinden, auf die von keinem Verzeichniseintrag mehr verwiesen wird. Manchmal geht etwas schief und der einzige Verzeichniseintrag, der auf einen Inode verweist, wird gelöscht, aber der Speicherplatz selbst wird nicht als "verfügbar" markiert. Eine Aufgabe von fsck ist es daher, den gesamten zugewiesenen Speicherplatz mit allen Verzeichniseinträgen abzugleichen, um sicherzustellen, dass keine nicht referenzierten Dateien vorhanden sind. Wenn es welche findet, erstellt es neue Verzeichniseinträge und legt sie in "Fundbüro" ab.