Hoe u een directory aan uw $ PATH in Linux kunt toevoegen

Een Linux-laptop met regels groene tekst in een terminalvenster.
Fatmawati Achmad Zaenuri / Shutterstock

$PATH is een van de stille manipulatoren op de achtergrond van je Linux-computer. Het beïnvloedt stilletjes uw gebruikerservaring, maar er is niets duister aan. We leggen uit wat het doet en hoe u het kunt aanpassen.

Wat is $ PATH op Linux en hoe werkt het?

Wanneer je een commando in een terminalvenster typt en op Enter drukt, start je behoorlijk wat activiteit voordat je commando zelfs maar wordt uitgevoerd.

Bash is de standaardshell op de meeste Linux-distributies. Het interpreteert de regel tekst die u hebt ingevoerd en identificeert de opdrachtnamen vermengd met de parameters, leidingen, omleidingen en al het andere. Het lokaliseert vervolgens de uitvoerbare binaire bestanden voor die opdrachten en start ze met de door u opgegeven parameters.

De eerste stap die de shell neemt om het uitvoerbare bestand te lokaliseren, is het identificeren of er überhaupt een binair bestand bij betrokken is. Als het commando dat u gebruikt zich in de shell zelf bevindt (een “ingebouwde shell”), is verder zoeken niet nodig.

Shell-builtins zijn het gemakkelijkst te vinden omdat ze een integraal onderdeel zijn van de shell. Het is alsof je ze in een gereedschapsriem hebt – ze zijn altijd bij je.

Als je echter een van je andere gereedschappen nodig hebt, moet je in de werkplaats gaan snuffelen om het te vinden. Staat het op je werkbank of op een muurhanger? Dat is wat de $PATH omgevingsvariabele doet. Het bevat een lijst met plaatsen waar de shell zoekt en de volgorde waarin ze zullen worden doorzocht.

Als je wilt zien of een commando een ingebouwde shell, een alias, een functie of een standalone binaire mv / work / unfile is, kun je de type commando zoals hieronder getoond:

type clear
type cd

De commando

Dit vertelt ons dat clear is een binair bestand en het eerste dat in het pad wordt gevonden, bevindt zich op /usr/bin. Mogelijk hebt u meer dan één versie van clear geïnstalleerd op uw computer, maar dit is degene die de shell zal proberen te gebruiken.

Niet verrassend, cd is een shell ingebouwd.

Uw $ PATH vermelden

Het is gemakkelijk om te zien wat er op je pad komt. Typ gewoon het volgende om het echo commando en print de waarde in het $PATH variabele:

echo $PATH

Het "echo $ PATH" commando in een terminalvenster.

De uitvoer is een lijst met dubbele punten (:) gescheiden bestandssysteemlocaties. De shell zoekt van links naar rechts door het pad en controleert elke bestandssysteemlocatie op een overeenkomend uitvoerbaar bestand om uw opdracht uit te voeren.

We kunnen onze weg door de lijst kiezen om de locaties van het bestandssysteem te zien die zullen worden doorzocht, en de volgorde waarin ze zullen worden doorzocht:

  • /usr/local/sbin
  • /usr/local/bin
  • /usr/sbin
  • /usr/bin
  • /sbin
  • /bin
  • /usr/games
  • /usr/local/games
  • /snap/bin

Iets dat misschien niet meteen duidelijk is, is dat de zoekopdracht niet start in de huidige werkdirectory. Het werkt eerder door de vermelde mappen en alleen de vermelde mappen.

Als de huidige werkmap zich niet in uw pad bevindt, wordt deze niet doorzocht. Als je commando’s hebt opgeslagen in mappen die niet in het pad staan, zal de shell ze niet vinden.

Om dit te demonstreren hebben we een klein programma gemaakt met de naam rf. Wanneer uitgevoerd, rf drukt de naam af van de directory van waaruit het werd gestart in het terminalvenster. Het bevindt zich in /usr/local/bin. We hebben ook een nieuwere versie in de /dave/work directory.

We typen het volgende which commando om ons te laten zien welke versie van ons programma de shell zal vinden en gebruiken:

which rf

Het "which rf" -commando in een terminalvenster.

De shell meldt dat de gevonden versie de versie is in de directory in het pad.

We typen het volgende om het op te starten:

rf

Het "rf" -commando in een terminalvenster.

Versie 1.0 van rf loopt en bevestigt dat onze verwachtingen juist waren. De gevonden en uitgevoerde versie bevindt zich in /usr/local/bin.

Om een ​​andere versie van rf op deze computer moeten we het pad naar het uitvoerbare bestand op de opdrachtregel gebruiken, zoals hieronder weergegeven:

./work/rf

Het "./work/rf" commando in een terminalvenster.

Nu we de shell hebben verteld waar de versie van rf we willen draaien, het gebruikt versie 1.1. Als we de voorkeur geven aan deze versie, kunnen we deze kopiëren naar het /usr/local/bin directory en overschrijf de oude.

Laten we zeggen dat we een nieuwe versie van rf. We zullen het regelmatig moeten uitvoeren terwijl we het ontwikkelen en testen, maar we willen geen niet-vrijgegeven ontwikkeling naar de live-omgeving kopiëren.

Of misschien hebben we een nieuwe versie van rf en willen er wat verificatietests op doen voordat we het openbaar maken.

Als we onze werkdirectory aan het pad toevoegen, zorgen we ervoor dat de shell onze versie vindt. En deze verandering heeft alleen invloed op ons – anderen zullen nog steeds de versie van gebruiken rf in /usr/local/bin .

Een directory aan uw $ PATH toevoegen

U kunt de export opdracht om een ​​map toe te voegen aan het $PATH. De directory wordt vervolgens opgenomen in de lijst met bestandssysteemlocaties die de shell doorzoekt. Wanneer de shell een passend uitvoerbaar bestand vindt, stopt het met zoeken, dus u wilt er zeker van zijn dat het eerst in uw directory doorzoekt, voordat /usr/local/bin.

Dit is gemakkelijk te doen. Voor ons voorbeeld typen we het volgende om onze directory aan het begin van het pad toe te voegen, zodat dit de eerste locatie is die wordt doorzocht:

export PATH=/home/dave/work:$PATH

Het "export PATH = / home / dave / work: $ PATH" commando in een terminalvenster.

Dit commando stelt $PATH gelijk zijn aan de directory die we toevoegen, /home/dave/work, en vervolgens het volledige huidige pad.

De eerste PATH heeft geen dollarteken ($). We stellen de waarde in voor PATH. De laatste $PATH heeft een dollarteken omdat we verwijzen naar de inhoud die is opgeslagen in het PATH variabele. Let ook op de dubbele punt (:) tussen de nieuwe directory en het $PATH variabele naam.

Laten we eens kijken hoe het pad er nu uitziet:

echo $PATH

Het "echo $ PATH" commando in een terminalvenster.

Onze /home/dave/work directory wordt aan het begin van het pad toegevoegd. De dubbele punt die we hebben opgegeven, scheidt het van de rest van het pad.

We typen het volgende om onze versie van rf is de eerste gevonden:

which rf

Het "which rf" -commando in een terminalvenster.

Het bewijs in de pudding loopt rf, zoals hieronder weergegeven:

rf

Het "rf" -commando in een terminalvenster.

De shell vindt versie 1.1 en voert het uit vanaf /home/dave/work.

Om onze directory aan het einde van het pad toe te voegen, verplaatsen we deze gewoon naar het einde van het commando, als volgt:

export PATH=$PATH:/home/dave/work

De veranderingen permanent maken

Zoals Beth Brooke-Marciniak zei: “Succes is prima, maar succes is vluchtig.” Op het moment dat u het terminalvenster sluit, worden alle wijzigingen die u in het $PATH zijn weg. Om ze permanent te maken, moet je je export commando in een configuratiebestand.

Wanneer je de export commando in je .bashrc bestand, stelt het het pad in elke keer dat u een terminalvenster opent. in tegenstelling tot SSH sessies, waarvoor u moet inloggen, worden “interactieve” sessies genoemd.

In het verleden zou u de export commando in je .profile bestand om het pad voor inlogterminalsessies in te stellen.

We ontdekten echter dat als we de export commando in ofwel het .bashrc of .profile bestanden, heeft het het pad correct ingesteld voor zowel interactieve als inlogterminalsessies. Uw ervaring kan anders zijn. Om alle eventualiteiten af ​​te handelen, laten we u zien hoe u dit in beide bestanden moet doen.

Gebruik de volgende opdracht in uw /home directory om het .bashrc het dossier:

gedit .bashrc

Het "gedit .bashrc" commando in een terminalvenster.

De gedit editor wordt geopend met de .bashrc bestand geladen.

De gedit-editor met het ".bashrc" -bestand geladen.

Blader naar de onderkant van het bestand en voeg vervolgens de volgende exportopdracht toe die we eerder hebben gebruikt:

export PATH=/home/dave/work:$PATH

Sla het bestand op. Sluit vervolgens het terminalvenster en open het opnieuw of gebruik de dot commando om het .bashrc bestand, als volgt:

. .bashrc

Typ vervolgens het volgende echo commando om het pad te controleren:

echo $PATH

De ".bashrc" en "echo $ PATH" opdrachten in een terminalvenster.

Dit voegt de /home/dave/work directory naar het begin van het pad.

Het proces om de opdracht toe te voegen aan het .profile bestand is hetzelfde. Typ de volgende opdracht:

gedit .profile

Het "gedit .profile" commando in een terminalvenster.

De gedit editor wordt gestart met de .profile bestand geladen.

De gedit-editor met het ".profile" -bestand geladen.

Voeg het export opdracht onderaan het bestand en sla het vervolgens op. Het sluiten en openen van een nieuw terminalvenster is onvoldoende om het .profile bestand dat opnieuw moet worden gelezen. Om de nieuwe instellingen van kracht te laten worden, moet u zich afmelden en weer aanmelden of de dot commando zoals hieronder getoond:

. .profile

VERWANT: Tekstbestanden grafisch bewerken op Linux met gedit

De weg banen voor iedereen

Om het pad in te stellen voor iedereen die het systeem gebruikt, kunt u het /etc/profile het dossier.

U moet sudo, als volgt:

sudo gedit /etc/profile

Wanneer de gedit editor wordt gestart, voegt u de exportopdracht toe aan de onderkant van het bestand.

De gedit-editor met het "/ etc / profile" -bestand geladen.

Sla het bestand op en sluit het. De wijzigingen worden van kracht voor anderen de volgende keer dat ze inloggen.

Een opmerking over beveiliging

Zorg ervoor dat u niet per ongeluk een dubbele punt toevoegt ‘:”Naar het pad, zoals hieronder weergegeven.

Het "echo $ PATH" commando met een dubbele punt gemarkeerd in een terminalvenster.

Als u dit doet, wordt eerst in de huidige directory gezocht, wat een beveiligingsrisico inhoudt. Stel dat u een archiefbestand heeft gedownload en het in een map heeft uitgepakt. Je kijkt naar de bestanden en ziet een ander gezipt bestand. Je roept nogmaals unzip om dat archief uit te pakken.

Als het eerste archief een uitvoerbaar bestand bevatte met de naam unzip dat een kwaadaardig uitvoerbaar bestand was, zou je dat per ongeluk activeren in plaats van het echte unzip uitvoerbaar. Dit zou gebeuren omdat de shell eerst in de huidige directory zou zoeken.

Wees dus altijd voorzichtig wanneer u uw export commando’s. Gebruik echo $ PATH om ze te beoordelen en ervoor te zorgen dat ze zijn zoals u wilt dat ze zijn.

Nieuwste artikelen

spot_img

Related Stories

Leave A Reply

Vul alstublieft uw commentaar in!
Vul hier uw naam in