Pokročilá práce s terminálem
Základní příkazy s terminálem už umíme, nicméně správce systémů používají daleko pokročilejší příkazy, jejich kombinace, skripty, časování akcí… To si v této vcelku náročné kapitole postupně představíme.
Přesměrování v Linuxu
Přesměrování umožňuje využít manipulaci se standardním vstupem a standardními výstupy ke změně komunikace spouštěného programu s okolím. Přesměrování provádí vždy shell, takže je vždy funkční a jednotné.
Jedná se o základní datové proudy, se kterým pracuje většina programů. Čtou z nich data nebo do nich data naopak zapisují. Datové proudy už známe z C++, Linux rozlišuje tři základní:
- Standardní vstup (stdin) – číslo 0 – očekává data od uživatele nebo z jiného zdroje
- Standardní výstup (stdout) – číslo 1 – výstup úspěšně provedených příkazů
- Standardní chybový výstup (sderr) – číslo 2 – výstup chybových hlášení.
Standardní vstup je napojen na klávesnici a standardní výstup a standardní chybový výstup je připojen na monitor (viz diagram níže).
Pokud program potřebuje získat data, čte je z proudu 0 (nula). Potřebuje-li něco vypsat, použije proud 1, avšak pro výpis chybových hlášení se používá proud 2. Pomocí jejich oddělení je možné v případě potřeby odlišit výstup výsledků programu a chybových hlášení. Díky tomuto principu lze snadno příkazy sdružovat do kolon a používat programy jako filtry.

Využívají se následující symboly pro přesměrování:

Zdroj obrázků: https://www.pslib.cz/milan.kerslager/
Přesměrování výstupu
Standardní výstup můžeme pro daný program přesměrovat a to pomocí operátoru >, případně >>.

Do konzole se nic nevypsalo, ale ve složce se následně objeví soubor vypis.txt, který se pro program choval jako standardní výstup. Když soubor následně otevřeme, vidíme, že program ls svůj výstup přesměrovat místo konzole do souboru.

Pokud existuje soubor se stejným názvem, přesměrovaný příkaz smaže obsah tohoto souboru a pak může být přepsán.
Pokud nechceme, aby byl soubor přepsán, ale chceme do existujícího souboru přidat další obsah, použijeme operátor >>. Ten připíše obsah nakonec (stejně jako funkce append v prog. jazycích).
Standardní výstup můžeme přesměrovat nejen na soubory, ale i na zařízení.
Příkaz cat načte soubor music.mp3 a odešle výstup do /dev/audio, což je zvukové zařízení. Pokud jsou konfigurace zvuku v našem PC správné, tento příkaz přehraje soubor hudba.mp3.
$ cat hudba.mp3 > /dev/audio
Přesměrování vstupu
Podobně, jako výstup, můžeme přesměrovat i vstup. K tomu využijeme operátor <.
Jako vstup můžeme použít textový soubor nebo dokonce výstup nějakého jiného programu.

Výstup můžeme klidně opět přesměrovat do dalšího souboru:

Přesměrování chybového výstupu
Ve výchozím nastavení se na obrazovce zobrazuje chybový proud. Přesměrování chyby je směrování chyb do jiného souboru, než je obrazovka.
Používáme operátor 2>

Přesměrování chyb se využívá hodně při provádění skriptů. Nechceme, aby chybové zprávy zaplňovaly běžný výstup programu.
Roury
Roury (anglicky pipes) nám umožňují propojit výstup jednoho příkazu se vstupem druhého příkazu. Díky tomu můžeme použít sloužitější operace, aniž bychom museli ukládat výsledky do mezisouboru.
Použijeme k tomu symbol roury – |
Syntaxe je příkaz1 | příkaz2, to znamená, že výstup z prvního příkazu je okamžitě použit jako vstup pro druhý příkaz.
Například, chceme najít soubory obsahující slovo data.
Příkaz ls nám vypíše obsah aktuálního adresáře a pomocí grep „data“ prohledáme tento výstup a vyfiltrujeme pouze odpovídající řádky.
ls | grep "data"
Pokud chceme například zjistit, kolik je textových souborů v adresáři, zřetězíme příkazy ls (výpis souborů), grep „.txt“ (vybere pouze soubory s příponout .txt) a wc -l (spočítá počet řádků – v našem případě odpovídajících souborů.
ls | grep ".txt" | wc -l
Filtry
Filtry jsou speciální programy v Linuxu, které zpracovávají textová data – obvykle vstup ze standardního vstupu (stdin) – a generují upravený výstup. Filtry jsou často kombinovány s rourami, aby se zpracovávala data v reálném čase.
My si ukážeme pár základních, které nám stačí.
cat
Tento příkaz čte data ze standardního vstupu a zobrazuje na standardním výstupu (načte text a zobrazí ho). Případně spojí více souborů do jednoho.
cat /etc/passwd
Tento příkaz vypíše obsah souboru /etc/passwd
grep
Vyhledá řetězce nebo vzory v textu.
Má několik přepínačů:
- -i ignoruje velikost znaků
- -v negace, zobrazí řádky neobsahující hledaný výraz
- -r rekurzivně vyhledává ve složkách
grep "chyba" log.txt #vyhledá řetězec v souboru
grep -i "chyba" log.txt #hledá bez ohledu na velikost znaků
grep -v "chyba" log.txt #vyhledá řádky neobsahující řetězec "chyba"
sort
Pro setřídění obsahu podle řádků (standardně dle abecedy A-Z).
Přepínače:
- -r třídí obráceně (sestupně)
- -n třídí podle čísel
- -k třídí podle sloupce
sort soubor.txt
uniq
Odstraní duplicitní řádky (které jdou za sebou).
Přepínače:
- -c počítá výskyt každého řádku
- -d zobrazí pouze duplicitní řádky
uniq soubor.txt
Tento příkaz vypíše obsah souboru /etc/passwd
head a tail
Příkaz head zobrazí první řádky ze souboru, příkaz tail poslední řádky.
Přepínače:
- -n X upřesňuje, kolik zobrazí řádků (výchozí je 10)
- -f sleduje soubor v reálném čase (např. logy, využívá se u tail)
head -n 5 soubor.txt
tail -f log.txt
wc
Počítá řádky, slova nebo znaky.
Můžeme využít přepínače:
- -l počítá řádky
- -w počítá počet slov
- -c počítá počet znaků
wc -l soubor.txt #počet řádků
wc -w soubor.txt #počet slov
cut
Extrahuje sloupce nebo části řádků.
Přepínače:
- -d x určuje oddělovač (čárka, mezera…)
- -f X vybírá sloupce dle pořadí
cut -d ',' -f 2 soubor.txt
tr
Převádí nebo odstraňuje znaky.
Užitečné přepínače:
- -d odstraní zadané znaky
- -s sloučí opakující se znaky
echo "ahoj svet" | tr ' ' '_' #nahradí mezery podrtžítkemecho "ahoj123" | tr -d '0-9' #odstraní čísla
Skripty
Pokud spravujeme server, nechceme psát dokola určité příkazy. A proto existuje řešení, díky kterému si vytvoříte vlastní, zkrácený příkaz, který bude nejen kratší, ale i jednodušší na zapamatování.
V Linuxu si můžeme vytvářet vlastní skripty (stejně jako ve Windows třeba .bat soubory). V Linuxu se takovým skriptům říká shellové skripty (mají příponu .sh).
Skripty jsou sekvence příkazů napsané v textovém souboru, které systém provede jako jeden celek.
Vytvoření skriptu
Skript můžeme vytvářet v libovolném textovém editoru (nano nebo vim).
Jednoduše vytvoříme nový soubor s příponou .sh
nano muj_skript.sh
Aby byl skript přímo spustitelný, musí být jméno interpretu uvedeno na prvním řádku skriptu (hned na začátku souboru). Tomuto se říká Shebang.
#!/bin/bash
Následně můžeme přidat samotný příkaz. Takže například:
#!/bin/bash
echo "Ahoj světe"
ls
Aby šel skript spustit, musíme ho označit jako spustitelný.
chmod +x muj_skript.sh
A skript spustíme jednoduchým příkazem:
./muj_skript.sh
Programovací konstrukce
Proměnné
jmeno="Lukáš"
"Ahoj, $jmeno!"
Podmínky if
if [ $vek -ge 18 ]; then
echo "Jsi plnoletý."
else
echo "Jsi nezletilý."
fi
Cyklus for
for soubor in *.txt; do
echo "Zpracovávám soubor: $soubor"
done
Cyklus while
pocet=0
while [ $pocet -lt 5 ]; do
echo "Pocet: $pocet"
pocet=$((pocet + 1))
done
Vstup od uživatele
Používáme příkaz read
echo "Zadej své jméno:"
read jmeno
echo "Ahoj, $jmeno!"
Funkce
pozdrav() {
echo "Ahoj, $1!"
}
pozdrav "Lukáš"
Zpracování argumentů
#!/bin/bash
echo "První argument: $1"
echo "Druhý argument: $2"
Následné spuštění skriptu s argumenty:
./muj_skript.sh argument1 argument2
Ukázka skriptu
#!/bin/bash
echo "Seznam souborů v aktuálním adresáři:"
ls
pocet=$(ls | wc -l)
echo "Počet souborů: $pocet"
Plánování úloh
V Linuxu existují různé způsoby, jak automatizovat spouštění příkazů nebo skriptů v určitý čas nebo v pravidelných intervalech. Nejčastěji se k tomu využívají cron, at a systemd timers. My si ukážeme práci s cron a s at.
Cron – pravidelné spuštění úloh
Cron je systémový démon, který umožňuje spouštění úloh v nastavených intervalech. Periodicky tak můžeme vykonávat určitý předem definovaný úkol – cron se často používá například pro pravidelné zálohování v nočních hodinách nebo kupříkladu k automatizovanému restartování určitých služeb (či celého systému) v předem definovaný čas anebo k plánovanému spuštění dávkových úloh.
Konfigurace se provádí pomocí souboru crontab, který definuje, kdy a co se má spustit.
Crontab může být
- uživatelský – ten nalezneme v /var/spool/cron/crontabs/<uživatel>
- globální – ten nalezneme v /etc/crontab
- oproti uživatelskému má i sloupec pro uživatele, pod kterým se úloha spustí
Další možností jsou soubory v adresáři /etc/cron.d/, kam můžou aplikaci či správci přidávat naplánované úlohy.
Formát crontabu
Každý řádek v souboru crontab obsahuje časovou specifikaci, případně uživatele a příkaz ke spuštění. Celkem je k dispozici 5 polí času, u systémové je 6. pole jméno uživatele, pod kterým příkaz běží a zbytek řádky je spouštěný příkaz. Hvězdička * znamená první až poslední, tj., že splňuje vždy.

Zdroj obrázku: https://ahmadawais.com/setup-cron-in-unix-basic-understanding/
Například pro zajištění, že se každý pracovní den v 6:00 ráno spustí skript.
0 6 * * 1-5 /home/user/backup.sh
Skript, který běží každou minutu
* * * * * echo "Minutka"
Každých 5 minut
*/5 * * * * wget mesos.cz
Každých 10 minut od 9:00 do 17:50 každý pracovní den, pod uživatelem root
*/10 9-17 * * 1-5 root /home/pospisill/skript.sh
Správa crontabu
Zobrazení crontabu aktuálního uživatele:
crontab -l
Úprava crontabu
crontab -e
Odstranění všech naplánovaných úloh
crontab -r
At – jednorázové spuštění úlohy v budoucnu
Zatímco cron nám umožní nastavit opakované akce, tedy jak často se má daná úloha provádět, pomocí at nastavíme akci jednorázovou, tedy za jak dlouho se provede.
Používáme jednoduché časové výrazy:
| Hodnota | Význam |
| hh:mm | přesný čas |
| 2AM | 2:00 |
| 2PM | 14:00 |
| noon | 12:00 |
| teatime | 16:00 |
| midnight | 0:00 |
| now | právě teď |
| now + n | n jednotek od teď |
| today | dnes |
| tomorrow | zítra |
| MM/DD/YY | měsic/den/rok |
Dnes ve 14:30
echo "ls > vypis.txt" | at 14:30
Dne 1. 6. 2025 ve 14:00
wget mesos.cz | at 14:00 01/06/25
Pokud chceme zobrazit naplánované úlohy použijeme příkaz atq, pro zrušení úlohy příkaz atrm <číslo_úlohy>
atq #zobrazí úlohy
atrm 3 #zrušení úlohy číslo 3
Prezentace
5-Pokrocila-prace-s-terminalemZdroje
Seznam zdrojů
ŠEDIVÝ, Libor. Operační systémy IV. ročník: Učební text. Městská střední odborná škola Klobouky u Brna, 2023.
ŠEDIVÝ, Libor. Operační systémy IV. ročník: Prezentace. Městská střední odborná škola Klobouky u Brna, 2023.
POMYKACZ, Ivan. Digitální učební materiály: Operační systémy – Linux. Vyšší odborná škola obalové techniky a Střední škola, Štětí, příspěvková organizace, 2013.
ABARIS, Augustine. Introduction to Linux. BOSTON UNIVERSITY, 2018.
Linux Journey. Online. 2024. Dostupné z: https://linuxjourney.com/.
Ibiblio catalog. The Linux Users‘ Guide. Dostupné z: https://www.ibiblio.org/
Učebnice ABC/Linuxu. Online. Abclinuxu, 2006. Dostupné také z: https://www.abclinuxu.cz/download/ucebnice_abc_linuxu-20061019.pdf.
