cara memperbarui target tautan simbolis (ln -f -s tidak berfungsi)
45
saya menggunakan
ln -f -s / var / www / html / rilis / build1390 aplikasi-saat ini
untuk memperbarui tautan simbolik "saat ini" dengan tujuan baru. Namun, ini tidak berhasil, tautan "app-current" menyimpannya sebagai tujuan awal, namun, saya tidak mendapatkan kesalahan ...
Saya lebih suka tidak menghapus tautan dan membuatnya kembali, cukup perbarui target tautan yang ada. Apakah itu mungkin?
Itu bekerja untuk saya, apa hasilnya strace ln -f -s /var/www/html/releases/build1390 app-current?
Oh, karena ini adalah direktori yang perlu Anda tambahkan -ntanpa dereferensi dan ini harus menyelesaikan masalah. -fbenar-benar lebih nyaman karena menambahkan -f hanya menyebabkannya memutuskan tautan. Walaupun saya kira itu mungkin akan terjadi beberapa ratus ms lebih cepat pada sistem yang biasanya dimuat.
Jadi tanpa -narf akan direferensi, maka memperlakukannya seolah-olah itu sebenarnya /. Dalam contoh khusus Anda, jika tidak ada kesalahan, saya pikir Anda mungkin telah membuat tautan simbolis baru di dalamnya /var/www/html/releases/build1390 app-currentdan ingin membersihkannya.
Hebat, itu -n yang melakukannya. Terima kasih banyak!
solsol
12
Anda dapat menggunakan -natau --no-dereferenceuntuk mencegah target dari dereferensi jika itu adalah symlink. Anda juga dapat menggunakan -Tatau --no-target-directoryuntuk memastikan bahwa file target akan selalu diperlakukan sebagai file biasa.
Ini menghasilkan perilaku yang sedikit berbeda, seperti yang ditunjukkan contoh berikut. Misalkan srcbeberapa file, dirlinkadalah symlink ke direktori, dan dirmerupakan direktori aktual.
memiliki jawaban yang paling benar dan ringkas untuk pengguna Linux.
ross
Apakah ada cara untuk memaksa menimpa direktori target sehingga Anda tidak akan mendapatkan pesan kesalahan cannot overwrite directory?
gitaarik
@rednaw Anda dapat melakukan ini dengan merantai beberapa perintah, tetapi lnitu sendiri tidak menghapus direktori - ini mungkin akan menjadi ide yang buruk, karena itu akan membutuhkan secara rekursif menghapus mungkin sejumlah besar file.
Anda dapat menggunakan
-n
atau--no-dereference
untuk mencegah target dari dereferensi jika itu adalah symlink. Anda juga dapat menggunakan-T
atau--no-target-directory
untuk memastikan bahwa file target akan selalu diperlakukan sebagai file biasa.Ini menghasilkan perilaku yang sedikit berbeda, seperti yang ditunjukkan contoh berikut. Misalkan
src
beberapa file,dirlink
adalah symlink ke direktori, dandir
merupakan direktori aktual.Menggunakan
-n
:ln -sfn src dirlink
menimpadirlink
dan menautkannya kesrc
ln -sfn src dir
menciptakan tautandir/src -> src
Menggunakan
-T
:ln -sfT src dirlink
menimpadirlink
dan menautkannya kesrc
ln -sfT src dir
menghasilkan pesan kesalahan:ln: ‘dir’: cannot overwrite directory
sumber
cannot overwrite directory
?ln
itu sendiri tidak menghapus direktori - ini mungkin akan menjadi ide yang buruk, karena itu akan membutuhkan secara rekursif menghapus mungkin sejumlah besar file.