Sebagai sysadmin yang rapi, kami ingin memastikan bahwa hal-hal kecil juga tercakup sebagai hal-hal besar (ketika waktu mengizinkan). Salah satunya adalah memastikan bahwa sistem kami tidak penuh dengan symlink yang rusak.
Mengapa blighters kecil ini menjadi masalah? Karena mereka membuat Anda berpikir file ada ketika mereka tidak ada, mereka bisa menjadi indikasi sesuatu yang lebih menjengkelkan, dan karena bagian OCD (kecil) saya menjadi gila dengan semua peringatan ketika menjalankan perintah tertentu (seperti grep -r
).
Jadi, bagaimana orang mendeteksi (dan melaporkan, melalui e-mail atau sistem pemantauan) tautan terputus di seluruh bagian sistem yang menjadi tanggung jawab admin (tidak ada gunanya mengatakan kepada saya bahwa ~jbloggs
ada banyak symlink yang rusak, itulah masalahnya )?
sumber
Jawaban:
Masalahnya
-L
adalah efek samping dari perluasan pencarian ke sub-direktori yang menjadi targetsymlinks
, yang mungkin tidak diharapkan atau diinginkan.Dengan
GNU findutils
versifind
:kecuali itu tidak menemukan tautan simbolik siklik.
-execdir
di jawaban lain tidak portabel, jadi menyaringnya ke solusi portabel yang menemukan tautan simbolik yang rusak, termasuk tautan siklik:Lihat pertanyaan ini , atau ynform.org untuk diskusi lebih lanjut. Lihat juga dokumentasi findutils untuk perinciannya. Tautan ynform.org juga menyajikan metode untuk mendeteksi hanya tautan siklik.
sumber
Banyak cara menguliti kucing
Ini cukup portabel (-L adalah persyaratan posix)
Anda tidak mendefinisikan broken, tautan di atas akan mengirimkan Anda broken link yang tidak memiliki target di bagian filesystem yang Anda pedulikan. Ia juga melaporkan loop sistem file stderr dan terlalu banyak level tautan simbolik, dll. Jika Anda peduli tentang mereka, maka arahkan stderr ke email Anda
Jika temuan Anda mendukung, itu
-readable
berguna dan cepatDi atas termasuk tautan dengan terlalu banyak level masalah tautan simbolik dalam outputnya tetapi bukan loop sistem file.
Jika bagian-bagian dari sistem file yang Anda pedulikan memiliki jalur yang berbeda maka
sumber
find -L
bermasalah untuk kasus penggunaan ini. Lihat: unix.stackexchange.com/a/38691/6860Saya akan memberi Anda jawaban Linux dan Anda dapat menyesuaikannya dengan Unix Anda, jika perlu:
find . -type l ! -execdir test -e {} \; -print >> broken_symlinks.txt; mutt -s "Broken symlinks" [email protected] < broken_symlinks.txt; rm -f broken_symlinks.txt
Opsi kedua adalah
ls -LR | grep 'cannot access'
atau beberapa modifikasi dari perintah find di atas.Edit:
Ya, ini bahkan lebih baik:
find . -type l ! -execdir test -e {} \; -print | mail -s "Broken symlinks" [email protected]
sumber
broken_symlinks.txt
sepenuhnya dan hanya menggunakan pipa? Dan gunakanmail
alih-alihmutt
mengirim email?Ini adalah cara yang baik untuk melakukannya dengan GNU find:
Alasan ini berhasil adalah karena
-lname
dengan-follow
(atau -L) "... tes ini mengembalikan false kecuali tautan simbolis rusak", menurut halaman manual find.Mungkin bijaksana untuk menjalankan pemindaian disk semacam ini ketika server tidak banyak digunakan. Mungkin bermanfaat untuk menggunakan
nice
dan / atauionice
(lihat blog ini untuk deskripsi ionice yang bagus ) untuk mengurangi beban di server saat menjalankan tugas ini.sumber
Fedora dan Ubuntu menyediakan
symlinks
utilitas. Utilitas adalah elf asli yang dapat dieksekusi, dan bukan skrip shell pembungkus. Utilitas telah diinstal sebelumnya di Fedora. Anda mungkin perlu menginstal utilitas di Ubuntu.Dengan
symlinks
utilitas Anda dapat mengaudit untuk menggantung tautan dengan perintah berikut.Jika target tautan yang digantung OK untuk dihapus, maka keluarkan yang berikut untuk menghapusnya.
Berikut adalah contoh output pada server Fedora 31. The
debian-logo.png
danubuntu-logo.png
benar.sumber