Jako porządni administratorzy lubimy dbać o to, aby małe rzeczy były równie dobrze objęte, jak duże (o ile pozwala na to czas). Jedną z tych rzeczy jest zapewnienie, że nasze systemy nie są pełne zepsutych dowiązań symbolicznych.
Dlaczego te małe zarazy stanowią problem? Ponieważ sprawiają, że myślisz, że pliki są tam, kiedy ich nie ma, mogą wskazywać na coś bardziej irytującego, a ponieważ (niewielka) część mnie z OCD oszalała z powodu tych wszystkich ostrzeżeń podczas uruchamiania niektórych poleceń (jak grep -r
).
Jak więc przejść do wykrywania (i raportowania, za pośrednictwem poczty e-mail lub systemu monitorowania) niedziałających linków w częściach systemu, za które odpowiedzialny jest administrator (nie ma sensu mówić, że ~jbloggs
ma kilka zepsutych dowiązań symbolicznych, to jego problem )?
źródło
Odpowiedzi:
Problem
-L
polega na tym, że ma to efekt uboczny polegający na rozszerzeniu wyszukiwania na podkatalogi, które są celamisymlinks
, co może nie być oczekiwane ani pożądane.Z
GNU findutils
wersjąfind
:z wyjątkiem tego, że nie znajduje cyklicznych dowiązań symbolicznych.
-execdir
w drugiej odpowiedzi nie jest tak przenośna, więc destylując ją do przenośnego rozwiązania, które znajduje zepsute łącza symboliczne, w tym łącza cykliczne:Zobacz to pytanie lub ynform.org w celu dalszej dyskusji. Zobacz także dokumentację findutils, aby uzyskać szczegółowe informacje. Link ynform.org przedstawia również metodę wykrywania tylko linków cyklicznych.
źródło
Wiele sposobów na skórowanie kota
Jest to dość przenośne (-L to wymóg POSIX)
Nie zdefiniowałeś uszkodzonego, powyższe wyśle ci zepsute linki, które nie mają celu w części systemu plików, na której ci zależy. Raportuje także o pętlach systemu plików stderr i zbyt wielu problemach z łączem symbolicznym itp. Jeśli też ci na nich zależy, przekieruj stderr na swoją pocztę
Jeśli twoje znalezisko obsługuje, jest
-readable
to przydatne i szybkiePowyższe zawiera łącza z zbyt wieloma poziomami problemów z łączami symbolicznymi w danych wyjściowych, ale nie pętle systemu plików.
Jeśli części systemu plików, na których Ci zależy, mają różne ścieżki
źródło
find -L
jest problematyczne w tym przypadku użycia. Zobacz: unix.stackexchange.com/a/38691/6860Dam ci odpowiedź na Linuksa, a jeśli chcesz, możesz ją dostosować do swojego Uniksa:
find . -type l ! -execdir test -e {} \; -print >> broken_symlinks.txt; mutt -s "Broken symlinks" [email protected] < broken_symlinks.txt; rm -f broken_symlinks.txt
Druga opcja to
ls -LR | grep 'cannot access'
lub niektóre modyfikacje powyższego polecenia find.Edytować:
Tak, jest jeszcze lepiej:
find . -type l ! -execdir test -e {} \; -print | mail -s "Broken symlinks" [email protected]
źródło
broken_symlinks.txt
całkowicie i po prostu użyć fajki? I użyćmail
zamiastmutt
wysłać wiadomość e-mail?Jest to dobry sposób na zrobienie tego z GNU find:
Powodem tego jest to, że za
-lname
pomocą-follow
(lub -L) „... ten test zwraca false, chyba że link symboliczny jest uszkodzony”, zgodnie ze stroną man find.Prawdopodobnie rozsądne byłoby uruchomienie tego rodzaju skanowania dysku, gdy serwer nie jest intensywnie używany. Przydatne może być użycie
nice
i / lubionice
(zobacz ten blog, aby uzyskać ładny opis ionice ), aby zmniejszyć obciążenie serwera podczas uruchamiania tego zadania.źródło
Fedora i Ubuntu zapewniają
symlinks
narzędzie. Narzędzie to natywny plik wykonywalny elfa, a nie skrypt powłoki opakowania. Narzędzie zostało wstępnie zainstalowane w Fedorze. Może być konieczne zainstalowanie narzędzia w systemie Ubuntu.Za pomocą tego
symlinks
narzędzia możesz kontrolować wiszące łącza za pomocą następującego polecenia.Jeśli cele wiszących łączy są w porządku do usunięcia, wykonaj następujące czynności, aby je usunąć.
Oto przykład danych wyjściowych na serwerze Fedora 31.
debian-logo.png
Iubuntu-logo.png
są poprawne.źródło