Directory
為什麼不能從符號連結目錄(沒有這樣的文件或目錄)列出相對於 .. 的文件/目錄?
我有一個
/usr/tomcat6/logs
連結到的目錄/var/log/tomcat6
。當我將目錄更改為
/usr/tomcat6/logs
並嘗試ls
使用相對路徑名文件時../conf/Catalina/localhost
,會發生No such file or directory錯誤。但是,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
這怎麼可能發生?是符號連結的錯誤還是特殊行為?
這是
bash
’cd
內置的特殊行為;相對文件行為是自然的。一旦你跟隨一個符號連結,你就在目標的實際路徑中,原始路徑資訊失去;但是如果你使用bash
orzsh
到cd
那裡,那麼 shell 會記住原始路徑並在以後的相關cd
命令中使用它。但不在相對文件名引用中,因為bash
實際上並不知道您是否打算使用文件名或其他內容。如果您查看 中的
cd
文件,bash
您會看到一些選項告訴它是使用“邏輯”(記住原始路徑)還是“物理”(使用文件系統的想法)路徑。-L``-P
如果您需要始終具有“邏輯”行為,則需要使用
--bind
掛載(在 Linux 上;Solaris 和其他作業系統稱其為“環回”或其他東西)而不是符號連結。