Bash: vestavěné (builtin) vs externí příkazy
JAK ZAČÍT > STRUKTURA
16.05.2026
Jak poznat rozdíl, co se skutečně spouští a kde příkazy hledat?
Když v terminálu napíšete příkaz (např. apt, ls, cd), je užitečné vědět, co přesně se tím spouští. Pro začátečníka je to důležitý dílek skládačky v TTY/CLI vrstvě Linuxu: některé příkazy jsou součástí samotného shellu (bash) a jiné jsou samostatné programy (binární soubory nebo skripty) uložené v systému.
Tento rozdíl vysvětluje, proč některé příkazy mají zvláštní chování, proč mohou existovat ve více verzích, a jak je rychle dohledat.
Infografika vysvětlující rozdíl mezi vestavěnými příkazy Bash (builtin) a externími příkazy v Linuxu; v terminálu jsou ukázky type -a, type -P a help cd, které ukazují, zda se příkaz spouští jako součást shellu nebo jako soubor v systému (/usr/bin/ls).
Rychlá navigace:
- Co všechno může být „příkaz“, který v terminálu zadáte
- Co konkrétně znamená „builtin“
- Nejlepší příkaz pro praxi: type
- Doporučený „bezpečný“ postup pro dohledání příkazu (začátečnická rutina)
- which vs type -P vs command -v (kdy použít který)
- Jak vypsat vestavěné příkazy bashi (builtins)
- Kde v systému hledat externí příkazy (binárky / skripty)
- Malé cvičení: tři příkazy, které ukážou celý princip
- Bonus: z jakého balíčku pochází externí příkaz (volitelné)
- Shrnutí pro začátečníka (to nejdůležitější)
- Doporučené zdroje
1) Co všechno může být „příkaz“, který v terminálu zadáte
Když napíšete třeba echo, bash si nejdřív musí ujasnit, co tím myslíte.
V praxi může jít o:
- alias – zkratka (např. ls → ls --color=auto)
- funkce – shellová funkce
- builtin – vestavěný příkaz bashi (např. cd)
- externí soubor – program nebo skript v systému (např. /usr/bin/ls)
(Navíc existují i klíčová slova typu if, for, case – to není ani builtin, ani externí program, ale ta teď nechme stranou.)
Začátečník často předpokládá, že „příkaz = program“. V Linuxu to tak není vždy.
2) Co konkrétně znamená „builtin“
Builtin (vestavěný příkaz) je příkaz, který je implementovaný přímo uvnitř programu bash. Nespouští se žádný nový program ze souboru – bash to vykoná sám.
Proč builtin existuje
Některé operace musí změnit stav samotného shellu, a to externí program nedokáže „vrátit“ zpět do vašeho terminálu.
Typický příklad:
- cd musí změnit aktuální adresář ve vašem shellu. Kdyby cd byl externí program, změnil by adresář jen sám sobě a po skončení by se nic ve vašem terminálu nezměnilo. Proto je cd builtin.
Co je externí příkaz
Externí příkaz je samostatný spustitelný soubor (binárka nebo skript) v systému – typicky někde v adresářích uvedených v proměnné prostředí PATH (např. /usr/bin, /bin, …).
3) Nejlepší příkaz pro praxi: type
Pokud si chcete ověřit, co se skutečně spustí, použijte:
bash
type cd
type ls
type echo
Ještě užitečnější je varianta, která ukáže všechny možné shody (např. když existuje builtin i externí verze):
bash
type -a ls
type -a cd
type -a echo
type -a test
type -a ukáže všechny varianty (když existují).
Typicky uvidíte třeba:
- ls je často alias + zároveň existuje externí /usr/bin/ls
- cd je builtin
- echo může být builtin a někdy existuje i externí varianta
Tímto jediným krokem obvykle zjistíte vše podstatné: zda jde o alias, funkci, builtin, nebo soubor.
Tohle je přesně důvod, proč se začátečník občas „ztratí“: stejný název příkazu může mít více forem.
4) Doporučený „bezpečný“ postup pro dohledání příkazu (začátečnická rutina)
Krok 1: zjistit typ příkazu
type -a NAZEV
Krok 2: zjistit cestu k externímu souboru (pokud existuje)
type -P NAZEV
type -P vrátí cestu k externímu souboru, pokud existuje. Pokud je příkaz jen builtin (např. cd), nevrátí nic.
Krok 3: prohlédnout soubor a ověřit, co to je
Například pro ls:
bash
type -a ls
p=$(type -P ls) && ls -l "$p" && file "$p"
Krátké vysvětlení:
- ls -l ukáže, kde soubor leží a jeho atributy.
- file napoví, zda jde o ELF binárku nebo skript.
- Pro „cestu k externí binárce“ je spolehlivé použít type -P.
- Teprve tuhle cestu má smysl poslat do ls -l a file.
5) which vs type -P vs command -v (kdy použít který)
Mnoho lidí zná příkaz which, ale je dobré vědět:
- which obvykle hledá jen v PATH (tedy externí soubory) a často nevidí builtiny ani funkce.
- command -v je užitečný pro zjištění, co bash vyhodnotí jako příkaz. Může ale vrátit i alias nebo builtin, tedy ne vždy cestu k souboru.
- type -P je nejspolehlivější, když chcete cestu k externímu souboru (ignoruje aliasy a funkce).
Prakticky:
which cd # často nic nenajde (cd je builtin)
type -a cd # ukáže, že jde o builtin
type -P ls # vrátí cestu k externímu souboru (např. /usr/bin/ls)
command -v ls # může vrátit i alias, pokud ho máte nastavený
type -a cd # ukáže, že jde o builtin
type -P ls # vrátí cestu k externímu souboru (např. /usr/bin/ls)
command -v ls # může vrátit i alias, pokud ho máte nastavený
Pokud má být doporučení pro začátečníka jednoduché:
- Na zjištění „co se spouští“ používejte type -a.
- Na zjištění „kde leží externí soubor“ používejte type -P.
- command -v berte jako doplněk pro ověření, co bash vyhodnotí; which jen jako doplňkový nástroj.
6) Jak vypsat vestavěné příkazy bashi (builtins)
Nejjednodušší je nápověda bashi:
help
Nápověda k jednomu konkrétnímu builinu:
bash
help cd
help export
help ulimit
A rychlý seznam builtinů:
bash
compgen -b
7) Kde v systému hledat externí příkazy (binárky / skripty)
7.1 Co je PATH
Bash typicky hledá externí příkazy v adresářích uvedených v proměnné PATH:
bash
echo "$PATH"
Typicky tam uvidíte něco jako /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin.
PATH je proměnná, ve které má shell uložený seznam složek, ve kterých bude hledat externí příkazy (tedy programy jako soubory).
Když napíšete například ls, bash nejdřív zjistí, zda nejde o alias/funkci/builtin. Pokud ne, začne procházet složky uvedené v PATH zleva doprava a hledá soubor jménem ls. Jakmile ho najde, spustí ho.
Proto obvykle stačí napsat jen ls a nemusíte psát celou cestu /usr/bin/ls.
Příklady:
echo "$PATH"
type -P ls
type -P ls
- echo "$PATH" ukáže, ve kterých složkách shell hledá externí příkazy.
- type -P ls ukáže, kde přesně shell našel externí příkaz ls (např. /usr/bin/ls).
Důležité: Pořadí složek v PATH rozhoduje. Pokud existují dva programy se stejným názvem, spustí se ten, který je ve složce uvedené v PATH dříve.
7.2 Když znáte název příkazu
bash
type -P grep
type -P apt
7.3 Když chcete hledat „ručně“ přes find
Ano, jde to – ale pro začátečníka je dobré držet se jedné jednoduché varianty. Například hledání v /usr/bin a /bin:
bash
find /usr/bin /bin -maxdepth 1 -type f -executable -name "ls"
find je užitečný hlavně tehdy, když:
- neznáte přesný název,
- nebo hledáte i mimo PATH.
8) Malé cvičení: tři příkazy, které ukážou celý princip
Vyzkoušejte po jednom příkazu:
bash
type cd
type -a echo
type ls
type -P ls
Co typicky uvidíte:
- cd → builtin
- echo → často builtin (a někdy existuje i externí /bin/echo)
- ls → externí soubor (např. /usr/bin/ls)
Tím máte v ruce praktické vysvětlení „co je příkaz“ v terminálu.
9) Bonus: z jakého balíčku pochází externí příkaz (volitelné)
Toto už je o krok pokročilejší, ale je to velmi užitečné při pochopení systému.
Debian / Ubuntu / Zorin (dpkg)
bash
dpkg -S "$(type -P ls)"
Fedora / RHEL / Rocky (rpm)
bash
rpm -qf "$(type -P ls)"
Arch (pacman)
bash
pacman -Qo "$(type -P ls)"
SUSE (openSUSE / SLES)
bash
rpm -qf "$(type -P ls)"
# nebo (pohodlnější výstup přes zypper):
zypper what-provides "$(type -P ls)"
- rpm -qf řekne přímo název balíčku.
- zypper what-provides často ukáže i repo a další detaily.
Tím zjistíte, který balíček daný program dodal.
10) Shrnutí pro začátečníka (to nejdůležitější)
- Builtin = vestavěný příkaz bashi (např. cd), neběží jako samostatný soubor.
- Externí příkaz = program/soubor v systému (např. ls, apt).
- Nejlepší „detektor“ je:
- type -a PRIKAZ (co se spouští)
- type -P PRIKAZ (kde leží externí soubor)
11) Doporučené zdroje
- man bash (sekce Builtins a Command execution)
- help v bashi (help, help BUILTIN)
- man type, help type
- man command
- man which, man find
PODPOŘTE OTEVŘENÉ NÁVODY A DALŠÍ ROZVOJ WEBU LINUX PRO DOMÁCNOST:
Věřím v otevřené znalosti a v to, že kvalitní návody mají být dostupné bez reklam, rušivých prvků a zbytečného trackingu. Každý článek na webu Linux pro domácnost vzniká na základě rešerše, praktického testování na reálném nebo virtuálním počítači, ověřování v různých linuxových distribucích a pečlivého zpracování krok za krokem. Často jde o práci na několik hodin, někdy i několik dnů.
Pokud Vám některý návod pomohl, ušetřil čas nebo usnadnil řešení problému, budu rád za dobrovolnou finanční podporu. A pokud se Vám myšlenka tohoto webu líbí a chcete jeho tvorbu podporovat pravidelně, podívejte se prosím na stránku: