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.
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.
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 LIENaffiche le lien lui-même ;readlink LIENaffiche le texte de sa cible stockée ;stat LIENindique généralement les métadonnées du lien, tandis questat -L LIENle suit avec GNU coreutils ;find -Lsuit 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 ?
Utilisez Gérer les fichiers et répertoires sous Linux pour vous exercer avec des fichiers jetables et comparer leurs numéros d'inodes.
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 LIENpour un lien symbolique fondé sur un chemin.Résoudre les cibles relatives depuis le répertoire qui contient le lien.
Employer
ln EXISTANT LIENpour 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