GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi un nouveau répertoire a-t-il un nombre de liens physiques de 2 avant que quoi que ce soit ne soit ajouté ?

Supposons que je crée simplement le répertoire newDirectory, puis que je lance la commande ls -ld. Je vois que le nombre de liens durs est de 2. Qu'est-ce qui fait exactement le lien dur 2 dès le départ ? De plus, le nombre de sous-répertoires dans le répertoire courant est-il égal au nombre de liens physiques – 2 ?

Réponse acceptée :

Historiquement, le premier système de fichiers Unix créait deux entrées dans chaque répertoire :. pointant vers le répertoire lui-même, et .. pointant vers son parent. Cela a fourni un moyen facile de traverser le système de fichiers, à la fois pour les applications et pour le système d'exploitation lui-même.

Ainsi, chaque répertoire a un nombre de liens de 2+n où n est le nombre de sous-répertoires. Les liens sont l'entrée de ce répertoire dans son parent, le propre . du répertoire l'entrée, et le .. entrée dans chaque sous-répertoire. Par exemple, supposons qu'il s'agisse du contenu de la sous-arborescence enracinée à /parent , tous les répertoires :

/parent
/parent/dir
/parent/dir/sub1
/parent/dir/sub2
/parent/dir/sub3

Puis dir a un nombre de liens de 5 :le dir saisie dans /parent , le . entrée dans /parent/dir , et les trois .. entrées dans chacun des /parent/dir/sub1 , /parent/dir/sub2 et /parent/dir/sub3 . Depuis /parent/dir/sub1 n'a pas de sous-répertoire, son nombre de liens est 2 (le sub1 entrée dans /parent/dir et le . entrée dans /parent/dir/sub1 ).

Pour minimiser la quantité de casse spéciale pour le répertoire racine, qui n'a pas de "propre" parent, le répertoire racine contient un .. entrée pointant vers elle-même. De cette façon, il a également un nombre de liens de 2 plus le nombre de sous-répertoires, les 2 étant /. et /.. .

Les systèmes de fichiers ultérieurs ont eu tendance à garder une trace des répertoires parents en mémoire et n'ont généralement pas besoin de . et .. exister en tant qu'entrées réelles ; les systèmes Unix modernes typiques traitent . et .. comme valeurs spéciales dans le cadre du code de système de fichiers indépendant du type de système de fichiers. Certains systèmes de fichiers incluent toujours . et .. entrées, ou faire semblant même si rien n'apparaît sur le disque.

La plupart des systèmes de fichiers signalent toujours un nombre de liens de 2+n pour les répertoires, que . et .. des entrées existent, mais il y a des exceptions, par exemple btrfs ne le fait pas.


Linux
  1. Pourquoi les liens physiques vers les répertoires ne sont-ils pas autorisés sous Unix/linux ?

  2. Dans `while Ifs=Read..`, Pourquoi Ifs n'a-t-il aucun effet ?

  3. Pourquoi ‘/’ a-t-il une entrée ‘..’ ?

  4. Créer un nouveau répertoire en C

  5. Pourquoi uniq considère-t-il les mots identiques comme différents ?

Existe-t-il quelque chose de plus rapide que `find . | wc -l` pour compter les fichiers dans un répertoire ?

Pourquoi utiliser echo avant d'installer un nouveau logiciel ?

Pourquoi Bash ne donne-t-il aucun fichier ou répertoire de ce type pour un programme qui se trouve dans mon PATH ?

Pourquoi `xdg-mime query filetype ...` ne parvient-il pas à trouver un nouveau type de fichier ajouté ?

Pourquoi Linux chauffe-t-il mon ordinateur ?

Pourquoi pvremove a-t-il une force en double dans la page de manuel ?