Man page - symlink(7)

Packages contains this manual

Available languages:

en fr pl ja ru

Manual

symlink

NOM
DESCRIPTION
Liens magiques
Propriétés, permissions et horodatage des liens symboliques
Obtention d’un descripteur de fichier faisant rĂ©fĂ©rence Ă  un liensymbolique.
Traitement des liens symboliques par les appels systĂšme et les commandes
Traitement des liens symboliques par les appels systĂšme
Commandes ne parcourant pas les arborescences de fichiers
Commandes parcourant une arborescence
VOIR AUSSI
TRADUCTION

NOM

symlink - Gestion des liens symboliques

DESCRIPTION

Les liens symboliques sont des fichiers qui agissent comme des pointeurs vers d’autres fichiers. Pour comprendre leur fonctionnement, vous devez d’abord comprendre comment fonctionnent les liens physiques.

Un lien physique (hard link) vers un fichier est indistinguable du fichier d’origine, car c’est une rĂ©fĂ©rence directe vers l’objet sous-jacent pointĂ© par le nom originel. (Pour ĂȘtre prĂ©cis, chaque lien physique sur un fichier fait rĂ©fĂ©rence au mĂȘme numĂ©ro d’inƓud , ce numĂ©ro Ă©tant un indice dans une table d’inƓuds qui contient des mĂ©tadonnĂ©es sur tout le contenu du systĂšme de fichiers. Consultez stat (2)). Les changements dans un fichier sont indĂ©pendants du nom utilisĂ© pour faire rĂ©fĂ©rence au fichier. Les liens physiques ne peuvent pas faire rĂ©fĂ©rence aux rĂ©pertoires (pour Ă©viter le risque de boucles dans l’arborescence du systĂšme de fichiers, ce qui planterait de nombreux programmes) et ne peuvent pas rĂ©fĂ©rencer des fichiers sur un autre systĂšme de fichiers (car les numĂ©ros d’inƓud ne sont uniques que sur un mĂȘme systĂšme de fichiers).

Un lien symbolique est un fichier d’un type spĂ©cial, dont le contenu est une chaĂźne reprĂ©sentant le chemin d’accĂšs vers un autre fichier, celui vers lequel le lien pointe. (Le contenu d’un lien symbolique peut ĂȘtre lu en utilisant readlink (2).) En d’autres termes, un lien symbolique est un pointeur vers un autre nom, pas vers le contenu sous-jacent. Pour cette raison, les liens symboliques peuvent faire rĂ©fĂ©rence aux rĂ©pertoires et peuvent franchir les frontiĂšres des systĂšmes de fichiers.

Il n’y a pas d’obligation pour que le fichier dont le nom est rĂ©fĂ©rencĂ© par un lien symbolique existe. Un lien symbolique qui fait rĂ©fĂ©rence Ă  un nom de fichier inexistant est dit dangling link (pendouillant).

Comme un lien symbolique et l’objet qu’il rĂ©fĂ©rence coexistent sur le systĂšme de fichiers, une confusion peut survenir pour distinguer le lien lui-mĂȘme et l’objet rĂ©fĂ©rencĂ©. Sur des systĂšmes historiques, les commandes et les appels systĂšme adoptaient leur propres conventions pour le suivi des liens symboliques de maniĂšre arbitraire. Des rĂšgles pour une approche plus uniforme, comme elles sont implĂ©mentĂ©es sur Linux et d’autres systĂšmes, sont prĂ©sentĂ©es ici. Il est important que les applications locales se conforment aussi Ă  ces rĂšgles pour que l’interface avec l’utilisateur soit la plus cohĂ©rente possible.

Liens magiques

Il existe une classe spĂ©ciale d’objets ressemblant aux liens symboliques connus comme « liens magiques » qui peuvent ĂȘtre trouvĂ©s dans certains pseudo-systĂšmes de fichiers tels que proc (5) (par exemple, /proc/ pid /exe et /proc/ pid /fd/ *). Au contraire des liens symboliques, les liens magiques ne sont pas rĂ©solus au travers d’une expansion de noms de chemin, mais agissent plutĂŽt comme des rĂ©fĂ©rences directes vers la propre reprĂ©sentation du noyau de la gestion de fichier. Comme tels, ces liens magiques permettent aux utilisateurs d’accĂ©der Ă  des fichiers qui ne peuvent ĂȘtre rĂ©fĂ©rencĂ©s par des chemins normaux (tels que des fichiers dĂ©liĂ©s encore rĂ©fĂ©rencĂ©s par un programme en cours d’exĂ©cution).

Parce qu’ils peuvent contourner les restrictions ordinaires basĂ©es sur mount_namespaces (7), les liens magiques ont Ă©tĂ© utilisĂ©s comme vecteur d’attaque dans divers exploits.

Propriétés, permissions et horodatage des liens symboliques

Le propriĂ©taire et le groupe d’un lien symbolique existant peuvent ĂȘtre modifiĂ©s en utilisant lchown (2). L’appartenance d’un lien symbolique est importante lors de sa suppression ou de son renommage dans un rĂ©pertoire dont le bit « Sticky » est positionnĂ© (consultez inode (7)) et quand le sysctl fs.protected_symlinks est dĂ©fini (see proc (5)).

Les horodatages du dernier accĂšs et de la derniĂšre modification d’un lien symbolique peuvent ĂȘtre modifiĂ©s en utilisant utimensat (2) ou lutimes (3).

Sur Linux, les permissions associĂ©es Ă  un lien symbolique ordinaire ne sont utilisĂ©es dans aucune opĂ©ration. Ces permissions sont toujours 0777 (lecture, Ă©criture et exĂ©cution pour toutes les catĂ©gories d’utilisateurs) et ne peuvent pas ĂȘtre modifiĂ©es.

Cependant, les liens magiques ne suivent pas cette rÚgle. Ils peuvent avoir un mode différent de 0777, bien que ce mode ne soit pas actuellement utilisé pour la vérification des permissions.

Obtention d’un descripteur de fichier faisant rĂ©fĂ©rence Ă  un liensymbolique.

L’utilisation des indicateurs O_PATH et O_NOFOLLOW en association pour un appel open (2) dĂ©livre un descripteur de fichier qui peut ĂȘtre transmis comme l’argument dirfd Ă  des appels systĂšme tels que fstatat (2), fchownat (2), fchmodat (2), linkat (2) et readlinkat (2), afin d’agir sur des liens symboliques eux-mĂȘmes (et non sur les fichiers vers lesquels ils pointent).

Par dĂ©faut (c’est-Ă -dire si l’indicateur AT_SYMLINK_FOLLOW n’est pas prĂ©cisĂ©), lorsque name_to_handle_at (2) est utilisĂ©e sur un lien symbolique, il dĂ©livre un gestionnaire pour le lien symbolique (et non pour le fichier vers lequel il pointe). On peut alors obtenir un descripteur de fichier du lien symbolique (et non du fichier vers lequel il pointe) en prĂ©cisant l’indicateur O_PATH lors d’un appel ultĂ©rieur Ă  open_by_handle_at (2). De nouveau, ce descripteur de fichier peut ĂȘtre utilisĂ© dans des appels systĂšme citĂ©s prĂ©cĂ©demment pour agir sur le lien symbolique lui-mĂȘme.

Traitement des liens symboliques par les appels systĂšme et les commandes

Les liens symboliques sont traitĂ©s en agissant soit sur le lien lui-mĂȘme, soit sur l’objet pointĂ© par le lien. Dans ce dernier cas, on dit que l’application ou l’appel systĂšme suit le lien. Les liens symboliques peuvent faire rĂ©fĂ©rence Ă  d’autres liens symboliques, auquel cas les liens sont suivis jusqu’à ce qu’un objet qui n’est pas un lien symbolique soit rencontrĂ©, qu’un lien symbolique pointant sur un fichier inexistant soit trouvĂ©, ou qu’une boucle soit dĂ©tectĂ©e (la dĂ©tection des boucles est faite en dĂ©finissant une limite maximale sur le nombre de liens qui peuvent ĂȘtre suivis, et une erreur se produit si cette limite est atteinte).

Il faut considĂ©rer trois domaines d’utilisation diffĂ©rents des liens symboliques. Ce sont :

-

Les liens symboliques fournis en argument des appels systĂšme sous forme de noms de fichiers.

-

Les liens symboliques indiquĂ©s comme arguments de la ligne de commande pour les utilitaires qui ne parcourent pas l’arborescence des fichiers.

-

Les liens symboliques rencontrĂ©s par les utilitaires qui traversent l’arborescence (soit indiquĂ©s sur la ligne de commande, soit rencontrĂ©s comme partie de la hiĂ©rarchie des fichiers).

Avant de dĂ©crire le traitement des liens symboliques par les appels systĂšme et les commandes, quelques explications technologiques sont nĂ©cessaires. Étant donnĂ© un nom de chemin de la forme a/b/c , la partie prĂ©cĂ©dant la barre oblique finale (c’est-Ă -dire a/b ) est appelĂ©e la composante dirname (nom de rĂ©pertoire) et la partie suivant la barre oblique finale (c’est-Ă -dire c ) est appelĂ©e la composante basename (nom de base).

Traitement des liens symboliques par les appels systĂšme

Le premier domaine est celui des liens symboliques utilisés en noms de fichiers comme argument pour les appels systÚme.

Le traitement des liens symboliques dans un nom de chemin passé à un appel systÚme est le suivant :

(1)

Dans la composante du nom de rĂ©pertoire d’un chemin, les liens symboliques sont toujours suivis dans presque tous les appels systĂšme (cela est aussi vrai pour les commandes). La seule exception est openat2 (2) qui fournit des indicateurs pouvant ĂȘtre utilisĂ©s pour empĂȘcher explicitement le suivi de liens symboliques dans la composante du nom de rĂ©pertoire.

(2)

Sauf exceptions mentionnĂ©es ci-dessous, tous les appels systĂšme suivent les liens symboliques dans la composante du nom de base d’un chemin. Par exemple, s’il existe un lien symbolique slink qui pointe vers un fichier appelĂ© un_fichier , l’appel systĂšme open("slink" ...) renverra un descripteur de fichier faisant rĂ©fĂ©rence Ă  un_fichier .

Certains appels systĂšme ne suivent pas les liens symboliques dans la composante du nom de base d’un chemin et agissent sur le lien symbolique lui-mĂȘme. Ce sont : lchown (2), lgetxattr (2), llistxattr (2), lremovexattr (2), lsetxattr (2), lstat (2), readlink (2), rename (2), rmdir (2) et unlink (2).

Certains autres appels systĂšme suivent Ă©ventuellement les liens symboliques dans la composante du nom de base d’un chemin. Il s’agit de : faccessat (2), fchownat (2), fstatat (2), linkat (2), name_to_handle_at (2), open (2), openat (2), open_by_handle_at (2) et utimensat (2). Reportez-vous Ă  leur pages de manuel pour plus de dĂ©tails. Comme remove (3) est un alias pour unlink (2), cette fonction de bibliothĂšque ne suit pas non plus les liens symboliques. Quand rmdir (2) est utilisĂ©e sur un lien symbolique, elle Ă©choue avec l’erreur ENOTDIR .

L’appel link (2) rĂ©clame une discussion particuliĂšre. POSIX.1-2001 prĂ©cise que link (2) doit dĂ©rĂ©fĂ©rencer ancien_chemin si c’est un lien symbolique. NĂ©anmoins, Linux ne le fait pas. (Par dĂ©faut, Solaris non plus, mais des options de compilation permettent d’obtenir le comportement POSIX.1-2001). POSIX.1-2008 a modifiĂ© la spĂ©cification pour permettre les deux comportements dans une implĂ©mentation.

Commandes ne parcourant pas les arborescences de fichiers

Le second domaine est celui des liens symboliques, indiqués en tant que noms de fichiers, comme argument pour des commandes ne traversant pas les arborescences.

Sauf exception mentionnée ci-dessous, les commandes suivent les liens symboliques fournis en argument de ligne de commande. Par exemple, si un lien symbolique slink pointe vers un fichier nommé un_fichier , la commande cat slink affichera le contenu du fichier un_fichier .

Notez bien que cette rĂšgle s’applique Ă  des commandes qui peuvent dans d’autres situations parcourir l’arborescence, par exemple la commande chown fichier suit cette rĂšgle, alors que chown -R fichier , qui descend l’arborescence, ne la suit pas. (Cette derniĂšre est traitĂ©e dans la troisiĂšme partie ci-dessous).

Si on dĂ©sire qu’une commande agisse sur le lien symbolique lui-mĂȘme plutĂŽt qu’en le suivant — par exemple si on veut que chown slink change le propriĂ©taire du fichier slink , que ce soit un lien symbolique ou non — l’option -h doit ĂȘtre utilisĂ©e. Dans cet exemple, la commande chown root slink modifierait le propriĂ©taire du fichier rĂ©fĂ©rencĂ© par slink , tandis que chown -h root slink modifierait le propriĂ©taire de slink lui-mĂȘme.

Il y a quelques exceptions à cette rÚgle :

-

Les commandes mv (1) et rm (1) ne suivent pas les liens symboliques fournis en argument, mais essayent respectivement de les renommer ou de les dĂ©truire. (Notez que lorsqu’un lien symbolique fait rĂ©fĂ©rence Ă  un fichier par un chemin relatif, il peut cesser de fonctionner si on le dĂ©place dans un autre rĂ©pertoire puisque le chemin relatif ne serait plus correct).

-

La commande ls (1) est aussi une exception Ă  cette rĂšgle. Pour assurer la compatibilitĂ© avec des systĂšmes historiques (quand ls (1) ne descend pas une arborescence — c’est-Ă -dire si l’option -R n’est pas prĂ©sente), la commande ls (1) suit les liens symboliques fournis en argument si les options -H ou -L sont indiquĂ©es ou si les options -F , -d et -l ne sont pas prĂ©sentes (la commande ls (1) est la seule dont les options -H et -L modifient le comportement mĂȘme lorsqu’elle ne fait pas un parcours d’arborescence).

-

La commande file (1) est aussi une exception Ă  cette rĂšgle. Par dĂ©faut, la commande file (1) ne suit pas les liens symboliques fournis en argument. La commande file (1) ne les suit que si l’option -L est mentionnĂ©e.

Commandes parcourant une arborescence

Les commandes suivantes parcourent, toujours ou sur option, l’arborescence des fichiers : chgrp (1), chmod (1), chown (1), cp (1), du (1), find (1), ls (1), pax (1), rm (1) et tar (1).

Il est important de remarquer que les rĂšgles ci-dessous s’appliquent tant aux liens symboliques rencontrĂ©s durant un parcours d’arborescence qu’aux liens fournis en argument de ligne de commande.

La premiĂšre rĂšgle s’applique aux liens qui rĂ©fĂ©rencent des fichiers autres que des rĂ©pertoires. Les opĂ©rations entreprises sur ces liens sont appliquĂ©es sur les liens eux-mĂȘmes, ou alors les liens sont ignorĂ©s.

La commande rm -r slink rĂ©pertoire effacera slink , ainsi que tout lien symbolique rencontrĂ© durant le parcours dans le rĂ©pertoire , car les liens symboliques peuvent ĂȘtre effacĂ©s. En aucun cas rm (1) ne touchera au fichier rĂ©fĂ©rencĂ© par slink .

La seconde rĂšgle s’applique aux liens symboliques qui pointent vers des rĂ©pertoires. Par dĂ©faut, ces liens ne sont jamais suivis. Cela est souvent appelĂ© un parcours « physique » par opposition Ă  un parcours « logique » (oĂč les liens symboliques vers des rĂ©pertoires seraient suivis).

Certaines conventions sont (ou devraient ĂȘtre) respectĂ©es autant que possible par les commandes parcourant des arborescences de fichiers :

-

Une commande peut ĂȘtre forcĂ©e Ă  suivre n’importe quel lien symbolique indiquĂ© sur la ligne de commande, quel que soit le type de fichier vers lequel il pointe, en utilisant l’option -H (pour « half-logical »). Cette option permet d’avoir un espace de noms de la ligne de commande conforme Ă  l’espace de noms logique. (Notez que pour les commandes qui ne parcourent pas toujours l’arborescence, l’option -H sera ignorĂ©e si l’option -R n’est pas Ă©galement prĂ©sente.)

Par exemple, la commande chown -HR utilisateur slink parcourra la hiĂ©rarchie de fichiers dĂ©butant par le fichier pointĂ© par slink . Remarquez que l’option -H n’est pas la mĂȘme que l’option -h traitĂ©e prĂ©cĂ©demment. L’option -H permet de suivre les liens symboliques indiquĂ©s sur la ligne de commande aussi bien pour l’action Ă  exĂ©cuter que pour le parcours de l’arborescence ; tout se passe comme si l’utilisateur avait fourni le nom du fichier rĂ©fĂ©rencĂ© par le lien symbolique.

-

Une commande peut ĂȘtre forcĂ©e Ă  suivre les liens symboliques nommĂ©s sur sa ligne de commande, ainsi que tous les liens rencontrĂ©s durant le parcours, quel que soit le type des fichiers qu’ils rĂ©fĂ©rencent, en utilisant l’option -L (pour « logical »). Cette option permet de rendre l’espace de noms en entier semblable Ă  l’espace de noms logique. Notez que les commandes qui ne font pas systĂ©matiquement de parcours d’arborescence ignoreront l’option -L si l’option -R n’est pas prĂ©sente.

Par exemple, la commande chown -LR utilisateur slink modifiera le propriĂ©taire du fichier rĂ©fĂ©rencĂ© par slink . Si slink pointe vers un rĂ©pertoire, chown (1) descendra l’arborescence Ă  partir de ce rĂ©pertoire. En outre, si des liens symboliques sont rencontrĂ©s pendant le parcours de chown (1), ils seront traitĂ©s de la mĂȘme façon que slink .

-

Une commande peut ĂȘtre forcĂ©e Ă  employer le comportement par dĂ©faut en utilisant l’option -P (pour « physique »). Cet attribut permet de rendre l’espace de noms semblable Ă  l’espace de noms physique.

Pour les commandes qui ne parcourent pas d’arborescence par dĂ©faut, les options -H , -L et -P sont ignorĂ©es si l’option -R n’est pas prĂ©sente. De plus, vous pouvez indiquer -H , -L et -P plusieurs fois ; c’est la derniĂšre option qui dĂ©terminera le comportement de la commande. Cela permet de crĂ©er des alias de commandes afin d’avoir un comportement choisi et de surcharger ce comportement en ligne de commande.

Les commandes ls (1) et rm (1) présentent des exceptions pour ces rÚgles :

-

La commande rm (1) agit toujours sur le lien symbolique et jamais sur le fichier qu’il rĂ©fĂ©rence. Ainsi le lien n’est jamais suivi. La commande rm (1) ne prend pas en charge les options -H , -L ou -P .

-

Afin d’assurer une compatibilitĂ© avec les systĂšmes historiques, la commande ls (1) agit un peu diffĂ©remment. Si une option -F , -d ou -l n’est pas prĂ©cisĂ©e, alors ls (1) suivra les liens indiquĂ©s sur la ligne de commande. Si l’option -L est mentionnĂ©e, ls (1) suivra tous les liens symboliques, quels que soient leurs types, qu’ils soient fournis sur la ligne de commande ou rencontrĂ©s en parcourant l’arborescence.

VOIR AUSSI

chgrp (1), chmod (1), find (1), ln (1), ls (1), mv (1), namei (1), rm (1), lchown (2), link (2), lstat (2), readlink (2), rename (2), symlink (2), unlink (2), utimensat (2), lutimes (3), path_resolution (7)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .