Unerwartetes Verhalten mit -h Flag an du übergeben

334
Slater Victoroff

Solange ich in der * nix-Welt lebe, habe ich unter der Annahme gelebt, dass, wenn ein Befehl eine -hFlagge akzeptierte, das einzige, was ich änderte, effektiv die Formatierung einer Druckaussage war. Ich untersuche das normalerweise nicht noch einmal, habe aber definitiv festgestellt, dass dies im Allgemeinen der Fall ist.

Heute hatte ich eine sehr merkwürdige Erfahrung beim Messen der Größe eines Verzeichnisses, in das ich gerade schrieb.

>>> du -s 15565160 . >>> du -sh 7.4G . 

Zuerst dachte ich, dass ich gerade das Verzeichnis an einem seltsamen Ort einfangen würde, aber ich stellte fest, dass beide Werte sehr persistent waren und nur geringfügig erhöhte / verminderte Werte lieferten, während ich weiter in das Verzeichnis schrieb. Meine erste Annahme war, dass es sich um einen seltsamen Zwischenstaat handelt, aber in diesem Fall hätte ich mit heftigen Schwankungen gerechnet du -s, die ich nicht beobachtet hatte.

Was ist denn hier los? Wie ist die 155...Nummer? Es scheint nicht, als wären es Bytes. Es scheint ein ziemlich konsistentes Verhältnis zwischen den beiden von ungefähr 450 zu geben. Das heißt, wenn ich das Ergebnis du -svon 450 multipliziere, komme ich der Anzahl der Bytes, die von impliziert werden, ziemlich nahe du -sh.

Die größere Frage ist, ob ich mich schon immer geirrt habe. Warum bewirkt das Hinzufügen der -hFlagge in diesem Zusammenhang etwas anderes als das Ändern des Druckformats?

0

1 Antwort auf die Frage

4
Cliff Armstrong

Zunächst einmal hast du recht. Das -hFlag (wenn es nicht zum Drucken von Hilfetext verwendet wird) wird verwendet, um verschiedene Anwendungen anzuweisen, die Ausgabe in ein "lesbares Format" umzuwandeln. Das ist wichtig ... wir kommen darauf zurück. Für duinsbesondere die -sgibt Flagge, eine Zusammenfassung seiner normalen „pro-Verzeichnis“ ausgegeben. Im Grunde fügt es alles zusammen.

duIn der Standardeinstellung wird die Anzahl der logischen Blöcke zurückgegeben, die ein Verzeichnis und dessen Inhalt auf dem Speichermedium belegen. Die Anzahl der belegten Blöcke ist für viele Festplatten-Dienstprogramme und für das Scripting nützlich ... aber nicht sehr "lesbar". Das Flag -h konvertiert die Blockzählung zurück in eine Anzahl von Bytes und rundet dann auf den nächsten Faktor von 1024 (und einige andere shenanigans ... wir landen in Ihrem Fall mit Gigabyte und einer Ziffer hinter dem Dezimalzeichen).

In Anbetracht dessen, was Sie gesagt haben, kann ich darauf wetten, dass Ihr System für eine Blockgröße von 512 Byte konfiguriert ist, weil:

15565160 * 512/1024 ^ 3

Es ist wichtig zu beachten, dass dudavon ausgegangen, die Blockgröße (um), die gleich ist, der Wert von dem Set - --block-size=Flag, um den Wert der DU_BLOCK_SIZE, BLOCK_SIZEoder BLOCKSIZEUmgebungsvariablen oder 1024. 1024 Byte ist die übliche Standardblockgröße, die von den meisten modernen Dateisystemen verwendet wird. Aber 512-Byte-Blöcke sind nicht besonders selten. Überprüfen Sie diese Variablen, eine davon ist wahrscheinlich auf 512 eingestellt. Oder Sie haben eine besonders alte Version von du.

Das erklärt es! Vielen Dank. Hatte keine Ahnung, dass du die Blockgröße vorgegeben hast. Angenommen, die Bytes von ls waren konsistent, aber eindeutig eine schlechte Annahme Slater Victoroff vor 6 Jahren 0