skoleni:zaklady_prikazove_radky

Toto je starší verze dokumentu!


Základy příkazové řádky

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ých1)
      • -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 2)
    • Š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 3)
    • 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 4)
$ 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. 5)
$ 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.6)

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