U N I X ======= Autor : ing. Ales Limpouch, KP FEL CVUT Praha Tento text by mel slouzit jako rychlokucharka pro zacatecniky, ktery chteji zacit pouzivat operacni system UNIX. Poskytuje zakladni poznamky, rozdeleni a prehled zakladnich prikazu, o kterych by mel vedet uzivatel jiz od pocatku prace. Dalsi informace o uvedenych i neuvedenych prikazech lze ziskat napr. primo pri praci se systemem z rozsahle on-line dokumentace. Cast informaci je silne zavisla na konkretnim systemu, se kterym pracujete, na jeho instalaci a na tom, jake Vam spravce systemu pripravil prostredi pro praci pri pridelovani Vaseho konta. Operacni system UNIX je viceuzivatelsky viceulohovy operacni system, ktery poskytuje uzivateli moznost prace se soubory, spusteni procesu a velke mnozstvi standardnich uzivatelskych programu (mj. interpret uzivatelskych prikazu), ktere poskytuji uzivateli neobvyklou flexibilitu pri praci s pocitacem. Soucasna aktualni verze systemu je UNIX System V Release 4. Operacni system SunOS v.4.1.1 je s ni do znacne miry komaptibilni. Zakladni charakteristiky OS UNIX: - hierarchicky system souboru s pripojitelnymi svazky; - sjednocene ovladani souboru, perifernich zarizeni a predavani dat mezi procesy; - dynamicke vytvareni procesu; - uzivatelska volba interpretu prikazu; - sobestacnost v udrzbe programu a dokumentace; - prenositelnost. UNIX ma pruhlednou zakladni strukturu. Jadro systemu poskytuje zakladni sluzby tykajici se procesu, souboru a perifernich zarizeni. Jadro je obaleno vrstvou procesu, ktere jsou nositeli vsech cinnosti, tzn. i prostrednikem mezi jadrem a uzivatelem u terminalu. Timto prostrednikem je zpravidla nektery z interpretu uzivatelskych prikazu (tzv. "shell"). 1. Zakladni prace s terminalem - prihlaseni a odhlaseni ------------------------------------------------------- Na prihlasovaci vyzvu systemu login: zada uzivatel sve uzivatelske (prihlasovaci) jmeno. Toto jmeno prideluje spravce systemu. System potom pozada uzivatele o udani hesla vyzvou password: Po spravnem zadani hesla se spusti interpret prikazoveho jazyka, ktery se ohlasi uzivateli vypisem vyzvy. Tato vyzva je tvorena jednim nebo vice znaky a lze ji uzivatelsky menit. Zpravidla se objevi znak $ (Bourne shell) nebo % (C-shellu). Odhlaseni ze systemu se provede prikazem "logout". Ve standardnim UNIXu by stacilo take pouziti znaku EOF (obvykle ctrl-d). Tim jsou obvykle ukonceny vsechny bezici procesy uzivatele. Pri praci s terminalem maji nektere znaky specialni vyznam. Existuji specialni znaky interpretovane primo terminalem nebo v jeho vyrovnavaci pameti. Napr. existuji znaky pro vymaz posledniho znaku a vymaz cele radky (standardne "#" a "@", casto ctrl-h a ctrl-u). Pokud chceme zabranit specialni interpretaci znaku pouzijeme znak "\". Znak \ je potom mozno zadat jako "\\". Dalsi specialni znaky terminalu: INTR pozornost (preruseni) (DEL, ctrl-c) QUIT ukonceni (ctrl-d) ERASE vymaz znaku (ctrl-h) KILL vymaz radku (crtl-u) EOF konec souboru (ctrl-d) NL novy radek (LF) STOP zastaveni vypisu (ctrl-s) START obnoveni vypisu (ctrl-q) Prikaz pro zmenu vlastnosti terminalu: stty [opts] nastaveni vlastnosti terminalu erase c c ma funkci vymazu znaku kill c c ma funkci vymazu radku -tabs prevod TAB na mezery Prikaz pro shell ma obvykle tvar posloupnosti slov oddelenych vzajemne alespon jednou mezerou. Prvni slovo je chapano obvykle jako jmeno prikazu a pripadna dalsi se interpretuji dle pouziteho prikazu jako klice (options, obvykle uvozeny znakem "-" ) nebo argumenty prikazu (napr. jmena souboru). Format prikazu shellu je command [ opts ] [ args ] kde znaky [ ] ohranicuji nepovinne parametry. Delka prikazu neni omezena. Uzivatel muze prejit pri zapisu prikazu na novy radek pomoci znaku "\(RETURN)" (shell pritom reaguje vypisem pokracovaci vyzvy (obvykle "> ")). 2. System souboru a adresaru ---------------------------- V systemu souboru a adresaru OS UNIX rozlisujeme tri zakladni typy souboru: - bezne soubory - adresare - specialni soubory Bezny soubor je posloupnost slabik. Pomoci sluzeb jadra lze ziskat sekvencni i primy pristup ke kazde slabice. Adresar je soubor obsahujici jmena souboru, prip. adresaru. Adresare tvori acyklickou stromovou strukturu. Na vrcholu stromu je korenovy adresar, ktery ma jmeno "/". Specialni soubor je soubor, ktery system poskytuje uzivateli pro ovladani perifernich zarizeni. Pro vsechny soubory je udrzovana pouze jejich posledni verze. Soubory jsou reprezentovany identifikacnim uzlem (i-node). O souboru jsou uchovavany tyto informace: typ souboru, identifikacni cisla vlastnika a skupiny, pristupova prava, casy posledniho zapisu, pouziti (cteni nebo provedeni) a zmeny i-node a umisteni datovych bloku na disku (resp. urceni periferniho zarizeni). Je vhodne si vsimnout, ze soucasti tohoto uzlu neni napr. jmeno souboru. 2.1 Prace se soubory -------------------- Bezne soubory mohou obsahovat informace textove nebo binarni. Jmeno souboru je retezec (az 14) znaku kodu ASCII, ktery neobasahuje znak "/". Koncove znaky oddelene od pocatecnich teckou se casto oznacuji jako pripona. Tecka je vsak pouze jednim ze znaku jmena souboru a nema pevne stanovenou pozici. Pri specifikaci jmen souboru lze pouzivat nektere specialni znaky: * libovolny textovy retezec (i nulove delky) ? jeden libovolny znak [ ] umoznuje stanovit mnozinu znaku pro urcitou pozici ve jmenu souboru Prikazy pro praci se soubory: cp file1 file2 kopie souboru file1 do file2 cp files dirname kopie souboru files do adresare dirname mv file1 file2 prejmenovani souboru file1 na file2 (vcetne zmeny jmena adresare) mv files dirname premisteni files do adresare dirname rm [-fir] files smazani souboru fileX f ruseni bez dotazu i selektivni interaktivni ruseni r zruseni celeho podstromu vceten adresaru (i neprazdnych) Prikazy pro praci s obsahem souboru: file files urcuje obsah souboru (podle prvnich 512 slabik souboru) cat files vypis textoveho souboru na terminal cat [-u] vypis znaku zadavanych z klavesnice u vypis ihned tail [+n][-n][lbc] fileX vypis konce textoveho souboru fileX, -n delka vypisu od konce (impl. -10) +n prvni vypisovana pozice od zacatku urceni typu delky: l radky (impl.) c znaky b bloky more [-c] [-n] files prohlizeni textoveho souboru c vypis od horniho okraje obrazovky -n delka vypisu pred zastavenim z klavesnice lze ridit dalsi vypis: q ukonceni cinnosti SPACE dalsi vypis +ln vypis od radku v poradi ln /p vypis od nejblizsiho vyskytu p i:n vypis od dalsiho souboru i:p vypis od predchazejiciho souboru (i pocet preskocenych souboru) h help od [-bcdox] file vypis binarniho souboru b oktalove po znacich c znakove po znacich (\ooo nezobrazitelne znaky) d dekadicky po slovech o oktalove po slovech (impl.) x hexadecimalne po slovech cmp [-l] [-s] f1 f2 porovnani souboru f1 a f2 po nalezeni rozdilu se beh ukonci l vypis vsech rozdilu (poradi a oktalovy obsah slabiky) s produkuje navratovy kod (shell) Prikaz pro archivaci souboru: tar [keys] [names] tape archiver - presun souboru names (prip. vcetne podadresaru) mezi diskem a jinym mediem keys: c vytvoreni (create) archivu x presun z archivu na disk (extract) t vypis obsahu archivu r pripojeni souboru na konec archivu f fname urceni archivu (zarizeni, soubor) 2.2 Prace s adresari -------------------- Adresar je soubor, ktery obsahuje zaznamy o jmenech souboru a cislech jejich i-nodes, tj. odkazy na soubor. Muze existovat vice ruznych odkazu v ruznych adresarich na jediny soubor (tentyz i-node). Uplne jmeno souboru se sklada z cesty (path) strukturou stromu adresaru (od korenoveho adreare) a prosteho jmena souboru. Jmena adresaru v ceste jsou oddelena znakem "/". Znaky "." a ".." oznacuji vzdy odkaz na aktualni adresar a jeho nadrazeny adresar. Prikazy pro praci s adresari: pwd vypis uplneho jmena pracovniho adresare ls [-cgilrtu] files vypis obsahu adresare a vypis vsech souboru c vypis podle data zmeny i-node d vypis vlastnosti adresare g vypis skupiny vlastnika i vypis s cisly i-nodes l siroky vypis (uplna informace) r vypis v obracenem poradi t vypis podle data posledni zmeny u vypis podle data posledniho uziti find pathnames expr nalezeni souboru v hierarchii adresaru od pathnames, ktery vyhovuje vyrazu expr expr: (n prave n, +n vice nez n, -n mene nez n) -name fname hledani souboru se jmenem fname -links n hledani souboru o n odkazech -user uname hledani souboru vlastnika uname -size n hledani souboru o n blocich -inum n hledani souboru s cislem i-node -print vypis uplneho jmena (true) -exec command provedeni prikazu shellem ln name1 [name2] vytvoreny odkazu name2 na existujici soubor name1 cd [dirname] zmena pracovniho adresare (bez parametru = ..) mkdir dirnames vytvoreni podadresaru rmdir dirnames zruseni prazdnych podadresaru 2.3 Pristupova prava -------------------- V multiuzivatelskem systemu je treba zajistit vzajemnou ochranu uzivatelu. K tomuto ucelu slouzi pristupova prava k souboru. V OS UNIX se rozeznavaji tri typy pristupu ke kazdemu souboru. Tyto tri typy jsou cteni (read), zapis (write) a vykonani (execute) souboru. Pro adresare znamena cteni vypis adresare, zapis vytvoreni souboru a vykonani pristup k podadresarum. V i-node souboru jsou pritom ulozeny bitove priznaky, kterymi vlastnik (tj. uzivatel, ktery soubor vytvoril) udeluje pristupova prava k souboru ostatnim uzivatelum. OS UNIX pritom uzivatele deli na tri kategorie: vlastnik (user) souboru, skupina vlastnika (group) a ostatni (others). Z toho vyplyva, ze kazdy soubor ma devet bitovych priznaku (atributu) urcujicich pristupova prava. Seznam opravnenych uzivatelu je uveden v souboru "/etc/passwd". Zaznam o kazdem uzivateli obsahuje uzivatelske (prihlasovaci) jmeno, zasifrovane heslo, identifikacni cislo uzivatele (UID), identifikacni cislo skupiny (GID), poznamku (libovolny text), domovsky adresar a zvoleny interpret prikazu (impl. "/bin/sh"). Skupiny uzivatelu jsou evidovany v souboru "/etc/group". Zaznam o skupine obsahuje jmeno skupiny, pripadne zasifrovane heslo skupiny, cislo skupiny a seznam uzivatelu patricich ke skupine. Pristupova prava k souboru lze zjisti pomoci vypisu adresare prikazem "ls -l". Jednotlive polozky vypisu obsahuji: - typ souboru (d adresar, l symbolicky odkaz, - bezny soubor, c znakove zarizeni, b blokove zarizeni) - pristupova prava (po trojicich pro vlastnika, skupinu a ostatni, r cteni, w zapis, x vykonani, - bez pristupu, s propujceni identifikace (pro vykonani)) - pocet odkazu na soubor - vlastnika souboru - skupinu vlastnika souboru - velikost souboru - datum vytvoreni (v aktualnim roce cas, jinak rok) - jmeno souboru Prikazy pro pristupova prava k souborum: newgrp group zmena skupiny, v niz uzivatel pracuje chmod mode files zmena pristupovych prav k souborum files mode - tvar: cislo kategorie operator pravo (seznam, oddelovac carka) kategorie: u, g, o operator: = nastaveni, + pridani, - odebrani pravo: r, w, x chown owner files zmena vlastnika (UID) souboru files chgrp group files zmena skupiny (GID) souboru files 2.4 Specialni soubory --------------------- Specialni soubory predstavuji periferni zarizeni a poskytuji uzivateli pristup k nim. OS UNIX rozlisuje dva typy perifernich zarizeni: blokova a znakova. Nektera zarizeni maji zrizeny specialni soubory obou typu pro kombinovany pristup. Nektera jmena jsou pevne dana OS UNIX, dalsi urcuje spravce systemu. Specialni soubory jsou obvykle umisteny v adresari "/dev". Plna informace o specialnich souborech (prikaz "ls -l") obsahuje stejne informace jako pro bezne soubory. Pouze delka souboru je nahrazena hlavnim (major) cislem, ktere urcuje typ zarizeni, a vedlejsim (minor) cislem specialniho souboru, ktere odlisuje zarizeni stejneho typu. Soubory: console konzole systemu tty odkaz na aktualni terminal uzivatele ttyX terminal X mtX magneticka paska X (blokove) rmtX magneticka paska X (znakove) sdX diskovy svazek X (blokove) rsdX diskovy svazek X (znakove) kmem adresovy prostor jadra systemu (kernel mem) mem adresovy prostor uzivatelskeho programu null prazdne zarizeni Soubory jsou ukladany na jednotlive diskove svazky. Fyzicky disk muze byt rozdelen na nekolik diskovych svazku. Korenovy adresar je ulozen na systemovem svazku. Podstromy adresare jsou ukladany na jine svazky. Prikazy pro praci se specialnimi soubory: du [-as] [names] info o obsazeni disku names po adresarich a po souborech (all) s pro specifikovane soubory df [devs] informace o velikosti volneho mista na diskovych svazcich devs quot [devs] informace o obsazeni svazku uzivateli mesg y/n povoleni/zakazani psani na obrazovku ostatnimi uzivateli dd [opts] kopie souboru po blocich prip. s konverzi if=file vstupni soubor of=file vystupni soubor ibs=num velikost bloku vstupu obs=num velikost bloku vystupu skip=n preskok n zaznamu pred kopii files=n preskok n souboru pred kopii count=n kopie pouze n zaznamu /etc/mknod name [cb] major minor vytvoreni specialniho souboru name c znakovy, b blokovy soubor major hlavni cislo, minor vedlejsi cislo /etc/mount informace o rozlozeni podstromu na svazcich /etc/mount dev dirname svazek dev je pripojen k podstromu dirname /etc/umount dev odpojeni svazku dev 3. Procesy ---------- Procesem se v Unixu rozumi provadeny program vcetne dat (image). Kazdy proces je z hlediska uzivatele jednoznacne identifikovan svym identifikacnim cislem PID (process identifier). Specialni systemove procesy, ktere nenalezeji zadnemu uzivateli a resi ruzne systemove problemy (napr. sdileni prostredku systemu) se v Unixu nazyvaji demoni (daemons). 3.1 Procesy a soubory --------------------- Proces od sveho rodicovskeho procesu (napr. shellu) zdedi radu vlastnosti, mj. argumenty a tzv. prostredi procesu a vsechny soubory otevrene rodicovskym procesem. Dedenim od zakladniho procesu terminalu ziska kazdy proces tri zakladni soubory. Tyto tri zakladni soubory jsou otevreny jako standardni vstup, standardni a chybovy vystup (obvykle pro terminal uzivatele). Pro tyto tri zakladni soubory jsou pouzity deskriptory 0, 1 a 2. Pri interpretaci shell rozdeli prikaz na jmeno prikazu a jeho argumenty. Dale hleda soubor se jmenem prikazu. Ten se hleda v adresarich, ktere obsahuje promenna shellu PATH. Je-li nalezeny soubor proveditelny, je vytvoren novy proces. Z prikazu jsou dale pri zavadeni programu interpretovany argumenty, ktere umoznuji uzivateli presmerovat standardni soubory: file presmerovani standardniho vystupu do file >>file presmerovani standardniho vystupu pripojujici vystup na konec souboru file <<'slovo' here document (data nasleduji bezprostredne v souboru); prenos znakove bez nahrady slovo je omezovac urcujici konec dat <<\slovo here document <file presmerovani vystupu s deskriptorem n do file (2 chybovy vystup) n>>file presmerovani vystupu s deskriptorem n pripojujici vystup na konec souboru file n>&m spojeni vystupu s dekriptory n a m n<&m spojeni vstupu s dekriptory n a m <&- uzavreni standardniho vstupu >&- uzavreni standardniho vystupu specialne pro C-shell: >&, >>& presmerovani chyboveho vystupu a pripojeni k standardnimu vystupu (spojeni deskriptoru) Tyto argumenty prikazu pak nejsou jiz predany procesu. Oblibenym typem programu v Unixu je program, ktery cte data ze standardniho vstupu a po zpracovani je predava na standardni vystup. Tento typ programu je oznacovan jako filtr. Prednost filtru se objevi ve spojeni s dalsim mechanismem Unixu, kterym je odstraneni pomocnych souboru. Tento mechanismus se nazyva roura (pipe) a jde o systemovou vyrovnavaci pamet, do ktere jeden proces data uklada a dalsi je z ni odebira. Pro oznaceni tohoto mechanismu se pouziva oddelovace "|": command1 | filtr kde prikaz "command1" zapisuje svuj vystup do roury, ze ktere jsou ctena prikazem "filtr", ktery pak vysledky vypisuje na standardni vystup. Prikazy spojene rourou se nazyvaji kolona. Kolona muze obsahovat nekolik clenu, ktere si predavaji sve vysledky. Specialne pro C-shell lze presmerovat do roury i chybovy vystup pomoci znaku oddelovace "|&". 3.2 Zakladni prikazy pro praci s procesy ---------------------------------------- Na prikazovem radku je mozno zadat provedeni vice prikazu. Jednou z moznosti bylo vyse uvedene spojeni prikazu do kolony. Dale je mozno zadat podobnym zpusobem sekvencni zpracovani prikazu pomoci oddelovace ";". Pri tomto zpusobu spousteni procesu se vzdy ceka na dokonceni jednotlivych procesu nebo cele kolony (procesy v ni bezi paralelne). UNIX poskytuje uzivateli moznost spusteni noveho procesu, pri kterem rodicovsky proces (shell) neceka na jeho dokonceni a oba procesy pokracuji nezavisle na sobe. Pro oznaceni tohoto mechanismu se pouziva znak "&". Je-li tento znak uveden na konci prikazoveho radku, potom se vypisi identifikacni cisla spustenych procesu a ihned se vypise vyzva shellu. Pro urceni poradi interpretace prikazu na radce lze pouzit zavorek "(" a ")". Takto ohranicena skupina prikazu je provedena novou kopii shellu. Prikazy pro praci s procesy: sleep [n] pozdrzeni vykonani procesu o n sekund wait cekani na dokonceni vsech procesu kill PID predcasne ukonceni procesu s cislem PID ps [-ag] vypis informaci o bezicich procesech (soucasti je i PID procesu) a vsechny procesy vsech uzivatelu g vsechny procesy nice command provedeni prikazu command se snizenou prioritou nohup command provedeni prikazu command, ktery nelze ukoncit z prerusenim z klavesnice nebo ukoncenim shellu at time command provedeni prikazu command v zadanem case time command mereni doby provedeni procesu command 3.3 Shell a zakladni systemove prikazy -------------------------------------- Interpret uzivatelskych prikazu (shell) je jednim ze zakladnich systemovych programu. Nachazi se obvykle v souboru "/bin/sh" (Bourne shell) a "/bin/csh (C-shell) a muze byt vyvolavan rekurzivne. Prikazy cte ze standardniho vstupu. Tohoto lze vyuzit k provedeni sady prikazu ulozenych v textovem souboru (tzv. scenari - scriptu). Pokud ma scenar nastaven priznak proveditelnosti, potom neni treba spoustet shell (to zaridi automaticky system). Shell lze z pohledu uzivatele-programatora povazovat za velmi vykonny programovaci jazyk, ktery umoznuje pomoci standardnich konstrukci a prikazu vykonat neobvykle slozite akce. Zakladni systemove prikazy: sh [flags] file [args] spusteni Bourne shellu s argumenty args csh args spusteni C-shellu s argumenty args who [am I] informace o prihlasenych uzivatelich am I pouze o aktualnim uzivateli date informace o aktualnim datumu a case passwd zmena uzivatelskeho hesla echo [-n] args opis argumentu na standardniho vystupu n bez znaku konec radku man str vypis informace (napovedy) o str man -k keyword vypis souhrnu jednoradkovych informaci podle klice keyword tee file T-odbocka z roury do souboru (filtr) write user [tty] prikaz pro rozhovor s uzivatelem user na terminalu tty (! cmd prikaz pro shell) mail elektronicka posta 4. Zpracovani textovych souboru ------------------------------- 4.1 Editace textu ----------------- Pro editaci textu poskytuje standardni UNIX interaktivni radkovy editor ed, jeho vylepsenou verzi ex, a editor vi, coz je editor ex pracujici v obrazovkovem rezimu. Tyto editory jsou standardni, nepatri vsak k prilis oblibenym. Naopak neinteraktivni (davkovy) editor sed, ktery slouzi jako editacni filtr se v UNIXu hojne vyuziva. Prikazy: ed [-] [-x] [fname] editace souboru fname - tichy rezim -x sifrovani ukladaneho textu adresace radku: expr cislo radku (pocatek = 1)(num,-,+,/str/) . soucasny radek $ posledni radek 'char reference na definovany odkaz char e1,e2 usek souboru od radku e1 po radek e2 prikazy: (mohou zacinat adresaci radku) q ukonceni editace ! cmd provedeni prikazu cmd v shellu f vypis jmena souboru f fname nastaveni jmena souboru e fname nacteni souboru fname r fname pripojeni souboru fname w fname zapis souboru W fname pripojeni za soubor fname p vypis radku l vypis radku se specialnimi znaky = vypis cisla radku k char definice odkazu char na radek a vkladani textu za radek (konec .) i vkladani textu pred radek j spojeni radku (vynechani ) d smazani radku c nahrada useku m num presun oblasti za radek num t num kopie oblasti za radek num g rozsireni prikazu na celou zadanou oblast v negace g /str/ hledani retezce // dalsi vyskyt pri hledani ?str? hledani retezce smerem k zacatku ?? dalsi vyskyt smerem k zacatku s/str1/str2/ nahrada retezcu metaznaky pro konstrukci hledaneho retezce . libovolny znak [chars] znak z mnoziny chars [^chars] znak, ktery neni v chars char* libovolny pocet opakovani char (i 0) ^ pocatek radky $ konec radky \ch znak ch (eliminace spec. vyznamu) ex files ponekud komfortnejsi, vice souboru, ohlasovaci znak :, vyrovnavaci pameti, moznost aplikace prikazu Unixu vi file obrazovkovy rezim editoru vi rezim zobrazovaci (prochazeni a vypousteni textu x, dw, dd), rezim vkladani (a,i,o) prikazovy rezim (:) (editor ex) sed [-n] [-e script] [-f sfile] [files] neinteraktivni editor souboru files s vystupem do standardniho vystupu editor implicitne prenasi vstup do vystupu n potlaceni impl. prenosu e script popis prikazu f sfile popis prikazu v sfile prikazy editoru odpovidaji editoru ed zpracovani probiha sekvencne, nelze pouzivat relativni adresaci, neni prikaz m a prikaz ! slouzi jako znak negace prikazu 4.2 Tisk textovych souboru -------------------------- Pro tisk textoveho souboru se pouziva prikaz "lpr". Pro pripadnou jednoduchou upravu souboru do tiskove formy se pouziva filtr "pr". Prikazy: lpr [opts] [files] zarazeni souboru files do tiskove fronty -r zruseni souboru po tisku -m ukonceni tisku oznameno mailem -P lpt urceni tiskarny pr [opts] [files] uprava souboru files pro tisk -lN delka stanky N (impl. 66) -t potlaceni hlavicky -h str hlavicka str (impl. datum, cas, jmeno file a cislo str.) -N vystup v N sloupcich -wN sirka stranky N (impl. 72) +N tisk od N-te stranky 4.3 Jednoduche zpracovani textovych souboru ------------------------------------------- Prikazy: wc [-lwc] files informace o velikosti souboru (lines words chars) l pouze pocet radku w pouze pocet slov c pouze pocet pismen grep [opts] expr [files] filtr pro hledani vyskytu vzoru retezce daneho expr v souborech files konstrukce retezce je stejna s editorem ed -v radky v niz nebyl nalezen vzor -c pouze pocet nalezenych radku -l pouze jmeno souboru -n vypisuje poradove cislo a radek -s pouze navratovy kod (shell) -h potlaci tisk jmena souboru -i neni rozdil mala a velka pismena -e expr zadani vzoru (pokud zacina -) fgrep rychly grep s pevnym textovym retezcem egrep rozsireny grep s dalsimi metaznaky metaznaky: char+ alespon jeden znak char char? nejvyse jeden znak char c1 | c2 c1 nebo c2 (expr) uzavorkovani split [-N] [file [name]] rozdeleni souboru file na soubory o delce N radku s jmenem namexx (xx = aa,ab atd.) (name=- funguje jako filtr) tr [-cds] [str1 [str2]] filtr pro nahradu znaku z retezce str1 odpovidajicimi znaky v str2 c opacna nahrada (tj. znaku krome uvedenych v str1) d vypousteji se znaky ze str1 s zkracuje vicenasobny vyskyt znaku sort [-bdfimnrtux] [+pos [-pos]] [-o name] [names] filtr pro setrideni souboru names po radcich b ignorovani levostannych mezer d slovnikove setrideni (alfanum. znaky) f konverze malych pismen na velka i ignoroju znaky mimo ASCII 33-127 m setrideni souboru do jednoho n usporadani podle ciselne hodnoty r opacne setrideni tx oddelovac poli je znak x u vynechani duplicitnich radku o name vystupni soubor name +pos pocatek oblasti trideni na radku -pos konec oblasti trideni na radku (pos urceno jako m.n m cislo pole (oddelena mezerou) n cislo znaku v poli) crypt [key] filtr pro zasifrovani textu pomoci key (obvykle se nedodava mimo USA) diff [-be] f1 f2 porovnani obsahu souboru f2 s f1 vysledkem je seznam odchylek: n1 a n3,n4 pridat n3-n4 za n1 n1,n2 d n3 n1-n2 vypustit na n3 n1,n2 d n3,n4 n1-n2 se zameni n3-n4 < radky z file1 > radky z file2 b ignoruje rozdil mezera a TAB e vystup v konvenci editoru ed diff3 f1 f2 f3 porovnani 3 souboru = = = = kazdy soubor jiny = = = x lisi se soubor x (=1,2,3) f: n1 a pripojeni textu za radek n1 v f f: n1,n2 c zmena textu mezi n1-n2 v f comm [-123] f1 f2 porovnani setridenych souboru f1 a f2 vystup: 3 sloupce 1.sloupec radky pouze v f1 2.sloupec radky pouze z f2 3.sloupec radky v obou souborech -X potlaceni vystupu sloupce deroff [-w] [files] filtr odstranujici direktivy programu troff, nroff, tbl a eqn (viz 4.5) w rozdeleni textu na slova spell [opts] files kontrola pravopisu souboru files -b kontrola na britskou anglictinu spellin file udrzba slovniku pravopisu Dalsi prikazy bohuzel nejsou soucasti SunOS 4.1.1: style [opts] files analyza stylu v souborech files -a vypis vsech vet, delka a citelnost -rnum vypis vet s citelnosti horsi nez num -lnum vypis vet delsich nez num diction [-ml] [-f pattfile] files kontroluje frazeologii (zkomoleni, chybne fraze) v souborech files ml v textu jsou nevetne casti f file pripojeni databaze frazi file explain interaktivni nabidka frazi (filtr) 4.4 Programovatelne manipulace s textem --------------------------------------- Prikaz "awk" predstavuje vykonny interpret programovaciho jazyka, ktery poskytuje rozsahle moznosti pro manipulaci s textovymi soubory. Popis tohoto programu presahuje rozsah tohoto textu. 4.5 Formatovani textu --------------------- Zakladnimi prostredky pro formatovani textu v OS UNIX jsou textove procesory nroff a troff. Nroff slouzi k priprave textu pro radkove tiskarny, troff pro fotosazeci stroj. Prace s obema je vcelku podobna, troff ma navic nektere schopnosti vyplyvajici z vyssich schopnosti fotosazeciho stroje. Formatovani textu se provadi davkovym zpusobem za pouziti souboru maker. Uvnitr souboru jsou direktivy - povely pro textovy procesor. Pro formatovani tabulek slouzi filtr tbl a pro matematicke vzorce filtry eqn a neqn. Tyto filtry predzpracovavaji textove soubory procesory troff (tbl,eqn) a nroff (tbl,neqn). Casti textu, ktere nejsou pro ne urceny, tyto filtry kopiruji do vystupniho souboru. Popis techto programu, direktiv a maker presahuje rozsah tohoto textu. 5. Programovani v shellu ------------------------ Shell neni pouze interpretem prikazovych radku, ale i velmi vykonnym programovacim jazykem. Programove konstrukce lze zadavat primo z prikazoveho radku nebo za pouziti prikazoveho souboru (scenare - script file) - viz kap. 3.2. Protoze mnoho prikazovych souboru je vytvoreno pro Bourne shell, je schopen C-shell spustit pro interpretaci prikazoveho souboru Bourne shell. Pro odliseni, zda je scenar urcen pro Bourne shell nebo C-shell, se pouziva prvniho znaku prvniho radku souboru. Je-li tento znak #, potom je interpretovan scenar C-shellem, jinak Bourne shellem. V systemech s obema typy shellu lze doporucit pro praci C-shell, ktery je pohodlnejsi a mocnejsi nez Bourne shell. Pri tvorbe vetsich programovych celku lze vsak spise z duvodu prenositelnosti doporucit psani prikazovych souboru v Bourne shellu. 5.1 Spusteni shellu ------------------- Prikazy pro spusteni shellu byly jiz uvedeny v odstavci 3.3. Zde pouze poznamenejme, ze po prihlaseni do systemu interpretuje shell automaticky prikazovy soubor .login (pro C-shell) nebo .profile (pro Bourne shell) v domovskem adresari uzivatele. Tento soubor lze vyuzit pro spusteni uzivatelskeho prostredi a spusteni neketrych zakladnich procesu. Pri aktivaci shellu (napr. prikazem csh) se automaticky provede soubor .cshrc (pro C-shell). Dale je zde vhodne upozornit, ze pro docasne pomocne soubory lze pouzit i adresar /tmp. 5.2 Specialni znaky shellu -------------------------- Existuji znaky, ktere maji pri interpretaci shellem specialni vyznam. Na nektere jsme jiz narazili v odstavcich 1, 2.1 a 3.1 a 3.2. Pouzitelne znaky se specialnim vyznamem: \ viz kap. 1 (potlacuje spec. vyznam) *, ?, [] viz kap. 2.1 >, >>, &>, <, <<, <&, |, |& viz kap. 3.1 ;, &, () viz kap. 3.2 `...` nahrada prikazu ... vystupem ... (spusteni!) '...' potlacuje interpretaci znaku uvnitr ... "..." interpretuje jen $ a `...` : interpretace bez vykonani akci # na 1.pozici radku oznacuje komentar { } provedeni posloupnosti prikazu bez spusteni kopie shellu (pouze Bourne shell) {...,...} vycet variant jmena souboru (pouze C-shell) ~ domovsky adresar (pouze C-shell) 5.3 Promenne shellu ------------------- Jako kazdy programovaci jazyk umoznuje shell pracovat s promennymi, ktere vytvareji tzv. prostredi uzivatele a prostredi procesu. Nektere promenne jsou v systemu preddefinovany, prip. mohou byt definovany pri spusteni shellu. Jmeno promenne je identifikator. C-shell povazuje pouze promenne oznacene velkymi pismeny za soucast prostredi uzivatele. Ostatni (napr. argv, home, path, prompt, shell ap.) povazuje za sve vnitrni promenne. Prace s promennymi: Bourne shell : name = con prirazeni retezce con promenne name unset varname zruseni promenne set vypis hodnot promennych $name zpristupneni hodnoty promenne preddefinovane promenne prostedi a procesu: MAIL jmeno souboru pro elektronickou postu HOME jmeno domovskeho adresare PATH adresare se spustitelnymi prikazy LOGNAME prihlasovaci jmeno uzivatele SHELL aktivni prikazovy interpret TERM typ terminalu PS1 retezec vyzvy PS2 pokracovaci vyzva (pri nedokoncenem vstupu) IFS oddelovace argumentu prikazoveho radku 0,1,2,..,9 pozicni parametry (tj. argumenty) prikazu (0 .. jmeno prikazu) $ PID soucasne kopie shellu ? navratovy kod posledniho provedeneho prikazu ! PID posledniho procesu spusteneho na pozadi * obsah celeho prikazoveho radku scenare # pocet pozicnich parametru scenare C-shell : set name = str prirazeni retezce str vnitrni promenne name set name = ( strs ) prirazeni seznamu retezcu strs vnitrni promenne varname setenv varname str prirazeni retezce str promenne varname z prostredi uzivatele unset varname zruseni promenne unsetenv varname zruseni promenne $?varname test existence promenne set vypis hodnot promennych $name zpristupneni hodnoty promenne setenv vypis hodnot promennych prostredi $varname[num] zpristupeni casti seznamu pomoci indexu num $#varname pocet prvku v seznamu pro promenne obsahujici uplne jmeno souboru lze uzit operatoru: :r uplne jmeno souboru (root) :h path (header) :t proste jmeno souboru (tail) preddefinovane promenne shellu: prostredi : argv preddefinovany promenna predstavujici seznam argumentu scenare (pristup jako do pole - rozsahy indexu) cwd pracovni adresar history delka uchovavane historie home jmeno domovskeho adresare noclober ochrana souboru pred prepsanim (presmerovani) path adresare se spustitelnymi prikazy prompt retezec vyzvy shell aktivni prikazovy interpret status navratovy kod posledniho procesu term typ terminalu user prihlasovaci jmeno uzivatele MAIL jmeno souboru pro elektronickou postu HOME jmeno domovskeho adresare PATH adresare se spustitelnymi prikazy LOGNAME prihlasovaci jmeno uzivatele SHELL aktivni prikazovy interpret TERM typ terminalu procesu : 0,1,2,..,9 pozicni parametry (tj. argumenty) prikazu (0 .. jmeno prikazu) $ PID soucasne kopie shellu 5.4 Programove konstrukce shellu -------------------------------- Shell poskytuje konstrukce pro vetveni typu if a case a pro cykly typu for, while i until. Pro rozhodovaci vyrazy tyto konstrukce vyuzivaji navratoveho kodu prikazu, ktery je bud nulovy (prikaz skoncil uspesne) nebo nenulovy (selhani). Pro vyhodnocovani nekterych typu vyrazu existuji dva pomocne prikazy test a expr. V C-shellu existuji i numericke promenne (viz odstavec 5.5), ktere jsou vyuzivany pri konstrukci vyrazu. Vyraz lze zapisovat jako bezny prikaz v jazyce C a navic lze testovat atributy souboru pomoci operatoru shodnych s moznymi argumenty prikazu test. Programove konstrukce shellu: Bourne shell C-shell if cmdlist if (expr) then then cmdlist cmdlist1 else cmdlist else fi cmdlist2 endif case str in switch (str) pattern) cmdlist ;; case pattern1: ... cmdlist esac breaksw ... default: cmdlist breaksw endsw for var in strs foreach name (strs) do cmdlist cmdlist end done while cmdlist while (expression) do cmdlist cmdlist end done break break ukonceni cyklu continue continue nasledujici iterace exit exit ukonceni shellu goto label skok na navesti label: definice navesti read name set name = $< precteni promenne name ze std.vstupu Dalsi operatory (oddelovace) pro cmdlist: && prava strana se provede pokud leva uspeje || prava strana se provede pokud leva selze Pomocne prikazy: test arg navratovy kod je dan vyhodnocenim vyrazu arg -r file existuje soubor dostupny pro cteni -w file existuje soubor dostupny pro zapis -f file existuje soubor a neni adresar -d file existuje soubor a je adresar -z s delka retezce s je nulova -n s delka retezce s neni nulova s1=s2 retezec s1 se rovna s2 s1!=s2 retezec s1 se nerovna s2 n1 -eq n2 cisla n1 a n2 jsou si rovna (podobne pro -ne, -gt, -ge, -lt, -le) expr args vysledek vyhodnoceni je zapsan na st.vystup args je vyraz s operatory +,-,*,/,% a relacnimi operatory <,<=,=,!=,>=,> true prikaz vracejci pravdu false nedefinovany prikaz (vraci nepravdu) exec [args] vymena aktualniho shellu za proces args pouze Bourne shell: export [names] vyvoz promennych shellu do prostredi procesu-potomku trap [arg] [nums] nastaveni reakci shellu na typ signalu set [-vx] nastaveni ladeni scenare - ukonceni ladeni v verbose mode (tisk nactenych radku pred interpretaci) x execute (tisk provadenych prikazu) 5.5 Nektera rozsireni C-shellu ------------------------------ C-shell poskytuje nektera vyznamna rozsireni. Zde uvedeme pouze numericke promenne, udrzovani a pristup k historii prikazu, mechanismus zamen a rozsireni pro rizeni procesu. Rozsirene rizeni procesu je zalozeno na pojmu prace (job), kterym se oznacuje prikazovy radek. Prace se pak muze nachazet ve stavech provadeni (Running), pozastaveni (Stopped), nestandardniho ukonceni (Terminated), ukonceni (Done) a selhani (Exit). Pomoci "ctrl-z" je bezici program pozastaven. Ten lze presunout bud do behu na pozadi nebo na popredi. Rozsirujici prikazy: @var operator expr prirazeni hodnoty vyrazu operator expr numericke promenne var (vyraz jako v C) jsou k dispozici testy obdobne prikazu test -r file existuje soubor dostupny pro cteni -w file existuje soubor dostupny pro zapis -f file existuje soubor a neni adresar -d file existuje soubor a je adresar -e file soubor existuje -o file uzivatel je vlastnik file set history = num nastaveni delky historie prikazu na num history [-hr] [num] vypis historii v delce n radku h prepnuti vystupu do souboru r vypis obracene source [-h] [file] inicializace historie h vstup ze souboru bez vykonani !! opakovani prikazu (n=1) !-n vykonani prikazu o n zpet v historii !n vykonani prikazu s cislem n !chars vykonani prikazu zacinajiciho chars ^str1^str2 zamena str1 za str2 v poslednim retezci (pro editaci lze pouzit prikazu ed) alias [name [def]] definice jmena name pro retezec def (bez def - vypis definice) unalias name zruseni vyznamu retezce name jobs vypise seznam praci (jobs) bg [%n] presun prace na pozadi fg [%n] presun prace do popredi %n cislo procesu 6. Prostredky pro programovani v jazyce C ----------------------------------------- Standardni dodavka OS UNIX obsahuje kompilator jazyka C a nektere pomocne programy pro usnadneni prace programatora. 6.1 Kompilator C ---------------- Zpracovani kompilatorem jazyka C probiha v nekolika fazich. Obvykle je zdrojovy text souboru s priponou .c prelozen makroprocesorem (soubor .i). Vysledny text je prelozen kompilatorem do assembleru (soubor .s) a vysledek prekladu prelozen assemblerem do object modulu (soubor .o). K tomu jsou potom sestavovacim programem prilinkovany knihovny (systemove a uzivatelske) a vytvoren spustitelny program (impl. ulozen do souboru a.out). Tyto faze jsou vsak pred uzivatelem do znacne miry skryty. Prikaz pro praci s kompilatorem: cc [opts] files standardni kompilator jazyka C -o file jmeno prelozeneho programu -D ident definice identifikatoru -E zpracovani pouze makroprocesorem -p informace pro monitorovani (prof) -g informace pro dbx -go informace pro adb 6.2 Vypisy a kontrola programu ------------------------------ pr [opts] [files] priprava textu pro tisk cxref files generator krizovych odkazu pro jazyk C lint files kontrola programu v jazyce C zamerena na prenositelnost konstrukci, podezrele akce (nedefinovane hodnoty, nepouzite promenne a funkce, nedostupny kod, nekonecne cykly) a typovou kontrolu 6.3 Ladeni ---------- size files zjisteni velikosti prelozenych programu nm files vypis tabulky symbolu programu prof command vypis vysledku monitorovani programu (ze souboru mon.out vytvoreneho spustenim programu prelozeneho s parametrem -p) adb [-w] [objfile [corfile]] ladici prostredek na urovni assembleru w umoznuje modifikaci souboru objfile soubor s proveditelnym programem corfile soubor s obrazem pameti po havarii prikazy: x,n:ta adresa,delka:typakce akce adresa je urcena: cislo presun na adresu cislo ident presun na adresu ident typ akce je urcen: ? tisk obsahu ze souboru objfile / tisk obsahu ze souboru corfile = tisk adresy ciselne : prikaz pro sledovany beh $ jiny prikaz ! prikaz pro shell ; oddelovac prikazu format vypisu (typ akce ? a /) i instrukce d slovo dekadicky b slabika oktalove c slabika znakove o slovo oktalove f dve slova v pohyblive carce s retezec znaku w str zmena obsahu (2 slabiky) W str zmena obsahu (4 slabiky) behove prikazy (typ akce :) r args spusteni behu b (br) nastaveni ladiciho zastaveni D odstraneni ladiciho zastaveni c pokracovani s krokovani po instrukcich ostatni prikazy (typ akce $): q, ctrl-d ukonceni ladeni f vystup do souboru f b vypis ladicich zastaveni c vypis obsahu aktivnich funkci C vypis aktivnich funkci vcetne obsahu lokalnich prommennych r vypis obsahu registru e vypis externich prommenych m vypis zpravy o mapovani pameti l str lokalizace adresy (2 slabiky) L str lokalizace adresy (4 slabiky) dbx [opts] [objfile [corfile]] symbolicky ladici prostredek na urovni C objfile soubor s proveditelnym programem corfile soubor s obrazem pameti po havarii 6.4 Tvorba rozsahlych programu ------------------------------ Pro tvorbu a udrzbu rozsahlejsich programovych celku, ktere sestavaji z nekolika zdrojovych souboru slouzi prikaz "make". Ten provadi na zaklade souboru, ktery obsahuje popis zavislosti mezi zdrojovymi soubory a dalsi informace, zpracovani celku (napr. kompilaci, instalaci ap.) Pouziti prikazu: make [opts] [macros] [target] spusteni prikazu make -f jmeno souboru pro make (impl. Makefile) -i ignorovani navratovych kodu -s tichy rezim -r vypnuti implicitni zavislosti -n interpretace makefile bez shellu -p tisk implicitnich zavislosti a maker -D ladici rezim make macros definice maker target oznaceni casti makefile Definice makefile: file: files akce pro file informace o zavislosti souboru a moznosti vytvorit aktualni soubor (obecne targets : sources ; commands) target: navesti (oznaceni casti makefile) str=strings definice makra ($str rozvine makro) $* target (bez pripony) $@ uplna cesta target $CC identifikace kompilatoru lze pouzivat i prommene shellu \ pokracovaci znak implicitni pripony: .o relativni (object) modul .c program v jazyce C .f program v jazyce Fortran 77 .r program v jazyce Ratfor .s program v assembleru .y zdrojovy text pro yacc .l zdrojovy text pro lex 7. Pouzita literatura --------------------- Brodsky, J. - Skocovsky, L.: Operacni system UNIX a jazyk C. SNTL, Praha, 1989. Nesvera, S. - Richta, K. - Zemanek, P.: Uvod do operacniho systemu UNIX. CVUT, Praha, 1991. Brown, P.J.: Starting with UNIX. Addison-Wesley, Reading, 1984. (Vvedenije v operacionnuju sistemu UNIX, Mir, Moskva, 1987.) Autor dekuje za pripadne namety a poznamky, se kterymi se obracejte na adresu: Internet: limpouch@cs.felk.cvut.cs BITNET: TEPLA@CSEARN.BITNET posta: CVUT FEL K336 katedra pocitacu Karlovo namesti 13 121 35 Praha 2