Jak PATH funguje v Bash

How Does Path Work Bash



Když zadáváte příkaz do terminálu Linux, obvykle voláte program, který provede určitou práci, například ls , CD , rm , mkdir atd. Všechny tyto programy jsou umístěny někde v systému souborů, že? Jak bash ví, kde jsou tyto programy?

Zde vstupují do hry proměnné prostředí, zejména proměnná PATH. Tato proměnná je zodpovědná za to, že řekne bashovi, kde hledat tyto programy. Pojďme se podívat, jak PATH funguje a jak PATH zobrazit/upravit.







Proměnná prostředí a $ PATH

V terminologii prostředí je prostředí oblast, kterou prostředí vytváří vždy, když spustí relaci. Ke správě prostředí existují proměnné prostředí označující různé části prostředí. Hodnota proměnné může být řetězec, umístění adresáře, hodnota nebo jiné.



PATH je taková proměnná prostředí, která sleduje určité adresáře. Ve výchozím nastavení obsahuje proměnná PATH následující umístění.



  • /usr/bin
  • /usr/sbin
  • /usr/local/bin
  • /usr/local/sbin
  • /dopoledne
  • /sbin
  • /snap/bin (pokud je nainstalován Snap)

Chcete vidět, jaké adresáře jsou aktuálně registrovány pod PATH? Spusťte terminál a spusťte následující příkaz.





$vyhodil $ PATH

Zde znak $ znamená proměnnou. The vyhodil příkaz vytiskne hodnotu proměnné PATH.



Proč je tato specifická proměnná prostředí tak důležitá? Je to proto, jak se k tomu staví shell a systém jako celek. Proměnná PATH ukládá, kde lze nalézt spustitelné soubory. Kdykoli je spuštěn jakýkoli příkaz, shell vyhledá adresáře PATH pro cílový spustitelný soubor a spustí jej.

Zkusme například s vyhodil příkaz. Tady spouštím příkaz echo.

$vyhodilAhoj světe!

Kde je spustitelný soubor vyhodil ? Zjistěte to spuštěním dalšího příkazu.

$který vyhodil

Jak vidíme, vyhodil spustitelný soubor je umístěn na/usr/bin/echo. Kde se nachází Pojďme to zjistit.

$který který

Je také umístěn na/usr/bin/which. Většina příkazových nástrojů je umístěna v adresáři /usr /bin. Zde bash konzultuje PATH pro umístění, kde má hledat spustitelné soubory příkazu.

Úprava PATH

Než upravíme hodnotu PATH, je důležité porozumět její struktuře. Znovu spusťte příkaz a zkontrolujte hodnotu PATH.

$vyhodil $ PATH

Všimněte si, že každý z adresářů je oddělen znakem:.

Přidání adresáře do PATH

Chcete -li do PATH přidat vlastní adresář, využijeme pomoc souboru bashrc. Je to speciální bash skript, který se bash načte pokaždé, když začne nová relace bash. Všimněte si, že soubor bashrc je jedinečný pro každého jednotlivého uživatele v systému Linux.

Otevřete soubor bashrc v textovém editoru. Pokud soubor bashrc ještě není k dispozici, editor jej vytvoří automaticky.

$přišel jsem~/.bashrc

Zde je to výchozí bashrc, který je dodáván s Ubuntu. Přejděte na poslední část souboru (pokud existuje) a přidejte následující řádek.

$vývozní CESTA='$ PATH: / '

Zde bude novou hodnotou proměnné PATH stará proměnná spolu s novým adresářem, který jsme právě přidali.

Uložte soubor a řekněte bashovi, aby jej znovu načíst.

$zdroj~/.bashrc

Ověřme, zda byla nová cesta úspěšně přidána.

$vyhodil $ PATH

Voila! PATH byla úspěšně aktualizována! Nyní bude bash také hledat novou cestu pro spustitelné soubory. Už mám skript demo.sh na ploše. Podívejme se, jestli to bash může nazvat bez určení přesného umístění.

$demo.sh

Ano, bash to může bez problémů přímo volat.

Odebírání adresáře z PATH

Neexistuje žádný přímý způsob přidávání/odebírání adresářů z PATH. Nech mě to vysvětlit.

Hodnota PATH je ve skutečnosti pevná. A co trik bashrc? Bashrc je skript bash, který se načte při každém spuštění relace. V bashrc jsme právě deklarovali, že novou hodnotou PATH bude její výchozí hodnota a uživatelsky definovaný adresář. Nyní, pokaždé, když se načte bash, vidí, že bashrc říká přiřadit novou hodnotu PATH a to je to, co dělá.

Podobně, pokud chceme odstranit adresář z PATH, musíme v bashrc znovu přiřadit jinou hodnotu PATH, takže při každém spuštění bash použije upravenou hodnotu.

Podívejme se na tento příklad. Jsem ochoten odstranit adresář ~/Desktop z PATH.

$vyhodil $ PATH | sed -A 's/: ~ /Desktop $ //'

Pokud by adresář byl/home/špatně/dir, příkaz by vypadal takto.

$vyhodil $ PATH | sed -A 's/: /home /špatně /dir $ //'

Zde je zajímavou částí nástroj sed. Další informace o sed tady a tady . Stručně řečeno, pomocí sed upravujeme výstup vyhodil příkaz. Nyní můžeme tento upravený výstup použít ke změně hodnoty PATH.

Otevřete bashrc v textovém editoru a přidejte následující řádky. Záměrně ponechávám předchozí řádky, abych dokázal, že to funguje.

$vývozní CESTA='$ (echo $ PATH | sed -e 's/: ~ /Desktop $ //')'

Alternativně můžete také ručně nastavit hodnotu PATH. Je to namáhavý proces, ale přímočařejší a jednodušší.

$vývozní CESTA=/usr/místní/sbin:/usr/místní/dopoledne:/usr/sbin:/usr/dopoledne:/sbin:/dopoledne:
/usr/hry:/usr/místní/hry:/zacvaknout/dopoledne

Zde bude hodnota příkazu přiřazena PATH. Uložte soubor a znovu načtěte bashrc.

$zdroj~/.bashrc

Ověřme výsledek.

$vyhodil $ PATH

Hodnota PATH je aktualizována!

Závěrečné myšlenky

V bash je proměnná PATH důležitá. Jakýkoli program, který běží prostřednictvím relace bash, dědí proměnnou, takže je důležité, aby PATH obsahoval pouze nezbytné adresáře. Přidáním dalšího adresáře se do systému přidá pouze redundance.

Chcete -li zobrazit všechny proměnné prostředí pro bash, spusťte tento příkaz. První část příkazu vrátí všechny proměnné prostředí a druhá část seřadí výstup ve vzestupném pořadí.

$env | třídit

Chcete okořenit svůj bash zážitek? Bash aliasy nabízejí jedinečný způsob, jak věci urychlit a okořenit. Další informace o aliasech bash .

Užívat si!