Por que não é possível listar o arquivo / diretório relativo a .. de um diretório de link simbólico (Nenhum arquivo ou diretório)?

3

Eu tenho um diretório /usr/tomcat6/logs vinculado a /var/log/tomcat6 .

Quando alterei o diretório para /usr/tomcat6/logs e tentei ls arquivos usando um caminho relativo ../conf/Catalina/localhost , ocorreu um erro Nenhum arquivo ou diretório . No entanto, cd ../conf/Catalina/localhost funciona.

Veja o seguinte:

[root@fedora ~]# ll /usr/tomcat*
lrwxrwxrwx. 1 root root 21 Jun 17 15:00 /usr/tomcat6 -> apache-tomcat-6.0.32/
lrwxrwxrwx. 1 root root 21 Jun 17 13:03 /usr/tomcat7 -> apache-tomcat-7.0.16/
[root@fedora ~]# cd /usr/tomcat6
[root@fedora tomcat6]# ll logs
lrwxrwxrwx. 1 root root 16 Jun 17 14:51 logs -> /var/log/tomcat6
[root@fedora tomcat6]# cd logs
[root@fedora logs]# cd ../conf/Catalina/localhost
[root@fedora localhost]# pwd
/usr/tomcat6/conf/Catalina/localhost
[root@fedora localhost]# cd /usr/tomcat6/logs
[root@fedora logs]# ll ../conf/Catalina/localhost
ls: cannot access ../conf/Catalina/localhost: No such file or directory

Como isso aconteceu? É um bug ou comportamento especial de link simbólico?

    
por LiuYan 刘研 20.06.2011 / 04:24

1 resposta

5

É um comportamento especial de bash ' cd builtin; o comportamento relativo do arquivo é o natural. Depois de seguir um link simbólico, você está no caminho real do alvo e as informações do caminho original são perdidas; mas se você usar bash ou zsh to cd , o shell lembrará o caminho original e o usará nos futuros comandos relativos cd . Mas não em referências relativas a nomes de arquivos, porque bash não sabe se você pretendia um nome de arquivo ou outra coisa.

Se você observar a documentação cd em bash , verá que há -L e -P opções que indicam se é necessário usar "lógico" (lembrando o caminho original) ou "físico" (usando a ideia do sistema de arquivos) caminhos.

Se você precisar ter o comportamento "lógico" em todos os momentos, será necessário usar um --bind mount (no Linux; o Solaris e outros sistemas operacionais chamam de "loopback" ou outras coisas) em vez de um link simbólico.

    
por 20.06.2011 / 04:32