Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

9. diel - Linuxový terminál (Bash) - Štandardný vstup / výstup a expanzia

V minulom dieli nášho seriálu o Linuxe sme pokračovali v prehliadke terminálu. Naučili sme sa pracovať s užívateľskými právami a spravovať procesy. V dnešnom dieli sa zameriame na štandardný vstup / výstup a vysvetlíme si pojem expanzie.

Štandardný vstup a výstup

V Linuxe existujú pojmy "štandardný výstup" a "štandardný vstup". Ide o základné dátové prúdy, s ktorými pracuje väčšina linuxových programov. Čítajú z nich dáta alebo do nich dáta naopak zapisujú. Štandardne je štandardný výstup pripojený na konzolu a štandardný vstup na klávesnici. Takto sme komunikovali napr. S programom ls, ktorý vypísal obsah zložky na štandardný výstup, teda do konzoly.

Výpis súborov a priečinkov v termináli Linuxe - Základy Linuxu

Presmerovanie výstupu

Štandardný výstup môžeme pre daný program presmerovať a to pomocou operátora>, prípadne >>. Skúsme si to:

Presmerovanie výstupu v Bash v Linuxe - Základy Linuxu

Do konzoly sa teraz nevypísala nič a v priečinku sa naopak objavil súbor vypis.txt, ktorý sa pre program správal ako štandardný výstup a preto je v ňom výpis zložiek. Súbor môžeme otvoriť napr. V gedit alebo v nano.

Presmerovanie výstupu v Bash v Linuxe - Základy Linuxu

Ak použijeme operátor>, súbor sa vždy prepíše. S operátorom >> sa pripisuje na koniec súboru (append) a jeho obsah sa teda nemaže.

Presmerovanie vstupu

Podobne, ako výstup, môžeme presmerovať aj vstup. Nemalo by vás prekvapiť, že toho docielime pomocou znaku <. Možno vás napadá k čomu je to dobré, keď užívateľ takmer vždy zadáva klávesnicou. Ako vstup môžeme určite použiť textový súbor alebo dokonca výstup nejakého iného programu (viď ďalej).

Ako ukážka nám poslúži úplne jednoduchý výpis hlavičky súboru. Hlavičkou je myslené prvých 10 riadkov a vypíšeme ju príkazom head. Ako vstup ju nasmerujeme náš súbor z predošlej ukážky.

Presmerovanie vstupu v Bash v Linuxe - Základy Linuxu

Výstup môžeme pokojne opäť presmerovať do ďalšieho súboru.

Presmerovanie vstupu v Bash v Linuxe - Základy Linuxu

Rúry (pipelines)

Keď dá presmerovať vstup aj výstup nejakého príkazu, nemal by byť problém prepojiť 2 príkazy tak, aby druhý spracovával výstup toho prvého. Príkazy prepojíme pomocou pekne expresívne nazvanej rúrky, ktorú zapíšeme zvislou čiarou. Môžete sa stretnúť aj s označením rúra alebo "pajpa" od anglického pipe.

Na príklade si výpisy obsah zložky do prehliadača textových súborov less. Výhodou je, že môžeme výpisom jednoducho stránkovať.

Rúry v Bashi v Linuxe - Základy Linuxu
Prepojenie less pomocou rúry s príkazom ls v Linuxe - Základy Linuxu

Rúrok môžeme použiť hneď niekoľko, urobme si rovnaký príklad s tým rozdielom, že výpis z ls pošleme filtra head, ktorý oreže len prvých 10 riadkov a tie pošleme druhú trubkou less.

Rúry v Bashi v Linuxe - Základy Linuxu
Prepojenie less pomocou rúry s príkazom ls v Linuxe - Základy Linuxu

Filtre

Mnoho príkazov (alebo všeobecne programov) prijíma dáta na štandardnom vstupe, tieto dáta nejako spracuje a výsledok odošle na výstup. Takým príkazom sa niekedy hovorí filtre a so znalosťou presmerovanie vstupov / výstupov a trubiek sú veľmi užitočné. Spomeňme si aspoň niektoré z nich.

cat Cat je skratka z CONCATENATE, teda spojiť. Ide o program, ktorý načíta jeden alebo viac súborov a pošle ich na štandardný výstup. Môžeme pomocou neho súbory aj vytvárať. Súbory odovzdáme jednoducho v parametroch, pokiaľ ich odovzdáme viac, spoja sa do jedného dlhšieho textu.
cut Cut umožňuje už podľa názvu narezať vstupný text a to napr. Podľa bajtov, znakov alebo stĺpcov.
fmt Sformátuje daný text, aby bol ľudsky lepšie čitateľný. Často sa používa napr. Pre zalomenie odsekov na určitú dĺžku riadku.
grep Vypíše riadky zo vstupu, ktoré zodpovedajú zadanému formátu. Môžeme tu použiť aj regulárne výrazy.
head Vypíše prvých 10 riadkov zo vstupu.
pr Pripraví text pre tlač a to najmä tak, že ho rozdelí na jednotlivé stránky.
sort Zotriedi riadky textu na vstupe podľa abecedy a pošle ich na výstup.
UNIQ Ak filtra odovzdáme zotriedený súbor, odstráni z neho duplicitné riadky.
tail Vypíše posledných 10 riadkov zo vstupu.
tr Tr je odvodené z translate a umožňuje nahradiť znaky vo vstupnom texte. Môžeme nahrádzať určité slová alebo treba všetko previesť na veľké písmená.
awk Implementácia jazyka AWK pre spracovávanie textových súborov.
sed Pokročilejšie verzie príkazu tr.
Expanzia

Už vieme, že v shell príkazoch môžeme používať špeciálne znaky. Zatiaľ sme sa takto stretli napr. S "*" alebo s "?". Než je taký príkaz vykonaný, je shell a najprv spracovaný a prebehne tzv. Expanzie. Rôzne skrátené zápisy a značky sú v tú chvíľu prevedené na ich výsledok.

Na expanziu sa môžeme veľmi jednoducho pozrieť a to pomocou príkazu echo. Ten možno poznáte z Windows a vykonáva len jednu jednoduchú úlohu - vypíše text odovzdaný v parametri do štandardného výstupu. Najprv si ho vyskúšajme:

Príkaz echo v Bashi v Linuxe - Základy Linuxu

Teraz si výpisy, ako shell vidí napr. Príkaz cp -r * zlozka:

Expanzia Hviezdičky v Bashi - Základy Linuxu

Vidíme, že sa hviezdička preložila (expandovala) na názvy všetkých súborov a priečinkov, ktoré sú tu umiestnené. Samozrejme si môžete vyskúšať aj ďalšie kombinácie, napr. Echo * .txt, čo sa expanduje len na textové súbory v aktuálnej zložke.

Tilda

Tilda sa preloží na domovskú zložku aktuálneho alebo zadaného užívateľa:

Expanzia Tildy v Bashi v Linuxe - Základy Linuxu

Zložené zátvorky

Pokiaľ vo výraze použijeme zložené zátvorky, vygeneruje sa nám množina textových reťazcov tak, aby sa vyčerpali všetky možnosti, ktoré v zátvorkách uvedieme. Obrázok povie viac, ako tisíc slov.

Expanzia zložených zátvoriek v Bashi v Linuxe - Základy Linuxu

Vidíme, že nám Bash vygeneroval množinu reťazcov, kde každý začína na priecinok a potom obsahuje jeden zo znakov v zátvorkách, ktoré sme oddelili čiarkou.

Vnútri zátvoriek môžeme používať aj patterny ako 1..9, AF alebo dokonca za. Výsledok samozrejme nemusíme echovat, ale môžeme si nechať zložky vytvoriť:

Expanzia zložených zátvoriek v Bashi v Linuxe - Základy Linuxu

Aritmetické výrazy

Bash za nás vyhodnotí aj jednoduché matematické výrazy. Bohužiaľ vie pracovať len s celými číslami. Výraz vložíme do notácie $ () a vo vnútri ešte do jednej zátvorky.

Aritmetické výpočty v Bashi v Linuxe - Základy Linuxu

Premenné

Bash za nás expanduje veľa premenných. Tie sa píšu veľkými písmenami a začínajú na znak dolára. Zoznam všetkých si môžeme vypísať pomocou príkazu printenv. So znalosťou trubiek si ich môžeme nechať usporiadať podľa abecedy a otvoriť v Less:

Premenné v Bashi v Linuxe - Základy Linuxu
Premenné v Bashi v Linuxe - Základy Linuxu

Určite ste si všimli premenných USER a HOME. Vypíšme si ich:

Výpis premenných USER a HOME v Bashi v Linuxe - Základy Linuxu

Príkazy

Do samotného príkazu môžeme vložiť aj výstup iného príkazu. Nepliesť s "pajpou", kde sme nasmerovali jeden program do druhého. Tu načítame výstup programu a vkladáme ho ako časť príkazu, ktorý shell neskôr spustí.

Expanzia príkazu v Linuxe - Základy Linuxu

Namiesto syntaxe $ () možno alternatívne použiť aj spätné úvodzovky.

Úvodzovky alebo uvádzacích

Bash berie biele znaky ako oddeľovače príkazov a ich parametrov. Je jedno koľko medzier alebo tabulátorov za seba napíšeme, vždy je vyhodnotí ako jedno oddelenie. Použiť medzeru ako súčasť príkazu by bol problém, rovnako ako použiť nejaké z ďalších špeciálnych znakov, ako sú $ alebo spätné úvodzovky ( `).

Znak dolára v Bashi v Linuxe - Základy Linuxu

Máme celkom 3 možnosti ako sa s takouto situáciou vysporiadať.

Dvojité úvodzovky

Ak vložíme časť textu príkazu do dvojitých úvodzoviek, bude Bash interpretovať $, \ a `. Ostatných vecí ako ~, medzier a podobne si nevšíma. Najčastejšie využitie dvojitých úvodzoviek je zadanie názvu súboru alebo zložky, ktorá má v názve medzeru. Mimochodom, také zložky pokiaľ možno nevytvárajte, ľudia vo vašom okolí vám poďakujú :)

Úvodzovky v Bashi v Linuxe - Základy Linuxu

Na obrázku vyššie vidíme aj čo sa stane bez úvodzoviek. Bash vyhodnotí zlozka ako druhý parameter príkazu ls.

Môžeme si skúsiť zapísať do dvojitých úvodzoviek napr. Nejakú konštantu, aby sme videli, že sa naozaj interpretuje:

Úvodzovky v Bashi v Linuxe - Základy Linuxu

Jednoduché úvodzovky (apostrofy)

Výraz v jednoduchých úvodzovkách sa do shellu vloží presne tak, ako je zapísaný. Expanzia sa nevyhodnotí a medzery sa nesloučí:

Využitie apostrofov v Bashi v Linuxe - Základy Linuxu

Uvádzacích

Ak vás nepadlo čo robiť, keď potrebujeme niekam zapísať úvodzovky, tak v tejto situácii použijeme tzv. Uvádzacích. Špeciálne znaky môžeme totiž predsadiť spätným lomítkom a Bash si ich potom nevšíma. Zostáva vyriešiť už len situáciu, keď potrebujeme zapísať spätné lomítko. V tej chvíli ho odescapujeme a zapíšeme jednoducho 2 za sebou.

Uvádzacích špeciálnych znakov v Bashi v Linuxe - Základy Linuxu

Okrem dolára, rôznych úvodzoviek a medzier môžeme pomocou uvádzacích zapísať aj niekoľko špeciálnych znakov:

\ n Zalomenie riadku. U textových súborov z Windows bude znak nasledovaný ešte znakom \ r.
\ t tabulátor
\\ spätné lomítko
\ f Form feed prinúti tlačiareň, aby vysunula danú stránku
\ a Alert terminálu (pípnutie)

V budúcej lekcii, Linuxový terminál (Bash) - Správa užívateľov , sa naučíme pracovať s najdôležitejšími príkazmi pre správu užívateľov v Linuxe.


 

Predchádzajúci článok
Linuxový terminál (Bash) - Oprávnenia, inštalácia a procesy
Všetky články v sekcii
Základy Linuxu
Preskočiť článok
(neodporúčame)
Linuxový terminál (Bash) - Správa užívateľov
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
2 hlasov
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity