Les liens physiques et symboliques avec Linux

Cet article présente les liens symboliques et physiques.

Les liens physiques (hard links) et les liens symboliques (symbolic links ou symlinks) sont deux méthodes pour faire référence à des fichiers ou des répertoires, mais ils fonctionnent différemment.

Les manipulations ont été effectués sur une machine Ubuntu 20.04 LTS

Petit rappel sur les fichiers

Un fichier correspond à une entrée dans le répertoire où il se trouve. Celui-ci contient le nom du fichier ainsi que son numéro d’inode.

Que permet le numéro d’inode ?

L’inode contient les métadonnées et des pointeurs vers les blocs de contenus. C’est notamment dans l’inode que sont stockés les permissions du fichier.

schema-lien-physique

Description

C’est une autre référence au même fichier sur le disque. Il associe un nom de fichier à l’inode (l’identifiant unique du fichier).

  • Si le fichier original est supprimé, le lien physique continue d’exister et reste fonctionnel tant qu’au moins un lien vers l’inode subsiste.

  • Les liens physiques ne fonctionnent que sur le même système de fichiers (partition).

  • Ils ne peuvent pas pointer vers des répertoires afin de notamment éviter des boucles dans le système de fichiers.

Détails

Commande :

ln /source /hard-link-name

On créée dans le répertoire une nouvelle entrée qui pointe vers le même inode que le fichier source utilisé pour crée le lien. Vous pourrez remarquer sur l’image de création ci-dessous que la commande ls va afficher la même taille de fichier

Une discussion intéressante sur le sujet : unix.stackexchange.com - why-do-hard-links-seem-to-take-the-same-space-as-the-originals

  • Pour simplifier, on ne crée pas un nouvel inode et du contenu dans le filesystem, mais plutôt un pointeur dans le répertoire où l’on se trouve

  • On aura ainsi deux entrées qui pointera vers le même inode/contenu : l’entrée dans le répertoire du fichier d’origine et la nouvelle entrée qu’on a créé avec le lien physique.
  • Le inode contient le nombre de lien qui pointe vers lui. Lorsque on exécute la commande rm pour supprimer un lien physique, il va décrémenter ce compteur. C’est uniquement quand ce compteur vaut 0 que le système de fichier va supprimer le contenu du disque.

Conséquence :

  • Quand vous modifiez le contenu depuis le lien physique (echo, nano, vim), vous modifiez en réalité le contenu de l’inode sur lequel il pointe. Si vous affichez maintenant le fichier source du lien, il affichera alors le contenu modifié.

  • Si vous supprimez le fichier source, alors cette suppression ne sera PAS reporté sur le lien physique. En réalité, vous aurez supprimé une des entrées qui pointe vers l’inode mais sans supprimer l’inode et son contenu.

  • mv unAutreFichier fichierSrc
    

    L’utilisation de la commande mv sur l’entrée du fichier source ne provoque aucune modification sur le lien physique. La raison est la suivante : mv modifie l’entrée dans le répertoire du fichier source (inode sur lequel il pointe) et non le contenu accessible depuis son inode d’origine.

schema-lien-symbolique

Description

C’est un fichier spécial qui contient un chemin vers un autre fichier ou répertoire. Il agit comme un raccourci.

  • Si le fichier cible est supprimé ou déplacé, le lien symbolique devient cassé (dangling link) et ne fonctionne plus.

  • Les liens symboliques peuvent pointer vers des fichiers ou des répertoires, et ils fonctionnent même à travers différentes partitions.
  • Ils sont plus flexibles mais aussi plus fragiles que les liens physiques.

Détails

Commande :

ln --symbolic /source /symbolic-link-name

Contrairement aux liens physiques, un lien symbolique a son propre inode et ses propres données fichiers. Dans les métadonnées, il y aura le chemin absolu ou relatif du fichier source

Conséquence

  • mv unAutreFichier fichierSrc
    

Ici, cette modification sera bien “prise en compte” par le lien symbolique. La raison est la suivante : le lien symbolique pointe vers le répertoire du fichier source. Cette commande aura modifié l’entrée (nom et inode) contenu dans le fichier source sur lequel pointe le lien symbolique.

  • mv fichierSrc unAutreFichier 
    

Dans ce cas-là, on modifie l’entrée du répertoire du fichier source, c’est-à-dire son inode et son nom. Le lien symbolique ne pourra plus retrouver le fichier source et vous aurez un “File Not Found”

Exemples

1) Affichage

Pour réaliser les exemples, on créer d’abord un

  • Un fichier source file_1
  • Un lien physique file_2 à partir de file_1
  • Un lien symbolique file_3 à partir de file_1

A l’affichage, on peut remarquer que file_3 est coloré en bleu et qu’avec la commande ls, on a une petite flèche -> sur le fichier source.

affichage-lien

2) Modification

Lorsqu’on modifie file_2(lien physique), on peut constater que cela modifie également file_1

On observe le même comportement avec file_1

Conclusion : Que ça soit avec un lien physique ou symbolique, bien que l’implémentation soit différente, le résultat pour l’utilisateur est le même.

modification

3) Utilisation de la commande mv

On crée un nouveau fichier, file4. La commande

mv file-4 file_1

va modifier l’inode de l’entrée de file_1 dans le répertoire.

  • Cette modification sera prise en compte par le lien symbolique, car celui-ci pointe sur file_1 (l’entrée).
  • Alors que le lien physique, lui il pointe toujours sur l’inode d’origine, celui auquel file_1pointait au début.

mv-lien

4) Suppression avec rm

En supprimant file_1, on supprime en réalité l’entrée dans le répertoire de file_1, cette suppression sera reportée directement sur file_3 car celui-ci pointe sur file_1.

On peut aussi constater un affichage en rouge pour file_3 indiquant que le lien est mort.

Le lien physique ne sera pas affecté car celui-ci ne pointe pas directement sur file_1 mais avait repris l’inode sur lequel pointait file_1.

rm-lien

Résumé des différences

Critères Lien physique Lien symbolique
Référence Directe vers l’inode Chemin vers le fichier cible
Survie à la suppression Oui (tant qu’un lien subsiste) Non (devient cassé)
Partitions Limité à la même partition* Traversent les partitions*
Répertoires Non autorisés Autorisés
Flexibilité Moins flexible Plus flexible

Ces deux types de liens sont utiles dans différents contextes, selon les besoins en termes de structure de fichiers, d’accès ou de robustesse.

*Référence: Ubuntu - Syntaxe des liens physiques ou symboliques

Sources

You might also enjoy