A diferença entre man
e outros comandos como ls
é que os últimos (aqueles que não se queixam de diretório inexistente) não tentam explicitamente alterar mas já fique lá. O homem também faz, mas também tenta explicitamente mudar para lá também.
Os diretórios do UNIX (como arquivos) não são excluídos imediatamente quando você chama unlink(2)
ou rmdir(2)
, mas apenas a entrada de diretório no diretório pai é removida. O diretório / arquivo permanece contanto que haja processos referenciando-os. Assim que a última referência é removida, o kernel efetivamente remove os blocos pertencentes aos arquivos / diretórios.
Por essa razão, não há erro quando você chama ls
em um diretório que não existe mais, já que seu shell ainda está lá (ele faz referência ao diretório como seu diretório atual) e ls
de lá herda essa propriedade . Mas como man
explicitamente tenta chdir(2)
lá, portanto, para um diretório entry que não existe mais, ele é liberado.