Title:
1Úvod do UNIXu
Libor Forst
- Úvod, charakteristika
- Historie, principy
- Systém souboru, organizace, prÃkazy
- Procesy, životnà cyklus, komunikace
- Shell koncepce, typy, prÃkazy
- Zpracovánà textu (ed, grep, sed, vi, awk)
2Literatura (základy)
- J.Brodský, L.Skocovský Operacnà systém UNIX a
jazyk C SNTL 1989 - L.PetrlÃk Jemný úvod do systému UNIX Kopp 1995
- M.Sova UNIX V - úvod do operacnÃho systému
Grada 1993 - M.Brandejs UNIX - LINUX - praktický pruvodce
Grada Praha 1993 ISBN 80-7169-170-4 - G.Todino, J.Strang, J.Peek Learning the UNIX
Operating System OReilly Associates 1993 - L.Lamb Learning the vi Editor OReilly
Associates 1986-1990 ISBN 0-937175-67-6
3Literatura (systém)
- M.J.Bach The Design of the UNIX Operating
System Prentice-Hall 1986 - L.Skocovský Principy a problémy operacnÃho
systému UNIX Science, 1993 ISBN 80-901475-0-X - L.Skocovský UNIX, POSIX, Plan9 L. Skocovský,
Brno, 1998 ISBN 80-902612-0-5 - M.Welsh, L.Kaufmann PoužÃváme LINUX
ComputerPress 1997 (OReilly) ISBN 80-7226-001-4
4Literatura (programovánÃ)
- M.Jelen UNIX V - programovánà v systému Grada
Praha 1993 ISBN 80-85623-16-1 - B.Rosenblatt Learning the Korn Shell OReilly
Associates 1993 ISBN 1-56592-054-6 - D.Dougherty sed awk OReilly Associates
1990 ISBN 0-937175-59-5 - D.Curry Using C on the UNIX System OReilly
Associates 1985,7,8 ISBN 0-937175-23-4 - A.Oram, S.Talbott Managing Projects with make
OReilly Associates 1986,91 ISBN 0-937175-90-0
5Konvence
- Pevná cást prÃkazu (neproporcionálnÃm fontem) -
pÃÅ¡e se tak, jak je zapsána man -k section
topic - ....... .....
- Promenlivá cást prÃkazu (kurzÃvou) - doplnà se
požadovaný text (slovo, cÃslo apod.) man -k
section topic - ............ ........
- Volitelná cást prÃkazu man -k section topic
- ....... ..............
- Výber z vÃce variant BEGIN END /regexp/
cond cmds - ..............................................
.........
6Historie UNIXu
- 1925 - Bell Laboratories - výzkum v komunikacÃch
- 60. léta - s General Electric a MIT vývoj OS
Multics(MULTIplexed Information and Computing
System) - 1969 - Bell Labs opouštà projekt, Ken Thompson
pÃÅ¡e asembler, základnà OS a systém souboru pro
PDP-7 - 1970 - Multi-cs gt Uni-x (snad Brian Kernighan)
- 1971 - Thompson žádá nový pocÃtac PDP-11 pro
dalÅ¡Ã vývoj - zamÃtnuto - Thompson predstÃrá vývoj systému automatizované
kanceláre - pocÃtac pridelen - zpracovánà textu - 1973 - UNIX prepsán do jazyka C vytvoreného za
tÃm úcelem Dennisem Ritchiem
7Divergence UNIXu
- pol. 70. let - uvolnovánà UNIXu na
univerzitypredevÅ¡Ãm University of California
Berkeley - 1979 - v Berkeley prepisujà UNIX pro 32bitový VAX
BSD Unix (Berkeley System Distribution) verze
3.0dnes verze 4.4 - Bell Labs precházejà pod ATT a pokracujà ve
vývoji verze III až V.4 - tzv. SVR4 - UNIX uvolnen i pro komerci Microsoft a SCO
vyvÃjejà pro Intel XENIX - vznikajà UNIX International, OSF (Open Software
Foundation), X/OPEN,...
8Soucasné UNIXy
- SUN Sun OS, Solaris
- Silicon Graphics Irix
- DEC Ultrix, Digital Unix
- IBM AIX
- HP HP-UX
- Siemens Nixdorf SINIX
- Novell UNIXware
- SCO SCO Unix
- FreeBSD, NetBSD, OpenBSD,...
- Linux
9Standardy UNIXu
- SVID (System V Interface Definition)
- fialová kniha, kterou ATT vydala poprvé v roce
1985 jako standard, jehož splnenà je nutnou
podmÃnkou pro použità obchodnÃho názvu UNIX - POSIX (Portable Operating System based on UNIX)
- série standardu organizace IEEE znacená P1003.xx,
postupne je prejÃmá vrcholový nadnárodnà orgán
ISO - XPG (X/Open Portability Guide)
- doporucenà konsorcia X/Open, které bylo založeno
v r. 1984 prednÃmi výrobci platforem - Single UNIX Specification
- standard organizace Open Group, vzniklé v roce
1996 sloucenÃm X/Open a OSF - dnes Version 2 (UNIX98)
- splnenà je nutné pro užità obchodnÃho názvu UNIX
10Charakteristika UNIXu
- poucenà ale nezatÞenà minulostÃ
- nekomercnà prostredÃ
- otevrený operacnà systém
- systém souboru
- uživatel, skupina
- proces, komunikace
- interpret prÃkazu, grafické prostredÃ
- utility, jazyk C
- prenositelnost, modifikovatelnost
- sÃtová podpora
- volne širitelný SW (napr. GNU)
- prÃkaz man
11Model OS UNIX
Aplikace
Systémové programy
I/O modul
Správa pameti
Správa procesoru
Klasický OS
Systémový proces
Klientský proces
Systémový proces
Klientský proces
...
...
Systémová volánÃ
UNIX
Jádro
12Funkce jádra OS
- RÃzenà provádenà procesu (vytvárenÃ, ukoncenÃ,
suspendovánÃ, komunikace, prÃstup k
periferiÃm,...) - Správa systému souboru (alokace, uvolnovánÃ,
ochrana, udržovánà konzistence,...) - Pridelovánà pameti, ochrana pameti, odkládánÃ
docasne nepoužÃvané pameti (swapping resp.
paging) - Plánovánà procesu pro sdÃlenà casu CPU (plánovacÃ
algoritmus, pridelovánà casových kvant,
priority,...)
13HW požadavky
- Možnost behu procesu ve dvou režimech
- uživatelský (user mode) omezený prÃstup k
pameti, instrukcÃm,... - privilegovaný režim (kernel mode)
- Hierarchické ošetrenà prerušenà a výjimek, napr.
- HW chyby
- casovac
- disky
- sÃt
- terminály
- SW preruÅ¡enÃ
- Správa pameti - oddelenà virtuálnÃho a skutecného
adresnÃho prostoru
14Jednotný hierarchický systém souboru
/
...
etc
dev
usr
home
...
...
...
tty
15Strom adresáru
- /bin - základnà systémové prÃkazy
- /dev - speciálnà soubory (zarÃzenÃ, devices)
- /etc - konfiguracnà adresár
- /lib - základnà systémové knihovny
- /tmp - verejný adresár pro docasné soubory
- /home - koren domovských adresáru
- /usr/adm - administrativnà soubory
- /usr/include - knihovny headeru pro C
- /usr/local - lokálnà soubory
- /usr/man - manuálové stránky
- /usr/spool - spool (pošta, tisk,...)
16Proces, komunikace
- Proces
- zjednoduÅ¡enebežÃcà uživatelský nebo systémový
program - vzniká duplikacà rodicovského procesu
- Komunikace
- pri startu otec predává data synovi, naopak
nelze! - roura - tok dat od producenta ke konzumentu
- ls more
- dalÅ¡Ã prostredky (napr. sdÃlená pamet)
17Interpret prÃkazu (shell)
- základnà program pro komunikaci s UNIXem
- nezávislá komponenta systému vÃce shellu
- formát prÃkazu
- prÃkaz -prepÃnace parametry pr. ls -l /etc
- metaznaky, napr.
- ls .c gt "vypis adresare.txt"
- vestavené prÃkazy echo, cd, pwd
- umožnuje prÃmé programovánà skripty
- sh test.sh ./test.sh
18Virtuálnà pamet
pametprocesu 1
pametprocesu 2
pametprocesu 3
pametprocesu 4
swap
reálnápamet
19PrÃkaz man
- VolánÃ
- man -k section topic
- Sekce manuálových stránek
- 1 - uživatelské prÃkazy
- 2 - služby jádra systému
- 3 - knihovnà funkce jazyka C
- 4 - zarÃzenà a ovladace zarÃzenÃ
- 5 - formáty souboru
- 6 - triviálnà aplikacnà programy
- 7 - ruzné
- 8 - administrátorské prÃkazy
20Seznam uživatelu (/etc/passwd)
forstDxyAF1eG100411Libor Forst/u/forst/bin/s
h
- Význam jednotlivých polÃ
- uživatelské jméno
- zakódované heslo (nove v /etc/shadow...)
- cÃslo (UID) superuživatel (root) má UID 0
- cÃslo (GID) primárnà skupiny
- plné jméno
- domovský adresár
- login-shell
21Seznam skupin (/etc/group)
users11operator,novak
- Význam jednotlivých polÃ
- jméno skupiny
- nepoužito
- cÃslo skupiny (GID)
- seznam clenu skupiny
- Ve skupine jsou navÃc i vÅ¡ichni uživatelé, kterÃ
ji majà uvedenu jako svoji primárnà skupinu.
22Uživatelská relace
- Po prihlášenà k systému se uživateli spustà jeho
shell. TÃm se zahájà jeho uživatelská relace
(session). - ukoncenà session logout
- zmena uživatele (login-shell) login user
- docasná zmena uživatele su - user
- ukoncenà shellu exit
- zjištenà identity uživatele id, whoami, who am i
- výpis nalogovaných uživatelu who, w
- výpis logu relacà last
23Komunikace mezi uživateli
- on-line zprávy
- zaslánà write user
- potlacenà prÃjmu mesg y n
- on-line rozhovor
- prÃkaz talk user_at_host
- off-line zprávy
- posÃlánà mail -v -ssubject email...
- prÃjem mail
- zpráva o prÃjmu biff y n
- presmerovánà prÃjmu HOME/.forward
forst_at_ms.mff.cuni.cz /usr/local/bin/filter
24Systém souboru
- hierarchický systém
- jednotný prÃstup k zarÃzenÃm, adresárum
- diskové svazky, sÃtové disky
- synchronizace (sync, fsck)
- ochrana souboru
- jména (znaková sada, délka)
- cesty (absolutnÃ, relativnÃ, ., ..)
- textové soubory (ltLFgt)
25PrÃkaz ls
-rwxr-x--x 2 forst users 274 Jan 5 1711 test
typ práva pocet linku vlastnÃk, skupina délka
souboru v bytech datum a cas poslednÃ
modifikace jméno souboru volby dlouhý výpis
(l), krátký výpis do 1 sloupce (1), psát i skryté
(a), vypsat/potlacit skupiny (g), trÃdit podle
casu (t), trÃdit pozpátku (r), znacit typ souboru
(F), rekurze (R) resp. jen adresáre (d), sledovat
linky (L)
26Typy souboru
- plain file posloupnost bytu (-)
- directory seznam jmen souboru (d)
- speciálnà zarÃzenà - device (b, c)
- symbolické linky (l)
- pojmenované roury - pipe (p)
- sockety (s)
- prÃkaz file
27PrÃstupová práva
- tri kategorie vlastnÃk (u), skupina (g), ostatnÃ
(o)platà vždy nejspeciálnejÅ¡Ã kategorie, v nÞ
je uživatel - tri práva ctenà (r), zápis (w), provádenÃ
souboru resp. prepnutà se do adresáre (x) - setUID, setGID (s) pro proveditelné soubory
propujcenà identity (skupiny) vlastnÃka - setGID pro soubor bez práva spuÅ¡tenà pro skupinu
kontrola zámku pri každém prÃstupu (výpis S) - sticky bit (t) pro spustitelné soubory ponechánÃ
souboru v pameti - sticky bit pro adresáre práva k souborum majÃ
jen vlastnÃci souboru a nikoli vlastnÃci adresáre - setGID pro adresár nové soubory budou mÃt
stejnou skupinu jako adresár
28Zmena prÃstupových práv
vlastnÃk (u)
skupina (g)
ostatnà (o)
4
2
1
r
suid
w
sgid
x
sticky
- zmena práv chmod -R w,orx file... chmod
-R 775 file... - zmena vlastnÃka chown, chgrp
- defaultnà maska umask mask_complement
- shell s novou defaultnà skupinou newgrp group
29Organizace disku
- Fyzická sektor, stopa, cylindr, povrch
- Logická partition (device), prÃkaz df
- Systémová filesystem
- boot blok
- superblok(y)
- I-list (seznam I-nodu)
- datové bloky
- Obraz systému souboru v pameti (sync, fsck)
30Index node
- Každý soubor na disku má práve jeden I-node,
který obsahuje - pocet linku
- vlastnÃk, skupina
- prÃstupová práva
- typ souboru
- velikost souboru
- cas
- poslednà modifikace souboru
- poslednÃho prÃstupu k souboru
- poslednà modifikace I-nodu
- odkazy na datové bloky
- Výpis seznamu souboru s cÃsly I-nodu ls -i
31Linky
Hard link
Soft link
Originál
/var
/usr
/etc
passwd 20 ...
passwd 31 ...
passwd 20 ...
I-list
...
...
...
0
20
31
../etc/passwd
rootx00...
ln -s ../etc/passwd passwd (zacyklenà Too many
symlinks)
ln /etc/passwd passwd
32Adresace datových bloku
Tabulka prÃmých odkazu v I-node
0
1
2
. . .
9
10
11
12
Blok neprÃmých odkazu 1.rádu
Blok neprÃmých odkazu 2.rádu
Blok neprÃmých odkazu 3.rádu
Datové bloky
33Obecné prÃkazy
- kopÃrovánà souboru cp -pr
- presun n. prejmenovánà souboru mv
- smazánà souboru rm -rfi
- zmena data a casu touch -tcas -rsoubor
- zmena aktuálnÃho adresáre cd
- výpis aktuálnÃho adresáre pwd
- vytvorenà adresáre mkdir -p
- zrušenà adresáre rmdir
- nenà undelete !
34Výpis souboru
- zretezenà souboru cat -nv files
- výpis souboru po stránkách more, pg, less
- výpis zacátku souboru head -n files
- výpis konce souboru tail -n n -f
files - výpis souboru pro tisk pr
- pocet bytu, slov a rádek wc -cwl
- kopÃrovánà na výstup a do souboru tee -a file
- výpis binárnÃho souboru od, hd, strings
- výpis s formátem hexdump -e formát
- formát repeat/byte_count format ...
35PrÃkaz more
- VolánÃ
- more -n line /regexp files
- PrÃkazy ( - muže predcházet prefix poctu k)
- mezera, d ... dalšà stránka, pul stránky ()
- return ... dalšà rádka ( - k nastavà default)
- s, f, b ... preskoc k rádek, stránek, stránek
zpet () - /regexp, n ... hledej k-tý výskyt retezce ()
- ... návrat na zacátek hledánÃ
- !cmd, v ... start shellu, editoru
- , h ... výpis pozice, helpu
- n, p ... prechod na dalšà soubor
36Tisk
BSD
SystemV
lpr -d printer files
lp -Pprinter files
lpq -d printer job
lpstat job
lprm -d printer job
cancel job printer
- popis tiskáren /etc/printcap
- implicitnà tiskárna promenná PRINTER
- spool-oblast /var/spool/
- formátovánà tisku pr, mpage
37Zpracovánà textu
- porovnávánà souboru resp. adresáru
- diff -bwi -e -cn -rs file1 file2
- comm -123 file1 file2
- výber polà z rádek souboru (nemenà poradà polÃ)
- cut -clist -flist -dchar files
- spojenà souboru po sloupcÃch resp. rádek
souboru - paste -s -dchar files
- rozdelenà souboru po rádcÃch
- split -llines -bbyteskm file
name - konverze znaku
- tr -cds table1 table2 pr. tr "ABC" "abc"
38PrÃkaz sort
- VolánÃ
- sort -bidfnr pos1-pos2 -td -uc
files - Zadánà trÃdÃcÃho pole
- pos1 ... prvnà znak, pos2 ... prvnà znak za
- tvar field.char ... cÃslovánà od 0, 0 je
default - Modifikátory b (bez mezer), f (ignorcase), n
(cÃsla), r (opacne) - PrepÃnace t (oddelovac pole), u (vyluc stejné
klÃce), c (jen kontroluje usporádánÃ) - VÃce klÃcu (pozice se cÃslujà od 1, pos2 je
poslednà znak!) - sort -kpos1,pos2mod -k... files
39PrÃkaz find
- volánà find cesta... podmÃnka... akce
- podmÃnky
- name, size, type, links, inum, fstype
- user, group, perm
- atime, ctime, mtime, newer
- negace (!), -o, -a, závorky
- hodnoty n, n, -n
- akce
- print nekdy default
- exec jméno souboru , ukoncenà prÃkazu
strednÃk - prÃklad find / -name core -mtime 7 -exec rm
"" - zkratky which, whereis
40PrÃkaz xargs
- volánà xargs prÃkaz
- zavolá prÃkaz, jako argumenty doplnà text
standardnÃho vstupu - volánà xargs -llines -nwords prÃkaz
- opakuje prÃkaz, jako argumenty doplnà vždy text z
lines rádek standardnÃho vstupu resp. každých
words slov standardnÃho vstupu - volánà xargs -i prÃkaz
- opakuje prÃkaz pro každou rádku standardnÃho
vstupu, jejà text doplnà do prÃkazu na mÃsta
oznacená - pr. ls -1 .c xargs -i cp .bak
41Archivace
- archivace adresáru tar c t x f file
files - pr. tar cf - . ssh host tar xf - - komprese souboru - standardnà (.Z) compress -
GNU (.gz) gzip, gunzip - dalÅ¡Ã prÃkazy cpio, dd
- systémová záloha backup, dump, restore
- zálohovánà po sÃti rdump, rrestore
- práce s páskou mt fsf n bsf n rewind
42Regulárnà výrazy (ed, vi)
- Zpusob definovánà retezcu v rade prÃkazu (napr.
ed, vi). - Speciálnà znaky
- . jakýkoliv znak mimo ltLFgt
- \c metaznak použitý jako znak (napr. \. je
tecka) - list, list jakýkoliv znak z výctu, z
doplnku - pr. a-z0-9_, -, \\\-\\
- , zacátek a konec rádky
- \lt, \gt zacátek a konec slova
- exp libovolné opakovánà znaku daného výrazem
- exp\n\, exp\m,n\ opakovánà nkrát, m-nkrát
- \(, \), \n cást vzoru a jejà použità (napr. v
náhrade) - pr. A\(.\)\1\1,\A
43Editor vi
- visual editor
- geneze ed???ex???vi
- celoobrazovkový editor
- dostupný na všech UNIXech
- Å¡iroká paleta prÃkazu
- malé nezbytné minimum prÃkazu
- editace kopie souboru
- volánÃ
- vi -rR line /pattern files
44Základnà editace (vi)
- vi soubor vyvolánà editoru
- i zahájenà vkládánà textu
- vkládaný text
- ltESCgt ukoncenà vkládánà textu
- h, j, k, l pohyb po textu
- /vzorek hledánà vzorku
- x, dd mazánà znaku, rádky
- A vkládánà na konec rádky
- J spojenà rádek
- ZZ, x ukoncenà editace
- q! zrušenà editace
45Režimy práce vi
i, a, I, A, o, O, s, S, cx, C, R
ltLFgt, ltBkspcgt
ltESCgt, (C)
režim vstupu
režim prÃkazu ex
ZZ
()q, ()x
46PrÃkazy pro pohyb (I)
- Pred prÃkazy muže predcházet opakovacà faktor k
- h (ltBKSPCgt), j, k, l (ltSPACEgt) o k pozic (?, ?,
?, ?) - w, b, e, W, B, E o k slov (vpred, vzad, na
konec resp. bez interpunkce) - (, ), , na zacátek (následujÃcÃ) vety, ,
sekce - (ltLFgt), - zacátek následujÃcà (predchozÃ)
rádky - , 0, konec rádky, zacátek, prvnà nemezerový
znak - fx, Fx, tx, Tx, , , znak x na rádce (dopredu,
dozadu), znak pred x, znak za x, opakuj, opakuj v
opacném smeru - /regexp, ?regexp, /, ?, n, N hledánà vzoru
dopredu, dozadu, opakuj vzor, opakuj hledánÃ,
opakuj obrácene - F, B, D, U stránka dopredu, dozadu, pul
stránky
47PrÃkazy pro pohyb (II)
- PrÃkazy predcházà absolutnà hodnota k
- k k-tá pozice na rádce
- kH posun na k-tou rádku na obrazovce 1
- kL posun na k-tou rádku od konce obrazovky
1 - M posun na prostrednà rádku na obrazovce
- kG posun na k-tou rádku souboru poslednÃ
- Práce se znackou x (malé pÃsmeno)
- x posun na pozici oznacenou znackou x
- posun na poslednà oznacenou pozici
- x posun na zacátek rádky se znackou x
- posun na zacátek naposledy oznacené rádky
- (oznacenà se provede prÃkazem mx)
48Vkládánà textu, opravy
- Pred prÃkazy muže predcházet opakovacà faktor k
- i, a, I, A vkládánà pred (za) kurzor, rádku
- o, O vkládánà do nové radky pod (nad) aktuálnÃ
(open) - zmena malé/velké pÃsmena pod kurzorem
- rx prepis znaku pod kurzorem znakem x
- R zahájenà režimu vstupu v prepisovacÃm módu
- cm náhrada textu od kurzoru do pozice dané
prÃkazem pro pohyb m - cc, C náhrada celé rádky resp. do konce rádky
- s, S smaž znak (rádku) a prejdi do režimu
vstupu - PrÃkazy oznacené neprepÃnajà do režimu vstupu.
49MazánÃ, práce s buffery
- Pred prÃkazy muže predcházet opakovacà faktor k
- x, X ... mazánà znaku pod (pred) kurzorem
- dm mazánà textu od kurzoru do pozice dané
prÃkazem pro pohyb m - dd, D mazánà celé rádky resp. do konce rádky
- Smazaný text se uložà do ocÃslovaného bufferu.
- p, P vloženà bufferu za (pred) kurzor (prÃp.
rádku) - np, nP vloženà n-tého poslednÃho bufferu
- xp, xP vloženà bufferu x (x je malé pÃsmeno)
- Jiný zpusob vloženà textu do (pojmenovaného)
bufferu - xym vloženà textu po pozici danou prÃkazem m
- xyy, xY vloženà rádky
50DalÅ¡Ã prÃkazy vi
- . opakovánà poslednÃho editacnÃho prÃkazu
- u zruÅ¡enà efektu poslednÃho editacnÃho prÃkazu
- U obnovenà rádky do puvodnÃho stavu
- J slepenà rádky s následujÃcÃ
- L, R obnovenà obrazovky
- o prechod do celoobrazovkového režimu
- zltLFgt, z., z- scrollovánÃ, aktuálnà rádka se
octne na zacátku (uprostred, na konci) obrazovky - E, Y scrollovánà o rádku
- G vypsánà informace o poloze v editovaném
souboru - !m cmd, !!cmd použità bloku textu jako vstup a
vloženà výstupu prÃkazu do textu - _at_x provedenà prÃkazu uložených v bufferu x
- skok na odpovÃdajÃcà ), , nebo gt
- W, V (režim vstupu) smaž slovo, ulož
speciálnà znak
51Rádkové editory
- ed - základnà editor- dostupný i v diagnostickém
režimu- edituje kopii souboru, opravy je nutno
zapsat- prÃkazy ze vstupu (ed-skripty)-
volánà ed soubor - ex - rozÅ¡Ãrenà edu- soucást vi
- sed - rozÅ¡Ãrenà edu smerem k programovánÃ- edituj
e vstupnà proud, výsledek vypisuje- editovacÃ
prÃkazy jsou soucástà volánÃ- volánà sed
prÃkazy soubor ... nebo sed -f
prÃkazový_soubor soubor ...
52Schéma práce sed a ex
ex soubor
prÃkazy
soubor
sed prÃkazy
sed -f soubor_prÃkazu soubor
soubor
soubor_prÃkazu
53Formát prÃkazu, adresa rádku (ed, sed)
- Syntaxe prÃkazu
- adresa,adresaprÃkazparametry
- Formát adresy - prÃkaz se provede na... ed sed
- (prázdná) aktuálnà rádce každé rádce
- . aktuálnà rádce -
- n rádce s cÃslem n (od 1) rádce s cÃslem n
- poslednà rádce poslednà rádce
- n relativne k aktuálnà rádce -
- /pat/ násl. r. se vzorkem každé r. se vzorkem
- ?pat? predch. r. se vzorkem -
- x r. oznacené znackou x -
- adrn relativne k r. s adresou adr -
54Pozicnà prÃkazy editoru ed
- a(ppend), c(hange), i(nsert) vkládánà textu
(nové rádky následujà a koncà rádkou se samotnou
teckou) - d(elete), j(oin) mazánÃ, spojovánà rádek
- m(ove)adr, t(o)adr presun, kopÃrovánà za rádku
adr - s(ubst)/pattern/replacement/gn náhrada
retezcu - g(lobal)/regexp/cmd \ltLFgtcmd provedenÃ
prÃkazu na vÅ¡echny rádky se vzorem - v/regexp/cmd provedenà na rádky neobsahujÃcÃ
vzor - p(rint), n(um), l(ist) tisk, s cÃsly, s
netisknutelnými znaky(dajà se pripojovat za
ostatnà prÃkazy) - rfile vloženà textu souboru
- kx nastavenà znacky x (mark)
55Nepozicnà prÃkazy editoru ed
- h(elp) nápoveda k poslednà chybe
- u(ndo) zrušenà poslednà opravy
- e(dit) file (znovu)otevrenà souboru
- e(dit)! file otevrenà souboru bez uloženÃ
zmen - w(rite) file uloženà (pod jiným jménem)
- (v prÃpade udánà rozsahu se zapÃÅ¡e jen rozsah)
- W(rite) file pripsánà do souboru
- w(rite)!cmd zápis do roury
- f(ile) file zmena jména editovaného souboru
- q(uit) ukoncenà editace
- PrÃkazy oznacené nejsou zcela prenositelné.
56PrÃklady použità prÃkazu global
- g/procedure/i.
- pred procedurami odrádkuje
- g/integer/s//longint/g
- rozÅ¡Ãrà program
- g/var/,/type/-1 m /begin/-1
- spravà poradà deklaracÃ
- g/./ m 0
- napÃÅ¡e soubor pozpátku
- g/Chapter/ W file
- napÃÅ¡e seznam kapitol
57PrÃkaz grep
- název g/re/p
- varianty
- egrep (extended - rozÅ¡Ãrené regulárnà výrazy)
- fgrep (fast - pouze retezec, ale ne jen jeden)
- a nekteré dalšà (napr.GNU)
- volby
- -c(ount), -l(istfiles), -n(umber)
- -i(gnorecase), -w(ord)
- -v ... vypisuje rádky, na nichž vzor nebyl
nalezen - -e expression, -f filename
- -lines ... pocet vypsaných rádek pred a po
nalezené (nenà zcela prenositelné)
58ex - rozÅ¡Ãrenà prÃkazu (I)
- adresy mohou být oddeleny strednÃkem - prvnÃ
rádka se stává aktuálnà - rozÅ¡Ãrenà prÃkazu substitute
- s/regexp/repl/c nahrazenà s potvrzovánÃm
(yltLFgt) - regexp metaznak ... predchozà regexp
- repl sekvence \u, \l, \U, \L ... prevod
malá/velká (na celé slovo) - nové prÃkazy
- co (kopÃruj, alias prÃkazu t)
- ltcount, gtcount indentace
- j(oin)! spojenà rádek, po . pridává dve
mezery, po ) žádnou, jinak jednu (! ... bez
mezer) - ya(nk)x, pu(t)x práce s (pojmenovanými)
buffery
59ex - rozÅ¡Ãrenà prÃkazu (II)
- sh, !cmd spuÅ¡tenà shellu, prÃkazu
- so(urce) provedenà souboru
- w, w!, wgtgt zápis do souboru, read-only, append
- x, wq zápis a ukoncenà editace
- q, q! ukoncenà editace (bez uloženà zmen)
- n!, e! file editace dalÅ¡Ãho souboru (
znacà aktuálnà jméno souboru, alternativnÃ
jméno), pojmenované buffery, poslednà regexp a
prÃkaz se nemažou - ab word string, una zkratka
- map! char n string, unm mapovánà znaku
resp. funkcnà klávesy (pro režim vstupu) rÃdÃcÃ
znaky pres V
60Nastavenà editoru vi
- Nastavovánà prÃkazem set, výpis set all
- autoindent, ai ... odsazovánà nových rádek noai
- directorydir, dir ... pracovnà adresár /tmp
- ignorecase, ic ... ignorecase pri hledánà noic
- number, nu ... cÃsla rádek nonu
- shellpath, sh ... cesta k shellu /bin/sh
- showmatch, sm ... hledánà závorek nosm
- tabstopn, ts ... velikost tabelátoru 8
- wrapscan, ws ... hledánà pres konec souboru ws
- wrapmarginn, wm ... pravý okraj pro zalamovánÃ
0
61Predvolby ex a vi
- Pred spuÅ¡tenÃm editoru se provedou ex-prÃkazy
uložené v - promenné EXINIT
- domovském adresári ve scriptu .exrc
- aktuálnÃm adresári ve scriptu .exrc
- pokud je nastavena volba exrc (implicitne
vypnuta) - PrÃkazy se zapisujà bez úvodnà dvojtecky (jako v
ex).
62Filtr sed
- stream editor (filtr) velké soubory,
programovánà - volánÃ
- sed -n -e cmd -f script file
- prÃkazy se aplikujà na každou rádku
- prÃkazy se oddelujà strednÃkem nebo koncem rádky
- provádejà se v poradà zápisu
- prÃkaz nesmà koncit mezerou
- prÃklad
- hostname sed s/\..//
63sed - rozÅ¡Ãrenà syntaxe
- komentár
- n zapnutà prepÃnace -n
- adresa!prÃkaz doplnek adresnÃho prostoru
- adresa
- prÃkazy
- skupina prÃkazu
64sed - rozÅ¡Ãrenà prÃkazu (I)
- prÃkazy edu
- p, d, w, s
- a, c, i
- prÃkaz i vkládané rádky krome poslednà se
ukoncujà \sed 3a\ctvrta\pata - parametry prÃkazu substitute
- p ... modifikovaná rádka se vypÃÅ¡e na výstup
- w file ... modifikovaná rádka se vypÃÅ¡e do
souboru - konverze znaku
- y/intable/outtable/
- funkce analogická prÃkazu tr
65sed - rozÅ¡Ãrenà prÃkazu (II)
- rÃzenà toku
- n(ext) výpis rádky, nahrazenà dalšà rádkou
- label definice náveÅ¡tÃ
- b(ranch)label skok na náveštà (na konec)
- t(est) label podmÃnený skok
- (pokud od poslednÃho nactenà rádky nebo
poslednÃho provedenà prÃkazu test byla provedena
nejaká substituce) - pr.
- loop
- s/(())//
- t loop
- ... vymaže všechny (i vnorené) spárované závorky
66sed - rozÅ¡Ãrenà prÃkazu (III)
- vÃcerádkový prostor (zlom rádek ve vzoru \n)
- N(ext) pripojenà dalšà rádky ze vstupu
- P(rint) tisk prvnà rádky z prostoru
- D(elete) vymazánà prvnà rádky z prostoru
- záložnà prostor (hold space)
- h, H(old) kopie (append) do hold space
- g, G(et) kopie (append) do prostoru vzoru
- x(change) zámena prostoru
67PrÃklady použità prÃkazu sed
- sed /record/,/end/d program.pas
- vypÃÅ¡e program bez definic rekordu
- sed /procedure/i\ begin of procedure
program.pas - vypÃÅ¡e pred procedurami komentár
- sed 1pp program.pas
- vypÃÅ¡e zduplikovane prvnà a poslednà rádku
- sed -n 3,4!p program.pas
- vypÃÅ¡e program bez druhých dvou rádek
- sed -n /\(0-9\)\1/p /etc/passwd
- vypÃÅ¡e uživatele se stejným UID a GID
68PrÃklady použità prÃkazu substitute
- sed s/.//s//User / /etc/passwd
- výsledek User forst
- ls -1 .c sed s/\(.\).c/cp \1.c \1.bak/
- výsledek cp test.c test.bak
- echo ab sed s/a/b/s/b/a/
- výsledek ab
- správne y/ab/ba/ s/a/x/gs/b/a/gs/x/a/g
- sed s/.\(.\) \(.\)./\1 \2/ /etc/passwd
- výsledek Libor Forst/home/
- správne s/.\(.\) \(\)./\1 \2/
69Proces
- provádený program ... (nejméne jeden) proces
- kontext procesu
- pamet, soubory, promenné,...
- rodicovský proces???synovský proces
- komunikace
- signály, roury, sockety, sdÃlená pamet,...
- PID, prÃkaz ps
70Kontext procesu
- z hlediska uživatele
- kód, data, zásobnÃk
- otevrené soubory
- systémové promenné (environment)
- z hlediska systému
- obecné registry, programový cÃtac, stavový
registr procesoru, ukazatel do zásobnÃku,
registry pro operace v pohyblivé rádové cárce,
registry mapovánà pameti - pamet, kterou proces dosud adresoval v
uživatelském režimu - pamet v prostoru jádra, která je s daným procesem
spojena (napr. systémový zásobnÃk procesu)
71Vznik procesu
rodic (PID1)
syn (PID2)
0
PID2
data
data
zásobnÃk
zásobnÃk
72Funkce na vytvárenà procesu
- fork() vytvárà kopii rodicovského procesu
- exec() prekryje adresnà prostor procesu
zadaným programem - wait() (rodicovský proces) ceká na skoncenÃ
potomku - exit() ukoncà proces a aktivuje rodicovský
proces
73Uživatelská relace
fork()
init
getty
exec()
login login passwd
exec()
fork()
sh
ftp ftpgt
wait()
exit()
PID 1
PID 271
PID 312
74Stavy procesu
fork
ZOMBIE
SWAPPed
READY(IDLE)
swapout
swapin
swapin
swapout
exit
wakeup
RUNuser
SLEEPing
RUNkernel
sleep
volánà jádra,interrupt
75PrÃkaz ps
- PID, TTY, STAT, TIME a COMMAND vlastnÃch procesu
- BSD SystemV
- cizà procesy
- plný výpis
- trÃdenà (mj. existuje PD program top)
-a (all users) -x (no terminal)
-e (všechny)
-p PID -t tty -U user
-l (long) -u (usage)
-l (long) -f (full)
-okey, (pouze vyjmenované) -Okey, (vyjmenované
navÃc)
-r (cpu) -m (memory)
76Proces a I/O
- prÃstup ke vstupnÃm a výstupnÃm souborum pres
tzv. file-descriptory - 0 - standardnà vstup (stdin)
- 1 - standardnà výstup (stdout)
- 2 - standardnà chybový výstup (stderr)
- - dalÅ¡Ã otevÃrané soubory
stderr stdout stdin
2
1
0
77Komunikace mezi procesy
- zasÃlánà signálu
- vstup/výstup pres roury
- System V Interprocess Communication
- semafory
- zasÃlánà zpráv
- sdÃlená pamet
- BSD Sockets
- zasÃlánà zpráv, vytvárenà proudu
- v rámci jednoho systému i po sÃti
78Roury (pipes)
- v shellu - spojenà vstupu a výstupu dvou procesu
- v programu
- roura s externÃm prÃkazem popen, pclose
- roura mezi subprocesy pipe
- trvalé (pojmenované) roury
- zacleneny do systému souboru, typ p
- vytvárejà funkce/prÃkazy mknod resp. mkfifo
stdout
stdin
pipe
ls more
79Signály
- zaslánà signálu
- prÃkaz kill -signál PID
- funkce kill
- ošetrenà signálu
- shell-prÃkaz trap prÃkaz signal ...
- funkce signal
- standardnà handlery SIG_IGN, SIG_DFL, SIG_ERR
- nemaskovatelné signály KILL, STOP
- výpis signálu kill -l
80Nejduležitejšà signály
- HUP(1) restart programu
- INT(2), QUIT(3) prerušenà (C, \)
- ILL(4) chybná instrukce
- ABRT(6) volánà funkce abort
- FPE(8) aritmetická chyba
- KILL(9) (nemaskovatelné) ukoncenà procesu
- SEGV(11) chyba adresace
- SYS(12) chybné volánà systému
- ALRM(14) prerušenà od casovace
- TERM(15) (maskovatelné) ukoncenà procesu (kill)
- STOP(17), TSTP(18), CONT(19) zastavenà a spuÅ¡tenÃ
procesu - CHLD(20) ukoncenà syna
- USR1(30), USR2(31) uživatelské signály
81Synchronizace
- Pokud dva procesy sdÃlejà nejaký zdroj, je nutné
soucasný prÃstup ke kritickým sekcÃm programu
ošetrit zámkem - Test zámku a jeho nastavenà musà být
neprerušitelná dvojice operacà ? provádet v
privilegovaném režimu - Synchronizace pres soubor
- program se pokusà vytvorit tzv. lock soubor -
pokud se to nepodarÃ, je zdroj zamcen - po skoncenà programu se soubor smaže
- problém po havárii soubor nadále
existujereÅ¡enà do souboru se napÃÅ¡e PID procesu - problém aktivnà cekánà na uvolnenà zdroje
82System V Interprocess Communication
- semafory
- zobecnenà P a V operacà Dijkstra, Dekker
- ošetrenà dead-locku, havárie procesu
- funkce semget, semop, semctl
- zasÃlánà zpráv
- systém vytvorà komunikacnà kanál daného cÃsla
- funkce msgget, msgsnd, msgrcv, msgctl
- sdÃlená pamet
- systém pridá procesu do tabulky žádanou oblast
- funkce shmget, shmat, shmdt, shmctl
83BSD Sockets
- Socket - jeden konec kanálu pro klient-server
komunikaci - Systémové funkce
- - socket vytvárà deskriptor podle
- domény (address family) AF_UNIX, AF_ INET
- typu virtuálnà okruh (stream), datagram
- - bind prirazuje vlastnà adresu
- UNIX jméno, INET IP adresa, port
- - listen zahájà prÃjem zpráv (mj. stanovà délku
fronty) - - accept otevÃrá kanál ke klientovi
- - connect navazuje spojenà se servrem
84Terminál
- uživatel komunikuje se systémem prostrednictvÃm
terminálu - budto skutecného nebo pseudoterminálu - vlastnosti v /etc/termcap resp. /etc/terminfo
- typ terminálu v promenné TERM
- inicializace terminálu prÃkazem tset
- zmena vlastnostà prÃkazem stty (napr. stty erase
znak) - prÃstup na vlastnà terminál pres zarÃzenà /dev/tty
85RÃdÃcà znaky
- nekteré lze predefinovat, nekteré závisà na
shellu ? konzistence terminálu a shellu - typické sekvence
- CtrlH - backspace
- CtrlS - pozastavenà výpisu
- CtrlQ - pokracovánà výpisu
- CtrlC - ukoncenà procesu (SIGINT)
- Ctrl\ - dtto s dumpem (SIGQUIT)
- CtrlD - konec vstupnÃho souboru
- CtrlZ - suspendovánà procesu (SIGTSTP) dalÅ¡Ã
spuštenà fg resp. bg
86Práce s casem
- spuÅ¡tenà programu s merenÃm casu
- time command
- pozastavenà behu
- sleep seconds
- výpis aktuálnÃho data a casu
- date format
- Formát (shodný s funkcà strftime) text s
-direktivami - aAbB ... krátké/dlouhé jméno dne/mesÃce
- dmyYHMS ... datum a cas cÃselne
- uUVjC ... cÃslo dne v týdnu, týdne, dne v roce,
stoletà - cxX ... normálnà tvar data a casu
87Neinteraktivnà zpracovánÃ
- spuÅ¡tenà prÃkazu se zablokovaným signálem HUP a
QUIT a výstupem do HOME/nohup.out - nohup command
- spuÅ¡tenà prÃkazu v urcený cas (uživateli musà být
povoleno v souborech at.allow resp. at.deny,
výstup jde uživateli mailem) - at -t mmddHHMM time incr command
- prÃkaz umožnuje vypisovat (-l) a mazat (-r) joby
- dtto pravidelné spouštenà pomocà démona cron
- crontab -l
- prÃklad záznamu
- 0 1 1-2,5 /usr/sbin/backup
88Shell
- základnà program pro komunikaci s UNIXem
- nezávislá komponenta systému
- Bourne shell, C shell, Korn shell
- cte rádky a provádà prÃkazy
- vlastnà prÃkazy
- programy uložené v souborovém systému
- textový preprocesor
- metaznaky
- promenné
- programovacà jazyk jeho interpret
- scripty
89Vývoj shellu
Bourne shell (/bin/sh) Steven Bourne, 1979
C-shell (/bin/csh) Bill Joy, BSD UNIX
Korn shell (/bin/ksh) David Korn, pol. 80.
tcsh
Bourne again shell (bash), GNU
90Metaznaky
- znaky se speciálnÃm významem (napr. , gt)
- speciálnà význam se rušà (tzv. escape-sekvence)
- znakem \
- uzavrenÃm do uvozovek (neruÅ¡Ã význam \, a )
- uzavrenÃm do apostrofu (ruÅ¡Ã i význam \)
- platà i pro speciálnà význam znaku
- ltLFgt ... namÃsto odeslánà prÃkazu jen pokracovacÃ
rádka - mezera ... nekolik slov jako jeden parametr
- pozor zvlášte u složitejÅ¡Ãch prÃkazu(napr. sed
"s/ 0-9/ /" ...) - komentár komentár
91Expanznà znaky
- Retezec expanznÃch znaku se nahradà seznamem
vÅ¡ech jmen souboru, které mu vyhovujÃ. - - zastupuje libovolnou posloupnost znaku
- ? - zastupuje libovolný znak
- a-f0-9 - zastupuje znak ze seznamu
- a-z - zastupuje znak z doplnku seznamu (sh!)
- BÃlé znaky a znaky , , - se do seznamu zapisujÃ
uvozené znakem \. -
- Expanzi provádà shell !
- Expanze nezahrnuje úvodnà tecku ve jméne souboru.
92Základnà prÃkazy shellu
- comment - prázdný prÃkaz
- echo -n text - výpis retezce (bez odrádkovánÃ)
- cd dir - zmena adresáre (vlastnost shellu)
- pwd - výpis jména aktuálnÃho adresáre
- exit rc - ukoncenà shellu s návratovým kódem
- set prepÃnac - nastavenà prepÃnacu shellu
- ulimit limit - nastavenà uživatelských limitu
- umask mask - nastavenà defaultnÃho módu souboru
93Promenné v shellu
- namevalue - nastavenà hodnoty (sh a ksh)
- namevalue cmd - docasné nastavenà pro prÃkaz cmd
- name, name - použità hodnoty (textová
substituce) - Výpis hodnoty promenné set, echo name
- Promenné jsou soucástà environmentu.
- Synovskému procesu (subshell, roura) se predávajÃ
jen exportované promenné (prÃkazem export
variable). - Syn nemuže modifikovat promenné otce!
94Environmentové promenné
- IFS - oddelovac polà (Internal Field
Separator),implicitne IFSltmezeragtlttabgtltLFgt - PS1, PS2 - prompt, prompt na pokracovacà rádce
- PATH - cesta adresáre se spustitelnými soubory
(aktuálnà adresár nenà implicitnÃ!) - CDPATH - cesta pro prÃkaz cd
- TERM - typ terminálu
- SHELL - provádený shell
- LOGNAME - jméno uživatele
- HOME - domovský adresár
- MAIL - soubor s poštou
95PodmÃnená substituce promenných
hodnota, je-li promenná name
zápis
definována
nedefinována
name-value
name
value
namevalue
value
namevalue
name
valuenastavenà namevalue
name?value
name
echo value a exit
96PrÃkazové soubory - skripty
- prÃmé volánà (práva rx)
- script parametry
- volánà pres shell (práva r)
- sh optiony script parametry
- vložené volánà (bežà na stejné úrovni shellu)
- . script
- prvnà rádek muže obsahovat popis interpretu
- !cesta_k_interpretu optiony
- startovacà skripty (bežà na úrovni login-shellu)
- /etc/profile, .profile
97Práce s parametry, speciálnà promenné
- - pocet parametru scriptu
- 0 - název scriptu
- n - n-tý parametr scriptu
- shift n - posun cÃslovánà parametru
- set - text - nastavenà nových parametru
- pr. set - a b ? 1a, 2, 3b, 3
- - všechny parametry scriptu
- _at_ - dtto, ale _at_ je 1 2 ...
- ? - návratový kód poslednÃho prÃkazu
- - PID tohoto shellu
- ! - PID poslednÃho backgroundového jobu
98Presmerovánà vstupu prÃkazu
zápis presmerovánà ...
cmd lt file vstupu ze souboru file
cmd ltlt str vstupu ze vstupu shellu (textu
shellscriptu) vstup se chová jako text v
uvozovkách pr. ed xxx ltlt END cislo_radkyd EN
D
cmd ltlt \str dtto, text se chová jako v
apostrofech pr. ed xxx ltlt \END 1,d END
cmd ltlt - str dtto, text je možno
odsazovat pr. ed xxx ltlt- END 1,d END
99Presmerovánà výstupu prÃkazu
zápis presmerovánà ...
cmd gt file standardnÃho výstupu do souboru file
cmd 2gt file chybového výstupu do souboru
file pr. rm xxx 2gt /dev/null
cmd gtgt file standardnÃho výstupu na konec souboru
- cmd 2gtgt file chybového výstupu na konec souboru
cmd 2gt1 chybového výstupu do standardnÃho, pozo
r na poradà presmerovánà - grep xxx soubor gt
log 2gt1 presmeruje oba výstupy do souboru
log - grep xxx soubor 2gt1 gt log výstup do
souboru log, chyby na výstup
100Kombinovánà prÃkazu
- cmd1 cmd2
- roura (pipe) mezi prÃkazypr. ls -l .c wc -l
- cmd1 cmd2
- sekvence prÃkazu
- cmd1 cmd2, cmd1 cmd2
- podmÃnená sekvence prÃkazupr. rm aa echo
Soubor aa smazan - cmd1 cmd2
- skupina prÃkazu
- (cmd1 cmd2)
- provedenà prÃkazu v subshellupr. (cd wrk rm )
101PrÃkaz read
- PrÃkazem read var nacteme rádku ze vstupu do
promenné var - PrÃkaz nastavuje návratový kód (dá se testovat)
- Pokud má prÃkaz vÃce argumentu, cte postupne do
jednotlivých promenných pole vstupnà rádky (do
poslednà promenné zbytek) oddelovac polà udává
hodnota promenné IFS - Pri spuÅ¡tenà z prÃkazové rádky cte z terminálu,
ale lze jej presmerovat (read var lt file), naopak
lze vynutit ctenà z terminálu (read var
lt/dev/tty) - Pokud vstupnà rádka koncà znakem \, nacte se i
následujÃcà a spojà se (zapne/potlacà option
-e/-r)
102PrÃklady použità read
- echo -n NapiÅ¡ cÃslo read x
- ... precte odpoved
- IFSread user x x x name x lt /etc/passwd
- ... nacte login a jméno (prvnÃho) uživatele
- LHOSTss1000.ms.mff.cuni.czecho LHOST cut -f1
-d. read SHOST - ... nic (SHOST se nastavà v synovi)
- echo LHOST cut -f1 -d. gt /tmp/x. read SHOST
lt /tmp/x.rm /tmp/x.
103Náhrada výstupu prÃkazu
- ...cmd... - vloženà výstupu prÃkazu cmd do
textu prÃkazu - pr. SHOSTecho LHOST cut -f1 -d.
ß SHOSTpocitac - vložený prÃkaz bežà ve stejné úrovni shellu
- pozor na vnorené použitÃ
- nutno escapovat vnitrnà apostrofy
- od ksh výše lze použÃt ...(cmd)...
104VÃcenásobné ctenà rádky
- eval arg - argumenty se zpracujÃ, spojà se
mezerami, výsledek se znovu nacte a provede - pr. nameprvni
- eval nameretezec
ß prvniretezec - - priradà do promenné daného jména
- pr. eval echo \ - vypÃÅ¡e hodnotu
poslednÃho parametru
105RÃdÃcà struktury
if prÃkaz then prÃkazy elif prÃkaz
then prÃkazy else prÃkazy fi
case text in vzor1 vzor2 ) prÃkazy )
prÃkazy esac
whileuntil prÃkaz do prÃkazy done
for var in text do prÃkazy done
106PrÃkaz test
- volánà test podmÃnka nebo podmÃnka
- v prÃpade pravdivé podmÃnky vracà 0
- pozor na nenastavené promenné, mezery apod.
- Å¡patne -z x , -z"x"
- správne -z "x"
- logické operace (majà nepodmÃnené vyhodnocovánÃ)
- konjunkce cond1 -a cond2
- disjunkce cond1 -o cond2
- negace ! cond
- závorky ( cond )
- pozor - v shellu je nutno zrušit metavýznam
107Operátory prÃkazu test
-f file - soubor file existuje -d file - soubor
file je adresár -L file - soubor file je
symbolický link -r file - uživatel má k souboru
file právo r -w file - uživatel má k souboru file
právo w -x file - uživatel má k souboru file
právo x -s file - soubor file má nenulovou
délku -z str - retezec str je prázdný -n str -
retezec str je neprázdný str1 str2 - rovnost
retezcu str1 ! str2 - nerovnost retezcu int1 -eq
int2 - rovnost cÃsel (-ne, -lt, -le, -gt, -ge)
108PrÃkaz expr
- volánà expr opndA op opndB
- vypÃÅ¡e výsledek a vracà návratovou hodnotu
- shell nemá sám aritmetiku, práci s retezci!
- logické operátory , lt, gt, lt, gt, !
- aritmetické operátory , -, , /,
- retezcové operátory
- string regexp resp. match string regexp
- substr string pos len
- length string
- index string chars
- pozor na metaznaky
109RÃdÃcà struktury - if
Syntaxe if prÃkaz then prÃkazy elif prÃkaz
then prÃkazy else prÃkazy fi
PrÃklad if mkdir tmp then echo vytvoren elif
-d tmp then echo jiz existoval else echo
nejde vytvorit fi
110RÃdÃcà struktury - case
Syntaxe case text in vzor1 vzor2 )
prÃkazy ) prÃkazy esac
PrÃklad case 1 in -h -\? '' ) echo
"Navod ..." exit .Z ) uncompress 1 )
compress 1 esac
111RÃdÃcà struktury - while, until
Syntaxe while until prÃkaz do prÃkazy
break continue done lt file gt file
PrÃklad while read line do case line in
END ) break \ ) continue ) eval
line esac done lt script
112RÃdÃcà struktury - for
Syntaxe for var in text do prÃkazy break
continue done
PrÃklad lancz for x in do case x in
.lan ) cp x x_bak esac done
113Ctenà vstupnÃho souboru
- while read x lt file do ...
- ... cte stále prvnà rádku
- cat file while read x do yexpr y 1done
- ... promenná y se nastavà pouze v synovi
- cat file ( while read x do echo -n Mam
smazat x? (a/n) read z case z in a
A ) rm x esac yexpr y 1done echo y
) - ... promenná z se cte také ze souboru
- ... read z lt /dev/tty
114RÃdÃcà prÃkazy
- cmd - provedenà na pozadÃ
- wait - cekánà na skoncenà procesu na pozadÃ
-
- ...pocÃnaje csh je dokonalejÅ¡Ã správa (jobs,...)
- exec cmd - ukoncà shell a provede prÃkaz
-
- ...pocÃnaje ksh je možno priradit soubory
deskriptorum bežÃcÃho exempláre shellu
115Funkce
- Definice funkce name
- name()
- statements
-
- volánÃparametry stejné jako pri volánà prÃkazu
- uvnitr funkce jsou prÃstupné pomocà , 1 atp.
- návratovou hodnotou je návratová hodnota
poslednÃho prÃkazu, lze nastavit return val - priorita funkce, internà prÃkazy,
programyinternà prÃkaz lze vyvolat pomocÃ
command cmd - funkce se nededà do subshellu
116Ošetrenà signálu v shellu
- Internà prÃkaz trap command sig...
- PrÃkaz command se provádà v rámci shellu
- Synovský proces nemá možnost ošetrit signály
zamaskované otcem - Zamaskovánà signálu trap sig...
- Defaultnà ošetrenà trap sig...
117Postup zpracovánà rádky
- Postupuje se zleva doprava v následujÃcÃch
krocÃch - 1. rozdelenà rádky na atomy
- 2. zpracovánà rÃdÃcÃch operátoru
- 3. zpracovánà operátoru presmerovánÃ
- 4-5. náhrada promenných
- náhrada vložených prÃkazu
- 6. definice promenných
- 7. rozdelenà na pole
- 8. náhrada expanznÃch znaku
- 9. zruÅ¡enà escape-sekvencÃ
118Volby (options) shellu
- Volby se dajà zadat
- z prÃkazové rádky pri spuÅ¡tenà shellu
- na prvnà rádce shell-scriptu
- prÃkazem set
- Neduležitejšà volby
- -a ... všechny promenné jsou exportovány
- -e ... chyba v prÃkazu zpusobà ukoncenà shellu
- -f ... zákaz expandovánà znaku
- -n ... prÃkazy jsou pouze vypsány a neprovádà se
- -t ... provede se pouze jeden prÃkaz
- -v ... vypisujà se vstupnà rádky shellu
- -x ... prÃkazy se pred provedenÃm vypisujÃ
119C-shell
- Zásadnà odlišnosti
- .login, .cshrc startup script
- set varstr, env, setenv, _at_ var expr promenné
- foreach, výrazy a prÃkazy C
- gt, gtgt, presmerovánà chybového výstupu
- lt prÃmý vstup z terminálu
- Novinky prejaté nebo modifikované
- user domovský adresár
- varA,varB výcet variant pro expanzi
- ltESCgt kompletace jmen souboru
- history, !-n, !?str historie prÃkazu
- alias name str prejmenovávánà prÃkazu
- pushd, popd prÃkaz cd se zásobnÃkem
120Korn shell
- cd old new, cd - náhrada v ceste, undo cd
- VISUAL, set -o ed historie s opravovánÃm rádku
- \ resp. ltEscgtltEscgt kompletace jmen
- FPATH cesta pro funkce
- (), (), ?(), _at_(), !() regulárnà expanznÃ
znaky - varpat, , , var zkrácená o
min.(max.) retezec ze zac.(konce) vyhovujÃcÃ
vzoru - internà test (lt, gt, -nt, -ot, -O, -G)
- let varexp, (()) aritmetika
- ve, v, ves, set -A v str pole
- select, getopts, typeset
121Filtr awk
- Aho, Weinberger, Kernighan
- jazyk podobný C, s výhradou
- interpret
- práce s retezci
- verze awk, nawk, gawk
- volánÃ
- awk opt -f script pgm params file
-... - zpracovává postupne záznamy (rádky) zadaných
souboru a provádà na ne prÃkazy awk-skriptu - program (awk-skript) se skládá z klauzulÃ
- BEGIN END /regexp/ cond cmds ...
122PrÃklad programu awk
- BEGIN procedur0 lev0
- /procedure/
- print lev1
- radek1 procedur next
- if( radek gt 0 ) radek
- /begin/ if( lev gt 0 ) lev
- /end/ lev--
- lev 1 radek gt 0
- print "Radek" radek lev0
- END print "Procedur ", procedur
123Diagram behu programu (awk)
BEGIN
dalÅ¡Ãparametr?
ano
otevrenà souboru
dalÅ¡Ãzáznam?
ne
ne
ano
parsing záznamu
dalÅ¡Ãklauzule?
ne
ano
splnenapodmÃnka?
ano
procedura
END
ne
124Regulárnà výrazy (awk)
- Oproti regulárnÃm výrazum v edu chybÃ
- \lt, \gt, \, \, \(, \), \n
- Menà se mÃrne význam metaznaku
- , zacátek a konec záznamu/pole
- Objevujà se nové metaznaky
- exp, exp? opakovánà (gt0, lt1)
- exp1exp2exp3 varianty
- (, ) uzávorkovánà výrazu
- Regulárnà výraz musà být zapsán jako literál
(nenà možné testovat s výrazem uloženým v
promenné)!
125Záznamy (awk)
- Záznamem je typicky rádka
- Oddelovac záznamu je retezec, zmena RSstring
- napr. pro HTML RSlt
- Oddelovacem muže být i prázdná rádka RS
- Zmena se projevà až u následujÃcÃho záznamu
- CÃslo záznamu promenná NR
- Oddelovac záznamu na výstupu (retezec, který
ukoncuje prÃkaz print) ORSstring
126Pole záznamu (awk)
- Oddelovac polà zadán pri volánà volbou -Fregexp,
zmena oddelovace FSregexp - Oddelovac je regulárnà výraz, default " \t\n"
- napr. rádek ab
- má tri pole, pokud FS
- má dve pole, pokud FS nebo FS
- Zmena platà až od dalÅ¡Ãho záznamu
- Oddelovac parametru prÃkazu print OFSsep
- Pocet polà promenná NF
127Základnà syntaxe awk
- Jazyk awk je rádkove orientovaný
- PrÃkazy se oddelujà strednÃkem nebo koncem rádky,
prÃkaz musà být na jedné rádce - Má-li prÃkaz pokracovat na dalÅ¡Ã rádce, musÃ
predcházejÃcà rádka koncit zpetným
lomÃtkem(výjimka za podmÃnkou napr. prÃkazu if
muže následovat nová rádka) - Komentár text na rádce pocÃnaje znakem
128Konstanty, promenné, pole(awk)
- Konstanty
- bežné aritmetické konstanty
- retezce se vyznacujà uvozovkami
- escape sekvence \b, \f, \n, \r, \t, \ooo, \xxx
- Promenné
- majà aritmetickou i retezcovou hodnotu
- jsou inicializovány
- asociativnà pole (indexem je re