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?
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?
Réponses:
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.
ln -s ../some/other/file /some/dir/linkname
ln -s ./file linkname
car il .
fait référence au répertoire actuel.
ln -s somedir/original-dir link-name
ne marche pas. Il crée un répertoire avec le nom link-name
qui contient un lien non valide. La commande qui fonctionne estln -sr somedir/original-dir link-name
Les versions récentes de ln (> = 8.16) de GNU coreutils prennent en charge 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 sur le lien symbolique.
-r
option est utile lorsque vous effectuez une compilation croisée et que vous avez besoin de chemins absolus sur l'hôte de construction, mais relatifs sur la cible.
ln -r -s targetfile myalias
peut vous aider à résoudre le problème
Ce que vous devez comprendre, 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 s'il /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.
<
changer la façon dont la mémoire allouée du système. Bien sûr, il n'y a pas de fichier nommé <
dans ce répertoire, il s'agit simplement d'un moyen peu coûteux de créer un très petit fichier qui présente des propriétés intéressantes par rapport à un fichier texte standard sur cette plate-forme particulière.
Les liens relatifs étaient difficiles pour moi sous 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
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 de création du lien symbolique 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 actuel:
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