Die Definition dieser Zeile finden Sie im ls
Dokumentation für Ihre Plattform. Für coreutils
ls
(der auf vielen Linux-Systemen zu finden ist), die Informationen können über info coreutils ls
gefunden werden :
Stellen Sie für jedes aufgelistete Verzeichnis den Dateien eine Zeile "total BLOCKS" voran, wobei BLOCKS die gesamte Festplattenzuweisung für alle Dateien in diesem Verzeichnis ist.
Die Formel:Was das ist Nummer?
insgesamt int =Summe von (physical_blocks_in_use) * physical_block_size/ls_block_size) für jede Datei.
Wo:
ls_block_size
ist eine beliebige Umgebungsvariable (normalerweise 512 oder 1024 Bytes), die mit dem--block-size=<int>
frei modifizierbar ist Flagge aufls
, diePOSIXLY_CORRECT=1
GNUenvironment-Variable (um 512-Byte-Einheiten zu erhalten) oder-k
Flag, um Einheiten von 1 KB zu erzwingen.physical_block_size
ist der betriebssystemabhängige Wert einer internen Blockschnittstelle, die mit der zugrunde liegenden Hardware verbunden sein kann oder nicht. Dieser Wert ist normalerweise 512b oder 1k, hängt aber vollständig vom Betriebssystem ab. Es kann durch den%B
aufgedeckt werden Wert aufstat
oderfstat
. Beachten Sie, dass dieser Wert (fast immer) nichts mit der Anzahl physischer Blöcke auf einem modernen zu tun hat Speichergerät.
Warum so verwirrend?
Diese Zahl ist ziemlich losgelöst von jeder physikalischen oder aussagekräftigen Metrik. Viele Junior-Programmierer haben keine Erfahrung mit Dateilöchern oder harten/sym-Links. Darüber hinaus ist die zu diesem speziellen Thema verfügbare Dokumentation praktisch nicht vorhanden.
Die Zusammenhangslosigkeit und Mehrdeutigkeit des Begriffs "Blockgröße" ist das Ergebnis zahlreicher unterschiedlicher Maßnahmen, die leicht verwechselt werden können, und der relativ tiefen Abstraktionsebenen, die sich um den Festplattenzugriff drehen.
Beispiele widersprüchlicher Informationen:du
(oder ls -s
) vs. stat
Ausführen von du *
in einem Projektordner ergibt Folgendes:(Hinweis:ls -s
gibt dieselben Ergebnisse zurück.)
dactyl:~/p% du *
2 check.cc
2 check.h
1 DONE
3 Makefile
3 memory.cc
5 memory.h
26 p2
4 p2.cc
2 stack.cc
14 stack.h
Gesamt :2+2+1+3+3+5+26+4+2+14 =62 Blöcke
Doch wenn man stat
ausführt Wir sehen eine andere Reihe von Werten. Ausführen von stat
im gleichen Verzeichnis ergibt:
dactyl:~/p% stat * --printf="%b\t(%B)\t%n: %s bytes\n"
3 (512) check.cc: 221 bytes
3 (512) check.h: 221 bytes
1 (512) DONE: 0 bytes
5 (512) Makefile: 980 bytes
6 (512) memory.cc: 2069 bytes
10 (512) memory.h: 4219 bytes
51 (512) p2: 24884 bytes
8 (512) p2.cc: 2586 bytes
3 (512) stack.cc: 334 bytes
28 (512) stack.h: 13028 bytes
Gesamt: 3+3+1+5+6+10+51+8+3+28 =118 Blöcke
Hinweis: Sie können den Befehl stat * --printf="%b\t(%B)\t%n: %s bytes\n"
verwenden> um (in der Reihenfolge) die Anzahl der Blöcke, (in Klammern) die Größe dieser Blöcke, den Namen der Datei und die Größe in Bytes auszugeben, wie oben gezeigt.
Es gibt zwei wichtige Dinge zum Mitnehmen:
stat
meldet sowohl denphysical_blocks_in_use
undphysical_block_size
wie in der obigen Formel verwendet. Beachten Sie, dass dies Werte sind, die auf Betriebssystemschnittstellen basieren.du
liefert, was allgemein als ziemlich genaue Schätzung akzeptiert wird der physischen Festplattenauslastung.
Als Referenz ist hier der ls -l
Verzeichnis oben:
dactyl:~/p% ls -l
**total 59**
-rw-r--r--. 1 dhs217 grad 221 Oct 16 2013 check.cc
-rw-r--r--. 1 dhs217 grad 221 Oct 16 2013 check.h
-rw-r--r--. 1 dhs217 grad 0 Oct 16 2013 DONE
-rw-r--r--. 1 dhs217 grad 980 Oct 16 2013 Makefile
-rw-r--r--. 1 dhs217 grad 2069 Oct 16 2013 memory.cc
-rw-r--r--. 1 dhs217 grad 4219 Oct 16 2013 memory.h
-rwxr-xr-x. 1 dhs217 grad 24884 Oct 18 2013 p2
-rw-r--r--. 1 dhs217 grad 2586 Oct 16 2013 p2.cc
-rw-r--r--. 1 dhs217 grad 334 Oct 16 2013 stack.cc
-rw-r--r--. 1 dhs217 grad 13028 Oct 16 2013 stack.h
Das ist die Gesamtzahl der Dateisystemblöcke, einschließlich indirekter Blöcke, die von den aufgelisteten Dateien verwendet werden. Wenn Sie ls -s
ausführen auf die gleichen Dateien und summieren Sie die gemeldeten Zahlen, erhalten Sie die gleiche Zahl.