
一方向シンボリックリンクを作成したいと思います。つまり、それを使用してターゲットディレクトリに移動できますが、戻ることはできません。
D
2つのサブディレクトリS1
とがあるディレクトリがあるとしますS2
。 (たとえば)へのS1
リンクを作成したいと思います。それなら行きたいけど行かない。S2
ls2 -> ../S2/
cd ls2
cd ..
D
S1
可能ですか?
答え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
オプションがあります。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