web-dev-qa-db-fra.com

Symlink cassé juste après la création

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?

34
joshlf

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:

  1. créez une entrée de répertoire dans votre sous-répertoire bin avec le nom torbrowser.
  2. Faites de cette nouvelle entrée de répertoire un lien symbolique (lien symbolique) vers le chemin (relatif) 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.

57
rici

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

1
alinux

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

enter image description here

Mais quand j'ai fait ça ln -s $(pwd)/Eclipse.ini ~/Desktop/Eclipse Ça a marché!

enter image description here

1
Adil Saju