Ich habe eine Reihe von Dokumenten durchgelesen. die viele Diskrepanzen über Hardlinks oder Softlinks haben, die irgendeinen Platz im Dateisystem einnehmen. Kann jemand das für mich klären?
Für Hardlinks habe ich folgendes herausgefunden:
Ich hatte eine Datei c1 in meinem Home-Verzeichnis, die ich mit d1 im selben Verzeichnis verbunden hatte. Beide c1 und b1 haben 11 Byte size.Now, wenn ich ein "ls-lrt" die Gesamt-Bytes für alle Dateien aufgeführt (außer d versteckten Dateien natürlich) ist 64 Bytes. jetzt, wenn ich hardlink d1 entferne und wieder tun ein ls-lrt gibt es mir 60 bytes.does das bedeutet nicht hardlinks besetzen Speicherplatz auf der Festplatte, aber viele docs.negate diese Tatsache, warum?
Ich hätte genauso nachsehen können, wie ich einen Softlink für die Datei erstellt und dann gelöscht habe, aber da mein Softlink nur eine Größe von 2 Bytes hat, glaube ich nicht, dass das Löschen einen signifikanten Effekt auf die Abrundungssumme hätte Ausgabe von ls -lrt.
Was ist damit?
Natürlich nehmen sie (ein bisschen) Platz ein:
fest verbundene Dateien haben mehrere Verzeichniseinträge. Jeder Eintrag belegt Platz im Verzeichnis selbst, aber von da an teilen sie dieselben Strukturen: Inode und Datenbereich werden gemeinsam genutzt. Aber ich bin mir nicht sicher, wie das berechnet wird; vielleicht nehmen die Verzeichniseinträge immer ein Vielfaches einer gewissen Größe ein.
Symlinks belegen Platz für den Verzeichniseintrag sowie einen Inode, der Informationen über die Linkeigenschaften sowie das Linkziel selbst enthält.
Bei diesen kleinen Größen (11 Byte Daten in der Datei) zählt der Overhead mehr als die echten Daten. Bei größeren Dateien ist dieser kleine Aufwand von wenigen Bytes jedoch vernachlässigbar.
Ja. Sie nehmen beide Platz, da sie immer noch Verzeichniseinträge haben.
Ein Hardlink-Eintrag (wirklich, ein "normaler Eintrag", der [oft] einen Inode teilt) nimmt Platz, ebenso wie ein Symlink-Eintrag, der irgendwie den Link-Pfad (den Text selbst) speichern muss. Der tatsächlich benötigte Speicherplatz ist aufgrund von Zuordnungsregeln, die durch die genaue Dateisystemimplementierung bestimmt werden, leicht unterschiedlich (z. B. Block- / Baumgrößen und wie der Symlink gespeichert ist).
Allerdings ist die Menge an Speicherplatz minimal und kann [fast immer] in Bezug auf Daten in den Dateien selbst inkonsequent betrachtet werden.
ls
ist falsch!
Es zählt mehrfach verlinkte Dateien. ls -l
addiert einfach die Blocknummern jedes Eintrags, egal wie viele Hardlinks er hat.
(Verwenden Sie ls -1si
, um die Inode-Nummer jeder Datei sowie die Blocknutzung anzuzeigen)
Versuchen Sie stattdessen du -Ssb .
. Dadurch erhalten Sie die korrekte Festplattenbelegung in Bytes. Es sei denn, Sie verwenden den Schalter -l
, der das Verhalten von ls
reproduziert.
Um kurz und einfach zu sein, ist ein Hardlink ein Verweis auf den Inode innerhalb des Dateisystems. Einige Dienstprogramme lesen das falsch. Es wird keinen Speicherplatz belegen.