Sådan finder og sletter du ødelagte symbollinks på Linux

De symbolske links på Linux er en fantastisk funktion, men de kan gå i stykker og pege på ingenting. Sådan finder du ødelagte symbolske links, gennemgår dem og fjerner dem fra dit system, hvis du har brug for det.

Symbolske links 101

Symbolske links, også kaldet “bløde links” og “symlinks”, er en form for genveje, der kan pege på filer og mapper. Et symbollink ligner en almindelig fil eller mappe i et filhåndteringsvindue. Det vises også som en post i en filliste i et terminalvindue. Filen eller mappen, som symbollinket peger på, kan være hvor som helst i filsystemtræet.

Lad os f.eks. sige, at du har et symbollink i din hjemmemappe kaldet “dave-link”, der peger på en fil kaldet “text-file.txt”, der er placeret et andet sted i filsystemtræet. Kommandoer, du bruger på symbollinket, anvendes automatisk på filen, som den peger på. Hvis du prøver at bruge cat eller mindre på symbollinket, vil du faktisk se indholdet af filen “text-file.txt”.

En standard Linux-installation indeholder mange symbollinks. Selvom du ikke selv opretter dem, bruger operativsystemet dem. Programinstallationsrutiner bruger ofte symbolske links til at pege på eksekverbare filer. Når softwaren er opdateret, erstattes den binære fil med den nye version, og alle symbollinks fortsætter med at fungere som før, så længe den nye fils navn er det samme som den gamle.

Vi kan nemt se nogle symbollinks ved at bruge ls i rodmappen. Nogle af posterne vises i en anden farve – på vores Ubuntu 20.10-testmaskine vises de i lyseblåt.

Vi skriver følgende:

ls /

Vi kan tage et dybere kig ved at bruge muligheden -l (lang liste). Vi skriver følgende kommando for at se på alle “lib”-posterne og den enkelte “bin”-indgang:

ls -l /lib* /bin

I starten af ​​hver linje er et “l”, som angiver, at elementet er et symbollink. Teksten efter “->” viser, hvad symbollinket peger på. I vores eksempel er målene alle mapper.

  Sådan installeres qTox-klienten på Linux

Tilladelserne er angivet som læse, skrive og udføre for ejeren, gruppen og andre. Disse er standard falske poster. De afspejler ikke de faktiske tilladelser på de objekter, som symbollinkene peger på. Det er tilladelserne på målfilen eller mappen, der har forrang og respekteres af filsystemet.

Ødelagte symbollinks

Et symbolsk link er brudt (eller efterladt dinglende), når filen, som den peger på, slettes eller flyttes til en anden placering. Hvis en applikations afinstallationsrutine ikke fungerer korrekt eller afbrydes, før den er fuldført, kan du stå tilbage med ødelagte symbollinks.

Hvis nogen manuelt sletter en fil uden at vide, at symlinks peger på den, vil disse symlinks ikke længere virke. De vil være som vejskilte, der peger mod en by, der er blevet bulldozeret.

Vi kan nemt se denne adfærd ved at bruge et symbollink kaldet “hej” i den aktuelle mappe. Vi skriver følgende ved at bruge ls for at se det:

ls -l

Det peger på et program kaldet “htg” i en mappe kaldet “bin.” Hvis vi “kører” symbollinket, udfører det programmet for os:

./hello

Vi kan nu kontrollere, om dette er, hvad der sker, ved at køre programmet direkte:

../bin/htg

Som forventet får vi samme respons. Lad os slette programfilen:

rm ../bin/htg

Når vi nu ser på symbollinket, ser vi, at det er opført med rødt, fordi Linux ved, at det er brudt. Den fortæller os også, hvad den plejede at pege på, så vi kan erstatte filen, genkompilere programmet eller gøre, hvad der er nødvendigt for at reparere symbollinket.

Bemærk, at hvis vi forsøger at køre symlinket, refererer fejlen vi får til symlinknavnet, snarere end navnet på det program, som symlinket peger på.

Vi skriver følgende:

./hello

Find ødelagte symbollinks

De fleste moderne versioner af find har muligheden xtype (udvidet type), som forenkler at finde ødelagte symbollinks. Vi bruger flaget l med xtype for at fortælle det, at det skal søge efter links. Brug af find og xtype som følger, uden nogen af ​​de andre typeflag, tvinger xtype til at returnere ødelagte links:

find . -xtype l

Når du kører kommandoen i vores test-hjemmemappe, finder du en hel del ødelagte symbollinks. Bemærk, at søgningen er rekursiv som standard, så den søger automatisk i alle undermapper.

  Sådan installeres JetBrains DataGrip på Linux

“Hej” symbollinket, vi brød med vilje, er angivet, som vi forventede. Et af de andre symbollinks er relateret til Firefox-browseren, og resten er forbundet med snaps.

Hvis vi piper output gennem wc med muligheden -l (linjer), kan vi tælle linjerne, hvilket er det samme som at tælle de ødelagte symbollinks.

Vi skriver følgende:

find . -xtype l | wc -l

Vi er informeret om, at vi har 24 ødelagte symbollinks, der peger på ingenting.

Find, Gennemse og derefter Fjern

Før du skynder dig ind og sletter alle ødelagte symbollinks, skal du se resultaterne af find-kommandoen igennem. Se om der er en gyldig grund til nogle af de ødelagte symbollinks.

Nogle gange kan symlinket være problemet snarere end målfilen. Hvis symbollinket blev oprettet forkert, peger det måske på ingenting, men det rigtige mål er til stede. Genoprettelse af symbollinket ville være løsningen i det tilfælde.

Det er også muligt, at et tilsyneladende brudt symlink bliver brugt som noget andet, såsom en indikator for en fillås eller en anden go/no go-indikator. Firefox gør dette; det er det første symbollink på vores liste. Firefox bruges dog ikke på vores testmaskine, så det er sikkert for os at slette det.

Det er også muligt, at målet kun er til stede med jævne mellemrum, og dette er den forventede (og ønskede) adfærd for den pågældende software. Måske er målfilen kopieret fra en anden maskine eller skyen, den udfører sin funktion og bliver derefter slettet igen, kun for at blive erstattet af et andet program i næste cyklus.

  Sådan sikkerhedskopieres Steam-spil på Linux

Det ødelagte symbollink kan også være et symptom på en softwareinstallation, der mislykkedes. I så fald bør du i stedet for at slette symbollinket enten reparere det manuelt eller gentage installationen.

Når du har rettet de ødelagte links, du skal beholde, skal du gentage kommandoen for at udføre søgningen. De faste symbollinks skulle så være fraværende i søgeresultaterne.

For en sikkerheds skyld er det bedst at begrænse dine symlink-fjernelser til dine egne mapper. Vær ekstremt forsigtig med at køre disse kommandoer som root eller på systemmapper.

Fjernelse af ødelagte symbollinks

Indstillingen -exec (execute) kører kommandoer på søgeresultaterne. Vi kommer til at bruge rm til at slette hvert ødelagt symbollink. {}-strengen erstattes med navnet på hvert brudt symbollink, efterhånden som hver enkelt bliver opdaget af find.

Vi skal bruge et semikolon (;) for at afslutte listen over kommandoer, som vi vil have -exec til at køre. Vi bruger en omvendt skråstreg () for at “undslippe” semikolonet, så det behandles som en del af find-kommandoen, snarere end noget Bash burde handle på.

Vi skriver følgende:

find . -xtype l -exec rm {} ;

Vi vender tilbage til kommandoprompten uden indikation af, at der er sket noget. For at bekræfte, at de ødelagte links er blevet fjernet, gentager vi kommandoen for at lede efter dem, som følger:

find . -xtype l

Der er ingen matchende resultater, hvilket betyder, at de ødelagte symbollinks er blevet fjernet.

Husk at gennemgå først

Igen skal du altid tage dig tid til at gennemgå en liste over symbolske links, før du kører kommandoen for at slette dem. Du kan undgå at slette noget, du er usikker på, ved at køre kommandoen for at slette dem i de relevante mapper.

For eksempel ovenfor kunne vi have kørt kommandoen i “.snap”-mappen og derefter manuelt fjernet det ensomme “hej”-symbollink. Dette ville have ladet Firefox-låsens symbollink uberørt.