Liens symboliques

Objectifs

  • Comprendre la notion de lien symbolique

  • Utiliser la commande ln

DéfinitionLien symbolique

Certains fichiers ne sont que des pointeurs vers d'autres fichiers. On les appelle des liens symboliques.

Un lien symbolique contient le chemin relatif ou absolu d'un fichier ou d'un répertoire qui peut être n'importe où dans l'arborescence. Il permet de faire référence à ce fichier ou ce répertoire à un autre endroit.

1
bonnetst@vivaldi:~/api$ ls -l
2
total 16
3
-rw-rw-r-- 1 bonnetst bonnetst 13 janv. 25 20:34 fichier.txt
4
lrwxrwxrwx 1 bonnetst bonnetst 11 janv. 25 20:41 lien.txt -> fichier.txt
5
bonnetst@vivaldi:~/api$ cat fichier.txt 
6
Vive Linux !
7
bonnetst@vivaldi:~/api$ cat lien.txt 
8
Vive Linux !

MéthodeCréation de liens symboliques

La commande ln -s <nom du fichier> <nom du lien> permet de créer des liens symboliques.

1
bonnetst@vivaldi:~/api$ ln -s fichier.txt lien2.txt
2
bonnetst@vivaldi:~/api$ ls -l
3
total 20
4
-rw-rw-r-- 1 bonnetst bonnetst 13 janv. 25 20:34 fichier.txt
5
lrwxrwxrwx 1 bonnetst bonnetst 11 janv. 25 20:45 lien2.txt -> fichier.txt
6
lrwxrwxrwx 1 bonnetst bonnetst 11 janv. 25 20:41 lien.txt -> fichier.txt

AttentionChemins dans les liens symboliques

Un lien symbolique fait référence à un fichier ou répertoire exactement comme il est saisi dans la commande ln. Il faut que cette référence soit un chemin correct quelque soit l'endroit d'où le lien est utilisé.

1
bonnetst@vivaldi:~/api$ mkdir subdir
2
bonnetst@vivaldi:~/api$ ln -s fichier.txt subdir/lien.txt
3
bonnetst@vivaldi:~/api$ ls -l subdir
4
total 4
5
lrwxrwxrwx 1 bonnetst bonnetst 11 janv. 25 20:54 lien.txt -> fichier.txt
6
bonnetst@vivaldi:~/api$ cat subdir/lien.txt 
7
cat: subdir/lien.txt: Aucun fichier ou dossier de ce type

En suivant le lien, le système cherche le fichier dans le répertoire subdir et ne le trouve pas. Il aurait fallu donner dans le lien le chemin relatif correct de fichier.txt

ConseilComment toujours créer des liens symboliques corrects.

Pour créer un lien symbolique correct, il faut toujours utiliser :

  • Le chemin absolu vers la cible

  • Le chemin relatif vers la cible depuis l'emplacement du lien.

1
bonnetst@vivaldi:~/api$ ln -sf ../fichier.txt subdir/lien.txt
2
bonnetst@vivaldi:~/api$ cat subdir/lien.txt 
3
Vive Linux !

ComplémentManipulation des liens symboliques

Les liens symboliques peuvent être supprimés par rm. Seul le lien est alors supprimé, pas le fichier vers lequel il pointe.

En revanche, la copie d'un lien par cp copie le fichier et non lien par défaut. L'option -d permet de copier le lien lui-même.

1
bonnetst@vivaldi:~/api/subdir$ cp lien.txt lien2.txt
2
bonnetst@vivaldi:~/api/subdir$ ls -l
3
total 4
4
lrwxrwxrwx 1 bonnetst bonnetst 14 janv. 25 21:02 lien.txt -> ../fichier.txt
5
bonnetst@vivaldi:~/api/subdir$ cp lien.txt lien2.txt
6
bonnetst@vivaldi:~/api/subdir$ ls -l
7
total 16
8
-rw-rw-r-- 1 bonnetst bonnetst 13 janv. 25 21:10 lien2.txt
9
lrwxrwxrwx 1 bonnetst bonnetst 14 janv. 25 21:02 lien.txt -> ../fichier.txt
10

lien2.txt est une copie du fichier, pas du lien.

1
bonnetst@vivaldi:~/api/subdir$ cp -d lien.txt lien3.txt
2
bonnetst@vivaldi:~/api/subdir$ ls -l
3
total 20
4
-rw-rw-r-- 1 bonnetst bonnetst 13 janv. 25 21:10 lien2.txt
5
lrwxrwxrwx 1 bonnetst bonnetst 14 janv. 25 21:11 lien3.txt -> ../fichier.txt
6
lrwxrwxrwx 1 bonnetst bonnetst 14 janv. 25 21:02 lien.txt -> ../fichier.txt

lien3.txt est bien une copie du lien.