Ваша оболочка отслеживает символические ссылки, которые привели вас к вашему текущему рабочему каталогу. cd является встроенной оболочкой и help cd состояниям (пример из bash):
Опции:
-L принудительно использовать символические ссылки: разрешать символические ссылки в DIR после обработки экземпляров ..
-P использовать структуру физического каталога без следующих символических ссылок: разрешать символические ссылки в DIR перед обработкой экземпляров ..
[...]
По умолчанию следует переходить по символическим ссылкам, как если бы был указан -L .
Вы можете попробовать cd -P .. и увидеть разницу. Другой пример - pwd -L и pwd -P (в то время как pwd также является встроенной оболочкой).
Обратите внимание, что поведение по умолчанию можно изменить с помощью set -P и set +P См. help set для более подробной информации.
С другой стороны, ls - это отдельный исполняемый файл, который не использует возможности отслеживания вашей оболочки. Однако вы можете заставить его следовать символическим ссылкам с помощью этого трюка:
(cd -L .. && ls -l)
В основном мы используем cd для изменения текущего рабочего каталога относительно символьных ссылок (и я явно использовал для этого опцию -L по умолчанию), затем вызываем ls -l . Оператор && означает, что ls будет выполняться только в случае успеха cd . Скобки () заставляют все, что внутри, выполняться в подоболочке. Это команда trick: cd влияет только на эту подоболочку, и в вашей основной оболочке ничего не меняется, нет необходимости возвращать cd .