Saya membuat struktur file ini:
test/src
test/firefox
Ketika saya menjalankan perintah ini:
ln -s test/src test/firefox
Saya berharap tautan simbolik test/firefox/src
dibuat menunjuk test/src
, namun saya mendapatkan kesalahan ini sebagai gantinya:
-bash: cd: src: Too many levels of symbolic links
- Apa yang saya lakukan salah?
- Tidak bisakah Anda membuat tautan simbolis ke satu folder yang disimpan dalam saudara dari folder itu?
- Apa gunanya ini?
linux
filesystems
ln
David Zorychta
sumber
sumber
ls -ld test test/*
, atau urutan tepat dari perintah yang Anda jalankan untuk membuat file-file ini.cd test/firefox/src
akan muncul kesalahancd: no such file or directory: test/firefox/src
, karenatest/firefox/src
merupakan tautan simbolik yang menjuntai. Apakah Anda menjalankancd
tautan simbolis lain yang disebutsrc
?ln -s
dancd
yang tidak Anda beri tahu kami. Dengan asumsi bahwa hanya adatest
subdirektori di direktori Anda saat ini, acd src
(atau apa pun yang Anda jalankan) akan menampilkan kesalahan. Apakah Anda memasukkan sesuatu ke dalamnyatest/firefox
?/some/path
, aln -s test/src test/firefox
akan membuat symlink yang menunjuk dari/some/path/test/firefox/src
ke/some/path/test/firefox/test/src
, bukan ke/some/path/test/src
.Jawaban:
Di permukaan, apa yang Anda sarankan agar Anda coba berhasil untuk saya.
Contoh
Buat tautan simbolis:
Menjalankannya yang ke-2 biasanya akan menghasilkan ini:
Jadi Anda mungkin punya hal lain yang terjadi di sini. Saya akan curiga bahwa Anda memiliki referensi melingkar di mana tautan menunjuk kembali ke dirinya sendiri.
Anda dapat menggunakannya
find
untuk mengelap hal ini sedikit:sumber
find -L ./ -mindepth 15
mengungkapkan pelakunyaSeperti yang ditunjukkan Dubu dalam komentar, masalahnya terletak pada jalur relatif Anda. Saya punya masalah serupa yang menghubungkan konfigurasi nginx saya dari
/usr/local/etc/nginx
ke/etc/nginx
. Jika Anda membuat symlink Anda seperti ini:Anda sebenarnya akan membuat tautan / etc / nginx -> / etc / nginx, karena jalur sumber relatif terhadap jalur tautan. Solusinya sesederhana menggunakan jalur absolut:
sumber
cygwin
. Terima kasih!cd
jika Anda ingin pergi ke direktori yang ditargetkan dari direktori tempat file tautan simbolik berada.Symlink relatif terhadap direktori induk tautan, bukan direktori saat ini dari
ln
proses.Saat kamu melakukan:
(di mana
test/firefox
direktori), Anda membuattest/firefox/src
symlink yang targetnya adalahtest/src
.Itu
test/src
relatif terhadaptest/firefox
direktori, jadi itu symlink ke/top/dir/test/firefox/test/src
.Jika Anda ingin symlink itu menjadi tautan
/top/dir/test/src
, Anda harus menulis:Atau
meskipun itu umumnya ide yang buruk untuk membuat symlink ke jalur absolut karena mereka mudah rusak ketika direktori diganti nama atau sistem file dipasang di tempat lain.
Dengan GNU
ln
, Anda dapat menggunakan-r
opsi untuk membiarkannya melakukan perhitungan sendiri:sumber
Gunakan jalur absolut sebagai ganti jalur relatif, maka itu akan berhasil.
Misalnya:
sumber
Jawabannya adalah menggunakan jalur absolut. Tapi itu bisa menjengkelkan untuk mengetik path lengkap untuk sesuatu yang ada di direktori saat ini. Anda dapat menggunakan perintah substitusi pwd untuk menghindarinya. Jika target Anda ada di direktori saat ini:
Jika tautan Anda ada di direktori saat ini:
sumber