Terminál IV

Terminál, 4. kapitola


Minule jsme tohle téma již nakousli, já se k němu vrátím a trochu ho rozšíříme o teorii, abychom věděli co přesně můžeme udělat a jak nám to může posloužit. Dnes pochopíme (alespoň doufám), proč je „|“ tak mocná zbraň v terminálu.

 

Přesměrování výstupu a vstupu

Rozlišujeme tři druhy „komunikačních kanálů“. 1) stdin – (standard input), jedná se o komunikační kanál, který obvykle ovlivňujeme psaním na klávesnici… Alternativní způsob je použít „<“, kdy dojde ke vstupu ze souboru. Co by to byla za návod, kdybych neuvedl příklad použití. Představte si příklad s příkazem tac, ten jsem vám sice ještě nepředstavil, ale slouží k vypsání textu v obráceném pořadí řádků (zkuste si to, napište tac, pak pár řádků a až budete hotovi, tak to dejte Ctrl + D), teď k tomu příkladu. Vytvoříme si soubor, vložíme do něj nějaký náhodný text (na pár řádek, ať to má smysl). Soubor vypíšeme pomocí cat v terminálu, dále koukejte na příklad.

user@computer:$ cat text
a
b

y
z
user@computer:$ tac < text > txet
user@computer:$ cat txet
z
y

b
a

2) stdout – (standard output), jedná se o kanál běžných odpovědí programů. Výstup takto můžete přesměrovat do souboru. Dva způsoby, první „>“ zapíše do souboru a přepíše předchozí, kdežto „>>“ zapisuje na konec souboru. 3) stderr – (standard error) Jedná se o komunikační kanál pro chybová hlášení, ukážu příklad, proč je to pro nás důležité.

user@computer:$ ls *.ocas > log.txt
ls: nelze přistoupit k *.ocas: Adresář nebo soubor neexistuje

Chceme vypsat všechny soubory s koncovkou „.ocas“, žádné to nenašlo a pokud by ls vypisovala chybová hlášení, tak ani nevíme o tom, že se taková chyba stala. Každý kanál má své číslo, stdint – 0, stdout – 1, stderr – 2.

Pipe, „|“ jedná se o znak, která má dec. číslo v ASCII 124 a já ho na české klávesnici píšu jako Alt gr + W. Teď něco k funkčnosti, | přesměrovává výstup z jednoho příkazu do dalšího jako vstup. Jedná se tedy o možnost řetězit příkazy za sebe. Zde příklad s vypsáním seznamu souborů pozpátku.

user@computer:$ ls | tac
zvire
tygr
text
soubor
analfabet

Dovolím si krátkou vsuvku, rozuměj jako humor. Pokud nechápete, tak si to zkuste.
<PokusOVtip> ondrej@ondrej-IdeaPadY570 ~/serial $ ls | tac | tac </PokusOVtip>

Přesměrování STDERR

Pokud by jste měli zájem tvořit si nějaké log soubory s chybami, tak je třeba přesměrovat chybové výstupy. Zde využijeme možnosti označit si jednotlivé komunikační kanály čísly.

user@computer:$ ls *.prase 2> log.txt
user@computer:$ cat log.txt
ls: nelze přistoupit k *.prase: Adresář nebo soubor neexistuje

V případě, že chceme zaznamenávat jak úspěchy a neúspěchy do jednoho souboru, potom je třeba použít takovouto syntaxi

user@computer:$ ls *.txt >> log.txt 2>&1

Jedná se vlastně o běžný zápis, ovšem s tím rozdílem, že STDERR ještě přeposíláme na výstup 1. Mimochodem znak „&“ na české klávesnici napíšete jako Alt gr + C. V případě přesměrování rourou se to píše před ní, viz příklad.

user@computer:$ ls *.bak 2>&1 | more

Návrat k výpisům

Dovolím si ještě se trochu vrátit k výpisům a doplnit to, na co jsem zapomněl, jen stručně o tail a head. Oboje má podobné přepínače, podívejte se do nápovědy, či manuály, já to rovnou uvedu na příkladu.

user@computer:$ cat log.txt
1
2
3
4
user@computer:$ head -n 2 log.txt
1
2
user@computer:$ tail -n 2 log.txt
3
4

Takže přepínač n s parametrem 2 znamená počet, u head počet prvních řádků u tail počet posledních řádků, obdobně funguje i přepínač -c ale s počtem bajtů (zjednodušeně počtem znaků).

Co bude příště?

Příště se vyhrneme na nějaké tipy při psaní v terminálu, na kopírování textu, procházení historie, atd. A pravděpodobně nakousneme téma, které je velmi mocné a tím je superuživatel, známý také jako root. Chci se také dostat na grep, ale to se teprve uvidí…
Další díl

Štítky , , .Záložka pro permanentní odkaz.

Autor: Ondřej Kolín

Student MFF, spokojený uživatel Linux Mint a mám spoustu zajímavých koníčků, které sem raději nebudu ani psát...

Komentáře jsou uzavřeny.