====== Bash úvod ======
Bash je součástí Linuxu a jeho používání Vám značně usnadní Vaši práci v Linuxu. Při programování v jazyce Bash
vytváříte vlastní skripty, které pak vykonávají nějakou akci. Tyto skripty se dají psát v libovolném textovém editoru
v Linuxu, doporučuji používat [[Geany|Geany]]. Ve skriptu se používají buď již Vámi vytvořené skripty, nebo nástroje, které poskytuje přímo Linux.
====== Výstupy ======
{{.:info.png}} Každý program nebo skript vypisuje výsledky konání na výstup. V Linuxu rozlišujeme dva výstupy ''stdout - standardní výstup'' a ''stderr - chybový výstup''. Tyto výstupy jsou očíslovány ''1 standartní výstup'' a ''2 chybový výstup''. Pokud nám program v konzoli vypíše svůj výstup, tak se může zdát že to vypisuje stále stejně. To ovšem není pravda, program ''ls'' v konzoli vypíše seznam souborů do standardního výstupu, ale program ''strace ls'' ho vypíše do chybového výstupu, nicméně v konzole se zobrazí oba stejně. Proto je potřeba si uvědomit s kterým výstupem pracujeme.
====== Přesměrování ======
Každý výstup programu se dá také přesměrovat do souboru. Máme několik typů přesměrování:\
* **standartníVýstup > soubor** - standardní výstup programuje přesměruje do souboru. Pokud soubor neexistuje, tak se vytvoří a naplní daty, pokud existuje tak se přepíše novými daty.
* **standartníVýstup >> soubor** - stejné jako v předchozím případě, ale pokud existuje soubor **nepřepíše** se, ale data jsou přidána na konec souboru
* **chybovýVýstup 2> soubor** totožné s předchozími body, ale do souboru se nahraje chybový výstup místo standardního
* **chybovýVýstup 2>> soubor** totožné s předchozími body, ale do souboru se nahraje chybový výstup místo standardního
* kostrukce: **odkud** > **kam** nebo **kam** < **odkud**, neplést si s **rourou** !
* obdobně tedy fungují všechny příkazy pokud se použije **>** místo **<** a musí se samozřejmě prohodit strany
**Příklady:**\
Výpis programu ls přesměrujeme do nově vytvořeného souboru pokus:
ls > pokus
Máme soubor pokus a tento soubor pošleme příkazu **nl**:
nl < pokus
Na konec souboru pokus přidáme volání **strace ls**:
strace ls 2>> pokus
Zkuste si změnit **> na >>** abyste lépe pochopili k čemu se přesměrování používá.
====== Roura ======
Roura je speciální typ souboru v Linuxu. Slouží k **přesměrování výstupu jednoho programu na vstup druhého programu**. V Linuxu se značí znakem ''|''.\ Roura implicitně přesměrovává **standardní výstup (1) na standardní vstup**.\
Konstrukce:
standartníVýstup | standartníVstup
Příklad:
ls | wc -l
Roura nemusí být jenom jedna, může jich být několik (**doporučuje se používat max. 7**):
ls | nl | wc -l
Pokud chceme přesměrovat **chybový výstup (2) na standardní vstup** použijeme následující konstrukci:
chybovýVýstup 2>&1 | standartníVstup
A pro pochopení na příkladu:
strace ls 2>&1 | wc -l
Kombinace:
strace ls 2>&1 | nl | wc -l
====== Zacyklení / Program neodpovídá ======
{{.:info.png}} Jakýkoliv program se může zacyklit (**neustále provádí výpočty a nikdy se neukončí**) nebo může dojít k jeho pádu a program pak neodpovídá. Pokud pracujeme v konzoli a zdá se nám že výpočet trvá příliš dlouho, můžeme jej usmrtit. K tomu v Linuxu slouží klávesa **Ctrl+C**.
====== Spuštění programu na pozadí ======
{{.:info.png}} Pokud chcete spustí program na pozadí, tak se to provádí takto:\
program & nebo ./program &
musíte dát za název spuštěného programu **mezeru** a znak **&**.
Toto se používá např. u toho, že si spustíte přes terminál program **geany**. Program se Vám spustí, ale nedá se pracovat v terminálu až do té doby, než program **geany** ukončíte. Pokud ho ovšem spustíte na pozadí, s konzolí můžete pracovat souběžně s **geany**.\
{{.:warning.png}} Takto spuštěný proces Vám může ubírat výkon, nenechávejte takto běžet procesy, které nic nedělají. Jak ukončit proces se dozvíte v sekci [[http://wiki.ubuntu.cz/Bash%20%C3%BAvod#ps|ps]].
Pokud nějaký proces spustíte bez **&** na konci a náhle ho potřebujete přesunout na pozadí dělá se to stisknutím kláves **Ctrl+z**. Tím příkaz "**z**mrazíte" a získáte možnost zadat do konzole další příkaz. Zmrazený příkaz čeká na pozadí na vaše další pokyny.\
Na příkladu níže vidíte dlouhotrvající příkaz který zapisuje ''ping'' na ''seznam.cz'' do souboru ''odezvy.txt''.
bfu@lynx:~$ ping seznam.cz > odezvy.txt
Zmáčknu klávesy **Ctrl+z** a terminál mi napíše: \
[1]+ Pozastavena ping seznam.cz > odezvy.txt
bfu@lynx:~$
Pokud chci, aby příkaz rozmrznul a dále pracoval, udělám to příkazem ''bg'', kterému jako parametr předám číslo v hranatých závorkách.\
bfu@lynx:~$ bg 1
Nyní můžu zadávat další příkazy. Seznam všech příkazů si vypíšu příkazem ''jobs'':\
bfu@lynx:~$ jobs
[1] Běží ping seznam.cz > odezvy.txt &
[2]- Běží ping google.com > odezvy-google.txt &
[3]+ Běží ping volny.cz > odezvy-volny.txt &
Na pozadí běžící příkaz ''ping volny.cz > odezvy-volny.txt'' přesunu do popředí , když do terminálu napíšu :-\2
bfu@lynx:~$ fg 3
====== Nástroje linuxu ======
{{.:info.png}} Všechny programy mají naprogramované dva přepínače pro zobrazení nápovědy a to ''-h'' nebo ''--help''. Např. program ''ls'' byste pro výpis nápovědy zavolali jako ''ls -h'' nebo ''ls --help''.
{{.:important.png}} Všechny následující programy se dají zkoušet a používat pouze v terminálu !
===== ls =====
Slouží k zobrazení souborů aktuálního adresáře.
* ''ls -a'' zobrazí i skryté soubory (**soubory a adresáře začínající tečkou**)
* ''ls -l'' zobrazí seznam souborů jako seznam
* ''ls -la'' kombinace obou předchozích metod
Použití:
ls -al
===== echo =====
Slouží k výpisu textu na obrazovku.
* ''echo "ahoj"'' vypíše na obrazovku ''ahoj'' a odřádkuje výstup
* ''echo -n "ahoj"'' vypíše na obrazovku ''ahoj''
* ''echo -e "ahoj\nnazdar"'' vypíše na obrazovku ''ahoj'', odřádkuje výstup, vypíše ''nazdar''. Znak ''\n'' je tzn.
* pro výpis textu se dají použít jak jednoduché tak složené apostrofy
**escape sekvence** neboli znaky, které formátují obrazovku. Jejich krátký přehled:
* ''\n'' - nový řádek
* ''\t'' - vloží znak tabulátoru
* ''\b'' - vloží znak backspace
Použití:
echo -e -n 'Hello world ! \nTest echa !'
===== nl =====
Očísluje standardní vstup a na standardní výstup vypíše výsledek.
Použití:
ls | nl
===== clear =====
Smaže obrazovku terminálu.
Použití:
clear
===== wc =====
Vypíše počet znaků, slov a řádků standardního vstupu na standardní výstup.
* ''wc -l'' zobrazí počet řádků standardního vstupu
* ''wc'' program sám o sobě vypíše tři čísla, které vypočítal ze standardního vstupu. Jedná se (zleva doprava) o počet řádků, počet slov, počet znaků.
Použití:
ls | wc
===== df =====
Vypíše počet volného místa na všech discích.
Použití:
df
===== rm =====
Odstranění souborů na disku.
* ''rm -f soubor'' - neptá se jestli se má smazat soubor (**opatrně při mazání souborů společně se sudo !**)
* ''rm -r slozka/'' - rekurzivní mazání, smaže celou složku ''slozka'' včetně všech jejích souborů či složek
Použití:
rm -fr nepotrebnaSlozka/
===== cal =====
Zobrazí kalendář a tučně zvýrazní aktuální datum.
Použití:
cal
===== date =====
Vypíše aktuální datum.
* ''date '+Datum: %d/%m/%Y%nCas: %H:%M''' - předformátovaný výpis data. Pro význam zkratek viz ''date --help''
Použití:
date
===== shutdown =====
Provádí operace vypnutí, restartování, odhlášení nad počítačem. Je nutné používat **sudo** !.
* ''sudo shutdown -r 0'' restartuje počítač za 0 sekund
* ''sudo shutdown -h 10'' vypne počítač za 10 sekund
Použití:
sudo shutdown -r 0
===== ping =====
Zobrazí odezvu na zadaný server.
* ''ping www.seznam.cz -c 4'' zobrazí výsledek odezvy na server **www.seznam.cz**. Bude se měřit 4 krát. Výsledek se zobrazí na standartní výstup když existuje server nebo se zobrazí na chybový výstup pokud server nenalezne.
Použití:
ping www.seznam.cz -c 4
===== touch =====
Změní čas posledního přístupu k souboru. V případě, že soubor neexistuje, vytvoří ho.
* ''touch soubor'' vytvoří soubor **soubor**, pokud neexistuje.
Použití:
touch soubor
===== mkdir =====
Vytvoří prázdnou složku.
* ''mkdir slozka/'' vytvoří složku **slozka**
Použití:
mkdir slozka/
===== rmdir =====
Odstraní zvolenou složku, ale tato složka musí být **prázdná** !
* ''rmdir slozka/'' odstraní složku **slozka**
Použití:
rmdir slozka/
===== ps =====
Zobrazí seznam spuštěných procesů.
* ''ps'' - zobrazí seznam procesů, které jsou aktuálně spuštěny v terminálu
* ''ps -A'' - zobrazí seznam všech procesů běžících na počítači
* ''ps -A > SeznamProcesu.txt'' - uloží seznam všech procesů běžících na počítači do textového souboru
Použití:
ps -A
{{.:info.png}} U každého procesu je vlevo napsáno číslo, toto číslo označuje aktuální číslo
procesu. Přes toto číslo se nejčastěji používá ukončení zvoleného programu. To provedete takto:
kill -9 čísloProcesu
Např. chci ukončit proces **firefox** a ten má číslo procesu **4098**:
kill -9 4098
===== Textové editory =====
Pro zpracování textu má Linux tři výborné programy:
* [[Grep]] - vybírá řádek podle zadané předlohy
* [[Sed]] - zpracování souborů a standardního výstupu
* [[Awk]] - obdobně jako Sed, ale má víc možností
====== Shrnutí ======
Tento návod co jsem napsal tak doufám že Vám pomůže v začátcích používání konzole. Není úplný, protože celkový počet programů či nástrojů co nabízí linux je spoustu a jejich celkové rozebrání by zabralo spoustu času. Nejlépe se s těmito nástroji naučíte dělat až při psaní vlastních skriptů. Doporučuji Vám projít celou kategorii [[Bash a skripty]], hlavně pak část s skripty a to Vás naučí příkazovou řádku perfektně ovládat a psát vlastní užitečné skripty. Hodně zdaru při zkoušení a programování přeje Roman Makudera.
====== Odkazy ======