Lorsque je passe par un lien symbolique, pourquoi pwd affiche-t-il le lien symbolique au lieu du chemin réel?

19

J'ai créé un lien logiciel ( ln -s 1 2) vers un répertoire qui se trouve dans le testrépertoire et j'ai ouvert le lien cd 2logiciel ( ) et affiché le chemin actuel à l'aide de pwd. Le chemin affiché était ~/test/2et non ~/test/1.

C'est différent dans un OS comme Windows, le raccourci nous amène au vrai répertoire. Je suis un peu confus sur la façon dont ce lien logiciel fonctionne sous Linux. N'est-ce pas un raccourci comme dans Windows? Pourquoi le chemin n'est ~/test/1-il pas ?

 $ mkdir test
 $ cd test
 $ mkdir 1
 $ ln -s 1 2
 $ cd 2
 $ pwd
 /home/dazz/test/2
DScript
la source
2
Merci d'avoir supprimé la capture d'écran. La prochaine fois, veuillez modifier votre question au lieu de la supprimer et de la republier. La suppression d'un trop grand nombre de vos propres questions peut vous interdire de poser. Cette interdiction est automatique, nous ne pourrons donc pas faire grand-chose. Dans tous les cas, vous n'avez pas besoin de republier, car l'édition augmente la question .
terdon
Pourquoi demandez-vous deux fois? askubuntu.com/q/610133/367165
AB
AB même forum?
DScript

Réponses:

18

C'est une fonctionnalité du shell qui se souvient de la façon dont vous êtes arrivé là où vous êtes.
Si vous avez realpathinstallé, vous pouvez faire:

$ realpath 
/home/dazz/test/1

Et à défaut si vous avez python:

$ python -c "import os; print(os.path.realpath('.'))"
/home/dazz/test/1

ou readlink (de coreutils):

$ readlink -f .
/home/dazz/test/1

ou /bin/pwd(pas le shell intégré pwd):

$ /bin/pwd
/home/dazz/test/1
Anthon
la source
ls -l /proc/$$/cwdtire parti de l' /procinterface du système de fichiers du noyau .
Bruce Ediger
8
Notez également pwd -Pd'imprimer le chemin physique, au lieu de logique, vers le répertoire en cours.
godlygeek
8

Contraste pwdet /bin/pwd.

pwd, qui est une commande intégrée dans de nombreux shells, vous indique où votre shell pense que vous êtes (et traite donc les liens symboliques comme des "vrais liens").

/bin/pwd est un programme externe qui vous indique où vous êtes réellement, si nécessaire en parcourant l'arborescence du système de fichiers jusqu'à / . Il ne prend pas en compte les liens symboliques car ceux-ci n'existent pas lors de la traversée vers le haut à travers..

roaima
la source
6

D'autres réponses ont couvert /bin/pwdvs le shellbuiltin pwd .

Si vous souhaitez suivre les liens symboliques dans le style Windows que vous avez mentionné, utilisez cd -P : cela changera la variable PWD en conséquence.

Si vous souhaitez utiliser -Ppar défaut, vous pouvez ajouter cette ligne à votre .bashrcou .zshrc:

set -P

D'autres coquilles peuvent varier.

David Lord
la source