GNU/Linux >> Tutoriels Linux >  >> Linux

Trop de niveaux de liens symboliques

Comme le souligne Dubu dans un commentaire, le problème réside dans vos chemins relatifs. J'ai eu un problème similaire en liant symboliquement ma configuration nginx à partir de /usr/local/etc/nginx à /etc/nginx . Si vous créez votre lien symbolique comme ceci :

cd /usr/local/etc
ln -s nginx/ /etc/nginx

Vous allez en fait faire le lien /etc/nginx -> /etc/nginx, car le chemin source est relatif au chemin du lien. La solution est aussi simple que d'utiliser des chemins absolus :

ln -s /usr/local/etc/nginx /etc/nginx

Si vous souhaitez utiliser des chemins relatifs et qu'ils se comportent comme vous vous y attendez probablement, vous pouvez utiliser pwd pour mettre le chemin du répertoire de travail actuel, comme ceci :

cd /usr/local/etc
ln -s "$(pwd)/nginx/" /etc/nginx

Vous voudriez avoir les guillemets autour du chemin, pour vous assurer que des choses comme les espaces dans votre chemin actuel sont échappées. Notez que vous devez utiliser des guillemets doubles lorsque vous faites cela, comme $(pwd) ne sera pas remplacé si vous utilisez des guillemets simples.


En surface, ce que vous avez suggéré d'essayer fonctionne pour moi.

Exemple

$ mkdir -p test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    `-- [drwxrwxr-x]  ./test/src

Faire le lien symbolique :

$ ln -s test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    |   `-- [lrwxrwxrwx]  ./test/firefox/src -> test/src
    `-- [drwxrwxr-x]  ./test/src

L'exécuter une deuxième fois produirait généralement ceci :

$ ln -s test/src test/firefox
ln: failed to create symbolic link ‘test/firefox/src’: File exists

Donc, vous avez probablement quelque chose d'autre qui se passe ici. Je suppose que vous avez une référence circulaire où un lien pointe vers lui-même.

Vous pouvez utiliser find pour démêler un peu ça :

$ cd /suspected/directory
$ find -L ./ -mindepth 15

Les liens symboliques sont relatifs au répertoire parent du lien, pas au répertoire courant du ln processus.

Lorsque vous faites :

cd /top/dir
ln -s test/src test/firefox

(où test/firefox est un répertoire), vous faites un test/firefox/src lien symbolique dont la cible est test/src .

Ce test/src est relatif au test/firefox répertoire, donc c'est un lien symbolique vers /top/dir/test/firefox/test/src .

Si vous vouliez que ce lien symbolique soit un lien vers /top/dir/test/src , vous devez écrire :

ln -s ../src test/firefox/

Ou

ln -s /top/dir/test/src test/firefox/

bien que ce soit généralement une mauvaise idée de créer des liens symboliques vers des chemins absolus car ils sont facilement rompus lorsque les répertoires sont renommés ou que les systèmes de fichiers sont montés ailleurs.

Avec GNU ln , vous pouvez utiliser son -r possibilité de le laisser faire le calcul tout seul :

$ ln -rs test/src test/firefox/
$ ls -ld test/firefox/src
lrwxrwxrwx 1 chazelas chazelas 6 Nov 29 15:59 test/firefox/src -> ../src

Linux
  1. Trop d'erreurs de connexions dans MySQL

  2. Variables d'environnement dans les liens symboliques

  3. Comment copier des liens symboliques ?

  4. s3cmd échoue trop de fois

  5. Trop de fichiers ouverts sur Debian

Un moyen simple de lister les liens symboliques sous Linux

Comment supprimer des liens symboliques sous Linux

Comment créer des liens symboliques sous Linux

Dépannage :Trop de redirections

Comment obtenir une liste de liens symboliques sous Linux

rsync et liens symboliques