Supposons que je crée simplement le répertoire newDirectory, puis la commande ls -ld. Je vois que le nombre de liens durs est 2. Qu'est-ce qui fait exactement le lien dur 2 dès le début? Le nombre de sous-répertoires dans le répertoire actuel est-il égal au nombre de liens durs - 2?
38
Réponses:
Historiquement , le premier système de fichiers Unix créait deux entrées dans chaque répertoire:
.
pointant sur le répertoire lui-même et..
sur son parent. Cela fournissait un moyen facile de parcourir 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 correspondent à l'entrée de ce répertoire dans son parent, à la propre
.
entrée du répertoire et à l'..
entrée de chaque sous-répertoire. Par exemple, supposons qu'il s'agisse du contenu du sous-arbre/parent
dont tous les répertoires sont enracinés :Il y
dir
a ensuite un nombre de liens de 5: l’dir
entrée dans/parent
, l’.
entrée dans/parent/dir
et les trois..
entrées dans chacune de/parent/dir/sub1
,/parent/dir/sub2
et/parent/dir/sub3
. Étant donné qu’il/parent/dir/sub1
n’ya pas de sous-répertoire, son nombre de liens est 2 (l’sub1
entrée/parent/dir
et l’.
entrée/parent/dir/sub1
).Pour minimiser le nombre de casse spéciale pour le répertoire racine, qui n'a pas de parent «approprié», le répertoire racine contient une
..
entrée pointant sur elle-même. De cette façon, il a également un nombre de liens de 2 plus le nombre de sous-répertoires, le 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 d’exister
.
et..
doivent exister en tant qu’entrées réelles; Les systèmes Unix modernes typiques traitent.
et..
comme des valeurs spéciales dans le code du système de fichiers indépendant du type de système de fichiers. Certains systèmes de fichiers sont encore.
et..
entrées, ou font semblant de même si rien ne semble sur le disque.La plupart des systèmes de fichiers font encore un nombre de liens de 2 + n pour les répertoires que ce soit
.
et les..
entrées existent, mais il y a des exceptions, par exemple Btrfs ne le fait pas.la source
..
pointer vers le parent n'affecte pas le nombre de liens du répertoire en cours. Le nombre de 2 vient de.
et le nom du répertoire (original) est répertorié. La façon dont vous le formulez est un peu ambiguë et donne l'impression.
que..
les deux sont...
devrait être utilisé uniquement pour expliquer comment le calcul fonctionne2+n
.
intérieur". Si ce n'est toujours pas clair pour vous, je suis désolé de ne pouvoir clarifier davantage. Tout ce que je pourrais faire de mieux, c'est de copier / coller sa réponse ici dans les commentaires.Il y en a un pour le répertoire lui-même et un pour l'
.
intérieur.Cela a du sens, étant donné que chaque sous-répertoire crée un
..
lien physique, et au-delà, vous ne pouvez pas créer de liens physiques vers des répertoires. 1 Cependant, je ne ferais pas confiance à cela pour quoi que ce soit de grave, en particulier. puisqu'il est facile de compter les sous-répertoires et d'obtenir le nombre réel.Si vous cherchez simplement à
ls
obtenir une idée du nombre de sous-marins à la sortie, cela vous donne une idée décente.1 Ou du moins, vous ne pouvez pas avec
ln
. Je n'ai pas essayé de faire de la programmation, etman 2 link
c'est ambigu - il n'y a pas d'erreur évidente quand on se connecte à un répertoire, bien qu'un couple puisse s'appliquer (EMLINK
,EPERM
). Donc, à moins qu'il y ait une norme quelque part qui indique que les seuls liens physiques possibles vers un répertoire sont.
et..
, encore une fois, je ne traiterais que ce nombre de liens physiques comme un indice occasionnel.la source