Törött szimbólumhivatkozások keresése és törlése Linuxon

A szimbolikus hivatkozások Linuxon fantasztikus tulajdonságok, de megszakadhatnak, és a semmire nem mutathatnak. Így találhatja meg a meghibásodott szimbolikus hivatkozásokat, tekintheti át őket, és szükség esetén eltávolíthatja őket a rendszerből.

Szimbolikus linkek 101

A szimbolikus hivatkozások, más néven „soft linkek” és „szimbólumhivatkozások”, olyan parancsikonok egyik formája, amelyek fájlokra és könyvtárakra mutathatnak. A szimbolikus hivatkozás ugyanúgy néz ki, mint egy normál fájl vagy könyvtár a fájlkezelő ablakban. Bejegyzésként is megjelenik egy terminálablak fájllistájában. A fájl vagy könyvtár, amelyre a szimbolikus hivatkozás mutat, bárhol lehet a fájlrendszer fájában.

Tegyük fel például, hogy van egy „dave-link” nevű szimbolikus hivatkozás a saját könyvtárában, amely egy „text-file.txt” nevű fájlra mutat, amely valahol máshol a fájlrendszer fájában található. A szimbolikus hivatkozáson használt parancsok automatikusan alkalmazásra kerülnek arra a fájlra, amelyre az mutat. Ha megpróbálja a cat vagy kevesebbet használni a szimbolikus hivatkozáson, akkor valójában a „text-file.txt” fájl tartalmát fogja látni.

Egy szabványos Linux-telepítés sok szimbolikus hivatkozást tartalmaz. Még ha nem is hoz létre saját maga, az operációs rendszer használja őket. Az alkalmazástelepítési rutinok gyakran használnak szimbolikus hivatkozásokat a végrehajtható fájlokra mutatáshoz. A szoftver frissítésekor a bináris fájl lecserélődik az új verzióra, és az összes szimbolikus hivatkozás a korábbiak szerint működik, mindaddig, amíg az új fájl neve megegyezik a régivel.

Könnyen láthatunk néhány szimbolikus hivatkozást az ls használatával a gyökérkönyvtárban. Egyes bejegyzések más színnel jelennek meg – az Ubuntu 20.10 tesztgépünkön világoskék színnel.

A következőket írjuk be:

ls /

A -l (hosszú lista) kapcsoló használatával mélyebbre tekinthetünk. A következő parancsot írjuk be, hogy megnézzük az összes „lib” bejegyzést és az egyetlen „bin” bejegyzést:

ls -l /lib* /bin

Minden sor elején egy „l” található, amely azt jelzi, hogy az elem szimbolikus hivatkozás. A „->” utáni szöveg azt mutatja, hogy mire mutat a szimbolikus hivatkozás. Példánkban a célpontok mind könyvtárak.

  A Prusa Slicer telepítése Linuxra

Az engedélyek olvasási, írási és végrehajtási formában szerepelnek a tulajdonos, a csoport és mások számára. Ezek alapértelmezett hamis bejegyzések. Nem tükrözik az objektumok tényleges engedélyeit, amelyekre a szimbolikus hivatkozások mutatnak. A célfájl vagy könyvtár engedélyei élveznek elsőbbséget, és ezeket a fájlrendszer tiszteletben tartja.

Törött szimbólumhivatkozások

A szimbolikus hivatkozás megszakad (vagy lóg), ha a fájlt, amelyre mutat, törli vagy másik helyre helyezi át. Ha egy alkalmazás eltávolítási rutinja nem működik megfelelően, vagy megszakad, mielőtt befejeződött volna, előfordulhat, hogy hibás szimbólumhivatkozások jelennek meg.

Ha valaki manuálisan töröl egy fájlt anélkül, hogy tudná, hogy a szimbolikus hivatkozások rá mutatnak, akkor ezek a hivatkozások nem fognak működni. Olyanok lesznek, mint az útjelző táblák, amelyek egy városra mutatnak, amelyet buldózerrel dózeroltak.

Ezt a viselkedést könnyen láthatjuk az aktuális könyvtárban található „hello” szimbolikus hivatkozás használatával. Beírjuk a következőket az ls használatával, hogy megnézzük:

ls -l

Egy „htg” nevű programra mutat a „bin” nevű könyvtárban. Ha „lefuttatjuk” a symlinket, akkor az végrehajtja helyettünk a programot:

./hello

Most a program közvetlen futtatásával ellenőrizhetjük, hogy ez történik-e:

../bin/htg

Ahogy az várható volt, ugyanazt a választ kapjuk. Töröljük a programfájlt:

rm ../bin/htg

Most, ha megnézzük a szimbolikus hivatkozást, azt látjuk, hogy pirossal szerepel, mert a Linux tudja, hogy elromlott. Azt is megmondja, mire utalt korábban, így lecserélhetjük a fájlt, újrafordíthatjuk a programot, vagy bármit megtehetünk a szimbolikus hivatkozás javításához.

Vegye figyelembe, hogy ha megpróbáljuk futtatni a szimbolikus hivatkozást, a kapott hiba a szimbolikus hivatkozás nevére hivatkozik, nem pedig annak a programnak a nevére, amelyre a szimbolikus hivatkozás mutat.

  Miért tárolják a vállalatok továbbra is egyszerű szövegben a jelszavakat?

A következőket írjuk be:

./hello

Törött szimbólumhivatkozások keresése

A kereső legtöbb modern verziója rendelkezik az xtype (bővített típus) opcióval, ami leegyszerűsíti a hibás szimbolikus hivatkozások megtalálását. Az l jelzőt az xtype mellett fogjuk használni, hogy jelezze, hogy keressen hivatkozásokat. A find és az xtype használatával a következő módon, bármely más típusjelző nélkül, az xtype a hibás hivatkozások visszaadására kényszeríti:

find . -xtype l

A parancs futtatása a teszt home könyvtárunkban jó néhány hibás szimbolikus hivatkozást talál. Vegye figyelembe, hogy a keresés alapértelmezés szerint rekurzív, tehát minden alkönyvtárban automatikusan keres.

A „hello” szimbolikus link, amit szándékosan feltörtünk, a listán szerepel, ahogy vártuk. A többi szimbolikus hivatkozás a Firefox böngészőhöz, a többi pedig a snapokhoz kapcsolódik.

Ha a kimenetet a wc-n keresztül vezetjük a -l (lines) opcióval, meg tudjuk számolni a sorokat, ami megegyezik a törött szimbolikus hivatkozások számlálásával.

A következőket írjuk be:

find . -xtype l | wc -l

Úgy értesültünk, hogy 24 hibás szimbólumunk van, amelyek semmire mutatnak.

Keresse meg, tekintse át, majd távolítsa el

Mielőtt rohanna, és törölné az összes hibás szimbolikus hivatkozást, tekintse át a find parancs eredményeit. Nézze meg, hogy van-e érvényes oka a hibás szimbólumok valamelyikének.

Néha a szimbolikus hivatkozás lehet a probléma, nem pedig a célfájl. Ha a szimbolikus hivatkozás helytelenül jött létre, akkor lehet, hogy semmire sem mutat, de a valódi cél jelen van. Ebben az esetben a szimbolikus hivatkozás újbóli létrehozása lenne a megoldás.

Az is előfordulhat, hogy egy látszólag meghibásodott szimbolikus hivatkozást másként használnak, például egy fájlzárolást vagy más go/no go jelzőt. A Firefox ezt teszi; ez az első szimbolikus link a listánkban. A Firefox azonban nem használatos a tesztgépünkön, így biztonságosan törölhetjük.

  Az AbanteCart telepítése az Ubuntu kiszolgálóra

Az is lehetséges, hogy a cél csak időszakosan van jelen, és ez az adott szoftver elvárt (és kívánt) viselkedése. Lehetséges, hogy a célfájlt egy másik gépről vagy a felhőből másolják, betölti a funkcióját, majd újra törlődik, hogy a következő ciklusban egy másik program helyettesítse.

A megszakadt szimbólumhivatkozás egy meghiúsult szoftvertelepítés tünete is lehet. Ebben az esetben a szimbolikus hivatkozás törlése helyett manuálisan javítsa ki, vagy ismételje meg a telepítést.

Ha kijavította a megőrizendő hibás hivatkozásokat, ismételje meg a parancsot a keresés végrehajtásához. A rögzített szimbolikus hivatkozásoknak ekkor hiányozniuk kell a keresési eredmények közül.

A biztonság kedvéért a legjobb, ha a szimbolikus hivatkozások eltávolítását a saját könyvtáraira korlátozza. Legyen nagyon óvatos, ha ezeket a parancsokat rootként vagy rendszerkönyvtárban futtatja.

Törött szimbólumhivatkozások eltávolítása

Az -exec (execute) kapcsoló parancsokat futtat a keresési eredményeken. Az rm segítségével töröljük az egyes hibás szimbolikus hivatkozásokat. A {} karakterlánc helyére minden egyes hibás szimbolikus hivatkozás neve kerül, amint mindegyiket megtalálja a keresés.

Pontosvesszőt (;) kell használnunk az -exec által futtatni kívánt parancsok listájának lezárásához. A pontosvessző „kilépésére” fordított perjelet () fogunk használni, így azt a find parancs részeként kezeljük, nem pedig olyasvalamiként, ami alapján Bashnak cselekednie kellene.

A következőket írjuk be:

find . -xtype l -exec rm {} ;

Visszatértünk a parancssorba, és nem jeleztük, hogy bármi történt. A hibás hivatkozások eltávolításának ellenőrzéséhez megismételjük a parancsot, hogy megkeressük őket, az alábbiak szerint:

find . -xtype l

Nincsenek egyező eredmények, ami azt jelenti, hogy a hibás szimbolikus linkeket eltávolítottuk.

Ne felejtse el először felülvizsgálni

Ismét mindig szánjon időt a szimbolikus hivatkozások listájának áttekintésére, mielőtt a törlési parancsot futtatná. Elkerülheti azok törlését, amelyekben bizonytalan, ha futtatja a törlési parancsot a megfelelő könyvtárakban.

Például a fentiekben futtathattuk volna a parancsot a „.snap” könyvtárban, majd manuálisan eltávolíthattuk volna a „hello” szimbolikus hivatkozást. Ez érintetlenül hagyta volna a Firefox zár szimbólumát.