一方向シンボリックリンクを作成できますか?

一方向シンボリックリンクを作成できますか?

一方向シンボリックリンクを作成したいと思います。つまり、それを使用してターゲットディレクトリに移動できますが、戻ることはできません。

D2つのサブディレクトリS1とがあるディレクトリがあるとしますS2。 (たとえば)へのS1リンクを作成したいと思います。それなら行きたいけど行かない。S2ls2 -> ../S2/cd ls2cd ..DS1

可能ですか?

ベストアンサー1

すべてのシンボリックリンクは一方向です。カーネルに関する限り、一度/D/S1入って実行するとchdir("ls2")に入るようになるので、 を/D/S2実行するとchdir("..")結局はに入るようになります/D

シェルでこれを行うと

cd /D/S1
cd ls2
cd ..

/D/S1その理由は、シェルが現在のディレクトリ自体を追跡し、シンボリックリンクを覚えているからです。

リンクごとにこのシェルの動作を無効にすることはできませんが、コマンドを実行するときは無効にすることができますcd。を実行すると、cd ls2シェルは現在のディレクトリを次のように記憶します/D/S1/ls2

$ pwd
/D/S1
$ cd ls2
$ pwd
/D/S1/ls2
$ cd ..
$ pwd
/D/S1

シェルにシンボリックリンク認識現在のディレクトリトレースを忘れるように指示するには、このコマンドにも1つの-Pオプションがあります。cdpwd-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

おすすめ記事