Když se pokoušíte spustit příkaz (s nebo bez sudo
) a zobrazí se chybová zpráva „Příkaz nenalezen“, což znamená, že skript nebo soubor, který se pokoušíte spustit, neexistuje v umístění určeném proměnnou PATH. Co je tato proměnná a jak můžete spouštět příkazy, které nemůže najít?
Porozumění proměnným prostředí
Ve výpočetní technice proměnná je zástupný symbol pro hodnotu, která se může změnit. Proměnné používáte každý den v běžné řeči, i když o nich tak nepřemýšlíte. Když řeknete „můj notebook“, používáte „laptop“ jako obecnou proměnnou nebo zástupný symbol pro počítač, který nosíte, bez ohledu na to, zda se jedná o Lenovo, Mac nebo Raspberry Pi v luxusním obalu.
Proměnné prostředí jsou speciální proměnné, které obsahují informace o vaší přihlašovací relaci. Mnoho z těchto proměnných je nastaveno ve výchozím nastavení během instalace nebo vytváření uživatele. Jsou uloženy pro systémové prostředí, aplikace a skripty, které lze použít při provádění příkazů.
Existují globální nebo systémem definované proměnné a místní nebo uživatelem definované proměnné.
Globální proměnné
Globální proměnné jsou předdefinovány ve vašem přihlašovacím shellu, ale nejsou neměnné a lze je upravit nebo odstranit podle vašich preferencí. Můžete použít printenv
nebo env
příkazy k zobrazení proměnných prostředí ve vašem systému:
$ env
SHELL=/bin/bash
SESSION_MANAGER=local/kiwi.homelinux.local:@/tmp/.ICE-unix/1906,unix/kiwi.homelinux.local:/tmp/.ICE-unix/19
06
WINDOWID=153092103
COLORTERM=truecolor
XDG_CONFIG_DIRS=/home/tux/.config/kdedefaults:/etc/xdg:/etc/kde/xdg
LESS=-XR
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session1
HISTCONTROL=:ignorespace:ignoredups:ignorespace:ignoredups
PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/share/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig
[...]
env
příkaz vytiskne všechny globální proměnné prostředí. Proměnné rozlišují velká a malá písmena a všechny distribuce Linuxu ve výchozím nastavení používají velká písmena pro názvy proměnných prostředí.
[ Mějte své oblíbené příkazy Git, aliasy a tipy po ruce. Stáhněte si cheat sheet Git. ]
Místní proměnné
Lokální proměnná existuje pouze v rámci specifického shellu. Proto, když definujete lokální proměnnou, je dostupná pouze ve vašem aktuálním shellu. Nešíří se ani nepřetrvává do nové relace shellu, pokud ji neexportujete jako globální proměnnou.
Lokální proměnné jsou často definovány malými písmeny, aby nedošlo k přepsání globální proměnné se stejným názvem.
Proměnná prostředí PATH
Globální proměnná prostředí PATH uvádí adresáře, které váš systém hledá pro platné, spustitelné příkazy. Ve výchozím nastavení obsahuje standardní adresáře, které normálně ukládají spustitelné soubory jako /usr/bin
, /usr/local/bin
, a tak dále.
Když zadáte příkaz, například grep
nebo vim
váš systém prohledá všechny adresáře uvedené ve vaší proměnné PATH v pořadí, v jakém jsou uvedeny, dokud nenajde spustitelný soubor se stejným názvem. Pokud se mu nepodaří nějaký najít, zobrazí chybu „Příkaz nenalezen“.
$ printenv PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tux/.local/bin:/home/tux/bin
$ env $PATH
env: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tux/.local/bin:/home/tux/bin
5 způsobů, jak opravit chyby „Příkaz nenalezen“
Existuje několik způsobů, jak tento problém vyřešit. Zde je pět z nich.
1. Zahrňte cestu
Ne vše, co chcete provést, vám musí stát v cestě. Soubory můžete spouštět přímo zadáním cesty k souboru, který chcete spustit. Identifikací umístění souboru obejdete nutnost, aby váš systém vůbec prohledával vaši cestu.
Předpokládejme například, že máte skript s názvem hello
že chcete běžet. Nachází se ve vašem domovském adresáři a již jste jej označili jako spustitelný pomocí chmod +x
:
$ ~/hello
hello world
Tím, že svému systému sdělíte umístění souboru, proměnná PATH není nikdy zahrnuta a soubor běží podle očekávání.
2. Přidat novou cestu
Případně můžete do PATH přidat nový adresář. Přidejte své spustitelné soubory do tohoto adresáře a poté je můžete spustit bez ručního zadávání cesty:
$ cp ~/hello ~/.local/bin
$ export PATH=$PATH:$HOME/.local/bin
$ printenv PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tux/.local/bin
Možná budete chtít přidat nové proměnné prostředí PATH do svého přihlašovacího prostředí tak, že je zahrnete do souboru .bashrc
soubor jako nové nastavení.
3. Zkopírujte soubor do existujícího umístění cesty
Pokud chcete spustit svůj binární soubor nebo skript, zkopírujte jej do kterékoli z cest adresářů, které jsou již uvedeny v proměnné prostředí PATH:
$ sudo cp ~/hello /usr/local/bin/
$ hello
hello world
4. Řekněte Bashovi, kde se má hledat
Pravděpodobně nejjednodušší možností, zejména pro jednorázové skripty nebo aplikace, je říct Bashovi, aby nezvažoval PATH, ale raději se „podíval sem“. Udělejte to umístěním tečky a lomítka před název příkazu, skriptu nebo aplikace. Pro hello
skript, vypadá to takto:
$ sudo ./hello
hello world
V systému nejsou prováděny žádné trvalé změny. To může být užitečné, pokud píšete skript a chcete jej otestovat, než jej zkopírujete nebo přesunete do jeho normálního úložiště (pravděpodobně podél PATH).
5. Nainstalujte balíček
Někdy, když se pokusíte použít příkaz a Bash zobrazí chybu „Příkaz nenalezen“, může to být způsobeno tím, že program není nainstalován ve vašem systému. Opravte to instalací softwarového balíčku obsahujícího příkaz. Pokud například nemáte nainstalovaný Nmap, pak nmap
příkaz selže, když jej zadáte do terminálu:
$ nmap
nmap: command not found
$ sudo dnf install --assumeyes --quiet nmap
$ nmap
Nmap 7.92 ( https://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}
[...]
[ Chcete se dozvědět více? Zaregistrujte se a získejte bezplatnou zkušební verzi plného přístupu k učebním osnovám společnosti Red Hat. ]
Držte se cesty
Proměnná PATH je mocný nástroj, který můžete použít k přizpůsobení toho, jak váš systém reaguje na příkazy, takže si věnujte nějaký čas, než se s tím zorientujete. Často se používá při spouštění příkazů k nalezení spustitelného příkazu.
V tomto tutoriálu jste se naučili pět způsobů, jak opravit chybu „Příkaz nenalezen“ ve vašem terminálu – tři z nich spoléhají na proměnnou PATH. Nyní, když víte, co jsou proměnné a jak se nacházejí spustitelné soubory příkazů, nebudete tak zmatení, když se na obrazovce objeví chyba „Příkaz nenalezen“.