Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
skoleni:zaklady_prikazove_radky [2018/05/30 12:59] – tomastomecek | skoleni: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 ====== | + | {{: |
- | ===== Úvod do příkazové řádky ===== | + | ===== Filozofie UNIXu ===== |
+ | |||
+ | [[https:// | ||
+ | |||
+ | > 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. " | ||
+ | |||
+ | ===== Seznámení se základními pojmy ===== | ||
+ | |||
+ | ==== Co je to " | ||
+ | |||
+ | 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. | ||
+ | |||
+ | My se budeme věnovat příkazové řádce tak, jak se chová a vypadá v aplikaci **Terminál** na Linuxu. | ||
+ | |||
+ | 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 " | ||
+ | |||
+ | I když programy v počítači někdy fungují samy od sebe, velice často s vámi (uživatelem) komunikují. | ||
+ | |||
+ | Nejčastějšími pojmy (anglické pojmy se zkratkami v závorkách) jsou: | ||
+ | * **Aplikační programové rozhraní (API - Application Programming Interface): | ||
+ | * **Uživatelské rozhraní (UI - User Interface): | ||
+ | * **Grafické UI (GUI - Graphical UI):** Uživatelské rozhraní využívající grafické znázornění jako okna, dialogy, tlačítka apod. | ||
+ | * **Textové UI (TUI - Text UI):** Uživatelské rozhraní skládající se z textových prvků; také může mít dialogy, tlačítka atd. | ||
+ | * **Rozhraní | ||
+ | |||
+ | Příkazová řádka je tedy něco, kam můžeme psát příkazy a kde spouštět programy. Prostředí, | ||
+ | |||
+ | ==== Výhody | ||
+ | |||
+ | To, že se některý program ovládá z příkazové řádky, neznamená, že je hned složitější, | ||
+ | |||
+ | Hlavní výhody příkazové řádky jsou (tedy hlavně oproti GUI): | ||
+ | * **Přehlednost**: | ||
+ | * **Jednoduchost**: | ||
+ | * **Rychlost**: | ||
+ | * **Přenositelnost**: | ||
+ | |||
+ | ==== Příkazová řádka je také program ==== | ||
+ | |||
+ | Příkazová řádka, kterou používáte, | ||
+ | |||
+ | Pro zopakování pojmů: | ||
+ | * **Terminál**: | ||
+ | * **Shell (v našem případě konkrétně bash):** textový program, který pomocí CLI poskytuje uživateli příkazovou řádku. | ||
+ | |||
+ | 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 shell) umí spoustu užitečných zkratek, viz nápověda. | ||
+ | |||
+ | ==== Umístění programů v systému ==== | ||
+ | |||
+ | Pokud napíšeme příkaz do příkazové řádky a chceme jej spustit, tak se děje několik věcí. | ||
+ | |||
+ | Proměnná '' | ||
+ | |||
+ | ==== 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 se, pokud váš vypadá jinak): | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ █ | ||
+ | </ | ||
+ | |||
+ | Tomu se říká //prompt// (z angličtiny // | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | |||
+ | <code text> | ||
+ | |---------- prompt ---------| | ||
+ | uživatel | ||
+ | | | | ||
+ | V V | ||
+ | [liveuser@localhost-live ~]$ echo -n ' | ||
+ | Ahoj | ||
+ | |---------+----------| | ||
+ | | | | přepínač | ||
+ | | | název příkazu | ||
+ | | ||
+ | </ | ||
+ | |||
+ | * **Tabulátor: | ||
+ | * **Ctrl-C:** přerušuje běžící program, popř. resetuje zadávání příkazu | ||
+ | * **Uvozovky: | ||
+ | * **Středník: | ||
+ | |||
+ | ==== 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í. | ||
+ | |||
+ | * **Manuál: | ||
+ | * **'' | ||
+ | * **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í '' | ||
+ | |||
+ | Zkuste si zjistit informace o různých příkazech za pomoci různých metod. | ||
+ | |||
+ | ===== 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. | ||
+ | |||
+ | Nejprve vyzkoušíme příkaz '' | ||
+ | |||
+ | < | ||
+ | $ echo Ahoj | ||
+ | </ | ||
+ | |||
+ | Po zmáčknutí klávesy '' | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ echo Ahoj | ||
+ | Ahoj | ||
+ | [liveuser@localhost-live ~]$ █ | ||
+ | </ | ||
+ | |||
+ | Příkaz '' | ||
+ | |||
+ | Co když výstup příkazu neskočí na další řádek? To si můžeme vyzkoušet. Takto by to mohlo vypadat před a po: | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ echo -n Ahoj | ||
+ | Ahoj[liveuser@localhost-live ~]$ █ | ||
+ | </ | ||
+ | |||
+ | Rozdíl tohoto příkazu oproti předchozímu je přidání '' | ||
+ | |||
+ | ==== Procházení historie příkazů ==== | ||
+ | |||
+ | Zmáčkneme šipku nahoru, a tím se nám budou zobrazovat předešlé příkazy. | ||
+ | |||
+ | 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é. | ||
+ | |||
+ | 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. | ||
+ | |||
+ | Pro hledání dalšího výskytu stejného podřetězce stačí opakovat zkratku '' | ||
+ | |||
+ | ==== Editace příkazové řádky ==== | ||
+ | |||
+ | Řádka se dá editovat podobně jako v textovém editoru, tedy posouvat se šipkami doleva a doprava nebo pomocí kláves '' | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ echo Ahoj -n | ||
+ | Ahoj -n | ||
+ | [liveuser@localhost-live ~]$ █ | ||
+ | </ | ||
+ | |||
+ | Jak je vidět, tak příkaz '' | ||
+ | |||
+ | ==== Doplňování názvů příkazů ==== | ||
+ | |||
+ | Místo toho, abychom psali '' | ||
+ | |||
+ | Zmáčkněte '' | ||
+ | |||
+ | Mačkáním mezerníku posouváme o stránky, dokud se nevypíší všechny. | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ echo^C | ||
+ | [liveuser@localhost-live ~]$ e^C | ||
+ | [liveuser@localhost-live ~]$ echo Ahoj vsichni kolem | ||
+ | Ahoj vsichni kolem | ||
+ | [liveuser@localhost-live ~]$ █ | ||
+ | </ | ||
+ | |||
+ | Tam, kde je vidět '' | ||
+ | |||
+ | ==== Kopírování a vkládání přes schránku ==== | ||
+ | |||
+ | 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 dělat to, na co můžete být normálně zvyklí. | ||
+ | |||
+ | ==== Zadávání parametrů ==== | ||
+ | |||
+ | Šipkou nahoru načteme předchozí příkaz a pomocí Ctrl-< | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ echo Ahoj | ||
+ | Ahoj vsichni kolem | ||
+ | [liveuser@localhost-live ~]$ █ | ||
+ | </ | ||
+ | |||
+ | Výstup vypadá tak, jak vypadá, protože příkaz '' | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ echo " | ||
+ | Ahoj | ||
+ | [liveuser@localhost-live ~]$ █ | ||
+ | </ | ||
+ | |||
+ | Uvozovky vytváří řetězec, který se dál nerozděluje. | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ echo ' | ||
+ | Ahoj | ||
+ | [liveuser@localhost-live ~]$ █ | ||
+ | </ | ||
+ | |||
+ | Pokud u posledních příkazů zapomenete jednu uvozovku, tak to bude vypadat po zmáčknutí klávesy '' | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ echo ' | ||
+ | > █ | ||
+ | </ | ||
+ | |||
+ | Samozřejmě se z toho dá vyskočit pomocí '' | ||
+ | |||
+ | ==== Řetězení příkazů ==== | ||
+ | |||
+ | Dalším speciálním znakem je středník. | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ echo | ||
+ | |||
+ | [liveuser@localhost-live ~]$ echo Ahoj | ||
+ | Ahoj | ||
+ | [liveuser@localhost-live ~]$ █ | ||
+ | </ | ||
+ | |||
+ | Pokud je ale dám na jeden řádek a oddělím středníkem, | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ echo; echo Ahoj | ||
+ | |||
+ | Ahoj | ||
+ | [liveuser@localhost-live ~]$ █ | ||
+ | </ | ||
+ | |||
+ | Úkol: | ||
+ | Co by byl výstup následujících příkazů? | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | ==== Zobrazení obsahu souboru ==== | ||
+ | |||
+ | Spustíme program '' | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ cat / | ||
+ | localhost-live | ||
+ | [liveuser@localhost-live ~]$ █ | ||
+ | </ | ||
+ | |||
+ | Příkaz vypíše obsah souboru, který mu zadáme, v našem případě soubor ''/ | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ cat | ||
+ | asdf | ||
+ | asdf | ||
+ | |||
+ | |||
+ | neco | ||
+ | neco | ||
+ | </ | ||
+ | |||
+ | Já jako uživatel jsem v tomto případě napsal tři řádky, na prvním bylo '' | ||
+ | |||
+ | ==== Ukončení zadávání vstupu ==== | ||
+ | |||
+ | Náš shell (v našem případě '' | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ bash | ||
+ | [liveuser@localhost-live ~]$ █ | ||
+ | </ | ||
+ | |||
+ | Vypadá to jakoby se nic nestalo, ale pravdou je, že nyní běží dva programy '' | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ bash | ||
+ | [liveuser@localhost-live ~]$ bash | ||
+ | [liveuser@localhost-live ~]$ █ | ||
+ | </ | ||
+ | |||
+ | Teď nám běží tři naráz. | ||
+ | |||
+ | < | ||
+ | echo $SHLVL | ||
+ | </ | ||
+ | |||
+ | 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 4 (v prvním shellu běží desktopové prostředí, | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ exit | ||
+ | [liveuser@localhost-live ~]$ echo $SHLVL | ||
+ | 3 | ||
+ | [liveuser@localhost-live ~]$ █ | ||
+ | </ | ||
+ | |||
+ | Zmáčkneme '' | ||
+ | |||
+ | Stejně jako '' | ||
+ | |||
+ | ==== Získání administrátorských práv ==== | ||
+ | |||
+ | V Linuxu existuje administrátorský účet (**root**, superuser), který má plné oprávnění. | ||
+ | |||
+ | 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, | ||
+ | |||
+ | Jak tedy nejjednodušeji zjistit, jestli se příkaz pustil za superuživatele? | ||
+ | |||
+ | <code text> | ||
+ | [liveuser@localhost-live ~]$ sudo bash | ||
+ | [root@localhost-live liveuser]# █ | ||
+ | </ | ||
+ | |||
+ | Změnilo se nám pár věcí v promptu. | ||
+ | |||
+ | **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. | ||
+ | |||
+ | ===== Přehled klávesových zkratek a funkčních znaků ===== | ||
+ | |||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **šipka nahoru**: posun v historii příkazů o jeden zpět | ||
+ | * **šipka dolu**: posun v historii příkazů o jeden dopředu | ||
+ | * **Tabulátor**: | ||
+ | * **Uvozovky**: | ||
+ | * **Středník**: | ||
+ | |||
+ | |||
+ | ===== Práce se soubory a adresáři ===== | ||
+ | |||
+ | ==== Systém súborov (file system) ==== | ||
+ | |||
+ | Systém súborov v Linuxe je organizovaný v **jednej stromovej** štruktúre. | ||
+ | |||
+ | **Koreň** tohoto systému (//file system root//) sa označuje ‘**''/'' | ||
+ | |||
+ | Prvá úroveň systému súborov je bežne rozdelená na nasledujúce adresáre: | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | * **''/ | ||
+ | |||
+ | Pozn.: Toto rozdelenie **nie je** striktné, avšak vačšina bežných aplikácií ho dodržuje (vínimka: ''/ | ||
+ | |||
+ | ==== Prehľad základných príkazov ==== | ||
+ | |||
+ | === Navigácia === | ||
+ | |||
+ | * **'' | ||
+ | * Zobrazí absolútnu cestu k aktuálnemu adresáru | ||
+ | < | ||
+ | $ pwd | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | * **'' | ||
+ | * Vypíše obsah aktuálneho adresára | ||
+ | * Užitočné prepínače: | ||
+ | * **'' | ||
+ | * **'' | ||
+ | < | ||
+ | $ ls | ||
+ | Documents | ||
+ | </ | ||
+ | |||
+ | * **'' | ||
+ | * Zmení aktuálny adresár na zadaný (“// | ||
+ | * Dá sa používať zadaním absolútnej aj relatívnej cesty | ||
+ | * Bez argumentov zmení adresár na // | ||
+ | * Existuje niekoľko symbolových skratiek, pomocou ktorých sa dá cieľová cesta konštruovať | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * Špeciálny symbol **'' | ||
+ | < | ||
+ | $ pwd | ||
+ | / | ||
+ | |||
+ | $ cd ../ | ||
+ | $ pwd | ||
+ | / | ||
+ | |||
+ | $ cd - | ||
+ | $ pwd | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | * **'' | ||
+ | * Vypíše (stromovo) štruktúru súborového systému od zadaného adresáru | ||
+ | < | ||
+ | $ tree ~ | ||
+ | (Zobrazí stromovú struktúru domovského adresára -> Vyskúšajte sami.) | ||
+ | </ | ||
+ | |||
+ | * **'' | ||
+ | * 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. | ||
+ | * Viac informácií: | ||
+ | < | ||
+ | $ find /etc -name httpd | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | |||
+ | === Modifikácia === | ||
+ | |||
+ | * **'' | ||
+ | * Vytvorí zadaný adresár (rodičovský adresár musí existovať) | ||
+ | * Prepínač **'' | ||
+ | < | ||
+ | $ mkdir novy_adresar | ||
+ | |||
+ | $ mkdir novy_adresar/ | ||
+ | mkdir: cannot create directory ' | ||
+ | |||
+ | $ mkdir -p novy_adresar/ | ||
+ | $ tree | ||
+ | . | ||
+ | └── novy_adresar | ||
+ | └── druhy | ||
+ | └── treti | ||
+ | └── posledny | ||
+ | </ | ||
+ | |||
+ | * **'' | ||
+ | * Odstráni (zmaže) zadaný adresár | ||
+ | * Zadaný adresár musí byť prázdny (Prázdny adresár obsahuje iba špeciálne súbory '' | ||
+ | < | ||
+ | $ rmdir novy_adresar/ | ||
+ | rmdir: failed to remove ' | ||
+ | |||
+ | $ rmdir novy_adresar/ | ||
+ | $ tree | ||
+ | . | ||
+ | └── novy_adresar | ||
+ | └── druhy | ||
+ | └── treti | ||
+ | </ | ||
+ | |||
+ | * **'' | ||
+ | * 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ť.) | ||
+ | < | ||
+ | $ touch subor1 | ||
+ | $ touch novy_adresar/ | ||
+ | $ tree | ||
+ | . | ||
+ | ├── novy_adresar | ||
+ | │ | ||
+ | │ | ||
+ | │ | ||
+ | │ | ||
+ | └── subor1 | ||
+ | </ | ||
+ | |||
+ | * **'' | ||
+ | * Odstráni zadaný súbor | ||
+ | * Užitočné prepínače: | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * Kombinácia **'' | ||
+ | |||
+ | < | ||
+ | $ ls | ||
+ | novy_adresar | ||
+ | |||
+ | $ rm subor1 | ||
+ | $ ls | ||
+ | novy_adresar | ||
+ | |||
+ | $ rm -r novy_adresar/ | ||
+ | $ tree | ||
+ | . | ||
+ | └── novy_adresar | ||
+ | └── subor2 | ||
+ | </ | ||
+ | |||
+ | |||
+ | * **'' | ||
+ | * Zobrazí zadaný text na // | ||
+ | * Výstup tohoto príkazu sa bežne posiela do súborov (viz // | ||
+ | < | ||
+ | $ echo Hello world! | ||
+ | Hello world! | ||
+ | </ | ||
+ | |||
+ | * **'' | ||
+ | * Vytvorí kópiu zadaného súboru na zadanom mieste (prípadne s novým názvom) | ||
+ | * Prepínač ‘**'' | ||
+ | * Pokročilé: | ||
+ | |||
+ | * **'' | ||
+ | * Presunie daný objekt (súbor, adresár, iné) na zadané miesto | ||
+ | * Tento príkaz sa tiež používa pre **premenovanie** objektov. | ||
+ | |||
+ | * **'' | ||
+ | * 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). | ||
+ | * Prepínač **'' | ||
+ | |||
+ | |||
+ | === Čítanie === | ||
+ | |||
+ | * **'' | ||
+ | * Vypíše obsah súboru na // | ||
+ | |||
+ | * **'' | ||
+ | * Číta zo // | ||
+ | * Pozn.: Bežné použitie na konci //roury// pre distribúciu výstupu do viacerých súborov. | ||
+ | |||
+ | * **'' | ||
+ | * Spočíta a vypíše počet slov (medzier) v zadanom súbore. | ||
+ | * Prípadne počet riadkov s prepínačom **'' | ||
+ | |||
+ | * **'' | ||
+ | * Tieto príkazy otvoria súbor pre čítanie (nie modifikáciu) | ||
+ | * Navzájom fungujú trochu rozdielne a záleží na preferenciách užívateľa | ||
+ | |||
+ | * **'' | ||
+ | * Vypíše začiatok súboru (bez prepínačov prvých 10 riadkov) | ||
+ | |||
+ | * **'' | ||
+ | * Vypíše koniec súboru (bez prepínačov posledných 10 riadkov) | ||
+ | |||
+ | * **'' | ||
+ | * Vyhľadá zadaný text v súbore. | ||
+ | * Tento príkaz je v základe jednoduchý, | ||
+ | * Pozn.: O tomto príkaze viac v ďalšej kapitole. | ||
+ | |||
+ | * **'' | ||
+ | * Zotriedi vstupné data | ||
+ | * Rôzne možnosti triedenia viz. '' | ||
+ | |||
+ | * **'' | ||
+ | * Preskočí záznamy, ktoré sa za sebou opakujú | ||
+ | * Užitočný prepínač pre spočítanie rovnakých záznamov: **'' | ||
+ | |||
+ | === " | ||
+ | |||
+ | 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 '' | ||
+ | |||
+ | Abychom nemuseli takéto súbory zadávať po jednom, existujú pomocné skratky, tzv. //divoké karty// (// | ||
+ | |||
+ | * **'' | ||
+ | * Symbol // | ||
+ | * Príklad: | ||
+ | < | ||
+ | $ mv /tmp/*.txt ~/ | ||
+ | </ | ||
+ | |||
+ | Presunie všetky súbory s príponou '' | ||
+ | |||
+ | < | ||
+ | $ rm / | ||
+ | </ | ||
+ | |||
+ | Odstráni z adresáru ''/ | ||
+ | |||
+ | Na zamyslenie: Aký je rozdiel medzi nasledujúcimi príkazmi? | ||
+ | |||
+ | < | ||
+ | $ rm -rf /tmp/* | ||
+ | $ rm -rf /tmp/ | ||
+ | </ | ||
+ | |||
+ | * **''?'' | ||
+ | * Tento symbol zastupuje **akýkoľvek jeden** symbol | ||
+ | |||
+ | * **'' | ||
+ | * Tento zložený symbol sa rozvinie na postupnosť zadaného rozsahu | ||
+ | * Ako //X// a //Y// sa dá zadať rozsah čísel alebo písmen | ||
+ | * Príklad: | ||
+ | < | ||
+ | $ mkdir adresar{A..N} | ||
+ | $ ls | ||
+ | adresarA | ||
+ | adresarB | ||
+ | </ | ||
+ | |||
+ | Na zamyslenie: Čo spraví nasledujúci príkaz? | ||
+ | |||
+ | < | ||
+ | $ touch subor{1..9}{1..9} | ||
+ | </ | ||
+ | |||
+ | === Presmerovanie === | ||
+ | |||
+ | Pre presmerovanie vstupu / výstupu sa používajú nasledovné znaky: | ||
+ | * **''<'' | ||
+ | * **''>'' | ||
+ | * **''< | ||
+ | * **'' | ||
+ | |||
+ | Štandardné vstupy / výstupy sú tiež označené číslami nasledovne: | ||
+ | * **stdin** - // | ||
+ | * **stdout** - // | ||
+ | * **stderr** - // | ||
+ | |||
+ | Taktiež existuje špeciálny súbor **''/ | ||
+ | |||
+ | < | ||
+ | príkaz 2> /dev/null | ||
+ | </ | ||
+ | |||
+ | Presmerovanie sa používa cielene so **súbormi**. | ||
+ | |||
+ | Pre predávanie výstupu ďalším príkazom sa používajú “// | ||
+ | |||
+ | === 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 **'' | ||
+ | |||
+ | < | ||
+ | Syntax: " | ||
+ | Prepojí výstup príkazu-1 na vstup príkazu-2. | ||
+ | </ | ||
+ | |||
+ | Prikazy sa daju sekvenčne zapojit aj viac krát v //jednom// príkaze. | ||
+ | |||
+ | < | ||
+ | $ ls /usr/bin | grep yum | ||
+ | yum | ||
+ | yum-builddep | ||
+ | yum-config-manager | ||
+ | yum-debug-dump | ||
+ | yum-debug-restore | ||
+ | yum-deprecated | ||
+ | yumdownloader | ||
+ | yum-groups-manager | ||
+ | </ | ||
+ | |||
+ | Nasledujúci súbor '' | ||
+ | |||
+ | < | ||
+ | $ cat numbers.txt | sort | uniq -c | ||
+ | 2 0 | ||
+ | 3 1 | ||
+ | 5 2 | ||
+ | 5 3 | ||
+ | 6 4 | ||
+ | 4 5 | ||
+ | 3 6 | ||
+ | 5 7 | ||
+ | 4 8 | ||
+ | 3 9 | ||
+ | </ | ||
+ | |||
+ | Tento príkaz spočítal výskyt každého čisla v súbore '' | ||
- | ===== Práce se soubory a adresářy ===== | ||
===== Práce s textem, vstupem a výstupem ===== | ===== Práce s textem, vstupem a výstupem ===== | ||
- | ===== Úprava souború ===== | + | 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úbore, ktorý sa nachádza v spomínanom adresáre. |
+ | |||
+ | Na hľadanie kľúčových slov je najpoužívanejší príkaz '' | ||
+ | |||
+ | Poďme si teraz skúsiť reálne použitie. | ||
+ | |||
+ | Naša úloha bude, že sa snažíme nájsť reťazec '' | ||
+ | |||
+ | < | ||
+ | $ grep PATH / | ||
+ | case ": | ||
+ | PATH=$PATH: | ||
+ | PATH=$1: | ||
+ | </ | ||
+ | |||
+ | Reťazec sme našli. Mohli by sme dostať aj čísla riadkov? | ||
+ | |||
+ | < | ||
+ | 58: case ": | ||
+ | 63: PATH=$PATH: | ||
+ | 65: PATH=$1: | ||
+ | |||
+ | Kde všade môžeme ešte kľúčové slovo '' | ||
+ | |||
+ | < | ||
+ | $ grep -R PATH /etc/ | ||
+ | grep: / | ||
+ | grep: / | ||
+ | grep: / | ||
+ | grep: / | ||
+ | grep: / | ||
+ | grep: / | ||
+ | grep: / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | Binary file / | ||
+ | / | ||
+ | … | ||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | **Úloha**: presmerujte teraz obsah štandardného výstupu do súboru. | ||
+ | |||
+ | ==== 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 '' | ||
+ | |||
+ | < | ||
+ | |||
+ | Ľahko si môžeme zadefinovať vlastnú premennú a pouziť ju: | ||
+ | |||
+ | < | ||
+ | |||
+ | a následne v tomto tajnom súbore niečo nájsť: | ||
+ | |||
+ | < | ||
+ | |||
+ | |||
+ | ==== Tvorba jednoduchého skriptu ==== | ||
+ | |||
+ | Všetko príkazy, ktoré sme doteraz zadali do príkazovej riadky, môžeme zapísať do súboru a vykonať sekvenčne: | ||
+ | |||
+ | < | ||
+ | |||
+ | <code bash> | ||
+ | grep PATH $TAJNY_SUBOR</ | ||
+ | |||
+ | a následne vykonať: | ||
+ | |||
+ | < | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | ===== Úprava souború | ||
+ | |||
+ | Jeden z najrozšírenejších a najviac používaných CLI textových editorov je **vi**. Editor vi je predinštalovaný na každom linuxovom systéme a poskytuje množstvo užitočných príkazov na editovanie súborov. | ||
+ | |||
+ | |||
+ | ==== Prvé spustenie ==== | ||
+ | |||
+ | Textový editor sa spúšťa pomocou príkazu '' | ||
+ | |||
+ | Pokiaľ súbor s poskytnutým názvom neexistuje, vi vytvorí nový súbor v [[link na vysvetlenie, | ||
+ | |||
+ | 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 ==== | ||
+ | |||
+ | 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 **'' | ||
+ | |||
+ | Zo základného módu sa stlačením **'' | ||
+ | |||
+ | Tretí z používaných módov je **vizuálny** a spúšťa sa pomocou klávesy **'' | ||
+ | |||
+ | ==== Navigácia v súbore v základnom móde ==== | ||
+ | |||
+ | Napravo vidíme aktuálnu pozíciu kurzoru vo formáte riadok, | ||
+ | |||
+ | * Presun kurzora na začiatok súboru - **'' | ||
+ | * Presun kurzora na koniec súboru - **'' | ||
+ | * Skoč na riadok - **''< | ||
+ | |||
+ | |||
+ | ==== 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é: | ||
+ | |||
+ | * zobraziť čísla riadkov - **'': | ||
+ | * inak zmeniť nastavenie editora **'''' | ||
+ | * pozmeniť slovo alebo výraz na riadku - **'': | ||
+ | * a mnoho iných. | ||
+ | |||
+ | ==== 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: | ||
+ | |||
+ | * uloženie a návrat do CLI - **'': | ||
+ | * návrat do CLI bez uloženia - **'': | ||
+ | |||
+ | ==== 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í, | ||
+ | ===== Dotazy a diskuse ===== | ||
+ | Pokládat dotazy a diskutovat o tomto školení můžete v [[https:// | ||