5.2. Les liens

Le meilleur moyen de comprendre ce qui se cache derrière cette notion de liens est de prendre un exemple. Créons un fichier (régulier) :

$ pwd
/home/fg/exemple
$ ls
$ touch a
$ ls -il a
  32555 -rw-rw-r--    1 fg       fg              0 déc 10 08:12 a

L'option -i de la commande ls affiche le numéro d'i-nœud, qui est le premier champ dans la sortie. Comme vous pouvez le voir, avant que nous ayons créé le fichier a, il n'y avait aucun fichier dans le répertoire. L'autre champ intéressant est le troisième, qui est le compteur de liens pour le fichier.

En fait, on peut séparer la commande touch a en deux actions distinctes :

Mais maintenant, si nous faisons :

$ ln a b
$ ls -il a b
  32555 -rw-rw-r--    2 fg       fg              0 déc 10 08:12 a
  32555 -rw-rw-r--    2 fg       fg              0 déc 10 08:12 b
$

nous avons créé un autre lien vers le même i-nœud. Comme vous pouvez le voir, nous n'avons créé aucun fichier nommé b, mais au lieu de cela nous avons ajouté un autre lien vers l'i-nœud de numéro 32555 dans le même répertoire nommé b. Vous pouvez voir dans la deuxième sortie de ls -l que le compteur de liens est maintenant 2 et non plus 1.

Maintenant, si nous faisons :

$ rm a
$ ls -il b
  32555 -rw-rw-r--    1 fg       fg              0 déc 10 08:12 b
$

nous voyons que même si nous avons effacé le « fichier original  », l'i-nœud existe encore. Mais maintenant le seul lien vers cet i-nœud est /home/fg/exemple/b.

Donc, un i-nœud est lié si et seulement si il est référencé par un nom au moins une fois dans un répertoire quelconque[1]. Les répertoires eux-mêmes sont aussi stockés dans des i-nœuds, mais leur compteur de liens, contrairement à tous les autres types de fichiers, est leur nombre de sous-répertoires. Il y a au moins deux liens par répertoire : le répertoire lui-même (.) et son répertoire parent (..).

Des exemples typiques de fichiers qui ne sont pas liés (c'est-à-dire qu'ils n'ont pas de noms) sont les connexions réseau : vous ne verrez jamais le fichier correspondant à votre connexion à www.linux-mandrake.com dans votre arborescence, quel que soit le répertoire que vous essayiez. De façon similaire, quand vous utilisez un tube dans le shell, le fichier correspondant au tube existe bien, mais il n'est pas lié.

Notes

[1]

Si ce répertoire est sur le même système de fichiers que l'i-nœud.