Liens symboliques
100%

Le Système de Fichiers · Leçon 12

Liens symboliques

Découvrez les différences entre liens symboliques et physiques concernant la résolution des chemins, l'identité des inodes et la portée du système de fichiers.

Une entrée de répertoire donne un nom à un inode. Un lien physique crée une autre entrée de répertoire pour le même inode, tandis qu'un lien symbolique crée un inode distinct dont le contenu est un chemin à résoudre. Cette différence détermine l'identité, la durée de vie et le comportement entre systèmes de fichiers.

Créer et examiner un lien symbolique

Créez un lien symbolique avec ln -s CIBLE NOM_DU_LIEN :

$ printf '%s\n' 'example' > myfile
$ ln -s -- myfile myfilelink
$ ls -li myfile myfilelink
151   -rw-r--r-- 1 user user 8 ... myfile
93403 lrwxrwxrwx 1 user user 6 ... myfilelink -> myfile

Le lien symbolique possède son propre inode et stocke le texte myfile. Lorsqu'un programme suit myfilelink, la résolution du chemin se poursuit vers la cible. Affichez le texte stocké sans suivre le lien avec :

$ readlink myfilelink

Quelle commande crée le lien symbolique myfilelink contenant la cible myfile ?

Cibles relatives et absolues des liens symboliques

Une cible absolue commence à /. Une cible relative est résolue par rapport au répertoire qui contient le lien symbolique, et non par rapport au répertoire actuel du shell lorsqu'une personne l'ouvre plus tard.

$ mkdir -p tree/data tree/current
$ printf '%s\n' 'value' > tree/data/item
$ ln -s ../data/item tree/current/item

Déplacer toute l'arborescence tree préserve cette relation relative. Déplacer seulement le lien ou sa cible peut la rompre. Un lien symbolique peut contenir une cible inexistante ; on dit alors qu'il est pendant ou cassé.

À partir de quel emplacement la cible relative d'un lien symbolique est-elle résolue ?

Créer un lien physique

Créez un autre nom pour un fichier ordinaire existant sans -s :

$ ln -- myfile myhardlink
$ ls -li myfile myhardlink
151 -rw-r--r-- 2 user user 8 ... myfile
151 -rw-r--r-- 2 user user 8 ... myhardlink

Les deux noms correspondent au même système de fichiers et au même numéro d'inode. Le nombre de liens passe à 2. Aucun nom n'est intrinsèquement « l'original » : modifier le contenu par l'un modifie l'objet partagé, et supprimer un nom laisse subsister l'autre.

Les liens physiques ne peuvent pas franchir les limites d'un système de fichiers, car un numéro d'inode n'a de sens qu'à l'intérieur de celui-ci. Linux interdit également aux utilisateurs ordinaires de créer des liens physiques vers des répertoires et peut restreindre les liens vers des fichiers dont ils ne sont pas propriétaires, afin d'éviter les cycles et les problèmes de sécurité.

Que partagent deux liens physiques vers un même fichier ordinaire ?

Durée de vie et suppression

Supprimer un lien symbolique retire l'objet lien, pas sa cible :

$ rm -- myfilelink

La suppression du nom d'un lien physique diminue le nombre de liens de l'inode partagé. Le système de fichiers ne peut récupérer l'objet qu'une fois ce nombre arrivé à zéro et lorsqu'aucune description de fichier ouverte ni autre référence ne le maintient en vie.

Évitez la barre oblique finale lorsque vous supprimez un lien symbolique vers un répertoire, car la résolution d'un chemin qui se termine ainsi peut suivre la sémantique des répertoires selon la commande. Examinez le lien avec ls -ld -- LIEN, puis supprimez délibérément son nom.

Que se produit-il normalement lorsque vous supprimez le lien symbolique lui-même ?

Suivre les liens en toute sécurité

Les liens symboliques peuvent rediriger un programme privilégié hors du répertoire attendu ou changer entre la validation et l'utilisation. Les programmes sûrs doivent éviter les courses de type vérifier-puis-ouvrir sur les chemins et employer les interfaces relatives à un répertoire, sans suivi ou à résolution limitée adaptées au langage et au système d'exploitation.

Pour les examens courants :

  • ls -ld LIEN affiche le lien lui-même ;
  • readlink LIEN affiche le texte de sa cible stockée ;
  • stat LIEN indique généralement les métadonnées du lien, tandis que stat -L LIEN le suit avec GNU coreutils ;
  • find -L suit les liens et peut rencontrer des cycles : ne l'employez que délibérément.

Les permissions affichées sous la forme lrwxrwxrwx ne constituent pas une autorisation générale d'accès. Celui-ci dépend de la traversée des répertoires, des règles de suivi des liens et des permissions de la cible ; le propriétaire du lien symbolique compte aussi pour certaines règles des répertoires protégés.

Qu'affiche readlink LIEN par défaut ?

Leçon terminée

Vous avez terminé Liens symboliques

Vous savez maintenant choisir et examiner le bon type de lien de système de fichiers.

  • Employer ln -s CIBLE LIEN pour un lien symbolique fondé sur un chemin.

  • Résoudre les cibles relatives depuis le répertoire qui contient le lien.

  • Employer ln EXISTANT LIEN pour créer un autre nom du même inode dans le même système de fichiers.

  • Distinguer la suppression d'un lien symbolique de celle d'un lien physique.

  • Éviter le suivi dangereux des liens dans les opérations privilégiées ou récursives.

Conservez votre progression

Créez un compte gratuit pour enregistrer cette leçon et continuer sur n'importe quel appareil.

Créer un compte gratuit
Retour à Le Système de Fichiers