J'ai créé cette structure de fichier:
test/src
test/firefox
Quand j'exécute cette commande:
ln -s test/src test/firefox
Je m'attendrais à ce qu'un lien symbolique test/firefox/src
soit créé pointant vers test/src
, cependant j'obtiens cette erreur à la place:
-bash: cd: src: Too many levels of symbolic links
- Qu'est-ce que je fais mal?
- Ne pouvez-vous pas créer un lien symbolique vers un dossier qui est stocké dans un frère de ce dossier?
- Quel est le but de cela?
linux
filesystems
ln
David Zorychta
la source
la source
ls -ld test test/*
ou la séquence exacte des commandes que vous avez exécutées pour créer ces fichiers.cd test/firefox/src
montrerait l’erreurcd: no such file or directory: test/firefox/src
, cartest/firefox/src
c’est un lien symbolique pendant. Courez-vouscd
sur un autre lien symbolique appelésrc
?ln -s
et lecd
que vous ne nous dites pas. En supposant qu'il n'y ait qu'untest
sous - répertoire dans votre répertoire actuel, uncd src
message (ou ce que vous avez exécuté) devrait générer une erreur. Avez-vous mis quelque chose danstest/firefox
?/some/path
, aln -s test/src test/firefox
créera un lien symbolique pointant de/some/path/test/firefox/src
vers/some/path/test/firefox/test/src
, pas vers/some/path/test/src
.Réponses:
En surface, ce que vous avez suggéré d'essayer fonctionne pour moi.
Exemple
Faites le lien symbolique:
L'exécuter une deuxième fois produirait généralement ceci:
Donc, vous avez probablement autre chose à faire ici. Je soupçonne que vous avez une référence circulaire où un lien pointe vers lui-même.
Vous pouvez utiliser
find
pour trouver cela un peu:la source
find -L ./ -mindepth 15
a révélé le coupableComme le souligne Dubu dans un commentaire, le problème réside dans vos chemins relatifs. J'ai eu un problème similaire en liant ma configuration nginx de
/usr/local/etc/nginx
à/etc/nginx
. Si vous créez votre lien symbolique comme ceci:Vous ferez en fait 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:
la source
cygwin
. Merci!cd
si vous souhaitez accéder au répertoire ciblé à partir du répertoire où se trouve le fichier du lien symbolique.Les liens symboliques sont relatifs au répertoire parent du lien, pas au répertoire actuel du
ln
processus.Quand tu fais:
(où
test/firefox
est un répertoire), voustest/firefox/src
créez un lien symbolique dont la cible esttest/src
.C'est
test/src
relatif autest/firefox
répertoire, donc c'est un lien symbolique vers/top/dir/test/firefox/test/src
.Si vous voulez que ce lien symbolique soit un lien vers
/top/dir/test/src
, vous devez écrire:Ou
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 cassés 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
option pour lui permettre de faire le calcul par lui-même:la source
Utilisez le chemin absolu au lieu du chemin relatif, alors cela fonctionnera.
Par exemple:
la source
La réponse est d'utiliser un chemin absolu. Mais il peut être ennuyeux de taper le chemin complet pour quelque chose qui se trouve dans le répertoire courant. Vous pouvez utiliser la substitution de commande de pwd pour éviter cela. Si votre cible est dans le répertoire actuel:
Si votre lien doit être dans le répertoire actuel:
la source