skoleni:zaklady_prikazove_radky

Toto je starší verze dokumentu!


Základy příkazové řádky

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:

  • jen pro pokročilé uživatele
  • zastaralá a překonaná
  • příliš složitá
  • a další…

Sám za sebe bych si dovolil říct, že ani jedno z toho není pravda. Doufám, že po tomto článku se mnou budete souhlasit (nebo alespoň příliš neodporovat).

Co je to vůbec ta "příkazová řádka"

Jak již název naznačuje, jedná se o nějaký řádek určený k zadávání příkazů. To je všechno, o nic víc nejde. Teda 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 1) a budete vědět o čem mluvím.

Jaký je rozdíl mezi "příkazovou řádkou" a "CLI"

Ještě než se pustíme do toho jak celá ta věc funguje, tak bych rád vysvětlil nějaké informace týkající se terminologie. Pokusíme se toho na vás moc nevybalit, ale lidem používajícím některá slova dost často sem tam prostě nějaké ulítne. Tak aspoň nebudete zaskočeni.

I když programy v počítači někdy fungují sami 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. A protože to, kde se tato komunikace odehrává, je taková pomyslná hranice, používá se zde 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.

Nejčastějšími pojmy (anglické  pojmy se zkratkami v závorkách) jsou:

  • Aplikační programové rozhraní (API - Application Programming Interface): Rozhraní pro komunikaci programů mezi sebou - pro nás nyní nedůležité.
  • Uživatelské rozhraní (UI - User Interface): Rozhraní mezi uživatelem (nejčastěji člověkem) a počítačem. To může být dále děleno na následující:
    • 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ů, to ale neznamená, že také nemůže mít dialogy, tlačítka atd.
  • Rozhraní příkazové řádky (CLI - Command-Line Interface): Rozhraní pro komunikaci s příkazovou řádkou. 2) To bude téma dnešního „školení“.

Příkazová řádka je tedy něco kam můžeme psát příkazy a pouštět programy. To jak s tou příkazovou řádkou pracujeme (a potažmo s programy v ní spouštěnými) je CLI. Pokud má nějaký projekt CLI nástroj, znamená to, že půjde ovládat v příkazové řádce.

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íň umí. Většinou je to právě naopak. Zkrátka je to jen jiné rozhraní jak komunikovat s programem. Nic víc. Akorát je mnohem jednodušší na naprogramování a tak může být i propracovanější a nebo nabízet víc možností. Ale to sami poznáte.

Hlavní výhody příkazové řádky jsou (tedy hlavně oproti GUI):

  • Přehlednost: Vše má svoje místo, písmenek na klávesnici je míň než pixelů na monitoru. 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.
  • Rychlost: Tady 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ší. Už jste někdy viděli pokladní v obchodě markovat zboží myší? Nejspíš tam ani myš nemají. A i bez čárových kódů jedou jako po másle.
  • 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 a nebo dokonce i tablet. Ať už je to vámi vybraná distribuce Linuxu a nebo nějaká úplně jiná. Dokonce to nemusí být ani Linux, ale jakýkoliv 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 )

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.

Ohromné odhalení (i když to už všichni tušili)

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říkazovou řádkou kterou máte puštěnou je program bash. Existuje spousta dalších, ale až na vyjímky jsou základy práce s nimi téměř stejné.

Pro zopakování pojmů:

  • Terminál: program s GUI, protože má okno a nabídku na které se dá kliknout a je očividně grafické (stíny, obdélníky) a jeho součástí je i to, co se zobrazí po pravém kliknutí myši (jak nabídka, tak okna nastavení).
  • Bash: textový program který pomocí CLI poskytuje uživateli příkazovou řádku. Píše se do něj na klávesnici (pokud není označená např. nabídka okna terminálu) a stejně tak se i pohybuje s kurzorem. Všechno je tvořeno z textu a kurzor je jen obdélník (pokud jste neměnili nastavení).

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 v terminálu, tak nebudete vůbec potřebovat myš. A to je přece výhoda!

Prompt

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):

[liveuser@localhost-live ~]$ █

Tomuto se říká prompt (z angličtiny pobídka) a vyzívá nás k tomu, abysme 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:

  • liveuser: Název aktuálního uživatele
  • localhost-live: Název aktuálního systému (hostitele, anglicky hostname)
  • ~: Aktuální cesta ve které se nacházíme (tilda znamená domovský adresář aktuálního uživatele).
  • $: Uživatel není přepnutý na administrátora

No a když už nás to tak pobízí na zadání nějakého příkazu, tak si pojďme nějaké zkusit.

Příkaz(y)

Jedním z prvních příkazů které vyzkoušíme bude 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:

echo Ahoj

Po zmáčknutí klávesy Enter se nám vypsalo Ahoj:

[liveuser@localhost-live ~]$ echo Ahoj
Ahoj
[liveuser@localhost-live ~]$ █

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.

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:

[liveuser@localhost-live ~]$ echo -n Ahoj
Ahoj[liveuser@localhost-live ~]$ █

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. Zkusíme si co by udělalo, ale nebudeme celý příkaz psát znovu. Napřed naprázdno zmáčkneme Enter ať dostaneme čistý řádek. Potom zmáčknutím šipky nahoru, tím se nám budou zobrazovat předešlé příkazy. Zmáčkneme ji tolikrát, abysme se dostali zpět na příkaz echo Ahoj, pokud ji zmáčknete mockrát, tak se logicky dá posouvat na druhou stranu šipkou dolů. 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

[liveuser@localhost-live ~]$ echo Ahoj -n
Ahoj -n
[liveuser@localhost-live ~]$ █

Systém súborov v Linuxe je organizovaný v jednej stromovej štruktúre.

Koreň tohoto systému (filesystem 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:

  • /boot - obsahuje súbory potrebné k spusteniu boot-procesu
  • /dev - obsahuje špeciálne súbory zariadení, ktoré sa používajú pre prístup k hardwarovým zariadeniam
  • /etc - obsahuje konfiguračné súbory
  • /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)
  • /media - pripojené odpojitelné médiá (napr. USB alebo CD-ROM a pod.)
  • /mnt - dočasne pripojené ďalšie suborové systémy
  • /opt - súbory volitelných softwarových balíčkov
  • /root - domovský adresár superužívateľa ‘root’
  • /run - data používané bežiacimi procesami od posledného bootu (napr. ID otvorených súborov, zamknuté súbory, a ďalšie)
  • /srv - data služieb (httpd, ftp, a pod.), ktoré systém poskytuje
  • /sys - informacie o zariadeniach a prístup k nastavitelným systémovým parametrom (na úrovni kernelu)
  • /tmp - všeobecne prístupný priestor pre dočasné data, resp. “čokoľvek”
  • /usr - nainštalovaný software, zdielané knihovne, zdrojové súbory a pod.
    • /usr/bin - spustitelné binárne súbory (programy)
    • /usr/sbin - spustitelné binárne systémové súbory (programy)
    • /usr/lib - knižnice
    • /usr/local - lokálne nastavenia softwaru
  • /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)

  • PWD - print working directory
    • Zobrazí absolútnu cestu k aktuálnemu adresáru
$ pwd
/home/user1/
  • LS - list
    • Vypíše obsah aktuálneho adresára
    • Užitočné prepínače:
      • -a’ - vypíše všetky súbory, vrátane skrytých3)
      • -l’ - vypíše detailnejšie informácie (dá sa použiť skratka ‘ll’)
$ ls
Documents  Downloads  Games  Music  Pictures  Private  Public  Templates  Videos
  • CD - change directory
    • 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.
    • Bez argumentov zmení adresár na domovský.
    • Existuje niekoľko symbolových skratiek, pomocou ktorých sa dá cieľová cesta konštruovať:
      • .’ - skratka pre aktuálny adresár
      • ..’ - skratka pre rodičovský adresár
      • ~’ - skratka pre domovský adresár užívateľa, ktorý príkaz používa 4)
    • Š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 (viz. príklad)
$ pwd 
/home/user1/Documents

$ cd ../Pictures
$ pwd 
/home/user1/Pictures

$ cd -
$ pwd
/home/user1/Documents
  • TREE
    • 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.)
  • FIND
    • Umožňuje vyhľadávať súbory, prípadne obsah súborov 5)
    • Poskytuje veľa rôznych parametrov pre upresnenie vyhladávania.
    • Viac informácií: “man find
$ find /etc -name httpd
/etc/httpd
/etc/logrotate.d/httpd
/etc/sysconfig/httpd

Modifikácia

  • MKDIR - make directory
    • Vytvorí zadaný adresár (rodičovský adresár musí existovať)
    • Prepínač ‘-p’ prípadne vytvorí aj všetky adresáre na zadanej ceste.
$ mkdir novy_adresar

$ mkdir novy_adresar/druhy/treti/posledny
mkdir: cannot create directory ‘novy_adresar/druhy/treti/posledny’: No such file or directory

$ mkdir -p novy_adresar/druhy/treti/posledny
$ tree 
.
└── novy_adresar
    └── druhy
        └── treti
            └── posledny
  • RMDIR - remove directory
    • Odstráni/zmaže zadaný adresár
    • Zadaný adresár musí byť prázdny 6)
$ rmdir novy_adresar/
rmdir: failed to remove 'novy_adresar/': Directory not empty

$ rmdir novy_adresar/druhy/treti/posledny/
$ tree
.
└── novy_adresar
    └── druhy
        └── treti
  • TOUCH
    • Pomocou tohto príkazu sa dá vytvoriť nový (prázdny) súbor. 7)
$ touch subor1 
$ touch novy_adresar/subor2 novy_adresar/druhy/subor3
$ tree
.
├── novy_adresar
│   ├── druhy
│   │   ├── subor3
│   │   └── treti
│   └── subor2
└── subor1
  • RM - remove
    • Odstráni zadaný súbor
    • Užitočné prepínače:
      • -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
    • Kombinácia ‘-rf’ je často užitočná, ale pozor na jej použitie!
$ ls
novy_adresar  subor1

$ rm subor1
$ ls
novy_adresar

$ rm -r novy_adresar/druhy
$ tree
.
└── novy_adresar
    └── subor2
  • ECHO
    • Zobrazí zadaný text na štandardný výstup
    • Výstup tohoto príkazu sa bežne posiela do súborov (viz. Presmerovanie nižšie).
$ echo Hello world!
Hello world!
  • CP - copy
    • 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.
    • Pokročilé: príkaz ‘scp’ sa používa pre kopírovanie súborov medzi viacerými počítačmi prostredníctvom siete.
  • MV - move
    • Presunie daný objekt (súbor, adresár, iné..) na zadané miesto
    • Tento príkaz sa tiež používa pre premenovanie objektov.
  • LN - link
    • 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č ‘-s’ sa používa k vytvoreniu tzv. slabých odkazov (soft-link), ktoré nevytvárajú referencie na daný objekt

Čítanie

  • CAT - concatenate
    • Vypíše obsah súboru na štandardný výstup.
  • TEE
    • Čí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.
  • WC - word count
    • Spočíta a vypíše počet slov (medzier) v zadanom súbore.
    • Prípadne počet riadkov s prepínačom ‘-l’.
  • LESS / MORE
    • 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
  • HEAD
    • Vypíše začiatok súboru (bez prepínačov prvých 10 riadkov)
  • TAIL
    • Vypíše koniec súboru (bez prepínačov posledných 10 riadkov)
  • GREP
    • 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.
  • SORT
    • Zotriedi vstupné data
    • Rôzne možnosti triedenia viz. “man sort
  • UNIQ
    • Preskočí záznamy, ktoré sa za sebou opakujú
    • Užitočný prepínač pre spočítanie rovnakých záznamov: ‘-c

Presmerovanie

Pre presmerovanie vstupu / výstupu sa používajú nasledovné znaky:

  • <’ - presmerovanie vstupu (default: štandardný vstup)
  • >’ - presmerovanie vystupu (default: štandardný výstup)
  • >>’ - pripájanie na koniec súboru
  • 2>’ - presmerovanie chybového výstupu (default: štandardný chybový výstup)

Štandardné vstupy / výstupy sú tiež označené číslami nasledovne:

  • stdin - štandardný vstup - číslo 0,
  • stdout - štandardný výstup - číslo 1,
  • stderr - štandardný chybový výstup - číslo 2.8)

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é / ignorované. Napríklad je často užitočné do tohto súboru presmerovať chybový výstup, keď nás chybové hlásenia nezaujímajú:

 “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).

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: "príkaz1 | príkaz2"
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 numbers.txt obsahuje nahodné čísla 0-10)

$ 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 numbers.txt)

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 grep. Teraz vás poprosím si pozrieť manuálovú stránku tohto príkazu ako aj nápovedu. (Úloha: ako to spraviť?)

Poďme si teraz skúsiť reálne použitie.

Naša úloha bude, že sa snažíme nájsť reťazec PATH v súbore /etc/bashrc.

$ grep PATH /etc/bashrc                                                                                                                                        
        case ":${PATH}:" in
                    PATH=$PATH:$1
                    PATH=$1:$PATH

Reťazec sme našli. Mohli by sme dostať aj čísla riadkov?

$ grep -n PATH /etc/bashrc                                                                                                                                     
58:        case ":${PATH}:" in
63:                    PATH=$PATH:$1
65:                    PATH=$1:$PATH

Kde všade môžeme ešte kľúčové slovo PATH nájsť v /etc?

$ grep -R PATH /etc/                                                               
grep: /etc/pki/tls/certs/ca.crt: Permission denied
grep: /etc/pki/rsyslog: Permission denied
grep: /etc/ssh/sshd_config: Permission denied
grep: /etc/ssh/ssh_host_rsa_key: Permission denied
grep: /etc/ssh/ssh_host_ecdsa_key: Permission denied
grep: /etc/ssh/ssh_host_ed25519_key: Permission denied
grep: /etc/ssh/sshd_config.rpmnew: Permission denied
/etc/bashrc:        case ":${PATH}:" in                                                        
/etc/bashrc:                    PATH=$PATH:$1                                                                              
/etc/bashrc:                    PATH=$1:$PATH                                                             
Binary file /etc/udev/hwdb.bin matches                                                                                                                                      
/etc/csh.login: switch (":${PATH}:")     
…

V príkazovej riadke je možné tieto vstupy a výstupy rôzne presmerovávať. Na presmerovanie sa používa operátor >. To znamená že môžeme napr. presmerovať chybový výstup do súboru:

$ grep -R PATH /etc/ 2>chyby
/etc/bashrc:        case ":${PATH}:" in                                                                                                           
/etc/bashrc:                    PATH=$PATH:$1                                                                                  
/etc/bashrc:                    PATH=$1:$PATH                                                                                                                                
Binary file /etc/udev/hwdb.bin matches                                                                                                               
/etc/csh.login: switch (":${PATH}:")                                                                
/etc/profile:    case ":${PATH}:" in                                                                                     
/etc/profile:                PATH=$PATH:$1                                                      
/etc/profile:                PATH=$1:$PATH                                                                         
/etc/profile:export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL                                                     
/etc/profile.d/qt.sh:case :$PATH: in                                                                                               
/etc/profile.d/qt.sh:    *) PATH=$QTDIR/bin:$PATH ;;       

Ako už vidíte, Permission denied chyby už nie sú vo výstupe, ale sú v súbore s názvom “chyby”.

Úloha: presmerujte obsah štandartného výstupu do súboru.

Každý linuxový proces ma množinu premenných prostredia ktoré sú mu dostupne. Veľmi ľahko si ich môžeme všetky vypisovať 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. Tak si poďme napr. vypísať obsah premennej prostredia PATH:

echo $PATH

Ľahko si môžeme zadefinovať vlastnú premennú a pouziť ju:

export TAJNY_SUBOR=/etc/bashrc

a následne v tomto tajnom súbore niečo nájsť:

grep PATH $TAJNY_SUBOR

Všetko príkazy ktoré sme doteraz zadali do príkazovej riadky môžeme zapísať do súboru a vykonať sekvenčne:

vim nas-prvy-skript.sh
export TAJNY_SUBOR=/etc/bashrc
grep PATH $TAJNY_SUBOR

a následne vykonať:

bash nas-prvy-skript.sh

Náročná úloha: napíšte do príkazovej riadky “cat” a následne “skúška” a potvrdte enterom. Dokáže niekto popísať že co sa práve deje?

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 vi. Ako argument[link na vysvetlenie argumentu] je mu predaný názov súboru ktorý sa chystáme upravovať.

Pokiaľ súbor s poskytnutým názvom neexistuje, vi vytvorí nový súbor v aktuálnom adresári. [link na vysvetlenie co je aktualny adresar]

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 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).

Zo základného módu sa stlačením i dostaneme do vkladacieho módu - insert. V tomto móde sa zapisuje nový text, tak ako sme zvyknutí z grafických textových editorov. Naspäť do základného/príkazového módu sa dostaneme stlačením klávesy <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>.

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 koniec súboru - gg
  • Skoč na riadok - <číslo riadku>G (napríklad 42G)
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 - :set nu
  • inak zmeniť nastavenie editora
  • pozmeniť slovo alebo výraz na riadku - :s/brno/Brno/g
  • a mnoho iných.

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
  • návrat do CLI bez uloženia - :q!
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.


1)
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. Myslím si, že nejpozději u term už bude i označená a bude stačit zmáčknout Enter.
2)
někdy také pro komunikaci pomocí příkazové řádky
3)
skryté súbory začínajú znakom ‘.’ a sú ignorované bežnými nástrojmi ako napr. ‘rm’.
4)
podľa premennej prostredia $HOME
5)
analógia: Windows Search
6)
Prázdny adresár obsahuje iba špeciálne súbory ‘.’ a ‘..’
7)
Funkcionalita tohto príkazu nie je vyslovene vytváranie súborov, ale z jeho podstaty sa dá pre vytváranie použiť
8)
Na zamyslenie: Všimnite si, že presmerovanie chybového výstupu sa zapisuje '2>'
  • Poslední úprava: 2022/11/14 11:12
  • (upraveno mimo DokuWiki)