103 votes

Comment créer un lien symbolique relatif sous Linux ?

J'ai besoin d'un lien symbolique qui résout relatif dans le répertoire dans lequel il est placé. Quelle commande est utilisée pour créer une telle chose ?

116voto

David Stockton Points 1336
  1. Allez dans le répertoire dans lequel vous voulez que le lien réside.
  2. Exécutez la commande ln -s ../some/other/file linkname

Le chemin que vous fournissez est stocké avec le fichier. Lorsque vous accédez au fichier, le chemin stocké est recherché et développé par rapport au fichier. Il ne sait pas dans quel répertoire vous vous trouviez lorsque vous avez créé le lien.

52voto

Bluewind Points 601

Les versions récentes de GNU coreutils' ln (>= 8.16) supportent l'option --relative (ou -r ), ce qui signifie que vous pouvez appeler ln -s avec 2 chemins absolus ou relatifs (par rapport à votre répertoire de travail) et il déterminera le chemin relatif correct qui doit être écrit dans le lien symbolique.

5voto

Inno Points 951

Ce que vous devez comprendre, c'est qu'un lien symbolique ressemble davantage à un fichier texte qu'à une entrée de répertoire contenant un fichier. Ainsi, si vous

echo ../poo >/file/name

alors c'est assez similaire à

ln -s ../poo /file/name

Le système ne se soucie pas de savoir si /file/../poo n'existe pas du tout, c'est juste un morceau de texte qui est mis dans le lien symbolique. Quand quelque chose essaie de ouvrir le lien symbolique, c'est à ce moment-là que le système essaie de le résoudre.

Si vous utilisez un Shell avec la complétion de nom de fichier, cette fonctionnalité peut embrouiller les choses en vous permettant de compléter un nom de fichier relatif à votre répertoire de travail actuel, même si vous finissez ensuite par l'utiliser comme cible d'un lien symbolique dans un tout autre répertoire.

2voto

TryHarder Points 64

Je voulais juste expliquer davantage comment créer un lien symbolique en utilisant des chemins relatifs (avec un exemple détaillé).

Comme Ignacio Vazquez-Abrams l'a mentionné dans les commentaires, vous devez spécifier l'emplacement du fichier/dossier par rapport à l'endroit où le lien symbolique sera créé, et non par rapport à votre répertoire actuel.

EXEMPLE

Vous êtes dans /usr/share/nginx/html/_src/learn Vous allez créer un lien symbolique coding en /usr/share/nginx/html

Créer un lien symbolique relatif (théorie) :

sudo ln -s /path/to/source/file-or-folder/relative/from/symlink /path/to/symlink/relative/to/current/location

Créer un lien symbolique relatif réel :

sudo ln -s ./_src/learn/coding ../../coding

Plus d'informations (même exemple)

current path:                                  /usr/share/nginx/html/_src/learn
symlink(to be) relative to current path:       ../../coding                 
symlink location (absolute):                   /usr/share/nginx/html/coding
folder/file relative to symlink location:      ./_src/learn/coding
folder/file absolute path:                     /usr/share/nginx/html/_src/learn/coding

0voto

Cody Hess Points 157

Les liens relatifs m'ont posé des problèmes sous OS X, à savoir

~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin ~/bin
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin/ ~/bin

les deux n'ont pas fonctionné (quelque chose a été créé mais ce n'était pas un répertoire). J'ai créé le lien souhaité en utilisant chemins absolus .

~/Dropbox/git/dave-bot $ ln -s ~/Dropbox/git/codyhess/bin/ ~/bin

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X