Hard Link und symbolische Links in Unix

8

Ich wollte nur klarstellen, ob eine harte / symbolische Verbindung tatsächlich eine Datei ist, die erstellt wird?

Ich habe den Befehl ausgeführt:

%Vor%

- Der Befehl ls zeigt diese 2 Links als Datei an.

Also meine Abfrage ist, erstellt ln / ln -s tatsächlich eine Datei?

Grüße, darkie15

    
name_masked 11.05.2010, 06:03
quelle

2 Antworten

13

Ja und nein: -)

In UNIX unterscheiden sich die Inhalte einer Datei von den Verzeichniseinträgen für diese Datei. Sie können mehrere Verzeichniseinträge auf denselben Inhalt zeigen lassen (lesen Sie inode nach, um zu beschreiben, wie das funktioniert) und, hier ist's das knifflige bisschen:

Alle diese Verzeichniseinträge sind gleich. Auch wenn man vielleicht zuerst erstellt wurde, gibt es nichts Besonderes. Wenn Sie es entfernen, verschwindet der Inhalt nicht, nur der Verzeichniseintrag. Der Inhalt wird verschwinden, sobald der Inode keine Verzeichniseinträge mehr enthält (und alle Prozesse schließen die Datei - ich bin schon gebissen worden, indem ich versucht habe, Festplattenspeicher zu löschen, nur um das zu finden, weil ein Prozess immer noch die Datei hat open, der Dateiinhalt wird nicht wiederhergestellt, obwohl keine Verzeichniseinträge darauf verweisen).

Das ist für harte Verbindungen.

Weiche Links sind ein bisschen komplizierter. Sie erstellen eine Art "Datei" (einen separaten Inode), die den Pfad zur Zieldatei enthält. Und diese Links sind nicht gleich. Wenn Sie das Original löschen, erhalten Sie einen weichen Link, der nirgends angezeigt wird.

Da Inodes in einem bestimmten Dateisystem eindeutig sind, können Hardlinks nicht auf Daten in einem anderen Dateisystem verweisen.

Softlinks haben diese Einschränkung nicht, da sie den Pfad zur Zieldatei und nicht den Inode speichern.

Das folgende Transkript kann helfen:

%Vor%

Ich habe nur die letzten vier Ziffern der Inode-Nummer verwendet, um den Eintrag kurz zu halten (und nicht mit Inode-Zahlen wie 43910096366994672 ), aber Sie können sehen, dass f1 und f2 genau dasselbe haben inode, während f3 anders ist. Sie können auch sehen, dass der Inhalt der Datei, die ursprünglich als f1 erstellt wurde, seine Löschung überlebt, weil f2 immer noch darauf verweist.

Da f3 jedoch auf den f1 Namen und nicht auf seinen Inode verweist, erhalten Sie einen Fehler, wenn Sie versuchen, ihn zu verwenden.

Nebenbei: Sie müssen es lieben, wenn UNIX mit Ihnen so spielt:

%Vor%

Fast so viel Spaß wie das Erstellen einer Datei mit dem Namen space Rücktaste x und dann jemanden beobachten versuchen, es zu löschen: -)

    
paxdiablo 11.05.2010, 06:07
quelle
3

Keine erstellt eine Datei.

Eine Datei auf der Festplatte wird durch einen "Inode" identifiziert. Verzeichnisse ordnen Dateinamen den Inodes zu. Eine feste Verbindung bedeutet "Erstellen Sie einen neuen Dateinamen in diesem Verzeichnis, der auf denselben Inode verweist wie die Datei, die ich benenne."

Ein symbolischer Link bedeutet "Erstellen Sie einen neuen Dateinamen in diesem Verzeichnis, der auf den Inode verweist, auf den diese anderen Dateien zeigen."

Wie mangoman in einem Kommentar darauf hinweist, erstellt ein symbolischer Link eine Datei mit dem Namen des Linkziels, aber Sie sollten darauf nicht achten. Es ist eine spezielle Datei, die nichts von Ihrem Geschäft ist.

    
David M 11.05.2010 06:06
quelle

Tags und Links