Directory

為什麼不能從符號連結目錄(沒有這樣的文件或目錄)列出相對於 .. 的文件/目錄?

  • June 20, 2011

我有一個/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

這怎麼可能發生?是符號連結的錯誤還是特殊行為?

這是bashcd內置的特殊行為;相對文件行為是自然的。一旦你跟隨一個符號連結,你就在目標的實際路徑中,原始路徑資訊失去;但是如果你使用bashorzshcd那裡,那麼 shell 會記住原始路徑並在以後的相關cd命令中使用它。但不在相對文件名引用中,因為bash實際上並不知道您是否打算使用文件名或其他內容。

如果您查看 中的cd文件,bash您會看到一些選項告訴它是使用“邏輯”(記住原始路徑)還是“物理”(使用文件系統的想法)路徑。-L``-P

如果您需要始終具有“邏輯”行為,則需要使用--bind掛載(在 Linux 上;Solaris 和其他作業系統稱其為“環回”或其他東西)而不是符號連結。

引用自:https://unix.stackexchange.com/questions/15284