web-dev-qa-db-fra.com

Comment créer un lien symbolique relatif sous Linux?

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

60
Jeremiah Rose
  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 indiquez 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.

75
Jeremiah Rose

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

25
Bluewind

Ce que vous devez comprendre, en gros, c’est qu’un lien symbolique ressemble plus à un fichier texte qu’à une entrée de répertoire qui contient un fichier. Donc si tu

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 existe, c'est juste un morceau de texte qui est placé dans le lien symbolique. Lorsque quelque chose essaie d'ouvrir le lien symbolique, le système essaie de le résoudre.

Si vous utilisez un shell avec l'achèvement du nom de fichier, cette fonctionnalité peut compliquer les choses en vous permettant de compléter un nom de fichier relatif à votre répertoire de travail actuel, même si vous finissez par l'utiliser comme cible d'un lien symbolique dans un autre répertoire.

2
tripleee

Les liens relatifs étaient difficiles pour moi sur OS X, c’est-à-dire.

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

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

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

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

Comme Ignacio Vazquez-Abrams est mentionné dans les commentaires, vous devez spécifier l'emplacement du fichier/dossier par rapport à l'emplacement 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 dans /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  
0
TryHarder