왜 심볼릭 링크 디렉터리에서 ..에 상대적인 파일/디렉터리를 나열할 수 없습니까(해당 파일이나 디렉터리가 없음)?

왜 심볼릭 링크 디렉터리에서 ..에 상대적인 파일/디렉터리를 나열할 수 없습니까(해당 파일이나 디렉터리가 없음)?

/usr/tomcat6/logs에 연결된 디렉토리가 있습니다 /var/log/tomcat6.

디렉토리를 다음으로 변경 하고 상대 경로 이름을 사용하여 파일에 액세스 /usr/tomcat6/logs하려고 하면 ,ls../conf/Catalina/localhost해당 파일이나 디렉터리가 없습니다.에러 발생됨. 그러나 cd ../conf/Catalina/localhost작동합니다.

아래를 참조하세요:

[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

어떻게 이런 일이 일어날 수 있습니까? 이것은 심볼릭 링크의 버그입니까 아니면 특별한 동작입니까?

답변1

이는 내장 함수의 특별한 bash동작 입니다 cd. 파일 관련 동작은 자연스러운 현상입니다. 심볼릭 링크를 클릭하면 대상에 대한 실제 경로를 입력하고 원래 경로 정보가 손실됩니다. 그러나 해당 경로를 사용하거나 bash이동 zsh하면 셸은 원래 경로를 기억하고 cd후속 관련 명령 cd에서 사용합니다 . 그러나 bash파일 이름 등을 원하는지 실제로 알 수 없기 때문에 상대 파일 이름 참조에는 없습니다 .

cd의 문서를 보면 "논리적"(원래 경로 기억) 또는 "물리적"(파일 시스템 아이디어 사용) 경로를 사용할지 여부를 알려주는 옵션이 있음 bash을 알 수 있습니다 .-L-P

항상 "논리적" 동작이 필요한 경우 --bind심볼릭 링크 대신 마운트(Linux에서는 Solaris 및 기타 운영 체제에서는 "루프백" 또는 다른 이름으로 부름)를 사용해야 합니다.

관련 정보