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=1
Variabile GNUenvironment (per ottenere unità da 512 byte) o-k
flag 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%B
valore sustat
ofstat
. 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:
stat
riporta sia ilphysical_blocks_in_use
ephysical_block_size
come usato nella formula sopra. Tieni presente che questi sono valori basati sulle interfacce del sistema operativo.du
sta 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.