Grundlegendes zu Hardlinks

Grundlegendes zu Hardlinks

Ich habe eine Datei im Home-Verzeichnis erstellt.

touch demo
echo "This is demo" > demo

Jetzt habe ich einen Hardlink in /tmp erstellt

ln /home/leo/demo demoLink

Wenn Sie nun den Inode mit

ls -ltri demoLink

Es zeigt dieselbe Inode-Nummer wie die Originaldatei. Das kann ich verdauen. Aber der Dateityp des Hardlinks ist regulär! Inwiefern ist das eine reguläre Datei? Inwiefern unterscheidet sie sich von der Originaldatei? Ich habe gelesen, dass eine Datei ein anonymer Datenblock ist. Diese beiden Dateien verweisen also auf dieselben Daten? Ist die Dateigröße von Hardlink und Originaldatei gleich?

Antwort1

Der Hardlink ist eigentlich kein „Link“. Der erste, zweite, dritte und N-te Hardlink zum selben Datei-Inode sind alle gleich. Es gibt keinen Unterschied zwischen einem „Originaleintrag“ und einem „Hardlink“.

Angenommen, jemand erstellt die Datei1 und fügt dann den Hardlink Datei2 zum selben Datei-Inode hinzu. Dann gibt es keine Methode, um herauszufinden, welcher Link zum angegebenen Inode ursprünglich ist.

Dh

cryo@CryoNest:~ $ touch file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 1 cryo cryo 0 кві  8 20:24 file1

cryo@CryoNest:~ $ ln file1 file2

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file1
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file2

cryo@CryoNest:~ $ rm file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 1 cryo cryo 0 кві  8 20:24 file2

cryo@CryoNest:~ $ ln file2 file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file1
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file2

Wie Sie sehen, sind die Inode-Nummer (9505656) und alle im Inode gespeicherten Attribute für alle Hardlinks gleich. Einschließlich Größe, Datum, Modus usw.

Achten Sie auf das dritte Feld, dies ist die Anzahl der Links zum Inode. Dieses Feld kann verwendet werden, um „mystische“ Situationen zu verstehen, wenn man eine Datei „löscht“ (eigentlich einen der Verzeichniseinträge der Hardlinks), sich die Speicherplatznutzung jedoch nicht ändert :)

Wenn man alle Hardlinks der angegebenen Datei finden möchte, hat das Tool "find" die Option "-inum"

cryo@CryoNest:~ $ ln file1 tmp/file3

cryo@CryoNest:~ $ find . -maxdepth 2 -inum 9505656 -ls
  9505656  0 -rw-r--r--   2 cryo  cryo     0 кві  8 20:24 ./tmp/file3
  9505656  0 -rw-r--r--   2 cryo  cryo     0 кві  8 20:24 ./file1

verwandte Informationen