O shell pwd embutido usa o caminho que o shell controla quando você cd (e armazena em $PWD ). Isso significa que, se você tiver um link simbólico para um caminho complexo (profundo), ele informará o que você digitou para alterar esse diretório em vez do caminho real. Isso é feito para dar o que você deseja na maior parte do tempo.
/bin/pwd usa a chamada de sistema getcwd (que hoje em dia é uma chamada de biblioteca, lendo /proc/self/cwd ) que retorna o caminho canônico para o diretório atual, sem todas as travessias de links simbólicos.
Como Steven D apontou, pwd tem a opção -P para ignorar $PWD . Ele também tem a opção -L para retornar o conteúdo de $PWD . A man page para pwd não diz qual opção é usada por padrão, mas a experiência me diz que a descrição acima está correta (shell pwd vs. /bin/pwd ). No entanto, você provavelmente não deve confiar nisso e usar apenas pwd -P .