/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 및 기타 운영 체제에서는 "루프백" 또는 다른 이름으로 부름)를 사용해야 합니다.