Seu shell rastreia os links simbólicos que o levaram ao seu diretório de trabalho atual. cd é um shell integrado e help cd states (exemplo de bash ):
Options:
-Lforce symbolic links to be followed: resolve symbolic links in DIR after processing instances of..-Puse the physical directory structure without following symbolic links: resolve symbolic links in DIR before processing instances of..
[…]
The default is to follow symbolic links, as if-Lwere specified.
Você pode tentar cd -P .. e ver a diferença. Outro exemplo é pwd -L e pwd -P (enquanto pwd também é um shell embutido).
Observe que o comportamento padrão pode ser alterado por set -P e set +P . Veja help set para mais detalhes.
Por outro lado, ls é um executável separado que não se beneficia dessa capacidade de rastreamento do seu shell. No entanto, você pode seguir links simbólicos com este truque:
(cd -L .. && ls -l)
Basicamente, usamos cd para alterar o diretório de trabalho atual em relação aos links simbólicos (e usei explicitamente a opção -L padrão para isso) e invoco ls -l . O operador && significa que ls será executado somente se cd for bem-sucedido. Parênteses () fazem com que tudo o que está dentro seja executado em uma subcamada. Este é o truque: o comando cd afeta apenas este subshell e no seu shell principal nada muda, não há necessidade de cd voltar.