Допустим, у вас есть каталоги /dir1и /dir2/linked, где последний является символической ссылкой на первый.
Когда вы cdв linkedи pwdвы получите выход /dir2/linked. Если вы тогда cd .., вы будете надеты /dir2. Такое поведение согласуется с концепцией того, что вы были /dir2/linkedраньше. Однако, насколько я понимаю, родительский каталог ( ..) любого каталога хранится в каталоге inode (то есть: физически на диске). Очевидно, что поскольку /dir2/linkedэто действительно /dir1, родительский каталог в inode должен быть/
Чтобы еще больше усложнить дело, пока внутри /dir2/linked, выходы ls ..и cd .. ; ls .разные! Кажется, что он cdчтит символический путь, а ls"физический" путь. Как уже упоминалось в этом вопросе , есть cd -Pдля этого варианта использования, хотя.
man pwd упоминает "физические" и "логические" рабочие каталоги, но у меня все еще есть несколько вопросов на данный момент:
- Всегда ли это поведение обеспечивается
PWDпеременной среды, как упомянуто вman pwd? - Почему по умолчанию
cdиlsимеют различное поведение, если они обе команды оболочки (то есть: не программы)? - Использует ли типичная программа (не команда оболочки)
PWDвместо физического пути? Я понимаю, что это до реализации, но есть ли какое-то правило?