Saya mencoba menggunakan tautan simbolis. Saya membaca dan menemukan perintah berikut:
Creation -> ln -s {/path/to/file-name} {link-name}
Update -> ln -sfn {/path/to/file-name} {link-name}
Deletion -> rm {link-name}
Kreasi dan penghapusan berfungsi dengan baik. Tetapi pembaruan tidak berfungsi. Setelah melakukan perintah ini, symlink menjadi tidak valid.
Saya telah membaca di sana-sini bahwa tidak mungkin untuk memperbarui / mengganti symlink. Jadi ada informasi yang saling bertentangan di internet. Siapa yang benar? Jika symlink dapat diperbarui / diganti, bagaimana saya bisa mencapai ini?
Memperbarui
Berikut adalah struktur direktori saya:
~/scripts/test/
~/scripts/test/remote_loc/
~/scripts/test/remote_loc/site1/
~/scripts/test/remote_loc/site1/stuff1.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site2/stuff2.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site3/stuff3.txt
Dari ~/scripts/test/
, ketika saya melakukan:
ln -s /remote_loc/site1 test_link
a test_link
dibuat, dan saya bisa ls -l
, tetapi tampaknya rusak (bertentangan dengan apa yang saya katakan di atas dalam pertanyaan saya).
Bagaimana saya bisa melakukan beberapa tautan level direktori?
sumber
unlink
bukanrm
. Denganunlink
Anda tidak pernah berisiko kehilangan file dalam direktori sumber dengan secara tidak sengaja menggunakan sakelar yang salah.-n
? (mungkin masalahnya). Juga jika ln Anda mendukung-t
kemudian menggunakannya, untuk kasus ini, dan-T
ataudestination/
untuk kasus lain.Jawaban:
Menggunakan
-f
denganln
akan menimpa tautan apa pun yang sudah ada di sana, jadi selama Anda memiliki izin yang benar, itu akan berfungsi ... Itu selalu bekerja untuk saya. Sistem operasi apa yang Anda gunakan?sumber
ln
parameter, seperti yang cenderung saya lakukan, apakah-f
saklar akan menghancurkan file Anda yang ada (target tautan)? Dalam kedua kasus, kami memiliki-i
parameter (yang akan meminta pengguna untuk menimpa) juga, jika Anda ingin sedikit keamanan.-f
hanya memanggilunlink()
dan dilink()
bawah kap: stackoverflow.com/a/1466570/157385 . Saya berharap saya hanya ingat urutan yang benar!-n
. Lihat jawaban yang diterima.Ok, saya menemukan di mana kesalahan saya: orang tidak boleh meletakkan yang pertama
/
di jalurDengan kata lain, perintah dalam pertanyaan saya harus:
dari pada
mempertimbangkan kasus saya.
sumber
relative
jalan (tanpa awalan /) dan yang lainnya adalahabsolute
jalan (dengan awalan /). Jika Anda mengelola sistem Linux, Anda memahami perbedaannya. Misalnya perbedaan antararm -rf ./*
danrm -rf /.*
memutuskan apakah Anda mempertahankan pekerjaan Anda atau tidak :)-n
parameter untuk mengganti tautan simbol.Masalah pertama:
Mengutip Anda:
Masalah dengan struktur direktori yang diberikan:
dan menggunakan perintah:
Apakah itu menciptakan tautan simbolis di $ PWD Anda, atau direktori kerja saat ini, yang menunjuk ke file yang tidak ada dari /, atau root, di / remote_loc / site1
Jika PWD Anda ada di ~ / skrip / maka Anda harus menggunakan ini:
ln -s remote_loc/site1 test_link
kalau tidak Anda bisa menggunakan path absolut penuh seperti:
ln -s /home/yourusername/remote_loc/site1 test_link
Masalah kedua:
Mengutip Anda:
Untuk menjawab pertanyaan Anda "Siapa yang benar", saya tidak yakin apa yang sebenarnya Anda baca, atau bagaimana itu dipahami. Tapi, yang berikut ini akan membantu menjernihkan:
Memperbarui tautan simbolis dengan target yang bukan direktori.
Contoh:
Tapi, seperti yang Anda lihat, itu akan memberikan jalur absolut jika jalur absolut dalam
ln
argumen. Memberikan path lengkap diperlukan ketika direktori kerja saat ini berbeda dari direktori induk tautan.Jalur Relatif:
Contoh:
Namun, memperbarui tautan ke direktori tidak akan berfungsi jika targetnya adalah direktori.
Contoh:
Seperti yang Anda lihat, meskipun menggunakan nama path absolut yang diberikan dalam
ln
argumen di atas tanpa opsi -r, tautan simbolik masih relatif terhadap tautan.Perbarui Tautan ke Direktori:
Contoh:
Berbeda dengan:
sumber
sumber