我可以创建单向符号链接吗?

我可以创建单向符号链接吗?

我想创建一个单向符号链接,即我可以使用它转到目标目录,但我无法返回。

假设有一个名为 的目录,D有两个子目录S1S2。我想创建一个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

相关内容