Jak znaleźć i usunąć uszkodzone dowiązania symboliczne w systemie Linux?

Opublikowany: 2022-01-29
Okno terminala na laptopie z systemem Linux.
Fatmawati Achmad Zaenuri/Shutterstock

Dowiązania symboliczne w Linuksie to fantastyczna funkcja, ale mogą zostać zerwane i nie wskazują na nic. Oto jak zlokalizować uszkodzone dowiązania symboliczne, przejrzeć je i usunąć je z systemu, jeśli zajdzie taka potrzeba.

Dowiązania symboliczne 101

Dowiązania symboliczne, zwane również „dowiązaniami miękkimi” i „dowiązaniami symbolicznymi”, to forma skrótów, które mogą wskazywać na pliki i katalogi. Dowiązanie symboliczne wygląda jak zwykły plik lub katalog w oknie menedżera plików. Pojawia się również jako wpis na liście plików w oknie terminala. Plik lub katalog, do którego wskazuje dowiązanie symboliczne, może znajdować się w dowolnym miejscu w drzewie systemu plików.

Załóżmy na przykład, że masz w swoim katalogu domowym dowiązanie symboliczne o nazwie „dave-link”, które wskazuje na plik o nazwie „text-file.txt” znajdujący się w innym miejscu w drzewie systemu plików. Polecenia używane w dowiązaniu symbolicznym są automatycznie stosowane do pliku, na który wskazuje. Jeśli spróbujesz użyć cat lub less na dowiązaniu symbolicznym, zobaczysz zawartość pliku „text-file.txt”.

Standardowa instalacja systemu Linux zawiera wiele dowiązań symbolicznych. Nawet jeśli sam ich nie tworzysz, system operacyjny ich używa. Procedury instalacji aplikacji często używają dowiązań symbolicznych do wskazywania plików wykonywalnych. Kiedy oprogramowanie jest aktualizowane, plik binarny jest zastępowany nową wersją, a wszystkie dowiązania symboliczne działają jak poprzednio, o ile nazwa nowego pliku jest taka sama jak stara.

Możemy łatwo zobaczyć niektóre dowiązania symboliczne, używając ls w katalogu głównym. Niektóre wpisy są wyświetlane w innym kolorze — na naszym komputerze testowym Ubuntu 20.10 są wyświetlane w kolorze jasnoniebieskim.

Wpisujemy:

 ls / 

Reklama

Możemy przyjrzeć się dokładniej, korzystając z opcji -l (długa lista). Wpisujemy następujące polecenie, aby przejrzeć wszystkie wpisy „lib” i pojedynczy wpis „bin”:

 ls -l /lib* /bin 

Na początku każdego wiersza znajduje się „l”, co oznacza, że ​​element jest dowiązaniem symbolicznym. Tekst po „->” pokazuje, na co wskazuje dowiązanie symboliczne. W naszym przykładzie celami są wszystkie katalogi.

Uprawnienia są wymienione jako odczyt, zapis i wykonanie dla właściciela, grupy i innych. Są to domyślne fałszywe wpisy. Nie odzwierciedlają rzeczywistych uprawnień do obiektów, na które wskazują dowiązania symboliczne. To uprawnienia do pliku lub katalogu docelowego mają pierwszeństwo i są honorowane przez system plików.

Uszkodzone dowiązania symboliczne

Dowiązanie symboliczne jest zerwane (lub zwisające), gdy plik, na który wskazuje, zostanie usunięty lub przeniesiony w inne miejsce. Jeśli procedura dezinstalacji aplikacji nie działa poprawnie lub zostanie przerwana przed jej zakończeniem, możesz pozostawić uszkodzone dowiązania symboliczne.

Jeśli ktoś ręcznie usunie plik, nie wiedząc, że wskazują na niego dowiązania symboliczne, te dowiązania symboliczne przestaną działać. Będą jak znaki drogowe wskazujące na miasto, które zostało zrównane z ziemią.

Możemy łatwo zobaczyć to zachowanie za pomocą dowiązania symbolicznego o nazwie „hello” w bieżącym katalogu. Wpisujemy następujące polecenie, używając ls , aby to zobaczyć:

 ls-l
Reklama

Wskazuje na program o nazwie „htg” w katalogu o nazwie „bin”. Jeśli „uruchamiamy” dowiązanie symboliczne, wykonuje on za nas program:

 ./Witaj

Możemy teraz sprawdzić, czy tak się dzieje, uruchamiając program bezpośrednio:

 ../bin/htg

Zgodnie z oczekiwaniami otrzymujemy tę samą odpowiedź. Usuńmy plik programu:

 rm ../bin/htg

Teraz, gdy spojrzymy na dowiązanie symboliczne, widzimy, że jest zaznaczone na czerwono, ponieważ Linux wie, że jest zepsuty. Informuje również o tym, na co wskazywał, dzięki czemu możemy zastąpić plik, ponownie skompilować program lub zrobić wszystko, co konieczne, aby naprawić dowiązanie symboliczne.

Zauważ, że jeśli spróbujemy uruchomić dowiązanie symboliczne, otrzymany błąd odnosi się do nazwy dowiązania symbolicznego, a nie do nazwy programu, na który wskazuje dowiązanie symboliczne.

Wpisujemy:

 ./Witaj 

Znajdowanie uszkodzonych dowiązań symbolicznych

Większość nowoczesnych wersji find posiada xtype (rozszerzony typ), która upraszcza znajdowanie uszkodzonych dowiązań symbolicznych. Użyjemy flagi l z xtype , aby nakazać mu szukanie linków. Użycie find i xtype w następujący sposób, bez żadnych innych flag type , wymusza na xtype zwracanie uszkodzonych linków:

 znajdować . -xtyp l 

Uruchomienie polecenia w naszym testowym katalogu domowym powoduje znalezienie kilku uszkodzonych dowiązań symbolicznych. Zauważ, że wyszukiwanie jest domyślnie rekurencyjne, więc automatycznie przeszukuje wszystkie podkatalogi.

Dowiązanie symboliczne „cześć”, które celowo zerwaliśmy, jest wymienione zgodnie z naszymi oczekiwaniami. Jeden z pozostałych dowiązań symbolicznych jest powiązany z przeglądarką Firefox, a reszta jest powiązana z przystawkami.

Jeśli potoczymy wyjście przez wc z opcją -l (linie), możemy policzyć wiersze, co jest tym samym, co liczenie uszkodzonych dowiązań symbolicznych.

Wpisujemy:

 znajdować . -xtyp l | wc-l 

Zostaliśmy poinformowani, że mamy 24 uszkodzone dowiązania symboliczne, które nic nie wskazują.

Znajdź, przejrzyj, a następnie usuń

Zanim spieszysz się i usuniesz wszystkie uszkodzone dowiązania symboliczne, przejrzyj wyniki polecenia find . Sprawdź, czy istnieje uzasadniony powód przerwania dowiązania symbolicznego.

Czasami problemem może być dowiązanie symboliczne, a nie plik docelowy. Jeśli dowiązanie symboliczne zostało utworzone niepoprawnie, może wskazywać na nic, ale rzeczywisty cel jest obecny. Ponowne utworzenie dowiązania symbolicznego byłoby w takim przypadku rozwiązaniem.

Możliwe jest również, że najwyraźniej uszkodzone dowiązanie symboliczne jest używane jako coś innego, na przykład jako wskaźnik blokady pliku lub inny wskaźnik go/no go. Firefox to robi; to jest pierwsze dowiązanie symboliczne na naszej liście. Firefox nie jest jednak używany na naszym komputerze testowym, więc możemy go bezpiecznie usunąć.

Reklama

Możliwe jest również, że cel jest obecny tylko okresowo i jest to oczekiwane (i pożądane) zachowanie tego konkretnego oprogramowania. Być może plik docelowy jest kopiowany z innej maszyny lub chmury, spełnia swoją funkcję, a następnie jest ponownie usuwany, aby w następnym cyklu zastąpić go innym programem.

Uszkodzone dowiązanie symboliczne może być również objawem nieudanej instalacji oprogramowania. W takim przypadku, zamiast usuwać dowiązanie symboliczne, należy je naprawić ręcznie lub powtórzyć instalację.

Po naprawieniu uszkodzonych łączy, które musisz zachować, powtórz polecenie, aby przeprowadzić wyszukiwanie. Stałe dowiązania symboliczne powinny wtedy być nieobecne w wynikach wyszukiwania.

Ze względów bezpieczeństwa najlepiej ograniczyć usuwanie linków symbolicznych do własnych katalogów. Zachowaj szczególną ostrożność przy uruchamianiu tych poleceń jako root lub w katalogach systemowych.

Usuwanie uszkodzonych linków symbolicznych

Opcja -exec (execute) uruchamia polecenia w wynikach find . Użyjemy rm do usunięcia każdego uszkodzonego dowiązania symbolicznego. Ciąg {} jest zastępowany nazwą każdego uszkodzonego dowiązania symbolicznego, gdy każdy z nich zostanie wykryty przez find .

Musimy użyć średnika ( ; ), aby zakończyć listę poleceń, które chcemy uruchomić -exec . Użyjemy ukośnika odwrotnego ( \ ), aby „uciec” średnika, więc jest on traktowany jako część polecenia find , a nie coś, na czym powinien działać Bash .

Wpisujemy:

 znajdować . -xtype l -exec rm {} \; 

Reklama

Wróciliśmy do wiersza poleceń bez wskazania, że ​​coś się stało. Aby sprawdzić, czy uszkodzone linki zostały usunięte, powtarzamy polecenie ich wyszukania w następujący sposób:

 znajdować . -xtyp l 

Brak pasujących wyników, co oznacza, że ​​uszkodzone dowiązania symboliczne zostały usunięte.

Pamiętaj, aby najpierw przejrzeć

Ponownie, zawsze poświęć trochę czasu na przejrzenie listy dowiązań symbolicznych przed uruchomieniem polecenia ich usunięcia. Możesz uniknąć usunięcia wszystkich, których nie masz pewności, uruchamiając polecenie, aby usunąć je w odpowiednich katalogach.

Na przykład powyżej mogliśmy uruchomić polecenie w katalogu „.snap”, a następnie ręcznie usunąć pojedyncze łącze symboliczne „hello”. To pozostawiłoby nietknięty link symboliczny blokady Firefoksa.