使用符号链接,为什么“ls ..”和“cd ..”的结果不同?

时间:2013-03-26 16:55:55

标签: shell symlink

假设我执行以下命令:

$ mkdir -p a/b
$ ln -s a/b c
$ cd c

然后,在目录 c 中,为什么ls ..显示目录 a 的内容,但cd ..会返回原始目录?< / p>

1 个答案:

答案 0 :(得分: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命令指定-Pcd选项,让您明确说明要遵循的路径。在您的示例中,cd c; cd -P ..应该让您进入~/b而不是~