Právě jste nainstalovali nástroj, ale už nevíte, jestli se nachází v /usr/bin, /usr/local/bin nebo jinde. Pořadí kde je Může načíst jeho binární soubor, zdrojový kód a manuálové stránky. Neodpovídá však na nejdůležitější otázku před jakýmkoli zásahem: který soubor váš shell skutečně spustí?
Abych se vyhnul úpravám chybné instalace, doufám, že to zvládnu. kde je s příkaz -v A druhTyto příkazy nehledají totéž. Tento rozdíl se rychle stává užitečným, když několik verzí programu, aliasu nebo funkce Bash má stejný název.

Co Whereis skutečně hledá
Nejjednodušším případem použití je zadat název příkazu bez jakýchkoli možností:
kde je bash
kde je ssh
kde je nginx
Výstup může obsahovat více cest na stejném řádku. kde je Prohledává tři typy souborů: binární soubor, zdrojový kód a manuální dokumentaci. Prověřuje známá umístění v Linuxu a také bere v úvahu… CESTA a z MANPATHProto neprohledává pouze spustitelné soubory, které může váš shell spustit.
Vyhledávání můžete omezit na typ, který vás zajímá:
kde je -m bash
-bhledá binární soubory;-mvyhledává manuálové stránky a informační soubory;-shledat zdroje.
Prázdné vyhledávání zdrojového kódu nemusí nutně znamenat, že program je nesprávně nainstalován. Distribuce často instalují binární soubor a manuál bez zahrnutí zdrojového kódu. /usr/srcChcete-li zobrazit soubory, které byly ve vašem počítači skutečně zkontrolovány, použijte:
kde je -l
Tam kde je manuálová stránka podrobně popisuje tyto cesty a dostupné možnosti. Tento příkaz není rekurzivní vyhledávání souborů. Chcete-li najít libovolný soubor ve stromu adresářů, použijte průvodce na najít na Linuxu
Zkontrolujte příkaz, který shell skutečně spustil
Pokud je vaším cílem vědět, co se zobrazí při psaní python3, nginx Nebo montool, začněte s příkaz -v :
příkaz -v python3
příkaz -v nginx
příkaz -v můjnástroj
Tento příkaz se řídí rozlišením shellu. V závislosti na zadaném názvu může zobrazit cestu ke spustitelnému souboru, vestavěnému souboru, funkci nebo definici aliasu. Jeho návratový kód také umožňuje správně zkontrolovat přítomnost příkazu ve skriptu:
Pokud příkaz -v mujtool >/dev/null 2>&1; pak
echo „mytool je k dispozici“
echo "nástroj nebyl nalezen" >&2
fi
Nepoužívejte kde je pro tento test. Pokud se žádný soubor neshoduje, může jednoduše zobrazit název následovaný dvojtečkou a ukončit návratovým kódem null. Skript by pak nesprávně usoudil, že příkaz existuje.
druh jde dále vysvětlením, jak Bash interpretuje jméno:
typ cd
ls-typ
typ -a ls
typ -P ls
typ cdCDje interní příkaz shellu;ls-typukazuje první použitou definici;typ -a lszobrazuje aliasy, funkce, vestavěné soubory a spustitelné soubory s daným názvem;typ -P lsvynutí hledání spustitelného souboru vCESTA.
Dokumentace typů GNU Bash Toto přesně popisuje tyto výsledky. Pokud používáte Zsh, Fish nebo jiný shell, podívejte se na jeho vlastní dokumentaci: rozlišení aliasů a funkcí není všude stejné.
Pochopení toho, proč „který“ nevypovídá celý příběh
který zůstává běžné v tutoriálech:
který python3
Obvykle hledá spustitelný soubor v CESTAProblém je v tom, že se často jedná o externí program, který nezná přesný stav aktuálního shellu. V závislosti na implementaci a distribuci může ignorovat alias, funkci nebo vestavěnou funkci. Pro test v skriptu shellu, příkaz -v je vhodnější. Pro pochopení kolize jmen v interaktivní relaci, typ -a
Jednoduchý příklad ilustruje rozdíl:
kde je ll
který ll
příkaz -v ll
typ II
kde je Nelze najít soubor s názvem , protože alias není binární soubor. příkaz -v A druh Vidí však Bashovu známou definici. Článek o alias pod Linuxem vysvětluje, jak je zkontrolovat a obejít bez smazání konfigurace.
Identifikace více instalací stejného programu
Ke kolizím často dochází po ruční instalaci v /usr/local/bin, přidání $HOME/.local/bin /optZačněte porovnáním výsledků:
kde je python3
typ -a python3
příkaz -v python3
typ -P python3
readlink -f "$(typ -P python3)"
kde je může zobrazit více binárních souborů a manuálů. typ -a příkaz -v potvrdí první volbu a poté readlink -f řeší jakýkoli potenciální symbolický odkaz. Nakonec zkontrolujte vlastníka balíčku souboru:
dpkg -S "$(typ -P python3)"
rpm -qf "$(typ -P python3)"
pacman -Qo "$(typ -P python3)"
Spusťte pouze příkaz vhodný pro vaši distribuci. Pokud žádný balíček soubor neobsahuje, mohl pocházet z ruční instalace. Před nahrazením zjistěte jeho verzi, skutečný cíl a služby, které jej používají. Výukový program na Archivy tar.gz v Linuxu ukazuje, proč je potřeba kopie v /usr/local/bin musí zůstat sledovatelné.
Bash si také pamatuje určité cesty, které již byly vyřešeny. Po přesunutí nebo nahrazení spustitelného souboru vymažte tuto mezipaměť a poté znovu zkontrolujte:
hash -r
příkaz -v python3
typ -a python3
Pokud je jako první načten nesprávný soubor, opravte jejich pořadí CESTA spíše než mazání náhodného binárního souboru. Průvodce na PATH na Linuxu podrobně popisuje dočasný test a trvalou úpravu.
Omezit whereis na konkrétní složku
Pro ovládání softwaru nainstalovaného pod /optVyhledávací cesty můžete nahradit pro binární soubory nebo manuály. Možnost -F označuje konec seznamu složek a začátek názvů, které se mají vyhledat:
kde je -b -B /opt/mytool/bin /usr/local/bin -f mytool
Toto cílené vyhledávání umožňuje zkontrolovat obsah instalace bez skenování celého disku. Nemění ani CESTAani příkaz prováděný shellem. Před odebráním nebo nahrazením programu proto mějte na paměti následující pořadí:
- použití
zjistit aktivní definici; - zahájit
typ -adetekovat kolize; -
readlink -f; - zkontrolujte balíček vlastníka souboru;
- použití
kde jenajít binární soubory a související dokumentaci.
Díky těmto kontrolám víte, který soubor se spustí, odkud pochází a kde najít jeho manuál. Poté můžete opravit instalaci nebo… aniž by došlo k omylem smazání správné verze.