2

假设我执行以下命令:

$ mkdir -pa/b
$ ln -sa/bc
$ cd c

那么,在目录c中,为什么ls ..显示目录a的内容,却cd ..返回到原来的目录呢?

4

1 回答 1

2

shell 区分了两种类型的路径:物理路径,它反映了磁盘上文件夹的实际布局,以及逻辑路径,它考虑了符号链接。当您将工作目录更改为c(而不是a/b)时,shell 知道当前目录的逻辑路径是~/c(假设a在您的主目录中),并且物理路径是~/a/b.

在您的示例中,ls显示的内容是a因为..是 的物理父目录的实际文件系统条目c。另一方面,工作目录是一个 shell 概念,cd是一个 shell 内置命令。shell 知道,虽然c只是 的另一个名称a/b,但具体来说,工作目录c不是a/b. 因此,它是..逻辑解析而不是物理解析。

POSIX 标准指定命令的选项-L-P选项,cd让您明确说明要遵循的路径。在您的示例中,cd c; cd -P ..应该将您放入~/b而不是~.

于 2013-03-26T17:53:10.037 回答