Puoi trovare la definizione di quella linea nel ls documentazione per la tua piattaforma. Per coreutils ls (quello che si trova su molti sistemi Linux), le informazioni possono essere trovate tramite info coreutils ls :
Per ogni directory elencata, fai precedere i file da una riga `total BLOCKS', dove BLOCKS è l'allocazione totale del disco per tutti i file in quella directory.
La formula:Cos'è quello numero?
totale int =Somma di (physical_blocks_in_use) * physical_block_size/ls_block_size) per ogni file.
Dove:
ls_block_sizeè una variabile d'ambiente arbitraria (normalmente 512 o 1024 byte) che è liberamente modificabile con il--block-size=<int>flag suls, ilPOSIXLY_CORRECT=1Variabile GNUenvironment (per ottenere unità da 512 byte) o-kflag per forzare unità di 1kB.physical_block_sizeè il valore dipendente dal sistema operativo di un'interfaccia di blocco interna, che può o meno essere collegata all'hardware sottostante. Questo valore è normalmente 512b o 1k, ma dipende completamente dal sistema operativo. Può essere rivelato attraverso il%Bvalore sustatofstat. Tieni presente che questo valore non è (quasi sempre) correlato al numero di blocchi fisici su un moderno dispositivo di archiviazione.
Perché così confusa?
Questo numero è abbastanza distaccato da qualsiasi metrica fisica o significativa. Molti programmatori junior non hanno esperienza con buchi di file o collegamenti hard/sym. Inoltre, la documentazione disponibile su questo specifico argomento è praticamente inesistente.
La disarticolazione e l'ambiguità del termine "dimensione del blocco" è stato il risultato di numerose misure diverse facilmente confuse e dei livelli relativamente profondi di astrazione che ruotano attorno all'accesso al disco.
Esempi di informazioni contrastanti:du (o ls -s ) rispetto a stat
Esecuzione di du * in una cartella di progetto restituisce 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 blocchi
Tuttavia, quando si esegue stat vediamo un diverso insieme di valori. 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 blocchi
Nota: Puoi usare il comando
stat * --printf="%b\t(%B)\t%n: %s bytes\n"> per emettere (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:
statriporta sia ilphysical_blocks_in_useephysical_block_sizecome usato nella formula sopra. Tieni presente che questi sono valori basati sulle interfacce del sistema operativo.dusta fornendo ciò che è generalmente accettato come una stima piuttosto accurata 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
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.