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_sizeist eine beliebige Umgebungsvariable (normalerweise 512 oder 1024 Bytes), die mit dem--block-size=<int>frei modifizierbar ist Flagge aufls, diePOSIXLY_CORRECT=1GNUenvironment-Variable (um 512-Byte-Einheiten zu erhalten) oder-kFlag, um Einheiten von 1 KB zu erzwingen.physical_block_sizeist 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%Baufgedeckt werden Wert aufstatoderfstat. 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:
statmeldet sowohl denphysical_blocks_in_useundphysical_block_sizewie in der obigen Formel verwendet. Beachten Sie, dass dies Werte sind, die auf Betriebssystemschnittstellen basieren.duliefert, 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.