Jdi na obsah Jdi na menu
 


11. shell: vestavěné a externí příkazy, substituce, přesměrování vstupu a výstupu, roura

12. 6. 2007

11. shell: vestavěné a externí příkazy, substituce, přesměrování vstupu a výstupu, roura

Uživatelské rozhraní - bash - Bourne shell


Shell je interpret programovacího jazyka. Čte příkazy z terminálu nebo ze souboru a provádí je. Různé Unixovské shelly:

 

Bourne shell                                          -                   sh

C-shell                                                  -                   csh

Korn shell                         -                   ksh                                   vychází z Bourne shellu

Bourne-again shell           -                   bash                                 představitel GNU, vychází z Bourne shellu

 

Posloupnost příkazů pro shell čtená ze souboru je vlastně program. Budeme ji nazývat skript.

 


Varianty shellu

Po přihlášení se uživateli spustí shell, kt. má uvedený v souboru /etc/passwd.

Pro spuštění bash shellu je uvedeno    /bin/bash

Tento první spuštěný shell se nazývá login shell.

Provádí soubor /etc/profile - login script pro všechny uživatele při přihlášení do systému

Dále provádí tyto skripty (pokud existují) v domovském adr. uživatele:

 

                    .bash_profile

                    .bash_login

                    .profile

 

Při odhlašování provádí skript v domovském adresáři:

 

                    .bash_logout

 


Návratový kód

Každý proces po svém ukončení předává tomu, kdo jej spustil - návratový kód.

Návratový kód je desítkové číslo. Nulová hodnota se chápe jako úspěšné ukončení.

 


Kolony

Kolona  - je posloupnost jednoho nebo více příkazů oddělených metaznakem svislá čára (|)

Formát kolony:

 

                    příkaz1 | příkaz2 .....

 

Význam: standardní výstup příkazu1 se propojí se standardním vstupem příkazu2

Návratovým kódem kolony je návratový kód posledního příkazu.

 

Příklad:

                    ls | more

 

 


Seznamy

Sezanam - posloupnost jedné nebo více kolon oddělených jedním z řídících operátorů:

 

                    || & && ;

 

a je ukončena jedním z operátorů:

 

                    & ; nový řádek

 

Pokude je příkaz ukončen znakem &  , potom jej shell provádí v kopii shellu na pozadí.

Pokud jsou příkazy odděleny znakem ;  , potom se budou provádět sekvenčně.

 

                    příkaz1 && příkaz2

 

Provede se příkaz1. Příkaz2 se provede pouze tehdy, pokud příkaz1 předal nulový návratový kód.

                    příkaz1 || příkaz2

 

Provede se příkaz1. Příkaz2 se provede pouze tehdy, pokud příkaz1 předal nenulový návratový kód (skončil s chybou).

 

Příklady:

 

                    cd adresar ; ls

                                         nejprve se  provede změna adresáře a potom výpis

 

                    cd adresar & ls

                                         první příkaz se spustí v nové kopii shellu, druhý příkaz se spustí v původním                       shellu

                                         Příkazy na sebe nečekají.

 

                    cd adresar && ls

                                         druhý příkaz se provede jenom tehdy, pokud se provedl první příkaz bez chyby

 

                    cd adresar || mkdir adresar

                                         pokud zadaný adresář neexistuje, vytvoří se.

 


Závorkování

Sezanam je možno uzavírat do závorek. Možnosti jsou dvě:

seznam se buď provede v kopii shellu, nebo se provede v aktuáním shellu.

 

(seznam)      seznam se provede v kopii shellu.

{seznam;}    seznam se provede v aktuálním shellu

 

Příklad:

                    cd adresar || { mkdir adresar; cd adresar;}

 

Porovnejte výsledky:

 

                    (pwd;cd adresar; pwd);pwd

                    { pwd;cd adresar;pwd;};pwd

 


Přesměrování

Shell přesměrování zajišťuje ještě před provedením příkazu. 

 

Přesměrování vstupu

                    [n]slovo

Soubor expandovaný za jméno slovo se otevře pro zápis popisovačem souboru n.

Standardní výstup má číslo 1.

 

Přesměrování výstupu s připojením za konec souboru

                    [n]>>slovo

Soubor expandovaný za jméno slovo se otevře pro zápis popisovačem souboru n s tím že se nová data zapisují za poslední záznam v otevřeném souboru. 

 

Příklady:

 

                    ls > adresar

                                         výpis se zapíše do souboru adresar

 

                    ls adr1 adr2 > adresar 2> chyby

                                         výpis obsahu adr1 a adr2 do soubori adresár, chybová hlášení se zapíší do                        souboru chyby

 

                    ls adr1 2> /dev/null

                                         chybová hlášení jdou do .... koše 

 

                    ls > a > b

                                         oba soubory a i b se vytvoří, výpis se však zapíše pouze do posledního

 

                    ls | tee a > b

                                         výstup se zapíše do souboru a i do souboru b

 


Nástroje pro textové zpracování


Výstup kompletních souborů

cat                                    spojení více souborů a zápis na standardní výstup

tac                                    spojené a zápis souborů v opačném pořadí

nl                                      číslování řádků a zápis na standardní výstup


Výstup pouze části souboru

head                                 výstup začátku souboru

tail                                    výstup konce souboru

split                                  rozdělení souboru do více stejně velkých částí


Sumarizace obsahu souboru

wc                                    předá počet bajtů, slov a řádků souboru

sum                                  předá kontrolní součet souboru


Třídění obsahu souboru

sort                                  setřídí obsah souboru


Nástroje pro práci se soubory


Příkaz pro čtení obsahu adresáře

ls                                      výpis adresáře


Příkazy pro kopírování, přesun, rušení souborů apod.

cp                                     kopírování souborů a adresářů

mv                                    přesun, přejmenování souborů a adresářů

ln                                      vytvoření odkazů

rm                                     rušení souborů a adresářů

touch                                změna časové informace souboru

dd                                     kopírování souboru s konverzemi


Příkazy pro změnu vlastnictví a přístupových práv

chgrp                                změna skupiny vlastníků

chown                              změna vlastníka a skupiny vlastníků

chmod                              změna přístupových práv


Příkazy pro vytvoření, rušení a zjištění kapacity adresářů

mkdir                                vytvoření adresáře

rmdir                                 zrušení prázdného adresáře

du                                     zjištění kapacity adresáře


Další příkazy

df                                     zjištění volné kapacity systému souborů

mkfifo                               vytvoření roury

mknod                              vytvoření speciálního souboru


Shellovské nástroje


Přesměrování

tee                                   přesměrování výstupu do více souborů


Příkazy pro výpis a nastavení pracovního prostředí

pwd                                  zjištění pracovního adresáře

stty                                  výpis a změna chrakteristik terminálu

printenv       výpis aktuálních proměných prostředí

tty                                    zjištění jména terminálu


Informace o uživatelích

id                                      oznámení o UID a GID

logname                           oznámení přihlašovací jméno uživatele

whoami                             oznámí informace o aktuálním uživateli

groups                              oznámí skupinu uživatelů

users                                oznámí jména přihlášených uživatelů

who                                  oznámí info o přihlášených uživatelích


Systémové informace

date

uname                              info o systému

hostname     oznámí a nastaví jméno počítače


Jiné způsoby spouštění příkazů

env                                   spustí příkaz ve změněném prostředí

nice                                  spustí příkaz se změněnou prioritou

su                            spustí proces pod jiným uživatelem