Toto je starší verze dokumentu!
Základy příkazové řádky
Úvod do příkazové řádky
Práce se soubory a adresářy
Systém súborov (Filesystem)
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)
Prehľad základných príkazov
Navigácia
- 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)
“Wildcards”
- ‘ * ’ - asterisk
- ‘?’ - any_single_character
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á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
Premenné prostredia
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?
Úprava souború pomocí terminalového editoru
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>.
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:
- 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.
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- :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.