Was passiert, wenn Sie einen festen Link löschen?

59

Wenn Sie tun, rm myFilewo myFileist eine harte Verbindung, was passiert?

trusktr
quelle

Antworten:

110

In Unix sind alle normalen Dateien Hardlinks. Hardlinks in einem Unix-Dateisystem (und den meisten Dateisystemen?) Sind Verweise auf das, was als ein bezeichnet wird inode. Der inodehat einen Referenzzähler. Wenn Sie eine "Verknüpfung" mit der Datei haben (dies ist der normale Modus), ist der Zähler 1. Wenn Sie eine zweite, dritte, vierte usw. Verknüpfung erstellen, wird der Zähler jeweils inkrementiert (erhöht) Zeit für Zeit. Wenn Sie rmeinen Link löschen ( ), wird der Zähler um eins dekrementiert (reduziert). Wenn der Verbindungszähler 0 erreicht, entfernt das Dateisystem inodeden Speicherplatz und markiert ihn als verfügbar.

Kurz gesagt, solange Sie den letzten Link nicht löschen, bleibt die Datei erhalten.

Edit:Die Datei bleibt auch dann erhalten , wenn der letzte Link entfernt wird . Dies ist eine der Möglichkeiten, um sicherzustellen, dass die Sicherheit der in einer Datei enthaltenen Daten keinem anderen Prozess zugänglich ist. Das vollständige Entfernen der Daten aus dem Dateisystem erfolgt nur, wenn die Daten 0 Verknüpfungen aufweisen, wie in den Metadaten angegeben, und von keinem Prozess verwendet werden.

Dieser IMHO ist bei weitem der einfachste Weg, Hardlinks (und deren Unterschied zu Softlinks) zu verstehen.

Xenoterracid
quelle
7
Außerdem ist der Systemaufruf zum Löschen einer Datei unlink().
Mouviciel
1
Dies deckt nicht die Situation ab, in der die Datei geöffnet ist, wenn der letzte Link unlinkbearbeitet wird.
cjm
5
@OrangeDog, nicht genau, da Hardlinks nicht dateisystemübergreifend sind und /procein separates (virtuelles) Dateisystem darstellen.
cjm
2
/ proc spiegelt auch die internen Datenstrukturen des Kernels wider (dies ist eine Möglichkeit für den Linux-Kernel, bestimmte Daten in einem einigermaßen gut definierten Format bereitzustellen, ohne allen und jedem direkten Zugriff auf den Kernelspeicher zu gewähren). Es ist also genauer zu sagen, dass der Kernel die Tatsache verfolgt, dass die Datei geöffnet ist, und diese Informationen durch procfs verfügbar macht.
ein Lebenslauf vom
1
Und ja, unlink()als ich in der ersten Hälfte der 90er Jahre anfing, mit C-Programmierung unter MS-DOS zu spielen, war ich bis zuletzt verwirrt, eine Datei zu löschen. :)
ein CVn
12

Das Testen war einfacher als ich dachte: Ich habe eine Textdatei erstellt und dann fest damit verknüpft. Durch das Löschen der festen Verknüpfung wird die Datei, mit der eine feste Verknüpfung besteht, nicht gelöscht, und die Datei, mit der eine Verknüpfung hergestellt wurde, verbleibt dort, wo sie ist.

trusktr
quelle
1
Dies ist wahr, aber kein vollständiges Bild
Xenoterracide
3
Der Schlüssel ist, dass beim Erstellen der Textdatei auch ein fester Link hinzugefügt wird. In * NIX-Dateisystemen müssen alle Dateien (Inodes) mindestens einmal in die Verzeichnisstruktur eingebunden werden.
Hör auf, Monica
0

Alle Dateien auf Ihrer Festplatte sind Zeiger auf die tatsächlichen Daten auf Ihrer Festplatte. Bildbeschreibung hier eingeben

Wenn Sie einen Hardlink für diese Datei erstellen, zeigt die Hardlink-Datei auf dieselben Daten wie die Originaldatei.

Bildbeschreibung hier eingeben

Wie in diesem Beispiel zeigte a.txt auf die Daten (Bytes) der Datei, die sich auf dem Laufwerk befinden. Wenn der Hardlink b.txt erstellt wird, zeigt er auf das, auf das a.txt zeigte.

Das Entfernen eines von ihnen hat also keine Auswirkungen auf den anderen, von dem sie getrennt sind.

ABER, wenn Sie beide entfernen, wird das System feststellen, dass auf den Daten auf der Festplatte keine Datei vorhanden ist, die darauf verweist. Das System betrachtet sie daher als freien Speicherplatz und überschreibt sie, wenn es dies wünscht.

ZOLDIK
quelle
2
Ich denke, es ist wichtig, dass Sie klarstellen, dass dies FILE "A.txt"identisch ist LINK "B.txt", insbesondere, wenn Sie das eine FILEund das andere als a bezeichnet haben LINK. Der Link ist wirklich der schwarze Pfeil.
Roaima
Ja, ich dachte, dass es nicht klar sein wird, dass b.txt eine fest verknüpfte Datei ist ...
ZOLDIK