J'ai téléchargé le package linux Tor Browser, qui est un dossier autonome. J'ai créé un lien symbolique vers le script d'exécution:
$ ln -s torbrowser/start-tor-browser ~/bin/torbrowser
Cependant, le lien a été rompu lors de la création. Je n'ai fait qu'exécuter cette commande, rien d'autre, et elle a été brisée. J'ai fait ls et j'ai obtenu:
lrwxrwxrwx 1 synful synful 28 Jul 18 21:52 torbrowser -> torbrowser/start-tor-browser
... ce qui est bizarre car torbrowser/start-tor-browser avait 755 permissions. Aussi, j'ai couru file
:
$ file ~/bin/torbrowser
bin/torbrowser: broken symbolic link to `torbrowser/start-tor-browser'
J'ai créé un nouveau script bash et un lien symbolique pour le tester, et je n'ai eu aucun problème de ce genre. Je ne sais pas pourquoi cela se produit uniquement avec start-tor-browser. Il a les autorisations normales et n'est qu'un script bash normal (même selon la commande file).
...des idées?
Il est important de savoir que
ln -s SOURCE TARGET
créer un lien symbolique appelé TARGET qui est symboliquement lié à chaîneSOURCE
. Si SOURCE
est un chemin relatif (c'est-à-dire qu'il ne commence pas par /
), il est alors interprété par rapport au répertoire dans lequel se trouve TARGET
. S'il s'agit d'un chemin absolu, alors c'est un chemin absolu. S'il s'agit d'une chaîne qui ne peut pas être un chemin d'accès, ou qui inclut un chemin d'accès ou un fichier inexistant, ou qui n'est autrement pas une chaîne de chemin d'accès valide, peu importe. ln -s
ne vérifie pas que SOURCE existe ou est même un chemin valide. Vous pouvez stocker presque n'importe quelle chaîne courte que vous vouliez dans le dirent.
Donc, quand vous faites cela:
$ ln -s torbrowser/start-tor-browser ~/bin/torbrowser
ce que vous faites est à peu près:
bin
avec le nom torbrowser
.torbrowser/start-tor-browser
Le nouveau lien symbolique est une circulaire. ~/bin/torbrowser
est lié à ~/bin/torbrowser/start-tor-browser
, ce qui signifie que vous devez suivre le lien symbolique pour le résoudre. Si vous essayez de l'utiliser, vous verrez:
$ cat ~/bin/torbrowser
cat: /home/joshlf13/bin/torbrowser: Too many levels of symbolic links
$
Parfois - souvent, même - la possibilité de créer un lien symbolique vers un chemin relatif est extrêmement pratique. Une utilisation courante consiste à se débarrasser des numéros de version:
$ ln -s apps/my_fancy_app_v2.63.1 apps/my_fancy_app
Maintenant, non seulement je peux appeler my_fancy_app sans me souvenir de sa chaîne de version, je peux également déplacer le dossier entier ailleurs, sans casser le lien symbolique:
$ mv apps /usr/local/apps
Mais d'autres fois - comme dans votre exemple, je pense - vous devez créer un lien symbolique vers un chemin absolu.
En ce qui concerne les autorisations, les liens symboliques ont toujours des autorisations lrwxrwxrwx
car les autorisations réelles utilisées par les opérations sur les fichiers sont les autorisations sur le fichier réel. (Vous pouvez penser à cela comme signifiant que n'importe qui peut suivre le lien symbolique, mais ce n'est pas tout à fait vrai: ils auraient également besoin d'autorisations de lecture pour tout répertoire qu'ils doivent suivre. Plus précisément, toute personne qui peut voir le lien symbolique peut voir le nom qu'il pointe vers, même s'ils n'ont pas accès au fichier portant ce nom.
l'utilisation ci-dessus donnée pour ln:
LN -s CIBLE DE SOURCE
est correct, mais déroutant lorsqu'on se réfère à la page de manuel:
dans [OPTION] ... [-T] TARGET LINK_NAME (1er formulaire)
comme "CIBLE" a une signification différente
Il est important que le TARGET
que vous spécifiez dans
ln -s TARGET LINK_NAME
est le chemin complet du fichier/répertoire. J'ai eu ce problème, dans mon cas quand je cd
dans le répertoire de la cible et que
ln -s ./Eclipse.ini ~/Desktop/Eclipse1
A entraîné la rupture du lien
Mais quand j'ai fait ça ln -s $(pwd)/Eclipse.ini ~/Desktop/Eclipse
Ça a marché!