# 目录的符号链接与两个父目录 假设当前目录下有一个指向其他目录的符号链接 `test`, 那么以下命令可以进入到这个目录: ```console $ cd test ``` 这时候如果 `cd ..`, 我们将回到哪一个目录? 1. `test` 所在的目录 2. `test` 指向的那个目录的父目录 这其实是 shell 查询路径的物理模式还是逻辑模式的问题。以下命令: ```console $ cd -L .. ``` 回到 1, 这是逻辑模式。以下命令: ```console $ cd -P .. ``` 回到 2, 这里物理模式。对应地,以下命令可以查看当前目录的逻辑路径和物理路径: ```console $ pwd -L $ pwd -P ``` 很多 shell 默认是逻辑模式,所以 `-L` 参数可省略。 可以这么理解,逻辑路径是 Shell 解析了符号链接以后拼接起来的路径,物理路径是真实存在于文件系统中的路径。 `cd` 命令支持逻辑路径,但大多数命令并不支持,比如: ```console $ ls .. ``` 另外,不带参数的 `cd` 其实同时搜索逻辑路径和物理路径,比如在刚才的目录中执行: ```console $ cd test/../something ``` 如果 `test` 的物理父目录下有一个 `something` 目录的话,将会把当前目录切换到这个路径下。如果 `test` 的两个父目录中都有 `something` 目录,那么逻辑路径优先。