Tutoriel Linux

Whereis v Linuxu: nalezení binárního souboru a jeho manuál

Débutant6 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, 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.

Tux používá lupu k nalezení binárního souboru Linuxu a jeho manuálové stránky mezi několika cestami.
Whereis vyhledává binární soubory, zdrojové kódy a manuálové stránky na více místech v Linuxu.

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
  • -b hledá binární soubory;
  • -m vyhledává manuálové stránky a informační soubory;
  • -s hledat 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 cd CD je interní příkaz shellu;
  • ls-typ ukazuje první použitou definici;
  • typ -a ls zobrazuje aliasy, funkce, vestavěné soubory a spustitelné soubory s daným názvem;
  • typ -P ls vynutí hledání spustitelného souboru v CESTA.

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 -a detekovat kolize;
  • readlink -f ;
  • zkontrolujte balíček vlastníka souboru;
  • použití kde je nají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.

sudo apt update && sudo apt upgrade