Lien symbolique cassé juste après la création

j'ai téléchargé le paquetage du navigateur linux Tor, qui est un dossier autonome. J'ai fait un lien symbolique vers le exécuter le script:

$ ln -s torbrowser/start-tor-browser ~/bin/torbrowser

cependant, le lien a été rompu lors de la création. J'ai tout exécuter cette commande, rien d'autre, et il a été brisé. Je n'ai ls et a 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 fait un nouveau script bash et un lien symbolique pour le tester, et j'ai aucun de ces problèmes. Je ne sais pas pourquoi ça n'arrive qu'avec start-tor-browser. Il a des permissions normales et est juste un script de bash normal (même selon la commande file).

...des idées?

25
demandé sur joshlf 2013-07-19 06:10:09
la source

2 ответов

Il est important de savoir que

ln -s SOURCE TARGET

créer un lien symbolique appelé TARGET qui est symboliquement lié au chaîneSOURCE. Si SOURCE est un chemin relatif (c'est-à-dire qu'il ne commence pas par /), il est interprété relativement au répertoire TARGET. Si c'est un chemin absolu, alors c'est un chemin absolu. Si c'est une chaîne qui ne peut pas être un chemin, ou inclut un chemin ou un fichier non-existant, ou n'est pas une chaîne de chemin valide, Non question. ln -s ne vérifie pas que la SOURCE existe ou est même un chemin valide. Vous pourriez 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, en gros:

  1. créer une entrée de répertoire à l'intérieur de votre bin sous-répertoire avec nom torbrowser.
  2. faire de cette nouvelle entrée de répertoire un lien symbolique (lien symbolique) vers le chemin (relatif)torbrowser/start-tor-browser

La nouvelle lien symbolique est d'une circulaire. ~/bin/torbrowser lié ~/bin/torbrowser/start-tor-browser, ce qui signifie que vous devez suivre le lien afin de résoudre le lien symbolique. Si vous essayez de l'utiliser, vous allez voir:

$ 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 est de 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, mais je peux aussi déplacer le dossier entier ailleurs, sans la rupture de ce lien:

$ mv apps /usr/local/apps

mais d'autres fois -- comme dans votre exemple, je pense -- vous avez besoin de faire un lien symbolique vers un chemin absolu.

en ce qui concerne les permissions, les liens symboliques ont toujours des permissions lrwxrwxrwx parce que les autorisations utilisées par les opérations de fichiers sont les autorisations sur le fichier réel. (Vous pouvez penser que cela signifie que n'importe qui peut suivre le lien symbolique, mais ce n'est pas tout à fait vrai: ils auraient aussi besoin de permissions de lecture pour n'importe quel répertoire qu'ils doivent suivre. Plus précisément, quiconque peut voir le lien symbolique peut voir le nom qu'il désigne, même s'il n'a pas accès au fichier portant ce nom.

44
répondu rici 2015-06-28 07:33:03
la source

le dessus de l'utilisation de la donnée pour ln:

ln-s SOURCE TARGET

est correct, mais à confusion lorsqu'il est question à la page de manuel:

ln [OPTION]... [- T] LINK_NAME cible (1ère forme)

en tant que "CIBLE" a un sens différent

0
répondu alinux 2015-01-06 11:30:15
la source

Autres questions sur