Jak najít a odstranit nefunkční symbolické odkazy v systému Linux

Symbolické odkazy na Linuxu jsou fantastickou funkcí, ale mohou se přerušit a nechat ukazující na nic. Zde je návod, jak najít nefunkční symbolické odkazy, zkontrolovat je a v případě potřeby odstranit ze systému.

Symbolické odkazy 101

Symbolické odkazy, nazývané také „softlinks“ a „symlinks“, jsou formou zkratek, které mohou ukazovat na soubory a adresáře. Symbolický odkaz vypadá stejně jako běžný soubor nebo adresář v okně správce souborů. Zobrazuje se také jako záznam ve výpisu souborů v okně terminálu. Soubor nebo adresář, na který odkazuje symbolický odkaz, může být kdekoli ve stromu systému souborů.

Řekněme například, že máte ve svém domovském adresáři symbolický odkaz nazvaný „dave-link“, který ukazuje na soubor s názvem „text-file.txt“ umístěný někde jinde ve stromu souborového systému. Příkazy, které použijete na symbolický odkaz, se automaticky použijí na soubor, na který odkazuje. Pokud se pokusíte v symbolickém odkazu použít cat nebo less, ve skutečnosti uvidíte obsah souboru „text-file.txt“.

Standardní instalace Linuxu obsahuje mnoho symbolických odkazů. I když sami žádné nevytvoříte, operační systém je používá. Instalační rutiny aplikací často používají symbolické odkazy, které ukazují na spustitelné soubory. Po aktualizaci softwaru je binární soubor nahrazen novou verzí a všechny symbolické odkazy fungují jako dříve, pokud je název nového souboru stejný jako starý.

Některé symbolické odkazy můžeme snadno vidět pomocí ls v kořenovém adresáři. Některé položky jsou zobrazeny v jiné barvě – na našem testovacím počítači Ubuntu 20.10 jsou zobrazeny světle modrou barvou.

Zadáme následující:

ls /

Můžeme se na to podívat hlouběji pomocí volby -l (dlouhý výpis). Zadáme následující příkaz, abychom se podívali na všechny položky „lib“ a jednu položku „bin“:

ls -l /lib* /bin

Na začátku každého řádku je „l“, což znamená, že položka je symbolický odkaz. Text za „->“ ukazuje, na co symbolický odkaz ukazuje. V našem příkladu jsou cíle všechny adresáře.

  Jak používat příkaz FTP v systému Linux

Oprávnění jsou uvedena jako čtení, zápis a spouštění pro vlastníka, skupinu a další. Toto jsou výchozí falešné záznamy. Neodrážejí skutečná oprávnění k objektům, na které symbolické odkazy ukazují. Jsou to oprávnění k cílovému souboru nebo adresáři, která mají přednost a jsou dodržována systémem souborů.

Nefunkční symbolické odkazy

Symbolický odkaz se přeruší (nebo zůstane viset), když je soubor, na který ukazuje, odstraněn nebo přesunut na jiné místo. Pokud rutina odinstalace aplikace nefunguje správně nebo je přerušena před dokončením, mohou vám zůstat nefunkční symbolické odkazy.

Pokud někdo ručně odstraní soubor, aniž by věděl, že na něj odkazují symbolické odkazy, tyto symbolické odkazy již nebudou fungovat. Budou jako dopravní značky ukazující na město, které bylo srovnáno buldozerem.

Toto chování můžeme snadno vidět pomocí symbolického odkazu s názvem „ahoj“ v aktuálním adresáři. Zadáme následující a pomocí ls to zobrazíme:

ls -l

Ukazuje na program s názvem „htg“ v adresáři s názvem „bin“. Pokud symbolický odkaz „spustíme“, spustí za nás program:

./hello

Nyní můžeme zkontrolovat, zda se to děje přímým spuštěním programu:

../bin/htg

Jak se dalo očekávat, dostaneme stejnou odpověď. Smažeme soubor programu:

rm ../bin/htg

Nyní, když se podíváme na symbolický odkaz, vidíme, že je uveden červeně, protože Linux ví, že je nefunkční. Také nám říká, na co dříve ukazoval, takže můžeme nahradit soubor, překompilovat program nebo udělat cokoli, co je nutné k opravě symbolického odkazu.

Všimněte si, že pokud se pokusíme spustit symbolický odkaz, chyba, kterou dostaneme, odkazuje na název symbolického odkazu, nikoli na název programu, na který symbolický odkaz ukazuje.

  Jak používat rclone k zálohování na Disk Google v systému Linux

Zadáme následující:

./hello

Hledání nefunkčních symbolických odkazů

Většina moderních verzí find má možnost xtype (rozšířený typ), což zjednodušuje hledání nefunkčních symbolických odkazů. Použijeme příznak l s xtype, abychom mu řekli, aby vyhledával odkazy. Použití find a xtype následujícím způsobem, bez jakýchkoli jiných příznaků typu, přinutí xtype vrátit nefunkční odkazy:

find . -xtype l

Spuštěním příkazu v našem testovacím domovském adresáři se najde několik nefunkčních symbolických odkazů. Všimněte si, že vyhledávání je ve výchozím nastavení rekurzivní, takže automaticky prohledává všechny podadresáře.

Symbolický odkaz „ahoj“, který jsme úmyslně porušili, je uveden, jak jsme očekávali. Jeden z dalších symbolických odkazů souvisí s prohlížečem Firefox a ostatní jsou spojeny se snímky.

Pokud výstup propojíme wc s volbou -l (řádky), můžeme počítat řádky, což je stejné jako počítání přerušených symbolických odkazů.

Zadáme následující:

find . -xtype l | wc -l

Jsme informováni, že máme 24 nefunkčních symbolických odkazů, které ukazují na nic.

Najít, zkontrolovat a poté odebrat

Než se vrhnete dovnitř a odstraníte všechny nefunkční symbolické odkazy, prohlédněte si výsledky příkazu find. Podívejte se, zda existuje platný důvod pro některý z nefunkčních symbolických odkazů.

Někdy může být problémem spíše symbolický odkaz než cílový soubor. Pokud byl symbolický odkaz vytvořen nesprávně, nemusí ukazovat na nic, ale skutečný cíl je přítomen. V takovém případě by opravou bylo opětovné vytvoření symbolického odkazu.

Je také možné, že se zdánlivě poškozený symbolický odkaz používá jako něco jiného, ​​jako je indikátor uzamčení souboru nebo jiný indikátor go/no go. Firefox to dělá; to je první symbolický odkaz v našem seznamu. Firefox se však na našem testovacím počítači nepoužívá, takže jej můžeme bezpečně smazat.

  Jak nainstalovat editor markdown Zettlr na Linux

Je také možné, že cíl je přítomen pouze pravidelně, a to je očekávané (a požadované) chování tohoto konkrétního softwaru. Možná je cílový soubor zkopírován z jiného počítače nebo cloudu, plní svou funkci a poté je znovu smazán, aby byl v dalším cyklu nahrazen jiným programem.

Nefunkční symbolický odkaz může být také příznakem selhání instalace softwaru. V takovém případě byste místo odstranění symbolického odkazu měli buď ručně opravit, nebo zopakovat instalaci.

Když opravíte nefunkční odkazy, které si musíte ponechat, opakujte příkaz pro provedení vyhledávání. Pevné symbolické odkazy by pak ve výsledcích vyhledávání neměly chybět.

Z bezpečnostních důvodů je nejlepší omezit odstraňování symbolických odkazů na vaše vlastní adresáře. Buďte extrémně opatrní při spouštění těchto příkazů jako root nebo v systémových adresářích.

Odstranění poškozených symbolických odkazů

Volba -exec (execute) spouští příkazy ve výsledcích hledání hledání. K odstranění každého nefunkčního symbolického odkazu použijeme rm. Řetězec {} je nahrazen názvem každého přerušeného symbolického odkazu, jakmile je každý z nich objeven funkcí find.

K ukončení seznamu příkazů, které chceme -exec, musíme použít středník (;). K „uniknutí“ středníku použijeme zpětné lomítko (), takže se s ním zachází jako se součástí příkazu find, nikoli jako něco, podle čeho by měl Bash jednat.

Zadáme následující:

find . -xtype l -exec rm {} ;

Jsme vráceni do příkazového řádku bez náznaku, že se něco stalo. Abychom ověřili, že nefunkční odkazy byly odstraněny, zopakujeme příkaz, abychom je našli, následovně:

find . -xtype l

Neexistují žádné odpovídající výsledky, což znamená, že poškozené symbolické odkazy byly odstraněny.

Nezapomeňte nejprve zkontrolovat

Opět si vždy udělejte čas na kontrolu seznamu symbolických odkazů, než spustíte příkaz k jejich odstranění. Můžete se vyhnout odstranění všech, o kterých si nejste jisti, spuštěním příkazu k jejich odstranění v příslušných adresářích.

Například výše jsme mohli spustit příkaz v adresáři „.snap“ a poté ručně odstranit osamocený symbolický odkaz „ahoj“. To by ponechalo symbolický odkaz zámku Firefoxu nedotčený.