Dans les systèmes de type Unix, la structure de données qui représente les objets du système de fichiers (en d'autres termes, les données sur un fichier), est stockée dans ce qu'on appelle un "inode".
Un nom de fichier n'est qu'un lien vers cet inode et est appelé "lien dur". Il n'y a aucune différence entre le prénom d'un fichier et tout lien ultérieur. La réponse est donc "oui": un lien dur est un fichier régulier et, en effet, un fichier régulier est un lien dur.
La ls
commande vous montrera combien de liens durs il y a vers le fichier.
Par exemple:
seumasmac@comp:~$ echo Hello > /tmp/hello.txt
seumasmac@comp:~$ ls -l /tmp/hello.txt
-rw-rw-r-- 1 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
Ici, nous avons créé un fichier appelé /tmp/hello.txt
. Le 1
dans la sortie de ls -l
indique qu'il existe 1 lien dur vers ce fichier. Ce lien dur est le nom du fichier lui-même /tmp/hello.txt
.
Si nous créons maintenant un autre lien dur vers ce fichier:
seumasmac@comp:~$ ln /tmp/hello.txt /tmp/helloagain.txt
seumasmac@comp:~$ ls -l /tmp/hello*
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/helloagain.txt
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
vous pouvez maintenant voir que les deux noms de fichiers indiquent qu'il y a 2 liens durs vers le fichier. Aucun de ceux-ci n'est le nom de fichier "correct", ils sont tous deux également valides. Nous pouvons voir qu'ils pointent tous les deux vers le même inode (dans ce cas, 5374043):
seumasmac@comp:~$ ls -i /tmp/hello*
5374043 /tmp/helloagain.txt 5374043 /tmp/hello.txt
Il existe une idée fausse commune selon laquelle cela est différent pour les répertoires. J'ai entendu des gens dire que le nombre de liens renvoyés par ls
un répertoire est le nombre de sous-répertoires, y compris .
et ..
qui est incorrect . Ou, au moins, alors qu'il vous donnera le bon numéro, c'est juste pour les mauvaises raisons!
Si nous créons un répertoire et faisons un, ls -ld
nous obtenons:
seumasmac@comp:~$ mkdir /tmp/testdir
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 2 seumasmac seumasmac 4096 Oct 4 13:20 /tmp/testdir
Cela montre qu'il existe 2 liens durs vers ce répertoire. Ceux-ci sont:
/tmp/testdir
/tmp/testdir/.
Notez que ce /tmp/testdir/..
n'est pas un lien vers ce répertoire, c'est un lien vers /tmp
. Et cela vous explique pourquoi fonctionne le "nombre de sous-répertoires". Lorsque nous créons un nouveau sous-répertoire:
seumasmac@comp:~$ mkdir /tmp/testdir/dir2
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 3 seumasmac seumasmac 4096 Oct 4 13:24 /tmp/testdir
vous pouvez maintenant voir qu'il y a 3 liens durs vers le /tmp/testdir
répertoire. Ceux-ci sont:
/tmp/testdir
/tmp/testdir/.
/tmp/testdir/dir2/..
Ainsi, chaque nouveau sous-répertoire augmentera le nombre de liens d'un, en raison de l' ..
entrée qu'il contient.