11. 目录的符号链接与两个父目录

假设当前目录下有一个指向其他目录的符号链接 test, 那么以下命令可以进入到这个目录:

$ cd test

这时候如果 cd .., 我们将回到哪一个目录?

  1. test 所在的目录

  2. test 指向的那个目录的父目录

这其实是 shell 查询路径的物理模式还是逻辑模式的问题。以下命令:

$ cd -L ..

回到 1, 这是逻辑模式。以下命令:

$ cd -P ..

回到 2, 这里物理模式。对应地,以下命令可以查看当前目录的逻辑路径和物理路径:

$ pwd -L
$ pwd -P

很多 shell 默认是逻辑模式,所以 -L 参数可省略。

可以这么理解,逻辑路径是 Shell 解析了符号链接以后拼接起来的路径,物理路径是真实存在于文件系统中的路径。

cd 命令支持逻辑路径,但大多数命令并不支持,比如:

$ ls ..

另外,不带参数的 cd 其实同时搜索逻辑路径和物理路径,比如在刚才的目录中执行:

$ cd test/../something

如果 test 的物理父目录下有一个 something 目录的话,将会把当前目录切换到这个路径下。如果 test 的两个父目录中都有 something 目录,那么逻辑路径优先。