Когда я перехожу по символической ссылке, почему pwd показывает символическую ссылку вместо реального пути?


19

Я создал программную ссылку ( ln -s 1 2) на каталог, который находится внутри testкаталога, открыл программную ссылку ( cd 2) и отобразил текущий путь, используя pwd. Отображаемый путь был ~/test/2и нет ~/test/1.

В ОС, такой как Windows, все по-другому, ярлык приводит нас к реальному каталогу. Я немного запутался, как эта мягкая ссылка работает в Linux. Разве это не ярлык, как в Windows? Почему нет пути ~/test/1?

 $ mkdir test
 $ cd test
 $ mkdir 1
 $ ln -s 1 2
 $ cd 2
 $ pwd
 /home/dazz/test/2

2
Спасибо за удаление скриншота. В следующий раз, пожалуйста, отредактируйте свой вопрос вместо удаления и повторного размещения. Удаление слишком большого количества ваших собственных вопросов может запретить вам задавать вопросы. Этот запрет является автоматическим, поэтому мы ничего не сможем с этим поделать. В любом случае вам не нужно перепостить, так как редактирование наталкивает на вопрос .
Тердон

Почему ты спрашиваешь дважды? askubuntu.com/q/610133/367165
АВ

АБ же форум?
DScript

Ответы:


18

Это особенность оболочки, которая помнит, как вы попали туда, где вы находитесь.
Если вы realpathустановили, вы можете сделать:

$ realpath 
/home/dazz/test/1

И не хватает этого, если у вас есть Python:

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

или читайте ссылку (из coreutils):

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

или /bin/pwd(не встроенная оболочка pwd):

$ /bin/pwd
/home/dazz/test/1

ls -l /proc/$$/cwdиспользует /procинтерфейс файловой системы ядра .
Брюс Эдигер

8
Также обратите внимание, pwd -Pчтобы напечатать физический, а не логический путь к текущему каталогу.
Godlygeek

8

Контраст pwdа /bin/pwd.

pwd, которая является встроенной командой во многих оболочках, говорит вам, где ваша оболочка думает, что вы находитесь (и, следовательно, обрабатывает символические ссылки как «мягкие ссылки», как если бы они были настоящими каталогами.

/bin/pwdэто внешняя программа, которая сообщает вам, где вы на самом деле, при необходимости обходя дерево файловой системы /. Он не учитывает символические ссылки, потому что они не существуют при прохождении вверх через..


6

Другие ответы касались /bin/pwdоболочки builtin pwd.

Если вы хотите следовать символическим ссылкам в упомянутом вами стиле Windows, используйте cd -P: это изменит переменную PWD соответственно.

Если вы хотите использовать -Pпо умолчанию, вы можете добавить эту строку в ваш .bashrcили .zshrc:

set -P

Другие оболочки могут отличаться.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.