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.
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).
Antworten:
ls -l
gibt 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.du
würde Ihnen die Größe der Datei "auf der Festplatte" geben.Standardmäßig wird
du
die Größe der Datei in Anzahl der Festplattenblöcke angegeben. Sie können-h
jedoch auch eine vom Menschen lesbare Einheit verwenden. Siehe auch das Handbuch fürdu
Ihr System.Beachten Sie, dass mit GNU Coreutil
du
(was wahrscheinlich unter Linux-b
der Fall ist ) das Abrufen von Bytes die--apparent-size
Option 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=1
oder-B 1
.Mit GNU
ls
können Sie dies auchls -s --block-size=1
für die Datei tun . Dies gibt die gleiche Nummer wiedu -B 1
für die Datei.Beispiel:
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
fallocate
Ihr Linux-System.quelle
du
zeigt an, wie viele Daten tatsächlich gelesen werden können, undls
zeigt an, inwieweit Festplattensektoren zugeordnet sind.du
zeigt die tatsächlich von der Datei verwendete Festplattenmenge an, während die scheinbare Größe (logische Größe) angibt,ls
wie 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).Ich erhalte die Dateigröße in Bytes wie folgt:
quelle