Seperti yang ditunjukkan Dubu dalam komentar, masalahnya terletak pada jalur relatif Anda. Saya memiliki masalah serupa saat menghubungkan konfigurasi nginx saya dari /usr/local/etc/nginx
ke /etc/nginx
. Jika Anda membuat symlink seperti ini:
cd /usr/local/etc
ln -s nginx/ /etc/nginx
Anda sebenarnya akan membuat tautan /etc/nginx -> /etc/nginx, karena jalur sumber relatif terhadap jalur tautan. Solusinya sesederhana menggunakan jalur absolut:
ln -s /usr/local/etc/nginx /etc/nginx
Jika Anda ingin menggunakan jalur relatif dan membuatnya berperilaku seperti yang Anda harapkan, Anda dapat menggunakan pwd
untuk memasukkan jalur direktori kerja saat ini, seperti:
cd /usr/local/etc
ln -s "$(pwd)/nginx/" /etc/nginx
Anda ingin memiliki tanda kutip di sekitar jalur, untuk memastikan hal-hal seperti spasi di jalur Anda saat ini lolos. Perhatikan bahwa Anda harus menggunakan tanda kutip ganda saat melakukan ini, seperti $(pwd)
tidak akan diganti jika Anda menggunakan tanda kutip tunggal.
Di permukaan, apa yang Anda sarankan telah Anda coba berhasil untuk saya.
Contoh
$ mkdir -p test/src test/firefox
$ tree --noreport -fp
.
`-- [drwxrwxr-x] ./test
|-- [drwxrwxr-x] ./test/firefox
`-- [drwxrwxr-x] ./test/src
Buat tautan simbolis:
$ 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
Menjalankannya untuk kedua kalinya biasanya akan menghasilkan ini:
$ ln -s test/src test/firefox
ln: failed to create symbolic link ‘test/firefox/src’: File exists
Jadi Anda mungkin memiliki sesuatu yang lain terjadi di sini. Saya menduga Anda memiliki referensi melingkar di mana tautan mengarah kembali ke dirinya sendiri.
Anda dapat menggunakan find
untuk menyelidiki ini sedikit:
$ cd /suspected/directory
$ find -L ./ -mindepth 15
Symlink relatif terhadap direktori induk tautan, bukan direktori saat ini dari ln
proses.
Saat Anda melakukannya:
cd /top/dir
ln -s test/src test/firefox
(di mana test/firefox
adalah direktori), Anda membuat test/firefox/src
symlink yang targetnya adalah test/src
.
test/src
itu relatif terhadap test/firefox
direktori, jadi itu adalah symlink ke /top/dir/test/firefox/test/src
.
Jika Anda ingin symlink itu menjadi tautan ke /top/dir/test/src
, Anda harus menulis:
ln -s ../src test/firefox/
Atau
ln -s /top/dir/test/src test/firefox/
meskipun biasanya merupakan ide yang buruk untuk membuat symlink ke jalur absolut karena mudah rusak saat direktori diganti namanya atau sistem file dipasang di tempat lain.
Dengan GNU ln
, Anda dapat menggunakan -r
opsi untuk membiarkannya menghitung sendiri:
$ ln -rs test/src test/firefox/
$ ls -ld test/firefox/src
lrwxrwxrwx 1 chazelas chazelas 6 Nov 29 15:59 test/firefox/src -> ../src