skoleni:zaklady_prikazove_radky

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
skoleni:zaklady_prikazove_radky [2018/06/04 16:20] – [Premenné prostredia] sesivanyskoleni:zaklady_prikazove_radky [2022/11/14 12:26] (aktuální) – upraveno mimo DokuWiki 127.0.0.1
Řádek 1: Řádek 1:
-====== Základy příkazové řádky ======+{{:navody:48x48:apps:utilities-terminal.png?48 |}}====== Základy příkazové řádky ======
  
-===== Úvod ===== +===== Filozofie UNIXu =====
-==== Trocha teorie (a terminologie) na začátek ====+
  
-Pojem příkazová řádka, nebo anglicky command line, je slyšet často Bohužel je často její užitečnost nedoceňovaná a váže se k ní několik mýtů.  K nejčastějším z nich patří například, že je: +[[https://cs.wikipedia.org/wiki/Filosofie_Unixu|Filozofií UNIXu]] je (zkráceně) následující rčení:
-  * jen pro pokročilé uživatele +
-  * zastaralá a překonaná +
-  * příliš složitá +
-  * a další...+
  
-=== Co je to "příkazová řádka" ===+> Pište takové programy, které dělají jen jednu věc a dělají ji dobře.
  
-Jak již název naznačuje, jedná se o řádek určený k zadávání příkazů. To je všechno, o nic víc nejde.  Tedy, velice zjednodušeně.  Když se dostaneme dál, tak zjistíme, že příkazová řádka je hodně rozdílná věc podle toho, v jakém operačním systému pracujeme.  Někdy se může různě chovat a nebo jinak vypadat.  My se budeme věnovat příkazové řádce tak, jak se chová a vypadá v aplikaci Terminál na Linuxu.  Už je vám to povědomé?  Jestli ne, tak si klidně terminál pusťte (klávesou s logem se dostaneme do **Aktivit** a tady už stačí začít psát slovo "Terminál".  Ještě ani nebudete mít napsané ''ter'' a už bude vidět jeho ikona. Nejpozději u ''term'' už bude i označená a bude stačit zmáčknout ''Enter'').+Nezkrácená verze zmiňuje i to, že by měly spolupracovat a používat tzv. "standardní proudy" To zjednodušeně znamená, že se chovají v podstatě stejně, ať už čtou ze souboru, nebo od uživatele.  Výhodou tohoto přístupu je, že se všechny jednoduché programy dají skládat dohromady a i neprogramátor díky nim dokáže zpracovat velké množství dat či zjednodušit (nebo dokonce automatizovat) nějakou činnost. 
 + 
 +===== Seznámení se základními pojmy ===== 
 + 
 +==== Co je to "příkazová řádka" ==== 
 + 
 +Jak již název naznačuje, jedná se o řádek určený k zadávání příkazů. To je všechno, o nic víc nejde.  Tedy, velice zjednodušeně.  Když se dostaneme dál, tak zjistíme, že příkazová řádka je hodně rozdílná věc podle toho, v jakém operačním systému pracujeme.  Někdy se může různě chovat a nebo jinak vypadat. 
 + 
 +My se budeme věnovat příkazové řádce tak, jak se chová a vypadá v aplikaci **Terminál** na Linuxu.  Už je vám to povědomé?  Jestli ne, tak si klidně terminál pusťte (klávesou s logem se dostaneme do **Aktivit** a tady už stačí začít psát slovo ''terminál''.  Ještě ani nebudete mít napsané ''ter'' a už bude vidět jeho ikona. Nejpozději u ''term'' už bude i označená a bude stačit zmáčknout ''Enter''). 
 + 
 +Příkazová řádka, nebo anglicky command line, je užitečný nástroj. Není třeba se obávat, že je: 
 +  * jen pro pokročilé uživatele 
 +  * zastaralý a překonaný 
 +  * příliš složitý
  
-=== Jaký je rozdíl mezi "příkazovou řádkou" a "CLI" ===+==== Jaký je rozdíl mezi "příkazovou řádkou" a "CLI" ====
  
 I když programy v počítači někdy fungují samy od sebe, velice často s vámi (uživatelem) komunikují.  Ať už je to zobrazení obrázku, dialogového okna a nebo nějakého textu, reakce na kliknutí nebo posun myši či zmáčknutí klávesy na klávesnici.  Používá se pro to pojem //rozhraní// (anglicky //interface//).  Rozhraní mohou být různá, a tak často uslyšíme toto slovo ve spojení s nějakým upřesňujícím pojmem. I když programy v počítači někdy fungují samy od sebe, velice často s vámi (uživatelem) komunikují.  Ať už je to zobrazení obrázku, dialogového okna a nebo nějakého textu, reakce na kliknutí nebo posun myši či zmáčknutí klávesy na klávesnici.  Používá se pro to pojem //rozhraní// (anglicky //interface//).  Rozhraní mohou být různá, a tak často uslyšíme toto slovo ve spojení s nějakým upřesňujícím pojmem.
Řádek 27: Řádek 35:
 Příkazová řádka je tedy něco, kam můžeme psát příkazy a kde spouštět programy. Prostředí, ve kterém pracujeme, je CLI.  Pokud má nějaký projekt CLI nástroj, znamená to, že půjde ovládat v příkazové řádce. Příkazová řádka je tedy něco, kam můžeme psát příkazy a kde spouštět programy. Prostředí, ve kterém pracujeme, je CLI.  Pokud má nějaký projekt CLI nástroj, znamená to, že půjde ovládat v příkazové řádce.
  
-=== Výhody ===+==== Výhody ====
  
 To, že se některý program ovládá z příkazové řádky, neznamená, že je hned složitější, špatný nebo toho méně umí.  Většinou je to právě naopak.  Zkrátka je to jen jiné //rozhraní//, jak komunikovat s programem. To, že se některý program ovládá z příkazové řádky, neznamená, že je hned složitější, špatný nebo toho méně umí.  Většinou je to právě naopak.  Zkrátka je to jen jiné //rozhraní//, jak komunikovat s programem.
  
 Hlavní výhody příkazové řádky jsou (tedy hlavně oproti GUI): Hlavní výhody příkazové řádky jsou (tedy hlavně oproti GUI):
-  * **Přehlednost:** Všechno je rozděleno pravoúhle, do stejně velkých sloupků a řádků, a text je všude stejně vysoký. +  * **Přehlednost**Všechno je rozděleno pravoúhle, do stejně velkých sloupků a řádků, a text je všude stejně vysoký. 
-  * **Jednoduchost:** Je to jen text a jen klávesnice. +  * **Jednoduchost**Je to jen text a jen klávesnice. 
-  * **Rychlost:** Jde spíše o rozdíl mezi TUI a GUI, ale existuje několik porovnání toho, jak jsou lidé schopni psát (popřípadě ovládat klávesami) a klikat nebo ovládat myší. +  * **Rychlost**Jde spíše o rozdíl mezi TUI a GUI, ale existuje několik porovnání toho, jak jsou lidé schopni psát (popřípadě ovládat klávesami) a klikat nebo ovládat myší. 
-  * **Všestrannost:** Příkazová řádka se bude ovládat téměř stejně, ať už budete na vlastním počítači, nebo se připojíte někam vzdáleně.  Ať už to bude server, notebook, nebo dokonce tablet.  Ať už je to vámi vybraná distribuce Linuxu, nebo nějaká úplně jiná.  Dokonce to nemusí být ani Linux, ale jakýkoliv [[https://en.wikipedia.org/wiki/Unix-like|UN*X systém]]+  * **Přenositelnost**Příkazová řádka se bude ovládat téměř stejně, ať už budete na vlastním počítači, nebo se připojíte někam vzdáleně.  Ať už to bude server, notebook, nebo dokonce tablet.  Ať už je to vámi vybraná distribuce Linuxu, nebo nějaká úplně jiná.  Dokonce to nemusí být ani Linux, ale jakýkoliv [[https://en.wikipedia.org/wiki/Unix-like|UN*X systém]].
-  * **Stálost a srozumitelnost:** Když vám má někdo poslat návod jak máte něco udělat v GUI, tak to buď špatně popíše a nebo pošle spoustu velkých pomalovaných obrázků.  A fungovat to bude jen pokud se žádné tlačítko ani nabídka neposunuly.  Pro příkazovou řádku to bude jen text, který stejně přepíšete (a nebo zkopírujete, ale to radši nikdy nedělejte ((Protože jde v příkazové řádce udělat cokoliv (ano, opravdu je tak mocná), tak do ní nikdy nekopírujte něco, čemu nevěříte.  Zaprvé to musí být něco u čeho víte co bude výsledkem.  Zadruhé bych napřed vyzkoušel co jsem to opravdu zkopíroval, například v editoru, obzvlášť pokud jsem to zkopíroval z internetu. Pro víc informací se podívejte například na tuto stránku (a odkaz z ní na ještě detailnější zpracování): https://thejh.net/misc/website-terminal-copy-paste))) a zřídkakdy se změní to, jak bude fungovat.+
  
-Pozor, tím nechci říct, že grafické aplikace se nedají ovládat klávesnicí.  Jen to, že klávesnice je v naprosté většině lepší volbou.  I správné GUI se dají ovládat pouze klávesnicí.  Pokud jste si přečetli malou poznámku pod čarou, když jsme mluvili poprvé o terminálu, tak jste mohli zjistit, že už ani k jeho puštění jste nemuseli použít myš.  Všimli jste si jak rychlé to bylo?  A fungovalo to ať už ta ikonka byla kdekoliv.  Schválně si to porovnejte.  Pusťte nový terminál myší, pak ho zavřete a pusťte další naším způsobem.  Bylo to rychlejší?  A to se nám neposunuly ikonky nikam. Rychlost spouštění závisí na rychlosti psaní, ale tolik jsme toho zase psát nemuseli.  Až (pokud) si na to zvyknete, tak nebudete chtít jinak.+==== Příkazová řádka je také program ====
  
-=== Příkazová řádka je také program === +Příkazová řádka, kterou používáte, je také jen program který v běží v Terminálu.  Pokud máte puštěnou Fedoru a nic jste neměnili, tak příkazová řádka, kterou máte puštěnou, je program ''bash'' Existuje spousta dalších, ale až na výjimky jsou základy práce s nimi téměř stejné.  Tomuto typu programu se říká [[https://cs.wikipedia.org/wiki/Shell_(informatika)|shell]].
- +
-Příkazová řádka, kterou používáte, je také jen program který v běží v Terminálu.  Pokud máte puštěnou Fedoru a nic jste neměnili, tak příkazová řádka, kterou máte puštěnou, je program ''bash'' Existuje spousta dalších, ale až na výjimky jsou základy práce s nimi téměř stejné.  Tomuto typu programu se říká ''[[https://cs.wikipedia.org/wiki/Shell_(informatika)|shell]]''.+
  
 Pro zopakování pojmů: Pro zopakování pojmů:
-  * **Terminál:** program s GUI.+  * **Terminál**program s GUI.
   * **Shell (v našem případě konkrétně bash):** textový program, který pomocí CLI poskytuje uživateli příkazovou řádku.   * **Shell (v našem případě konkrétně bash):** textový program, který pomocí CLI poskytuje uživateli příkazovou řádku.
  
-==== Konečně příklady (a další velká dávka terminologie====+Důležité: 
 +  * **Nikdy nic nekopírujte z internetu nebo jakýchkoliv neznámých zdrojů do terminálu!** 
 +  * Terminál sám (i mimo shellumí spoustu užitečných zkratek, viz nápověda.
  
-Jak jsem již předestřel v úvodu, my si budeme všechno zkoušet v programu _Terminál_.  Pro následující příklady si ho tedy musíte spustit.  Doporučuji jeho okno maximalizovat abysme měli hodně prostoru (bude se hodit) a nebudeme potřebovat nic jiného.  A když už budeme trávit čas terminálu, tak nebudete vůbec potřebovat myš.  A to je přece výhoda!+==== Umístění programů systému ====
  
-=== Prompt ===+Pokud napíšeme příkaz do příkazové řádky a chceme jej spustit, tak se děje několik věcí.  Nejprve ''shell'' zjistí, jestli se jedná o cestu k nějakému souboru (ať už relativní, nebo absolutní) a pokud ano, tak se ho pokusí najít a spustit.  Pokud to cesta není, tak zjistí, jestli to není název nějakého zabudovaného příkazu.  Když ano, tak ho spustí a když ne, tak hledá program s tímto názvem v seznamu adresářů uložených v proměnné ''$PATH''.
  
-To, co uvidíte, když spustíte nový terminál, může vypadat třeba nějak takto (toto je příklad z live DVD Fedory 28, nelekněte se pokud váš vypadá jinak):+Proměnná ''PATH'' se k tomuto účelu používá na většině operačních systémů.  Je ale nutno dodat, že podstatným rozdílem oproti některým jiným systémům je, že se program se specifikovaným názvem **nehledá** v aktuálním adresáři, ale pouze v těch specifikovaných ve zmíněné proměnné.  To by mohlo způsobit nejen nechtěné problémy v některých situacích, ale také bezpečnostní riziko. 
 + 
 +==== Prompt ==== 
 + 
 +To, co uvidíte, když spustíte nový terminál, může vypadat třeba takto (toto je příklad z live DVD Fedory 28, nelekněte sepokud váš vypadá jinak):
  
 <code text> <code text>
Řádek 60: Řádek 71:
 </code> </code>
  
-Tomuto se říká //prompt// (z angličtiny //pobídka//) a vyzývá nás k tomu, abychom napsali nějaký příkaz, který se píše na ten řádek.  Od toho je to "příkazový řádek", to je celé.  Jednotlivé jeho části se můžou (a budou) časem měnit. To, co můžeme vyčíst z tohoto příkladu, je:+Tomu se říká //prompt// (z angličtiny //pobídka//) a vyzývá nás k tomu, abychom napsali nějaký příkaz, který se píše na ten řádek.  Od toho je to "příkazový řádek" Jednotlivé jeho části se můžou (a budou) časem měnit. To, co můžeme vyčíst z tohoto příkladu, je:
   * **''liveuser''**: Název aktuálního uživatele.   * **''liveuser''**: Název aktuálního uživatele.
   * **''localhost-live''**: Název aktuálního systému (hostitele, anglicky //hostname//).   * **''localhost-live''**: Název aktuálního systému (hostitele, anglicky //hostname//).
Řádek 66: Řádek 77:
   * **''$''**: Uživatel není přepnutý na administrátora.   * **''$''**: Uživatel není přepnutý na administrátora.
  
-=== Příkaz(y) ===+<code text> 
 +|---------- prompt ---------| 
 +uživatel  název hostitele 
 +  |        |           cesta 
 +  V        V               |----------- příkaz -----------| 
 +[liveuser@localhost-live ~]$ echo -n 'Ahoj     vsichni' kolem 
 +Ahoj     vsichni kolem      ^   ^^ |-------+--------| 
 +|---------+----------|      |   |`---------+-----------+ 
 +          |                |  |  přepínač                | 
 +          |                | název příkazu             argumenty 
 +       výstup             uživatel není přepnutý na administrátora 
 +</code> 
 + 
 +  * **Tabulátor:** pomáhá doplňovat příkaz (jak název, tak i některé argumenty) automaticky 
 +  * **Ctrl-C:** přerušuje běžící program, popř. resetuje zadávání příkazu 
 +  * **Uvozovky:** pomáhají přesněji specifikovat argumenty 
 +  * **Středník:** umožňuje zadat více příkazů na jednom řádku 
 + 
 +==== Zobrazení nápovědy k příkazům ==== 
 + 
 +Pokud chcete o nějakém příkazu zjistit více, např. jaké podporuje a přijímá argumenty, co vlastně dělá atd., tak máte několik možností.  Většina programů bude mít alespoň jedno z následujících: 
 + 
 +  * **Manuál:** Pro otevření manuálu ke konkrétnímu příkazu lze použít ''man <příkaz>'' Manuálové stránky existují nejen pro příkazy a programy, ale také je v nich spousta dokumentace ohledně systému, co jak funguje, a existují i k funkcím v různých programovacích jazycích.  Fungují bez připojení k internetu. 
 +  * **''-h/--help''**: Spousta příkazů po spuštění s přepínačem ''-h'' nebo ''--help'' (většinou fungují oba, někdy jen jedenvypíše více či méně stručné informace o své funkci a argumentech, které přijímá. 
 +  * **Info stránky**: Další velká dávka informací, podobná manuálovým stránkám (někdy stejné). Info stránky podporují odkazy mezi jednotlivými stránkami a spouští se pomocí ''info <název stránky>''
 + 
 +Zkuste si zjistit informace o různých příkazech za pomoci různých metod.  Pokud se vám zobrazí prohlížení v terminálu (nebude čekat na zadávání příkazu), tak pomocí šipek a ''PageUp'' a ''PageDown'' se můžete pohybovat. Prohlížení ukončíte klávesou ''q''
 + 
 +===== Používání příkazové řádky ===== 
 + 
 +Všechno budeme zkoušet v programu *Terminál*. Doporučuji okno maximalizovat abychom měli hodně prostoru -- nebudeme potřebovat nic jiného. 
 + 
 +==== Zadávání příkazů ====
  
-Příkazy, které budeme zadávat mohou být jak zabudované příkazy příkazového řádku, tak i programy nainstalované v operačním systému.  K detailní informacím ohledně spouštění se dostaneme později.+Příkazy, které budeme zadávatmohou být jak zabudované příkazy příkazového řádku, tak i programy nainstalované v operačním systému.
  
-Jedním z prvních příkazů, které vyzkoušíme, bude příkaz ''echo''((Nyní není důležité, jestli je to příkaz zabudovaný a nebo je to program v systému, ale pro opravdu zvídavé, kteří snad chtějí být i zmateni dodávám, že ''echo'' je obojí.))  Po napsání příkazu ho potvrdíme stisknutím tlačítka ''Enter'' Kurzor odskočil o dva řádky a vypsal se nám znovu prompt.  To, že nás znovu pobízí k dalšímu příkazu, je známka toho, že náš předchozí příkaz skončil.  Proč se ale vypsal jen prázdný řádek?  Zkusíme tedy napsat třeba:+Nejprve vyzkoušíme příkaz ''echo''. Po napsání příkazu ho potvrdíme stisknutím tlačítka ''Enter'' Kurzor odskočil o dva řádky a vypsal se nám znovu prompt.  To, že nás znovu pobízí k dalšímu příkazu, je známka toho, že náš předchozí příkaz skončil.  Proč se ale vypsal jen prázdný řádek?  Zkusíme tedy napsat třeba:
  
-<code bash+<code> 
-echo Ahoj+echo Ahoj
 </code> </code>
  
Řádek 84: Řádek 127:
 </code> </code>
  
-Příkaz ''echo'' tedy vypisuje to, co za něj napíšeme a pak skočí na další řádek.  V tomto případě je "Ahoj" za příkazem stále jeho součástí, říká se jí //argument// "Ahoj" na samostatném řádku je //výstup// toho příkazu.+Příkaz ''echo'' tedy vypisuje to, co za něj napíšemea pak skočí na další řádek.  V tomto případě je "Ahoj" za příkazem stále jeho součástí, říká se jí //argument// "Ahoj" na samostatném řádku je //výstup// toho příkazu.
  
-Jedním z častých zmatků u začátečníků může být, když výstup příkazu neskočí na další řádek.  To si můžeme vyzkoušet. Takto by to mohlo vypadat před a po:+Co když výstup příkazu neskočí na další řádekTo si můžeme vyzkoušet. Takto by to mohlo vypadat před a po:
  
 <code text> <code text>
Řádek 93: Řádek 136:
 </code> </code>
  
-Rozdíl tohoto příkazu oproti předchozímu je přidání ``-n`` mezi název příkazu a jeho původní argument.  Tomuto se říká //přepínač// V podstatě je to jen další argument, ale začíná na pomlčku, resp. mínus, mění chování příkazu a některé programy vyžadují, aby v seznamu argumentů byly přepínače na začátku, protože pak se může změnit chování příkazu.+Rozdíl tohoto příkazu oproti předchozímu je přidání ''-n'' mezi název příkazu a jeho původní argument.  Tomuto se říká //přepínač// V podstatě je to jen další argument, ale začíná na pomlčku, resp. mínus, mění chování příkazu a některé programy vyžadují, aby v seznamu argumentů byly přepínače na začátku, protože pak se může změnit chování příkazu
 + 
 +==== Procházení historie příkazů ==== 
 + 
 +Zmáčkneme šipku nahoru, a tím se nám budou zobrazovat předešlé příkazy.  Zmáčkneme ji tolikrát, abychom se dostali zpět na příkaz ''echo Ahoj''. Opačným směrem lze posouvat šipkou dolů (třeba když šipku nahoru zmáčknete víckrát než jste chtěli). 
 + 
 +Po napsání několika stovek řádků příkazů bude hledání některého staršího pomocí šipek nahoru a dolů docela neúčinné a zdlouhavé.  Existuje proto zkratka ''Ctrl-R'' kterou se příkazová řádka přepne do hledacího režimu.  Pokud začneme cokoliv psát, tak bude hledat v historii řádek/příkaz, který má tento řetězec v sobě obsažen.  Jde o takzvané "inkrementální hledání", znamená to tedy, že při napsání ''e'' se najde nejbližší příkaz obsahující toto písmenko. 
 + 
 +Pokud najdeme, co jsme hledali, tak pohybem v příkazu (šipky doleva nebo doprava) se příkazová řádka přepne zpět do režimu zadávání (editace) příkazu s nalezeným příkazem již předvyplněným.  Stiskem ''Enter'' se přímo vykoná (i pokud jsme v režimu hledání).  Pokud jsme nenašli to, co jsme hledali, tak můžeme resetovat příkazovou řádku zpět pomocí ''Ctrl-C''
 + 
 +Pro hledání dalšího výskytu stejného podřetězce stačí opakovat zkratku ''Ctrl-R'' Když bychom tedy začali zpětně hledat jen písmenko ''e'', ale chtěli bychom najít jiný jeho výskyt, tak stačí po jeho zadání opakovat ''Ctrl-R'', dokud nenajdeme, co hledáme.
  
-=== Základní ovládání a další íkazy ===+==== Editace íkazové řádky ====
  
-Zkusíme si, co by to udělalo, ale nebudeme celý příkaz psát znovu.  Napřed naprázdno zmáčkneme ''Enter'', ať dostaneme čistý řádek.  Potom zmáčkneme šipku nahoru, a tím se nám budou zobrazovat předešlé příkazy.  Zmáčkneme ji tolikrát, abychom se dostali zpět na příkaz ''echo Ahoj''. Opačným směrem lze posouvat šipkou dolů (třeba když šipku nahoru zmáčknete víckrát než jste chtěli).  Kurzor by měl být na konci příkazu, ale pokud ne, tak se řádka dá editovat podobně jako v textovém editoru, tedy posouvat se šipkami doleva a doprava nebo pomocí kláves ''Home'' a ''End''''Backspace'' a ''Delete'' fungují také stejně. ((Ve skutečnosti umí ta příkazová řádka víc než nějaký obyčejný editor.))+Řádka se dá editovat podobně jako v textovém editoru, tedy posouvat se šipkami doleva a doprava nebo pomocí kláves ''Home'' a ''End''''Backspace'' a ''Delete'' fungují také stejně.
  
 <code text> <code text>
Řádek 105: Řádek 158:
 </code> </code>
  
-Jak je vidět, tak příkaz ''echo'' už nepochopil ''-n'' jako přepínač, ale jako další slovo které má vypsat.  Ne u všech příkazů to takto bude fungovat, proto je dobré myslet na to, že špatné pořadí argumentů může být příčinou neočekávaného chování.+Jak je vidět, tak příkaz ''echo'' už nepochopil ''-n'' jako přepínač, ale jako další slovokteré má vypsat.  Ne u všech příkazů to takto bude fungovat, proto je dobré myslet na to, že špatné pořadí argumentů může být příčinou neočekávaného chování.
  
-Jak je vidět, tak mezi ''Ahoj'' a ''-n'' je vypsaná mezera.  Příkaz ''echo'' vypíše všechna slova která mu dáme jako argumenty.  Zkusíme tedy vypsat několik slov zaráz.  Abysme se  posouvali trošku rychleji, tak zkusíme zase víc věcí zaráz.  Místo toho, abychom psali ''echo'', tak napíšeme jen ''ec'' a potom zmáčkneme ''[[https://cs.wikipedia.org/wiki/Tabul%C3%A1tor|Tab]]'' Pokud je ''echo'' jediný spustitelný příkaz/program začínající na ''ec'', tak se automaticky doplní.  Pokud není, tak se nic nestane (možných příkazů je víc a shell neví který doplnit).  Zmáčkněte ''Ctrl-C'', tím se zruší aktuální vstup a můžeme si vyzkoušet druhý případ doplňování.  Napište jen ''e'' a zmáčkněte ''Tab'' a nic se nestane.  Při druhém zmáčknutí se objeví všechny příkazy začínající na ''e'' Pokud je dost místa v terminálu aby se zobrazily najednou, tak se jen zobrazí, ale pokud ne, tak se začnou vypisovat po stránkách (poslední řádek terminálu bude zobrazovat ''<nowiki>-- More --</nowiki>'',  mačkáním mezery posouváme o stránky až dokud se nevypíšou všechny. Zmáčkneme znovu ''Ctrl-C'' a napíšeme ''echo Ahoj vsichni kolem'' a zmáčkneme ''Enter'' (nepište celý příkaz ''echo'', ale použijte ''Tab'').  Takhle nějak by to mělo vypadat po tom všem co jsme si vyzkoušeli:+==== Doplňování názvů příkazů ==== 
 + 
 +Místo toho, abychom psali ''echo'', tak napíšeme jen ''ec'' a potom zmáčkneme [[https://cs.wikipedia.org/wiki/Tabul%C3%A1tor|Tab]]. Pokud je ''echo'' jediný spustitelný příkaz nebo program začínající na ''ec'', tak se automaticky doplní na ''echo''.  Pokud není, tak se nic nestane (možných příkazů je víc a shell nevíkterý doplnit). 
 + 
 +Zmáčkněte ''Ctrl-C'' (zobrazí se jako ''^C'')čímž se zruší aktuální vstup a můžeme si vyzkoušet druhý případ doplňování.  Napište jen ''e'' a zmáčkněte ''Tab'' a nic se nestane.  Při druhém zmáčknutí se objeví všechny příkazy začínající na ''e'' Pokud je dost místa v termináluaby se zobrazily najednou, tak se jen zobrazí, ale pokud ne, tak se začnou vypisovat po stránkách (poslední řádek terminálu bude zobrazovat ''<nowiki>-- More --</nowiki>''). 
 + 
 +Mačkáním mezerníku posouváme o stránkydokud se nevypíší všechny.  Zmáčkneme znovu ''Ctrl-C'' a napíšeme ''echo Ahoj vsichni kolem'' a zmáčkneme ''Enter'' (nepište celý příkaz ''echo'', ale použijte ''Tab'').  Takhle nějak by to mělo vypadat po tom všemco jsme si vyzkoušeli:
  
 <code text> <code text>
Řádek 117: Řádek 176:
 </code> </code>
  
-Tam kde je vidět ''^C'' tak jsme zmáčkli ''Ctrl-C'' K tomuto je potřeba upřesnit několik poznatků.  Zaprvé je to zkratka která nejen ukončuje aktuální vstup a resetuje shell na nový řádek.  Krom toho se tím dá ale (většinou) přerušit i aktuální běžící program.  Poslední věc, která vás určitě napadla je, že asi nemůžeme nic kopírovat.  To samozřejmě není pravda, Terminál umožňuje jak kopírování a vkládání, tak se dají použít i techniky které poskytuje celý grafický systém, to ale není součástí tohoto kurzu.  Prozatím nám postačí, že pokud něco označíme, tak i bez jakýchkoliv klávesových zkratek to můžeme rovnou vložit kliknutím prostředního tlačítka myši (popř. adekvátním hmatem, nejčastěji trojdotek, na touchpadu) tam, kam chceme text vložit.    Pr nás je důležité, že Ctrl-C a Ctrl-V nebudou dělat to na co můžete být normálně zvyklí, ale něco jiného ((I Ctrl-V má svoji speciální funkci, dokážete přijít na to jakou?  Jako tip uvedu, že pomocí Ctrl-V lze napsat ''ec<Tab>'' bez doplnění názvu příkazu.)).+Tamkde je vidět ''^C''tak jsme zmáčkli ''Ctrl-C''Jde o zkratku, která nejen ukončuje aktuální vstup a resetuje shell na nový řádek.  Krom toho se tím dá ale (většinou) přerušit i aktuální běžící program.
  
-=== Složitější argumenty ===+==== Kopírování a vkládání přes schránku ====
  
-Dále je důležité věděco se stane když uděláme víc mezer mezi argumenty A zase si vyzkoušíme víc věcí naráz.  Šipkou nahoru načteme předchozí příkaz a pomocí Ctrl-<šipka vlevo> a Ctrl-<šipka vpravo> se posuneme mezi slova ''Ahoj'' a ''vsichni'' a přidáme pár mezer.  Po zmáčknutí ''Enter'' to bude vypadat třeba takto:+Terminál umožňuje jak kopírování a vkládání. Pokud něco označíme, tak i bez jakýchkoliv klávesových zkratek to můžeme rovnou vložit kliknutím prostředního tlačítka myši (popř. adekvátním hmatem, nejčastěji trojdotek, na touchpadu) tam, kam chceme text vložit. Ctrl-C a Ctrl-V nebudou lat to, na co žete být normálně zvyklí. 
 + 
 +==== Zadávání parametrů ==== 
 + 
 +Šipkou nahoru načteme předchozí příkaz a pomocí Ctrl-<šipka vlevo> a Ctrl-<šipka vpravo> se posuneme mezi slova ''Ahoj'' a ''vsichni'' a přidáme pár mezer.  Po zmáčknutí ''Enter'' to bude vypadat takto:
  
 <code text> <code text>
Řádek 129: Řádek 192:
 </code> </code>
  
-Výstup vypadá tak, jak vypadá, protože příkaz ''echo'' dostal tři parametry (předali jsme mu dva argumenty), ale on neví jak jsme je oddělili.  V základním nastavení oddělují mezery, tabulátory a nové řádky jednotlivé argumenty, ale tyto rozdělovače se nepředávají spouštěnému příkazu/programu.  Jak tedy předáme více mezer?  Zkuste toto (a použijte zase šipku nahoru a šipky doleva a doprava s ''Ctrl'':+Výstup vypadá tak, jak vypadá, protože příkaz ''echo'' dostal tři parametry (předali jsme mu tři argumenty), ale nevíjak jsme je oddělili.  V základním nastavení oddělují mezery, tabulátory a nové řádky jednotlivé argumenty, ale tyto rozdělovače se nepředávají spouštěnému příkazu.  Jak tedy předáme více mezer?  Zkuste toto (a použijte zase šipku nahoru a šipky doleva a doprava s ''Ctrl'':
  
 <code text> <code text>
Řádek 145: Řádek 208:
 </code> </code>
  
-Je mezi nimi sice důležitý rozdíl, ale né v tomto konkrétním případě.  O detailech někdy později a nebo snad příště. +Pokud u posledních příkazů zapomenete jednu uvozovku, tak to bude vypadat po zmáčknutí klávesy ''Enter'' takto:
- +
-Pokud u posledních příkazů zapomenete jednu uvozovku, tak to bude vypadat po zmáčknutí klávesy ''Enter'' nějak takto:+
  
 <code text> <code text>
Řádek 154: Řádek 215:
 </code> </code>
  
-Nelekejte se.  Samozřejmě se z toho dá vyskočit pomocí ''Ctrl-C'' tak, jak to již známe.  Co se to ale děje?  Příkaz, který jste psali není ukončen.  To signalizuje znak ''>'' na začátku řádku.  Uvozovky v tomto případě musí být párové a způsobují to, že syntakticky příkaz ještě neskončil (shell čeká na konec uvozovek).  Na druhou stranu se toho dá využít při psaní dlouhých a složitých příkazů.  V našem případě by stačilo zadat jednoduchou uvozovku a příkaz potvrdit klávesou ''Enter''  Nový řádek za slovem "kolem" by se vypsal, protože je součástí řetězce v uvozovkách.  Pro nás zatím asi bude stačit to, že toto lze erušit pomocí ''Ctrl-C''.+Samozřejmě se z toho dá vyskočit pomocí ''Ctrl-C'' tak, jak to již známe.  Co se to ale děje?  Příkaz, který jste psalinení ukončen.  To signalizuje znak ''>'' na začátku řádku.  Uvozovky v tomto případě musí být párové a způsobují to, že syntakticky příkaz ještě neskončil (shell čeká na konec uvozovek). Toho se dá využít při psaní dlouhých a složitých příkazů.  V našem případě by stačilo zadat jednoduchou uvozovku a příkaz potvrdit klávesou ''Enter''  Nový řádek za slovem "kolem" by se vypsal, protože je součástí řetězce v uvozovkách. 
 + 
 +==== Řetězení íkazů ====
  
-Dalším speciálním znakem je středník.  Ten totiž v příkazové řádce odděluje jednotlivé příkazy.  Pokud tedy naše první dva příklady napíšu po jednom, bude to vypadat následovně:+Dalším speciálním znakem je středník.  příkazové řádce odděluje jednotlivé příkazy.  Pokud tedy naše první dva příklady napíšu po jednom, bude to vypadat následovně:
  
 <code text> <code text>
Řádek 175: Řádek 238:
 </code> </code>
  
-Úkol/cvičení+Úkol: 
-Co by byl výstup následujících příkazů (zkuste se zamyslet předtím, než to vyzkoušíte)?+Co by byl výstup následujících příkazů?
   * ''echo echo Ahoj''   * ''echo echo Ahoj''
   * ''echo Ahoj; echo Ahoj''   * ''echo Ahoj; echo Ahoj''
   * ''echo Ahoj  echo Ahoj;''   * ''echo Ahoj  echo Ahoj;''
  
-=== Rychlé opakování ===+==== Zobrazení obsahu souboru ====
  
-<code text> +Spustíme program ''cat'' a jako argument mu dáme ''/etc/hostname'' (nezapomeňte na tabulátor):
-|---------- prompt ---------| +
-uživatel  název hostitele +
-  |        |           cesta +
-  V        V               |----------- příkaz -----------| +
-[liveuser@localhost-live ~]$ echo -n 'Ahoj     vsichni' kolem +
-Ahoj     vsichni kolem      ^   ^^ |-------+--------| +
-|---------+----------|      |   |`---------+-----------+ +
-          |                |  |  přepínač                | +
-          |                | název příkazu             argumenty +
-       výstup             uživatel není přepnutý na administrátora +
-</code> +
- +
-  * **Tabulátor:** pománá doplňovat příkaz (jak název, tak i některé argumenty) automaticky +
-  * **Ctrl-C:** přerušuje běžící program, popř. resetuje zadávání příkazu +
-  * **Uvozovky:** pomáhají přesněji specifikovat argumenty +
-  * **Středník:** umožňuje zadat více příkazů na jednom řádku +
- +
-==== Pár důležitých informací k příkazům ==== +
- +
-Pokud napíšeme příkaz do příkazové řádky a chceme jej spustit, tak se děje několik věcí.  Nejprve ''shell'' zjistí jestli se jedná o cestu k nějakému souboru (ať už relativní nebo absolutní) a pokud ano, tak se ho pokusí najít a spustit.  Pokud to cesta není, tak zjistí jestli to není název nějakého zabudovaného příkazu.  Když ano, tak ho spustí a když ne, tak hledá program s tímto názvem v seznamu adresářů uložených v proměnné ''$PATH'' (o proměnných detailněji později).  Tato proměnná se k tomuto účelu používá na většině operačních systémech.  Je ale nutno dodat, že podstatným rozdílem oproti některým jiným systémům ((Konkrétně mám na mysli DOS a Windows, ale nejsem schpný říct, jestli se to týká všech verzí.)) je, že se program se specifikovaným názvem **nehledá** v aktuálním adresáři, ale pouze v těch specifikovaných ve zmíněné proměnné.  To by mohlo způsobit nejen nechtěné problémy v některých situacích, ale také bezpečnostní riziko. +
- +
-Pokud chcete o nějakém příkazu zjistit více, např. jaké podporuje a přijímá argumenty, co vlastně dělá atd, tak máte několik možností.  Většina programů bude mít alespoň jedno z následujících: +
- +
-  * **Manuál:** Pro otevření manuálu ke konkrétnímu příkazu lze použít ''man <příkaz>'' Manuálové stránky existují nejen pro příkazy a programy, ale také je v nich spousta dokumentace ohledně systému, co jak funguje a existují i k funkcím v různých programovacích jazycích.  Fungují bez připojení k internetu a lze v nich najít spoustu informací (až v nich umí člověk hledat). +
-  * **-h/--help:** Spousta příkazů po spuštění s přepínačem ''-h'' nebo ''--help'' (většinou fungují oba, někdy jen jeden) vypíše více či méně stručné informace o své funkci a argumentech které přijímá. +
-  * **Info stránky:** Další velká dávka informací ohledně všecho, podobně manuálovým stránkám (někdy stejné), podporují odkazy mezi jednotlivými stránkami, spouští se pomocí ''info <název stránky>'' +
- +
-Zkuste si zjistit informace o různých příkazech za pomoci různých metod.  Pokud se vám zobrazí prohlížení v terminálu (nebude čekat na zadávání příkazu), tak pomocí šipek a ''PageUp''/''PageDown'' se můžete pohybovat a prohlížení ukončíte klávesou ''Q''+
-==== Posledních pár příkladů (už jsme skoro u konce kapitoly) ==== +
- +
-Zkusíme pustit jiný příklad.  Tentokrát to bude program ''cat'' a jako argument mu dáme ''/etc/hostname'' (nezapomeňte na tabulátor):+
  
 <code text> <code text>
Řádek 222: Řádek 254:
 </code> </code>
  
-I když vysvětlení programu ''cat'' není součástí této kapitoly, tak se na tomto příkladě bude dobře vysvětlovat další zkratka.  Tento příkaz vypíše obsah souboru který mu řekneme, v našem případě soubor ''/etc/hostname'', který obsahuje název hostitele.  Popsáno detailněji, program čte soubor dokud nedojde na jeho konec a pak skončí.  Pokud mu parametr nezadáme, tak čte z klávesnice (konkrétněji ''standardního vstupu'', o tom ale také později) a co přečte, tak vypíše.  Program tedy nerozlišuje jestli čte ze souboru nebo od uživatele.  Zkusíme to:+Příkaz vypíše obsah souborukterý mu zadáme, v našem případě soubor ''/etc/hostname'', který obsahuje název hostitele.  Popsáno detailněji, program čte soubordokud nedojde na jeho koneca pak skončí.  Pokud mu parametr nezadáme, tak čte z klávesnice (konkrétněji //standardního vstupu//) a co přečte, to vypíše.  Program tedy nerozlišujejestli čte ze souborunebo od uživatele.  Zkusíme to:
  
 <code text> <code text>
Řádek 234: Řádek 266:
 </code> </code>
  
-Já jako uživatel jsem v tomto případě napsal tři řádky, na prvním bylo ''asdf'', druhý byl prázdný a třetí obsahoval slovo ''neco'' Jak se ale dostat k tomu, abych mohl psát zase zpátky další příkazy?  Můžu buď použít zkratku o které jsme si již říkali (''Ctrl-C''), ta by ale znamenala abnormální přerušení programu.  To znamená, že pokud by program měl něco udělat po přečtení celého souboru/vstupu, tak by to neudělal, místo toho by rovnou skončil.  Jak jsme si ale říkali, tak  program ''cat'' čte dokud se nedostane na konec souboru.  To, abychom programu řekli, že už nechceme zadávat nic dalšího lze "říct" zkratkou ''Ctrl-D'' na novém řádku. ((Jde to i mimo nový řádek, ale zase to skrývá různá úskalí.))+Já jako uživatel jsem v tomto případě napsal tři řádky, na prvním bylo ''asdf'', druhý byl prázdný a třetí obsahoval slovo ''neco'' Jak se ale dostat k tomu, abych mohl psát zase zpátky další příkazy?  Můžu buď použít zkratkuo které jsme si již říkali (''Ctrl-C''), ta by ale znamenala abnormální přerušení programu.  To znamená, že pokud by program měl něco udělat po přečtení celého souboru či vstupu, tak by to neudělal, místo toho by rovnou skončil.  Jak jsme si ale říkali, tak  program ''cat'' čtedokud se nedostane na konec souboru.  To, abychom programu řekli, že už nechceme zadávat nic dalšíholze "říct" zkratkou ''Ctrl-D'' na novém řádku. (Jde to i mimo nový řádek, ale zase to skrývá různá úskalí.)
  
-Nyní zpět k informaci kterou jsme si řekli již dříve a to, že náš shell (v našem případě ''bash'') je také jen program.  Čte ze vstupu, ale místo toho, aby každý řádek vypisoval tak jak ho přečetl, tak jej vykoná jako příkaz.  Jak si to vyzkoušet?  Zkusíme ho pustit:+==== Ukončení zadávání vstupu ==== 
 + 
 +š shell (v našem případě ''bash'') je také jen program.  Čte ze vstupu, ale místo toho, aby každý řádek vypisoval takjak ho přečetl, tak jej vykoná jako příkaz.  Jak si to vyzkoušet?  Zkusíme ho spustit:
  
 <code text> <code text>
Řádek 243: Řádek 277:
 </code> </code>
  
-Vypadá to jakoby se nic nestalo, ale pravdou je, že nyní běží dva programy ''bash'' První (který pustil terminál) vypsal první řádek, přečetl od nás příkaz ''bash'', vykonal jej a nyní čeká až se ukončí.  Druhý řádek vypsal právě námi puštěný druhý program ''bash'' Zkusíme to ještě jednou?+Vypadá to jakoby se nic nestalo, ale pravdou je, že nyní běží dva programy ''bash'' První (který spustil při svém startu program **Terminál**) vypsal první řádek (prompt), přečetl od nás příkaz ''bash'', vykonal jej a nyní čekáaž se ukončí.  Druhý řádek vypsal právě námi puštěný druhý program ''bash'' Zkusíme to ještě jednou?
  
 <code text> <code text>
Řádek 251: Řádek 285:
 </code> </code>
  
-Teď nám běží tři zaráz.  První čeká na dokončení druhého, druhý na dokončení třetího a ten čeká na nás až mu řekneme co má dělat.  Zmíním příkaz kterým zjistíme kolik ''shell''ů máme puštěných "v sobě".  Ten si ale pamatovat nemusíte, nejspíš jej jen tak nevyužijete pro něco jiného než tuto konkrétní ukázku.  Příkaz vypadá takto (pozor, záleží na malých a velkých písmenkách):+Teď nám běží tři naráz.  První čeká na dokončení druhého, druhý na dokončení třetího a ten čeká na násaž mu řeknemeco má dělat.  Jak zjistímekolik shellů máme puštěných "v sobě"Příkaz vypadá takto (pozor, záleží na malých a velkých písmenkách):
  
-<code bash>+<code>
 echo $SHLVL echo $SHLVL
 </code> </code>
  
-Pokud ho nyní pustíme (nezapomeňte na tabulátor, jak u názvu příkazu tak i u jeho argumentu), tak by nám měl vypsat číslo (popř. 4záleží zde na pár detailech).  Ukončíme tedy třetí ''bash'' pomocí příkazu ''exit'' (příkaz pro ukončení shellu) a zjistíme znovu kolik ''shell''ů máme puštěných v sobě.  Výsledek by měl být o jedno menší než v předchozím případě.  Perfektní, funguje.  K tomu, proč si to ukazujeme se právě dostáváme.  Pamatujete jak jsme se bavili o tom, že naznačíme nějakému programu, který čeká na vstup od uživatele, že už nechceme nic dalšího zadávat?  Zkusme co tedy nyní stane, pokud zmáčkneme ''Ctrl-D'' Vypadá to, že se jen vypsal další řádek.  Pokud ale znovu použijeme příkaz ''echo $SHLVL'' (tabulátory!), tak zjistíme, že se ukončil další shell, protože se nám vypsalo zase menší číslo.  Co se tedy stalo?  Protože ''bash'' zjistil, že nechceme psát další příkazy (z jeho pohledu došel na konec souboru/vstupu), tak se ukončil.  A funkci převzal první, prapůvodní bash, který byl spuštěn terminálem.  Stejně jako ''bash'', tak i terminál jen pustí program a čeká až se ukončí.  A po jeho skončení se ukončí i sám terminál.  Pokud tedu znovu zmáčkneme ''Ctrl-D'', tak se zavře i okno programu ''Terminál'' Je to to stejné jakoby jsme napsali příkaz ''exit''.+Pokud ho nyní spustíme (nezapomeňte na tabulátor, jak u názvu příkazu tak i u jeho argumentu), tak by nám měl vypsat číslo (v prvním shellu běží desktopové prostředídruhý shell byl spuštěn programem Terminál a třetí a čtvrtý jsme spustili my příkazem ''bash'').  Ukončíme tedy poslední ''bash'' pomocí příkazu ''exit'' (příkaz pro ukončení shellu) a zjistíme znovukolik shellů máme puštěných v sobě:
  
-Posledním íkazem, který je nutno zmínit je příkaz ''sudo'' V Linuxu existuje administrátorský účet (''root'', superuser), který má plné oprávnění.  Z bezpečnostních důvodů se za něj nepřihlašuje.  Lze za něj ale pustit nějaký íkaz.  Toho lze dosáhnout tím, že před příkaz zadáme slovo ''sudo'' Tento název vznikl z anglického //superuser do//, tedy superuživateli (jedno z pojmenování administrátora) udělej (něco).  A právě to něco jsou argumenty tohoto příkazu.  Předtím, než je příkaz za administrátora puštěn, tak se nás program ''sudo'' může zeptat na heslo.  Nejčastěji se ptá na heslo přihlášeného uživatele.  To, jestli jste oprávněni pouštět příkazy za administrátora není tedy dáno tím, jestli znáte jeho heslo, ale tím, jestli jste k tomu oprávněni ((Ve skutečnosti je to trošku složitější, ale toto zjednodušení nám zatím bohatě stačí.)), což byste na svém počítači asi být mohli. ((Pokud nejste a chcete si to přece jen vyzkoušet, tak je jen pár věcí jednodušších než si pustit LiveDVD ve virtuálním stroji))  Pokud tedy pustíme ''sudo echo Ahoj'', spustí se příkaz ''echo'' s argumentem ''Ahoj'' s plnými právy.  Vzhledem k tomu, že na vypsání textu moc práv potřeba není, nebude v chování rozdíl, snad jen na tu část kdy se nás ''sudo'' bude ptát na heslo.  Jak tedy nejjednodušeji zjistit jestli se příkaz pustil za superuživatele?  Jednoduše zkusíme pustit přímo ''bash'' ((Velmi podobného výsledku bychom dosáhli pomocí přepínače ''-s'', tedy pomocí příkazu ''sudo -s'')):+<code text> 
 +[liveuser@localhost-live ~]$ exit 
 +[liveuser@localhost-live ~]$ echo $SHLVL 
 +
 +[liveuser@localhost-live ~]$ █ 
 +</code> 
 + 
 +Zmáčkneme ''Ctrl-D'' Vypadá to, že se jen vypsal další řádek.  Pokud ale znovu použijeme íkaz ''echo $SHLVL'' (tabulátory!), tak zjistíme, že se ukončil další shell, protože se nám vypsalo zase menší číslo.  Co se tedy stalo?  Protože ''bash'' zjistil, že nechceme psát další příkazy (z jeho pohledu došel na konec souboru či vstupu), tak se ukončil.  A funkci převzal první, prapůvodní bash, který byl spuštěn programem Terminál. 
 + 
 +Stejně jako ''bash'', tak i Terminál jen pustí program a čeká až se ukončí.  A po jeho skončení se ukončí i sám terminál.  Pokud tedy znovu zmáčkneme ''Ctrl-D'', tak se zavře i okno programu ''Terminál'' Je to to stejné jakoby jsme napsali příkaz ''exit''. 
 + 
 +==== Získání administrátorských práv ==== 
 + 
 +V Linuxu existuje administrátorský účet (**root**, superuser), který má plné oprávnění.  Z bezpečnostních důvodů se za něj nepřihlašuje.  Je však možné jeho prostřednictvím spouštěíkazy.  Toho lze dosáhnout tím, že před příkaz zadáme slovo ''sudo'' Tento název vznikl z anglického //superuser do//, tedy "superuživateliudělej (něco)".  A právě to něco jsou argumenty tohoto příkazu.  Předtím, než je příkaz za administrátora puštěn, tak se nás program ''sudo'' může zeptat na heslo.  Nejčastěji se ptá na heslo přihlášeného uživatele. 
 + 
 +To, jestli jste oprávněni pouštět příkazy za administrátora není tedy dáno tím, jestli znáte jeho heslo, ale tím, jestli jste k tomu oprávněni, což byste na svém počítači být mohli. Pokud tedy pustíme ''sudo echo Ahoj'', spustí se příkaz ''echo'' s argumentem ''Ahoj'' s plnými právy.  Vzhledem k tomu, že na vypsání textu moc práv potřeba není, nebude v chování rozdíl, snad jen na tu částkdy se nás ''sudo'' bude ptát na heslo. 
 + 
 +Jak tedy nejjednodušeji zjistitjestli se příkaz pustil za superuživatele? Zkusíme pustit přímo ''bash'' (podobného výsledku bychom dosáhli pomocí přepínače ''-s'', tedy pomocí příkazu ''sudo -s''):
  
 <code text> <code text>
Řádek 266: Řádek 317:
 </code> </code>
  
-Změnilo se nám pár věcí v promptu.  Hlavní věcí je konkrétní uživatel (v tomto případě z ''liveuser'' na ''root'').  Cesta již není ''~'' (o tom později) a místo ''$'' je na konci promptu ''#'' (ukazatel přepnutí na administrátora).  Zmáčkneme ''Ctrl-D'' a jsme zpět normální uživatelé.  Toto přepínání se ale příliš nedoporučuje.  Pokud zapomenete, že jste přepnutí na administrátora a nějaký příkaz spustíte omylem, tak můžete způsobit větší škodu než za normálního uživatele.  Ideálně proto (především ze začátku) používejte příkaz ''sudo'' jen na puštění jednotlivých příkazů a ne na dlouhodobé nabytí práv.+Změnilo se nám pár věcí v promptu.  Hlavní věcí je konkrétní uživatel (v tomto případě z ''liveuser'' na ''root'').  Cesta již není ''~'' a místo ''$'' je na konci promptu ''#'' (ukazatel přepnutí na administrátora).  Zmáčkneme ''Ctrl-D'' a jsme zpět normální uživatelé.  Toto přepínání se ale příliš nedoporučuje.
  
-Poslední zkratkoukterou nelze vynechat, je zkratka pro hledání v historii íkazů.  Po napsání kolika stovek řádků příkazů bude hledání některého staršího pomocí šipek nahoru a dolů docela neúčinné a zdlouhavé.  Existuje proto zkratka ''Ctrl-R'' kterou se příkazová řádka přepne do hledacího režimu.  Pokud začneme cokoliv psát, tak bude hledat v historii řádek/příkaz, který má tento řetězec v sobě obsažen.  Jde o takzvané "inkrementální hledání", znamená to tedy, že při napsání ''e'' se najde nejbližší příkaz obsahující toto písmenko, pokud tedy jedete přesně podle příkladů, tak to bude nejspíš ''sudo echo Ahoj''.   Při následovném zmáčknutí ''m'' se najde nejspíš řádek ''echo 'Ahoj     vsichni' kolem'' Pokud najdeme co jsme hledali, tak pohybem v příkazu (šipky doleva/doprava) se příkazová řádka přepne zpědo režimu zadávání (editace) příkazu s nalezeným příkazem již předvyplněným.  Stiskem ''Enter'' se ímo vykoná (i pokud jsme v režimu hledání).  Pokud jsme nenašli to, co jsme hledali, tak můžeme resetovat příkazovou řádku zpět pomocí ''Ctrl-C'' jak jsme se již učili.  Čistějším ukončením by bylo použití ''Ctrl-G'', ale to je na zapamatování jen pro premianty. ((A uživatele editoru Emacs.))  Pro hledání dalšího výskytu stejného podřetězce stačí opakovat zkratku ''Ctrl-R'' Když bychom tedy začali zpětně hledat jen písmenko ''e'', ale chtěli bychom najít jiný jeho výskyt než v ''sudo echo Ahoj'', tak stačí po jeho zadání opakovat ''Ctrl-R'' dokud nenajdeme co hledáme.+**Pokud zapomeneteže jste epnutí na administrátora a jaký příkaz spustíte omylem, tak můžete způsobit větší škodu než za normálního uživatele.  Používejte tedy příkaz ''sudo'' jen na puštění jednotlivých íkazů a ne na dlouhodobé nabytí práv.**
  
-=== Rychlé opakování ==+===== Přehled klávesových zkratek a funkčních znaků =====
-  * **''exit'':** íkaz k ukončení zadávání příkazů do příkazové řádky. +
-  * **''Ctrl-D'':** Na novém řádku naznačuje programu konec vstupních dat (simuluje konec souboru) +
-  * **''Ctrl-R'':** Zpětné hledání v historii příkazů +
- +
-=== Pár tipů na (téměř) závěr ==+
-  * **Nikdy nic nekopírujte z internetu nebo jakýchkoliv neznámých zdrojů do terminálu!** +
-  * Terminál sám (i mimo shell) umí spoustu užitečných zkratek, stačí se po nich poohlédnout ;-)+
  
-==== Filozofie UNIXu ====+  * **''exit''**: příkaz k ukončení zadávání příkazů do příkazové řádky 
 +  * **''Ctrl-D''**: na novém řádku naznačuje programu konec vstupních dat (simuluje konec souboru) 
 +  * **''Ctrl-R''**: zpětné hledání v historii příkazů 
 +  * **''Ctrl-C''**: přerušuje běžící program, popř. resetuje zadávání příkazu 
 +  * **šipka nahoru**: posun v historii příkazů o jeden zpět 
 +  * **šipka dolu**: posun v historii příkazů o jeden dopředu 
 +  * **Tabulátor**: pomáhá doplňovat příkaz (jak název, tak i některé argumenty) automaticky 
 +  * **Uvozovky**: pomáhají přesněji specifikovat argumenty 
 +  * **Středník**: umožňuje zadat více příkazů na jednom řádku
  
-Možná se vám zdá, že programy, které jsou tak primitivní jako ty, co jsme si ukázali, nejsou v praxi příliš použitelné.  Opak je ale pravdou.  [[https://cs.wikipedia.org/wiki/Filosofie_Unixu|Filozofií UNIXu]] je (zkráceně) následující rčení: 
  
-> Pište takové programy, které dělají jen jednu věc a dělají ji dobře. 
- 
-Nezkrácená verze zmiňuje i to, že by měly spolupracovat a používat tzv. "standardní proudy" To zjednodušeně znamená jednu z věcí, které jsme si řekli o programech ''cat'' a ''bash'' A to, že se chovají v podstatě stejně ať už čtou ze souboru a nebo od uživatele.  Nesmírnou výhodou tohoto přístupu je to, že se všechny jednoduché programy dají skládat dohromady a i neprogramátor díky nim dokáže zpracovat velké množství dat či zjednodušit (nebo dokonce automatizovat) nějakou činnost. 
 ===== Práce se soubory a adresáři ===== ===== Práce se soubory a adresáři =====
- 
  
 ==== Systém súborov (file system) ==== ==== Systém súborov (file system) ====
Řádek 293: Řádek 340:
 Systém súborov v Linuxe je organizovaný v **jednej stromovej** štruktúre. Systém súborov v Linuxe je organizovaný v **jednej stromovej** štruktúre.
  
-**Koreň** tohoto systému (//file system root//) sa označuje ‘**''/''**’ a každá absolútna cesta preto začína týmto symbolom. +**Koreň** tohoto systému (//file system root//) sa označuje ‘**''/''**’ a každá absolútna cesta preto začína týmto symbolom.
  
 Prvá úroveň systému súborov je bežne rozdelená na nasledujúce adresáre: Prvá úroveň systému súborov je bežne rozdelená na nasledujúce adresáre:
Řádek 300: Řádek 347:
   * **''/etc''**  - obsahuje konfiguračné súbory   * **''/etc''**  - obsahuje konfiguračné súbory
   * **''/home''** - domovské adresáre bežných užívateľov   * **''/home''** - domovské adresáre bežných užívateľov
-  * **''/proc''** - prístup k informáciám a nastaviteľným parametrom jednotlivých procesov aj celého systému (na úrovni kernelu)    +  * **''/proc''** - prístup k informáciám a nastaviteľným parametrom jednotlivých procesov aj celého systému (na úrovni kernelu) 
-  * **''/media''** - pripojené odpojitelné médiá (napr. USB alebo CD-ROM a pod.) +  * **''/media''** - pripojené odpojitelné médiá (napr. USB alebo CD-ROM a pod.)
   * **''/mnt''** - dočasne pripojené ďalšie suborové systémy   * **''/mnt''** - dočasne pripojené ďalšie suborové systémy
   * **''/opt''** - súbory volitelných softwarových balíčkov   * **''/opt''** - súbory volitelných softwarových balíčkov
Řádek 313: Řádek 360:
     * **''/usr/lib''** - knižnice     * **''/usr/lib''** - knižnice
     * **''/usr/local''** - lokálne nastavenia softwaru     * **''/usr/local''** - lokálne nastavenia softwaru
-  * **''/var''** - variabilné, často sa meniace dáta, ktoré majú byť zachované po reboote +  * **''/var''** - variabilné, často sa meniace dáta, ktoré majú byť zachované po reboote
  
-//Pozn.:// Toto rozdelenie **nie je** striktné, avšak vačšina bežných aplikácií ho dodržuje(vínimka: ''/proc'', ''/sys'', ''/boot'')+Pozn.: Toto rozdelenie **nie je** striktné, avšak vačšina bežných aplikácií ho dodržuje (vínimka: ''/proc'', ''/sys'', ''/boot'').
  
 ==== Prehľad základných príkazov ==== ==== Prehľad základných príkazov ====
Řádek 321: Řádek 368:
 === Navigácia === === Navigácia ===
  
-  * **''pwd''** - //print working directory//  +  * **''pwd''** - //print working directory// 
-    * Zobrazí absolútnu cestu k aktuálnemu adresáru  +    * Zobrazí absolútnu cestu k aktuálnemu adresáru 
-<code bash>+<code>
 $ pwd $ pwd
 /home/user1/ /home/user1/
 </code> </code>
  
-  * **''ls''** - //list// +  * **''ls''** - //list//
     * Vypíše obsah aktuálneho adresára     * Vypíše obsah aktuálneho adresára
-    * Užitočné prepínače:  +    * Užitočné prepínače: 
-      * **''-a''**’ - vypíše všetky súbory, vrátane skrytých((skryté súbory začínajú znakom .’ a sú ignorované bežnými nástrojmi ako napr. rm.)+      * **''-a''** - vypíše všetky súbory, vrátane skrytých (skryté súbory začínajú znakom ''.'' a sú ignorované bežnými nástrojmi ako napr. ''rm''.) 
-      * **''-l''**’  - vypíše detailnejšie informácie (dá sa použiť skratka ll+      * **''-l''**  - vypíše detailnejšie informácie (dá sa použiť skratka ''ll''
-<code bash>+<code>
 $ ls $ ls
 Documents  Downloads  Games  Music  Pictures  Private  Public  Templates  Videos Documents  Downloads  Games  Music  Pictures  Private  Public  Templates  Videos
 </code> </code>
  
-  * **''cd''** - //change directory// +  * **''cd''** - //change directory//
     * Zmení aktuálny adresár na zadaný (“//presunie sa//” do zadaného adresáru)     * Zmení aktuálny adresár na zadaný (“//presunie sa//” do zadaného adresáru)
-    * Dá sa používať zadaním absolútnej aj relatívnej cesty. +    * Dá sa používať zadaním absolútnej aj relatívnej cesty 
-    * Bez argumentov zmení adresár na //domovský// +    * Bez argumentov zmení adresár na //domovský// 
-    * Existuje niekoľko symbolových skratiek, pomocou ktorých sa dá cieľová cesta konštruovať: +    * Existuje niekoľko symbolových skratiek, pomocou ktorých sa dá cieľová cesta konštruovať 
-      * **''.''**’ - skratka pre //aktuálny// adresár +      * **''.''** - skratka pre //aktuálny// adresár 
-      * **''..''**’ - skratka pre //rodičovský// adresár +      * **''..''** - skratka pre //rodičovský// adresár 
-      * **''~''**’ - skratka pre //domovský// adresár užívateľa, ktorý príkaz používa ((podľa //premennej prostredia// $HOME))  +      * **''~''** - skratka pre //domovský// adresár užívateľa, ktorý príkaz používa (podľa //premennej prostredia// ''$HOME''
-    * Špeciálna symbol **''-''**’ sa dá použiť namiesto cieľovej cesty (a bez pridaných ďalších prepínačov) pre zmenu na predošlý aktívny adresár (vizpríklad)  +    * Špeciálny symbol **''-''** sa dá použiť namiesto cieľovej cesty (a bez pridaných ďalších prepínačov) pre zmenu na predošlý aktívny adresár (viz príklad) 
-<code bash+<code> 
-$ pwd +$ pwd
 /home/user1/Documents /home/user1/Documents
  
 $ cd ../Pictures $ cd ../Pictures
-$ pwd +$ pwd
 /home/user1/Pictures /home/user1/Pictures
  
Řádek 360: Řádek 407:
 </code> </code>
  
-  * **''tree''** +  * **''tree''**
     * Vypíše (stromovo) štruktúru súborového systému od zadaného adresáru     * Vypíše (stromovo) štruktúru súborového systému od zadaného adresáru
-<code bash>+<code>
 $ tree ~ $ tree ~
 (Zobrazí stromovú struktúru domovského adresára -> Vyskúšajte sami.) (Zobrazí stromovú struktúru domovského adresára -> Vyskúšajte sami.)
 </code> </code>
  
-  * **''find''**  +  * **''find''** 
-    * Umožňuje vyhľadávať súbory, prípadne obsah súborov ((analógia: Windows Search))+    * Umožňuje vyhľadávať súbory, prípadne obsah súborov (analógia: Windows Search)
     * Poskytuje veľa rôznych parametrov pre upresnenie vyhladávania.     * Poskytuje veľa rôznych parametrov pre upresnenie vyhladávania.
-    * Viac informácií: “//man find//” +    * Viac informácií: ''man find'' 
-<code bash>+<code>
 $ find /etc -name httpd $ find /etc -name httpd
 /etc/httpd /etc/httpd
Řádek 383: Řádek 430:
   * **''mkdir''** - //make directory//   * **''mkdir''** - //make directory//
     * Vytvorí zadaný adresár (rodičovský adresár musí existovať)     * Vytvorí zadaný adresár (rodičovský adresár musí existovať)
-    * Prepínač **''-p''**’ prípadne vytvorí aj všetky adresáre na zadanej ceste.  +    * Prepínač **''-p''** prípadne vytvorí aj všetky adresáre na zadanej ceste. 
-<code bash>+<code>
 $ mkdir novy_adresar $ mkdir novy_adresar
  
 $ mkdir novy_adresar/druhy/treti/posledny $ mkdir novy_adresar/druhy/treti/posledny
-mkdir: cannot create directory novy_adresar/druhy/treti/posledny: No such file or directory+mkdir: cannot create directory 'novy_adresar/druhy/treti/posledny': No such file or directory
  
 $ mkdir -p novy_adresar/druhy/treti/posledny $ mkdir -p novy_adresar/druhy/treti/posledny
-$ tree +$ tree
 . .
 └── novy_adresar └── novy_adresar
Řádek 400: Řádek 447:
  
   * **''rmdir''** - //remove directory//   * **''rmdir''** - //remove directory//
-    * Odstráni/zmaže zadaný adresár +    * Odstráni (zmažezadaný adresár 
-    * Zadaný adresár musí byť prázdny ((Prázdny adresár obsahuje iba špeciálne súbory .’ ..’))  +    * Zadaný adresár musí byť prázdny (Prázdny adresár obsahuje iba špeciálne súbory ''.'' ''..''
-<code bash>+<code>
 $ rmdir novy_adresar/ $ rmdir novy_adresar/
 rmdir: failed to remove 'novy_adresar/': Directory not empty rmdir: failed to remove 'novy_adresar/': Directory not empty
Řádek 415: Řádek 462:
  
   * **''touch''**   * **''touch''**
-    * Pomocou tohto príkazu sa dá vytvoriť nový (prázdny) súbor. ((Funkcionalita tohto príkazu nie je vyslovene vytváranie súborov, ale z jeho podstaty sa dá pre vytváranie použiť)+    * Pomocou tohto príkazu sa dá vytvoriť nový (prázdny) súbor. (Funkcionalita tohto príkazu nie je vyslovene vytváranie súborov, ale z jeho podstaty sa dá pre vytváranie použiť.
-<code bash+<code> 
-$ touch subor1 +$ touch subor1
 $ touch novy_adresar/subor2 novy_adresar/druhy/subor3 $ touch novy_adresar/subor2 novy_adresar/druhy/subor3
 $ tree $ tree
Řádek 432: Řádek 479:
     * Odstráni zadaný súbor     * Odstráni zadaný súbor
     * Užitočné prepínače:     * Užitočné prepínače:
-      * **''-r''**’ - //recursive// - pri špecifikovaní adresáru, odstráni aj všetky podadresáre (vrátane obsahu) +      * **''-r''** - //recursive// - pri špecifikovaní adresáru, odstráni aj všetky podadresáre (vrátane obsahu) 
-      * **''-f''**’ - //force// - ignoruje problémové argumenty a preskočí potvrdzovanie užívateľom +      * **''-f''** - //force// - ignoruje problémové argumenty a preskočí potvrdzovanie užívateľom 
-    * Kombinácia **''-rf''**’ je často užitočná, ale pozor na jej použitie!+    * Kombinácia **''-rf''** je často užitočná, ale pozor na jej použitie!
  
-<code bash>+<code>
 $ ls $ ls
 novy_adresar  subor1 novy_adresar  subor1
Řádek 454: Řádek 501:
   * **''echo''**   * **''echo''**
     * Zobrazí zadaný text na //štandardný výstup//     * Zobrazí zadaný text na //štandardný výstup//
-    * Výstup tohoto príkazu sa bežne posiela do súborov (viz//Presmerovanie// nižšie).  +    * Výstup tohoto príkazu sa bežne posiela do súborov (viz //Presmerovanie// nižšie). 
-<code bash>+<code>
 $ echo Hello world! $ echo Hello world!
 Hello world! Hello world!
Řádek 463: Řádek 510:
     * Vytvorí kópiu zadaného súboru na zadanom mieste (prípadne s novým názvom)     * Vytvorí kópiu zadaného súboru na zadanom mieste (prípadne s novým názvom)
     * Prepínač ‘**''-r''**’ (//recursive//) umožňuje kopírovať aj adresáre.     * Prepínač ‘**''-r''**’ (//recursive//) umožňuje kopírovať aj adresáre.
-    * //Pokročilé//: príkaz ‘//scp//’ sa používa pre kopírovanie súborov medzi viacerými počítačmi prostredníctvom siete.  +    * Pokročilé: príkaz ''scp'' sa používa pre kopírovanie súborov medzi viacerými počítačmi prostredníctvom siete.
  
   * **''mv''** - //move//   * **''mv''** - //move//
-    * Presunie daný objekt (súbor, adresár, iné..) na zadané miesto +    * Presunie daný objekt (súbor, adresár, iné) na zadané miesto 
-    * Tento príkaz sa tiež používa pre **''premenovanie''** objektov.+    * Tento príkaz sa tiež používa pre **premenovanie** objektov.
  
   * **''ln''** - //link//   * **''ln''** - //link//
-    * Vytvorí odkaz na daný objekt (adresár, súbor, iné..)+    * Vytvorí odkaz na daný objekt (adresár, súbor, iné)
     * Po zmazaní povodného objektu, tento odkaz stále existuje a je funkčný. Daný objekt je úplne zmazaný až keď naňho neukazuje žiadny odkaz (nemá žiadnu ďalšiu referenciu).     * Po zmazaní povodného objektu, tento odkaz stále existuje a je funkčný. Daný objekt je úplne zmazaný až keď naňho neukazuje žiadny odkaz (nemá žiadnu ďalšiu referenciu).
-    * Prepínač **''-s''**’ sa používa k vytvoreniu tzv. //slabých// odkazov (//soft-link//), ktoré nevytvárajú referencie na daný objekt+    * Prepínač **''-s''** sa používa k vytvoreniu tzv. //slabých// odkazov (//soft-link//), ktoré nevytvárajú referencie na daný objekt
  
  
Řádek 482: Řádek 529:
   * **''tee''**   * **''tee''**
     * Číta zo //štandardného vstupu// a zapisuje na //štandardný výstup// a do zadaných súborov     * Číta zo //štandardného vstupu// a zapisuje na //štandardný výstup// a do zadaných súborov
-    * //Pozn.//: Bežné použitie na konci //roury// pre distribúciu výstupu do viacerých súborov.+    * Pozn.: Bežné použitie na konci //roury// pre distribúciu výstupu do viacerých súborov.
  
   * **''wc''** - //word count//   * **''wc''** - //word count//
     * Spočíta a vypíše počet slov (medzier) v zadanom súbore.     * Spočíta a vypíše počet slov (medzier) v zadanom súbore.
-    * Prípadne počet riadkov s prepínačom **''-l''**.+    * Prípadne počet riadkov s prepínačom **''-l''**.
  
   * **''less / more''**   * **''less / more''**
Řádek 499: Řádek 546:
  
   * **''grep''**   * **''grep''**
-    * Vyhľadá zadaný text v súbore. +    * Vyhľadá zadaný text v súbore.
     * Tento príkaz je v základe jednoduchý, ale dá sa pomocou prepínačov alebo regulárnych výrazov použiť aj pre komplexnejšie úlohy.     * Tento príkaz je v základe jednoduchý, ale dá sa pomocou prepínačov alebo regulárnych výrazov použiť aj pre komplexnejšie úlohy.
-    * //Pozn.: O tomto príkaze viac v ďalšej kapitole.// +    * Pozn.: O tomto príkaze viac v ďalšej kapitole.
  
   * **''sort''**   * **''sort''**
     * Zotriedi vstupné data     * Zotriedi vstupné data
-    * Rôzne možnosti triedenia viz. “//man sort//”+    * Rôzne možnosti triedenia viz. ''man sort''
  
   * **''uniq''**   * **''uniq''**
     * Preskočí záznamy, ktoré sa za sebou opakujú     * Preskočí záznamy, ktoré sa za sebou opakujú
-    * Užitočný prepínač pre spočítanie rovnakých záznamov: **''-c''**+    * Užitočný prepínač pre spočítanie rovnakých záznamov: **''-c''**
  
 === "Divoké karty" ("Wildcards") === === "Divoké karty" ("Wildcards") ===
  
-Pri práci s príkazovou riadkou sa často stretneme s potrebou vykonať nejaký príkaz pre viacero rôznych súborov, ktoré však majú nejakú spoločnú vlastnosť (//napr.:// presunúť všetky súbory s príponou //.txt//).+Pri práci s príkazovou riadkou sa často stretneme s potrebou vykonať nejaký príkaz pre viacero rôznych súborov, ktoré však majú nejakú spoločnú vlastnosť (napr.: presunúť všetky súbory s príponou ''.txt'').
  
-Aby sme nemuseli takéto súbory zadávať po jednom, existujú pomocné skratky, tzv. //divoké karty// (//wildcards//)((AnalógiaRegulárne výrazy))+Abychom nemuseli takéto súbory zadávať po jednom, existujú pomocné skratky, tzv. //divoké karty// (//wildcards//) (analógiaregulárne výrazy).
  
-  * **''*''**’ - //asterisk// +  * **''*''** - //asterisk// 
-    * Symbol //hviezdička// sa po zavolaní príkazu rozbalí na **''všetky''** potenciálne zmysluplné možnosti+    * Symbol //hviezdička// sa po zavolaní príkazu rozbalí na **všetky** potenciálne zmysluplné možnosti
     * Príklad:     * Príklad:
-<code bash>+<code>
 $ mv /tmp/*.txt ~/ $ mv /tmp/*.txt ~/
-(Presunie všetky súbory s príponou .txt z adresáru /tmp do domovského adresára)+</code> 
 + 
 +Presunie všetky súbory s príponou ''.txt'' z adresáru ''/tmp'' do domovského adresára.
  
 +<code>
 $ rm /tmp/test* $ rm /tmp/test*
-(Odstráni z adresáru /tmp všetky súbory začínajúce retazcom "test")+</code> 
 + 
 +Odstráni z adresáru ''/tmp'' všetky súbory začínajúce retazcom ''test''.
  
 Na zamyslenie: Aký je rozdiel medzi nasledujúcimi príkazmi? Na zamyslenie: Aký je rozdiel medzi nasledujúcimi príkazmi?
 +
 +<code>
 $ rm -rf /tmp/* $ rm -rf /tmp/*
-$ rm -rf /tmp/ +$ rm -rf /tmp/
 </code> </code>
  
-  * **''?''**’ - //any single character//  +  * **''?''** - //any single character// 
-    * Tento symbol zastupuje **''akýkoľvek jeden''** symbol+    * Tento symbol zastupuje **akýkoľvek jeden** symbol
  
-  * **''{x..y}''**’ +  * **''{x..y}''**
     * Tento zložený symbol sa rozvinie na postupnosť zadaného rozsahu     * Tento zložený symbol sa rozvinie na postupnosť zadaného rozsahu
-    * Ako //X// a //Y// sa dá zadať rozsah čísel alebo písmen.  +    * Ako //X// a //Y// sa dá zadať rozsah čísel alebo písmen
     * Príklad:     * Príklad:
-<code bash>+<code>
 $ mkdir adresar{A..N} $ mkdir adresar{A..N}
 $ ls $ ls
 adresarA  adresarC  adresarE  adresarG  adresarI  adresarK  adresarM adresarA  adresarC  adresarE  adresarG  adresarI  adresarK  adresarM
 adresarB  adresarD  adresarF  adresarH  adresarJ  adresarL  adresarN adresarB  adresarD  adresarF  adresarH  adresarJ  adresarL  adresarN
 +</code>
  
 Na zamyslenie: Čo spraví nasledujúci príkaz? Na zamyslenie: Čo spraví nasledujúci príkaz?
 +
 +<code>
 $ touch subor{1..9}{1..9} $ touch subor{1..9}{1..9}
 </code> </code>
Řádek 552: Řádek 609:
  
 Pre presmerovanie vstupu / výstupu sa používajú nasledovné znaky: Pre presmerovanie vstupu / výstupu sa používajú nasledovné znaky:
-  * **''<''**’ - presmerovanie vstupu (default: //štandardný vstup//) +  * **''<''** - presmerovanie vstupu (default: //štandardný vstup//) 
-  * **''>''**’ - presmerovanie vystupu (default: //štandardný výstup//+  * **''>''** - presmerovanie vystupu (default: //štandardný výstup//
-  * **''<nowiki>>></nowiki>''**’ - pripájanie na koniec súboru +  * **''<nowiki>>></nowiki>''** - pripájanie na koniec súboru 
-  * **''2>''**’ - presmerovanie chybového výstupu (default: //štandardný chybový výstup//)+  * **''2>''** - presmerovanie chybového výstupu (default: //štandardný chybový výstup//)
  
 Štandardné vstupy / výstupy sú tiež označené číslami nasledovne: Štandardné vstupy / výstupy sú tiež označené číslami nasledovne:
   * **stdin** - //štandardný vstup// - číslo **0**,   * **stdin** - //štandardný vstup// - číslo **0**,
   * **stdout** - //štandardný výstup// - číslo **1**,   * **stdout** - //štandardný výstup// - číslo **1**,
-  * **stderr** - //štandardný chybový výstup// - číslo **2**.((Na zamyslenie: Všimnite si, že presmerovanie chybového výstupu sa zapisuje ''2>''))+  * **stderr** - //štandardný chybový výstup// - číslo **2**. (Na zamyslenie: Všimnite si, že presmerovanie chybového výstupu sa zapisuje ''2>'')
  
 Taktiež existuje špeciálny súbor **''/dev/null''**, ktorý funguje ako “//čierna diera//”, resp. “//nič//” (prípadne tzv. “//void//”). Všetko, čo je do tohoto súboru zapísané, je zahodené. Napríklad je často užitočné do tohto súboru presmerovať //chybový výstup//, keď nás chybové hlásenia nezaujímajú: Taktiež existuje špeciálny súbor **''/dev/null''**, ktorý funguje ako “//čierna diera//”, resp. “//nič//” (prípadne tzv. “//void//”). Všetko, čo je do tohoto súboru zapísané, je zahodené. Napríklad je často užitočné do tohto súboru presmerovať //chybový výstup//, keď nás chybové hlásenia nezaujímajú:
  
-<code bash+<code> 
- príkaz  2>  /dev/null+príkaz 2> /dev/null
 </code> </code>
  
 Presmerovanie sa používa cielene so **súbormi**. Presmerovanie sa používa cielene so **súbormi**.
- +
 Pre predávanie výstupu ďalším príkazom sa používajú “//roury//” (//pipe//). Pre predávanie výstupu ďalším príkazom sa používajú “//roury//” (//pipe//).
  
 === Roury (pipe) === === Roury (pipe) ===
  
-Rúry sa používajú pre **zreťazenie viacerých príkazov do jedného**, prostredníctvom prepájania ich výstupov so vstupmi. Zapisuje sa znakom **''|''**.+Rúry sa používajú pre **zreťazenie viacerých príkazov do jedného**, prostredníctvom prepájania ich výstupov so vstupmi. Zapisuje sa znakom **''|''**.
  
-<code bash>+<code>
 Syntax: "príkaz1 | príkaz2" Syntax: "príkaz1 | príkaz2"
 Prepojí výstup príkazu-1 na vstup príkazu-2. Prepojí výstup príkazu-1 na vstup príkazu-2.
 </code> </code>
  
-Prikazy sa daju sekvenčne zapojit aj viac krát v //jednom//” príkaze.+Prikazy sa daju sekvenčne zapojit aj viac krát v //jednom// príkaze.
  
-<code bash>+<code>
 $ ls /usr/bin | grep yum $ ls /usr/bin | grep yum
 yum yum
Řádek 595: Řádek 652:
 </code> </code>
  
-(Nasledujúci súbor ''numbers.txt'' obsahuje nahodné čísla 0-10.)+Nasledujúci súbor ''numbers.txt'' obsahuje nahodné čísla 0-10.
  
-<code bash>+<code>
 $ cat numbers.txt | sort | uniq -c $ cat numbers.txt | sort | uniq -c
       2 0       2 0
Řádek 609: Řádek 666:
       4 8       4 8
       3 9       3 9
- 
-(Tento príkaz spočítal výskyt každého čisla v súbore ''numbers.txt'') 
 </code> </code>
 +
 +Tento príkaz spočítal výskyt každého čisla v súbore ''numbers.txt''.
  
  
 ===== Práce s textem, vstupem a výstupem ===== ===== Práce s textem, vstupem a výstupem =====
  
-V príkazovej riadke je bežný prípad, že potrebujete spracovať výstup nejakého príkazu. Taký klasický príklad je: máte súbor a hľadáte v ňom kľúčové slovo. Alebo máte adresára hľadáte kľúčové slovo v ktoromkoľvek súbore ktorý sa nachádza v spomínanom adresáre.+V príkazovej riadke je bežný prípad, že potrebujete spracovať výstup nejakého príkazu. Taký klasický príklad je: máte súbor a hľadáte v ňom kľúčové slovo. Alebo máte adresár a hľadáte kľúčové slovo v ktoromkoľvek súborektorý sa nachádza v spomínanom adresáre.
  
 Na hľadanie kľúčových slov je najpoužívanejší príkaz ''grep''. Teraz vás poprosím si pozrieť manuálovú stránku tohto príkazu ako aj nápovedu. (**Úloha**: ako to spraviť?) Na hľadanie kľúčových slov je najpoužívanejší príkaz ''grep''. Teraz vás poprosím si pozrieť manuálovú stránku tohto príkazu ako aj nápovedu. (**Úloha**: ako to spraviť?)
Řádek 624: Řádek 681:
 Naša úloha bude, že sa snažíme nájsť reťazec ''PATH'' v súbore ''/etc/bashrc''. Naša úloha bude, že sa snažíme nájsť reťazec ''PATH'' v súbore ''/etc/bashrc''.
  
-<code  bash+<code> 
-$ grep PATH /etc/bashrc                                                                                                                                        +$ grep PATH /etc/bashrc
         case ":${PATH}:" in         case ":${PATH}:" in
                     PATH=$PATH:$1                     PATH=$PATH:$1
Řádek 633: Řádek 690:
 Reťazec sme našli. Mohli by sme dostať aj čísla riadkov? Reťazec sme našli. Mohli by sme dostať aj čísla riadkov?
  
-<code bash>$ grep -n PATH /etc/bashrc                                                                                                                                     +<code>$ grep -n PATH /etc/bashrc
 58:        case ":${PATH}:" in 58:        case ":${PATH}:" in
 63:                    PATH=$PATH:$1 63:                    PATH=$PATH:$1
 65:                    PATH=$1:$PATH</code> 65:                    PATH=$1:$PATH</code>
  
-Kde všade môžeme ešte kľúčové slovo PATH nájsť v ''/etc/''?+Kde všade môžeme ešte kľúčové slovo ''PATH'' nájsť v ''/etc/''?
  
-<code bash+<code> 
-$ grep -R PATH /etc/                                                               +$ grep -R PATH /etc/
 grep: /etc/pki/tls/certs/ca.crt: Permission denied grep: /etc/pki/tls/certs/ca.crt: Permission denied
 grep: /etc/pki/rsyslog: Permission denied grep: /etc/pki/rsyslog: Permission denied
Řádek 649: Řádek 706:
 grep: /etc/ssh/ssh_host_ed25519_key: Permission denied grep: /etc/ssh/ssh_host_ed25519_key: Permission denied
 grep: /etc/ssh/sshd_config.rpmnew: Permission denied grep: /etc/ssh/sshd_config.rpmnew: Permission denied
-/etc/bashrc:        case ":${PATH}:" in                                                         +/etc/bashrc:        case ":${PATH}:" in 
-/etc/bashrc:                    PATH=$PATH:$1                                                                               +/etc/bashrc:                    PATH=$PATH:$1 
-/etc/bashrc:                    PATH=$1:$PATH                                                              +/etc/bashrc:                    PATH=$1:$PATH 
-Binary file /etc/udev/hwdb.bin matches                                                                                                                                       +Binary file /etc/udev/hwdb.bin matches 
-/etc/csh.login: switch (":${PATH}:"    +/etc/csh.login: switch (":${PATH}:")
  
 </code> </code>
  
-Spomínate si ešte na presmerovanie? Poďme si presmerovať štandardný chybový výstup z predchádzajúceho príkazu do súboru s názvom chyby. **Úloha:** ako na to?+{{:skoleni:org.gnome.todo.png?48}}Spomínate si ešte na presmerovanie? Poďme si presmerovať štandardný chybový výstup z predchádzajúceho príkazu do súboru s názvom chyby. **Úloha:** ako na to?
  
 **Úloha**: presmerujte teraz obsah štandardného výstupu do súboru. **Úloha**: presmerujte teraz obsah štandardného výstupu do súboru.
Řádek 663: Řádek 720:
 ==== Premenné prostredia ==== ==== Premenné prostredia ====
  
-Každý linuxový proces ma množinu premenných prostredia ktoré sú mu dostupne. Veľmi ľahko si ich môžeme všetky vypísať pomocou príkazu ''env''. Rovnako môžete tieto premenné ľahko zadefinovať sami a využívať ich v príkazovej riadke pomocou konštruktu ''$MENO_PREMENNEJ''. Teraz si vypíšeme obsah premennej prostredia ''PATH'':+Každý linuxový proces ma množinu premenných prostrediaktoré sú mu dostupne. Veľmi ľahko si ich môžeme všetky vypísať pomocou príkazu ''env''. Rovnako môžete tieto premenné ľahko zadefinovať sami a využívať ich v príkazovej riadke pomocou konštruktu ''$MENO_PREMENNEJ''. Teraz si vypíšeme obsah premennej prostredia ''PATH'':
  
-<code bash>$ echo $PATH</code>+<code>$ echo $PATH</code>
  
 Ľahko si môžeme zadefinovať vlastnú premennú a pouziť ju: Ľahko si môžeme zadefinovať vlastnú premennú a pouziť ju:
  
-<code bash>$ export TAJNY_SUBOR=/etc/bashrc</code>+<code>$ export TAJNY_SUBOR=/etc/bashrc</code>
  
 a následne v tomto tajnom súbore niečo nájsť: a následne v tomto tajnom súbore niečo nájsť:
  
-<code bash>$ grep PATH $TAJNY_SUBOR</code>+<code>$ grep PATH $TAJNY_SUBOR</code>
  
  
Řádek 682: Řádek 739:
 <code>$ vim nas-prvy-skript.sh</code> <code>$ vim nas-prvy-skript.sh</code>
  
-<code>export TAJNY_SUBOR=/etc/bashrc +<code bash>export TAJNY_SUBOR=/etc/bashrc 
-grep PATH $TAJNY_SUBOR</code>+grep PATH $TAJNY_SUBOR</code>
  
 a následne vykonať: a následne vykonať:
Řádek 689: Řádek 746:
 <code>$ bash nas-prvy-skript.sh</code> <code>$ bash nas-prvy-skript.sh</code>
  
-Náročná úloha: napíšte do príkazovej riadky ''cat'' a následne ''skúška'' a potvrdte enterom. Dokážete popísať, co sa práve deje?+{{:skoleni:org.gnome.todo.png?48|}}**Náročná úloha:** napíšte do príkazovej riadky ''cat'' a následne ''skúška'' a potvrdte enterom. Dokážete popísať, co sa práve deje?
  
  
Řádek 697: Řádek 754:
  
  
-== Prvé spustenie ==+==== Prvé spustenie ====
  
 Textový editor sa spúšťa pomocou príkazu ''vi''. Ako [[link na vysvetlenie argumentu|argument]] je mu predaný názov súboru, ktorý sa chystáme upravovať. Textový editor sa spúšťa pomocou príkazu ''vi''. Ako [[link na vysvetlenie argumentu|argument]] je mu predaný názov súboru, ktorý sa chystáme upravovať.
Řádek 705: Řádek 762:
 Po spustení sa príkazový riadok nahradí náhľadom obsahu súboru. Vlnovky označujú prázdne riadky na konci súboru. Vľavo dolu sa zobrazí názov súboru, počet jeho riadkov a znakov alebo informácia o tom, že sa vytvoril nový súbor. Na tomto mieste sa budú zobrazovať aj informácie o iných vykonaných zmenách. V pravo dole je percentuálna alebo slovná reprezentácia pozície v dokumente. Po spustení sa príkazový riadok nahradí náhľadom obsahu súboru. Vlnovky označujú prázdne riadky na konci súboru. Vľavo dolu sa zobrazí názov súboru, počet jeho riadkov a znakov alebo informácia o tom, že sa vytvoril nový súbor. Na tomto mieste sa budú zobrazovať aj informácie o iných vykonaných zmenách. V pravo dole je percentuálna alebo slovná reprezentácia pozície v dokumente.
  
-== Módy editora ==+==== Módy editora ====
  
 Editor vi má tri používané módy - základný, insert a vizuálny. V **základnom** móde je konzola pripravená prijímať nové príkazy v podobe jednotlivých kláves alebo slovné príkazy v podobe reťazcov začínajúcich dvojbodkou. Každá klávesa môže mať svoj špecifický význam. Napríklad stlačením klávesy **''x''** sa odstráni písmeno na pozícii kurzora alebo stlačením **''u''** sa vrátime o krok späť (podobne ako <ctrl>+z v iných editoroch). Editor vi má tri používané módy - základný, insert a vizuálny. V **základnom** móde je konzola pripravená prijímať nové príkazy v podobe jednotlivých kláves alebo slovné príkazy v podobe reťazcov začínajúcich dvojbodkou. Každá klávesa môže mať svoj špecifický význam. Napríklad stlačením klávesy **''x''** sa odstráni písmeno na pozícii kurzora alebo stlačením **''u''** sa vrátime o krok späť (podobne ako <ctrl>+z v iných editoroch).
Řádek 713: Řádek 770:
 Tretí z používaných módov je **vizuálny** a spúšťa sa pomocou klávesy **''v''**. Tu je možné označiť časť textu a previezť na nej nejaký príkaz, napríklad skopírovanie do schránky. Návrat do základného módu opäť vykonáme pomocou **''<Esc>''**. Tretí z používaných módov je **vizuálny** a spúšťa sa pomocou klávesy **''v''**. Tu je možné označiť časť textu a previezť na nej nejaký príkaz, napríklad skopírovanie do schránky. Návrat do základného módu opäť vykonáme pomocou **''<Esc>''**.
  
-== Navigácia v súbore v základnom móde ==+==== Navigácia v súbore v základnom móde ====
  
-Napravo vidíme aktuálnu pozíciu kurzoru vo formáte riadok,(bajt-)stĺpec **''0,0-1''**. Túto pozíciu a teda kurzor, je možné meniť pomocou šípok alebo kláves **''h''**, **''j''**, **''k''**a **''l''**. Okrem toho existuje množstvo skratiek na zjednodušenie orientácie vo veľkých súboroch, napríklad:+Napravo vidíme aktuálnu pozíciu kurzoru vo formáte riadok,(bajt-)stĺpec **''0,0-1''**. Túto pozíciu a teda kurzor, je možné meniť pomocou šípok alebo kláves **''h''**, **''j''**, **''k''** a **''l''**. Okrem toho existuje množstvo skratiek na zjednodušenie orientácie vo veľkých súboroch, napríklad:
  
   * Presun kurzora na začiatok súboru - **''G''**   * Presun kurzora na začiatok súboru - **''G''**
Řádek 722: Řádek 779:
  
  
-== Príkazy začínajúce dvojbodkou ==+==== Príkazy začínajúce dvojbodkou ====
  
 Editor vi umožňuje vykonávanie zložitejších výkonov pomocou krátkych interpretácií príkazov. Toto je užitočné napríklad keď je potrebné: Editor vi umožňuje vykonávanie zložitejších výkonov pomocou krátkych interpretácií príkazov. Toto je užitočné napríklad keď je potrebné:
Řádek 731: Řádek 788:
   * a mnoho iných.   * a mnoho iných.
  
-== Návrat k príkazovému riadku (ukončenie vi) ==+==== Návrat k príkazovému riadku (ukončenie vi) ====
  
 A teraz to najdôležitejšie! Ako to všetko uložiť a vrátiť sa k príkazovému riadku. Na to nám slúžia príkazy začínajúce dvojbodkou v základnom móde: A teraz to najdôležitejšie! Ako to všetko uložiť a vrátiť sa k príkazovému riadku. Na to nám slúžia príkazy začínajúce dvojbodkou v základnom móde:
  
-  * uloženie a návrat do CLI- **'':wq''**+  * uloženie a návrat do CLI - **'':wq''**
   * návrat do CLI bez uloženia - **'':q!''**   * návrat do CLI bez uloženia - **'':q!''**
  
-== Ako sa stať kúzelníkom pri editovaní ==+==== Ako sa stať kúzelníkom pri editovaní ==== 
 + 
 +Obsah toho krátkeho tréningu bol len základ. Editor vi a jeho vylepšený brat **vim** poskytuje mnoho nástrojov a rozšírení, ktorých osvojením si človek ľahko zrýchli a spríjemní svoje pracovné úkony. Balíček //vim-enhanced//, ktorý by mal byť súčasťou väčšiny linuxových distribúcií, obsahuje mimo iného aj tutoriál v češtine (na dlhé zimné večery). Spúšťa sa na príkazovom riadku príkazom ''vimtutor''. Na základné, nevyhnutné použitie ale stačí pamätať si postupnosť **''i''**, <zmeny>, <Esc> a **'':wq''**. 
 + 
 +===== Dotazy a diskuse =====
  
-Obsah toho krátkeho tréningu bol len základ. Editor vi jeho vylepšený brat **vim** poskytuje mnoho nástrojov a rozšírení, ktorých osvojením si človek ľahko zrýchli a spríjemní svoje pracovné úkonyBalíček vim-enhanced, ktorý by mal byť súčasťou väčšiny linuxových distribúcií obsahuje mimo iného aj tutoriál v češtine (na dlhé zimné večery)Spúšťa sa na príkazovom riadku príkazom **''vimtutor''**Na základné, nevyhnutné použitie ale stačí pamätať si postupnosť **''i, <zmeny>, <Esc> a :wq''**.+Pokládat dotazy diskutovat o tomto školení můžete v [[https://forum.mojefedora.cz/t/skoleni-zaklady-prikazove-radky/7717| diskusním vlákně]] na forum.mojefedora.cz.
  
  • Poslední úprava: 2022/11/14 11:12
  • (upraveno mimo DokuWiki)