GNU/Linux

Publié le 7 mars, 2017 | par Loulou De Gueyo

2

Linux, les liens durs et les liens symboliques

Qu’est ce qu’un lien ?

Un lien est un fichier. C’est une référence à un autre fichier créé par la commande ln.
De façon intuitive, les liens donnent plusieurs noms à un même fichier
permettant à ces fichiers d’être à la fois dans deux ou plusieurs endroits différents.
Il existe deux sortes de liens. Les liens symboliques et les liens durs.

Quelle est la différence entre un lien dur et un lien symbolique ?

LiensLinux

Le lien dur est tout simplement un second nom du fichier original. Les deux fichiers (lien et fichier original) sont en fait un et un seul fichier sur le disque dure. Ils pointent sur le même inode.

Le lien symbolique quant à lui se réfère à un autre fichier grâce au chemin de ce dernier ; un peu comme les raccourcis sous Windows.

Comment créer un lien ?

Pour créer un lien dur on utilise la commande suivante : ln mon_fichier mon_lienDur.
Si vous supprimez le fichier original, le lien dur  fonctionnera très bien.
Pour créer un lien symbolique, on utilise la commande ln avec l’option -s : ln mon_fichier -s mon_lienSymbolique.
Si l’on supprime le fichier original, le lien symbolique ne fonctionnera plus. On dira dans ce cas qu’il est cassé.

En fait, si le fichier original est supprimé, le lien pointera vers le chemin d’un fichier qui n’existe pas. Il ne fonctionnera donc pas.

Les liens symboliques peuvent pointer vers des fichiers se trouvant sur d’autres partitions parce-que ils sont simplement des références à des fichiers. Cela n’est pas possible avec les liens durs car un inode sur une partition n’a aucune signification sur une partition différente.
Les liens symboliques peuvent pointer sur des répertoires; ce qui n’est pas le cas pour les liens durs à moins  d’utiliser en tant que super-utilisateur l’option -d ou -F. Même en tant que super-utilisateur, la commande peut échouer à cause de certaines restrictions du système.

Il est possible de voir le fichier sur lequel pointe un lien symbolique avec les commandes readlink ou ls -l.

Les liens symboliques peuvent pointer sur d’autres liens symboliques ainsi de suite. Pour voir la chaîne entière des liens afin de découvrir le fichier final sur lequel ils renvoient, on peut utiliser la commande readlink avec l’option -f

Et si nous faisions un peu de pratique ?

Nous allons  utiliser un éditeur de texte en mode console nano pour créer et éditer nos fichiers.

nano nom_fichier.txt. Si l’éditeur s’ouvre, tapez votre texte. Pour sauvegarder votre travail, faites CTRL+O ENTRE. Pour quitter, l’éditeur faites CTRL+X.

C’est parti !!!

Créons un fichier nommé Fichier.txt dans le dossier fichiers.

loulou@server:~/fichiers$ nano Fichier.txt
  GNU nano 2.5.3            Fichier : Fichier.txt                               

je mets du contenu dans mon fichier


                              [ Nouveau fichier ]
^G Aide      ^O Écrire    ^W Chercher  ^K Couper    ^J Justifier ^C Pos. cur.
^X Quitter   ^R Lire fich.^\ Remplacer ^U Coller    ^T Orthograp.^_ Aller lig.

Entrez le texte  » je mets du contenu dans mon fichier ». Faites ensuite  CTRL+O ENTRE pour enregistrer et CTRL+X pour quitter l’éditeur.

Vous avez maintenant un fichier avec un contenu. Vous pouvez le vérifier en utilisant la commande cat.

loulou@server:~/fichiers$ ls
Fichier.txt  

loulou@server:~/fichiers$ cat Fichier.txt 
je mets du contenu dans mon fichier

Créons maintenant un lien dur du fichier Fichier.txt.

loulou@server:~/fichiers$ ln Fichier.txt lienDur
loulou@server:~/fichiers$ ls
Fichier.txt  lienDur

Notre lien dur lienDur a bien été créé. Voyons son contenu avec la commande cat.

loulou@server:~/fichiers$ cat lienDur 
je mets du contenu dans mon fichier

Notre lien dur a le contenu de Fichier.txt un peu comme si c’était sa copie. Mais pour voir la différence avec une simple copie créée avec la commande cp, nous allons voir maintenant le comportement du lien lorsque le fichier d’origine subit une modification et vis-versa.

loulou@server:~/fichiers$ nano Fichier.txt
 GNU nano 2.5.3     Fichier : Fichier.txt        Modifié  

je mets du contenu dans mon fichier
j'apporte une modification dans mon fichier



^G Aide       ^O Écrire     ^W Chercher   ^K Couper
^X Quitter    ^R Lire fich. ^\ Remplacer  ^U Coller
 

Après avoir enregistré  la modification avec CTRL+O ENTRE et quitter nano avec CTRL+X, voyons maintenant le contenu de lienDur.

loulou@server:~/fichiers$ cat lienDur 
je mets du contenu dans mon fichier
j'apporte une modification dans mon fichier

Le lien dur a été modifié automatiquement aussi. Si on avait affaire à une simple copie, la modification du fichier d’origine n’aurait eu aucun impact sur la copie.

Modifions maintenant le lien dur et voyons comment le fichier d’origine se comporte.

loulou@server:~/fichiers$ nano lienDur
 
GNU nano 2.5.3       Fichier : lienDur          Modifié  

je mets du contenu dans mon fichier
j'apporte une modification dans mon fichier
je viens de modifier le lien dur


^G Aide       ^O Écrire     ^W Chercher   ^K Couper
^X Quitter    ^R Lire fich. ^\ Remplacer  ^U Coller

Après avoir enregistré  la modification avec CTRL+O ENTRE et quitter nano CTRL+X, voyons maintenant le contenu de Fichier.txt.

loulou@server:~/fichiers$ cat Fichier.txt 
je mets du contenu dans mon fichier
j'apporte une modification dans mon fichier
je viens de modifier le lien dur

Lorsque nous avons modifié le lien dur, le fichier d’origine a été également modifié automatiquement. N’est-ce-pas intéressant ça ? 🙂

Supprimons maintenant le fichier d’origine et constatons le comportement du lien dur

loulou@server:~/fichiers$ rm Fichier.txt 
loulou@server:~/fichiers$ ls
lienDur
loulou@server:~/fichiers$ cat lienDur 
je mets du contenu dans mon fichier
j'apporte une modification dans mon fichier
je viens de modifier le lien dur

Et bien lorsqu’on supprime le fichier d’origine, le lien dur fonctionne toujours, il est vraiment dur ce fichier. Il résiste 😉

Travaillons maintenant avec le lien symbolique. Nous allons créer un autre fichier nommé Fichier.txt puisque qu’il a été supprimé dans les commandes précédentes.

loulou@server:~/fichiers$ nano Fichier.txt
 GNU nano 2.5.3     Fichier : Fichier.txt                 

 j'ajoute du contenu dans le fichier Fichier.txt


^G Aide       ^O Écrire     ^W Chercher   ^K Couper
^X Quitter    ^R Lire fich. ^\ Remplacer  ^U Coller
loulou@server:~/fichiers$ ls
Fichier.txt  lienDur

N’oubliez pas d’enregistrer avant de quitter. Créons maintenant un lien symbolique de Fichier.txt

loulou@server:~/fichiers$ ln -s Fichier.txt lienSymb
loulou@server:~/fichiers$ ls
Fichier.txt  lienDur  lienSymb
loulou@server:~/fichiers$ cat lienSymb 
 j'ajoute du contenu dans le fichier Fichier.txt

Le lien symbolique lienSymb de Fichier.txt est bien créé. Il a le même contenu que le fichier d’origine.

Comment se comportera ce lien symbolique si nous modifions le fichier d’origine ?  Et comment se comportera le fichier d’origine si nous apportons une modification au lien symbolique ? Commençons à modifier le fichier d’origine.

loulou@server:~/fichiers$ nano Fichier.txt 
GNU nano 2.5.3     Fichier : Fichier.txt        Modifié  

 j'ajoute du contenu dans le fichier Fichier.txt
 je modifie le fichier Fichier.txt


^G Aide       ^O Écrire     ^W Chercher   ^K Couper
^X Quitter    ^R Lire fich. ^\ Remplacer  ^U Coller
loulou@server:~/fichiers$ cat lienSymb 
 j'ajoute du contenu dans le fichier Fichier.txt
 je modifie le fichier Fichier.txt

Lorsque nous modifions le Fichier d’origine, le lien symbolique est également modifié.

Modifions maintenant le lien symbolique.

loulou@server:~/fichiers$ nano lienSymb 
 GNU nano 2.5.3      Fichier : lienSymb                   

 j'ajoute du contenu dans le fichier Fichier.txt
 je modifie le fichier Fichier.txt
 je mofifie le lien symbolique


^G Aide       ^O Écrire     ^W Chercher   ^K Couper
^X Quitter    ^R Lire fich. ^\ Remplacer  ^U Coller
loulou@server:~/fichiers$ cat Fichier.txt 
 j'ajoute du contenu dans le fichier Fichier.txt
 je modifie le fichier Fichier.txt
 je mofifie le lien symbolique

Lorsqu’on modifie le lien symbolique, le fichier d’origine est modifié automatiquement.

Supprimons maintenant le fichier d’origine et constatons le comportement du lien symbolique.

loulou@server:~/fichiers$ rm Fichier.txt 
loulou@server:~/fichiers$ ls
lienDur  lienSymb 
loulou@server:~/fichiers$ cat lienSymb 
cat: lienSymb: Aucun fichier ou dossier de ce type
loulou@imhotep:~/fichiers$ 

Lorsqu’on supprime le fichier d’origine, le lien symbolique ne fonctionne plus. En fait il pointe vers un fichier (Fichier.txt) qui n’existe plus car, nous l’avons supprimé.

J’espère que vous avez bien compris la différence entre les liens durs et les liens symboliques.

Vous pouvez reprendre le TP du lien symbolique en travaillant avec des dossiers. Créez un dossier dossier, créez lui un lien symbolique lienSymbDossier. Ensuite, apportez des modifications  à lienSymbDossier en copiant, créant,  ou supprimant des fichiers ou des dossier en son sein. Enfin, observez le contenu du dossier dossier à chaque modification.

 

Vous pouvez aussi supprimer le dossier dossier et essayez d’accéder au dossier lien lienSymbDossier.

Avant de terminer ce tutoriel, faisons un petit TP avec les commandes ls -i , ls -l , readlink, et readlink -f.

Pour ce nouveau TP, supprimons d’abord le contenu de notre dossier de travail fichiers et créons un nouveau fichier Fichier.txt.

loulou@server:~/fichiers$ rm lienDur lienSymb 
loulou@server:~/fichiers$ nano Fichier.txt
  GNU nano 2.5.3     Fichier : Fichier.txt                 

Encore un autre fichier Fichier.txt

^G Aide       ^O Écrire     ^W Chercher   ^K Couper
^X Quitter    ^R Lire fich. ^\ Remplacer  ^U Coller

Créons maintenant un lien dur lienDur et un lien symbolique lienSymb de notre fichier Fichier.txt.

loulou@server:~/fichiers$ ls
Fichier.txt
loulou@server:~/fichiers$ ln Fichier.txt lienDur
loulou@server:~/fichiers$ ls
Fichier.txt  lienDur
loulou@server:~/fichiers$ ln -s Fichier.txt lienSymb
loulou@server:~/fichiers$ ls
Fichier.txt  lienDur  lienSymb

La commande ls -i permet de lister le contenu d’un dossier avec les inode de chaque élément contenu dans le dossier. Voyons l’inode de chacun de nos fichiers.

loulou@server:~/fichiers$ ls -i
17437380 Fichier.txt  17437380 lienDur  17437378 lienSymb

Voyez-vous le résultat ? Le fichier d’origine et le lien dur on le même inode. Ils sont le même fichier sur le disque dur. Le lien symbolique et le fichier d’origine sont deux fichiers différents. Ils n’ont pas le même inode. Le fichier lien lienSymb permet juste d’indiquer le chemin d’accès au fichier original. 😛 Regardez encore l’image de présentation des liens durs et symboliques.

LiensLinux

Que nous dit la commande ls -l ?

loulou@server:~/fichiers$ ls -l
total 8
-rw-rw-r-- 2 loulou loulou 36 mars   7 15:13 Fichier.txt
-rw-rw-r-- 2 loulou loulou 36 mars   7 15:13 lienDur
lrwxrwxrwx 1 loulou loulou 11 mars   7 15:15 lienSymb -> Fichier.txt

Bon, ici nous avons encore des informations intéressantes. Le résultat nous dit que Fichier.txt est un fichier ordinaire (le tiret en début de ligne nous le dit), lienDur est un fichier ordinaire. Mais c’est quand même bizarre ça ! N’était-ce pas un lien Dur ? >:-(  A vous de me dire pourquoi ? }-).

La dernière ligne nous informe que lienSymb est un lien (la ligne commence par l) et que ce lien pointe vers le fichier Fichier.txt (lienSymb->Fichier.txt).

Et la commande readlink que nous dit elle ?

loulou@server:~/fichiers$ readlink lienSymb 
Fichier.txt

Elle nous dit que lienSymb pointe sur Fichier.txt. Trop cool !!!

Pour utiliser readlink avec l’option -f créons une chaîne de liens symboliques.

loulou@server:~/fichiers$ ln -s lienSymb lienSymb1
loulou@server:~/fichiers$ ln -s lienSymb1 lienSymb2
loulou@server:~/fichiers$ ln -s lienSymb2 lienSymb3
loulou@server:~/fichiers$ ls
Fichier.txt  lienSymb   lienSymb2
lienDur      lienSymb1  lienSymb3

Faisons readlink -f sur nos liens.

loulou@server:~/fichiers$ readlink -f lienSymb
/home/loulou/fichiers/Fichier.txt
loulou@server:~/fichiers$ readlink -f lienSymb1
/home/loulou/fichiers/Fichier.txt
loulou@server:~/fichiers$ readlink -f lienSymb2
/home/loulou/fichiers/Fichier.txt
loulou@server:~/fichiers$ readlink -f lienSymb3
/home/loulou/fichiers/Fichier.txt

Ils renvoient tous vers le fichier Fichier.txt et nous avons le chemin absolu du fichier vers lequel chaque lien pointe.

Faisons un dernier ls -l avant de terminer ce TP.

loulou@server:~/fichiers$ ls -l
total 8
-rw-rw-r-- 2 loulou loulou 36 mars   7 15:13 Fichier.txt
-rw-rw-r-- 2 loulou loulou 36 mars   7 15:13 lienDur
lrwxrwxrwx 1 loulou loulou 11 mars   7 15:15 lienSymb -> Fichier.txt
lrwxrwxrwx 1 loulou loulou  8 mars   7 15:42 lienSymb1 -> lienSymb
lrwxrwxrwx 1 loulou loulou  9 mars   7 15:42 lienSymb2 -> lienSymb1
lrwxrwxrwx 1 loulou loulou  9 mars   7 15:42 lienSymb3 -> lienSymb2

Intéressons nous aux liens symboliques. lienSymb3 pointe vers lienSymb2; lienSymb2 à son tour pointe vers lienSymb1; lienSymb1 pointe à son tour vers lienSymb et lienSymb pointe vers Fichier.txt. Voici un enchaînement de plusieurs liens qui renvoient tous vers le même fichier.

J’espère que ce tutoriel vous a aidés à comprendre les liens sur Linux . A très bientôt :->

Tags: , , , ,




2 Commentaires de Linux, les liens durs et les liens symboliques

  1. pebeux a écrit:

    Salut Loulou

Laisser un commentaire

Vers le haut ↑