web-dev-qa-db-fra.com

Quel est ce "total" dans la toute première ligne après ls -l?

Quel est le total dans la sortie de 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

Vous pouvez trouver la définition de cette ligne dans la documentation ls de votre plate-forme. Pour coreutilsls (celui trouvé sur de nombreux 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 "BLOCKS total", BLOCKS étant l’allocation de disque totale pour tous les fichiers de ce répertoire.

86
Mat

La formule: Qu'est-ce que le nombre ça?

total int = 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) librement modifiable à l'aide de l'indicateur --block-size=<int> Sur ls. , la POSIXLY_CORRECT=1 GNU (pour obtenir des unités de 512 octets)), ou le drapeau -k pour forcer des 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 être connectée ou non au matériel sous-jacent. Cette valeur est normalement 512b ou 1k, mais dépend complètement du système d'exploitation. Cela peut être révélé par la valeur %B Sur stat ou fstat. Notez que cette valeur n'est (presque toujours) pas liée au nombre de blocs physiques sur un périphérique de stockage moderne.

Pourquoi si déroutant?

Ce nombre est assez détaché de toute métrique physique ou significative. Beaucoup de programmeurs débutants n'ont jamais eu l'expérience de trous de fichiers ou liens durs/sym . De plus, la documentation disponible sur ce sujet spécifique est pratiquement inexistante.

La discordance et l'ambiguïté du terme "taille de bloc" sont le résultat de nombreuses mesures différentes qui se confondent facilement et des niveaux d'abstraction relativement profonds liés à l'accès au disque.

Exemples d'informations contradictoires: du (ou ls -s) Vs stat

L'exécution de du * Dans un dossier de projet donne les résultats suivants: (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

Total : 2 + 2 + 1 + 3 + 5 + 26 + 4 + 2 + 14 = 62 Blocs

Pourtant, lorsque vous exécutez stat, nous voyons un ensemble de valeurs différent. Si vous exécutez stat dans le même répertoire, vous obtiendrez:

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

Total: 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 indiquer (dans l'ordre) le nombre de blocs, la taille de ces blocs et leur nom. du fichier et la taille en octets, comme indiqué ci-dessus.

Il y a deux choses importantes à retenir:

  • stat renvoie les deux types physical_blocks_in_use et physical_block_size utilisés dans la formule ci-dessus. Notez qu'il s'agit de valeurs basées sur les interfaces de système d'exploitation.
  • du fournit ce qui est généralement accepté comme une estimation assez précise estimation de l'utilisation du disque physique.

Pour référence, voici le répertoire 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
42
Don Scott

Il s’agit du 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 pour obtenir le même nombre.

26
Dave Lasley

Juste pour mentionner - vous pouvez utiliser -h (ls -lh) pour convertir ceci en un format lisible par l'homme.

18
Tsvetomir Dimitrov