it-swarm.it

Qual è il "totale" nella prima riga dopo ls -l?

Qual è il total nell'output di ls -l?

    $ ls -l /etc
    total 3344
    -rw-r--r--   1 root root   15276 Oct  5  2004 a2ps.cfg
    -rw-r--r--   1 root root    2562 Oct  5  2004 a2ps-site.cfg
    drwxr-xr-x   4 root root    4096 Feb  2  2007 acpi
    -rw-r--r--   1 root root      48 Feb  8  2008 adjtime
    drwxr-xr-x   4 root root    4096 Feb  2  2007 alchemist
118
Sanket Sahu

Puoi trovare la definizione di quella linea nella documentazione ls per la tua piattaforma. Per coreutilsls (quello presente su molti sistemi Linux), le informazioni possono essere trovate tramite info coreutils ls:

Per ogni directory elencata, prefigurare i file con una riga "BLOCCHI totali", dove BLOCCHI è l'allocazione totale del disco per tutti i file in quella directory.

86
Mat

La formula: cos'è quello numero?

total int = Somma di (physical_blocks_in_use) * physical_block_size/ls_block_size) per ciascun file.

Dove:

  • ls_block_size È una variabile di ambiente arbitraria (normalmente 512 o 1024 byte) che è liberamente modificabile con il flag --block-size=<int> Su ls, il POSIXLY_CORRECT=1 GNU variabile d'ambiente (per ottenere unità da 512 byte) o il flag -k per forzare le unità da 1kB.
  • physical_block_size È il valore dipendente dal sistema operativo di un'interfaccia di blocco interna, che può o meno essere connessa all'hardware sottostante. Questo valore è normalmente 512b o 1k, ma dipende completamente dal sistema operativo. Può essere rivelato attraverso il valore %B Su stat o fstat. Nota che questo valore è (quasi sempre) non correlato al numero di blocchi fisici su un dispositivo di memorizzazione moderno.

Perché così confuso?

Questo numero è abbastanza distaccato da qualsiasi metrica fisica o significativa. Molti programmatori junior non hanno avuto esperienza con fori dei file o collegamenti hard/sym . Inoltre, la documentazione disponibile su questo argomento specifico è praticamente inesistente.

La disgiunzione e l'ambiguità del termine "dimensione del blocco" è stata il risultato della confusione di numerose misure diverse e dei livelli relativamente profondi di astrazione che ruotano attorno all'accesso al disco.

Esempi di informazioni contrastanti: du (o ls -s) Vs stat

L'esecuzione di du * In una cartella di progetto produce quanto segue: (Nota: ls -s Restituisce gli stessi risultati.) ==

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

Totale : 2 + 2 + 1 + 3 + 3 + 5 + 26 + 4 + 2 + 14 = 62 Blocks

Tuttavia quando si esegue stat vediamo un diverso set di valori. L'esecuzione di stat nella stessa directory produce:

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

Totale: 3 + 3 + 1 + 5 + 6 + 10 + 51 + 8 + 3 + 28 = 118 Blocks

Nota: È possibile utilizzare il comando stat * --printf="%b\t(%B)\t%n: %s bytes\n"> per generare (in ordine) il numero di blocchi, (in parentesi) la dimensione di quei blocchi, il nome del file e la dimensione in byte, come mostrato sopra.

Ci sono due cose importanti da asporto:

  • stat riporta sia physical_blocks_in_use che physical_block_size come usato nella formula sopra. Si noti che questi sono valori basati su interfacce del sistema operativo.
  • du sta fornendo ciò che è generalmente accettato come abbastanza accurato stima dell'utilizzo del disco fisico.

Per riferimento, ecco il ls -l Della directory sopra:

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
42
Don Scott

Questo è il numero totale di blocchi del file system, inclusi i blocchi indiretti, utilizzati dai file elencati. Se esegui ls -s sugli stessi file e sommando i numeri riportati otterrai lo stesso numero.

26
Dave Lasley

Solo per citare - puoi usare -h (ls -lh) per convertirlo in un formato leggibile dall'uomo.

18