Jak Naprawić Swoje Uszkodzone Linki Symboliczne: Dobrze i Lepiej

Linki symboliczne mogą być użyteczne w organizacji plików, lecz są podatne na uszkodzenia. Dowiedz się, jak je znaleźć i naprawić z pomocą odpowiednich narzędzi.
Linki symboliczne to świetny sposób na organizację plików, ale nie są idealne. Symlink'i są dość wrażliwe i łatwo skończyć z linkami wskazującymi na nieistniejące pliki. Program find może pomóc w rozwiązaniu tego problemu, ale istnieje narzędzie stron trzecich, które radzi sobie z tym jeszcze lepiej.
Co to jest uszkodzony symlink i dlaczego jest ważny?
Uszkodzony symlink wskazuje na plik, który nie istnieje. Może powstać na dwa sposoby:
- Linkując do pliku, który nigdy nie istniał. Możesz spróbować tego samodzielnie, podając nieistniejącą nazwę pliku do ln, np. ln -s file-does-not-exist.
- Linkując do istniejącego pliku, a następnie usuwając ten plik, np. ln -s plik link-do-pliku; rm plik.
Te uszkodzone symlinki nazywane są czasami 'zwisającymi linkami' i mogą być problematyczne, ponieważ prawdopodobnie złamią coś innego — to znaczy, cokolwiek pierwotnie miało ich używać. Programy nie zawsze radzą sobie z uszkodzonymi linkami w jednolity sposób:
ls nawet nie odróżnia uszkodzonego linku od normalnego, co znacznie utrudnia ich dostrzeganie przypadkowo.
Wiele narzędzi GNU generuje nieco mylący komunikat o błędzie: "Za dużo poziomów linków symbolicznych." To jest wyjaśnione w dokumentacji bazowej funkcji biblioteki open, która opisuje błąd ELOOP:
Natrafiono na za dużo linków symbolicznych podczas tłumaczenia ścieżki. Jest to uznawane za wskazujące na link symboliczny w pętli.
Na szczęście, polecenie file zwraca bardziej użyteczny błąd:
Ma to sens, ponieważ całym celem polecenia file jest dostarczenie informacji o rodzaju pliku, podczas gdy wc i większość próbują wykonać inne zadania na zawartości danego pliku.
Uszkodzone linki mogą zaśmiecać system plików, zajmując miejsce bez żadnej korzyści. Mogą również generować mylące wyniki lub po prostu niechciane błędy, gdy programy działające na wielu plikach się z nimi spotkają. Łatwo można stracić ślad uszkodzonego linku w głębokim katalogu, a następnie napotkać problemy z find lub rekurencyjnym grepem.
Niektóre programy wskazują uszkodzone linki, jak eza, które pokazuje je na czerwono:
Jak znaleźć zwisające linki, używając polecenia find
Polecenie find to niezawodny podstawowy element, idealny do wszelkiego rodzaju wyszukiwań plików. Niezależnie od tego, czy chcesz znaleźć pliki, które ostatnio się zmieniły, pliki należące do konkretnego użytkownika, czy puste katalogi, istnieje sposób na użycie find, który pomoże. A to obejmuje wyszukiwanie linków symbolicznych:
find . -type l
Opcja -type l ogranicza dopasowania tylko do linków symbolicznych, co pomaga zawęzić wyszukiwanie, ale kolejnym wyzwaniem jest zidentyfikowanie, które z tych linków są uszkodzone. Rozwiązanie zależy od wersji polecenia find, której używasz.
Nowoczesny GNU find jest najbardziej użyteczny, ponieważ obsługuje opcję -xtype:
find . -xtype l
Opcja -xtype oznacza w zasadzie "rozwiąż łańcuchy linków symbolicznych przed sprawdzeniem przeciwko temu typowi." Ponieważ plik może pozostać linkiem tylko wtedy, gdy to rozwiązanie zawiedzie, resultantowe pliki muszą być uszkodzonymi linkami.
Starsze wersje find, w tym wersja zainstalowana na macOS Tahoe, mogą nie obsługiwać tego argumentu, więc będziesz potrzebować alternatywy. Na szczęście, istnieje opcja -L. Działa ona bardzo podobnie do -xtype, ale nie sprawdza typu pliku; po prostu stara się rozwiązać wszelkie linki. Wciąż musisz używać sprawdzenia -type w połączeniu z tym:
find -L . -type l
Inna ważna różnica polega na tym, że -L podąża za linkami symbolicznymi podczas rekurencyjnego zstępowania find do katalogów. Jeśli masz dziwny link w głębokim katalogu, który wskazuje na / (tj. root), skończysz przeszukiwanie całego systemu plików. Prawdopodobnie nie chcesz tego robić, dlatego -L nie jest domyślnym ustawieniem.
Naprawą tego jest użycie find do znalezienia wszystkich linków symbolicznych, a następnie użycie opcji -exec do sprawdzenia, czy każdy plik istnieje:
find . -type l -exec test ! -e {} \; -print
To polecenie jest nieco nieporęczne, ale działa. Opcja "-type l" znajduje linki, tak jak wcześniej, a następnie "-exec" wywołuje polecenie test z użyciem flagi -e, aby znaleźć pliki, które nie istnieją. Na koniec część "print" wypisuje nazwę pliku.
Jeśli próbujesz znaleźć uszkodzone symlinki na nowoczesnym Linuksie, "find -xtype l" powinno być wystarczające. W rzeczywistości możesz użyć polecenia find do.
Usuń uszkodzone dowiązania symboliczne, ponownie, korzystając z opcji -exec:
find . -xtype l -exec rm {} \;Ale najpierw warto sprawdzić te linki, a polecenie odpowiadające w macOS staje się jeszcze bardziej skomplikowane. Możesz chcieć ustawić alias lub stworzyć funkcję powłoki, aby nie musieć go zapamiętywać. Lub możesz skorzystać z lepszej alternatywy...
Użycie programu symlinks do znajdowania i naprawiania uszkodzonych linków
Jeśli powyższe metody wydają się niewygodne, lub jeśli regularnie masz do czynienia z problemami z dowiązaniami, powinieneś rozważyć użycie narzędzia symlinks. Ten mały program w C potrafi zlokalizować kilka typów problematycznych linków, w tym uszkodzone.
Ze względu na swoją prostotę, nie ma skomplikowanej metody instalacji, więc będziesz musiał zbudować go ze źródła. Na szczęście, jego prostota oznacza, że nie powinieneś napotkać żadnych problemów.
Pobierz repozytorium programu z GitHub i postępuj zgodnie z klasycznym, trzyetapowym procesem budowy:
./configure
make
make install
Użytkownicy macOS nie będą mieli domyślnie kompilatora C i będą musieli zainstalować Narzędzia wiersza poleceń Apple, aby zbudować symlinks. Rozpocznij, uruchamiając xcode-select --install.
Po zainstalowaniu programu jesteś gotowy do uruchomienia go, przekazując katalog do przeszukania, np:
symlinks ~/ Możesz nie otrzymać żadnych wyników z tego polecenia; domyślnie nie przeszukuje podkatalogów. Opcja -r to robi, i prawdopodobnie odkryje wiele problematycznych linków w twoim systemie plików. W rzeczywistości, kiedy pierwszy raz uruchomiłem „symlinks -r ~/ | wc -l,” mój system zgłosił ogromne 16,617! Moje dowiązania są zdecydowanie bardzo źle zorganizowane.
Nie wszystkie z nich to uszkodzone linki. symlinks raportuje cztery typy niedoskonałych linków:
- Uszkodzone (wiszące).
- Absolutne: takie linki mogą powodować problemy z punktami montażowymi.
- Bałaganiarskie: linki z niepotrzebnymi . lub / w swojej ścieżce.
- Długie: linki z niepotrzebnym .. w swojej ścieżce. Zgłaszane tylko, gdy używana jest opcja -s.
Problemy te pojawiają się, ponieważ program używany do tworzenia linków, ln, nie sprawdza ani nie normalizuje ścieżki, którą mu podajesz. Najlepsze, co oferuje, to opcja -w, która ostrzega, jeśli tworzysz wiszący link, ale i tak go tworzy. Polecenie ln nie zapewnia ochrony przed tymi innymi typami problematycznych linków.
symlinks może również pomóc w oczyszczeniu tych linków, oferując dwa rodzaje napraw.
Po pierwsze, istnieje opcja -d, która usuwa wiszące linki. Jeśli chcesz uprościć sobie życie, to najszybszy sposób, aby pozbyć się tych bezsensownych plików. Warto jednak najpierw sprawdzić listę wiszących linków, ponieważ możliwe jest ręczne naprawienie ich. Na przykład, jeśli zmieniłeś nazwę katalogu i przy okazji złamałeś zestaw linków, możesz odtworzyć każdy link ręcznie.
Drugą opcją jest -c, która naprawia linki absolutne, bałaganiarskie i — z opcją -s — długie linki. Moim zdaniem to dość radykalna opcja; te typy dowiązań są mniej problematyczne niż całkowicie uszkodzone linki. Zajmowałbym się tą opcją tylko wtedy, gdy regularnie korzystam z różnych punktów montażowych w moich systemach plików, aby uniknąć problemów z linkami absolutnymi.
Jeśli ciekawią Cię artykuły podobne do Jak Naprawić Swoje Uszkodzone Linki Symboliczne: Dobrze i Lepiej, zajrzyj do kategorii Mac i odkryj jeszcze więcej interesujących treści.
Dodaj komentarz

Możesz być zainteresowany