Dobrá otázka zní: "Co je to Bash?" Odpovědí by mohlo být: "Vykonavatel textových příkazů" (comand line interpreter = CLI). Co si pod tím ale představit? Proč jsem nepoužil označení jako shell, příkazový řádek, terminál, konzole?
Proberme si úlohu Bashe v operačním systému podrobněji a zkusme k ní najít ekvivalent v oblasti grafického ovládání. Takže když startuje takový systém, spouští se jako první jádro, které načte potřebné moduly (ovladače apod.) Následuje spuštění programů na pozadí (např. různé servery) - viz známé výpisy OK během startu.
Ve stavu, kdy systém běží, disponuje potřebnými ovladači a podpůrnými službami, může předat řízení uživateli. Jaký způsob řízení to bude, záleží na potřebách a možnostech majitele, správce a samotných uživatelů.
Můžeme si představit ovládání textové (klávesnice + monitor), grafické (klávesnice + myš + monitor) nebo třeba hlasové (mikrofon + reproduktor). Hlas je asi poněkud futuristická vize, grafika je v současné době standard a na text se již pohlíží nejčastěji jako na přežitek.
Textové uživatelské prostředí je z nich skutečně nejstarší. Pochází z dob velkých sálových počítačů. Ty měly jednu hlavní klávesnici a monitor (tzv. konzole). Protože byl počítač drahý (a velký), byla snaha umožnit co největšímu počtu pracovníků používat jej současně.
Aby se pracovníci nemuseli těsnat v jedné místnosti u klávesnic napojených přímo na počítač, byly vynalezeny jednoduché přístroje s obrazovkou a klávesnicí, které se připojovaly např. k sériovému rozhraní počítače. Říkalo se jim terminály.
Konzole a terminály vytvářely nezbytný hardwarový základ textového prostředí. Pro práci s počítačem potřebujeme stanovit syntaxi vzájemné komunikace (něco jako pravidla příkazového pravopisu) a soubor základních příkazů. To představuje jakousi ulitu, skořápku či plášť (anglicky shell), v němž se může uživatel bezpečně po systému pohybovat.
Dnes má téměř každý počítač jen jeden monitor a klávesnici a k tomu ještě myš. V linuxových distribucích se při startu systému většinou na hlavní konzoli automaticky spouští grafické prostředí (nejčastěji některá z variant X Window System).
Při přihlašování v grafickém prostředí si pak vyberete svůj oblíbený správce oken (Window Manager), třeba GNOME nebo KDE. Tento správce vám definuje pravidla práce s myší (tedy něco jako myšoidní příkazy) a nabídne soubor základních nástrojů (správce souborů, lištu, hlavní nabídku, ...). Správce oken je tedy takový grafický shell.
V textovém prostředí zastávají funkci shellu takzvané vykonavače (interprety) příkazových řádků (Command Line Interpreter - CLI), zkráceně příkazový interpret. Jsou to programy, které zobrazí na začátku řádku pár znaků a (obvykle blikající) kurzor. Čekají na vstup z klávesnice, vykonají zadaný příkaz, jeho výsledky zobrazí na obrazovce a zase zobrazí výzvu s kurzorem.
Tento princip používal Unix již v sedmdesátých letech 20. století. Napodobovaly jej později i disketové operační systémy (DOS) vznikající na přelomu 70. a 80. let. Unixové shelly však (i vzhledem ke své delší historii) nabízejí mnohem větší komfort ovládání, jak si postupně v tomto seriálu ukážeme.
Příkazových interpretů pro unixové systémy existuje povícero. Dělí se do dvou skupin - Bourne shelly a C shelly. Každá skupina má své výhody a nevýhody. My se zaměříme na Bash (i Again Shell), který vznikl jako součást projektu GNU a snaží se kombinovat výhody zástupců obou skupin příkazových interpretů.
Kde najít příkazový interpret?
Dříve, než si ukážeme, co všechno Bash dokáže, musíme zodpovědět jednu základní otázku. Kde vlastně v prostředí X takový Bash najdeme? Jak spustit textové prostředí, když systém nabootuje do grafiky? Musím si koupit ke svému PC terminál?
Jen klid. Žádný terminál si pořizovat nemusíme, i když, pokud bychom jej měli, také by to fungovalo. Podpora klasických terminálů (připojených přes sériové rozhraní) je v unixových systémech přítomna dodnes.
Jsou však jednodušší způsoby, jak se k Bashi můžeme dostat. Jedním z nich jsou virtuální konzole. Ty běží tiše paralelně s naší grafickou obrazovkou. Stačí stisknout kouzelnou kombinaci kláves [Ctrl+Alt+F1] a máme textovou konzoli. Celkem jich paralelně běží obvykle šest, takže můžete postupně vyzkoušet zaměnit klávesu [F1] za [F2], [F3] až [F6]. Při přechodu mezi textovými obrazovkami nemusíme držet [Control].
V textovém režimu se (stejně jako v grafice) musíme před začátkem práce nejprve přihlásit. K tomu slouží výzva Login:, za niž napíšeme své uživatelské jméno. Po potvrzení klávesou [Enter] budeme vyzvání k zadání hesla (Password:), které se nebude vypisovat na obrazovku. Po úspěšném zadání by se měl spustit Bash. Do grafiky se vrátíte pomocí [Alt+F7].
Další možností je spustit si okno s emulátorem terminálu přímo v grafickém prostředí. K tomu slouží např. program xterm, Konsole (KDE) nebo gnome-terminal (GNOME). V něm se hned spustí Bash a zobrazí výzvu s kurzorem. Zde se přihlašovat nemusíme, neboť jsme se přihlásili již do správce oken.
V neposlední řadě je možné se k našemu počítači přihlásit po síti. Lze připojit terminál (třeba počítač s terminálovým programem) na sériový port. Jednodušší ale možná dnes bude toto přihlášení provést z jiného počítače po síti (např. ethernet). I při vzdáleném přihlášení se po nás bude chtít ověření totožnosti v podobě jména a hesla.
GNU Bourne-Again Shell
Čím začít? Je toho prostě tolik. Nejprve si musíme vzájemně rozumět. Proto začnu vysvětlením základních pojmů používaných v prostředí příkazových interpretů. První, čím se nám Bash ohlásí, je několik znaků na začátku řádku, za kterými stojí kurzor. Toto uskupení se nazývá výzva (anglicky prompt). Před kurzorem se mohou zobrazovat různé informace od jména přihlášeného uživatele, přes jméno počítače, aktuální adresář, čas až po verzi Bashe.
Struktura promptu se dá měnit podle přání uživatele. Jak toho lze přesně dosáhnout, si předvedeme v některém z dalších dílů tohoto seriálu. Původní hodnota je nastavena při instalaci nebo ji určuje správce systému.
Vždy, když se v Bashi zobrazí prompt, je možné zadávat příkazy. Pokud kurzor jen stojí na začátku prázdného řádku, interpret zřejmě vykonává nějaký příkaz. V takovém případě je nutné vyčkat, až práci ukončí, nebo jej násilně ukončit. Násilné ukončení provedeme stiskem kombinace kláves [Ctrl+c].
Ukažme si tuto funkci na příkladu. K příkladu využijeme příkaz sleep (spát), za který můžeme napsat číslo. Toto číslo udává počet sekund, po které bude Bash spát, tj. nevykonávat další příkazy, napište třeba sleep 5 a stiskněte klávesu [Enter] (jednou z těchto kláves je nutné ukončit zadávání každého příkazu, resp. řádku s více příkazy). Nyní bude Bash pět sekund spát a pak zase ukáže prompt. Dále zadejte sleep 55 a Bash by spal 55 sekund. My ale po několika sekundách budeme chtít spánek přerušit a zase pracovat, a proto sleep ukončíme pomocí [Ctrl+c]. Ukáže se nám prompt.
Součástí promptu bývá jméno aktuálního (pracovního) adresáře, ale často jen jeho konec. Např. místo /home/jana jenom jana. Příkaz pwd nám zobrazí celou cestu k aktuálnímu adresáři. Nástroj pwd patří k tzv. interním příkazům Bashe. Interní příkazy jsou takové, které jsou přímo součástí shellu, a ten je před jejich vykonáním nemusí načítat z disku. Obecně to, co zadáme na řádku jako první, je chápáno jako příkaz.
Pokud neodpovídá žádnému internímu příkazu, začne Bash hledat spustitelný soubor (program) stejného jména na disku. Příkladem takového externího příkazu je ls vypisující obsah aktuálního (nebo zadaného) adresáře. Některé příkazy můžeme použít jen takto samostatně, většina jich ale vyžaduje parametry. To je prostředek k tomu, aby uživatel svůj požadavek upřesnil (např. s čím a jak má příkaz pracovat). Dejme tomu takové ls /home vypíše obsah adresáře /home. Nemusíme zadávat jen jeden argument. Více argumentů od sebe oddělujeme mezerou. Takže ls /home /var/spool vypíše obsahy adresářů /home a /var/spool (nikoli /var a /spool, který navíc ani neexistuje).
Před argumenty lze většinou uvést ještě různé volby, které mění nebo rozšiřují funkcionalitu příkazu. Třeba ls -l /home vypíše opět obsah /home, tentokrát ovšem v dlouhém formátu (více informací na jednom řádku, včetně vlastníka a přístupových práv). Také voleb můžeme uvést vícero současně. Kdybychom chtěli zobrazit i skryté soubory (tj. ty, jejichž jméno začíná znakem .), použili bychom volbu -a. Nemusíme však zadávat ls -l -a ale můžeme si zápis zkrátit na ls -la kdy v obou případech získáme podrobný seznam všech souborů v aktuálním adresáři. To jsou volby v krátké (jednoznakové) podobě.
K dispozici však bývají (často i pro stejnou funkci) také volby dlouhé. Tak třeba pro zmíněné -l -a by bylo ekvivalentem ls --format=long --all Je zřejmé, proč mají dlouhé volby před sebou dvě pomlčky. Kdyby tomu tak nebylo, nedalo by se zadávat více krátkých voleb za jednou společnou pomlčkou, neboť by z nich mohlo vzniknout slovo (např. -a -l dá dohromady -al, což je velmi podobné --all).
Nápověda
Velmi užitečnou volbou, kterou nabízí většina příkazů, je --help. Zadáme-li touch --help, vypíše se nápověda k programu touch. Na prvním řádku (Usage - použití) vidíme správný postup zápisu příkazu (tzv. syntaxi). Je tam samozřejmě vlastní jméno programu (tj. touch) následované textem [OPTIONS]... FILE... Volby (anglicky Options) jsou v hranatých závorkách, což znamená, že není povinnost je udávat. Tři tečky zase říkají, že voleb může být více. File (tedy soubor) znamená soubor, kterého se chceme příkazem touch "dotknout". Souborů může být zadáno více (tři tečky), přičemž jejich jména musí být oddělena mezerou.
Na druhém řádku nápovědy je stručný popis příkazu. Dočteme se v něm, že touch nezmění obsah souboru, ale nastaví čas posledního přístupu na zadanou hodnotu. Pokud soubor neexistuje, bude jako prázdný vytvořen. Poslední část nápovědy představuje seznam voleb ve zkrácené a/nebo plné podobě se stručným popisem.
Manuálové stránky
Komu nestačí nápověda získaná pomocí --help, může pro většinu příkazů využít manuálové stránky. Jejich vyvolání je snadné. Stará se o ně program man, jehož parametrem je jméno manuálové stránky, což je zpravidla zároveň jméno programu. Po zadání man ls tak dostaneme manuálovou stránku programu ls. V záhlaví vidíme stručnou definici programu, následuje podrobná syntaxe. I zde platí, že parametry uvedené v hranatých závorkách nejsou povinné. I v případě ls se můžeme setkat s vnořenými hranatými závorkami. Ty představují to, že pokud se rozhodneme jejich přímý obsah použít, můžeme si dále volit, zda budou přítomny i určité rozšiřující části volby.
Je-li v jedněch závorkách uvedeno několik možností oddělených svislou čárou (znak |), znamená to, že si můžeme vybrat jen jednu z nabízených možností. Obdobný význam mají slova oddělená čárkou a uzavřená do složených závorek. Zde však musí být alespoň jedna hodnota použita. Např. [--color[={yes,no,tty}]] znamená, že můžeme použít parametr --color, a to buď samotný, nebo se znakem =. Pokud už ale přidáme rovnítko, musíme pokračovat jedním ze slov yes,no,tty.
V další části manuálové stránky bývá podrobný popis daného programu. Tuto část doporučuji si pročíst, neboť se tak můžete snadno dovědět, že určitý příkaz má mnohem více funkcí, než byste čekali. V některých případech zde najdete odkazy na jinou dokumentaci ke zkoumanému problému.
Asi nejčastěji vyhledávanou částí manuálové stránky je přehled voleb. Každý příkaz má vlastní množinu voleb. Je sice pravda, že některé volby se vyskytují téměř u všech příkazů (např. --help nebo --version), ale záleží vždy jen na programátorovi, zda a jak je do programu zahrne.
Delší manuálové stránky mohou obsahovat ještě vysvětlivky zkratek použitých v definici voleb. V případě ls je to třeba definice barevné palety pro výpis adresářů. Ke konci stránky se dovídáme něco o chybách, ale bývají zde i odkazy na ostatní manuálové stránky vztahující se k tématu.
Po manuálové stránce se pohybujeme šipkami, klávesami [PgUp] a [PgDn], ale i dalšími způsoby. (Funguje vlastně celá sada klávesových příkazů jako v editoru Vim. Například gg pro skok na začátek stránky, lomítko pro vyhledání textu. Pozn. redakce.) K vlastnímu zobrazení manuálových stránek je používán program less. Ten můžete opustit klávesou [q], nápovědu získáte klávesou [h].
Závěr
To byl úvod do textového prostředí v Linuxu. Ještě než se pro tentokrát rozloučíme, měl bych zmínit, jak se z Bashe správně odhlásit. Můžete použít jeden z příkazů logout a exit. Většinou je lze nahradit kombinací kláves [Ctrl+d]. A příště se podíváme na další užitečné klávesové zkratky, řízení úloh a jiné zajímavosti.