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