Wie erhalte ich die physische Größe einer Datei unter Linux?

12

Ich kann ls -ldie logische Größe einer Datei ermitteln, aber gibt es eine Möglichkeit, die physische Größe einer Datei zu ermitteln?

user285003
quelle
Bitte definieren Sie, was Sie unter "physischer" Größe verstehen.
Jörg W Mittag

Antworten:

28

ls -lgibt Ihnen die scheinbare Größe der Datei an, dh die Anzahl der Bytes, die ein Programm lesen würde, wenn es die Datei von Anfang bis Ende lesen würde. duwürde Ihnen die Größe der Datei "auf der Festplatte" geben.

Standardmäßig wird dudie Größe der Datei in Anzahl der Festplattenblöcke angegeben. Sie können -hjedoch auch eine vom Menschen lesbare Einheit verwenden. Siehe auch das Handbuch für duIhr System.

Beachten Sie, dass mit GNU Coreutil du(was wahrscheinlich unter Linux -bder Fall ist ) das Abrufen von Bytes die --apparent-sizeOption impliziert . Dies ist nicht das, was Sie verwenden möchten, um die Anzahl der tatsächlich auf der Festplatte verwendeten Bytes abzurufen. Verwenden Sie stattdessen --block-size=1oder -B 1.

Mit GNU lskönnen Sie dies auch ls -s --block-size=1für die Datei tun . Dies gibt die gleiche Nummer wie du -B 1für die Datei.


Beispiel:

$ ls -l file
-rw-r--r--  1 myself wheel  536870912 Apr  8 11:44 file

$ ls -lh file
-rw-r--r--  1 myself wheel   512M Apr  8 11:44 file

$ du -h file
24K    file

$ du -B 1 file
24576   file

$ ls -s --block-size=1 file
24576 file

Dies bedeutet, dass dies eine 512-MB-Datei ist, die ungefähr 24 KB auf der Festplatte benötigt. Es ist eine spärliche Datei (meistens Nullen, die nicht auf die Festplatte geschrieben, sondern als logische "Löcher" in der Datei dargestellt werden). Sparse-Dateien sind häufig, wenn Sie mit vorab zugewiesenen großen Dateien arbeiten, z. B. Disk-Images für virtuelle Maschinen oder Swap-Dateien usw. Das Erstellen einer Sparse-Datei ist schnell, während das Füllen mit Nullen langsam (und unnötig) ist.

Siehe auch das Handbuch für fallocateIhr Linux-System.

Kusalananda
quelle
In welchem ​​Fall ist dieser Unterschied wichtig? Können Sie ein praktisches Beispiel geben? danke im Voraus.
D'Arcy Nader
1
@ D'ArcyNader Siehe aktualisierte Antwort.
Kusalananda
Korrigieren Sie mich, wenn ich etwas falsch verstehe , aber es scheint, dass der erste Satz umgekehrt ist: stackoverflow.com/a/31437673/3701431du zeigt an, wie viele Daten tatsächlich gelesen werden können, und lszeigt an, inwieweit Festplattensektoren zugeordnet sind.
Sergiy Kolodyazhnyy
2
@SergiyKolodyazhnyy (Entschuldigung für die verspätete Antwort) Nein, duzeigt die tatsächlich von der Datei verwendete Festplattenmenge an, während die scheinbare Größe (logische Größe) angibt, lswie viele Bytes ein Programm daraus lesen kann. Wenn die Datei dünn ist, wären einige der gelesenen Bytes Nullen, aber sie würden immer noch an das Programm geliefert, das sie liest (nur nicht von der Festplatte).
Kusalananda
Das war eine wirklich gute Antwort.
Lizardx
3

Ich erhalte die Dateigröße in Bytes wie folgt:

actualsize=$(du -b "${file}" | cut -f 1)
woohoo
quelle