Коли я проходжу через симпосилання, чому 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
Дякуємо, що зняли скріншот. Наступного разу відредагуйте своє запитання замість видалення та повторної публікації. Якщо ви видалите занадто багато власних питань, ви можете заборонити їх задавати. Ця заборона є автоматичною, тому ми не зможемо багато зробити з цим. У будь-якому випадку, вам не потрібно робити репост, оскільки редагування стикається з питанням .
terdon

Чому ви запитуєте двічі? askubuntu.com/q/610133/367165
AB

AB ж форум?
DScript

Відповіді:


18

Це особливість оболонки, яка пам'ятає, як ти потрапив туди, де ти є.
Якщо ви realpathвстановили, ви можете зробити:

$ realpath 
/home/dazz/test/1

І цього не вистачає, якщо у вас пітон:

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

або readlink (з 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.