GNU/Linux >> Tutoriels Linux >  >> Linux

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

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 sur ls , le POSIXLY_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 sur stat ou fstat . 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 le physical_blocks_in_use et physical_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.


Linux
  1. Comment insérer du texte avant la première ligne d'un fichier ?

  2. Comment arrêter la commande de recherche après la première correspondance ?

  3. Bash écrase la première ligne, invite Ps1 Bash ?

  4. Comment scinder un fichier et conserver la première ligne dans chacun des morceaux ?

  5. Que fait la ligne '!/bin/sh -e' ?

Que signifie l'esperluette à la fin d'une ligne de script Shell ?

Que signifie une flèche (->) sur la ligne de commande ?

Comment différencier uniquement la première ligne de deux fichiers?

Quelles sont les différentes manières d'afficher un message dans un shell bash après la connexion d'un utilisateur ?

mount -t TYPE / - comment savoir quel pourrait être le TYPE ?

Qu'est-ce que l'utilitaire de ligne de commande DNS inversé ?