Respostas:
O pwd shell interno usa o caminho que o shell monitora quando você cd(e o armazena $PWD). Isso significa que, se você tiver um link simbólico para um caminho complexo (profundo), ele informará o que você digitou para alterar para esse diretório, em vez do caminho real. Isso é feito para fornecer o que você deseja na maioria das vezes.
/bin/pwdusa a getcwdchamada do sistema (que atualmente é uma chamada de biblioteca, lendo /proc/self/cwd) que retorna o caminho canônico para o diretório atual, sem todas as passagens do link simbólico.
Como Steven D apontou, pwdtem a -Popção de ignorar $PWD. Ele também tem a -Lopção de retornar o conteúdo de $PWD. A página de manual do pwdnão diz qual opção é usada por padrão, mas a experiência me diz que a descrição acima está correta (shell pwdvs. /bin/pwd). No entanto, você provavelmente não deve confiar nisso e apenas usá-lo pwd -P.
/bin/pwdestá o GNU pwdquando POSIXLY_CORRECT não está definido. Nos sistemas POSIX em que pwdestá /bin. /bin/pwdusará $ PWD e pode retornar caminhos com links simbólicos. O GNU pwd se comportará dessa maneira POSIX quando encontrar uma variável POSIXLY_CORRECT em seu ambiente.
man pwdno shell para descobrir opções para este comando.