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?
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.
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.
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.
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
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