Si të gjeni dhe fshini lidhjet e prishura në Linux


Lidhjet simbolike në Linux janë një veçori fantastike, por ato mund të prishen dhe të lihen duke treguar asgjë. Ja se si të gjeni lidhjet simbolike të prishura, t'i rishikoni ato dhe t'i hiqni ato nga sistemi juaj nëse keni nevojë.

Lidhjet simbolike 101

Lidhjet simbolike, të quajtura gjithashtu lidhje të buta dhe lidhje simbolike, janë një formë e shkurtoreve që mund të tregojnë skedarët dhe drejtoritë. Një lidhje simbolike duket si një skedar ose drejtori i rregullt në një dritare të menaxherit të skedarëve. Ai gjithashtu shfaqet si një hyrje në një skedar të listuar në një dritare terminali. Skedari ose direktoria tek e cila tregon lidhjen simbolike mund të jetë kudo në pemën e sistemit të skedarëve.

Për shembull, le të themi se keni një lidhje simbolike në direktorinë tuaj kryesore të quajtur dave-link që tregon një skedar të quajtur text-file.txt i vendosur diku tjetër në pemën e sistemit të skedarëve. Komandat që përdorni në lidhjen simbolike zbatohen automatikisht në skedarin ku ai tregon. Nëse përpiqeni të përdorni cat ose më pak në lidhjen simbolike, në fakt do të shihni përmbajtjen e skedarit text-file.txt.

Një instalim standard Linux përmban shumë lidhje simbolike. Edhe nëse nuk e krijoni vetë, sistemi operativ i përdor ato. Rutinat e instalimit të aplikacionit shpesh përdorin lidhjet simbolike për të treguar skedarët e ekzekutueshëm. Kur përditësohet softueri, skedari binar zëvendësohet me versionin e ri dhe të gjitha lidhjet simbolike vazhdojnë të punojnë si më parë, për sa kohë që emri i skedarit të ri është i njëjtë me atë të vjetër.

Ne mund t'i shohim lehtësisht disa lidhje simbolike duke përdorur ls në direktorinë rrënjë. Disa nga hyrjet shfaqen me një ngjyrë të ndryshme - në makinën tonë të testimit Ubuntu 20.10, ato shfaqen me ngjyrë blu të hapur.

Ne shtypim sa vijon:

ls /

Mund të hedhim një vështrim më të thellë duke përdorur opsionin -l (listë e gjatë). Ne shtypim komandën e mëposhtme për të parë të gjitha hyrjet lib dhe hyrjen e vetme bin:

ls -l /lib* /bin

Në fillim të çdo rreshti është një l, që tregon se artikulli është një lidhje simbolike. Teksti pas “->” tregon se çfarë tregon lidhja simbolike. Në shembullin tonë, objektivat janë të gjitha drejtoritë.

Lejet renditen si lexim, shkrim dhe ekzekutim për pronarin, grupin dhe të tjerët. Këto janë hyrje të rreme të parazgjedhura. Ato nuk pasqyrojnë lejet aktuale për objektet në të cilat tregojnë lidhjet simbolike. Janë lejet në skedarin ose drejtorinë e synuar që kanë përparësi dhe respektohen nga sistemi i skedarëve.

Lidhje simbolike të thyera

Një lidhje simbolike prishet (ose lihet e varur) kur skedari në të cilin tregon fshihet ose zhvendoset në një vend tjetër. Nëse rutina e çinstalimit të një aplikacioni nuk funksionon siç duhet, ose ndërpritet përpara se të përfundojë, mund të mbeteni me lidhje simbolike të prishura.

Nëse dikush fshin manualisht një skedar pa e ditur që lidhjet simbolike tregojnë drejt tij, ato simbollidhje nuk do të funksionojnë më. Ata do të jenë si shenjat rrugore që tregojnë një qytet që është shkatërruar me buldozer.

Ne mund ta shohim lehtësisht këtë sjellje duke përdorur një lidhje simbolike të quajtur përshëndetje në drejtorinë aktuale. Ne shtypim sa vijon, duke përdorur ls për ta parë atë:

ls -l

Ai tregon për një program të quajtur htg në një drejtori të quajtur bin. Nëse e ekzekutojmë symlink, ai ekzekuton programin për ne:

./hello

Tani mund të kontrollojmë nëse kjo është ajo që po ndodh duke ekzekutuar programin drejtpërdrejt:

../bin/htg

Siç pritej, marrim të njëjtën përgjigje. Le të fshijmë skedarin e programit:

rm ../bin/htg

Tani, kur shikojmë lidhjen simbolike, shohim se është e shënuar me të kuqe, sepse Linux e di se është i prishur. Ai gjithashtu na tregon se çfarë tregonte më parë, kështu që ne mund të zëvendësojmë skedarin, të rikompilojmë programin ose të bëjmë gjithçka që është e nevojshme për të riparuar lidhjen simbolike.

Vini re se nëse përpiqemi të ekzekutojmë lidhjen simptome, gabimi që marrim i referohet emrit të lidhjes simptome, në vend të emrit të programit në të cilin tregon lidhja simbolale.

Ne shtypim sa vijon:

./hello

Gjetja e lidhjeve simbolike të thyera

Shumica e versioneve moderne të find kanë opsionin xtype (lloj i zgjeruar), i cili thjeshton gjetjen e lidhjeve të prishura. Ne do të përdorim flamurin l me xtype, për t'i thënë që të kërkojë lidhje. Duke përdorur find dhe xtype si më poshtë, pa asnjë nga flamujt e tjerë type, detyron xtype të kthejë lidhjet e prishura:

find . -xtype l

Ekzekutimi i komandës në drejtorinë tonë të shtëpisë së testit gjen mjaft lidhje simbolesh të prishura. Vini re se kërkimi është rekursiv si parazgjedhje, kështu që kërkon automatikisht të gjitha nëndrejtoritë.

Lidhja simbolike përshëndetje që kemi prishur me qëllim është renditur, siç e prisnim. Një nga lidhjet e tjera simbolike lidhet me shfletuesin Firefox dhe pjesa tjetër lidhet me snaps.

Nëse e kalojmë daljen përmes wc me opsionin -l (linja), mund të numërojmë linjat, që është njësoj si numërimi i lidhjeve të prishura.

Ne shtypim sa vijon:

find . -xtype l | wc -l

Jemi informuar se kemi 24 lidhje simbolike të prishura që nuk tregojnë asgjë.

Gjeni, rishikoni dhe më pas Hiq

Përpara se të nxitoni dhe të fshini të gjitha lidhjet e prishura, shikoni rezultatet e komandës find. Shihni nëse ka një arsye të vlefshme për ndonjë nga lidhjet e prishura.

Ndonjëherë, problemi mund të jetë lidhja simbolike dhe jo skedari i synuar. Nëse lidhja simbolike është krijuar gabimisht, mund të tregojë asgjë, por objektivi i vërtetë është i pranishëm. Rikrijimi i lidhjes simbolike do të ishte zgjidhja në atë rast.

Është gjithashtu e mundur që një lidhje simbolike në dukje e prishur të përdoret si diçka tjetër, si për shembull një tregues i bllokimit të skedarit ose një tregues tjetër go/no go. Firefox-i e bën këtë; kjo është ajo që është lidhja e parë në listën tonë. Sidoqoftë, Firefox-i nuk përdoret në makinën tonë të testimit, kështu që është e sigurt që ne ta fshijmë atë.

Është gjithashtu e mundur që objektivi të jetë i pranishëm vetëm periodikisht, dhe kjo është sjellja e pritshme (dhe e dëshiruar) e atij softueri të veçantë. Ndoshta skedari i synuar është kopjuar nga një makinë tjetër ose cloud, ai kryen funksionin e tij dhe më pas fshihet përsëri, vetëm për t'u zëvendësuar nga një program tjetër në ciklin tjetër.

Simlink i prishur mund të jetë gjithashtu një simptomë e një instalimi të softuerit që dështoi. Në atë rast, në vend që të fshini lidhjen simbolike, duhet ta rregulloni manualisht ose ta përsërisni instalimin.

Kur të keni rregulluar lidhjet e prishura që duhet të mbani, përsëritni komandën për të kryer kërkimin. Lidhjet simbolike të fiksuara më pas duhet të mungojnë në rezultatet e kërkimit.

Për hir të sigurisë, është më mirë të kufizoni heqjet tuaja të lidhjeve simbolike në drejtoritë tuaja. Jini jashtëzakonisht të kujdesshëm ndaj ekzekutimit të këtyre komandave si rrënjë ose në drejtoritë e sistemit.

Heqja e lidhjeve simbolike të thyera

Opsioni -exec (ekzekutimi) ekzekuton komanda në rezultatet e kërkimit gjeni. Ne do të përdorim rm për të fshirë çdo lidhje simbolike të prishur. Vargu {} zëvendësohet me emrin e secilës lidhje simbolike të prishur pasi secila zbulohet nga find.

Duhet të përdorim një pikëpresje (;) për të përfunduar listën e komandave që duam të ekzekutojë -exec. Ne do të përdorim një vijë të prapme (\) për të shpëtuar nga pikëpresja, kështu që trajtohet si pjesë e komandës find, në vend të diçkaje Bash duhet të veprohet.

Ne shtypim sa vijon:

find . -xtype l -exec rm {} \;

Ne jemi kthyer në vijën e komandës pa asnjë tregues se diçka ka ndodhur. Për të verifikuar që lidhjet e prishura janë hequr, ne përsërisim komandën për t'i kërkuar ato, si më poshtë:

find . -xtype l

Nuk ka rezultate që përputhen, që do të thotë se lidhjet e prishura janë hequr.

Mos harroni të rishikoni së pari

Përsëri, merrni gjithmonë kohë për të rishikuar një listë të lidhjeve simbolike përpara se të ekzekutoni komandën për t'i fshirë ato. Ju mund të shmangni fshirjen e atyre që nuk jeni të sigurt duke ekzekutuar komandën për t'i fshirë ato në drejtoritë e duhura.

Për shembull, më lart, ne mund të kishim ekzekutuar komandën në drejtorinë .snap dhe më pas të hiqnim manualisht lidhjen simbolike të vetme përshëndetje. Kjo do ta kishte lënë të paprekur lidhjen e kyçjes së Firefox-it.