为什么不能从符号链接目录(没有这样的文件或目录)列出相对于 .. 的文件/目录?

Liu*_* 刘研 3 ls directory cd-command symlink

我有一个/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
Run Code Online (Sandbox Code Playgroud)

这怎么会发生?这是符号链接的错误还是特殊行为?

gee*_*aur 5

这是bash'scd内置函数的特殊行为;相对文件行为是自然的。一旦你跟随一个符号链接,你就在目标的实际路径中,原始路径信息丢失了;但是,如果您使用bashzshcd那里,则外壳会记住原始路径并在以后的相关cd命令中使用它。但不是在相对文件名引用中,因为bash实际上并不知道您是否打算使用文件名或其他内容。

如果你看一下cd在文档中bash,你会看到有-L-P选项,这些选项告诉它是否使用“逻辑”(记住原来的路径)或“物理”(用文件系统的想法)的路径。

如果您需要始终具有“逻辑”行为,则需要使用--bind挂载(在 Linux 上;Solaris 和其他操作系统将其称为“环回”或其他东西)而不是符号链接。