Terminál a shell

Shell, prompt, TTY — jak s počítačem mluvíš textem.

Terminál je okno, do kterého píšeš příkazy. Shell je program, který ty příkazy čte a vykonává. Lidi to házejí do jednoho pytle, ale je to jako telefon (krabička v ruce) versus člověk na druhém konci (ten, kdo ti opravdu odpovídá). Jakmile ten rozdíl uvidíš, přestaneš se ztrácet v návodech, pochopíš, proč ti stejný příkaz jednou funguje a jindy ne, a hlavně — terminál se z „černé děsivé obrazovky" změní v nejrychlejší nástroj, jaký na počítači máš.


Pár pojmů na úvod

  • Terminál (emulátor) = grafické okno, které ti zobrazuje text a bere klávesy. Sám o sobě nic neumí — jen předává, co napíšeš, dál. Konsole, GNOME Terminal, Alacritty, Kitty… všechno jsou emulátory terminálu (napodobují staré hardwarové terminály z dob, kdy počítač zabral celý sál).
  • Shell = program uvnitř terminálu, který tvoje příkazy interpretuje a spouští. Nejčastěji bash nebo zsh. Tohle je ten „člověk na druhém konci", co ti rozumí.
  • Prompt = ten text s $ na konci, kterým ti shell říká „jsem připraven, piš". Není součást příkazu — je to pozvánka.
  • TTY = původně fyzický terminál (teletype), dnes označení pro textovou konzoli. Přes Ctrl+Alt+F3 se dostaneš na „holé" TTY bez grafiky — užitečné, když ti zamrzne plocha (víc v kapitole o procesech).
  • Příkaz (command) = program nebo vestavěná funkce shellu, kterou spouštíš (ls, cp, cd).

Terminál vs shell vs TTY — kdo je kdo

Tohle je nejčastější zdroj zmatku úplně na začátku, tak si to pořádně rozdělme.

VrstvaCo to jePříkladAnalogie
TerminálOkno, co zobrazuje text a bere klávesyKonsole, GNOME TerminalSluchátko telefonu
ShellProgram, co příkazy čte a vykonávábash, zsh, fishČlověk, co ti odpovídá
TTYTextová konzole bez grafikyCtrl+Alt+F3Přímá linka bez displeje

Když otevřeš Konsole, děje se tohle: terminál (okno) spustí shell (bash), shell vypíše prompt a čeká. Ty napíšeš ls, stiskneš Enter — terminál to pošle shellu, shell najde program ls, spustí ho, a jeho výstup terminál zobrazí zpátky na obrazovku.

💡 Proč to vůbec rozlišovat? Protože můžeš měnit každou vrstvu zvlášť. Nelíbí se ti vzhled okna? Vyměníš terminál. Chceš chytřejší doplňování a barvičky? Vyměníš shell za zsh — okno zůstane stejné. A přes SSH se připojíš na vzdálený shell úplně bez terminálu na druhé straně.


Jak číst prompt

Prompt ti toho říká víc, než vypadá. Typicky vypadá takhle:

matej@thinkpad:~/projekty$

Rozebráno po kouskách:

  • matej — jméno uživatele, pod kterým jsi přihlášený.
  • @ — oddělovač, čti jako „na".
  • thinkpad — jméno počítače (hostname). Poznáš tak, jestli jsi na svém stroji, nebo přes SSH na serveru.
  • : — oddělovač.
  • ~/projekty — kde právě jsi (pracovní adresář). ~ je zkratka za tvůj domovský adresář (/home/matej).
  • $ — konec promptu, „piš sem".

$ vs # — tohle si zapamatuj

Poslední znak promptu prozrazuje, kdo jsi:

  • $ = běžný uživatel. Můžeš dělat věci ve svém prostoru, ale ne zasahovat do systému.
  • # = root (správce, superuživatel). Můžeš všechno — včetně smazání celého systému jedním překlepem.

Proto v návodech uvidíš příkazy uvozené $ nebo # — je to signál, s jakými právy je pouštět. Znak sám neopisuj, je to jen značka promptu.

🚩 Když vidíš #, buď ve střehu. Root nemá záchrannou brzdu: rm smaže bez ptaní, žádný koš. Proto se pod rootem nezdržuj déle, než musíš — víc v kapitole o právech a sudo.


Anatomie příkazu

Skoro každý příkaz má stejnou stavbu — jakmile ji jednou uvidíš, přečteš i příkaz, který jsi nikdy neviděl:

ls -l /etc
   └─ argument (na čem to pracovat)
  └───── volba / přepínač (jak se to chovat)
└──────── příkaz (co se udělat)
  • Příkaz — co chceš udělat (ls = vypiš obsah adresáře).
  • Volby (přepínače) — mění chování. Začínají pomlčkou.
  • Argumenty — na čem má příkaz pracovat (soubor, adresář, text).

Krátké vs dlouhé volby

Volby mají často dvě podoby — stejný účel, jiný zápis:

KrátkáDlouháVýznam
-l(nemá)dlouhý výpis (long)
-a--alli skryté soubory
-h--human-readablevelikosti čitelně (KB, MB)
-r--recursivei podadresáře
  • Krátké (-l) se dají slučovat: ls -la = ls -l -a. Rychlé na psaní.
  • Dlouhé (--all) jsou upovídané, ale čitelné — ve skriptech je preferuj, aby bylo za půl roku jasné, co dělají.
ls -l -a -h        # tři krátké volby zvlášť
ls -lah            # totéž, sloučené
ls --all --human-readable   # dlouhá, sebedokumentující verze

⚠️ Na pořadí a mezerách záleží. ls-l (bez mezery) shell hledá jako jeden neexistující příkaz. ls -l (s mezerou) je příkaz ls s volbou -l. Mezera odděluje slova — pro shell je posvátná.


Když nevíš — nápověda je vždy po ruce

Nikdo si nepamatuje všechny volby. Dobrý sysadmin není ten, kdo umí všechno zpaměti, ale ten, kdo si to umí rychle najít.

  • man příkaz — manuálová stránka. Kompletní, oficiální, ale hutná. Listuješ šipkami/mezerníkem, hledáš přes /slovo, ukončíš klávesou q.
    man ls
    
  • příkaz --help — rychlý přehled voleb rovnou v terminálu. Kratší než man, ideální na „jak se jmenovala ta volba".
    ls --help
    
  • tldr příkaz — komunitní taháky: jen příklady použití, žádná teorie. Skvělé, když nechceš číst, ale vidět, jak se to reálně píše. (Balík se často jmenuje tldr nebo tealdeer, doinstaluješ ho.)
    tldr tar
    

💡 Pořadí, jak to použít v praxi: nejdřív tldr (rychlý příklad) → nezabralo? --help (přehled voleb) → potřebuješ detail? man (úplná pravda). Tři úrovně od nejrychlejší po nejúplnější.


Efektivita — ať nepíšeš zbytečně

Tady se láme začátečník od někoho, komu terminál lítá pod rukama. Nejde o talent, jen o pár návyků.

Tab completion (doplňování tabulátorem)

Napiš pár písmen a stiskni Tab — shell dopíše zbytek. Funguje na příkazy, soubory i adresáře.

cd Doku<Tab>        # doplní se na "Dokumenty/"
  • Když je možností víc, stiskni Tab dvakrát — shell vypíše všechny varianty.
  • Šetří to čas i chyby: co Tab doplní, to reálně existuje. Když se nedoplňuje, špatně píšeš cestu.

Historie příkazů

Shell si pamatuje, co jsi psal. Nemusíš to ťukat znovu:

  • Šipka nahoru / dolů — procházíš předchozí příkazy.
  • Ctrl+Rreverzní hledání: začneš psát část příkazu a shell dohledá poslední, který ho obsahoval. Ždímej Ctrl+R znovu pro starší shody, Enter pro spuštění.
    (reverse-i-search)`ssh': ssh matej@server
    
  • !! — „ten úplně poslední příkaz". Zlatý poklad, když zapomeneš sudo:
    dnf install htop        # Permission denied
    sudo !!                 # spustí: sudo dnf install htop
    
  • history — vypíše celou historii; !123 spustí příkaz číslo 123.

Editace řádku

Kurzor se nemusí courat šipkou přes celý řádek:

KlávesaCo udělá
Ctrl+Askok na začátek řádku
Ctrl+Eskok na konec řádku (End)
Alt+f / Alt+bskok po slovech (v mnoha terminálech i Ctrl+←/Ctrl+→)
Ctrl+Usmaže od kurzoru doleva (celý řádek před ním)
Ctrl+Ksmaže od kurzoru doprava
Ctrl+Wsmaže slovo vlevo

Klávesové zkratky, které musíš znát

Tyhle nejsou o pohodlí — bez nich se v terminálu ztratíš, až něco „zamrzne". Neděsí se: nic nerozbiješ.

  • Ctrl+Cpřeruš běžící program. Zabije to, co zrovna běží (výpis, který nekončí, zaseknutý příkaz). Tvoje první pomoc, když „to nejde ukončit".
  • Ctrl+Dkonec vstupu (end-of-file). Na prázdném promptu tě odhlásí ze shellu (zavře ho). Používá se i k ukončení programů, co čekají na vstup (třeba cat bez souboru, python).
  • Ctrl+Zuspí program do pozadí (pozastaví ho). Vrátíš ho příkazem fg, necháš běžet v pozadí přes bg. (Víc o práci na pozadí v kapitole o procesech.)
  • Ctrl+Lvyčistí obrazovku (jako příkaz clear), ať máš klid a čistý start. Nic nemaže, jen posune výpis nahoru.

⚠️ Pozor na Ctrl+C a Ctrl+V. V terminálu nejsou vždycky kopírovat/vložit — Ctrl+C zabíjí program! Na kopírování se v terminálech často používá Ctrl+Shift+C / Ctrl+Shift+V (nebo označení myší). Někdo si to přemapuje, ale výchozí chování je dobré znát.


Proč vůbec terminál, když je tu myš

Klikání je intuitivní. Tak proč se učit psát příkazy? Protože terminál umí věci, které myší nikdy nezvládneš:

  • Skriptovatelnost. Sled příkazů uložíš do souboru a pustíš tisíckrát stejně. Nasadit web na 40 serverů klikáním? Šílenství. Jeden skript? Vteřiny. Terminál je automatizovatelný, myš ne.
  • Vzdálený přístup. Server v datacentru nemá monitor ani myš. Připojíš se přes SSH a máš přesně ten samý shell jako doma. Grafika přes síť je pomalá a křehká; text lítá i přes mizernou linku.
  • Přesnost a opakovatelnost. „Klikni na Nastavení, pak na třetí záložku…" — verze se mění, tlačítka se stěhují. Příkaz systemctl restart nginx znamená přesně jednu věc a bude fungovat stejně za pět let. Dá se zkopírovat do návodu beze zbytku.
  • Spojování nástrojů. Malé příkazy zřetězíš rourou (|) do jednoho mocného řetězce — „vypiš procesy → vyfiltruj ty moje → seřaď podle paměti". Tohle je unixová superschopnost (víc v kapitole o rourách).
  • Rychlost. Zkušený člověk v terminálu předběhne myš o řády. Žádné hledání okna, žádné scrollování.

💡 Nejde o „buď anebo". Grafika je super na prohlížení a kreativní práci. Ale všechno, co má být spolehlivé, opakovatelné a vzdálené, patří do terminálu. Proto ho každý sysadmin žije.


Failure modes — časté omyly začátečníků

  • „Terminál a shell je to samé." Není. Okno (terminál) jen zobrazuje; příkazy vykonává shell uvnitř. Můžeš je měnit nezávisle.
  • „Opisuju i ten $ z návodu." $ (ani #) není součást příkazu — je to značka promptu. Opisuješ jen to, co je za ní.
  • „Píšu příkaz bez mezery, ls-l." Shell čte slova oddělená mezerami. Bez mezery hledá jeden neexistující příkaz ls-l. Mezera je oddělovač, ne dekorace.
  • „Terminál zamrzl, restartuju počítač." Většinou jen běží nějaký program. Zkus Ctrl+C (přeruš), pak Ctrl+D, q (v man/pageru) nebo Ctrl+L. Restart je až úplně poslední možnost.
  • „Nepamatuju si volby, takže to neumím." Nikdo si je nepamatuje. --help, man a tldr jsou součást řemesla, ne známka slabosti.
  • Ctrl+C zkopíruje.“ V terminálu často zabíjí program. Kopíruj Ctrl+Shift+C nebo myší.

🛠️ Cvičení

  1. Přečti svůj prompt. Otevři terminál a rozeber, co ti prompt říká: kdo jsi, na jakém stroji a v jakém adresáři. Je na konci $ nebo #? Co by znamenalo, kdyby tam byl ten druhý znak?
  2. Krátká vs dlouhá volba. Spusť ls -a a pak ls --all. Dostaneš stejný výsledek? Pak zkus sloučit tři krátké volby do jedné (-l, -a, -h) a ověř, že to dělá totéž jako napsané zvlášť.
  3. Najdi nápovědu třemi způsoby. Ke stejnému příkazu (třeba cp) si zobraz cp --help, pak man cp (a ukonči ho klávesou q), a pokud máš, tldr cp. Který ti nejrychleji řekl, jak se to používá?
  4. Historie a !!. Napiš nějaký příkaz, pak ho vyvolej šipkou nahoru. Vyzkoušej Ctrl+R a napiš část toho příkazu. Nakonec zkus scénář: pustíš příkaz, který chce práva, a opravíš ho přes sudo !!.
  5. Zkrotit zaseknutý terminál. Spusť ping localhost (běží donekonečna) a zastav ho. Pak spusť cat bez argumentu (čeká na vstup) a ukonči ho. Které klávesy jsi na to použil a proč jiné?
Náčrt řešení — rozbal, až si cvičení zkusíš sám
  1. Čtení promptu — v matej@thinkpad:~$ je matej uživatel, thinkpad hostname, ~ domovský adresář, $ = běžný uživatel. Kdyby tam bylo #, jsi root (superuživatel) a smíš zasahovat do celého systému. Pozor: # = maximální opatrnost, root nemá koš ani „opravdu smazat?".
  2. Volbyls -a a ls --all dělají přesně totéž, jen krátký vs dlouhý zápis. Sloučení: ls -lah = ls -l -a -h. Krátké volby jdou slepit za jednu pomlčku, dlouhé (--all) ne. Pozor: sloučit lze jen krátké jednopísmenné volby, --all-l je nesmysl.
  3. Nápověda--help dá rychlý přehled voleb, man cp úplný manuál (ukončíš q, listuješ mezerníkem, hledáš /slovo), tldr cp ukáže rovnou příklady. Na „jak to použít" bývá nejrychlejší tldr. Pozor: tldr není vždy nainstalovaný — doinstaluj balík tldr/tealdeer.
  4. Historie — šipka nahoru vyvolá předchozí příkaz, Ctrl+R hledá v historii podle textu (opakuj Ctrl+R pro starší shody). sudo !! spustí poslední příkaz s sudo — klasika, když zapomeneš práva. Pozor: !! vloží doslova poslední řádek, tak si ověř, co spouštíš, ať omylem nespustíš něco jiného.
  5. Zaseknutý terminálping localhost zastavíš přes Ctrl+C (přeruší běžící program). cat bez argumentu čeká na vstup z klávesnice; ukončíš ho přes Ctrl+D (konec vstupu). Jsou to různé situace: Ctrl+C zabíjí běžící proces, Ctrl+D říká „už nic nezadám". Pozor: Ctrl+D na prázdném promptu tě odhlásí (zavře shell).

🧠 Otázky & odpovědi

Jaký je rozdíl mezi terminálem a shellem?

Terminál je okno, které zobrazuje text a bere klávesy — Konsole, GNOME Terminal, Alacritty. Sám nic nevykonává, jen přenáší. Shell je program uvnitř toho okna (nejčastěji bash nebo zsh), který tvoje příkazy čte a spouští. Analogie: terminál je sluchátko telefonu, shell je člověk na druhém konci, co ti odpovídá. Proto můžeš vyměnit shell (bash → zsh) a okno zůstane stejné — a naopak.

Co znamená znak $ versus # na konci promptu?

Prozrazuje, s jakými právy jsi. $ = běžný uživatel: smíš pracovat ve svém prostoru, ale ne sahat na systém. # = root (superuživatel): smíš úplně všechno, včetně nevratného smazání systému. Proto v návodech # znamená „tohle chce práva správce". Samotný znak neopisuješ — je to jen značka promptu, ne součást příkazu. A pod rootem se zdržuj jen na nezbytně nutnou dobu.

Jak si rozklíčuju příkaz, který vidím poprvé?

Rozděl ho na tři části: příkaz volby argumenty. U ls -l /etc je ls příkaz (co se má stát), -l volba (jak se má chovat) a /etc argument (na čem). Volby začínají pomlčkou: krátké jednopísmenné (-l, dají se slučovat do -la) a dlouhé upovídané (--all). Když nevíš, co volba dělá, příkaz --help nebo man příkaz to vysvětlí. Slova odděluje mezera — na ní záleží.

Terminál zamrzl a nereaguje — co s tím?

Nejspíš jen běží nějaký program a čeká. Zkoušej po řadě: Ctrl+C přeruší běžící příkaz (výpis, co nekončí, zaseknutý proces); q ukončí man nebo pager (less); Ctrl+D ukončí program, co čeká na vstup; Ctrl+L jen vyčistí obrazovku. Restart počítače je až úplně poslední možnost — skoro vždy stačí jedna z těchhle kláves. „Zamrznutí" bývá jen program, který ještě neskončil.

Proč se učit terminál, když všechno jde naklikat?

Protože terminál umí, co myš neumí: automatizovat (příkazy uložíš do skriptu a pustíš tisíckrát stejně), pracovat vzdáleně (přes SSH na serveru bez monitoru), být přesný a opakovatelný (systemctl restart nginx znamená pořád totéž, tlačítko se přejmenuje) a spojovat nástroje rourou do mocných řetězců. Grafika je fajn na prohlížení; ale všechno spolehlivé, opakovatelné a vzdálené patří do terminálu. Proto ho každý sysadmin používá dennodenně.