Shell a bash
Shell je vrchná vrstva operačného systému, ktorá nám ho umožňuje ovládať — nazývame ho užívateľským rozhraním. Bežne ho reprezentuje terminál (CLI) alebo grafické prostredie (GUI). Príkladom GUI je bežné desktopové prostredie s oknovým systémom, teda pracovná plocha a okná s programami.
Na Linuxe je okrem GUI bežné ovládanie pomocou textu — príkazového riadku, zadávaním príkazov do terminálu (dnes sa spomína aj názov konzola, kedysi mali pojmy iný význam, viď. wiki).
Bash je program, s ktorým v termináli komunikujeme — je implementáciou terminálového shellu. Interpretuje naše príkazy, umožňuje nám spúšťať programy a dokonca aj písať skripty.
V príklade nám ukazuje užívateľské meno — xrehacek
, na ktorom počítači sme — @home
, v ktorom adresári sa nachádzame — ~/pb071
a za symbolom doláru $
očakáva náš príkaz (taký symbol s čakaním na vstup voláme prompt).
Užitočné znalosti
Pracovný adresár (current working directory/cwd) je aktuálne zvolený adresár, v ktorom robíme zmeny. V termináli je zobrazený pred našimi príkazmi.
Absolútna cesta začína vždy /
, teda od koreňového adresára.
Relatívna cesta pokračuje od nášho pracovného adresára.
Vlnka ~
(en: tilde) je skratka pre náš domovský adresár (home directory), umiestnený v /home/USERNAME/
, ktorý obsahuje naše súbory.
Ak sa nachádzame v domovskom adresári a chceme vstúpiť do adresáru pb071, môžeme vykonať cd pb071
(relatívna cesta) alebo cd /home/USERNAME/pb071
(absolútna cesta).
Ak by sme sa nachádzali mimo nášho dom. adresára, využijeme vlnku, teda cd ~/pb071
.
Na vstup do domovského adresára použijeme iba cd
.
Každý adresár obsahuje dva špeciálne súbory: .
, ktorá je odkazom na aktuálny adresár; a ..
ako odkaz na rodičovský adresár. Cesta cd ../..
by nás dostala o dva adresáre vyššie.
Neštandardné programy (naše, ktoré budeme kompilovať) sa spúšťajú z bezpečnostných dôvodov pridaním ./
pred názov programu. Napríklad ./hw01
. Potrebujeme totiž odlíšiť bežné programy/príkazy od tých, čo sú v aktuálnom adresári pod rovnakým názvom — aby sa nám nestalo, že ls zmaže celý systém.
Klávesové skratky
Tab požiada o inteligentné doplnenie príkazu. Doplňuje napríklad cestu u príkazov ako cd alebo mv. Dvojité stlačenie môže zobraziť všetky možnosti, napríklad u ls.
Ctrl+r hľadá v histórii príkazov
↑ alebo ↓ prechádza cez históriu príkazov
Ctrl+c požiada program o ukončenie; zmaže rozpísaný riadok s príkazom
Ctrl+d vyšle na terminál symbol konca súboru (EOF, end of file). Ukončí tým načítavanie vstupu u niektorých príkazov (ako cat).
Ctrl+l vyčistí terminál
Extra tip: text býva po označení skopírovaný a môžeme ho vložiť pravým tlačidlom myši. |
Základné príkazy
príkaz | syntax a význam | príklad |
---|---|---|
ls |
výpis súborov |
|
cd |
zmena pracovného adresára |
|
mkdir |
vytvorenie adresárov |
|
rm |
zmazanie súborov bez potvrdenia |
|
cat |
výpis obsahu súboru, spájanie súborov |
|
less |
zobrazuje súbory (bez výpisu na terminál) |
|
cp |
kopíruje súbory a adresáre (bez |
|
mv |
premenuje alebo presunie súbory a adresáre (bez |
|
grep |
vyhľadáva v súboroch |
|
zobrazí interaktívnu nápovedu |
|
Presmerovanie vstupu a výstupu
Operátor >
dokáže uložiť výstup programu do súboru, výstup presmeruje z nášho terminálu.
out.txt
vytvorí, prípadne pred zápisom zmaže jeho obsah)./a > out.txt
Operátor append >>
využijeme, ak súbor nechceme prepísať:
cat hello.c >> hello2.c
Napríklad v spojení s programom diff môžeme porovnať výstup svojho programu s referenčnou implementáciou, aby sme predišli ťažko všimnuteľným chýbam (často nadbytočné medzery, whitespace).
./a > a.txt && ./b > b.txt && diff a.txt b.txt
cat > hello.c
Operátorom |
(pipe, rúra) prepojí štandardný výstup programu vľavo so štandardným vstupom programu vpravo. Analógia rúry naozaj sedí: na jednom konci program do rúry posiela veci, ktoré tečú na druhý koniec rúry niekomu inému.
ls -la | grep 'file'
Porovnanie výstupu programov
<()
, process substitution)diff <(./a) <(./b)
vimdiff <(./a) <(./b)