Un lien dur (hard link) est un fichier qui pointe vers
le même emplacement mémoire (inode) qu’un autre fichier.
Pour créer un hard link, utiliser la commande ln
sans option:
ln filename aliasname
Exemple:
$ sudo ln /etc/passwd mypasswd
$ ls -li mypasswd
918731 -rw-r--r-- 2 root root 2667 Oct 23 06:15 mypasswd
$ ls -li /etc/passwd
918731 -rw-r--r-- 2 root root 2667 Oct 23 06:15 /etc/passwd
(on peut voir que le compte de liens durs vaut 2)
Un lien souple (soft link) ou lien symbolique (symbolic link, symlink) est un fichier qui pointe vers
un autre nom de fichier. Sous Windows, on appele ce type de lien un raccourci.
Un lien symbolique pointe vers le chemin d’un autre fichier:
si le fichier original est déplacé ou supprimé, alors le lien ne marche plus (on parle de lien mort).
Le chemin enregistré est celui qui a été donné en paramètre au moment de la création:
si le raccourci est déplacé, et qu’il pointe vers un chemin absolu, alors le lien continue de fonctionner;
mais s’il pointe vers un chemin relatif, alors le lien ne marche plus.
Dans la plupart des cas, on préfère utiliser des liens absolus, bien qu’il soit parfois nécessaire d’utiliser des chemins relatifs: cela permet notamment de créer des liens symboliques à l’intérieur d’un disque amovible, puisque le disque peut ne pas toujours être monté sur le même point de montage. Par exemple, sur une clé USB, on liera “firefox” vers “../../Programmes/Mozilla Firefox/firefox” et non “/media/[…]”
Pour créer un soft link, utiliser la commande ln
avec l’option -s
:
ln -s filename aliasname
Exemple:
$ ln -s /etc/passwd mypasswd
$ ls -li mypasswd
1181933 lrwxrwxrwx 1 am am 11 Oct 23 09:23 mypasswd -> /etc/passwd
$ ls -li /etc/passwd
918731 -rw-r--r-- 1 root root 2667 Oct 23 06:15 /etc/passwd
readlink
permet de récupérer le path du fichier vers lequel le lien pointe:
$ readlink mypasswd
/etc/passwd
Bien qu’ils aient la même finalité, chacun produit des résultats différents et présente des avantages et des inconvénients:
Répertoire:
Les liens symboliques peuvent pointer vers un répertoire, contrairement aux liens durs.
$ mkdir test
$ ln test/ test2
ln: test/: hard link not allowed for directory
Visibilité:
Les liens symboliques sont plus faciles à voir.
Les liens symboliques sont de type l
(1er caractère du premier champ)
Les liens durs ont un compte de lien supérieur à 1
(3ème champ)
On peut voir vers quel fichier pointe un lien symbolique — avec ls -l
ou readlink
Un lien dur a le même numéro d’inode qu’un autre fichier — visible avec ls -i