Vous pouvez trouver la définition de cette ligne dans le ls
documentation de votre plate-forme. Pour coreutils
ls
(celui que l'on trouve sur beaucoup de systèmes Linux), les informations peuvent être trouvées via info coreutils ls
:
Pour chaque répertoire répertorié, faites précéder les fichiers d'une ligne "total BLOCKS", où BLOCKS est l'allocation totale du disque pour tous les fichiers de ce répertoire.
La formule :qu'est-ce que c'est ? numéro ?
total entier =Somme de (physical_blocks_in_use) * physical_block_size/ls_block_size) pour chaque fichier.
Où :
ls_block_size
est une variable d'environnement arbitraire (normalement 512 ou 1024 octets) qui est librement modifiable avec le--block-size=<int>
drapeau surls
, lePOSIXLY_CORRECT=1
Variable d'environnement GNU (pour obtenir des unités de 512 octets), ou le-k
flag pour forcer les unités de 1 Ko.physical_block_size
est la valeur dépendante du système d'exploitation d'une interface de bloc interne, qui peut ou non être connectée au matériel sous-jacent. Cette valeur est normalement 512b ou 1k, mais dépend entièrement du système d'exploitation. Il peut être révélé par le%B
valeur surstat
oufstat
. Notez que cette valeur est (presque toujours) sans rapport avec le nombre de blocs physiques sur un moderne périphérique de stockage.
Pourquoi tant de confusion ?
Ce nombre est assez détaché de toute métrique physique ou significative. De nombreux programmeurs juniors n'ont pas d'expérience avec les trous de fichiers ou les liens durs/sym. De plus, la documentation disponible sur ce sujet précis est quasi inexistante.
Le manque de cohérence et l'ambiguïté du terme "taille de bloc" a été le résultat de la confusion facile de nombreuses mesures différentes et des niveaux d'abstraction relativement profonds liés à l'accès au disque.
Exemples d'informations contradictoires :du
(ou ls -s
) contre stat
Exécution de du *
dans un dossier de projet donne ceci :(Remarque :ls -s
renvoie les mêmes résultats.)
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 Blocs
Pourtant, quand on exécute stat
nous voyons un ensemble différent de valeurs. Exécution de stat
dans le même répertoire donne :
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 Blocs
Remarque : Vous pouvez utiliser la commande
stat * --printf="%b\t(%B)\t%n: %s bytes\n"
> pour afficher (dans l'ordre) le nombre de blocs, (entre parenthèses) la taille de ces blocs, le nom du fichier et la taille en octets, comme indiqué ci-dessus.
Il y a deux choses importantes à retenir :
stat
signale à la fois lephysical_blocks_in_use
etphysical_block_size
tel qu'utilisé dans la formule ci-dessus. Notez que ces valeurs sont basées sur les interfaces du système d'exploitation.du
fournit ce qui est généralement accepté comme une estimation assez précise d'utilisation du disque physique.
Pour référence, voici le ls -l
du répertoire ci-dessus :
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
C'est le nombre total de blocs du système de fichiers, y compris les blocs indirects, utilisés par les fichiers répertoriés. Si vous exécutez ls -s
sur les mêmes fichiers et additionnez les nombres rapportés, vous obtiendrez ce même nombre.