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

Was ist diese Summe in der allerersten Zeile nach ls -l?

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 auf ls , die POSIXLY_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 auf stat oder fstat . 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 den physical_blocks_in_use und physical_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.


Linux
  1. Linux – Was bedeutet ein Punkt nach den Dateiberechtigungsbits?

  2. Bash überschreibt die erste Zeile, Ps1 Bash Prompt?

  3. Was macht die Zeile '!/bin/sh -e'?

  4. Wie bekomme ich die n-te Zeile nach einer gruppierten?

  5. mount -t TYP / - wie kann man wissen, was der TYP sein könnte?

Auslassen der ersten Zeile in jeder Linux-Befehlsausgabe

Was macht hier das '-' (Bindestrich) nach Variablennamen?

Was bedeutet ein Pfeilsymbol (->) in der Befehlszeile?

Wie kann man nur die erste Zeile von zwei Dateien unterscheiden?

Befehlszeile, um nach Strg-Alt-F1 zur GUI zurückzukehren?

Auf welche verschiedenen Arten kann eine Nachricht in einer Bash-Shell angezeigt werden, nachdem sich ein Benutzer angemeldet hat?