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 ?
Réponses
Trop de publicités?- Allez dans le répertoire dans lequel vous voulez que le lien réside.
- 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.
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.
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.
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
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