Comprendre les liens physiques (Hard Links) et les liens symboliques (Soft Links)

Pour les débutants

Comprendre les liens physiques (Hard Links) et les liens symboliques (Soft Links)

Sur un système d’exploitation, que ce soit Linux ou Windows, la notion de liens associée à la gestion des fichiers est une notion essentielle. Il y a deux types de liens à connaître : les liens physiques, appelés aussi Hard Links, et les liens symboliques, appelés aussi Soft Links. Quelles sont les différences entre ces deux types de lien ? C’est ce que nous allons voir dans cet article.

D’une façon générale, sur une machine, les liens permettent d’organiser l’arborescence des fichiers de manière logique et d’optimiser l’espace disque. Il existe deux types de liens bien distincts : les liens physiques (hard links) et les liens symboliques (soft links ou symlinks). Bien qu’ils puissent sembler similaires au premier abord, leur fonctionnement interne est vraiment différent. Je dirais même qu’une mauvaise compréhension de ces mécanismes pourrait entraîner des pertes de données accidentelles sur une machine Windows ou Linux.

Comprendre le concept d’Inode

Avant de manipuler les liens, vous devez comprendre ce qu’est un inode (index node). C’est une notion technique importante pour plusieurs systèmes de fichiers sur les systèmes d’exploitation Unix, comme les distributions Linux (avec ext4, par exemple) et macOS.

Imaginez un inode comme la carte d’identité d’un fichier. À son niveau, le système d’exploitation ne s’intéresse pas réellement au nom du fichier : cette information est surtout utile pour l’humain (elle agit comme une étiquette), alors que l’OS regarde le numéro d’inode.

Cet inode contient toutes les métadonnées du fichier, notamment celles-ci :

  • Les permissions (lecture, écriture, exécution).
  • Le propriétaire et le groupe.
  • La taille du fichier.
  • L’emplacement des blocs de données sur le disque dur.
  • Les dates de modification et d’accès.
  • Le nombre de liens.

Comme nous le verrons par la suite, le type de liens a un impact sur la gestion de l’inode associé à un fichier.

Les liens physiques (Hard Links)

Commençons par une précision importante pour éviter toute confusion : un lien physique n’est pas une copie d’un fichier, ni même un raccourci. Il faut plutôt voir le lien physique comme un nom supplémentaire associé à un inode existant.

Prenons un exemple. Vous créez sur votre machine le fichier . Le système d’exploitation crée alors un inode et associe le nom à cet inode. Par la suite, si vous créez un lien physique nommé vers ce fichier, que va-t-il se passer ? Et, bien, vous créez simplement une seconde entrée dans un répertoire qui pointe vers le même inode.

Donc, concrètement, pour le système : et sont indifférenciables, car ils partagent les mêmes caractéristiques. Autrement dit, ils ont le même poids, les mêmes permissions et partagent le même contenu physique sur le disque. C’est un peu comme deux portes pour rentrer dans la même pièce.

Si vous supprimez le fichier , le fichier reste valide, car il faut supprimer toutes les références pour supprimer les données (c’est une différence avec le mécanisme de liens symboliques). Sachez qu’il est impossible de créer un lien physique vers un répertoire ou entre deux partitions/disques différents. Les liens physiques sont donc réservés aux fichiers.

Certains outils de sauvegarde ou de copie de fichiers ont cette capacité à gérer les liens physiques, afin de garder plusieurs “copies” d’un fichier, à plusieurs endroits différents (plusieurs sauvegardes), sans consommer d’espace disque supplémentaire tant que le fichier n’est pas modifié.

Les liens symboliques (Soft Links)

Le lien symbolique est ce qui se rapproche le plus du raccourci que vous connaissez sous Windows. Contrairement au lien physique, le lien symbolique est un fichier à part entière (comprenez : il a son propre inode) qui contient un chemin pointant vers le fichier cible. Autrement dit, le lien symbolique est un redirecteur vers un fichier, qui agit comme un panneau précisant : “Le fichier que vous cherchez se trouve là-bas“.

Vous créez sur votre machine le fichier . Le système d’exploitation crée alors un inode et associe le nom à cet inode. Par la suite, si vous créez un lien symbolique nommé vers ce fichier, que va-t-il se passer ? Le système crée un nouveau fichier (avec son propre inode) qui pointe vers le fichier : si vous ouvrez le lien symbolique, vous ouvrez en réalité le fichier d’origine.

Puisque le lien et la cible ont des numéros d’inode distincts, ils ont aussi des propriétés distinctes, à commencer par des permissions qui ne sont pas les mêmes. De par sa nature, le lien symbolique est de très petite taille : il contient un chemin vers un fichier cible, ce qui représente peu de données.

Le lien symbolique est plus flexible que le lien physique, notamment parce qu’il peut pointer vers un répertoire et même être sur plusieurs systèmes de fichiers. Par exemple : on peut lier un fichier d’un disque dur externe vers son dossier personnel. Une autre différence concerne le mécanisme de suppression : si vous supprimez le fichier cible, alors le lien symbolique est cassé. Il pointe vers une adresse qui n’existe plus.

Sous Linux, les liens symboliques sont très utilisés pour lier des fichiers de configuration ou gérer les versions de logiciels. Par exemple, le serveur web Apache2 utilise un mécanisme de liens symboliques pour activer les sites virtuels (VirtualHost) sans dupliquer le fichier de configuration (entre les répertoires et ).

Comparatif : lien physique vs lien symbolique

Maintenant que nous avons étudié ces deux notions, voici un tableau récapitulatif pour résumer les différences techniques.

Caractéristique Lien physique (Hard Link) Lien symbolique (Soft Link)
Numéro d’Inode Identique au fichier source Différent du fichier source
Comportement si la source est supprimée Le contenu reste accessible Le lien est cassé (inutilisable)
Lien vers un répertoire Non pris en charge Possible et courant
Lien entre partitions Non pris en charge Possible
Performance Très rapide (accès direct) Légèrement plus lent (résolution du chemin)

Manipuler les liens physiques et symboliques sous Linux

Pour mettre en pratique ces deux notions, je vous propose de prendre une machine Linux et de jouer avec le Terminal. Ce sera l’occasion d’illustrer ces concepts par la pratique.

Commençons par créer un fichier texte contenant quelques données.


Vérifions les informations du fichier, notamment son numéro d’inode, avec l’option de la commande .


Ici, nous pouvons constater le numéro d’inode suivant : .

Création d’un lien physique (Hard Link)

La commande pour créer des liens est , qu’ils soient physiques ou symboliques. Par défaut, sans option, elle crée un lien physique.


Exécutez de nouveau la commande et regardez le résultat :


Nous pouvons constater que :

  • Les deux fichiers ont le même inode ().
  • Le chiffre dans la colonne après les permissions indique qu’il y a maintenant deux liens physiques pointant vers ces données. La précédente valeur était .

Si nous modifions , le fichier d’origine, à savoir sera instantanément modifié puisqu’il s’agit des mêmes données sur le disque.

Voici un résumé des opérations :

Création d’un lien symbolique (Soft Link)

Pour créer un lien symbolique, on utilise l’option (soft/symbolic) de la commande . Nous allons créer un lien symbolique vers le fichier :


Analysons le résultat :


Des différences notables sont observables en comparaison de notre précédent test :

  • Le lien symbolique, matérialisé par le fichier a un inode différent ().
  • La première lettre des permissions est , ce qui est une caractéristique des symlinks.
  • La flèche indique la cible du lien, elle agit donc comme un redirecteur.

Le test de la suppression

Maintenant, il est intéressant d’effectuer quelques tests de suppression. Nous allons directement supprimer le fichier d’origine :


Désormais, essayons de lire le contenu de nos deux liens.

Lecture du lien physique :


Le lien physique fonctionne toujours parfaitement. L’inode existe toujours car le compteur de références est passé de 2 à 1, mais n’est pas à 0. Les données sont toujours accessibles.

Lecture du lien symbolique :


Le lien symbolique est cassé ! Il pointe vers un nom de fichier qui n’existe plus. Si vous faites un , ce lien apparaîtra généralement en rouge.

Manipuler les liens physiques et symboliques sous Windows

La notion de jonction sur Windows

Sur Windows, il existe un troisième type de liens en plus des liens physiques et symboliques : les jonctions ou junction en anglais. L’exemple historique, qui nous ramène à l’époque de Windows XP, est le dossier suivant : . Par défaut, sur Windows 11, il existe une jonction entre le répertoire et .

Pour le voir de vos propres yeux, il faut utiliser l’invite de commande (car l’explorateur de fichiers le cache par défaut), avec l’option pour afficher les fichiers cachés et système. Tapez ceci dans votre terminal (utilisez bien l’Invite de commande) à la racine de :


Vous obtiendrez un résultat ressemblant à ceci, où la mention est bien visible et le chemin cible aussi, entre crochets .

Si vous accédez à ce dossier en ligne de commande, vous constaterez que cela fonctionne. Néanmoins, sans le savoir, vous vous retrouvez en réalité dans . Pourtant, si vous tentez d’accéder à ce dossier depuis l’explorateur de fichiers, une erreur s’affiche : ce dossier semble invisible ou verrouillé.

C’est parce que n’est pas un vrai dossier, mais un lien, ou plutôt, une Jonction, pointant vers . Cela a été créé pour des raisons de compatibilité avec certaines applications (j’ai presque envie de dire les vieilles applis), pour rediriger les requêtes d’accès vers le nouvel emplacement.

Ce n’est pas la seule jonction créée par défaut sur Windows. Vous devez retenir qu’une jonction s’applique uniquement entre deux dossiers de l’espace de stockage local, et que cela ne fonctionne pas avec un chemin réseau.

Créer des liens sous Windows avec mklink

Même si Windows utilise souvent des Jonctions () pour ces dossiers système (elles existaient avant les liens symboliques modernes), les liens symboliques () existent aussi et peuvent être créés avec la commande . D’une manière générale, sur Windows, tous les types de liens peuvent être créés via cette commande.

Voici comment créer les différents liens avec la commande mklink : tout se joue sur le paramètre utilisé !

  • Créer un lien physique

  • Créer un lien symbolique (fichier)

  • Créer un lien symbolique (dossier)

  • Créer une jonction (dossier)

Si nous listons le contenu du répertoire en ligne de commande, nous pouvons voir les différents types de liens :

Conclusion

La maîtrise des liens physiques et symboliques est nécessaire, que votre machine soit sous Linux, Windows ou encore macOS. Que ce soit pour comprendre le fonctionnement du système d’exploitation ou créer vos propres liens, c’est judicieux de connaître les commandes et .

FAQ – Liens physiques et symboliques

Peut-on créer un lien physique vers un répertoire ?

Non, le système interdit généralement la création de liens physiques vers des répertoires. Que ce soit sous Linux ou Windows, ce n’est pas possible.

Comment retrouver tous les liens physiques pointant vers un même fichier ?

Vous pouvez utiliser la commande ou rechercher par inode avec . La liste de tous les liens physiques correspondants est retournée par ces deux commandes.

Si je modifie les permissions d’un lien symbolique, cela affecte-t-il le fichier source ?

Non, et en réalité, on ne change pas les permissions du lien symbolique lui-même (qui sont souvent 777 par défaut). C’est l’accès au fichier cible qui détermine les droits réels. Sous Linux, les permissions d’un lien symbolique sont : .

Si je change les permissions d’un lien physique, cela change-t-il celles de la source ?

Oui, absolument. Comme ils partagent le même inode, ils partagent les mêmes métadonnées. Changer les droits sur l’un change les droits sur l’autre immédiatement. Méfiance, donc !

Est-ce que supprimer un lien physique supprime le fichier original ?

Non, tant qu’il reste au moins un lien physique vers l’inode, le fichier existe. Le fichier (et donc les données) est “supprimé” du disque uniquement lorsque le dernier lien physique est effacé.

Comment savoir si un fichier a d’autres liens physiques ?

Utilisez la commande. La deuxième colonne (juste après la liste des permissions) indique le nombre de liens physiques. Si ce chiffre est supérieur à 1, le fichier a d’autres liens physiques.

Sous Linux, comment supprimer un lien symbolique ?

Simplement avec la commande . Cela supprime le lien (le pointeur) sans toucher au fichier source original. La commande peut aussi être utilisée, et elle aura le même impact.

SOURCE