Dubu がコメントで指摘しているように、問題は相対パスにあります。 /usr/local/etc/nginx
から nginx 構成をシンボリックリンクする同様の問題がありました /etc/nginx
まで .次のようにシンボリック リンクを作成する場合:
cd /usr/local/etc
ln -s nginx/ /etc/nginx
ソースパスはリンクのパスに対して相対的であるため、実際にはリンクを /etc/nginx -> /etc/nginx にします。ソリューションは、絶対パスを使用するのと同じくらい簡単です:
ln -s /usr/local/etc/nginx /etc/nginx
相対パスを使用して、おそらく期待どおりに動作させたい場合は、 pwd
を使用できます 次のように、現在の作業ディレクトリ パスを入力します。
cd /usr/local/etc
ln -s "$(pwd)/nginx/" /etc/nginx
現在のパスのスペースなどを確実にエスケープするために、パスを引用符で囲む必要があります。これを行うときは、$(pwd)
のように二重引用符を使用する必要があることに注意してください。 単一引用符を使用する場合、置換されません。
表面的には、あなたが試してみて提案したことは私にとってうまくいきます。
例
$ mkdir -p test/src test/firefox
$ tree --noreport -fp
.
`-- [drwxrwxr-x] ./test
|-- [drwxrwxr-x] ./test/firefox
`-- [drwxrwxr-x] ./test/src
シンボリック リンクを作成します:
$ ln -s test/src test/firefox
$ tree --noreport -fp
.
`-- [drwxrwxr-x] ./test
|-- [drwxrwxr-x] ./test/firefox
| `-- [lrwxrwxrwx] ./test/firefox/src -> test/src
`-- [drwxrwxr-x] ./test/src
2 回目に実行すると、通常は次のようになります。
$ ln -s test/src test/firefox
ln: failed to create symbolic link ‘test/firefox/src’: File exists
したがって、ここで何か他のことが起こっている可能性があります。リンクが自分自身を指している循環参照があると思われます。
find
を使用できます これを少し調べます:
$ cd /suspected/directory
$ find -L ./ -mindepth 15
シンボリック リンクは、ln
の現在のディレクトリではなく、リンクの親ディレクトリに相対的です。
その場合:
cd /top/dir
ln -s test/src test/firefox
(ここで test/firefox
はディレクトリです)、あなたは test/firefox/src
を作成しています test/src
をターゲットとするシンボリックリンク .
その test/src
test/firefox
に相対的です ディレクトリ、つまり /top/dir/test/firefox/test/src
へのシンボリックリンクです .
そのシンボリックリンクを /top/dir/test/src
へのリンクにしたい場合 、次のように記述する必要があります:
ln -s ../src test/firefox/
または
ln -s /top/dir/test/src test/firefox/
ただし、ディレクトリの名前が変更されたり、ファイルシステムが別の場所にマウントされたりすると簡単に壊れてしまうため、絶対パスへのシンボリック リンクを作成することは一般的にはお勧めできません。
GNU ln
を使用 、その -r
を使用できます それ自体で計算を行うオプション:
$ ln -rs test/src test/firefox/
$ ls -ld test/firefox/src
lrwxrwxrwx 1 chazelas chazelas 6 Nov 29 15:59 test/firefox/src -> ../src