Es fällt mir schwer zu verstehen, wie man die Größe der Dateien richtig liest, da jeder Befehl unterschiedliche Ergebnisse liefert. Ich bin auch auf einen Post unter http://forums.devshed.com/linux-help-33/du-and-ls-generating-inconsistent-file-sizes-42169.html gestoßen , in dem Folgendes angegeben ist:
du gibt die Größe der Datei an, die sich auf dem Dateisystem befindet. (IE gibt Ihnen immer ein Ergebnis, das durch 1024 teilbar ist).
ls gibt Ihnen die tatsächliche Größe der Datei an.
Was Sie sehen, ist der Unterschied zwischen der tatsächlichen Größe der Datei und dem Speicherplatz auf der Festplatte. (auch als Dateisystemeffizienz bezeichnet).
Was ist der Unterschied zwischen dem Dateisystem und der tatsächlichen Größe der Datei?
du
Ihnen derd
isku
sage angezeigt wird , wird der auf dem aktuellen Laufwerk belegte Speicherplatz und somit die Größe des Bewohners angezeigt.df -h
?df
meldet die Anzahl verbleibender Blöcke * die Blockgröße des Dateisystems. In diesem Fall ist dies eher der Falldu
, da auch teilweise verwendete Blöcke als vollständig zugeordnet gelten.df
Grundsätzlich übersetzt statvfs , so dass Sie sich diesen Systemaufruf ansehen können, um eine bessere Vorstellung davon zu bekommen, was vor sich geht.Es gibt hier eine andere Option, die noch nicht behandelt wurde - Dateien mit geringer Dichte . In diesem Fall
du
wird zeigen , eine kleinere Größe als ein einfacherls -l
wäre, dals
meldet die „Größe“ der Datei , wie das Wesen scheinbare Größe (die Anzahl der Bytes , die Sie lesen, wenn Sie eine ganze Menge Nullen wollte), währenddu
Wille Verwenden Sie weiterhin die tatsächliche Anzahl der verwendeten Festplattenblöcke.Unterhaltsamer Trick: Erstellen Sie sehr viele große Dateien mit geringer Speicherkapazität und beeindrucken Sie Ihre Freunde mit dem verfügbaren Speicherplatz ("Ich speichere elf Millionen 1-TB-Dateien auf meiner Festplatte!"). OK, vielleicht macht es dann nicht so viel Spaß.
quelle
Dateisysteme bestehen aus Blöcken. Dateien müssen nicht ordentlich in Blöcke passen. Wenn eine Datei 1024 Byte groß ist, wird sie in ls und du in 1024 angegeben. Wenn die Dateigröße 1025 ist, wird sie in ls und 2048 in du angegeben.
Beachten Sie, dass im obigen Beispiel eine Blockgröße von 1024 angenommen wird. Größere Blockgrößen sind heutzutage die Norm.
quelle
Es gibt noch einen Grund, warum sie sich unterscheiden können. du -h weiß, wann dieselbe Datei unter einem anderen Namen angezeigt wird (harte Links im Gegensatz zu symbolischen Links) und meldet jede Datei als Größe, fügt sie jedoch nur einmal zum gemeinsamen übergeordneten Verzeichnis hinzu.
quelle