Přejít na obsah

Bash: vestavěné (builtin) vs externí příkazy - LINUX PRO DOMÁCNOST - vzdělávací HUB

Přeskočit menu
Přeskočit menu
Přeskočit menu

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).



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:
  1. alias – zkratka (např. ls → ls --color=auto)
  2. funkce – shellová funkce
  3. builtin – vestavěný příkaz bashi (např. cd)
  4. 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ý



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
  • 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:

© 2025–2026 Miroslav Zakřevský / LINUX® PRO DOMÁCNOST (linux-doma.cz).
Není-li uvedeno jinak, texty a vlastní výukové materiály jsou zveřejněny pod licencí CC BY-SA 4.0. Kód, skripty, logo, značka, doména, ochranné známky, screenshoty cizího softwaru a materiály třetích stran mohou mít odlišný právní režim.
Návrat na obsah