skoleni:zaklady_prikazove_radky

Toto je starší verze dokumentu!


Základy příkazové řádky

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}:")     
…

Ako toto vlastne funguje?

Každý príkaz spustený v príkazovej riadke môže akceptovať vstup a produkovať výstup. Vstup akceptuje cez STDIN, takzvaný standard input. Vystúp produkuje do 2 streamov: štandartný výstup (STDOUT) a štandartný chybový výstup (STDERR).

Každý z týchto streamov má unikátny identifikátor: 0 pre stdin, 1 pre stdout a 2 pre stderr.

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.

Môžete si klásť otázku, že ako niečo presmerovať do štandartného vstupu? Na túto operáciu používáme operátor | (roura). Funguje to tak, že zoberieme výstup z jedného príkazu a presmerujeme ho ako vstup do iného. Ako taký krásny príklad je, že keď sa snažíte nájsť špecifický prepínač v nápovede pre nejaký príkaz: ako zistím prepínač u príkazu grep ktorý vypne senzitivitu na veľké a malé písmena:

$ grep --help | grep case

Kazdy linuxovy proces ma mnozinu premennych prostredia ktore su mu dostupne. Velmi lahko si ich mozeme vsetky vypisat pomocou prikazu env. Vy mozete tieto premenne lahko zadefinovat sami a vyuzivat ich v prikazovej riadke pomocou konstruktu $MENO_PREMENNEJ. Tak si podme napr. vypisat obsah premennej prostredia PATH:

echo $PATH

Lahko si mozeme zadefinovat vlastnu premennu a pouzit ju:

export TAJNY_SUBOR=/etc/bashrc

a nasledne v tomto tajnom subore nieco najst:

grep PATH $TAJNY_SUBOR

Ostatne dolezite prikazy Prejdime si teraz strucne ostatne dolezite prikazy: head - zobraz prvych 10 riadkov tail - zobraz poslednych 10 riadkov cat - vypis subor wc - spocitaj riadky, slova v subore sort - zorad vstup podla abecedy shuf - pomiesaj vstup tee - zapisuj vstup do suboru ako aj na standartny vystup Tvorba jednoducheho skriptu

Vsetko co sme doteraz robili mozeme uplne jednoducho zapisat do suboru a vykonat sekvencne:

vim nas-prvy-skript.sh

export TAJNY_SUBOR=/etc/bashrc grep PATH $TAJNY_SUBOR

a nasledne vykonat

bash nas-prvy-skript.sh

Zakerna uloha: napiste do shellu “cat” a nasledne “skuska” a enter. Dokaze niekto popisat ze co sa prave 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.

  • Poslední úprava: 2022/11/14 11:12
  • (upraveno mimo DokuWiki)