Disons que je viens de créer le répertoire newDirectory, puis je lance 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épart? Le nombre de sous-répertoires du répertoire actuel est-il également égal au nombre de liens durs - 2?
Historiquement , le premier système de fichiers Unix a créé 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 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 sont l'entrée de ce répertoire dans son parent, le propre .
entrée et ..
entrée dans chaque sous-répertoire. Par exemple, supposons que ce soit le contenu du sous-arbre enraciné à /parent
, tous les répertoires:
/parent
/parent/dir
/parent/dir/sub1
/parent/dir/sub2
/parent/dir/sub3
dir
a alors un nombre de liens de 5: l'entrée dir
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 parent "approprié", 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 ..
pour exister en tant qu'entrées réelles; les systèmes Unix modernes typiques traitent .
et ..
en tant que valeurs spéciales dans le cadre du code du 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.
Il y en a un pour le répertoire lui-même et un pour .
à l'intérieur.
Le nombre de sous-répertoires du répertoire actuel est-il également égal au nombre de liens durs - 2?
Cela a du sens, car chaque sous-répertoire crée un ..
hardlink, et au-delà, vous ne pouvez pas créer de hardlinks vers des répertoires.1 Cependant, je ne ferais pas confiance à cela pour quoi que ce soit de grave, surtout. car il est facile de compter les sous-répertoires et d'obtenir le vrai nombre.
Si vous regardez simplement la sortie de ls
pour avoir une idée du nombre de sous-marins, il vous donne une idée décente.
1 Ou du moins, vous ne pouvez pas avec ln
. Je n'ai pas essayé de programmer, et man 2 link
est ambigu - il n'y a pas d'erreur évidente pour la liaison à un répertoire, bien qu'il y en ait quelques-uns qui pourraient s'appliquer (EMLINK
, EPERM
). Donc, sauf s'il existe un standard quelque part qui dit que les seuls liens physiques possibles vers un répertoire sont .
et ..
, encore une fois, je ne considérerais que le nombre de liens durs comme un indice occasionnel.