Cum funcționează PATH în Bash

How Does Path Work Bash



Când tastați o comandă în terminalul Linux, în general apelați un program pentru a face o anumită treabă, de exemplu, eu sunt , CD , rm , mkdir , etc. Toate aceste programe sunt localizate undeva în sistemul de fișiere, nu? De unde știe bash unde sunt aceste programe?

Aici intră în joc variabilele de mediu, în special variabila PATH. Această variabilă este responsabilă pentru a spune bash unde să caute acele programe. Să vedem cum funcționează PATH și cum să vizualizăm / modificăm PATH.







Variabila de mediu și $ PATH

În terminologia shell-ului, mediul este o zonă pe care shell-ul o construiește de fiecare dată când începe o sesiune. Pentru a gestiona mediul, există variabile de mediu care denotă diferite părți ale mediului. Valoarea variabilei poate fi șir, locația directorului, valoare sau altele.



PATH este o astfel de variabilă de mediu care ține evidența anumitor directoare. În mod implicit, variabila PATH conține următoarele locații.



  • / usr / bin
  • / usr / sbin
  • / usr / local / bin
  • / usr / local / sbin
  • /a.m
  • / sbin
  • / snap / bin (dacă Snap este instalat)

Doriți să vedeți ce directoare sunt înregistrate în prezent în PATH? Porniți un terminal și rulați următoarea comandă.





$aruncat $ PATH

Aici, semnul $ este pentru a indica o variabilă. The aruncat comanda imprimă valoarea variabilei PATH.



Acum, de ce această variabilă de mediu specifică este atât de importantă? Acest lucru se datorează modului în care shell-ul și sistemul în ansamblu îl tratează. Variabila PATH stochează unde pot fi găsite executabile. Ori de câte ori este executată orice comandă, shell-ul caută directoarele PATH pentru fișierul executabil țintă și îl rulează.

De exemplu, să testăm cu aruncat comanda. Aici, execut o comandă de ecou.

$aruncatSalut Lume!

Unde este fișierul executabil aruncat ? Rulați următoarea comandă pentru a afla.

$care aruncat

După cum putem vedea, aruncat executabil se află la / usr / bin / echo. Unde se află? Să aflăm.

$care care

De asemenea, se află la / usr / bin / which. Majoritatea instrumentelor de comandă se află sub directorul / usr / bin. Aici, bash consultă PATH pentru locațiile pentru a căuta executabilul (executările) unei comenzi.

Modificarea PATH

Înainte de a modifica valoarea PATH, este important să-i înțelegem structura. Rulați din nou comanda pentru a verifica valoarea PATH.

$aruncat $ PATH

Observați că fiecare dintre directoare este separat de un semn:.

Adăugarea directorului la PATH

Pentru a adăuga un director personalizat la PATH, vom lua ajutorul fișierului bashrc. Este un script bash special, care se încarcă de fiecare dată când începe o nouă sesiune bash. Rețineți că fișierul bashrc este unic pentru fiecare utilizator din sistemul Linux.

Deschideți fișierul bashrc într-un editor de text. Dacă fișierul bashrc nu este deja prezent, atunci editorul îl va crea automat.

$am venit~/.bashrc

Aici, este bashrc implicit care vine cu Ubuntu. Mergeți la ultimul fișier (dacă există) și adăugați următoarea linie.

$export CALE='$ PATH: / '

Aici, noua valoare a variabilei PATH va fi vechea variabilă împreună cu noul director pe care tocmai l-am adăugat.

Salvați fișierul și spuneți lui bash să îl reîncarce.

$sursă~/.bashrc

Să verificăm dacă noua cale a fost adăugată cu succes.

$aruncat $ PATH

Voila! PATH a fost actualizat cu succes! Acum, bash va căuta, de asemenea, noua cale pentru executabil (e). Am deja un scenariu demo.sh pe desktop. Să vedem dacă bash îl poate apela fără a specifica locația exactă.

$demo.sh

Da, bash îl poate apela direct fără nicio problemă.

Se elimină directorul din PATH

Nu există o modalitate simplă de a adăuga / elimina directoare din PATH. Lasă-mă să explic.

Valoarea PATH este de fapt fixată. Atunci, ce zici de trucul bashrc? Bashrc este un script bash care bash se încarcă de fiecare dată când începe o sesiune. În bashrc, tocmai am declarat că noua valoare a PATH va fi valoarea implicită și directorul definit de utilizator. Acum, de fiecare dată când bash se încarcă, vede că bashrc spune să atribuie o nouă valoare PATH și asta face.

În mod similar, dacă vrem să eliminăm un director din PATH, trebuie să redistribuim o valoare diferită a PATH în bashrc, astfel încât de fiecare dată când începe bash, acesta să utilizeze valoarea modificată.

Să aruncăm o privire la acest exemplu. Sunt dispus să elimin directorul ~ / Desktop din PATH.

$aruncat $ PATH | sed -Și 's /: ~ / Desktop $ //'

Dacă directorul ar fi / home / greșit / dir, comanda ar arăta astfel.

$aruncat $ PATH | sed -Și 's /: / home / wrong / dir $ //'

Aici, partea interesantă este instrumentul sed. Aflați mai multe despre sed Aici și Aici . Pe scurt, folosind sed, modificăm rezultatul aruncat comanda. Acum, putem folosi această ieșire modificată pentru a schimba valoarea PATH.

Deschideți bashrc într-un editor de text și adăugați următoarele rânduri. Păstrez în mod intenționat liniile anterioare pentru a dovedi că funcționează.

$export CALE='$ (echo $ PATH | sed -e 's /: ~ / Desktop $ //')'

Alternativ, puteți seta manual și valoarea PATH. Este un proces dificil, dar mai simplu și mai simplu.

$export CALE=/usr/local/sbin:/usr/local/a.m:/usr/sbin:/usr/a.m:/sbin:/a.m:
/usr/jocuri:/usr/local/jocuri:/trage/a.m

Aici, valoarea comenzii va fi atribuită PATH. Salvați fișierul și reîncărcați bashrc.

$sursă~/.bashrc

Să verificăm rezultatul.

$aruncat $ PATH

Valoarea PATH este actualizată!

Gânduri finale

În bash, variabila PATH este una importantă. Orice program care rulează prin sesiunea bash moștenește variabila, deci este important ca PATH să includă numai directoarele necesare. Adăugarea mai multor directoare va adăuga redundanță doar la sistem.

Pentru a vedea toate variabilele de mediu pentru bash, rulați această comandă. Prima parte de comandă va returna toate variabilele de mediu și a doua parte va sorta ieșirea în ordine crescătoare.

$env | fel

Doriți să vă condimentați experiența bash? Alias-urile Bash oferă un mod unic de a accelera și a condimenta lucrurile. Aflați mai multe despre pseudonimele bash .

Bucurați-vă!