La structure interne des répertoires dépend du système de fichiers utilisé. Si vous voulez savoir précisément ce qui se passe, jetez un œil aux implémentations du système de fichiers.
Fondamentalement, dans la plupart des systèmes de fichiers, un répertoire est un tableau associatif entre les noms de fichiers (clés) et les numéros d'inodes (valeurs). Quelque chose comme ça¹:
1167010 .
1158721 ..
1167626 subdir
132651 barfile
132650 bazfile
Cette liste est codée de manière plus ou moins efficace à l'intérieur d'une chaîne de blocs (généralement) 4Ko. Notez que le contenu des fichiers normaux est stocké de manière similaire. Dans le cas des répertoires, il est inutile de savoir quelle taille est réellement utilisée à l'intérieur de ces blocs. C'est pourquoi les tailles d'annuaires rapportées par du
sont des multiples de 4 Ko.
Les inodes sont là pour lier des blocs ensemble, formant une seule entité, à savoir un «fichier» au sens général. Ils sont identifiés par un numéro qui est une sorte d'adresse et chacun est généralement stocké comme un bloc spécial unique.
La gestion de tout cela se fait en mode noyau. Le logiciel demande simplement la création d'un répertoire avec une fonction nommée int mkdir(const char *pathname, mode_t mode);
conduisant à un appel système, et tout le reste est effectué en arrière-plan.
À propos de la structure des liens:
Un lien dur n'est pas un fichier, c'est juste une nouvelle entrée de répertoire (c'est-à-dire une association nom - numéro d'inode ) faisant référence à une entité inode préexistante². Cela signifie que le même inode est accessible à partir de différents chemins d'accès. En particulier, puisque les métadonnées (autorisations, propriété, horodatages…) sont stockées dans l'inode, elles sont uniques et indépendantes du chemin d'accès choisi pour accéder au fichier.
Un lien symbolique est un fichier et il est distinct de sa cible. Cela signifie qu'il a son propre inode. Auparavant, il était géré comme un fichier ordinaire: le chemin cible était stocké dans un bloc de données. Mais maintenant, pour des raisons d'efficacité dans les systèmes de fichiers ext récents , les chemins de moins de 60 octets de long sont stockés dans l'inode lui-même (en utilisant les champs qui seraient normalement utilisés pour stocker les pointeurs dans les blocs de données).
-
1. cela a été obtenu en utilisant ls -ai1 testdir
.
2. dont le type doit être différent de «répertoire» de nos jours.