Que signifie la taille d'un répertoire en sortie de la commande 'ls -l'?

65

Que signifie la taille d'un répertoire en sortie de ls -lcommande?

Hemant
la source
1
Plus d'informations sur la taille du répertoire dans cette réponse .
Christian Long

Réponses:

45

Il s'agit de la taille de l'espace sur le disque utilisé pour stocker les méta-informations du répertoire (c'est-à-dire la table des fichiers appartenant à ce répertoire). S'il s'agit de 1024 octets, cela signifie que 1024 octets sont utilisés sur le disque (il attribue toujours des blocs entiers) à cette fin.

txwikinger
la source
3
et quand un répertoire contient des milliers de fichiers, sa taille peut facilement être> 10 Ko
glenn jackman
1
@txwikinger Je pense que les répertoires contiennent des listes d'inodes, pas des noms de fichiers réels.
рослав Рахматуллин
6
@ ЯрославРахматуллин Une entrée de répertoire est composée d'un numéro inode et d'un nom de fichier.
200_success
2
Ainsi, la "taille" d'un répertoire est uniquement liée au nombre de fichiers qu'il contient, pas à la taille des fichiers?
Lee
1
@ Lee: Oui, c'est vrai.
chat
14

La "taille d'un répertoire" imprimée avec ls -lest (comme pour tout type de fichier) la valeur indiquée par l' stat()appel en statbuf.st_size.

Ce que cela st_sizesignifie pour les répertoires dépend entièrement du type de système de fichiers. Si vous ne connaissez pas le type de système de fichiers et comprenez ses concepts, vous ne pouvez rien déduire de la valeur dans st_size.

  • Dans le système de fichiers historique UNIX généralement nommé v7-fs, les répertoires étaient des entrées répétées de 16 octets contenant un numéro inode de 16 bits et 14 octets de nom de fichier. La "taille" d'un répertoire était significative par rapport à l' read(2)opération et augmentait ou restait toujours telle quelle. Les entrées .et ..sont créées en les liant manuellement au répertoire actuel et au répertoire supérieur. Le nombre de liens pour un répertoire vierge vierge est de 2.

  • Dans le système de fichiers BSD-4.2 qui est appelé depuis 1989 (SVr4) ufs, les répertoires sont une série d'enregistrements de longueur variable qui utilisent un format non accordé pour être stable. Les commandes d'espace utilisateur ne sont donc pas autorisées à lire ce format. La "taille" indiquée est la taille en octets comme dans la v7-fs, la taille augmente ou reste normalement telle quelle, mais les versions les plus récentes du système de fichiers peuvent réduire la taille dans certaines conditions - mais pas toujours au moment prévu. Le nombre de liens indiqué pour un répertoire vide est égal à 2 v7-fs.

  • Dans WOFS, le système de fichiers que j'ai conçu et mis en œuvre entre l'été 1988 et le mois de mai 1991, les répertoires indiquent toujours la "taille" 0 et n'ont jamais un type de contenu pouvant être lu à l'aide de l' read(2)appel. En effet, il WOFSs’agit du premier système de fichiers avec copie sur écriture et des WOFSfichiers indiquent le répertoire dans lequel ils se trouvent au lieu de figurer dans le répertoire. Si vous lisez un WOFSrépertoire en utilisant readdir(), vous n'obtenez que des données pour les entrées prévues, mais jamais pour .et ... Le nombre de liens d’un répertoire vide est égal à WOFS1 et l’ensemble du comportement est entièrement conforme à POSIX.

  • En ZFS, cela a été mis en œuvre après avoir lu les WOFSjournaux. ZFSest un système de fichiers avec copie sur écriture et ses auteurs ne nient pas avoir copié les concepts WOFS. Les répertoires sur ZFS signalent l' number of directory entriesin st_size, alors la "taille" rapportée n'a aucune signification réelle en ce qui concerne l'espace disque occupé par les données du répertoire. Il n'y a pas d' entrées .et ..dans un répertoire ZFS, mais si vous appelez readdir(), ces entrées sont falsifiées et renvoyées pour les deux premières opérations. ZFS est le seul FS de la liste qui ne prend pas en charge les répertoires avec liaison fixe, mais le nombre de liaisons déclaré pour les répertoires est toujours égal à 2. Ces deux irrégularités dans ZFS sont implémentées pour réduire la confusion dans les programmes historiques non POSIX.

  • Semblable à ZFS, WAFL copie certaines idées mais pas toutes WOFS. Netapp a WAFLété écrit trois ans après la WOFSpublication du document, WAFL est une copie sur écriture, mais WAFL semble indiquer des valeurs de "taille" pouvant correspondre à la "taille réelle du répertoire", en supposant que le répertoire a un contenu.

schily
la source
13

Un répertoire réserve 4096 octets (au minimum) pour les métadonnées sur lui-même et son contenu.

En outre, l'unité d'allocation par défaut (bloc) pour le système de fichiers ext2 / ext3 / ext4 est 4096 octets; par conséquent, un répertoire ne peut pas être plus petit.

Sur différents systèmes de fichiers, vous pouvez trouver des répertoires avec des tailles par défaut différentes, en raison de la taille de bloc par défaut du système de fichiers.

Les tailles de répertoire peuvent également croître de manière dynamique à mesure qu'elles sont remplies, mais une fois rempli, l'espace réservé aux métadonnées ne peut pas être réaffecté sans suppression du répertoire.

h3rrmiller
la source
1
De quelles méta-données parlez-vous?
Stéphane Chazelas
1
les détails dépendent du système de fichiers, mais incluent généralement des métadonnées telles que nom de fichier, numéro d'inode, type de fichier (fichier, répertoire, fifo, socket, nœud de périphérique, lien symbolique, etc.), propriétaire, groupe, autorisations, attributs, ACL, cibles de lien symbolique.
cas
6
@CraigSanders, le répertoire contient le nom de l'objet et le numéro d'inode correspondant uniquement . L'inode contient le type d'objet, le propriétaire / groupe, les autorisations, la référence à l'endroit où les ACL et les attributs étendus sont conservés, ... Toute autre situation entraînera une rupture grave de la sémantique du système de fichiers POSIX.
vonbrand
Mon UFS ne réserve que 512 octets pour ses propres métadonnées par répertoire.
FUZxxl
4

Un répertoire est juste un répertoire, comme un répertoire téléphonique. C'est juste un fichier avec une liste de chiffres et un nom à côté d'eux. Chaque numéro fait référence à un fichier dans le système de fichiers (un numéro inode) et le nom correspond au nom du fichier.

Vous avez besoin d'espace disque pour enregistrer ces données. La manière dont elles sont allouées, développées et réduites dépend du système de fichiers.

Stéphane Chazelas
la source
vous pouvez inclure les détails réels des métadonnées conservées et les considérations d’allocation de blocs concernant l’augmentation de la taille. cela donnerait une réponse plus exacte complète avec la belle allégorie déjà donnée. :)
n611x007
3
@naxa, cela dépend du système de fichiers, et même dans un système de fichiers (comme ext4), cela dépend des options que vous activez, je préfère donc le laisser comme "dépend du système de fichiers", plutôt que d'être exhaustif, ce qui ne serait pas très pertinent pour cette question.
Stéphane Chazelas