11. 目录的符号链接与两个父目录
假设当前目录下有一个指向其他目录的符号链接 test, 那么以下命令可以进入到这个目录:
$ cd test
这时候如果 cd .., 我们将回到哪一个目录?
test所在的目录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 目录,那么逻辑路径优先。