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