Hoe werkt PATH in Bash

How Does Path Work Bash



Wanneer u een opdracht typt in de Linux-terminal, roept u over het algemeen een programma aan om een ​​bepaalde taak uit te voeren, bijvoorbeeld: ls , CD , rm , mkdir , enz. Al deze programma's bevinden zich ergens in het bestandssysteem, toch? Hoe weet bash waar deze programma's zijn?

Hier komen de omgevingsvariabelen in het spel, vooral de PATH-variabele. Deze variabele is verantwoordelijk voor het vertellen van bash waar die programma's moeten worden gezocht. Laten we eens kijken hoe PATH werkt en hoe PATH te bekijken/wijzigen.







Omgevingsvariabele en $PATH

In de shell-terminologie is de omgeving een gebied dat de shell bouwt telkens wanneer een sessie wordt gestart. Om de omgeving te beheren, zijn er omgevingsvariabelen die verschillende delen van de omgeving aanduiden. De waarde van de variabele kan string, directorylocatie, waarde of andere zijn.



PATH is zo'n omgevingsvariabele die bepaalde mappen bijhoudt. Standaard bevat de variabele PATH de volgende locaties.



  • /usr/bin
  • /usr/sbin
  • /usr/local/bin
  • /usr/local/sbin
  • /ben
  • /sbin
  • /snap/bin (als Snap is geïnstalleerd)

Wilt u zien welke mappen momenteel zijn geregistreerd onder PATH? Start een terminal op en voer de volgende opdracht uit.





$gooide uit $PATH

Hier is het $-teken om een ​​variabele aan te duiden. De gooide uit commando drukt de waarde van de PATH-variabele af.



Waarom is deze specifieke omgevingsvariabele zo belangrijk? Het is omdat hoe shell en het systeem als geheel het behandelen. De PATH-variabele slaat op waar uitvoerbare bestanden kunnen worden gevonden. Telkens wanneer een opdracht wordt uitgevoerd, zoekt de shell de PATH-directory's op voor het uitvoerbare doelbestand en voert het uit.

Laten we bijvoorbeeld testen met de gooide uit opdracht. Hier voer ik een echo-opdracht uit.

$gooide uitHallo Wereld!

Waar is het uitvoerbare bestand van gooide uit ? Voer de volgende opdracht uit om erachter te komen.

$die gooide uit

Zoals we kunnen zien, is de gooide uit uitvoerbaar bestand bevindt zich op /usr/bin/echo. Waar bevindt zich wat? Laten we het uitzoeken.

$die die

Het bevindt zich ook op /usr/bin/who. De meeste commandotools bevinden zich onder de map /usr/bin. Hier raadpleegt bash PATH voor de locaties om te zoeken naar de uitvoerbare bestanden van een opdracht.

PATH wijzigen

Voordat we de waarde van PATH wijzigen, is het belangrijk om de structuur ervan te begrijpen. Voer de opdracht opnieuw uit om de waarde van PATH te controleren.

$gooide uit $PATH

Merk op dat elk van de mappen wordt gescheiden door een : teken.

Directory toevoegen aan PATH

Om een ​​aangepaste map aan PATH toe te voegen, gebruiken we de hulp van het bashrc-bestand. Het is een speciaal bash-script dat elke keer dat een nieuwe bash-sessie start, bash laadt. Merk op dat het bashrc-bestand uniek is voor elke afzonderlijke gebruiker in het Linux-systeem.

Open het bashrc-bestand in een teksteditor. Als het bashrc-bestand nog niet aanwezig is, zal de editor het automatisch maken.

$ik kwam~/.bashrc

Hier is het de standaard bashrc die bij Ubuntu wordt geleverd. Ga naar de laatste van het bestand (als het bestaat) en voeg de volgende regel toe.

$exporteren PAD='$PATH: / '

Hier is de nieuwe waarde van de PATH-variabele de oude variabele samen met de nieuwe map die we zojuist hebben toegevoegd.

Sla het bestand op en vertel bash om het opnieuw te laden.

$bron~/.bashrc

Laten we controleren of het nieuwe pad met succes is toegevoegd.

$gooide uit $PATH

Voila! PATH succesvol bijgewerkt! Nu zal bash ook het nieuwe pad zoeken naar uitvoerbare bestanden. Ik heb al een script demo.sh op bureaublad. Laten we eens kijken of bash het kan noemen zonder de exacte locatie op te geven.

$demo.sh

Yup, bash kan het zonder enig probleem direct bellen.

Directory verwijderen uit PATH

Er is geen eenvoudige manier om mappen toe te voegen aan/te verwijderen uit PATH. Laat het me uitleggen.

De waarde van PATH ligt feitelijk vast. Hoe zit het dan met de bashrc-truc? Bashrc is een bash-script dat elke keer dat een sessie wordt gestart, bash laadt. In bashrc hebben we zojuist verklaard dat de nieuwe waarde van PATH de standaardwaarde en de door de gebruiker gedefinieerde map zal zijn. Nu, elke keer dat bash wordt geladen, ziet het dat bashrc vertelt om een ​​nieuwe waarde van PATH toe te wijzen en dat is wat het doet.

Evenzo, als we een map uit PATH willen verwijderen, moeten we een andere waarde van PATH in de bashrc opnieuw toewijzen, zodat elke keer dat bash start, het de gewijzigde waarde gebruikt.

Laten we dit voorbeeld eens bekijken. Ik ben bereid om de map ~/Desktop uit het PATH te verwijderen.

$gooide uit $PATH | sed -En 's/:~/Desktop$//'

Als de map /home/wrong/dir zou zijn, zou het commando er als volgt uitzien.

$gooide uit $PATH | sed -En 's/:/home/wrong/dir$//'

Hier is het interessante deel de sed-tool. Meer informatie over sed hier en hier . Om een ​​lang verhaal kort te maken, met sed passen we de uitvoer van de gooide uit opdracht. Nu kunnen we deze gewijzigde uitvoer gebruiken om de waarde van PATH te wijzigen.

Open bashrc in een teksteditor en voeg de volgende regels toe. Ik bewaar met opzet de vorige regels om te bewijzen dat het werkt.

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

Als alternatief kunt u de waarde van PATH ook handmatig instellen. Het is een arbeidsproces, maar eenvoudiger en eenvoudiger.

$exporteren PAD=/usr/lokaal/sbin:/usr/lokaal/ben:/usr/sbin:/usr/ben:/sbin:/ben:
/usr/spellen:/usr/lokaal/spellen:/snap/ben

Hier wordt de waarde van het commando toegewezen aan PATH. Sla het bestand op en laad bashrc opnieuw.

$bron~/.bashrc

Laten we het resultaat verifiëren.

$gooide uit $PATH

De PATH-waarde is bijgewerkt!

Laatste gedachten

In bash is de PATH-variabele een belangrijke. Elk programma dat door de bash-sessie loopt, erft de variabele, dus het is belangrijk dat PATH alleen de noodzakelijke mappen bevat. Als u meer directory's toevoegt, wordt alleen redundantie aan het systeem toegevoegd.

Voer deze opdracht uit om alle omgevingsvariabelen voor bash te zien. Het eerste opdrachtgedeelte retourneert alle omgevingsvariabelen en het tweede deel sorteert de uitvoer in oplopende volgorde.

$env | soort

Wil je je bash-ervaring wat meer pit geven? Bash-aliassen bieden een unieke manier om dingen te versnellen en op te fleuren. Meer informatie over bash-aliassen .

Genieten van!