Tutoriel Linux

PATH v Linuxu: přidání příkazu bez narušení shellu

Débutant7 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

Právě jste nainstalovali nástroj pro Linux, zadáte jeho příkaz a shell odpoví. příkaz nenalezenV mnoha případech je nástroj skutečně přítomen. Je jednoduše uložen ve složce, kterou vaše proměnná CESTA necestuje.

Doporučuji vám to vyřešit správně. Přidání složky do PATH může věci vyřešit během třiceti sekund, ale špatný řádek v .bashrcPochybná složka umístěná nahoře nebo duplicitní cesta PATH při každém otevření terminálu může relaci rychle znepříjemnit.

Uvidíme, jak číst vaši cestu (PATH), otestovat dočasný přídavek a jak ho nastavit jako trvalý pomocí .bashrc Nebo .profila poté ověřte, zda je volán správný příkaz.

Tux přidává do Linuxové cesty zabezpečenou složku se serverem a stromem příkazů.
Před přidáním složky do cesty PATH vždy zkontrolujte, který spustitelný soubor bude shell volat.

Začněte pohledem na aktuální PATH

CESTA je seznam složek oddělených dvojtečkami. Když zadáte příkaz, shell prohledá tyto složky v pořadí.

echo "$CESTA"

Výstup je často dlouhý. Pro snazší čtení zobrazte jednu složku na řádek:

OLDIFS=$IFS
IFS=:
pro adresář v $PATH; do
  echo "$adresář"
hotovo
IFS=$OLDIFS

Na standardním počítači najdete složky jako /usr/local/bin, /usr/bin, /zásobník, Někdy $HOME/.local/binPokud se složka obsahující váš skript nezobrazí, shell jej bez úplné cesty nenajde.

Před provedením jakýchkoli změn zkontrolujte také, kde se příkaz nachází:

příkaz -v můjnástroj
typ -a můjnástroj

příkaz -v označuje skutečně použitou cestu. typ -a To je užitečné, když má několik příkazů stejný název. Je to přesně ten druh kontroly, která vám zabrání v nevědomém spuštění starého binárního souboru.

Přidat složku do PATH pouze pro relaci

Chcete-li otestovat, aniž byste cokoli poškodili, nejprve přidejte složku pouze do aktuálního terminálu. Pokud například umístíte své malé skripty do ~/.local/bin :

mkdir -p "$HOME/.local/bin"
export CESTA="$HOME/.local/bin:$CESTA"

Složka se nachází na začátku cesty PATH. Váš shell ji proto před jejím použitím konzultuje. /usr/bin Nebo /zásobníkTo je užitečné pro testování osobního skriptu, ale není to neutrální detail: pokud má příkaz stejný název jako systémový nástroj, bude volána vaše verze.

Podívejte se na to hned teď:

echo "$CESTA"
příkaz -v můjnástroj

Pokud se váš skript nachází v této složce, ale nespustí se, zkontrolujte také oprávnění ke spuštění:

ls -l "$HOME/.local/bin/mytool"
chmod +x "$HOME/.local/bin/mytool"

Pokud potřebujete zkontrolovat oprávnění k více souborům, přečtěte si článek o rekurzivní chmod v Linuxu Díky tomu se můžete vyhnout použití příliš širokého příkazu. Zde jednoduše udělíme oprávnění ke spuštění daného souboru.

Udělejte doplnění trvalé v souboru .bashrc

Pokud test funguje, můžete přidání nastavit jako trvalé. Pro interaktivní terminál Bash je nejběžnějším souborem ~/.bashrc.

nano ~/.bashrc

Přidejte tuto logiku na konec souboru:

případ ":$PATH:" v
  *":$HOME/.local/bin:"*) ;;
  *) export CESTA="$HOME/.local/bin:$CESTA" ;;
esac

Tato verze se vyhýbá opětovnému vkládání stejné složky při každém načítání. Je to čistší než jednoduché export CESTA="$HOME/.local/bin:$CESTA" opakuje se v několika souborech.

Pak znovu načtěte soubor bez ukončení relace:

zdroj ~/.bashrc

Také otevřete nový terminál, abyste se ujistili, že se doplněk skutečně vrací automaticky:

OLDIFS=$IFS
IFS=:
pro adresář v $PATH; do
  echo "$adresář"
hotovo
IFS=$OLDIFS
příkaz -v můjnástroj

.bashrc, .profile nebo /etc/profile.d: který z nich si vybrat?

Správný soubor závisí na vašem případu použití. Na pracovní stanici nebo serveru, kde převážně otevíráte interaktivní Bash shell, ~/.bashrc často stačí.

Pro přihlašovací relaci, zejména pokud chcete, aby byla proměnná po přihlášení dostupnější, se podívejte raději na ~/.profilNěkteré distribuce to již přidávají. $HOME/bin Nebo $HOME/.local/bin pokud soubor existuje.

U systémové konfigurace určené pro všechny uživatele se vyhněte hromadění změn do každého účtu. Místo toho použijte vyhrazený soubor v /etc/profile.d/s opatrností:

sudo nano /etc/profile.d/local-tools.sh

Jednoduchý příklad pro spravovaný soubor:

export PATH="/opt/tools/bin:$PATH"

Tento typ doplnění si vyhrazuji pro kontrolované cesty se specifickými oprávněními. Pokud může do složky zapisovat jakýkoli uživatel, neměla by být na začátku globální cesty PATH. Dokumentace k Bash uvádí proměnné používané shellem a stránku CESTA z manuálu Bash připomíná roli této proměnné.

Vyhněte se nebezpečným cestám na začátku STEZKY

Klasickým úskalím je přidání užitečné, ale příliš rozsáhlé složky. Například vložení . V cestě PATH je možné spustit příkaz z aktuálního adresáře bez zápisu ./skriptNedoporučuji to.

Představte si složku pro stahování, která obsahuje falešný ls, ssh Nebo sudoPokud má aktuální adresář přednost před systémovými cestami, můžete spustit nesprávný program, aniž byste si to uvědomili. Na serveru je to špatný zvyk, kterému je třeba se vyhnout.

Několik jednoduchých pravidel:

  • nedávejte . v CESTĚ;
  • vyhýbejte se složkám, do kterých mohou zapisovat ostatní uživatelé;
  • umístěte osobní skripty $HOME/.local/bin spíše než ve složce pro stahování;
  • zkontrolovat s typ -a pokud objednávka existuje na více místech;
  • V cestě PATH ponechte klasické systémové cesty.

Stránka přibližně (7) Také podrobně popisuje roli proměnných prostředí na straně Linuxu. I když to není nezbytná četba pro přidání osobního skriptu, pomáhá pochopit, co se předává procesům.

Ověřte, zda shell používá správný příkaz.

Po provedení úpravy se nejen ujistěte, že se příkaz spustí. Ověřte jeho přesnou cestu:

příkaz -v můjnástroj
typ -a můjnástroj

Pokud jste právě přesunuli nebo nahradili příkaz, Bash může také uchovávat verzi staré cesty v mezipaměti. V tomto případě:

hash -r
příkaz -v můjnástroj

Pak můžete spustit příkaz verze nebo nápovědy, pokud jej nástroj nabízí:

montool --verze
mytool --help

Pokud hledáte přesný soubor před rozhodnutím, kam ho uložit, můžete také použít najít na LinuxuTo je často čistší než náhodná úprava cesty PATH za účelem kompenzace špatně umístěného souboru.

Moje vlastní metoda pro přidání osobního příkazu

Na osobním počítači nebo malém serveru to obvykle zjednodušuji:

  • Vkládám své skripty do $HOME/.local/bin ;
  • Práva ke spuštění uděluji pouze nezbytným souborům;
  • Přidám složku do ~/.bashrc s testem proti duplikaci;
  • Kontroluji s příkaz -v A typ -a ;
  • Systémové cesty a citlivé složky mám pod kontrolou.

Pokud spravujete více účtů nebo sdílený server, buďte důslednější. Špatně navržená globální cesta PATH může vést k chování, které je obtížné diagnostikovat, zejména když skript funguje přes SSH, ale ne v interaktivní relaci, nebo naopak. V takovém případě zdokumentujte přidanou cestu a otestujte ji s novým uživatelem, než změnu uznáte za platnou.

sudo apt update && sudo apt upgrade