De symbolische koppelingen op Linux zijn een fantastische eigenschap, maar ze kunnen gebroken en achtergelaten worden naar niets. Hier leest u hoe u gebroken symbolische koppelingen kunt vinden, herzien ze ze en verwijder ze van uw systeem als u dat nodig hebt.
Symbolische links 101
Symbolische koppelingen , ook wel "zachte links" genoemd en "symlinks", zijn een vorm van snelkoppelingen die kunnen wijzen op bestanden en mappen. Een symlink lijkt net als een regelmatig bestand of map in een venster Bestandsbeheer. Het verschijnt ook als een vermelding in een bestandsvermelding in een terminalvenster. Het bestand of de map waartoe de Symlink-punten overal in het bestandssysteemboom kan zijn.
Laten we bijvoorbeeld zeggen dat je een symlink in je thuismap hebt genaamd "Dave-Link" die wijst op een bestand met de naam "Text-File.txt" die ergens anders in de Boom van het bestandssysteem bevindt. Opdrachten die u gebruikt op de Symlink worden automatisch toegepast op het bestand waarnaar IT IT-punten. Als u probeert te gebruiken
kat
of
minder
Op de Symlink ziet u de inhoud van het bestand "Text-file.txt" daadwerkelijk.
Een standaard Linux-installatie bevat veel symlinks. Zelfs als je jezelf niet maakt, gebruikt het besturingssysteem ze. Toepassing Installatie-routines gebruiken vaak symlinks om te wijzen op executables-bestanden. Wanneer de software wordt bijgewerkt, wordt het binaire bestand vervangen door de nieuwe versie, en alle symlinks voeren het werken op, zolang de naam van het nieuwe bestand hetzelfde is als het oude.
We kunnen eenvoudig sommige symlinks zien door gebruik te maken
ls
in de hoofdmap. Sommige van de inzendingen worden weergegeven in een andere kleur-op onze
Ubuntu 20.10
Testmachine, ze worden weergegeven in lichtblauw.
We typen het volgende:
LS /
We kunnen een diepere uitstraling nemen door de
-L
(lang vermelding) optie. We typen de volgende opdracht om alle "lib" -vermeldingen en de single "bin" -invoer te bekijken:
LS -L / LIB * / BIN
Aan het begin van elke regel is een "L", die aangeeft dat het artikel een symlink is. De tekst na "- & GT; shows over wat de symlink wijzen. In ons voorbeeld zijn de doelen allemaal directory's.
De machtigingen worden vermeld als gelezen, schrijven en uitvoeren voor de eigenaar, de groep en anderen. Dit zijn standaard nep-inzendingen. Ze weerspiegelen niet de feitelijke machtigingen op de objecten waarbij het symlinkt punt. Het zijn de rechten op het doelbestand of de map die voorrang hebben en worden gehonoreerd door het bestandssysteem.
Gebroken symlinks
Een Symlink is kapot (of links bungelend) wanneer het bestand waarop IT-punten wordt verwijderd of verplaatst naar een andere locatie. Als de verwijderingsroutine van een toepassing niet goed werkt, of wordt onderbroken voordat het is voltooid, kan u mogelijk met gebroken symlinks worden achtergelaten.
Als iemand handmatig een bestand verwijdert zonder Symlinks erop te kennen, zullen die symlinks niet langer werken. Ze zullen als verkeersborden zijn die naar een stad zijn die in bulldozed is.
We kunnen dit gedrag gemakkelijk zien met behulp van een symlink genaamd "Hallo" in de huidige map. We typen het volgende, met
ls
het zien:
LS -L
Het wijst naar een programma genaamd "HTG" in een directory met de naam "Bin". Als we de symlink "uitvoeren", voert het het programma voor ons uit:
./ Hallo
We kunnen nu controleren of dit gebeurt door het programma rechtstreeks te draaien:
../ bin / htg
Zoals verwacht, krijgen we hetzelfde antwoord. Laten we het programmabestand verwijderen:
RM ../bin/htg
Nu, wanneer we naar de symlink kijken, zien we dat het in het rood wordt vermeld omdat Linux weet dat het kapot is. Het vertelt ons ook over wat het voor het gewend was, zodat we het bestand kunnen vervangen, het programma opnieuw compileren, of doen wat nodig is om de symlink te repareren.
Merk op dat als we proberen de Symlink uit te voeren, de fout die we krijgen verwijst naar de naam van Symlink, in plaats van de naam van het programma waarop de Symlink-punten.
We typen het volgende:
./ Hallo
Het vinden van gebroken symlinks
Meest moderne versies van
vind
hebben de
xtype
(uitgebreid type) optie,
wat vereenvoudigt met het vinden van gebroken symlinks
. We gebruiken de
l
met
xtype
, om het te vertellen om naar links te zoeken. Gebruik makend van
vind
en
xtype
als volgt, zonder een van de ander
type
vlaggen, krachten
xtype
om gebroken links te retourneren:
Zoek. -XTYPE L
Het opdracht uitvoeren in onze test Home Directory vindt nogal wat gebroken symlinks. Merk op dat de zoekopdracht standaard recursief is, zodat deze automatisch alle subdirectories doorzoekt.
De Symlink "Hallo" die we opzettelijk braken, wordt vermeld, zoals we hadden verwacht. Een van de andere symlinks is gerelateerd aan de Firefox-browser en de rest is geassocieerd met snaps.
Als we de uitvoer pijpen
wc
met de
-L
(regels) Optie, we kunnen de lijnen tellen, wat hetzelfde is als het tellen van de gebroken symlinks.
We typen het volgende:
Zoek. -XTYPE L | WC -L
We hebben op de hoogte gebracht dat we 24 gebroken symlinks hebben die naar Niets wijzen.
Zoek, review en verwijder vervolgens
Voordat je je binnenkijkt en alle gebroken symlinks verwijdert, kijk dan door de resultaten van de
vind
opdracht. Kijk of er een geldige reden is voor een van de gebroken symblinks.
Soms is de symlink misschien het probleem, in plaats van het doelbestand. Als de symlink onjuist is gemaakt, kan het op niets wijzen, maar het echte doelwit is aanwezig. Het opnieuw creëren van de symlink zou in dat geval de oplossing zijn.
Het is ook mogelijk dat een blijkbaar verbroken symlink wordt gebruikt als iets anders, zoals een indicator van een bestandslot of andere GO / NO GO-indicator. Firefox doet dit; Dat is wat de eerste symlink in onze lijst is. Firefox wordt echter niet gebruikt op onze testmachine, dus het is veilig voor ons om het te verwijderen.
Het is ook mogelijk dat het doel alleen periodiek aanwezig is, en dit is het verwachte (en gewenste) gedrag van die specifieke software. Misschien wordt het doelbestand gekopieerd van een andere machine of de cloud, het uitvoert zijn functie en wordt vervolgens opnieuw verwijderd, alleen om te worden vervangen door een ander programma in de volgende cyclus.
De gebroken symlink kan ook een symptoom zijn van een software-installatie die is mislukt. In dat geval, in plaats van het verwijderen van de symlink, moet u het handmatig oplossen of de installatie herhalen.
Wanneer u de kapotte links hebt opgelost, moet u het opdracht herhalen om de zoekopdracht uit te voeren. De vaste symlinks moeten dan afwezig zijn bij de zoekresultaten.
Omwille van de veiligheid is het het beste om uw Symlink-verhuizingen te beperken tot uw eigen mappen. Wees uiterst op hun hoede om deze opdrachten als root of op systeemmappen te draaien.
Het verwijderen van gebroken symlinks
De
-exec
(Execute) Optie wordt opdrachten uitgevoerd op de
vind
Zoekresultaten. We gaan gebruiken
rm
om elke gebroken symlink te verwijderen. De
{}
String wordt vervangen door de naam van elke gebroken symlink, zoals ze worden ontdekt door
vind
.
We moeten een puntkomma gebruiken (
;
) Om de lijst met opdrachten te beëindigen die we willen
-exec
rennen. We gebruiken een backslash (
\
) om de puntkolom te "ontsnappen", dus het wordt behandeld als onderdeel van de
vind
commando, in plaats van iets
Bash
zou moeten handelen.
We typen het volgende:
Zoek. -XTYPE L -EXEC RM {} \;
We zijn teruggestuurd naar de opdrachtprompt zonder aanwijzing dat er iets is gebeurd. Om te controleren of de gebroken links zijn verwijderd, herhalen we de opdracht om ze te zoeken, als volgt:
Zoek. -XTYPE L
Er zijn geen passende resultaten, wat betekent dat de gebroken symlinks zijn verwijderd.
Vergeet niet om eerst te beoordelen
Nogmaals, neem altijd de tijd om een lijst met symlinks te bekijken voordat u de opdracht uitvoert om ze te verwijderen. U kunt vermijden dat u ergens ongetwijfeld wilt verwijderen door de opdracht uit te voeren om ze in de juiste mappen te verwijderen.
Hierboven hadden we bijvoorbeeld de opdracht in de map ".Snap" kunnen uitvoeren en vervolgens de eenzame "Hallo" -symlink handmatig verwijderen. Dit zou het Firefox Lock Symlink onaangeroerd hebben verlaten.