Hur man lägger till en katalog till din $PATH i Linux

$PATH är en av de tysta manipulatorerna i bakgrunden på din Linux-dator. Det påverkar tyst din användarupplevelse, men det finns inget skumt med det. Vi kommer att förklara vad den gör och hur du kan justera den.

Vad är $PATH på Linux, och hur fungerar det?

När du skriver ett kommando i ett terminalfönster och trycker på Enter startar du ganska mycket aktivitet innan ditt kommando ens har utförts.

Våldsamt slag är standardskalet på de flesta Linux-distributioner. Den tolkar textraden du skrev in och identifierar kommandonamnen blandade med parametrarna, pipes, omdirigeringar, och allt annat som finns där. Den lokaliserar sedan de körbara binärfilerna för dessa kommandon och startar dem med de parametrar du angav.

Det första steget som skalet tar för att hitta den körbara filen är att identifiera om en binär ens är inblandad. Om kommandot du använder finns i själva skalet (a ”skal inbyggt”) ingen ytterligare sökning krävs.

Inbyggda skal är de enklaste att hitta eftersom de är integrerade med skalet. Det är som att ha dem i ett verktygsbälte – de är alltid med dig.

Men om du behöver något av dina andra verktyg måste du gå och rota i verkstaden för att hitta det. Är det på din arbetsbänk eller en vägghängare? Det är vad miljövariabeln $PATH gör. Den innehåller en lista över platser som skalet söker och i vilken ordning de kommer att sökas.

Om du vill se om ett kommando är en inbyggt skal, ett alias, en funktion eller en fristående binär mv /work/unfilekan du använda typkommandot som visas nedan:

type clear
type cd

De

Detta talar om för oss att clear är en binär fil, och den första som hittas i sökvägen finns på /usr/bin. Du kanske har mer än en version av clear installerad på din dator, men det här är den som skalet kommer att försöka använda.

Föga överraskande är cd ett skal inbyggt.

Listar din $PATH

Det är lätt att se vad som är i din väg. Skriv bara följande för att använda kommandot echo och skriv ut värdet hålls i variabeln $PATH:

echo $PATH

De

Utdata är en lista med kolon (:) avgränsade filsystemplatser. Skalet söker från vänster till höger genom sökvägen och kontrollerar varje filsystemsplats efter en matchande körbar fil för att utföra ditt kommando.

Vi kan välja oss igenom listan för att se filsystemplatserna som kommer att genomsökas och i vilken ordning de kommer att sökas:

/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/spel
/usr/local/spel
/snap/bin

Något som kanske inte är direkt uppenbart är att sökningen inte startar i den aktuella arbetskatalogen. Snarare går den igenom de listade katalogerna och bara de listade katalogerna.

Om den aktuella arbetskatalogen inte finns i din sökväg kommer den inte att sökas igenom. Dessutom, om du har kommandon lagrade i kataloger som inte finns i sökvägen, kommer skalet inte att hitta dem.

För att demonstrera detta skapade vi ett litet program som heter rf. När den körs skriver rf ut namnet på katalogen från vilken den startades i terminalfönstret. Den finns i /usr/local/bin. Vi har också en nyare version i katalogen /dave/work.

Vi skriver följande vilket kommando för att visa oss vilken version av vårt program skalet kommer att hitta och använda:

which rf

De

Skalet rapporterar att versionen den hittade är den i katalogen som finns i sökvägen.

Vi skriver följande för att aktivera det:

rf

De

Version 1.0 av rf körs och bekräftar att våra förväntningar var korrekta. Den version som hittas och körs finns i /usr/local/bin.

För att köra någon annan version av rf på den här datorn måste vi använda sökvägen till den körbara filen på kommandoraden, som visas nedan:

./work/rf

De

Nu när vi har berättat för skalet var man kan hitta versionen av rf vi vill köra, använder den version 1.1. Om vi ​​föredrar den här versionen kan vi kopiera den till katalogen /usr/local/bin och skriva över den gamla.

Låt oss säga att vi utvecklar en ny version av rf. Vi kommer att behöva köra det ofta när vi utvecklar och testar det, men vi vill inte kopiera en outgiven utvecklingsbyggnad till livemiljön.

Eller så kanske vi har laddat ner en ny version av rf och vill göra några verifieringstester på den innan vi gör den offentligt tillgänglig.

Om vi ​​lägger till vår arbetskatalog i sökvägen får vi skalet att hitta vår version. Och denna förändring kommer bara att påverka oss – andra kommer fortfarande att använda versionen av rf i /usr/local/bin .

Lägga till en katalog till din $PATH

Du kan använda kommandot export till lägga till en katalog till $PATH. Katalogen ingår sedan i listan över filsystemplatser som skalet söker efter. När skalet hittar en matchande körbar fil slutar den att söka, så du vill se till att den söker igenom din katalog först, före /usr/local/bin.

Detta är lätt att göra. För vårt exempel skriver vi följande för att lägga till vår katalog i början av sökvägen så att det är den första platsen som söks:

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

De

Detta kommando ställer in $PATH att vara lika med katalogen vi lägger till, /home/dave/work, och sedan hela den aktuella sökvägen.

Den första PATH har inget dollartecken ($). Vi ställer in värdet för PATH. Den sista $PATH har ett dollartecken eftersom vi refererar till innehållet som är lagrat i PATH-variabeln. Notera också kolonet (:) mellan den nya katalogen och variabelnamnet $PATH.

Låt oss se hur vägen ser ut nu:

echo $PATH

De

Vår /home/dave/work-katalog läggs till i början av sökvägen. Kolonet vi tillhandahållit skiljer den åt resten av vägen.

Vi skriver följande för att verifiera att vår version av rf är den första som hittades:

which rf

De

Beviset i puddingen körs rf, som visas nedan:

rf

De

Skalet hittar version 1.1 och kör den från /home/dave/work.

För att lägga till vår katalog i slutet av sökvägen, flyttar vi den bara till slutet av kommandot, så här:

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

Göra ändringarna permanenta

Som Beth Brooke-Marciniak sa, ”Framgång är bra, men framgång är flyktig.” I samma ögonblick som du stänger terminalfönstret försvinner alla ändringar du har gjort i $PATH. För att göra dem permanenta måste du lägga ditt exportkommando i en konfigurationsfil.

När du lägger exportkommandot i din .bashrc-fil, ställer den in sökvägen varje gång du öppnar ett terminalfönster. Till skillnad från SSH-sessionersom du måste logga in för, kallas dessa ”interaktiva” sessioner.

Tidigare skulle du lägga exportkommandot i din .profile-fil för att ställa in sökvägen för inloggningsterminalsessioner.

Vi upptäckte dock att om vi placerade exportkommandot i antingen .bashrc- eller .profile-filerna, ställer det in sökvägen för både interaktiva och inloggade terminalsessioner korrekt. Din upplevelse kan vara annorlunda. För att hantera alla eventualiteter visar vi hur du gör det i båda filerna.

Använd följande kommando i din /home-katalog för att redigera .bashrc-filen:

gedit .bashrc

De

Gedit-redigeraren öppnas med .bashrc-filen laddad.

Gedit-redaktören med

Bläddra till botten av filen och lägg sedan till följande exportkommando som vi använde tidigare:

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

Spara filen. Stäng sedan och öppna terminalfönstret igen eller använd dot-kommandot för att läsa .bashrc-filen enligt följande:

. .bashrc

Skriv sedan följande ekokommando för att kontrollera sökvägen:

echo $PATH

De

Detta lägger till katalogen /home/dave/work till början av sökvägen.

Processen för att lägga till kommandot till .profile-filen är densamma. Skriv följande kommando:

gedit .profile

De

Gedit-redigeraren startar med .profile-filen laddad.

Gedit-redaktören med

Lägg till exportkommandot längst ned i filen och spara det sedan. Att stänga och öppna ett nytt terminalfönster är inte tillräckligt för att tvinga .profile-filen att läsas om. För att de nya inställningarna ska träda i kraft måste du logga ut och in igen eller använda kommandot punkt som visas nedan:

. .profile

Anger vägen för alla

För att ställa in sökvägen för alla som använder systemet kan du redigera filen /etc/profile.

Du måste använda sudo, enligt följande:

sudo gedit /etc/profile

När gedit-redigeraren startar lägger du till exportkommandot längst ned i filen.

Gedit-redaktören med

Spara och stäng filen. Ändringarna träder i kraft för andra nästa gång de loggar in.

En anmärkning om säkerhet

Se till att du inte av misstag lägger till ett inledande kolon ”:” till sökvägen, som visas nedan.

De

Om du gör det kommer detta att söka i den aktuella katalogen först, vilket innebär en säkerhetsrisk. Säg att du laddade ner en arkivfil och packade upp den i en katalog. Du tittar på filerna och ser en annan zippad fil. Du ringer unzip en gång till för att extrahera det arkivet.

Om det första arkivet innehöll en körbar fil som heter unzip som var en skadlig körbar fil, skulle du av misstag starta upp den i stället för den verkliga unzip körbara filen. Detta skulle hända eftersom skalet skulle leta i den aktuella katalogen först.

Så var alltid försiktig när du skriver dina exportkommandon. Använd echo $PATH för att granska dem och se till att de är som du vill att de ska vara.