navody:f7prompt

Hlavní stránka

I když již není znalost unixových příkazů pro soužití s Linuxem natolik důležitá jako dříve, není od věci osvojit si alespoň několik základních příkazů. Důvodem je, že „klikací“ aplikace pro nastavení systému se mohou lišit pro jednotlivé verze distribuce - příkazy však zůstávají neměnné. Navíc v případě, kdy budete nuceni pracovat např. v záchranném módu, budete odkázáni výhradně na příkazový řádek. Sečteno a podtrženo - znalost několika málo příkazů Vás nezabije, ale posílí (navíc zažije určitě řadu situací, kdy se Vám tato znalost bude i hodit). Jestliže Vás však tato kapitola už od prvního pohledu odpuzuje, můžete ji přeskočit.

V následujícím textu budeme zaměňovat pojmy příkazový řádek a terminál. Příkazovým řádkem / terminálem budeme rozumět rozhraní, pomocí něhož zadává uživatel příkazy. Dalším pojmem, se kterým se zde můžete setkat, je shell. shell je zjednodušeně řečeno software, který umožňuje komunikaci mezi uživatelem a jádrem OS Linux - je totiž zodpovědný za interpertaci příkazů zadávaných uživatelem prostřednictvím příkazového řádku. shell tak brání tomu, aby uživatelé přistupovali přímo k jádru, což lze chápat do jisté míry jako bezpečnostní prvek.
Pro OS Linux bylo vyvinuto několik shellů. Standardním shellem je bash, který bude s největší pravděpodobností také součástí Vaší instalace. bash je akronymem sousloví „Bourne Again SHell“ a je pokračovatelem původního shellu, který napsal Stephen Bourne koncem 70.let. Samotný bash pak pochází z roku 1987.

Dalším hojně používaným pojmem je příkaz. Příkaz není v podstatě nic jiného než soubor, který má nastaveno právo spouštění (viz. kapitola Definování přístupových práv). Většina těchto souborů je pak uložena v adresářích /sbin, /bin, /usr/bin a /usr/sbin. Jestliže chceme zadat daný příkaz, stačí ve většině případů do příkazové řádky napsat pouze jeho jméno.

ls -la

Je však možné také zadat kompletní cestu.

/bin/ls -la

V případě, že adresář, ve kterém se nachází daný příkaz, není definován v proměnné PATH, je uvedení celé cesty nezbytné (viz. kapitola Proměnná PATH).

S pojmem příkaz je velice často spojován pojem přepínač. Přepínač lze chápat jako fakultativní parametr, který modifikuje chování příkazu. Jednotlivé přepínače lze velice často mezi sebou kombinovat. Např. v případě příkazu ls lze použít přepínač -l, -a ale také jejich kombinaci -la.

Poznámka: Zde uvedené příkazy lze označit jako naprosté minimum příkazové řádky - seznam příkazů není ani zdaleka vyčerpávající.

Příkazový řádek otevřete v grafickém prostředí Gnome pomocí nabídky Aplikace → Systémové nástroje → Terminál.
V historii zadaných příkazů můžete listovat pomocí šipky nahoru a dolů. Dále je možné automaticky doplňovat názvy souborů a adresářů pomocí klávesy tabelator (stačí napsat část názvu souboru nebo adresáře a stisknout klávesu tabelatoru).
Chcete-li zamezit pípání terminálu, klikněte v okně terminálu na Upravit → Aktuální profil… a odškrtněte položku pípání terminálu.
Chcete-li terminál otevřít pomocí nabídky, kterou získáte poklepáním na plochu, zadejte do příkazové řádky

yum -y install nautilus-open-terminal

Terminál pak otevřete kliknutím pravého tlačítka myši a výběrem Otevřít terminál z předložené nabídky.

Jména souborů a adresářů

Unixové systémy včetně Linuxu rozlišují velikost písmen v názvech souborů a adresářů. TEXT.txt, text.txt a text.TXT jsou tak tři rozdílné soubory!
Při volbě jmen souborů a adresářů je také vhodné se vyvarovat českých znaků, mezer a jiných speciálních znaků. Více o problematice těchto znaků v názvech souborů a adresárů naleznete v kapitole Použití závorek a zpětného lomítka.

Proměnná PATH

Jak již bylo zmíněno v úvodu, aby bylo možné spustit daný příkaz pouze zadáním jména bez specifikování celé cesty, musí být adresář, ve kterém je příkaz uložen, definován v proměnné PATH. Obsah této proměnné získáte pomocí příkazu

echo $PATH
  
/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/macky/bin

Na výše uvedeném výpisu je vidět, že proměnná PATH obsahuje cesty k několika adresářům oddělených dvojtečkou. Jestliže uživatel zadá příkaz, jsou postupně v pořadí daném výpisem procházeny jednotlivé adresáře. V případě, že některý z těchto adresářů bude obsahovat soubor se stejným jménem jako jméno příkazu, pokusí se ho shell spustit. Jestliže se tento soubor spustit nepodaří (např. jestliže není nastaveno právo spouštění) nebo jestliže žádný z adresářů stejnojmenný soubor neobsahuje, nahlásí shell chybu.
V případě, že soubor sice existuje, avšak jeho adresář není specifikován v proměnné PATH, jsou možná dvě řešení. Prvním a nejjednodušším řešením je uvést celou cestu k danému souboru.

/bin/ls -la

Druhou možností je pak přidat daný adresář do proměnné PATH. Editaci této proměnné může provádět pouze superuživatel. Je také dobré si rozmyslet, zda-li je opravdu nutné daný adresář do proměnné PATH přidávat. Jestliže totiž přidáte množství adresářů s velkým počtem souborů, může dojít z důvodu procházení těchto adresářů k prodloužení zpracování příkazů. Dalším aspektem je pak bezpečnostnost. Jestliže byste např. přidali adresář na začátek proměnné PATH a tento adresář nezabezpečili proti zápisu pro ostatní uživatele, může dojít k „podstrčení“ příkazu. shell totiž postupně prochází všechny adresáře a spustí první soubor prvního adresáře, jehož jméno se shoduje se jménem příkazu. Příkaz ls -la by pak namísto výpisu obsahu pracovního adresáře mohl např. mazat soubory.
Adresář /cesta/k/adresari je možné na konec proměnné PATH přidat pomocí příkazu

$PATH = echo $PATH:/cesta/k/adresari

Spuštení vícero příkazů

Standardně zapisujeme jeden příkaz na jeden řádek.

cd /usr/sbin
ls -la

Znak středník ; umožňuje spustit několik příkazů po sobě v pořadí uvedeném v příkazové řádce.

cd /usr/sbin; ls -la

Tento zápis je ekvivalentní s výše uvedeným.

Zástupné znaky

Zástupné znaky (tzv. wildcards) umožňují specifikovat několik jmen souborů / adresářů najednou.
Uvažujme soubory text.txt, text.tex a latex.tex. Jestliže byste chtěli zjistit např. nastavená práva přiřazená těmto souborům pro jednotivé uživatele, můžete použít tři samostatné příkazy

ls -la text.txt
ls -la text.tex
ls -ls latex.tex

nebo jeden příkaz.

ls -la *tex*.t*

Zástupný znak hvězdička * představuje libovolný počet znaků (včetně žádného znaku).
Dalším zástupným znakem je otazník ?, kterým nahradíte libovolný jeden znak. Soubory text.txt a text.tex tedy můžete pomocí tohoto zástupneho znaku výjádřit jako

ls -la text.t??

Libovolný znak z vybrané skupiny znaků lze zapsat pomocí dvojice hranatých závorek [ , ], které obsahují dané znaky. Uvažujme soubory text_a.txt, text_A.txt1), text_b.text, text_B.txt, text_1.txt a text_2.txt. Příkaz

ls -la text_[a,b].txt

vypíše údaje o souborech text_a.txt a text_b.txt. Příkaz

ls -la text_[A-B].txt

zase vypíše údaje o souborech text_A.txt a text_B.txt. Údaje o souborech text_1.txt a text_2.txt získáte pomocí

ls -la text_[0-9].txt

Chcete-li získat údaje pro všechny soubory, použijte syntaxi

ls -la text_[0-9, a-z, A-Z].txt

Informace o všech souborech kromě souboru text_2.txt získáte pomocí

ls -la text_[!2].txt

Použití závorek a zpětného lomítka

Způsob, jakým shell vyhodnocuje zadané příkazy, si v některých případech může vynutit použití závorek popř. zpětného lomítka. Klasickým příkladem jsou mezery v názvech souborů a adresářů běžně používané v OS typu Windows. Jestliže budete mít adresář jmeno adresare bude příkaz

cd jmeno adresare

interpretován stejně jako kdybyste zadali pouze

cd jmeno

Tento problém se dá vyřešit třemi způsoby.

cd 'jmeno adresare'
cd "jmeno adresare"
cd jmeno\ adresare

V prvním případě jednoduché uvozovky „chrání“ v nich uzavřený text před interpretací příkazovým řádkem. Druhý příklad je totožný s prvním s tím rozdílem, že dvojité uvozovky povolují interpretaci zástupných znaků. Zpětné lomítko brání interpretaci bezprostředně následujícího znaku.

Mezi znaky interpretované shellem patří vedle mezery např. zástupné znaky, ampersand &, znak „svislítko“ | a lomítko /.

Apostrof

Jestliže text uzavřete do apostrofů, bude text zpracován jako příkaz a na jeho místo bude dosazen výstup tohoto příkazu.

$pracovni_adresar=`pwd`
echo $pracovni_adresar

Poznámka: Pomocí prvního příkazu definujete proměnnou pracovni_adresar a její hodnotu vypíšete pomocí druhého příkazu. Při přiřazení hodnoty proměnné nesmí být mezi jménem proměnné, znakem rovno = a přiřazovanou hodnotou mezera!

Přesměrování výstupu

Řada programů produkuje určitý výstup. Například příkaz

ls -la

vypíše na obrazovku obsah pracovního adresáře. Ta je v tomto případě tzv. standardním výstupem. Kdybyste však chtěli výstup tohoto příkazu zapsat do souboru, museli byste tento výstup přesměrovat. K tomu slouží znaky > a ».

ls -la > obsah_adresare.txt
ls -la >> obsah_adresare.txt

Pomocí prvního příkazu vytvoříte soubor obsah_adresare.txt. Pokud tento soubor již existuje, přepíšete jeho obsah. Druhý příkaz je totožný s tím rozdílem, že v případě existence souboru obsah_adresare.txt nedojde k přepsání jeho obsahu, ale přidání výstupu na konec souboru.

V některých případech může být žádoucí výstup příkazu zahodit. V tomto případě přesměrujte výstup do adresáře /dev/null, který je jakousi „černou dírou“ systému.

ls -la > /dev/null

Roury

Roura je mechanismus, kterým je možné přímo předat výstup jednoho příkazu příkazu jinému. Klasickým příkladem je příkaz grep.

cat text.txt | grep Linux

Příkaz nalevo od „svislítka“ vygerenuje obsah souboru text.txt, který je předán příkazu grep. Ten pak vypíše všechny řádky, které obsahují slovo Linux.

Příkazy spouštěné na pozadí

Standardně jsou příkazy spouštěné na popředí. To znamená, že příkazový řádek je příkazem „zablokován“2) a uživatel musí čekat, než proběhne jeho zpracování. Alternativou k aplikacím spuštěným na popředí jsou příkazy spuštěné na pozadí. V tomto případě není příkazový řádek příkazem blokován a uživatel může spouštět další příkazy. Příkaz se spustí na pozadí tak, že se na jeho konec přidá znak ampersand &.

sleep 60&

Narozdíl od výše uvedené syntaxe, zablokuje příkaz

sleep 60

příkazový řádek na 60 sekund. Po tuto dobu nemůže uživatel zadávat další příkazy a musí čekat, než příkaz skončí.

V Linuxu rozlišujeme dvě základní kategorie úživatelů - běžného uživatele a tzv. superuživatele (root).
Účet superuživatele slouží pro správu systému. Tento uživatel tak může bez omezení přistupovat ke všem souborům, adresářům a procesům((Proces lze zjednodušeně chápat jako spuštěnou aplikaci.)). Jeho práva jsou „absolutní“ a nelze je omezit. Z tohoto důvodu je práce pod účtem superuživatele potenciálně nebezpečná - může totiž vést k poškození systému.
Naproti tomu běžní uživatelé mohou v systému vykonávat pouze takové činnosti, které jim dovolují přidělená práva. Standardně tato práva spravuje právě superuživatel.

Každý z uživatelů patří minimálně do jedné skupiny uživatelů, přičemž jedna z těchto skupin je defaultní. Skupiny uživatelů jsou důležité pro definování přístupových práv. Tímto způsobem je umožněn definované skupině uživatelů přístup ke společným souborům / adresářům popř. spouštění programů.

useradd

Příkaz useradd přidá do systému nového uživatele. Následující příkaz vytvoří uživatele uzivatel náležícího do defaultní skupiny skupina. Pro tohoto uživatele vytvoří domovský adresář /home/uzivatel (v případě, že tento adresář neexistuje).

/usr/sbin/useradd -m uzivatel -g skupina

Poznámka: Pro tohoto uživatele je ještě zapotřebí nastavit heslo pomocí příkazu passwd.

userdel

userdel slouží k odstranění uživatele. Pomocí příkazu

/usr/sbin/userdel -r uzivatel

odstraníte ze systému uživatele uzivatel včetně jeho domovského adresáře.

groupadd

Příkaz groupadd přidává do systému novou skupinu.

/usr/sbin/groupadd -f skupina

groupdel

groupdel slouží k odebrání skupiny. Aby bylo možné skupinu odebrat, je nejprve nutné zrušit účet všem uživatelům, kteří do této skupiny patří. Předpokládejme, že budeme chtít zrušit skupinu skupina. Seznam uživatelů náležících do této skupiny lze získat následujícím způsobem. Nejprve je třeba ze souboru etc/group zjistit identifikační číslo skupiny skupina.

cat /etc/group | grep skupina
  
skupina:x:501:

Seznam uživatelů této skupiny získáme pomocí

cat /etc/passwd | grep 501

uzivatel:x:501:501::/home/uzivatel:/bin/bash

Nejprve je třeba odstranit uživatele, po té je možné odstranit skupinu.

/usr/sbin/userdel -r uzivatel
/usr/sbin/groupdel skupina  

passwd

Příkaz passwd umožňuje uživateli provést změnu svého hesla. Jinému uživateli může heslo změnit pouze superuživatel.

Své heslo můžete změnit pomocí

passwd 

Superuživatel pak může změnit heslo jiného uživatele pomocí

passwd jmeno_uzivatele

su

su je příkazem pro změnu uživatele. Klasickým případem je, když z důvodu instalace aplikace potřebujete dočasně získat práva superuživatele. Po zadání příkazu su budete vyzváni k zadání hesla daného uživatele (s vyjímkou případů, kdy tento příkaz spouštíte jako superuživatel).

Změnu uživatele na superuživatele provedete pomocí

su

popř.

su root

Jestliže chcete změnit svou „identitu“ na jiného uživatele, použijte následující syntaxi

su jmeno_uzivatele

su můžete také spustit ve tvaru

su - jmeno_uzivatele

Rozdíl oproti výše uvedené syntaxi je v tom, že se Vám nastaví kompletní shell prostředí daného uživatele (tj. včetně případných proměnných a dalších vlastností).

uname

uname slouží ke zjištění údajů o systému, ke kterému jste momentálně přihlášeni.

uname -a

Linux localhost.localdomain 2.6.17-1.2139_FC5 #1 Fri Jun 23 12:40:16 EDT 2006 i686 athlon i386 GNU/Linux

whoami

whoami vypíše jméno uživatele, který momentálně „ovládá“ příkazový řádek.

whoami

macky

hostname

hostname slouží k zobrazení jméno počítače, ke kterému jste přihlášeni.

hostname

localhost.localdomain

free

free vypíše informace o využití fyzické operační paměti a tzv. swapu. Údaje zde uváděné jsou v násobcích 1kB.

free
             total       used       free     shared    buffers     cached
Mem:        515696     507504       8192          0      11444     189824
-/+ buffers/cache:     306236     209460
Swap:            0          0          0

w

w zobrazí základní informace o uživatelích přihlášených do systému a o aplikacích, které tito uživatelé spustili. Dále lze pomocí tohoto příkazu získat informace o čase a zatížení CPU za poslední 1, 5 a 15 minut.

w

  18:15:43 up  1:11,  3 users,  load average: 0.40, 0.76, 0.59
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
macky    :0       -                17:04   ?xdm?   4:35   0.66s gnome-session
macky    pts/1    :0.0             17:18    1:20   0.02s  0.02s bash
macky    pts/2    :0.0             18:12    0.00s  0.06s  0.01s w

df

df slouží k získávání informací o místě připojení jednotlivých diskových oddílů a míře zaplnění jejich diskového prostoru.

df

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda6              9912560   5660824   3740068  61% /
tmpfs                   257848         0    257848   0% /dev/shm
/dev/sda7              1984016    614028   1267576  33% /home
/dev/sda8             28080704   4358864  22272380  17% /opt
/dev/sda1              5116668   3151676   1964992  62% /media/windows_c

Informace zde uváděné jsou v tzv. blocích, které mají standardně velikost 1kB. Pokud Vám tento formát přijde nepřehledný, zkuste použít syntaxi

df -h

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda6             9.5G  5.4G  3.6G  61% /
tmpfs                 252M     0  252M   0% /dev/shm
/dev/sda7             1.9G  600M  1.3G  33% /home
/dev/sda8              27G  4.2G   22G  17% /opt
/dev/sda1             4.9G  3.1G  1.9G  62% /media/windows_c

která vypíše volné místo v kB/MB/GB.

Poznámka: Pro získání informací o značení disků v Linuxu si přečtěte kapitolu Disky a mechaniky CD/DVD.

Každý soubor a adresář3) má svého vlastníka. Standardně je vlastníkem souboru uživatel, který ho vytvořil. Soubory pak lze vytvářet pouze v adresářích, kde k tomu má uživatel oprávnění. Toto pravidlo neplatí pouze pro tzv. superuživatele4) - ten může přistupovat ke všem souborům a adresářům bez omezení. Více o přístupových právech viz. kapitola Definování přístupových práv.

cd

cd slouží ke změně pracovního adresáře. Pracovním adresářem se rozumí adresář, ve kterém se uživatel momentálně nachází a k jehož souborům hodlá primárně přistupovat.
Následujícím příkazem nastavíte adresář /opt/games jako pracovní.

cd /opt/games

Příkaz

cd sauerbraten

Vás přesune do podadresáře sauerbraten, který se nachází v aktuální pracovním adresáři.

V prvním zápise je použita tzv. absolutní cesta k adresáři, v druhém pak cesta relativní. Absolutní cesta vždy začíná lomítkem /, což je adresář na samém vrchodu adresářového stromu - tzv. kořenový adresář. Naproti tomu relativní cesta lomítkem nezačíná - zadaný adresář je hledán pouze v pracovním adresáři. Absolutní cesta adresáře sauerbraten je tedy /opt/games/sauerbraten.

pwd

pwd slouží k zjištění aktuálního pracovního adresáře.

pwd

/opt/games/sauerbraten  

ls

Pomocí ls lze získat obsah adresáře. Maximální dostupnou informaci získáme pomocí přepínačů -la.

ls -la /opt

drwxr-xr-x  8 root  root   4096 Aug 13 18:35 .
drwxr-xr-x 24 root  root   4096 Aug 27 17:04 ..
drwx------  2 root  root  16384 Jun 24 13:50 lost+found
drwxrwxrwx  5 root  root   4096 Aug 17 20:38 macky

První blok znaků označuje typ souboru5) a tzv. přístupová práva. Druhý údaj je počtem odkazů na daný soubor. Třetí a čtvrtý blok představují jméno vlastníka souboru a jeho defaultní skupinu. Pátý blok udává velikost souboru v bytech. Následuje datum a čas vytvoření souboru. Posledním údajem je pak název samotného souboru6).

du

du vypíše množství diskového prostoru alokovaného pro zvolený soubor či adresář.

Příkaz

du /home/macky

...
4128    /home/macky/Desktop
...
51900   /home/macky/.mozilla  
...

vypíše seznam souborů a adresářů obsažených v adresáři /home/macky spolu s údajem o velikosti v jednotkách 1kB diskového prostoru, který zabírají. Příkaz je také možné použít s přepínačem -h, který velikost souborů a adresářů vyjádří v jednotkách kB/MB/GB.

du -h /home/macky

...
4.1M    /home/macky/Desktop
...
51M     /home/macky/.mozilla
...

Příkaz

du -s /home/macky

naproti tomu vypíše pouze jedno číslo odpovídající velikosti diskového prostoru, který zabírá adresář /home/macky včetně podadresářů a souborů. Opět je možné použít přepínač -h.

du -sh /home/macky

566M    /home/macky

file

file slouží k zjištění typu (datového formátu) souboru.

file /opt/text.txt

text.txt: ASCII text

rm

Příkaz rm se používá pro odstranění souborů, souborových linků a celé adresářové struktury.

rm -ri /opt/games

Při specifikaci souborů je možné použít zástupné znaky.

rm -ri /opt/games/*.txt
rm -ri /opt/games/[A,B,C]*?

rmdir

rmdir je příkaz, kterým se mažou adresáře.

rmdir /opt/games

Stejně jako rm podporuje rmdir zástupné znaky.

touch

Příkaz touch slouží k vytvoření souboru.

touch text.txt

Poznámka: Soubor je možné vytvořit i pomocí textového editoru nebo přesměrováním výstupu jiného souboru. Klasickým případem je uložení výstupu manuálových stránek do souboru.

man rmdir > manualove_stranky_mrdir.txt

mkdir

mkdir slouží k vytvoření nových adresářů.

mkdir /opt/games

cp

cp slouží ke kopírování souborů.

cp zdrojove_soubory cilovy_soubor_nebo_adresar

Pomocí výše uvedené syntaxe překopírujeme všechny soubory do cílového adresáře. Příkaz cp podporuje také zástupné znaky.

mv

mv slouží k přesunu popř. přejmenování souborů / adresářů7). Příkaz mv podporuje zástupné znaky.

mv -f zdrojovy_soubor cilovy_soubor
mv -f zdrojovy_adresar cilovy_adresar
mv -f seznam_zdrojovych_souboru cilovy_adresar

Poznámka: Přepínač -f přepíše případně existující soubory.

find

Pomocí find je možné nalézt umístění zvoleného souboru či adresáře. Tento příkaz podporuje zástupné znaky.

find adresar_k_prohledani -name "jmeno_hledaneho_souboru_nebo_adresare"

Následující příkaz vyhledá všechny textové soubory začínající velkým písmenem v celém systému8).

 find / -name "[A-Z]*.txt"

Jestliže chcete omezit vyhledávání na soubory, které někdo modifikoval před pocet_dnu dny, použijte přepínač -atime.

find / -atime pocet_dnu -name "*.txt"

Jestliže chcete omezit vyhledávání na soubory, ke kterým někdo přistupoval před pocet_dnu dny, použijte přepínač -mtime.

find / -mtime pocet_dnu -name "*.txt"

locate

Příkaz locate umožňuje podobně jako find lokální vyhledávání souborů. Narozdíl od find však locate vyhledává soubory na základě vlastní databáze. Výhodou tohoto přístupu je vyšší rychlost vyhledávání. Na druhou stranu je však třeba pravidelně aktualizovat databázi. Jestliže byste totiž chtěli vyhledat soubor / adresář, který byl vytvořen po aktualizaci této databáze, skončilo by vyhledávání neúspěchem.

locate [A-Z]*.txt

Databázi je pak možné aktualizovat z účtu superuživatele pomocí příkazu

updatedb

ln

ln vytváří tzv. linky na soubory. Rozlišujeme dva typy linků - pevné a symbolické. Unixové systémy původně používaly pevné linky, ke kterým později přibyly jako alternativa symbolické linky. Důvodem byla četná omezení pevných linků (viz. níže).
Symbolický link je položka v adresáři, která obsahuje cestu k souboru popř. adresáři, na který se odkazuje. Pokud tedy např. provádíte „editaci“ symbolického linku, který se odkazuje na soubor, provádíte v skutečnosti editaci tohoto souboru. Pomocí symbolických linků je možné odkazovat i na soubory a adresáře, které se nacházejí na jiném systému souborů9). Narozdíl od pevného linku může symbolický link odkazovat i na neexistující soubor či adresář.
Pevný link je odkazem přímým - není tvořen samostatným souborem ale pouze odkazem v adresáři. Pevný link může odkazovat pouze na soubor a děje se tak nikoliv pomocí cesty ale prostřednictvím tzv. inode10).

Nastavením práv uživatele k linku nedochází automaticky k nastavení práv k příslušnému souboru. Práva je třeba nastavit zvlášť.

Symbolický link vytvoříte pomocí

ln -s zdrojovy_soubor nazev_linku

pevný link pak pomocí

ln zdrojovy_soubor nazev_linku

Výhoda linků je zřejmá - umožnují elegantně obcházet potřebu kopírování souborů, jestliže je potřebujete na „dvou“ místech. To přispívá k úspoře místa na disku a konzistentnosti systému.

Poznámka: Pro vytváření symbolických linků je zapotřebí použít absolutní cestu.

mc

mc je zkratka pro Midnight Commander. Nejedná se ani tak o klasický příkaz jako spíše o aplikaci - klon známého Northon Commander z dob nadvlády MS-DOSu. Tato aplikace umožňuje vytváření, přesun, přejmenování a mazání souborů a adresářů. mc má také vestavěný editor pro modifikaci souborů a obsahuje jednoduchého FTP klienta.

mc

Poznámka: Jestliže mc není nainstalován, lze ho snadno přidat jako superuživatel pomocí

yum -y install mc

cat

cat slouží k výpisu obsahu souboru.

cat text.txt

Výpis obsahu souboru je možné přesměrovat do nového souboru.

cat text.txt > novy_textovy_soubor.txt

more

more slouží podobně jako cat k výpisu obsahu souborů. Narozdíl od cat však more obsah souboru „rozobrazovkuje“. To znamená, že obsah souboru nevypíše najednou, ale rozdělí jej. Na obrazovku vypíše vždy část textu a výpis pokračuje až po stisku klávesy. Tento příkaz se používá zejména při prohlížení dlouhých textových souborů.

more text.txt

less

Ačkoliv je název možná trochu matoucí, umí toho příkaz less více než příkaz more. Příkaz less stejně jako more provede „rozobrazovkování“ výpisu obsahu souboru, avšak tento výpis je možné volně procházet pomocí kláves Page Up a Page Down.

less text.txt

grep

grep slouží k vyhledávání textových řetězců v souborech. Velice často se pojí s příkazy pro výpis textu.

Následující příkaz vypíše všechny řádky souboru text.txt, které obsahují sekvenci znaků inux.

cat text.txt | grep inux

Jestliže použijete přepínač -v, budou vypsány naopak všechny řádky, které daný řetezec neobsahují.

cat text.txt | grep -v inux

Počet řádek, které obsahují hledaný řetězec, získáte pomocí přepínače -c.

cat text.txt | grep -c inux

Pro jmenný seznam souborů, které obsahují alespoň jednou hledaný řetězec, použijte přepínač -l.

grep -l *.txt

Pomocí přepínače -i docílíte, že vyhledávání není citlivé na malá a velká písmena.

cat text.text | grep -i inux

head vypíše prvních pocet_radku řádků daného souboru.

head -pocet_radku text.txt

tail

tail je analogií příkazu head - vypíše posledních pocet_radku řádků daného souboru.

tail -pocet_radku text.txt

cut

cut slouží k výpisu specifikovaných částí (tzv. polí) zvoleného souboru. Pole mohou být definována pozicí znaků v souboru nebo pomocí tzv. oddělovačů.

Uvažujme následující soubor text.txt.

Josef;Novak;Praha;607924002
Jan;Benes;Brno;777523000
Petr;Dvorak;Ostrava;603111222

Pomocí příkazu

cut -c5 text.txt

získáme z každé řádky 5. znak. Příkazem

cut -c1,3,5 text.txt

pak vyberete z každé řádky 1., 3. a 5. znak. Sekvenci 1. až 5. znaku z každého řádku lze získat pomocí

cut -c1-5 text.txt

Budeme-li chtít pole definovat pomocí oddělovače ;, je třeba použít přepínače -d (specifikuje oddělovač) a -f (specifikuje pole). Příjmení osob ze souboru text.txt tak získáte pomocí příkazu

cut -d';' -f2 text.txt

Poznámka: Vzhledem k tomu, že oddělovač ; má v Linuxu speciální význam, musí být uzavřen do uvozovek (více viz. kapitola Použití závorek a zpětného lomítka).

Jestliže v daném souboru chcete zpracovat pouze řádky, které obsahují oddělovač, použijte přepínač -s. Řádky, které neobsahují znak oddělovače budou ignorovány.

cut -s -d';' -f2 text.txt

join

Příkaz join porovná dva setříděné soubory a vypíše společné řádky. Každá ze společných řádek se na výstupu objeví pouze jednou (duplicitní řádky jsou na výstupu odstraněny). Uvažujme soubor text1.txt

Josef;Novak;Praha;607924002
Jan;Benes;Brno;777523000
Petr;Dvorak;Ostrava;603111222

a soubor text2.txt

Petr;Dvorak;Ostrava;603111222
Pavel;Strnad;Plzen;604268954

Výsledkem příkazu

join text1.txt text2.txt > text.txt

bude soubor text.txt.

Petr;Dvorak;Ostrava;603111222

tr

tr umožňuje nahrazovat popř. mazat vybrané znaky.

Uvažujme soubor text1.txt.

Josef;Novak;Praha;607924002
Jan;Benes;Brno;777523000
Petr;Dvorak;Ostrava;603111222

Příkaz

tr JNPBDO jnpbdo < text1.txt > text2.txt

vytvoří soubor text2.txt, ve kterém budou velká písmena nahrazena písmeny malými.

josef;novak;praha;607924002
jan;benes;brno;777523000
petr;dvorak;ostrava;603111222

Systematičtější řešení tohoto problému přestavuje příkaz

tr [A-Z] [a-z] < text1.txt > text2.txt

Jestliže chcete namísto záměny znaků provést jejich výmaz, stačí použít přepínač -d.

tr -d ';' < text1.txt > text2.txt

Poznámka: Vzhledem k tomu, že oddělovač ; má v Linuxu speciální význam, musí být uzavřen do uvozovek (více viz. kapitola Použití závorek a zpětného lomítka).

wc

Příkaz wc slouží k určení počtu znaků (přepínač -c), slov (přepínač -w) či řádek (přepínač -l) v souboru.

wc -c text.txt

25

comm

comm porovnává dva setříděné soubory. Výstupem příkazu jsou tři sloupce - první sloupec obsahuje řádky obsažené pouze v prvním souboru, druhý sloupec řádky obsažené pouze v druhém souboru a třetí sloupec obsahuje společné řádky.

comm text1.txt text2.txt

Jestliže chcete potlačit výstup některého ze sloupců, použijte jako přepínač jeho pořadové číslo.

comm -1 -2 text1.txt text2.txt

sort

sort umožňuje třídit a slučovat soubory. Syntaxe příkazu je následující

sort pripadne_prepinace nazev_souboru

kde nazev_souboru představuje název souboru popř. souborů oddělených mezerou.

Níže uvedená tabulka uvádí seznam nejdůležitějších přepínačů příkazů sort.

Přepínač Popis
bez přepínače setřídí soubory
-c zkontroluje, zda-li je soubor setříděn
-m spojuje soubory za předpokladu, že jsou již setříděné
-u odstraní případné duplicitní řádky (jedinečnost řádek je dána jedinečností třídícího klíče)
-d setřídí soubor podle abecedního pořádku (používá pouze písmena, číslice a mezery)
-f ignoruje rozdíl mezi velkými a malými písmeny
-r třídí sestupně (implicitně je nastaveno vzestupné třídění)
-toddelovac specifikuje znak oddělovače
+zacatek určuje, že třídící klíč začíná polem číslo zacatek (první pole má pořadové číslo 0)
-konec určuje, že třídící klíč končí polem číslo konec (první pole má pořadové číslo 0)
sort -dfr text.txt
sort -t';' +0 -2 text.txt
sort -m  text1.txt text2.txt

uniq

uniq porovnává sousední řádky souboru. Tento příkaz slouží k odstraňování duplicitních řádků na výstupu a výpisu duplicitních popř. jedinečných řádků. Příkaz uniq předpokládá, že je daný soubor setříděn.

Příkaz

sort text.txt | uniq

vypíše obsah souboru text.txt, přičemž na výstupu odstraní duplicitní řádky.

Příkaz

sort text.txt | uniq -u

výpíše jedinečné řádky souboru text.txt.

Příkaz

sort text.txt | uniq -d

naopak vypíše duplicitní řádky (každý duplicitní řádek pouze jednou), které jsou obsaženy v souboru text.txt.

Pomocí přepínače -c lze zjistit, kolikrát je daný řádek obsažen ve vstupním souboru.

sort text.txt | uniq -c

Jak již bylo zmíměno v kapitole Práce se soubory, každý soubor a adresář má svého vlastníka. Ten pak určuje, jaké operace mohou s těmito soubory / adresáři provádět ostatní uživatelé. Standardně se jedná v případě souborů o právo čtění (read), zápisu (write) a spouštění (execute); v případě adresáře pak o právo prohlížení obsahu (ekvivalent práva čtení), manipulace se soubory (ekvivalent práva zápisu) a právo zobrazovat informace o souborech (ekvivalent práva spouštění)11). Při přidělování práv pak rozlišujeme následující tři skupiny uživatelů: (1) vlastníka souboru / adresáře, (2) tzv. skupinu uživatele a (3) ostatní uživatele. Práva může jednotlivým skupinám přidělit vlastník12). Přehled práv, která se váží k vybranému souboru / adresáři lze získat pomocí příkazu ls.
Předpokládejme, že příkaz

ls -la /home/macky/text.txt

zobrazil výpis

´-rwxr-xr-x 1 macky skupina 23056 čec 26 23:10 Derivates.tex

První znak - (pomlčka) značí, že se jedná o soubor13). Následující trojice znaků značí práva vlastníka souboru - jedná se o právo čtení (read), zápisu (write) a spouštění (execute). Další trojice definuje práva skupiny a to jmenovitě právo čtení a spouštění. Ostatním uživatelům byla opět přidělena práva čtení a spouštění. Dále nám výpis říká, že vlastníkem souboru je uživatel macky, který náleží do skupiny skupina.

chgrp

Příkaz chgrp slouží ke změně vlastníků specifikovaných souborů / adresářů. Změnu skupiny může provést pouze vlastník popř. superuživatel. Tento příkaz podporuje zástupné znaky.

chgrp nova_skupina jmeno_souboru_nebo_adresar

chown

Příkaz chown je podobný výše uvedenému příkazu chgrp s tím rozdílem, že slouží ke změně vlastníka souboru / adresáře.

chown novy_vlastnik jmeno_souboru_nebo_adresare

chmod

Pomocí příkazu chmod lze měnit měnit práva přiřazená jednotlivým uživatelům popř. skupinám uživatelů. Je možné použít dva způsoby zápisu.
V prvním případě nejprve specifikujete skupinu uživatelů, kterou následuje znak plus (+) popř. mínus (-) doprovázený výčtem práv, která mají být přidána popř. odebrána. Co se skupin uživatelů týče, používají se písmena u (user) pro označení vlastníka, g (group) pro označení skupiny a o (other) pro označení ostatních uživatelů. Práva pak označujeme písmeny r (read) pro čtení, w (write) pro zápis a x (execute) pro spuštění.
Následující příkaz přidá vlastníkovi a jeho skupině práva čtení a zápisu pro soubor soubor, který se nachází v pracovním adresáři.

chmod ug+rw soubor

Druhá varianta zápisu využívá čísel.

čtení zápis spouštění
vlastník 400 200 100
skupina 40 20 10
ostatní 4 2 1

Výsledná práva jsou dána součtem čísel uvedených v tabulce. Například příkaz

chmod 750 soubor

nastaví vlastníkovi všechna práva, skupině vlastníka právo čtení a spouštění. Ostatním uživatelům nebyla přidělena žádná práva. Výsledné číslo 750 je tedy součtem čísel 400, 200, 100, 40 a 10.

umask

Pomocí příkazu umask se nastavují implicitní práva pro nově vytvořené soubory. Syntaxe tohoto příkazu je podobná jako v případě chmod s číselnou notací. Zásadní rozdíl je v tom, že čísla neurčují práva, která se mají přidat ale naopak práva, která mají odebrána. Například

umask 027

ponechává vlastníkovi všechna práva, skupině vlastníka pak práva čtení a spouštění a ostatním uživatelům jsou odebrána všechna práva.
Standardně jsou tato implicitní práva specifikována v souboru /etc/bashrc, nicméně každý uživatel si toto nastavení může změnit zápisem do souboru .bashrc, který se nachází v jeho domovském adresáři14).

Procesem budeme pro účely této kapitoly rozumnět jakýkoliv spuštěný program. Každému procesu jsou pak jádrem přiřazovány systémové zdroje (tj. procesor a paměť).

ps

Pomocí příkazu ps aux získáte seznam všech spuštěných procesů

ps aux

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   1992   676 ?        Ss   20:24   0:00 init [5]
root         2  0.0  0.0      0     0 ?        SN   20:24   0:00 [ksoftirqd/0]
root         3  0.0  0.0      0     0 ?        S    20:24   0:00 [watchdog/0]
root         4  0.0  0.0      0     0 ?        S<   20:24   0:00 [events/0]
root         5  0.0  0.0      0     0 ?        S<   20:24   0:00 [khelper]
root         6  0.0  0.0      0     0 ?        S<   20:24   0:00 [kthread]
root      2045  0.0  0.8  11480  4636 ?        S    20:24   0:00 python ./hpssd.py
root      2057  0.0  0.5   9272  2908 ?        Ss   20:24   0:00 cupsd
postgres  2143  0.0  0.6  20232  3108 ?        S    20:25   0:00 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data
postgres  2145  0.0  0.1  10020   560 ?        S    20:25   0:00 postgres: logger process
postgres  2147  0.0  0.1  20232   852 ?        S    20:25   0:00 postgres: writer process
postgres  2148  0.0  0.1  11020   548 ?        S    20:25   0:00 postgres: stats buffer   process
postgres  2149  0.0  0.1  10252   728 ?        S    20:25   0:00 postgres: stats collector process
macky     2956  0.0  2.1  52884 11104 ?        Sl   20:36   0:00 xmms -e
macky     3202  0.4  2.7  88864 14324 ?        S    21:16   0:00 gaim
...

Z výše uvedeného výpisu lze pro každý proces zjistit uživatele, který jej spustil (položka USER) a identifikační číslo procesu (položka PID). Vzhledem k tomu, že tento výpis může být vcelku dlouhý, je vhodné použít také příkaz less popř. grep. Například seznam všech procesů spuštěných uživatelem macky získáte pomocí příkazu

ps aux | grep macky

top

Dalším z příkazů, který souvisí s procesy, je top. Tento příkaz je velmi podobný příkazu ps. Výstupem příkazu top je seznam procesů, které zabírají nejvíce systémových prostředků (řazení procesů je dáno zatížením procesoru). Tento seznam se neustále aktualizuje - v případě, že jej chcete ukončit, stikněte klávesu q.

top

kill

Příkaz kill slouží k ukončení procesů15). Jeho syntaxe je následující

kill pid_procesu

PID daného procesu lze získat pomocí příkazu

ps aux

Každý uživatel může „zabít“ svoje procesy; superuživatel pak může zabít jakýkoliv proces16).

Poznámka: Příkaz spuštěný z příkazové řádky lze ukončit pomocí klávesové zkratky Ctrl + Z.

nice a renice

Systémové prostředky (např. procesorový čas a paměť) jsou „vzácné“, a proto jsou jádrem OS přiřazovány jednotlivým procesům. Každý proces má tak tyto prostředky k dispozici po určité kvantum času. Po uplynutí tohoto časového kvanta jsou systémové prostředky uvolněny ve prospěch jiného procesu.

Pomocí příkazů nice a renice je možné procesům nastavovat přístup k procesorovému času. To, jakou měrou využívá proces procesorový čas, vyjadřuje „nice value“ (tzv. „ohleduplnost“). Pomocí „nice value“ tedy určujeme prioritu procesu. Tato veličina může nabývat hodnot od -20 (vysoká priorita procesu) do 19 (nízká priorita procesu).

Běžný uživatel může „ohleduplnost“ svých procesů pouze zvýšit; superuživatel může nastavit „nice value“ na libovolnou hodnotu.

Pomocí příkazu nice je možné nastavit hodnotu „ohleduplnosti“ nově spouštěného příkazu. Příkaz nice zvýší popř. sníží „nice value“ o hodnotu inkrementu, který následuje za přepínačem -n. Výsledná priorita procesu je dána součtem tohoto inkrementu a priority shellu, ze kterého byl příkaz spuštěn. Následující syntaxí snížíte prioritu (tj. zvýšíte „ohleduplnost“) procesu o 5.

nice -n 5 /bin/nejaky_prikaz

Prioritu již spuštěného přikazu lze změnit pomocí renice. Zatímco příkaz nice změnil prioritu procesu o inkrement, příkaz renice nastavuje prioritu přímo na hodnotu, která ho následuje. Následující příkaz nastaví prioritu procesu s PID pid_procesu na hodnotu 10.

renice 10 pid_procesu

Hodnotu PID daného procesu lze získat např. pomocí ps aux.

Poznámka: Přikazy nice a renice byly představeny v 70.letech. Při dnešním výkonu procesorů však tyto příkazy ztrácí význam. Úzkým hrdlem systému jsou pevné disky - jejich využití z pohledu procesů však pomocí přikazů nice a renice nenastavíte.

Proměnné

Proměnné v unixových systémech nemají přiřazen typ proměnné - všechny proměnné považuje shell za proměnné typu text. Proměnná se vytvoří specifikací jejího jména a přiřazením hodnoty a není ji tak potřeba před použitím deklarovat. Jméno proměnné musí vždy začínat písmenem. K hodnotám uloženým v proměnné se přistupuje pomocí znaku dolar $, který je následován jménem proměnné.

echo není „matematickým“ příkazem - slouží k výpisu textu popř. hodnoty proměnné. Právě díky jeho schopnosti vypsat hodnotu proměnné je však často využíván ve spojení s níže uvedenými příkazy.

x=5
echo $x

Poznámka: Mezi jménem proměnným, znakem = a hodnotou proměnné nesmí být mezera ani tabelátor.

Po definování existuje proměnná v shellu až do jeho ukončení. V případě, že chcete proměnnou odstranit před ukončením shellu, použijte příkaz unset.

unset x

Kromě hodnot proměnných je možné příkaz echo použít k výpisu textu.

echo "Hello World!"

x=10
echo "Hodnota promenne x je: " $x

Hodnotu proměnné je možné zadávat také interaktivně. K tomuto účelu slouží příkaz read, který lze použít k zadání hodnoty proměnné přímo z příkazové řádky.

read x
10
echo $x
10

Jestliže chcete přiřadit hodnotu proměnné na základě výstupu příkazu použijte syntaxi

x=`prikaz`

Globální proměnné

Proměnné definované podle výše uvedeného textu budou definovány pouze v aktuálním shellu. Jestliže tedy otevřete nové okno s příkazovou řádkou, tuto proměnnou v něm „neuvidíte“. Hovoříme o tzv. lokální proměnné. Globální proměnnou, tj. proměnnou „viditelnou“ také z jiného než aktuálního shellu, se stane až použitím příkazu export.

export $promenna

Tip: Jestliže potřebujete, aby proměnné byly globálně definované již po startu systému, je vhodné je umístit do souboru /etc/bash.bashrc.

$promenna = hodnota
export $promenna

expr

Hodnotu jednoduchých výrazů lze vypočítat pomocí příkazu expr. Tento příkaz umí pracovat se základními matematickými ( +, -, *, /, %), logickými ( & - AND, | OR) a porovnávacími (=, <, >, , , !=) operátory. Příkaz expr zvládá početní operace pouze s celými čísly.

echo `expr 1 '<' 2`
1

echo `expr 1 '>' 2`
0

echo `expr 5 '%' 2`
1

echo `expr 1 '&' 0`
0

x = `expr 1 '+' 6`
echo $x
7

Poznámka: Řada operátorů má v Linuxu speciální význam. Proto je třeba tyto operátory pomocí apostrofů „ochránit“ před interpretací shellem (více viz. kapitola Použití závorek a zpětného lomítka).
Vzhledem k tomu, že proměnnými je v unixových systémech nakládáno jako s řetězcem, je třeba použít příkaz expr, jestliže chcete, aby bylo s jejich hodnotami nakládáno jako s čísly.

x=1
y=$x+1
echo $y
1+1
x=1
y=`expr $x+1`
echo $y
2

Příkaz expr je také možné použít pro práci s textovými řetězci. Např. délku řetězce lze určit pomocí

echo `expr length "Fedora Core"`
11

Následující příkaz vybere specifikovaný podřetězec.

echo `expr substr "Fedora Core" 8 4`
Core

Pomocí níže uvedeného příkazu je možné otestovat, zda-li řetězec obsahuje hledaný podřetězec. Příkaz standardně vrací číslo první pozice znaku řetezce, který se shoduje s některým ze znaků podřetězce. V případě, že se řetězec a podřetězec neshodují ani v jednom znaku, vrátí příkaz hodnotu nula.

echo `expr index "Fedora Core" "Core"`
2

echo `expr index "Fedora Core" "Linux"`
0

bc

bc je jazyk pro matematické výpočty. Komunikace s bc probíhá interaktivně. Podporu desetinných čísel zapnete pomocí přepínače -l. Práci s bc ukončíte pomocí příkazu quit.

bc -l

bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty`.
1/3
.333333333333333333333
1 < 0
0
5*(1/3+1)
6.66666666666666666666
quit

Pro tisk z příkazové řádky se používají příkazy lp (System V) a lpr (BSD). V Linuxu jsou z důvodu kompatibility obsaženy oba příkazy. Jedná se však o stejnou funkcionalitu tiskového systému CUPS, která se liší pouze syntaxí. Následují text se zaměřuje na lpr a s ním související příkazy.

Z příkazové řádky je možné přímo tisknout textové a postscriptové soubory17). Jestliže chcete v příkazové řádce např. vytisknout textový soubor, stačí zadat

lpr text.txt

Tento příkaz zařadí tiskovou úlohu do fronty výchozí tiskárny. Jestliže máte tiskáren více, je možné požadovanou tiskárnu specifikovat pomocí přepínače -P bezprostředně následovaného jménem tiskárny.

lpr -Pjmeno_tiskarny text.txt

Seznam dostupných tiskáren získáte pomocí příkazu

cat /etc/printcap

tiskarna|HP Inkjet:rm=localhost.localdomain:rp=tiskarna

Dle výše uvedeného výpisu je k dispozici pouze jedna tiskárna, která se jmenuje tiskarna.

Seznam úloh, které se momentálně nachází v tiskové frontě získáte pomocí příkazu lpq.

lpq

Rank  Owner  Job  File(s)           Total Size
1st   macky  3    (standard input)  7768 bytes
lpq -Pjmeno_tiskarny

Rank  Owner  Job  File(s)           Total Size
1st   macky  3    (standard input)  7768 bytes

Konkrétní úlohu je možné z tiskové fronty odstranit příkazem lprm.

lprm cislo_tiskove_ulohy
lprm -Pjmeno_tiskarny cislo_tiskove_ulohy

Parametr cislo_tiskove_ulohy je číslo uvedené ve sloupci Job na výpisu příkazu lpq (viz. výše).

Tiskové úlohy konkrétního uživatele odstraníte pomocí

lprm jmeno_uzivatele

popř.

lprm -Pjmeno_tiskarny jmeno_uzivatele

Všechny tiskové úlohy lze odstranit příkazem

lprm - 

popř.

lprm - -Pjmeno_tiskarny

Poznámka: Tiskové úlohy jiného uživatele může odstranit pouze superuživatel.

Tip: Manuálové stránky lze tisknout příkazem

man klicove_slovo | col -b | lpr -Pjmeno_tiskarny

Počítač lze z účtu superuživatele vypnout pomocí příkazu

/sbin/shutdown -h now

a restartovat pomocí

/sbin/shutdown -r now

Jako běžný uživatel můžete pro restart použít příkaz

reboot

a pro vypnutí systému příkaz

poweroff

Poznámka: Příkazy reboot a poweroff nelze narozdíl od příkazu shutdown použít pro vzdálený restart / vypnutí počítače.

Alias umožňuje definovat souslednost příkazů a těm následně přiřadit jméno. Aliasy jsou svojí logikou velice blízké níže popisovaným funkcím. Základním rozdílem však je rychlost. Funkce je spouštěna přímo v aktuálním shellu, a proto je rychlejší než alias, který je spouštěn v „podshellu“. V praxi je však tento rozdíl nepodstatný.

Seznam všech aliasů definovaných ve Vašem systému zíkáte příkazem

alias

alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mc='. /usr/share/mc/bin/mc-wrapper.sh'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-ti'

Definovat nový alias lze snadno pomocí následující syntaxe

alias turnoff='echo "Turning off the computer..."; /sbin/shutdown -h now'

Pokud výše uvedený alias spustíte z účtu superuživatele, dojde k vypnutí počítače.

turnoff

Shell je možné použít jako programovací jazyk. Není sice tak všestranný jako např. Java nebo C++, ale přesto je možné s jeho využitím řešit řadu problémů. Následující kapitola předpokládá znalost základních příkazů a představuje tak zakončení této kapitoly.

Skript

V souvislosti s shellem a programováním se často mluví o tzv. skriptu. Skript není nic jiného než textový soubor, který má pro vybrané skupiny uživatelů nastaveno právo spouštění. Tento soubor obsahuje posloupnost příkazů prováděných shellem - ten soubor “čte” a provádí postupně jednotlivé příkazy. V rámci jednoho skriptu je možné se odvolávat na jiné skripty, což umožňuje konstrukci poměrně složitých struktur.

Argumenty předávané skriptu

Skriptu je možné předávat hodnoty pomocí argumentů. K tomu slouží deset tzv. pozičních parametrů, které odpovídají speciálním shellovským proměnným 09. Proměnná 0 přitom obsahuje první slovo příkazové řádky, což je jméno skriptu. Proměnné 19 pak obsahují hodnoty předávaných argumentů. Dalšími užitečnými speciálními proměnnými jsou # (počet argumentů) a * (vypíše všechny argumenty).

Vytvořte následující soubor, který pojmenujte součet.

gedit ~/soucet

Do souboru vložte následující řádky

# Skript pro soucet dvou cisel
echo "Soucet cisel " $1 " a " $2 " je " `expr $1 + $2` "."
echo "Pocet zadanych paremetru je " $# "."
echo "Jedna se o nasledujici parametry: " $*
exit

Soubor soucet uložte a nastavte právo spuštění

chmod u+x ~/soucet

a daný skript spusťte.

~/soucet 7 8

Soucet cisel  7  a  8  je  15 .
Pocet zadanych parametru je  2.
Jedna se o nasledujici parametry:  7 8

Poznámka: Teoreticky by měl každý skript končit příkazem exit. Skript však skončí i bez tohoto příkazu tím, že se provede poslední řádek daného skriptu.

Příkazy větvení

if

Syntaxe příkazu if je velice podobná jiným programovacím jazykům. V Linuxu jsou k dispozici následující tři typy syntaxí.

if vyraz
then
   prikazy
fi
if vyraz
then
   prikazy
else
   prikazy
fi
if vyraz_1
then
  prikazy
elif vyraz_2
then
  prikazy
else
  prikazy
fi

Výraz vyraz nepředstavuje výraz typu boolean, ale návratovou hodnotu daného výrazu.

# ilustracni priklad
if x=`expr 1 '+' 1`
then
  echo "pravda"
else
  echo "nepravda"
fi
exit

./skript
pravda
  # ilustracni priklad
if x=`expr 1 '+' a`
then
  echo "pravda"
else
  echo "nepravda"
fi
exit

./skript
expr: non-numeric argument
nepravda

Jestliže chcete, aby výraz vyraz představoval výraz typu boolean, je zapotřebí použít příkaz test.

# ilustracni priklad
if test 0 -le 1
then
  echo "pravda"
else
  echo "nepravda"
fi
exit

./skript
pravda
# ilustracni priklad
if test 2 -le 1
then
  echo "pravda"
else
  echo "nepravda"
fi
exit

./skript
nepravda

Vedle operátoru -le (menší nebo rovno) je také možné používat operátory v níže uvedené tabulce.

Operátor Význam
-le je menší nebo rovno
-lt je menší než
-ge je větší nebo rovno
-gt je větší než
= je rovno
!= je různé od

Dále je možné používat také speciální „operátory“, které testují status souboru. Následující skript např. zjistí, zda-li v pracovním adresáři existuje soubor text.txt.

# ilustracni priklad
if test -f "text.txt"
then
  echo "pravda"
else
  echo "nepravda"
fi
exit

Následující tabulka představuje kompletní seznam těchto speciálních přepínačů.

Operátor Význam
-e existuje
-f existuje a je obyčejným souborem
-r existuje a lze jej číst
-w existuje a je možné do něj zapisovat
-x existuje a je možné jej spustit
-s existuje a má nenulovou velikost
-d existuje a je adresářem
case

Tuto funkci lze použít k zjednodušení komplexnějších kontrukcí obsahujících podmínku. Syntaxe je obdobná jako v jiných programovacích jazycích.

# NAZEV SKRIPTU: vypocti
# ilustracni priklad
case $2 in
  '+' | soucet) expr $1 '+' $3;;
  '-' | rozdil) expr $1 '-' $3;;
  '*' | soucin) expr $1 '*' $3;;
  '/' | podil ) expr $1 '/' $3;;
  *) echo "Neznamy operator!";;
esac
exit

./vypocti 6 / 2
3

./vypocti 6 podil 2
3

./vypocti 6 deleno 2
Neznamy operator!

Výše uvedený skript vyžaduje tři parametry. Skript podle hodnoty druhého parametru určí typ matematické operace. Následně provede příslušnou operaci s prvním a třetím parametrem. V kódu je také ošetřen případ, kdy druhý parametr nenabyde žádné z očekávaných hodnot.

Konstruktory && a ||

Konstruktory && a || lze v jednodušších případech použít namísto příkazu if.

Konstruktor && provede příkaz, který ho následuje, jestliže je hodnota předchozího příkazu nula.

uname | grep Linux && echo "Pouzivate system typu Linux."

Konstruktor || je podobný konstruktoru && s tím rozdílem, že se následující příkaz provede pouze v případě, že hodnota předcházejícího příkazu bude různá od nuly.

uname -m | grep i686 || echo "Pouzivate jinou nez i686 architekturu."

Cykly

for

Příkaz for má několik možných syntaxí.

Následující syntaxe způsobí, že cyklus proběhne tolikrát, kolik je zadáno parametrů, přičemž proměnná x nabude postupně hodnot všech parametrů. Níže uvedený příklad postupně vypíše hodnoty jednotlivých parametrů skriptu.

# ilustracni priklad
for x
do
  echo "Parametr: $x"
done

./skript 1 2 3
Parametr: 1
Parametr: 2
Parametr: 3

Níže uvedený cyklus proběhne tolikrát, kolik je uvedeno hodnot za klíčovým slovem in. Při průchodu cyklem bude nabýt proměnná x postupně nabývat těchto hodnot.

# ilustracni priklad
for x in `ls -d *`
do
  echo "V pracovnim adresari se nachazi soubor / adresar: "$x
done
while

Příkaz while nejprve vyhodnotí výraz vyraz. V případě, že je vyraz roven nule, provede se tělo cyklu. Cyklus bude probíhat tak dlouho, dokud nebude hodnota výrazu vyraz různá do nuly. V tomto případě bude skript pokračovat prvním řádkem za cyklem.

while vyraz
do
  prikazy
done

Ve výrazu vyraz je možne používá následující operátory:

Operátor Význam
-le je menší nebo rovno
-lt je menší než
-ge je větší nebo rovno
-gt je větší než
= je rovno
!= je různé od

Následující skript vypíše čísla od 1 do 100.

# NAZEV SKRIPTU: skript
# ilustracni priklad
a=1
while [ $a -le 100 ]
do
  echo $a
  a=`expr $a '+' 1`
done
until

Příkaz until je velice podobný příkazu while. Jediný rozdíl je v tom, že tělo cyklu bude probíhat tak dlouho, dokud logická hodnota výrazu vyraz nebude nulová.

until vyraz
do
  prikazy
done

V rámci příkazu until lze používat naprosto stejné operátory jako v případě while. Následující ilustrační skript vypíše čísla od 110 do 100.

# NAZEV SKRIPTU: skript
# ilustracni priklad
a=111
until [ $a = 100 ]
do
  a=`expr $a '-' 1`
  echo $a
done
Přerušení cyklu

K přerušení cyklu slouží příkazy break a continue.

Příkaz break slouží k opuštění těla cyklu - skript tak pokračuje prvním řádkem za tělem cyklu.

# NAZEV SKRIPTU: skript
# ilustracni priklad
for x in $*
do
  case $x in
     [0-9]) echo $x "je ciselny parametr." ; expr $x '*' $x;;
         *) echo $x "neni ciselny parametr!" ; break;;
  esac
done
exit

./skript 8 9
8 je ciselny parametr.
64
9 je ciselny parametr.
81

./skript 8 a 9
8 je ciselny parametr.
64
a neni ciselny parametr! 

Příkaz continue narozdíl od příkazu break neopustí tělo cyklus, ale pouze opustí aktuální cyklus a pokračuje dalším cyklem.

# NAZEV SKRIPTU: skript
# ilustracni priklad
for x in $*
do
  case $x in
    [0-9]) echo $x "je ciselny parametr." ; expr $x '*' $x;;
        *) echo $x "neni ciselny parametr!" ; continue;;
  esac
done
exit

./skript 8 9
8 je ciselny parametr.
64
9 je ciselny parametr.
81

./skript 8 a 9
8 je ciselny parametr.
64
a neni ciselny parametr!
9 je ciselny parametr.
81  

Funkce

V shellu je možné definovat funkce, které umožňují redukovat množství kódu a tím přispět k jeho zpřehlednění. Funkce se chová jako libovolný příkaz. To znamená, že je schopna přebírat hodnoty argumentů a vrací hodnotu.

jmeno_funkce ()
{
  prikazy
}

Následující funkce vyhledá soubory a adresáře. Jako prvni parametr je zadána část jména hledaného souboru popř. adresáře. Ostatní parametry představují adresáře, které mají být prohledány. Je-li zadán pouze první parametr, prohledává se celý systém souborů.

# NAZEV SKRIPTU: skript
# ilustracni priklad
searchfile()
{
  case $# in
    0)
      echo "Please specify a file / directory to be found.";;
    1)
      echo "Searching in root directory."        
      find / -name "*$1*";;
    *)
      for x in $2 $3 $4 $5 $6 $7 $8 $9
      do
         echo "Searching in directory "$x"."
         find $x -name "*$1*"
      done;;
  esac
  return 0
}

Poznámka: Funkce se narozdíl od skriptů ukončují příkazem return, který je následován tzv. návratovou hodnotou. Standardně se jako návratová hodnota používá nula.

Aby bylo možné funkci používat, je třeba nejprve načíst soubor, který obsahuje definice funkcí. Přesuňte se do adresáře, který obsahuje tento soubor a do příkazové řádky zadejte

. jmeno_souboru_s_funkcemi

Po té je možné funkci spouštět přímo z příkazové řádky jako běžný příkaz. Výše definovanou funkci je možné např. spustit pomocí

searchfile txt /opt /home

...
text.txt
...

Jestliže chcete, aby se určité příkazy, skripty nebo aliasy automaticky spouštěly při přihlášení se do systému, je třeba je přidat do konfiguračních souborů.
Konkrétně se jedná soubor .bashrc, který se nachází v domovském adresáři uživatele, a soubor rc.local, který se nachází v adresáři /etc/rc.d. V případě, že chcete, aby se příkaz, skript nebo alias spouštěly pouze při přihlášení určitého uživatele, modifikujte .bashrc, který se nachází v jeho domovském adresáři. Jestliže naopak chcete, aby se spouštěly při každém přihlášení, přidejte je na konec souboru rc.local v adresáři /etc/rc.d.

cron

Jestliže chcete spouštět skript18) s určitou periodicitou, stačí ho přidat do některého z adresářů /etc/cron.*. Konkrétně se jedná o adresáře cron.hourly, cron.daily, cron.weekly, cron.monthly. Jak už jejich název napovídá, označuje část jejich jména za cron. periodicitu, se kterou budou tyto skripty spouštěny.

Další možností je vytvořit si vlastní konfigurační soubor crontab a umístit jej do adresáře /etc/cron.d. V tomto konfiguračním souboru je možné definovat nejen periodicitu ale také konkrétní čas, ve kterém má být spuštěn konkrétní příkaz.
Syntaxe tohoto konfiguračního souboru je následující

minuta hodina den mesic den_v_tydnu [jmeno_uzivatele] prikaz
Pole Popis Rozsah
minuta minuta příslušného hodiny 0 - 59
hodina hodina příslušného dne 0 - 23
den den v měsíci 1 - 31
mesic měsíc v roce 1 - 12
den_v_tydnu den v týdnu 0 - 6 (0 = neděle)

Každé pole navíc může obsahovat znak:

  1. hvězdička (*), které vyhovuje všem časům
  2. dvě čísla oddělená pomlčkou, která značí rozsah hodnot
  3. seznam čísel popř. rozsahů oddělených čárkou

jmeno_uzivatele umožňuje superuživateli nastavit uživatele, jehož jménem má být příkaz spouštěn. Jestliže není jméno uživatele nastaveno, bude příkaz spouštěn z shellu superuživatele.

Následující konfigurační soubor spusti prikaz1 1.ledna v 12:00, prikaz2 každý pracovní den ve 3:00 a příkaz prikaz3 každou hodinu.

#crontab - ilustracni priklad
0 12 1 1 *   prikaz1
0  3 * * 1-5 prikaz2
0  * * * *   prikaz

Poznámka: Potenciální problémy by mohly nastat při zadávání hodnot do polí den a den_v_tydnu. Pro spuštění příkazu totiž stačí, aby byla splněna kterákoliv z těchto podmínek. Konfigurační soubor

#crontab - ilustracni priklad
0 12 1 * 5 prikaz

tak nespustí prikaz vždy ve 12:00 prvního dne v měsíci pokud se jedná o pátek, ale vždy ve 12:00, jestliže bude pátek nebo první den v měsíci.

O spouštění souborů v adresáří /etc/cron.* a souboru /etc/cron.d/crontab se stará démon cron. Ten je spouštěn společně se systémem a běží neustále na pozadí.

Poznámka: cron předpokládá, že systém běží neustále. Narozdíl od serverů tento předpoklad v případě klasických domácích počítačů pochopitelně neplatí. Pro tyto případy je vhodnější podobná utilita anacron, která přebírá instrukce ze souboru /etc/anacrontab. anacron se postará o to, aby nedošlo k přeskočení některých příkazů z důvodů časové diskontinuity (např. z důvodu vypnutí počítače nebo přenastavení systémového času).

at

Jestliže chcete spustit příkaz či skript v danou dobu a nechcete k tomu použít cron, máte k dispozici příkaz at. Následující příkaz vypne počítač ve 23:00.

at 11pm
at> /sbin/shutdown -h now
at>

Stiskněte Ctrl+D.

Job at 2007-01-04 23:00

man

Bližší informace o výše uváděných příkazech můžete získat pomocí

man prikaz

Např. manuálovou stránku příkazu ls vyvoláme pomocí

man ls

LS(1)                            User Commands                           LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List information about the FILEs (the current directory by default).  Sort entries alphabetically if none
     of -cftuSUX nor --sort.
...  

info

Dalším užitečným příkazem pro získání nápovědy je info. Nápověda získaná pomocí tohoto příkazu je často komplexnější než nápověda poskytovaná klasickým man. info narozdíl od man nabízí navíc hyperlinky, které propojují jednotlivé kapitoly nápovědy.

info ls


File: coreutils.info,  Node: ls invocation,  Next: dir invocation,  Up: Directory listing

10.1 `ls': List directory contents
==================================

The `ls' program lists information about files (of any type, including
directories).  Options and file arguments can be intermixed
arbitrarily, as usual.

   For non-option command-line arguments that are directories, by
default `ls' lists the contents of directories, not recursively, and
omitting files with names beginning with `.'.  For other non-option
arguments, by default `ls' lists just the file name.  If no non-option
argument is specified, `ls' operates on the current directory, acting
as if it had been invoked with a single argument of `.'.

...

apropos

Informace uvedené v sekci NAME jsou využívány příkazem apropos. Tento příkaz vypisuje seznam manuálových stránek, které se váží k určitému klíčovému slovu. Pokud toto klíčové slovo figuruje v sekci NAME, je daná manuálová stránka vypsána na seznam.
Například seznam všech manuálových stránek, které se váží ke slovu file, získáte pomocí

apropos file

1)
OS Linux narozdíl od OS Windows rozlišuje malá a velká písmena v názvech souborů a adresářů. Soubor text_a.txt a text_A.txt tak jsou dva rozdílné soubory.
2)
Jestliže se nejedná o interaktivní příkaz jakým je např. textový editor.
3)
Adresář je, pro někoho možná překvapivě, z pohledu systému souborů také souborem, i když se jedná o soubor s pevně danou strukturou.
4)
Superuživatel je administrátorem systému - tj. provádí nejrůznější nastavení, instalaci aplikací, vytváří a ruší uživatelské účty apod. Z tohoto důvodu potřebuje šiřší pravomoce než má standardní uživatel. Anglické označení pro superuživatele je root.
5)
Klasické soubory jsou označeny pomlčkou -, adresáře pak písmenem d.
6)
Znak . představuje pracovní adresář a znak .. nadřazený adresář. Tyto dva adresáře jsou součástí všech adresářů.
7)
Příkaz sice nemůže fyzicky přesunout adresář, ale můžeho ho přejmenovat.
8)
Adresář / je tzv. kořenovým adresářem. Všechny adresáře jsou podadresáři tohoto adresáře. Každý diskový oddíl musí být „namapován“ do některého z adresářů. Proto, dáte-li prohledat kořenový adresář, prohledáváte všechny připojené diskové oddíly počítače.
9)
Pro naše momentální účely lze „systém souborů“ chápat jako diskový oddíl.
10)
Každý diskový oddíl má přidělenu vlastní sadu inodů. Inody obsahují informace týkající se fyzického uložení souborů a adresářů na příslušném diskovém oddílu a jsou jedinečné pouze v rámci tohoto diskového oddílu. Z toho pramení např. ta nevýhoda, že pevný link musí odkazovat pouze na soubor, který se nachází na stejném diskovém oddílu jako samotný link.
11)
Vedle majitele souboru / adresáře může o těchto právech rozhodovat také superuživatel. Jakákoliv nastavení provedená vlastníkem souboru / adresáře nemají vliv na práva superuživatele - ta jsou totiž vždy „absolutní“.
12)
Práva může dokonce upravit také sama sobě. To však nemá dopad na možnost toto nastavení kdykoliv změnit.
13)
Adresář by byl indikován znakem d.
14)
Domovským adresářem rozumíme adresář /home/jmeno_uzivatele.
15)
Tento příkaz se hodí zejména pro zpacifikování „neposlušných“ procesů.
16)
Asi nemá smysl zdůrazňovat, že bezhlavé zabíjení procesů může mít za následek kolaps systému.
17)
Ostatní soubory - např. s příponou .doc, .xls apod. - musí být tištěny z odpovídající aplikace.
18)
Skript je soubor, který obsahuje posloupnost příkazů a který má nastaveno právo spouštění.
  • Poslední úprava: 2022/11/14 12:25
  • autor: 127.0.0.1