Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 有了符号链接,为什么结果来自;ls.“;及;cd&引用;不同?_Shell_Symlink - Fatal编程技术网

Shell 有了符号链接,为什么结果来自;ls.“;及;cd&引用;不同?

Shell 有了符号链接,为什么结果来自;ls.“;及;cd&引用;不同?,shell,symlink,Shell,Symlink,假设我执行以下命令: $ mkdir -p a/b $ ln -s a/b c $ cd c $mkdir-应付账款 $ln-s a/b c $cd c 那么,在目录c中,为什么ls..显示目录a的内容,而cd..返回到原始目录?shell区分两种路径:反映磁盘上文件夹实际布局的物理路径和逻辑路径,其中考虑了符号链接。当您将工作目录更改为c(而不是a/b)时,shell知道当前目录的逻辑路径是~/c(假设a在主目录中),物理路径是~/a/b 在您的示例中,ls显示a的内容,因为是c的物理父目录的

假设我执行以下命令:

$ mkdir -p a/b $ ln -s a/b c $ cd c $mkdir-应付账款 $ln-s a/b c $cd c
那么,在目录c中,为什么
ls..
显示目录a的内容,而
cd..
返回到原始目录?

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

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


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

我相信你最后一行的例子是读
cd c;cd-P..