Úvod do UNIXu. Úvod, charakteristika Historie, principy Systém souborů, organizace, příkazy Procesy, životní cyklus, komunikace Shell: koncepce, typy, příkazy Zpracování textu ( ed, grep, sed, vi, awk). Libor Forst. Literatura (základy). - PowerPoint PPT Presentation
Text of Úvod do UNIXu
Úvod do UNIXuLibor Forst J.Brodský, L.Skoovský: Operaní 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 operaního systému; Grada 1993 M.Brandejs: UNIX - LINUX - praktický prvodce; Grada Praha 1993; ISBN 80-7169-170-4 G.Todino, J.Strang, J.Peek: Learning the UNIX Operating System; O‘Reilly & Associates 1993 L.Lamb: Learning the vi Editor; O‘Reilly & Associates 1986-1990; ISBN 0-937175-67-6 Úvod do UNIXu M.J.Bach: The Design of the UNIX Operating System; Prentice-Hall 1986 L.Skoovský: Principy a problémy operaního systému UNIX; Science, 1993; ISBN 80-901475-0-X L.Skoovský: UNIX, POSIX, Plan9; L. Skoovský, Brno, 1998; ISBN 80-902612-0-5 M.Welsh, L.Kaufmann: Pouíváme LINUX; ComputerPress 1997 (O’Reilly); ISBN 80-7226-001-4 Úvod do UNIXu Literatura (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; O‘Reilly & Associates 1993; ISBN 1-56592-054-6 D.Dougherty: sed & awk; O‘Reilly & Associates 1990; ISBN 0-937175-59-5 D.Curry: Using C on the UNIX System; O‘Reilly & Associates 1985,7,8; ISBN 0-937175-23-4 A.Oram, S.Talbott: Managing Projects with make; O‘Reilly & Associates 1986,91; ISBN 0-937175-90-0 Úvod do UNIXu - píše se tak, jak je zapsána: man [-k] [section] topic man [-k] [section] topic ....................................................... 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 soubor pro PDP-7 1970 - Multi-cs => Uni-x (snad Brian Kernighan) 1971 - Thompson ádá nový poíta PDP-11 pro další vývoj - zamítnuto Thompson pedstírá vývoj systému automatizované kanceláe - poíta pidlen - zpracování text 1973 - UNIX pepsán do jazyka C vytvoeného za tím úelem Dennisem Ritchiem Úvod do UNIXu pedevším University of California Berkeley 1979 - v Berkeley pepisují UNIX pro 32bitový VAX BSD Unix (Berkeley System Distribution) verze 3.0; dnes verze 4.4 Bell Labs pecházejí pod AT&T a pokraují ve vývoji verze III a V.4 - tzv. SVR4 UNIX uvolnn i pro komerci: Microsoft a SCO vyvíjejí pro Intel XENIX vznikají UNIX International, OSF (Open Software Foundation), X/OPEN,... 4 SVID (System V Interface Definition) “fialová kniha”, kterou AT&T vydala poprvé v roce 1985 jako standard, jeho splnní je nutnou podmínkou pro pouití obchodního názvu UNIX POSIX (Portable Operating System based on UNIX) série standard organizace IEEE znaená P1003.xx, postupn je pejímá vrcholový nadnárodní orgán ISO XPG (X/Open Portability Guide) doporuení konsorcia X/Open, které bylo zaloeno v r. 1984 pedními výrobci platforem Single UNIX Specification standard organizace Open Group, vzniklé v roce 1996 slouením X/Open a OSF dnes Version 2 (UNIX98) Úvod do UNIXu píkaz man Plánování proces pro sdílení asu CPU (plánovací algoritmus, pidlování asových kvant, priority,...) Úvod do UNIXu uivatelský (user mode): omezený pístup k pamti, instrukcím,... privilegovaný reim (kernel mode) HW chyby Úvod do UNIXu /etc - konfiguraní adresá /home - koen domovských adresá /usr/local - lokální soubory /usr/man - manuálové stránky vzniká duplikací rodiovského procesu roura - tok dat od producenta ke konzumentu: ls | more Úvod do UNIXu nezávislá komponenta systému: více shell formát píkaz: metaznaky, nap.: umouje pímé programování; skripty 5 - formáty soubor íslo (UID); superuivatel (root) má UID 0 íslo (GID) primární skupiny íslo skupiny (GID) seznam len skupiny Ve skupin jsou navíc i všichni uivatelé, kteí ji mají uvedenu jako svoji primární skupinu. 8 Uivatelská relace Po pihlášení k systému se uivateli spustí jeho shell. Tím se zahájí jeho uivatelská relace (session). ukonení session: logout ukonení shellu: exit výpis nalogovaných uivatel: who, w výpis logu relací: last on-line rozhovor: píjem: mail pesmrování píjmu: $HOME/.forward diskové svazky, síové disky jméno souboru volby: dlouhý výpis (l), krátký výpis do 1 sloupce (1), psát i skryté (a), vypsat/potlait skupiny (g), tídit podle asu (t), tídit pozpátku (r), znait typ souboru (F), rekurze (R) resp. jen adresáe (d), sledovat linky (L) -rwxr-x--x 2 forst users 274 Jan 5 17:11 test Úvod do UNIXu symbolické linky (l) ti kategorie: vlastník (u), skupina (g), ostatní (o); platí vdy nejspeciálnjší kategorie, v ní je uivatel ti práva: tení (r), zápis (w), provádní souboru resp. pepnutí se do adresáe (x) setUID, setGID (s) pro proveditelné soubory: propjení identity (skupiny) vlastníka setGID pro soubor bez práva spuštní pro skupinu: kontrola zámk pi kadém pístupu (výpis: S) sticky bit (t) pro spustitelné soubory: ponechání souboru v pamti sticky bit pro adresáe: práva k souborm mají jen vlastníci soubor a nikoli vlastníci adresáe setGID pro adresá: nové soubory budou mít stejnou skupinu jako adresá Úvod do UNIXu chmod [-R] 775 file... zmna vlastníka: chown, chgrp defaultní maska: umask mask_complement vlastník (u) skupina (g) ostatní (o) Systémová: filesystem boot blok 15 Kadý soubor na disku má práv jeden I-node, který obsahuje: poet link vlastník, skupina pístupová práva typ souboru velikost souboru 16 smazání souboru: rm [-rfi] zmna aktuálního adresáe: cd výpis aktuálního adresáe: pwd vytvoení adresáe: mkdir [-p] výpis soubor po stránkách: more, pg, less výpis zaátku souboru: head [-n] [files] výpis konce souboru: tail { | -n | +n | -f } [files] výpis souboru pro tisk: pr poet byt, slov a á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” ... Píkazy (* - me pedcházet prefix potu k): mezera, d ... další stránka, pl stránky (*) return ... další ádka (* - k nastaví default) s, f, b ... pesko k ádek, stránek, stránek zpt (*) /regexp, n ... hledej k-tý výskyt etzce (*) ’ ... návrat na zaátek hledání =, h ... výpis pozice, helpu Úvod do UNIXu comm [ -123 ] file1 file2 cut { -clist | -flist -dchar } [files] spojení soubor „po sloupcích“ resp. ádek souboru: paste [[ -s ] -dchar ] [files] rozdlení souboru po ádcích: konverze znak: 46 Zadání tídícího pole: tvar field[.char] ... íslování od 0, 0 je default Modifikátory: b (bez mezer), f (ignorcase), n (ísla), r (opan) Pepínae: t (oddlova pole), u (vylu stejné klíe), c (jen kontroluje uspoádání) Více klí (pozice se íslují od 1, pos2 je poslední znak!): sort -kpos1[,pos2][mod] -k... [files] Úvod do UNIXu podmínky: user, group, perm píklad: zkratky: which, whereis Úvod do UNIXu volání: xargs {-llines | -nwords } píkaz opakuje píkaz, jako argumenty doplní vdy text z lines ádek standardního vstupu resp. kadých words slov standardního vstupu volání: xargs -i píkaz opakuje píkaz pro kadou ádku standardního vstupu, její text doplní do píkazu na místa oznaená {} p.: ls -1 *.c | xargs -i cp {} {}.bak Úvod do UNIXu - p.: tar cf - . | ssh host tar xf - komprese soubor práce s páskou: mt {fsf n | bsf n | rewind} 20 Speciální znaky: p.: [a-z0-9_], []^-], [\]\^\-\\] exp\{n\}, exp\{m,n\} … opakování nkrát, m-nkrát \(, \), \n … ást vzoru a její pouití (nap. v náhrad) p.: A\(.\)\1\{1,\}A Úvod do UNIXu Úvod do UNIXu /vzorek … hledání vzorku J … spojení ádek h (<BKSPC>), j, k, l (<SPACE>) … o k pozic (, , , ) w, b, e, W, B, E … o k slov (vped, vzad, na konec resp. bez interpunkce) (, ), {, [[ … na zaátek (následující) vty, §, sekce + (<LF>), - … zaátek následující (pedchozí) ádky $, 0, ^ … konec ádky, zaátek, první nemezerový znak fx, Fx, tx, Tx, ;, , …znak x na ádce (dopedu, dozadu), znak ped x, znak za x, opakuj, opakuj v opaném smru /regexp, ?regexp, /, ?, n, N …hledání vzoru dopedu, dozadu, opakuj vzor, opakuj hledání, opakuj obrácen ^F, ^B, ^D, ^U …stránka dopedu, dozadu, pl stránky Úvod do UNIXu [k]H … posun na k-tou ádku na obrazovce [1] [k]L … posun na k-tou ádku od konce obrazovky [1] M … posun na prostední ádku na obrazovce [k]G … posun na k-tou ádku souboru [poslední] Práce se znakou x (malé písmeno): ‘x … posun na pozici oznaenou znakou x ‘‘ … posun na poslední oznaenou pozici ’x … posun na zaátek ádky se znakou x ’’ … posun na zaátek naposledy oznaené ádky (oznaení se provede píkazem mx) Úvod do UNIXu i, a, I, A … vkládání ped (za) kurzor, ádku o, O … vkládání do nové adky pod (nad) aktuální (open) ~ …zmna malé/velké písmena pod kurzorem * rx …pepis znaku pod kurzorem znakem x * R …zahájení reimu vstupu v pepisovacím módu cm … náhrada textu od kurzoru do pozice dané píkazem pro pohyb m cc, C … náhrada celé ádky resp. do konce ádky s, S … sma znak (ádku) a pejdi do reimu vstupu Píkazy oznaené * nepepínají do reimu vstupu. Úvod do UNIXu Ped píkazy me pedcházet opakovací faktor k x, X ... mazání znaku pod (ped) kurzorem dm … mazání textu od kurzoru do pozice dané píkazem pro pohyb m dd, D … mazání celé ádky resp. do konce ádky Smazaný text se uloí do oíslovaného bufferu. p, P … vloení bufferu za (ped) kurzor (píp. ádku) ”np, ”nP … vloení n-tého posledního bufferu ”xp, ”xP … vloení bufferu x (x je malé písmeno) Jiný zpsob vloení textu do (pojmenovaného) bufferu: [”x]ym … vloení textu po pozici danou píkazem m [”x]yy, [”x]Y … vloení ádky Úvod do UNIXu J … slepení ádky s následující ^L, ^R … obnovení obrazovky o … pechod do celoobrazovkového reimu z<LF>, z., z- … scrollování, aktuální ádka se octne na zaátku (uprosted, na konci) obrazovky ^E, ^Y … scrollování o ádku ^G … vypsání informace o poloze v editovaném souboru !m cmd, !!cmd … pouití bloku textu jako vstup a vloení výstupu píkazu do textu @x … provedení píkaz uloených v bufferu x % … skok na odpovídající ), ], } nebo > Úvod do UNIXu - edituje kopii souboru, opravy je nutno zapsat - píkazy ze vstupu (ed-skripty) - edituje vstupní proud, výsledek vypisuje - editovací píkazy jsou souástí volání - volání: sed píkazy [soubor ...] Úvod do UNIXu ex soubor Syntaxe píkaz: ed sed . aktuální ádce - n ádce s íslem n (od 1) ádce s íslem n $ poslední ádce poslední ádce /pat/ násl. . se vzorkem kadé . se vzorkem ?pat? pedch. . se vzorkem - ’x . oznaené znakou x - adr±[n] relativn k . s adresou adr - Úvod do UNIXu a(ppend), c(hange), i(nsert) … vkládání textu (nové ádky následují a koní ádkou se samotnou tekou) d(elete), j(oin) … mazání, spojování ádek m(ove)adr, t(o)adr … pesun, kopírování za ádku adr s(ubst)/[pattern]/replacement/{g|n} … náhrada etzc g(lobal)/regexp/cmd [\<LF>cmd] v/regexp/cmd … provedení na ádky neobsahující vzor p(rint), n(um), l(ist) … tisk, s ísly, s netisknutelnými znaky (dají se pipojovat za ostatní píkazy) rfile … vloení textu souboru Úvod do UNIXu u(ndo) … zrušení poslední opravy e(dit) [file] … (znovu)otevení souboru w(rite) [file] … uloení (pod jiným jménem) (v pípad udání rozsahu se zapíše jen rozsah) W(rite) file … pipsání do souboru * w(rite)!cmd … zápis do roury * q(uit) … ukonení editace Úvod do UNIXu fgrep (fast - pouze etzec, ale ne jen jeden) a nkteré další (nap.GNU) -e expression, -f filename -lines ... poet vypsaných ádek ped a po nalezené (není zcela penositelné) Úvod do UNIXu adresy mohou být oddleny stedníkem - první ádka se stává aktuální rozšíení píkazu substitute regexp metaznak ~ ... pedchozí regexp repl sekvence \u, \l, \U, \L ... pevod malá/velká (na celé slovo) nové píkazy <count, >count … indentace j(oin)[!] … spojení ádek, po . pidává dv mezery, po ) ádnou, jinak jednu (! ... bez mezer) ya(nk)[x], pu(t)[x] … práce s (pojmenovanými) buffery Úvod do UNIXu so(urce) … provedení souboru x, wq … zápis a ukonení editace q, q! … ukonení editace (bez uloení zmn) n[!], e[!] [file] … editace dalšího souboru (% znaí aktuální jméno souboru, # alternativní jméno), pojmenované buffery, poslední regexp a píkaz se nemaou ab word string, una … zkratka map[!] {char | #n} string, unm … mapování znaku resp. funkní klávesy (pro reim vstupu); ídící znaky pes ^V Úvod do UNIXu number, nu ... ísla ádek [nonu] shell=path, sh ... cesta k shellu [=/bin/sh] showmatch, sm ... hledání závorek [nosm] tabstop=n, ts ... velikost tabelátoru [=8] wrapscan, ws ... hledání pes konec souboru [ws] wrapmargin=n, wm ... pravý okraj pro zalamování [=0] Úvod do UNIXu promnné EXINIT pokud je nastavena volba exrc (implicitn vypnuta) Píkazy se zapisují bez úvodní dvojteky (jako v ex). Úvod do UNIXu volání: píkazy se aplikují na kadou ádku píkazy se oddlují stedníkem nebo koncem ádky provádjí se v poadí zápisu píkaz nesmí konit mezerou sed ’3a\ w file ... modifikovaná ádka se vypíše do souboru konverze znak :label … definice návští t(est) [label] … podmínný skok (pokud od posledního natení ádky nebo posledního provedení píkazu test byla provedena njaká substituce) p.: :loop s/([^()]*)// Úvod do UNIXu N(ext) … pipojení další ádky ze vstupu P(rint) … tisk první ádky z prostoru D(elete) … vymazání první ádky z prostoru záloní prostor (hold space) x(change) … zámna prostor Úvod do UNIXu sed ’/procedure/i\ sed -n ’3,4!p’ program.pas sed -n ’/:\([0-9]*\):\1:/p’ /etc/passwd vypíše uivatele se stejným UID a GID Úvod do UNIXu výsledek: cp test.c test.bak echo ab | sed ’s/a/b/;s/b/a/’ výsledek: Libor Forst:/home/ kontext procesu PID, píkaz ps Úvod do UNIXu obecné registry, programový íta, stavový registr procesoru, ukazatel do zásobníku, registry pro operace v pohyblivé ádové árce, registry mapování pamti pamt, kterou proces dosud adresoval v uivatelském reimu pam v prostoru jádra, která je s daným procesem spojena (nap. systémový zásobník procesu) Úvod do UNIXu exec() … pekryje adresní prostor procesu zadaným programem wait() … (rodiovský proces) eká na skonení potomk exit() … ukoní proces a aktivuje rodiovský proces Úvod do UNIXu BSD SystemV cizí procesy: plný výpis: -a (all users) -x (no terminal) -l (long) -u (usage) -l (long) -f (full) -r (cpu) -m (memory) 0 - standardní vstup (stdin) 1 - standardní výstup (stdout) … - další otevírané soubory Úvod do UNIXu v programu: roura mezi subprocesy: pipe vytváejí funkce/píkazy mknod resp. mkfifo stdout pipe stdin nemaskovatelné signály: KILL, STOP výpis signál: kill -l STOP(17), TSTP(18), CONT(19) zastavení a spuštní procesu CHLD(20) ukonení syna SISAL Synchronizace Pokud dva procesy sdílejí njaký zdroj, je nutné souasný pístup ke kritickým sekcím program ošetit zámkem Test zámku a jeho nastavení musí být neperušitelná dvojice operací provádt v privilegovaném reimu Synchronizace pes soubor: program se pokusí vytvoit tzv. lock soubor - pokud se to nepodaí, je zdroj zamen po skonení programu se soubor smae problém: po havárii soubor nadále existuje ešení: do souboru se napíše PID procesu problém: aktivní ekání na uvolnní zdroje Úvod do UNIXu ošetení dead-locku, havárie procesu funkce: semget, semop, semctl funkce: msgget, msgsnd, msgrcv, msgctl sdílená pam: funkce: shmget, shmat, shmdt, shmctl Úvod do UNIXu Systémové funkce: typu: virtuální okruh (stream), datagram - bind piazuje vlastní adresu: - listen zahájí píjem zpráv (mj. stanoví délku fronty) - accept otevírá kanál ke klientovi - connect navazuje spojení se servrem Úvod do UNIXu vlastnosti v /etc/termcap resp. /etc/terminfo typ terminálu v promnné TERM inicializace terminálu píkazem tset zmna vlastností píkazem stty (nap. stty erase znak) 28 nkteré lze pedefinovat, nkteré závisí na shellu konzistence terminálu a shellu typické sekvence: Úvod do UNIXu time command pozastavení bhu: sleep seconds date [ +format ] aAbB ... krátké/dlouhé jméno dne/msíce uUVjC ... íslo dne v týdnu, týdne, dne v roce, století cxX ... “normální” tvar data a asu Úvod do UNIXu Neinteraktivní zpracování spuštní píkazu se zablokovaným signálem HUP a QUIT a výstupem do $HOME/nohup.out nohup command spuštní píkazu v urený as (uivateli musí být povoleno v souborech at.allow resp. at.deny, výstup jde uivateli mailem): at {-t mmddHHMM | time [+incr ] } command píkaz umouje vypisovat (-l) a mazat (-r) joby dtto pravidelné spouštní pomocí démona cron: crontab [-l] píklad záznamu: nezávislá komponenta systému te ádky a provádí píkazy vlastní píkazy textový preprocesor speciální význam se ruší (tzv. escape-sekvence) znakem \ <LF> ... namísto odeslání píkazu jen pokraovací ádka mezera ... nkolik slov jako jeden parametr pozor zvlášt u sloitjších píkaz (nap. sed "s/ [0-9]*/ #/" ...) Expanzní znaky etzec expanzních znak se nahradí seznamem všech jmen soubor, které mu vyhovují. * - zastupuje libovolnou posloupnost znak [^a-z] - zastupuje znak z doplku seznamu (sh:!) Bílé znaky a znaky ^, ], - se do seznamu zapisují uvozené znakem \. Expanzi provádí shell ! Úvod do UNIXu cd [dir ] - zmna adresáe (vlastnost shellu) pwd - výpis jména aktuálního adresáe exit [rc] - ukonení shellu s návratovým kódem set pepína - nastavení pepína shellu ulimit limit - nastavení uivatelských limit umask [mask] - nastavení defaultního módu soubor Úvod do UNIXu name=value cmd - doasné nastavení pro píkaz cmd $name, ${name} - pouití hodnoty (textová substituce) Výpis hodnoty promnné: set, echo $name Promnné jsou souástí environmentu. Syn neme modifikovat promnné otce! Úvod do UNIXu implicitn: IFS=<mezera><tab><LF> PS1, PS2 - prompt, prompt na pokraovací ádce PATH - cesta: adresáe se spustitelnými soubory (aktuální adresá není implicitní!) CDPATH - cesta pro píkaz cd TERM - typ terminálu SHELL - provádný shell LOGNAME - jméno uivatele HOME - domovský adresá sh [optiony] script parametry . script #!cesta_k_interpretu [optiony] /etc/profile, .profile $# - poet parametr scriptu $0 - název scriptu p.: set - a + b $1=”a”, $2=”+”, $3=”b”, $#=3 $* - všechny parametry scriptu $? - návratový kód posledního píkazu p.: ed xxx << \END zápis pesmrování ... vstup se chová jako text v uvozovkách p.: ed xxx << END p.: ed xxx <<- END cmd > file standardního výstupu do souboru file cmd >> file standardního výstupu na konec souboru cmd 2> file chybového výstupu do souboru file p.: rm xxx 2> /dev/null cmd 2>&1 chybového výstupu do standardního, pozor na poadí pesmrování: výstup do souboru log, chyby na výstup zápis pesmrování ... cmd1; cmd2 sekvence píkaz { cmd1; cmd2;} skupina píkaz (cmd1; cmd2) Píkazem read var nateme ádku ze vstupu do promnné var Píkaz nastavuje návratový kód (dá se testovat) Pokud má píkaz více argument, te postupn do jednotlivých promnných pole vstupní ádky (do poslední promnné zbytek); oddlova polí udává hodnota promnné IFS Pi spuštní z píkazové ádky te z terminálu, ale lze jej pesmrovat (read var < file), naopak lze vynutit tení z terminálu (read var </dev/tty) Pokud vstupní ádka koní znakem \, nate se i následující a spojí se (zapne/potlaí option -e/-r) Úvod do UNIXu ... pete odpov ... nate login a jméno (prvního) uivatele LHOST=ss1000.ms.mff.cuni.cz ... nic (SHOST se nastaví v „synovi“) echo $LHOST | cut -f1 -d. > /tmp/x.$$ read SHOST < /tmp/x.$$ rm /tmp/x.$$ p.: SHOST=`echo $LHOST | cut -f1 -d.` ß pozor na vnoené pouití nutno „escapovat“ vnitní apostrofy Úvod do UNIXu výsledek se znovu nate a provede p.: name=prvni eval $name=retezec p.: eval echo \$$# v pípad pravdivé podmínky vrací 0 pozor na nenastavené promnné, mezery apod.: špatn: [ -z = $x ], [-z="$x"] správn: [ -z = "$x" ] konjunkce: cond1 -a cond2 disjunkce: cond1 -o cond2 Úvod do UNIXu -d file - soubor file je adresá -L file - soubor file je symbolický link -r file - uivatel má k souboru file právo r -w file - uivatel má k souboru file právo w -x file - uivatel má k souboru file právo x -s file - soubor file má nenulovou délku -z str - etzec str je prázdný -n str - etzec str je neprázdný str1 = str2 - rovnost etzc str1 != str2 - nerovnost etzc int1 -eq int2 - rovnost ísel (-ne, -lt, -le, -gt, -ge) Úvod do UNIXu vypíše výsledek a vrací návratovou hodnotu shell nemá sám aritmetiku, práci s etzci! logické operátory: =, <, >, <=, >=, != aritmetické operátory: +, -, *, /, % etzcové operátory: ... te stále první ádku y=`expr $y + 1` cat file | ( while read x; do echo -n ”Mam smazat $x? (a/[n]) ” read z ... read z < /dev/tty Úvod do UNIXu ...poínaje csh je dokonalejší správa (jobs,...) exec cmd - ukoní shell…