Newsletter 365tipů můžete číst zdarma. Placené předplatné je dobrovolná podpora, která pomáhá webu pokračovat.
Podpořit 365tipů

TIP#2944: Jak v Linuxu zjistit kde se nachází (a odkud se spustí) konkrétní příkaz? Použijte which

Tohle je dost užitečná vychytávka v Linuxu/unixu, pokud hledáte kde se nachází nějaký příkaz a odkud se spouští, tak můžete použít which doplněný o jméno hledaného (případně i více jmen).

Pokud hledané v systému je, tak se dozvíte cestu kde to je. 

Bez dalších parametrů which vrací první nalezený výskyt (což je ostatně ten, který se bude spouštět při použití), ale pokud chcete najít všechny, tak stačí použít which -a a opět doplněné příkazem co hledáte.

Pokud which příkaz nenajde, nevrátí nic – je tak snadno použitelné pro ověření toho, jestli něco v systému je či není možné vyvolat.

Jak poznáte, jestli případných víc výskytů jsou stejné nebo rozdílné? Vypište si je pomoci ls -lh a uvidíte detaily (velkost, datum, čas) ale také třeba i to, jestli jde o symlink (-> symbol). 

Výše uvedené můžete kombinovat pro vypsání detailů o všech nalazených, například do

which -a docker | xargs ls -lh

Pozor na to, že which nenajde příkazy přímo zabudované v shellu. 

Případně též jako

ls -lh $(which -a  docker)

A jak which vlastně funguje? Neprohledává celý systém/disk, ale složky uvedené v $PATH. První nalezený je pak ten, který se spoustí, když se o to snažíte. Which je tak použitelné pro zjištění, jakou verzi něčeho vlastě spouštíte (oblíbená zábava například u Pythonu). Ostatně i proto se jmenuje jak se jmenuje, tedy which = který „bude spuštěn“.

A praktická užitečnost. Přihoďte si následující alias. Použití vám poví kde se nachází v detailní podobě

alias whereisinfo='function _f(){ ls -lh $(which $1); }; _f'

PS: Podobně jako which funguje i type – hodí se hlavně v tom, že řekne zda jde o alias, funkci, příkaz (spustitelný soubor).