我想创建一个单向符号链接,即我可以使用它转到目标目录,但我无法返回。
假设有一个名为 的目录,D
有两个子目录S1
和S2
。我想创建一个S1
指向S2
(比方说ls2 -> ../S2/
)的链接。如果我cd ls2
这样做了,cd ..
那么我想去D
而不去S1
。
是否可以?
答案1
所有符号链接都是单向的。就内核而言,进入/D/S1
并运行后chdir("ls2")
,您将进入/D/S2
,因此如果您运行chdir("..")
,您最终会进入/D
。
如果您在 shell 中执行此操作,则之后
cd /D/S1
cd ls2
cd ..
你最终会在/D/S1
.原因是 shell 自己跟踪当前目录,并且它会记住符号链接。
您无法逐个链接地禁用此 shell 行为,但可以在运行命令时禁用它cd
。运行后cd ls2
,shell 会将当前目录记住为/D/S1/ls2
:
$ pwd
/D/S1
$ cd ls2
$ pwd
/D/S1/ls2
$ cd ..
$ pwd
/D/S1
要指示 shell 忘记其符号链接感知的当前目录跟踪,请将-P
选项传递给cd
.该pwd
命令还有一个-P
选项。
$ pwd
/D/S1
$ cd ls2
$ pwd
/D/S1/ls2
$ pwd -P
/D/S2
$ cd -P ..
$ pwd
/D
当您更改为符号链接时,您也可能会忘记逻辑跟踪:
$ pwd
/D/S1
$ cd -P ls2
$ pwd
/D/S2
$ cd ..
$ pwd
/D