"du -s" und "du -hs" liefern unterschiedliche Ergebnisse (unter OS X)

12

Der Unterschied mit und ohne -hsollten nur die vom Menschen lesbaren Einheiten sein, oder?

Naja anscheinend nein ...

$ du -s .
74216696    .
$ du -hs .
 35G    .

Oder vielleicht irre ich mich und das Ergebnis du -s .ist nicht in KB?

Knarren
quelle
3
Versuchen Sie es mit du --block-size=1024 -s .. Vielleicht ist Ihr BLOCK_SIZEeingestellt auf512
Echoes_86
6
Auf der Manpage (OSX): "Wenn BLOCKSIZE nicht festgelegt ist und die Option -k nicht angegeben ist, werden die
Blockzählungen
Das ist nicht besonders hilfreich, wenn das Dateisystem tatsächlich aus 4096-Byte-Blöcken besteht.
DopeGhoti
So gibt es keine Möglichkeit, die Größe in Bytes zu haben? Ich dachte, ich würde -hnur durch 1024 dividieren und einige Einheiten hinzufügen
Creak
2
echo "74216696*512" | bcOutputs, 37998948352. Und ja, -hkonvertiert in eine für Menschen lesbare Form, indem ich immer wieder durch 1024 teile du. Verwenden Sie für die Größe in Byte einfach --block-size=1. Unter Linux gibt es eine -bOption dafür, aber ich kenne OS X nichtdu
Sergiy Kolodyazhnyy

Antworten:

23

duOhne Angabe eines Ausgabeformats wird die Festplattennutzung in Blöcken von 512 Bytes und nicht in Kilobytes angegeben . Sie können die Option verwenden -k, um stattdessen in Kilobyte anzuzeigen. Unter OS X (oder MacOS oder MacOS oder Macos, je nachdem, was Sie möchten) können Sie die Standardeinheit anpassen, indem Sie die Umgebungsvariable festlegen BLOCKSIZE(dies wirkt sich auch auf andere Befehle aus).

DopeGhoti
quelle
1
Wusste nicht, dass ... Was ist das Interesse an der Anzahl der Blöcke? Ich habe noch nie jemanden gesehen, der Blöcke verwendet, wenn er über Größen auf der Festplatte spricht ...
Creak
2
Blöcke sind die atomare Einheit von Dateisystemen. Jede Datei belegt eine ganze Anzahl von Blöcken auf der Festplatte. Ein Block kann nur teilweise mit tatsächlichen Daten gefüllt sein, aber der gesamte Block ist der Datei zugeordnet. Die alltägliche Nutzung der meisten Leute kümmert sich nicht um Blockaden, außer in einem prozentualen Verhältnis von Nutzung zu Freiheit. Aber gering Nebenkosten (zB fdisk, dfund du) Arbeit in den Blöcken , wenn nicht anders angegeben , da sie das Gerät , mit dem sie intern zählen.
DopeGhoti
1
@Creak Eigentlich war dieser Teil der Antwort falsch. Die Einheit entspricht nicht der Blockgröße des Dateisystems. Für die Zwecke klassischer Unix-Befehle wie du"Block" bedeutet dies 512 Bytes. Siehe Dateiblockgröße - Unterschied zwischen stat und ls , Unterschied zwischen Blockgröße und Clustergröße
Gilles 'SO - hör auf, böse zu sein'
3
Msgstr "Jede Datei verbraucht eine ganze Anzahl von Blöcken auf der Festplatte." Im Allgemeinen ja - es sei denn, Ihr Dateisystem verwendet Tail-Packing . Aber ja, Blöcke sind die Grundeinheit des Dateisystems (obwohl die tatsächliche Blockgröße nicht unbedingt der von du. Verwendeten Blockgröße entspricht ) :)
Wildcard
3

Das Problem ist, dass dudie Größe in Anzahl der Blöcke von 512 Bytes zurückgegeben wird.

Um die Größe in KB zu erhalten, können Sie -kstattdessen die Option verwenden, die 1024-Byte-Blöcke verwendet:

$ du -ks .                            
43351596    .
$ du -khs .
 41G    .
Knarren
quelle