假设我执行以下命令:
$ mkdir -p a/b $ ln -s a/b c $ cd c
然后,在目录 c 中,为什么ls ..
显示目录 a 的内容,但cd ..
会返回原始目录?< / p>
答案 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
命令指定-P
和cd
选项,让您明确说明要遵循的路径。在您的示例中,cd c; cd -P ..
应该让您进入~/b
而不是~
。