Jak přidat adresář do vaší $PATH v Linuxu

$PATH je jedním z tichých manipulátorů na pozadí vašeho linuxového počítače. Tiše to ovlivňuje vaši uživatelskou zkušenost, ale není na tom nic stinného. Vysvětlíme vám, co dělá a jak jej můžete upravit.

Co je $PATH na Linuxu a jak funguje?

Když napíšete příkaz do okna terminálu a stisknete Enter, spustíte poměrně hodně aktivity ještě předtím, než je váš příkaz vůbec proveden.

Bash je výchozí shell na většině distribucí Linuxu. Interpretuje řádek textu, který jste zadali, a identifikuje názvy příkazů promíchané s parametry, rourami, přesměrovánía cokoli dalšího tam je. Poté vyhledá spustitelné binární soubory pro tyto příkazy a spustí je s parametry, které jste zadali.

Prvním krokem shellu k nalezení spustitelného souboru je identifikace, zda se jedná o binární soubor. Pokud je příkaz, který používáte, v samotném shellu (a „vestavěná skořepina“) není potřeba žádné další hledání.

Vestavěné moduly shellu jsou nejsnáze k nalezení, protože jsou nedílnou součástí shellu. Je to jako mít je v pásku – jsou vždy s vámi.

Pokud však potřebujete některý ze svých dalších nástrojů, musíte se jít prohrabat v dílně, abyste ho našli. Je to na vašem pracovním stole nebo na nástěnném věšáku? To dělá proměnná prostředí $PATH. Obsahuje seznam míst, která shell prohledává, a pořadí, ve kterém budou prohledávána.

Pokud chcete zjistit, zda je příkaz a vestavěný shell, alias, funkce nebo samostatný binární mv /work/unfile, můžete použít příkaz type, jak je uvedeno níže:

type clear
type cd

To nám říká, že clear je binární soubor a první nalezený v cestě se nachází v /usr/bin. Možná máte na svém počítači nainstalovanou více než jednu verzi clear, ale právě tuto se shell pokusí použít.

Není překvapením, že cd je vestavěný shell.

Výpis vaší $PATH

Je snadné vidět, co vám stojí v cestě. Chcete-li použít příkaz echo, zadejte následující a vytisknout hodnotu uložen v proměnné $PATH:

echo $PATH

The

Výstupem je seznam umístění systému souborů oddělených dvojtečkou (:). Shell prohledává cestu zleva doprava a kontroluje každé umístění souborového systému, zda neobsahuje odpovídající spustitelný soubor pro provedení vašeho příkazu.

Můžeme si vybrat cestu přes seznam, abychom viděli umístění systému souborů, která budou prohledána, a pořadí, ve kterém budou prohledávána:

/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/zásobník
/usr/games
/usr/local/games
/snap/bin

Něco, co nemusí být hned zřejmé, je, že vyhledávání nezačíná v aktuálním pracovním adresáři. Spíše to funguje přes uvedené adresáře a pouze uvedené adresáře.

Pokud aktuální pracovní adresář není ve vaší cestě, nebude prohledán. Také pokud máte příkazy uložené v adresářích, které nejsou v cestě, shell je nenajde.

Abychom to demonstrovali, vytvořili jsme malý program nazvaný rf. Po spuštění vypíše rf v okně terminálu název adresáře, ze kterého byl spuštěn. Nachází se v /usr/local/bin. Novější verzi máme také v adresáři /dave/work.

Zadáme následující který příkaz aby nám ukázal, jakou verzi našeho programu shell najde a použije:

which rf

The

Shell hlásí, že nalezená verze je ta v adresáři, který je v cestě.

Pro spuštění zadáme následující:

rf

The

Verze 1.0 rf běží a potvrzuje, že naše očekávání byla správná. Nalezená a spuštěná verze se nachází v /usr/local/bin.

Chcete-li na tomto počítači spustit jakoukoli jinou verzi rf, budeme muset použít cestu ke spustitelnému souboru na příkazovém řádku, jak je znázorněno níže:

./work/rf

The

Nyní, když jsme shellu řekli, kde najde verzi rf, kterou chceme spustit, používá verzi 1.1. Pokud preferujeme tuto verzi, můžeme ji zkopírovat do adresáře /usr/local/bin a přepsat starou.

Řekněme, že vyvíjíme novou verzi rf. Při vývoji a testování jej budeme muset spouštět často, ale nechceme kopírovat nevydané vývojové sestavení do živého prostředí.

Nebo jsme si možná stáhli novou verzi rf a chceme na ní provést nějaké ověřovací testy, než ji zpřístupníme veřejnosti.

Pokud do cesty přidáme náš pracovní adresář, shell najde naši verzi. A tato změna se dotkne pouze nás – ostatní budou stále používat verzi rf v /usr/local/bin .

Přidání adresáře do vaší $PATH

Můžete použít příkaz export to přidat adresář na $PATH. Adresář je pak zahrnut do seznamu umístění systému souborů, která shell prohledává. Když shell najde odpovídající spustitelný soubor, zastaví vyhledávání, takže se chcete ujistit, že nejprve prohledá váš adresář, před /usr/local/bin.

To je snadné. V našem příkladu zadáme následující, abychom přidali náš adresář na začátek cesty, aby to bylo první prohledávané umístění:

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

The

Tento příkaz nastaví $PATH tak, aby se rovnala adresáři, který přidáváme, /home/dave/work a poté celé aktuální cestě.

První PATH nemá znak dolaru ($). Nastavíme hodnotu pro PATH. Poslední $PATH má znak dolaru, protože odkazujeme na obsah uložený v proměnné PATH. Všimněte si také dvojtečky (:) mezi novým adresářem a názvem proměnné $PATH.

Pojďme se nyní podívat, jak cesta vypadá:

echo $PATH

The

Náš adresář /home/dave/work je přidán na začátek cesty. Dvojtečka, kterou jsme poskytli, ji odděluje od zbytku cesty.

Zadáme následující, abychom ověřili, že naše verze rf je první nalezená:

which rf

The

Důkaz v pudinku běží rf, jak je znázorněno níže:

rf

The

Shell najde verzi 1.1 a spustí ji z /home/dave/work.

Chcete-li přidat náš adresář na konec cesty, jednoduše jej přesuneme na konec příkazu, například takto:

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

Provádění trvalých změn

Tak jako Beth Brooke-Marciniak řekl: „Úspěch je dobrý, ale úspěch je pomíjivý.“ Ve chvíli, kdy zavřete okno terminálu, všechny změny, které jste provedli v $PATH, jsou pryč. Aby byly trvalé, musíte příkaz exportu vložit do konfiguračního souboru.

Když vložíte příkaz export do souboru .bashrc, nastaví cestu pokaždé, když otevřete okno terminálu. Na rozdíl od SSH relace, pro které se musíte přihlásit, se nazývají „interaktivní“ relace.

V minulosti jste do souboru .profile vložili příkaz export, abyste nastavili cestu pro přihlášení k terminálovým relacím.

Zjistili jsme však, že pokud vložíme příkaz export buď do souborů .bashrc nebo .profile, správně nastaví cestu jak pro interaktivní, tak i pro přihlašovací terminálové relace. Vaše zkušenost může být jiná. Abychom zvládli všechny eventuality, ukážeme si, jak to udělat v obou souborech.

Pomocí následujícího příkazu v adresáři /home upravte soubor .bashrc:

gedit .bashrc

The

Otevře se editor gedit s načteným souborem .bashrc.

Editor gedit s

Přejděte na konec souboru a poté přidejte následující příkaz exportu, který jsme použili dříve:

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

Uložte soubor. Dále buď zavřete a znovu otevřete okno terminálu, nebo použijte příkaz tečka ke čtení souboru .bashrc, a to následovně:

. .bashrc

Poté zadejte následující příkaz echo a zkontrolujte cestu:

echo $PATH

The

Tím se na začátek cesty přidá adresář /home/dave/work.

Postup přidání příkazu do souboru .profile je stejný. Zadejte následující příkaz:

gedit .profile

The

Editor gedit se spustí s načteným souborem .profile.

Editor gedit s

Přidejte příkaz export na konec souboru a poté jej uložte. Zavření a otevření nového okna terminálu nestačí k vynucení opětovného načtení souboru .profile. Aby se nové nastavení projevilo, musíte se odhlásit a znovu přihlásit nebo použít příkaz tečka, jak je uvedeno níže:

. .profile

Nastavení cesty pro každého

Chcete-li nastavit cestu pro každého, kdo používá systém, můžete upravit soubor /etc/profile.

Budete muset použít sudo následovně:

sudo gedit /etc/profile

Po spuštění editoru gedit přidejte na konec souboru příkaz export.

Editor gedit s

Uložte a zavřete soubor. Pro ostatní se změny projeví při příštím přihlášení.

Poznámka k bezpečnosti

Ujistěte se, že jste omylem nepřidali do cesty úvodní dvojtečku „:“, jak je znázorněno níže.

The

Pokud tak učiníte, prohledá se nejprve aktuální adresář, což představuje bezpečnostní riziko. Řekněme, že jste si stáhli archivní soubor a rozbalili jej do adresáře. Podíváte se na soubory a uvidíte další zazipovaný soubor. Chcete-li archiv extrahovat, zavoláte ještě jednou unzip.

Pokud první archiv obsahoval spustitelný soubor s názvem unzip, který byl škodlivý spustitelný soubor, omylem byste spustili tento soubor namísto skutečného spustitelného souboru rozbalení. To by se stalo, protože shell by se nejprve podíval do aktuálního adresáře.

Při zadávání příkazů pro export buďte vždy opatrní. Použijte echo $PATH k jejich kontrole a ujistěte se, že jsou takové, jaké chcete, aby byly.