Provided by: manpages-fr_3.65d1p1-1_all bug

NOM

       symlink - Fonctionnement 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  original  car  c'est  une
       référence  directe  vers  l'objet  sous-jacent pointé par le nom original. (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œud  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 le
       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.

   Propriétés, permissions, et horodatage des liens symboliques
       Le  propriétaire  et le groupe d'un lien symbolique existant peut être modifié en utilisant lchown(2). Le
       seul moment où l'appartenance d'un lien symbolique est importante est lors de sa suppression  ou  de  son
       renommage dans un répertoire dont le bit « Sticky » est positionné (consultez stat(2)).

       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 au lien symbolique 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.

   Obtient un descripteur de fichier qui fait référence à un lien symbolique.
       L'utilisation  des  attributs  O_PATH  and  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èmes  tels  que
       fstatat(2),  fchownat(2), fchmodat(2), linkat(2), et readlinkat(2), afin d'agir sur des liens symboliques
       (et non sur les fichiers vers lesquels ils pointent).

       Par défaut (c'est à dire si l'attribut AT_SYMLINK_FOLLOW n'est pas précisé), lorsque name_to_handle_at(2)
       est utilisé sur un lien symbolique, il délivre un indicateur 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'attribut  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 en 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 ne soit 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 :

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

       2. Les  liens  symboliques  indiqués  comme arguments de la ligne de commande pour les utilitaires qui ne
          parcourent pas l'arborescence des fichiers.

       3. 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).

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

       Sauf exception mentionnée ci-dessous, tous les appels système suivent les liens symboliques. Par  exemple
       s'il existe un lien slink qui pointe vers le fichier afile, l'appel système open("slink" ...) renverra un
       descripteur de fichier faisant référence à afile.

       Certains  appels système ne suivent pas les liens, 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. 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. 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é sur un
       lien symbolique, il é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
       oldpath si c'est un lien symbolique. Néanmoins, Linux ne le fait pas. (Par défaut, Solaris non plus, mais
       une  option de compilation permet d'obtenir le comportement POSIX.1-2001). La révision à venir de POSIX.1
       changera de description pour permettre les deux comportements.

   Les commandes qui ne parcourent pas les arborescences
       Ce 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é  afile,  la
       commande cat slink affichera le contenu du fichier afile.

       Notez  bien  que  cette  règle  s'applique à des commandes qui peuvent dans d'autres situations parcourir
       l'arborescence, par exemple la commande chown file suit cette règle, alors que chown -R file, 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 l'appartenance 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
       l'appartenance du fichier référencé par slink, tandis que chown -h root slink modifierait  l'appartenance
       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  si  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 où 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. Sauf mention contraire, la commande  file(1)
         ne  suit  pas  les  liens  symboliques  fournis  en  argument.  La  commande  file(1) ne suit les liens
         symboliques que si l'option -L est mentionnée.

   Les 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 directory effacera slink, ainsi que tout  lien  symbolique  rencontré  durant  le
       parcours  de directory, 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.  Sauf  mention
       contraire,  ces liens ne sont jamais suivis. On parle souvent d'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 (« half-logical »).
         Cette option permet d'avoir une représentation des noms sur les lignes de commande conforme à  l'espace
         logique des noms. (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 user slink parcourra la hiérarchie 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 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 (« logical »). Cette option permet de rendre l'espace réel des noms semblable à
         l'espace 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 user slink modifiera l'appartenance 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 des noms semblable à l'espace 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. Ceci permet de créer des alias
       sur des 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  systèmes  historiques,  la  commande  ls(1) agit quelque peu
         différemment. Si on ne précise pas d'option -F, -d ou -l, 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, et qu'ils soient fournis sur la  ligne  de  commande  ou  rencontré  en  parcourant
         l'arborescence.

VOIR AUSSI

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

COLOPHON

       Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des
       instructions    pour    signaler    des    anomalies    peuvent     être     trouvées     à     l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Alain Portal <http://manpagesfr.free.fr/> (2008).

       Veuillez  signaler  toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par
       un rapport de bogue sur le paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
       <section> <page_de_man> ».

Linux                                             6 avril 2014                                        SYMLINK(7)