GNU/Linux >> LINUX-Kenntnisse >  >> Linux

was ist der zuverlässigste befehl, um die tatsächliche größe einer datei zu finden linux

Hier gibt es kein Problem mit Ungenauigkeit oder Zuverlässigkeit, Sie vergleichen nur zwei verschiedene Zahlen:logische Größe vs. physische Größe.

Hier ist die Illustration von Wikipedia für Dateien mit geringer Dichte:

ls zeigt die grau+grünen Bereiche, die logische Länge der Datei. du (ohne --apparent-size ) zeigt nur die grünen Bereiche, da diese den Platz einnehmen.

Sie können eine Sparse-Datei mit dd count=0 bs=1M seek=100 of=myfile erstellen .

ls zeigt 100 MiB an, weil die Datei so lang ist:

$ ls -lh myfile
-rw-r----- 1 me me 100M Jul 15 10:57 myfile

du zeigt 0, weil ihm so viele Daten zugewiesen sind:

$ du myfile
0 myfile

ls -l --block-size=M

gibt Ihnen eine lange Formatliste (erforderlich, um die Dateigröße tatsächlich zu sehen) und rundet Dateigrößen auf den nächsten MiB auf .

Wenn Sie MB möchten (10^6 Byte) statt MiB (2^20 Byte) Einheiten, verwenden Sie --block-size=MB stattdessen.

Wenn Sie die M nicht möchten Suffix an die Dateigröße angehängt, können Sie so etwas wie --block-size=1M verwenden . Danke Stéphane Chazelas für diesen Vorschlag.

Dies ist in der Manpage für ls beschrieben; man ls und suchen Sie nach SIZE . Es erlaubt andere Einheiten als MB/MiB auch, und wie es aussieht (ich habe das nicht ausprobiert) auch beliebige Blockgrößen (so dass Sie die Dateigröße als Anzahl von 412-Byte-Blöcken sehen können, wenn Sie möchten).

Beachten Sie, dass --block-size parameter ist eine GNU-Erweiterung über dem ls der Open Group , daher funktioniert dies möglicherweise nicht, wenn Sie kein GNU-Userland haben (was bei den meisten Linux-Installationen der Fall ist). Das ls von GNU Coreutils 8.5 unterstützt --block-size wie oben beschrieben.


Es gibt verschiedene Begriffe der Dateigröße, wie in der Antwort dieses anderen Typen und der Wikipage-Abbildung zu Sparse-Dateien erläutert.

Möglicherweise möchten Sie jedoch sowohl die Befehle ls(1) als auch stat(1) verwenden.

Wenn Sie in C programmieren, sollten Sie die Systemaufrufe stat(2) &lseek(2) verwenden.

Siehe auch die Referenzen in dieser Antwort.


Linux
  1. So verwenden Sie den Tar-Befehl unter Linux

  2. Was ist der Zweck der .bashrc-Datei in Linux

  3. Was ist das Äquivalent zum Linux-Dateibefehl für Windows?

  4. Was ist der Unix-Befehl, um herauszufinden, welche ausführbare Datei einem bestimmten Befehl entspricht?

  5. Was könnte dazu führen, dass der Dateibefehl in Linux eine Textdatei als Binärdaten meldet?

So verwenden Sie den Touch-Befehl unter Linux

So verwenden Sie den Linux-Kopfbefehl

So verwenden Sie den Linux-diff-Befehl

Was ist der Linux-Überwachungsbefehl + Beispiele

Was ist der Kill-Befehl in Linux?

Der Linux-Befehl zum Suchen des Verzeichnisses:Erklärt