Kapitola 3. Práce v textovém prostředí

Obsah

3.1. Unixové příkazy
3.2. Uživatelé a přístupová práva
3.3. Důležité linuxové příkazy
3.4. Editor vi

Abstrakt

Grafické uživatelské prostředí v Linuxu je velmi dobré a velice důležité, ale někdy není myš tím nejlepším ovládacím prvkem. Příkazová řádka je velice efektivní a flexibilní a některé operace umožňuje provádět mnohem efektivněji. Textové programy jsou obzvláště výhodné při vzdálené práci přes pomalou síť, nebo pokud chcete nějakou činnost provést jako root. V SUSE Linuxu se jako výchozí interpret příkazů (shell) používá Bash.

Linux je multiuživatelský systém a přístup k souborům je chráněn systémem uživatelských práv. Ať pracujete v textovém nebo grafickém režimu, je důležité pochopit, jak systém práv funguje. V textovém režimu je důležité znát řadu příkazů. V textovém režimu se pro editaci konfiguračních souborů často používá editor vi. Oblíbilo si ho mnoho administrátorů a vývojářů.


3.1. Unixové příkazy

V Linuxu Linuxu můžete používat grafické a textové prostředí současně. Okno emulátoru textového prostředí, terminálu, spustíte v KDE kliknutím na ikonu programu Konsole v panelu. V prostředí GNOME klikněte na ikonut terminálu v panelu.

Objeví se okno konzole. Prompt, výzva k zadání příkazu, se skládá z vašeho přihlašovacího jména (v našem případě tux), jména počítače (zde linux) a aktuální cesty (v našem případě domovský adresář přihlášeného uživatele, pro který se používá symbol vlnovky ~). Pokud se přihlásíte vzdáleně z jiného systému, může se vzhled propmtu lišit podle nastavení počítače, na kterém právě pracujete.

Obrázek 3.1. Příklad okna terminálu

Příklad okna terminálu
[Warning]Varování

Podobný příkaz, jako je pod DOSem undelete, kterým by se daly obnovit náhodně smazané soubory, pod Linuxem bohužel není (s výjimkou správců souborů, kteří obsahují koš). Pokud se jedná o smazané systémové soubory, nezbývá než systém přeinstalovat, pokud jsou to uživatelské soubory, jsou bohužel ztraceny.

3.1.1. Práce s příkazovou řádkou

I když se Linux stává stále barevnějším a uživatelsky příjemnějším, např. díky programům ovládaným pomocí menu, zůstává vždycky možnost v krajní situaci použít klasickou příkazovou řádku.

3.1.1.1. Co jsou unixové příkazy?

Unixové příkazy jsou:

  • spustitelné programy

  • skripty příkazového interpretu (shellové skripty)

  • skripty v jazycích jako je Perl, Tcl atd.

  • aliasy pro příkazový interpret (cosi jako shellová makra).

Pokud chcete zavolat v Linuxu obyčejný spustitelný program v souboru, napíšete název tohoto souboru a cestu, kde se nachází (proměnná PATH). Když ho příkazový interpret najde a uživatel má práva na jeho spuštění (vykonání), pak bude spuštěn.

Co když je třeba programu (např. při kopírování) sdělit, se kterým souborem má pracovat?

To je poměrně jednoduché, k tomu slouží tzv. parametry. Ty následují v příkazové řádce za názvem příkazu a jsou odděleny alespoň jednou mezerou. Mezera nemůže být součástí parametru, protože funguje jako oddělovač jeho částí; můžete ji tam vložit pouze v případě, že uzavřete parametr do uvozovek.

Kromě toho je občas potřeba pozměnit chování příkazu (např. se má zobrazit adresář s popisy souborů místo pouhých názvů souborů v adresáři). K tomu v Linuxu slouží tzv. volbyoptions. Ty se vždy zadávají za název příkazu a před parametry (výjimky jsou možné, ale pouze řídce). Volby jsou zpravidla uvozeny symbolem minus (např. -la) a mohou v podstatě následovat dvě schémata:

-a

krátká, v Unixu běžná forma

--all

dlouhá, tzv. GNU notace

Pokud je třeba použít více voleb, dokáže je mnoho linuxových programů kumulovat. To znamená, že nemusí být zapisovány jednotlivě za sebou uvozené pomocí minus, ale mohou se spojit do jedné volby, viz příklady rovnocenného zápisu:

-a -f -r -u    
-afru          
-frua
 

Tento příklad také ukazuje, že není důležité ani pořadí voleb. Ovšem i zde potvrzuje výjimka pravidlo.

Abychom tomu nasadili korunu, tak ještě jednotlivé volby samy mohou mít opět parametr, viz rovnocenné příklady:

-f nazev_souboru
-f nazev_souboru -f
 

Přitom by mělo být jedno, zda napíšete mezi volbou a parametrem mezeru nebo ne.

3.1.1.2. Příklady

Shrneme-li to, příkazy v Linuxu vypadají například takto:

tux@linux:~>fdisk
tux@linux:~>lsmod
tux@linux:~>ls
 
[Tip]Tip

Všimněte si, že příklad neobsahuje jen samotný příkaz, ale také promt. To je část tux@linux:~>. Promt uvidíte na uživatelské textové konzoli vždy. Je jakousi výzvou, že nyní můžete psát své příkazy. Standardní uživatelský promt v systému SUSE Linux vám může velmi usnadnit orientaci. První část před zavináčem je uživatelské jméno, pod kterým pracujete (v našem případě tux). Po zavináči následuje jméno počítače, které je ukončeno dvojtečkou (v našem případě linux). Za dvojtečkou je vypsán adresář, ve kterém se zrovna nacházíte. Pokud následuje jen vlnka, pracujete ve svém domovském adresáři. Promt uživatele root se od uživatelského liší. V našem případě by vypadal takto:

linux:~ #

S přidáním voleb vypadají pak takto:

tux@linux:~>fdisk -v
tux@linux:~>ls -l -a
tux@linux:~>ls -la
 

Dále s parametry:

tux@linux:~>fdisk /dev/hda
tux@linux:~>ls /tmp
 

A konečně s volbami a parametry:

tux@linux:~>ls -la /tmp
tux@linux:~>rpm -qpl jmeno_balicku.rpm
tux@linux:~>gcc -O mujprogram.c
 

Podstatné je, že mezera odděluje všechny části příkazu, a tím se stává v Linuxu vyhrazeným znakem.

3.1.2. Adresáře a soubory

Všechny informace, ať se jedná o text, obrázky, databázová data nebo příkazy pro konfiguraci systému, se ukládají do souborů, a to v určitém adresáři. Pomocí různých nástrojů tools a programů můžete zobrazit případně editovat obsah těchto souborů.

Speciálním znakem pro oddělování adresářů je v Unixu / slash (v DOSuse používá zpětné lomítko). Cesta path je řetězec jmen adresářů oddělených od sebe lomítkem /. Samotné lomítko pak označuje kořenový adresář rootdir.

Unix rozlišuje velká a malá písmena, tj. název souboru Emil není totožný s názvem emil. Povinné rozdělování na název souboru a příponu, extension není třeba, pokud se nejedná o programy, které to vyžadují (např. latex).

[Tip]Tip

Příjemným ulehčením při zadávání názvů souborů, resp. adresářů je funkce klávesy Tab (tabulátor). Zadejte první písmeno požadovaného souboru a stiskněte klávesu Tab . Program shell shell doplní kompletní název souboru (pokud nemáte více souborů začínajících stejně). Dvojí stisknutí tabulátoru zobrazí všechny soubory v adresáři začínající řetězcem, který jste zadali.

3.1.2.1. Adresářová struktura

Při práci v textovém prostředí je rozumné mít přehled o adresářové struktuře linuxového systému. Základní znalosti o funkce jednotlivých adresářů a významu jejich obsahu vám totiž nejednou zrychlý práci a usnadní hledání. Nejvýše postaveným adresářem je /. Na obrázku 3.2 – „Adresářová struktura“ si můžete prohlédnout typický linuxový adresářový strom s domovskými adresáři uživatelů xyz, linux a tux. Adresářová struktura není náhodná, řídí se standardem FHS (Filesystem Hierarchy Standard). V následujícím seznamu najdete krátký popis linuxové adresářové struktury.

Obrázek 3.2. Adresářová struktura

Adresářová struktura
/

kořenový (hlavní) adresář, ve kterém jsou uloženy všechny ostatní adresáře

/home

adresář s domovskými adresáři uživatelů

/dev

soubory zastupující zařízení (hardware)

/etc

důležité konfigurační soubory

/etc/init.d

startovací skripty

/usr/bin

volně přístupné programy

/bin

programy vyžadující rootovská práva

/usr/sbin

programy určené pro správce systému

/sbin

programy určené pro správce a potřebné při startu

/usr/include

hlavičkové soubory C

/usr/include/g++

hlavičkové soubory C++

/usr/share/doc

dokumentace

/usr/share/man

manuálové stránky (man man)

/usr/src

zdrojové kódy

/usr/src/linux

zdrojové kódy jádra

/tmp, /var/tmp

dočasné soubory

/usr

aplikace

/var

konfigurační soubory (také linkované z /usr)

/var/log

systémové záznamy (logy)

/var/adm

data správce

/lib

sdílené knihovny (pro dynamicky linkované programy)

/proc

procesový souborový systém

/sys

systémový souborový systém s informacemi o zařízeních určených předávaných jádru

/usr/local

na distribuci nezávislá rozšíření (např. programy třetích stran)

/opt

dodatečný software a rozsáhlejší balíčky (např. KDE, GNOME, Netscape)

3.1.3. Bash

Bash nabízí dvě velmi užitečné funkce, které vám skutečně velmi usnadní práci. Jsou to:

Historie

Pokud chcete vykonat příkaz, který jste již zadávali, stiskněte klávesu a zmáčkněte ji tolikrát, než najdete požadovaný příkaz. Příkaz po nalezení spustíte stisknutím klávesy Enter. Vpřed se dostanete stisknutím klávesy . Příkaz jednoduše upravíte přesunutím kurzoru pomocí kláves šipek na požadované místo a přepsáním. V historii se dá vyhledávat stisknutím Ctrl-R. Promt se změní na dvojtečku. Zadejte znaky, které se ve vámi použitém příkazu vyskytovaly. Příkaz bude podle shody znaků doplněn podle obsahu historie. Pokud vám vyhledaný příkaz vyhovuje, spustíte ho stisknutím klávesy Enter. Vyhledaný příkaz lze samozřejmě upravit. U příkazu, který nejvíce vyhovuje vašim požadavkům, ukončete hledání stisknutím klávesy šipky a proveďte potřebnou úpravu.

Doplňování

Jména psaných souborů a příkazů lze jednoduše doplnit napsáním prvním písmen a stisknutím klávesy Tab. Pokud znakům vyhovuje více možností doplnění, nevypíše po prvním stisknutí nic a na druhé stisknutí klávesy Tab možnosti vypíše a nechá vás výběr upřesnit. V případě velkého množství možností vypíše jejich počet a zeptá se, zda si je skutečně přejete zobrazit.

3.1.3.1. Příklad 1: práce se soubory

Nyní, když víte, jak má vypadat příkaz a jaké se v systému SUSE Linux nacházejí adresáře, můžeme přistoupit k příkladům.

  1. V KDE otevřete konzoli kliknutím na ikonu monitoru s mušlí. Konzoli můžete spustit také příkazem xterm.

  2. Zobrazte obsah svého domovského adresáře zadáním příkazu ls.

  3. Použijte příkaz mkdir (zkratka z angl. make directory) k vytvoření adresáře test zadáním příkazu mkdir test.

  4. Nyní spusťte editor Kate stisknutím kláves Alt-F2 a zadáním příkazu kate do okna, které se stisknutím otevřelo. Napište několik písmen a uložte je jako soubor Testfile do domovského adresáře. Linux rozlišuje velká a malá písmena, proto použijte velké T nebo následující příkazy upravte podle jména svého souboru.

  5. Nyní si znovu prohlédněte obsah svého domovského adresáře. Tentokrát však nepište příkaz ls, ale vyvolejte ho z historie dvojitým stisknutím klávesy . Příkaz spustíte stisknutím klávesy Enter. Nově vytvořený adresář test by měl být vypsán modře a soubor Testfile černě. Díky barevnému odlišení můžete i v konzoli jednoduše rozpoznávat adresáře od souborů.

  6. Nyní přesuňte soubor Testfile do adresáře test pomocí příkazu mv. K tomu použijte funkci doplňování. Uděláte to tak, že napíšete mv T a stisknete klávesu Tab. Pokud nemáte v adresáři jiný soubor začínající na T, doplní se zbytek jména souboru estfile. V opačném případě stiskněte klávesu Tab ještě jednou, abyste zjistili, jaké další písmeno je nutné dopsat, aby byla volba jednoznačná. Po doplnění udělejte za jménem souboru mezeru a dopiště jméno adresáře. Výsledný příkaz bude mv Testfile test. Příkaz spustíte stisknutím klávesy Enter.

  7. Po vykonání příkazu přesunutí se soubor Testfile již nebude nacházet v domovském adresáři. Překontrolujte přesun příkazem ls.

  8. Po přesunutí souboru přejděte do adresáře test příkazem cd test a vypište si jeho obsah opět příkazem ls. Měli byste vidět soubor Testfile. Zpět do svého domovského adresáře se dostanete zadáním příkazu cd.

  9. Pro vytváření kopií souborů se používá příkaz cp. Např. cp Testfile Testbackup překopíruje soubor Testfile do souboru Testbackup. Příkazem ls se opět můžete přesvědčit, že v adresáři máte oba soubory.

3.1.4. Zadání cesty

Při práci se soubory a adresáři je nezbytné znát a zadávat správnou cestu (umístění). Nemusíte však nutně vždy zadávat celou (absolutní) cestu, ale můžete začít se zadáváním až od adresáře, ve kterém se nacházíte. Pro domovský adresář se používá znak ~ (tilda). Znamená to, že obsah test v domovském adresáři si můžete nechat vypsat dvěma způsoby a to buď příkazem ls test nebo zadáním absolutní cesty ls ~/test.

Obsah domovského adresáře jiného uživatele získáte příkazem ls ~UzivatelskeJmeno. V našem příkladu adresářové struktury je jedním z uživatelů tux. Pokud bychom chtěli zjistit obsah jeho adresáře, zdali bychom tedy příkaz ls ~tux.

Pro označení aktuálního adresáře se používá . (tečka). Nadřízený adresář je zastoupen dvěma tečkami. Příkazem ls .. tedy dostanete výpis obsahu adresáře, který je nadřízený vašemu aktuálnímu adresář (tomu, ve kterém se zrovna nacházíte). Příkaz ls ../.. vypíše obsah adresáře o dvě úrovně výše.

3.1.4.1. Příklad 2: práce s cestami

Nyní si ukážeme několik příkladů pohybu v adresářové struktuře systému SUSE Linux.

  1. Do domovského adresáře se přesunute zadáním příkazu cd. Zde pak vytvořte adresář test2 příkazem mkdir test2.

  2. Do nově vytvořeného adresáře přejdete zadáním příkazu cd test2. Vytvořte zde podadresář subdirectory. Při přechodu do něj využijte možnost doplňování. Zadejte cd su a stiskněte klávesu Tab. Jméno adresáře se samo doplní.

  3. Nyní přesuňte již vytvořený adresář Testbackup do aktuálního adresáře (subdirectory) bez nutnosti přecházet mezi jednotlivými adresáři. To uděláte tak, že zadáte relativní cestu mv ../../test/Testbackup .. tečka na konci příkazu je nezbytná k tomu, aby shell věděl, kam má příkaz přesunout. ../../ je v tomto příkladě relativní vyjádření domovského adresáře (adresář o dvě úrovně výše).

3.1.5. Pseudoznaky, přehled

V porovnání s DOSem má příkazový interpret (např. bash) rozsáhlé možnosti tam, kde se používají pseudoznaky wildcard.

V Linuxu se pseudoznaky neomezují pouze na hvězdičku a otazník. Například pomocí

ls *a???.?
 

můžete nechat vypsat všechny soubory v aktuálním adresáři, kde šestý znak od konce je a a předposlední znak je ..

Místo a můžete použít celý řetězec znaků. Například písmena a, b, c, d, e, f. Příkaz potom bude vypadat takto:

ls *[a-f]???.?
 

Není ani třeba zadávat písmena v abecedním pořadí:

ls *[1,3-5,M-P,a,k]???.?
 

3.1.6. Obsah souborů

Obsah souborů je možné zobrazit příkazy cat, more a less. Zatímco program cat pouze vypíše text, program more zastavuje výpis po každé zaplněné obrazovce. Konečně program less má více funkcí než klasický more a je příjemnější pro práci. Příkazem less /etc/login.defs nahrajete soubor /etc/login.defs do jednoduchého prohlížeče less.

Pomocí klávesy / můžete zadat hledaný řetězec a potom potvrdíte klávesou Enter. Klávesa n najde potom další výskyt řetězce.

Zajímavá je klávesa F, pomocí které můžete sledovat, jak se například do protokolového souboru provádějí další zápisy. Pomocí Ctrl-c se potom vrátíte do normálního módu.

Klávesou h získáte přehled všech nastavení, která nabízí less , stiskem klávesy q opustíte nápovědu a dalším stiskem i celou aplikaci a dostanete se znovu na příkazovou řádku.

Program less získal jméno z angl. less is more (méně je více) a lze ho používat také pro předávání výstupu dalším příkazům. Více se o tomto způsobu použití dovíte v části 3.1.7 – „Roury a přesměrování výstupu“.

Pro modifikaci textových souborů použijete editor. Tradičním unixovým editorem je např. vi.

3.1.7. Roury a přesměrování výstupu

Za normálních okolností je standardní výstup monitor a standardní vstup klávesnice. Někdy se však hodí nezobrazovat výstup příkazů např. less na monitor, ale předat ho dalšímu příkazu. A k tomu slouží roury. Pro roury se používá znak |.

Obsah souborů adresáře test můžete zobrazit příkazem ls test | less. O zobrazení obsahu souborů se zde stará příkaz less. Tento způsob zobarezní má význam pouze v případě kratšího výstupu příkazu ls. V případě ls /dev | less, kde by měl být zobrazen obsah souborů v adresáři dev, byste získali jen malou část souborů.

Výstup příkazu lze také uložit nebo-li přesměrovat do souboru. Například příkazem ls test > Obsah vytvoříte nový soubor Obsah, ve kterém se uloží výpis souborů obsažených v adresáři test. Obsah souboru si můžete prohlédnout pomocí příkazu less Obsah.

Obsah souboru můžete použít jako vstup pro příkaz. Například řádky v souboru Testfile uspořádáte příkazem sort < Testfile. Výstup příkazu sort uvidíte na obrazovce. text se bude uspořádávat podle prvního písmena řádky.

jestliže byste chtěli výsledek uspořádání uložit do souboru, využijte oba výše zmíněné postupy. Např. vytvořte soubor obsahující několik náhodných nesrovnaných řádek Nesrovnany a zadejte příkaz sort < Nesrovnany > Srovnany. Výsledek si můžete prohlédnout příkazem less.

Stejně jako standardní výstup je přímo na konozli posílán také standardní chybový výstup. Pokud chcete zapisovat chybová hlášení do zvláštního souboru pojmenovaného např. chyby, musíte za příkaz, jehož chybová hlášení chcete ukládat, ještě doplnit 2> chyby. Pokud chcete do souboru uládat jak výstup tak chyby, dopište za příslušný příkaz >& vse.

Poslední možností, která nám ještě zbývá, je připojení výstupu k již existujícímu souboru. Všechny výše uvedená přesměrování totiž, pokud již existuje soubor stejného jména, tento soubor přemažou a nahradí ho svým výstupem. V některých případech je však víc než vhodné nechat předešlý obsah nezměněný a pouze k němu přístup připojit. V takovém případě místo jednoho znaku > použijte dva znaky >> najednou.

3.1.8. Zabezpečení a archivace souborů

Pro vytvoření a uspořádání archivů slouží příkaz tar tape archive. Takový archiv může obsahovat jednotlivé soubory anebo i adresáře, které obsahují soubory.

Takto uspořádané archivy je potom možné také komprimovat, což ještě více snižuje jejich velikost. Většinou mají komprimované archivy příponu .tgz nebo .tar.gz, nekomprimované potom .tar. Používá se při:

  • rozbalování archivů (např. z CD ROM)

    tar xvfz archiv.tgz

    tar xvfz rozbalí komprimovaný archiv archiv.tgz a vytvoří přitom automaticky případné podadresáře. Zobrazí jméno souboru, který právě rozbaluje.

  • vytvoření archivů

    tar cvfz archivfile.tgz file1 verz1

    tar cvfz vytvoří komprimovaný archiv archivfile.tgz, který bude obsahovat soubor file1 a všechny soubory z adresáře verz1. Při balení souboru se zobrazí jeho jméno na obrazovce.

  • prohlížení obsahů archivů

    tar tfz archiv.tgz

    tar tfz zobrazí obsah komprimovaného archivu archiv.tgz.

Volba z volá program GNU Zip , který komprimuje či dekomprimuje soubory v archivu. Příkaz tar xvf archiv.tar rozbalí nekomprimovaný archiv archiv.tar. Bližší informace nám podá příkaz tar --help.

Mimo programu tar nabízí Linux také gzip. Zadejte gzip archiv.tar. Příkazem ls, zjistíte, že soubor archiv.tar zmizel a nahradil ho archiv.tar.gz. Tento soubor je navíc mnohem menší a vhodnější pro posílání poštou nebo uložení na externím médiu jako je stará dobrá disketa nebo dnes mnohem oblíbenější flash disk.

Nyní rozbalte tento soubor do adresáře test vytvořený v předešlých příkladech. Nejdřív soubor do adresáře překopírujte příkazem cp archiv.tar.gz test . Přesuňte se do adresáře s archivem (cd test). Soubory s koncovkou .tar.gz lze dekompripomvat neb-li rozbalit pomocí příkazu gunzip. Zadejte tedy příkaz gunzip archiv.tar.gz, , který vytvoří soubor archiv.tar. Ten již umíte rozbalit příkazem tar xzvf archiv.tar.gz.

3.1.9. Úklid

Po přečtení této části byste měli být schopní provádět základní operace v textovém režimu. Pokud se nyní chcete zbavit všech zkušebních adresářů a souborů, které jste vytvořili při zkoušení uvedených postupů, použijte ke smazání příkazy rm a rmdir. Popis nejdůležitějších příkazů spolu s popisem jejich používání najdete na konci této kapitoly.