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

WYS*_*WYG 8 cd-command symlink cwd

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

假设有一个目录,D其中包含两个子目录S1S2. 我想创建一个链接S1,它指向S2(比方说ls2 -> ../S2/)。如果我这样做cd ls2,然后cd ..然后,我想去D和不S1

是否可以?

Gil*_*il' 21

所有符号链接都是单向的。就内核而言,进入/D/S1并运行后chdir("ls2"),您就进入了/D/S2,所以如果您运行chdir(".."),您最终进入/D.

如果您在 shell 中执行此操作,则在

cd /D/S1
cd ls2
cd ..
Run Code Online (Sandbox Code Playgroud)

你最终在/D/S1. 原因是 shell 自己跟踪当前目录,并记住符号链接。

您不能逐个链接地禁用此 shell 行为,但可以在运行cd命令时禁用它。运行后cd ls2,shell 会记住当前目录为/D/S1/ls2

$ pwd
/D/S1
$ cd ls2
$ pwd
/D/S1/ls2
$ cd ..
$ pwd
/D/S1
Run Code Online (Sandbox Code Playgroud)

要指示 shell 忘记其符号链接感知当前目录跟踪,请将-P选项传递给cd. 该pwd命令还有一个-P选项。

$ pwd
/D/S1
$ cd ls2
$ pwd
/D/S1/ls2
$ pwd -P
/D/S2
$ cd -P ..
$ pwd
/D
Run Code Online (Sandbox Code Playgroud)

当您更改为符号链接时,您也可以忘记逻辑跟踪:

$ pwd
/D/S1
$ cd -P ls2
$ pwd
/D/S2
$ cd ..
$ pwd
/D
Run Code Online (Sandbox Code Playgroud)