Kompletno o Linux HRV

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 1275

SVEUILITE U SPLITU STRUNI STUDIJ RAUNARSTVA ZAGREB

prof. Pavle poljari

Programski alati na Unix raunalima

ZBORNIK SEMINARSKIH RADOVA 2003/2004


Draen Hudoletnjak Marijela Napast Andrija Martinovi Sinia Julijan Marijana Ladan-Pelivanovi Predrag Jovanovi Marko Vukovi Manuel Vidonis Zoran Zorii Mario Strini Matko Peji Maja Mehinagi Nina ugaj Frane Gjeldum Davorin ajnovi Branimir ivkovi Tomislav Grgec Kreimir Heimovi Janko Rade Marko Ferk Damir Jajeri Tomislav Domanovac Ivan Podhraki Maja ugaj eljko afar Damir uric Goran Jurii Krasnodar Krajnik Vedran Dedu Vanja Harambua Krunoslav Zeman Igor opec Matija upen Saa Dragi Ivan Bri Neven Kmeti Majk Jednakovi Boris Ivanievi Jurica Boikovi Goran Vlahovi Dario Dugi Zvonimir Jankovi Marija Bili Jakov Mihaljevi Adriana Mihalinec Domagoj vegelj Marina Petrovska Daniel Van Schepdael Dario Benko Amir Kos Tamara Krutman Ante Penava Ana Babi Marijan Poljak Elizabeta Velkavrh Alja Pavli-Raver Eliot Karlo Pavleti Saa Protulipac

Zagreb, 2004.

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

"...the number of UNIX installations has grown to 10, with more expected..." - Dennis Ritchie and Ken Thompson, June 1972 "... When BTL withdrew from the project, they needed to rewrite an operating system (OS) in order to play space war on another smaller machine (a DEC PDP-7 [Programmed Data Processor] with 4K memory for user programs). The result was a system which a punning colleague called UNICS (UNiplexed Information and Computing Service)--an 'emasculated Multics'; no one recalls whose idea the change to UNIX was"

2/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sadraj

OVAJ ZBORNIK JE POD OPOM GNU LICENCOM OPISANOM U 1. POGLAVLJU


(GNU FILOZOFIJA I GNU LICENCA)

3/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sadraj

Sadraj
1. 2. 3. 4. 5. 6. 7. 8. 9. GNU FILOZOFIJA I GNU LICENCA (Draen Hudoletnjak) STRUKTURA UNIXA (Marijela Napast) SHELL (Andrija Martinovi) SH I BASH (Sinia Julijan) C SHELL, T C-SHELL (Marijana Ladan-Pelivanovi) SHELL PROGRAMIRANJE (SHELL I BASH) (Predrag Jovanovi) BASH ADVANCED SHELL PROGRAMIRANJE (Marko Vukovi) REGEX (Manuel Vidonis, Zoran Zorii) VI EDITOR (Mario Strini)

6 30 42 72 111 138 160 179 213 230 263 273 305 322 343 370 396 419 435 469 509 527 556

10. EMACS (Matko Peji) 11. LOGIN I ID (Maja Mehinagi) 12. TELNET I SSH (Nina ugaj) 13. ARHIVIRANJE NA UNIX RAUNALIMA (Frane Gjeldum) 14. UNIX DEVICES, MOUNTING DEVICES (Davorin ajnovi) 15. AWK I SED (Branimir ivkovi) 16. SED (Tomislav Grgec) 17. GCC COMPILER (Kreimir Heimovi) 18. GDB, THE GNU SOURCE LEVEL DEBUGGER (Janko Rade) 19. GNU MAKE (Marko Ferk) 20. CVS SUSTAV ZA VERZIONIRANJE (Damir Jajeti, Tomislav Domanovac) 21. IDE (Ivan Podhraki) 22. ECLIPSE (Maja ugaj, eljko afar, Damir uric) 23. PIPE I FIFO (Goran Jurii)

4/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sadraj

24. FORK (Krasnodar Krajnik) 25. PROCESI I UPRAVLJANJE PROCESIMA (Vedran Dedu, Vanja Harambua) 26. SIGNALI (Krunoslav Zeman) 27. FORK PROCESI (Igor opec) 28. SOCKETS, UNIX DOMAIN, NETWORK (Matija upen) 29. TCP/IP (Saa Dragi) 30. TCP/IP API (Ivan Bri, Neven Kmeti) 31. UDP-USER DATAGRAM PROTOKOL (Majk Jednakovi) 32. FILE, DIRECTORY AND INODE PROGRAMMING (Boris Ivanievi) 33. INETD I TCPD (Jurica Boikovi) 34. INTERNET SERVICES (Goran Vlahovi) 35. RPC REMOTE PROCEDURE CALL (Dario Dugi) 36. RLOGIN RSH (Zvonimir Jankovi) 37. SAMBA I NFS (Marija Bili) 38. X WINDOW SYSTEM (Jakov Mihaljevi) 39. KDE (Adriana Mihalinec, Domagoj vegelj) 40. UNIX DESKTOP SYSTEM (Marina Petrovska) 41. DNS I DHCP (Daniel Van Schepdael) 42. INTERNET HISTORY (Dario Benko) 43. UVOD U PERL (Amir Kos) 44. PERL Practical Extraction and Report Language (Tamara Krutman,Ante Penava) 45. PYTHON (Ana Babi) 46. INTERPRETERI TCL/TK (Marijan Poljak) DISTRIBUCIJE LINUXA/UNIX 47. (Elizabeta Velkavrh, Alja Pavli-Raver, Eliot Karlo Pavleti) 48. KOMPAJLIRANJE KERNELA (Saa Protulipac)

578 610 638 662 672 691 718 776 796 815 827 858 876 886 917 926 970 996 1016 1033 1090 1138 1173

1214 1244

5/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Draen Hudoletnjak

GNU FILOZOFIJA I GNU LICENCA

6/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GNU filozofija i GNU licenca

UVOD
Pria o GNU-u poinje otprilike 1971. sa Richardom Stallmanom koji je tada poeo raditi za MIT na njihovom Artificial Intelligence Lab (Labaratorij za Umjetnu Inteligenciju). Tamo je postao dio "software-sharing" zajednice koja je ve postojala mnogo godina. Razmjena softvera je bilo neto to je staro kao i sama raunala i u to doba je to bila normalna stvar, pomo kolegi. No oni su otili korak dalje. AI Lab je koristio operacijski sustav ITS (the Incompatible Timesharing System) kojeg su dizajnirali i u assembleru napisali njihovi programeri (hakeri *) za Digitalov PDP-10. Kao dio tima Stallmanov posao je bio poboljavanje tog sustava. Oni svoj softver tada jo nisu zvali "slobodan softver" (free software) jer taj termin tada nije postojao ali u biti je to bio, jer kad god bi netko sa nekog drugog sveuilita ili neke kompanije elio portati i koristiti njihov program, oni su im to dopustili. Ideja je bila, ako netko koristi nekakav nepoznat i zanimljiv program, uvijek ga moe traiti da vidi njegov izvorni kod (source code) kako bi ga mogao itati, mijenjati ili uzeti dijelove tog programa i iskoristiti ih za neki novi program. No situacija se je drastino promijenila poetkom 80-tih kad je Digital prestao proizvoditi PDP-10 seriju. Njegova arhitektura, koja je bila elegantna i mona u 60-tima se nije mogla "prirodno" proiriti da koristi vei adresni prostor koji je bio primjenjiv u 80-tima. To je znailo da je gotovo sav softver koji radi pod ITS-om postao neupotrebljiv. Neto prije toga hakerska zajednica IT Laba se raspala. 1981. osnovana je tvrtka Symbolics koja je zaposlila gotovo sve hakere iz AI Laba tako da preostala zajednica nije mogla funkcionirati. Kad je 1982. AI Lab kupio novi PDP-10, njihovi administratori su se odlucili za Digitalov operacijski sustav umjesto ITS-a. Moderna raunala toga doba (VAX, 68020) su imali svoje operacijske sustave ali nijedan od njih nije bio slobodan softver. Za svaki, makar dobili samo izvrnu datoteku, morao se je potpisati obvezujui ugovor. To je znailo da je prvi korak u koritenju raunala obeanje da nee pomoi svom susjedu. Pravilo koje su uveli tvorci "vlasnikog" softvera bilo je, "Ako dijeli softver sa susjedom, pirat si. Ako eli bilo to promijeniti, moli nas da ti to napravimo". To je neto to se Stallmanu nikako nije svialo i naao se je pred moralnom dvojbom. Prikljuiti se svijetu "vlasnikog" softvera i potpisati obvezujui ugovor kojim obeaje da nee pomagati kolegama ili potpuno napustiti raunalni svijet i raditi neto drugo. Umjesto toga, kao pravi programer traio je neko tree rijeenje. Razmiljao je da li postoji neki program ili programi koje bi on mogao napisati da zajednica ponovno oivi. Zakljuio je da mu za poetak treba operacijski sustav jer je to kljuni program za koritenje nekog

7/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GNU filozofija i GNU licenca

raunala. Sa slobodnim operacijskim sustavom ponovno se je mogla osnovati zajednica hakera koji bi slobodno suraivali i izmjenjivali svoje ideje. Zajednica kojoj bi se svatko mogao pridruiti. Obzirom da je on do tada radio na razvoju operacijskih sustava, imao je znanja i iskustva da to napravi a osjeao se i izabranim za taj posao. Odluio je napraviti OS kompatibilan sa Unixom kako bi bio prenosiv i kako bi dotadanji korisnici Unixa mogli lako prijei na njega. Sljedei hakersku filozofiju odabrao je ime GNU, kao rekurzivno za "GNU Nije Unix" (GNU's Not Unix). Shvatio je da naziv "operacijski sustav" ne znai samo kernel ve da to ime ukljuuje i dodatne stvari kao to su komandne linije, assembleri, kompajleri, interpreteri, debuggeri, tekst editori i jo mnogo toga. Budui da su tadanji operacijski sustavi (ITS, Multics, VMS, Unix) imali sve to, on je odluio da i GNU mora imati sve to. Znajui tono to hoe, u sijenju 1984. dao je otkaz na MIT-u i poeo pisati GNU softver. Odlazak iz MIT-a je je bio nuan jer da je ostao, MIT je mogao GNU proglasiti svojim proizvodom i time bi Stallmanova ideja o slobodnom operacijskom sustavu pala u vodu kao i ponovno oivljavanje hakerske zajednice. Sreom, profesor Winston, tadanji ef MIT AI Laba je dozvolio Stallmanu da nastavi koristiti njihove labose i njihovu opremu. Time je GNU operacijski sustav od nekakve same ideje postao stvaran projekt i moe se rei da je to stvarni poetak svega vezanog uz GNU.

* Rije haker (hacker) u znaenju "onaj koji probija zastite" je pogreka koju su stvorili mediji i koji taj pojam pogreno koriste. Pravi hakeri ne priznaju to znaenje. Po njima je haker onaj koji voli programirati i uiva u tome. Zato ja u tekstu dalje koristim i koristiti u taj pojam za to, pozitivno znaenje.

8/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

GNU OS Poetci
Kratko prije nego je zapoeo GNU projekt, Stallman je uo za "Free University Compiler Kit" poznat takoer i pod nazivom "VUCK". Taj kompajler je podravao vie programskih jezika, ukljuujui C i Pascal te je imao podrku za razne platforme. Stallman je kontaktirao autora VUCK-a i pitao ga moe li dodati taj kompajler u GNU projekt. Odgovor je bio negativan. Stoga je Stallman odluio da prvi program kojeg e napraviti bude viejezini (multi-language), vieplatformni (multi-platform) kompajler. Nadajui se da nee sam morati napisati cijeli kompajler, nabavio je source kod Pastel kompajlera. To je bio vieplatformski kompajler napisan na Lawrence Livermore Lab-u. Podravao je i bio napisan u proirenoj verziji Pascala te bio zamiljen kao sistem-programski jezik. Stallman mu je dodao C frontend i poeo ga prebacivati na Motorolino 68000 raunalo. No morao je odustati jer je otkrio da taj kompajler treba nekoliko megabajta memorije za stack a dostupni 68000 sistemi dozvoljavaju samo 64 kB. Zbog toga je odluio iz poetka napisati svoj kompajler bez da upotrijebi ista od koda Pastel kompajlera. Uspio je jedino upotrijebiti C frontend koji je sam napisao. Taj kompajler je danas poznat kao GCC no njega je dovrio kasnije. Prije toga je radio na GNU Emacsu.

9/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

GNU Emacs
Stallman je rad na GNU Emacsu poeo u rujnu 1984. i ve poetkom 1985. GNU Emacs je postao upotrebljiv program. To mu je omoguilo da koristi Unix sustave za editiranje bez potrebe da naui vi ili ed. Do tada je koristio druge sustave za editiranje texta. Popularnost GNU Emacsa je rasla i Stallman se pitao kako distribuirati svoj softver. Zato ga je stavio na anonimni server na MIT-u koji je on sam koristio. No kako u to vrijeme nisu svi bili na internetu, Stallman je razmiljao kako svima omoguiti da dou do kopije Emacsa. Obzirom da nije radio traio je nain kako da zaradi novac na slobodnom softveru. Zbog toga je objavio da e poslati kopiju na traci svakome tko mu plati 150$ za nju. Time je Stallman zapoeo distribuciju slobodnog softvera, preteu dananjih kompanija koje distribuiraju cjelokupne Linux-bazirane GNU sustave.

Razvoj GNU OS-a


Kako je interes za koritenjem Emacsa rastao, sve vie ljudi se ukljuivalo u GNU projekt i ponovno se je javilo pitanje oko financiranja projekta. Zbog toga je 1985. osnovan Free Software Foundation (FSF). FSF je preuzela distribuciju Emacsa a kasnije je dodan i drugi slobodni softver. Takoer su poeli sa prodajom slobodnih uputstava (manuala). FSF je primala donacije, ali najvea dobit im je bila od prodaje kopija slobodnog softvera i ostalih usluga vezanih uz to. Danas FSF prodaje CD-e i DVD-e sa source kodom, izvrnim datotekama, lijepo tampanim uputstvima i sve to sa slobodom da se dalje distribuira i mijenja po elji. Zaposlenici FSF-a su napisali poveu koliinu GNU softver paketa. Dva najznaajnija su C library i shell. GNU C library je napisao Roland McGrath i to je neto to svaki program koji radi na GNU/Linuxu koristi za komunikaciju sa Linuxom (vie o Linuxu u sljedeem poglavlju). Shell koriten na GNU/Linux sistemima je BASH, (Bourne Again Shell) kojeg je napisao Brian Fox. FSF je sve to financirala jer im je najvaniji cilj bio razvoj cijelog operacijskog sustava. Temeljni cilj GNU-a je bio da bude slobodan softver. Iako GNU nije imao tehnikih prednosti pred Unixom, imao je drutvenu prednost jer je omoguavao

10/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

ljudima da surauju i imao je etiku prednost jer je potivao slobodu korisnika. Naravno, obzirom da su na GNU projektu sudjelovali iskusni hakeri, koristili su standarde koji su se pokazali dobrima u praksi. Dodatno, odbacili su Unixovu filozofiju koritenja malo memorije time to nisu podrali 16 bitno adresiranje (znali su da e 32 bitni strojevi postati norma kad GNU bude dovren). Nisu se trudili smanjiti potronju memorije dokle god ne bi prelazila megabajt. Kako je GNU projekt napredovao i sve vei broj sistemskih komponenti je naen ili napisan, napravljena je lista stvari koje jo nedostaju. Ta lista, danas poznata kao "GNU task list" je upotrebljena da se regrutiraju programeri koji e napisati dijelove koji nedostaju. Takoer su na listu dodane i neke stvari koje Unix nije imao a oni su mislili da bi potpuno kompletan sustav trebao imati. ak su i igre dodane kao kljune stvari. Vano je napomenuti da, budui da su oni GNU OS radili potpuno "od nule" da je svaki komad softvera koji je napisan bio testiran na Unixu (GNU OS jo nije postojao). To je znailo da se ve tada taj softver mogao koristiti na Unix sustavima. Druga dobra stvar je da se novi OS razvijao tako da bude potpuno kompatibilan sa Unixom. Sve to je imao Unix napisala je i GNU zajednica s time da je GNU varijanta u pravilu bila monija i pouzdanija. To je privuklo dodatne pokrovitelje i negdje oko 1990. GNU OS je bio gotovo dovren. Falila je jo samo jedna, kljuna stvar - kernel.

11/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

Linux
Stallmanova prvotna ideja je bila da sami razviju svoj kernel (GNU HURD). Odluili su ga implementirati kao kolekciju serverskih procesa koji se vrte na Machu. Mach je mikrokernel koji su razvili na Carnegie Mellon University i University of Utah. GNU HURD (krdo gnua) bi bila kolekcija servera koja radi na Machu i obavlja razne poslove kao Unix kernel. Jedan od razloga zbog ega je odabrana takva arhitektura je bio da se izbjegne najtei dio posla, debugiranje kernela bez debugera namijenjenog za to. Taj dio posla je u Machu ve bio obavljen a HURD servere su mogli debugirati sa GDB-om. No poetak razvoja HURD-a je kasnio jer su ekali da Mach bude izdan kao slobodan softver, kao to su im obeali a i pokazalo se da je debugiranje HURD servera koji se pokreu kao tredovi i koji meusobno komuniciraju porukama prilino teak i zahtjevan posao. Posao na HURD-u se zbog toga otegnuo godinama. Paralelno s njima, Linus Torvalds je radio na Unix kompatibilnom kernelu kojeg je objavio na internetu 1991. godine. Nazvao ga je Linux. Negdje 1992. ukomponirali su Linux u dotad nedovreni GNU ime je stvoren komplenti slobodni operacijski sustav. Nazvali su ga GNU/Linux to predstavlja sloenicu od "kombinacija GNU sustava sa Linux kernelom". Ta verzija GNU OS-a je stekla golemu popularnost i danas ju veina ljudi poznaje samo pod imenom Linux iako je Linux samo dio tog OS-a (njegov kernel).

12/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

GNU FILOZOFIJA Slobodan (free) softver


Kao to smo do sada vidjeli cijeli smisao GNU pokreta je ideja o slobodi. Ljudi koji stoje iza GNU pokreta smatraju da je slobodan softver stvar slobode - ljudi trebaju imati slobodu koristiti softver na bilo koji nain za koji smatraju da im je koristan. Softver se razlikuje od materijalnih objekata. Glavno je pitanje to je to slobodan softver i zato bi softver uope trebao biti slobodan? Prema FSF-u (Free Software Foundation) slobodan softver je stvar slobode a ne cijene. (Pojam slobodan softver dolazi od engleskog "free software" a budui da u engleskom jeziku rije free ima vie znaenja, ideja je da se o rijei "free" razmilja kao u pojmu "free speech" a ne kao "free beer". U hrvatskom jeziku najblie prijevodu odgovara rije "slobodan" a ne "besplatan".) Dakle, slobodan softver je onaj koji korisnici imaju pravo pokretati, kopirati, distribuirati, prouavati, mijenjati i poboljavati. Tonija definicija se sastoji od etiri vrste slobode koji imaju korisnici softvera: Slobodu da za bilo koju svrhu pokreu program (sloboda 0). Slobodu da proue kako program radi i prilagode ga za svoje potrebe (sloboda 1). Uvjet za to je da im je dostupan source kod programa. Slobodu da dalje distribuiraju kopiju programa kako bi pomogli susjedu (sloboda 2). Slobodu da poboljavaju program i objave svoja poboljanja javno kako bi cijela zajednica imala koristi od toga (sloboda 3). Uvjet za to je da im je dostupan source kod programa. To su etiri kljune slobode i program je "slobodan" ako i samo ako zadovoljava sve ove etiri toke. Prema tome, trebali bi biti slobodni dalje dijeliti kopije programa bilo kome i bilo gdje, besplatno ili uz naknadu, bez obzira jesmo li mijenjali program ili ne. Biti slobodan raditi te stvari znai (pored ostalog), da ne moramo traiti ili platiti dozvolu za to. Takoer trebamo imati slobodu promijeniti program i koristiti ga privatno za svoj posao ili igru, bez da ikome uope spomenemo da te modifikacije postoje. Ako objavimo svoje promjene ne bi trebali obavijestiti nikoga zbog toga. Sloboda da se koristi neki program znai slobodu bilo
13/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

pojedincu ili organizaciji, da koristi taj program na bilo kojoj vrsti raunala, za bilo kakav posao, i bez potrebe da kontaktira autora ili neku drugu instituciju. Prilikom distribucije slobodnog softvera, bilo svog ili kopije mora se pored izvrne (executable) verzije, priloiti i izvorni kod. To je zbog slobode da svatko ima pravo modificirati i poboljavati program. Dakle pristup izvornom kodu je kjuna osobina slobodnog softvera. Da bi sve ove slobode vrijedile uvijek, one moraju biti neopozive tako dugo dok ne napravite neto pogreno. Ako onaj koji razvije neki softver ima pravo ukinuti licencu bez da ste vi napravili neto to bi mu dalo razlog, onda taj softver nije slobodan softver. Meutim, odreena pravila u vezi distribucije slobodnog softvera su prihvatljiva, ako nisu u suprotnosti sa osnovnim slobodama. Na primjer, copyleft (pojednostavljeno reeno) je pravilo da kad redistribuirate program, ne moete dodati ogranienja kojima biste zabranili ostalim ljudima njihove centralne slobode. To pravilo nije u sukobu sa centralnim slobodama nego ih zapravo titi. Prema tome, vi moete platiti da dobijete kopiju slobodnog softvera ili moete nabaviti kopiju besplatno. No nevezano na to kako ste doli do svoje kopije, uvijek imate slobodu kopirati i mijenjati taj program, imate ak i slobodu prodavati kopije. Slobodan softver ne znai ne-komercijalan softver. Slobodan softver mora biti dostupan za komercijalnu upotrebu, komercijalni razvoj i komercijalnu distribuciju. Komercijalni razvoj slobodnog softvera vie nije neuobiajen, takav slobodan softver je postao vrlo vaan. Pravila kako pakirati modificiranu verziju su prihvatljiva ako ne spreavaju vau slobodu da izdate modificiranu verziju. Pravila koja kau "ako va program napravite dostupnim na ovaj nain, morate ga napraviti dostupnim i na neki drugi nain" takoer mogu biti prihvatljiva uz prethodni uvjet. Ovakvo pravilo vam ipak ostavlja izbor da uope ne distribuirate program. Takoer je prihvatljivo da se u licenci trai da ako distribuirate modificiranu verziju programa, da autor trai da mu poaljete kopiju. U tom sluaju duni ste mu je poslati. Kad se govori o slobodnom softveru, najbolje je izbjegavati termine tipa "besplatan softver" jer ti termini oznaavaju cijenu a ne slobodu (ponovno zbog vieznanosti engleske rijei "free"). Na kraju, kriteriji poput ovih do sad nabrojanih u ovoj definiciji slobodnog softvera zahtijevaju paljivo razmiljanje prilikom njihove interpretacije. Prilikom odluke da li neka licenca zadovoljava kriterije kao licenca slobodnog softvera, sudi se prema tim kriterijima i gleda se da li zadovoljava njihov duh kao i tone rijei. Ako ta licenca sadri bilo kakve zabrane (nesvjesne), odbacuje se ak i ako se ne oekuje problem s tim kriterijem.
14/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

Ponekad licenca zahtjeva puno premiljanja, ukljuujui razgovore s odvjetnikom, prije nego se odlui da li licenca zadovoljava kriterije. Sve ovo se radi da slobodan softver ostane doista slobodan.

Zato slobodan softver


Digitalna informatika tehnologija nam je omoguila lake kopiranje i modificiranje informacija. Raunala su to olakala svima nama. No vlasnika prava (copyright) na neki program su neto to nam to onemoguava. Vlasnici takvog softvera su jedini koji imaju pravo kopirati i mijenjati softver koji mi koristimo. Copyright sustav je nastao sa tiskanjem tehnologijom za masovno kopiranje. Copyright se dobro uklapa u tu tehnologiju jer ograniava samo velike izdavae i ne oduzima slobodu itateljima knjiga. Obian ita koji ne posjeduje tiskaru, moe kopirati knjige samo tako da ih prepie i rijetki imaju volju to raditi. Digitalna tehnologija je mnogo fleksibilnija, kad su podaci u digitalnoj formi, lako se mogu kopirati i dijeliti drugima. No ta fleksibilnost je u sukobu sa idejom copyrighta. Zbog toga su uvedene prilino prljave mjere da se nametne copyright na softver. No, to je doista potrebno drutvu da napreduje? Potrebno je da su sve informacije slobodne, nap. program koji se moe itati, popravljati, prilagoavati i poboljavati a ne samo pokretati. Naalost ono to vlasnici softvera tipino isporuuju je crna kutija koju ne moemo prouiti ili mijenjati. Drutvo takoer treba slobodu. Kada program ima vlasnika, korisnici gube slobodu da kontroliraju dio svog ivota. Ekonomski razlozi koje navode vlasnici softvera su pogreni no ekoneomski problem je stvaran. Neki ljudi piu koristan softver isto iz hobija ili zato to uivaju programirajui neto korisno no ako elimo vie nego ti ljudi naprave, moramo poveati fond. Ve deset godina ljudi koji razvijaju slobodan softver iskuavaju razne metode kako namaknuti novac. Dosad je postignut nekakav uspjeh. Neki rade potrebne preinake svog programa zatraene od klijenata koji im za to plaaju. Iako bi oni i sami mogli napraviti te preinake ponekad je lake platiti autoru da to napravi budui da on ve poznaje svoj program. Neki zarauju tako to prodaju usluge odravanja. Velik dio se financira iz donacija. ini se da je to sve sitno, pokret slobodnog softvera je jo uvijek mali i relativno mlad.

15/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

Kao korisnici raunala danas, dosta nas koristi vlasniki softver. Ako nas prijatelj zamoli da mu snimimo kopiju tog programa, pogreno bi bilo odbiti ga. Suradnja je vanija od copyrighta. No takve "underground" aktivnosti ne ine dobro drutvo. Pojedinac bi trebao ivjeti otvoreno i ponosno te rei "ne" vlasnikom softveru. Svatko bi trebao moi suraivati otvoreno s drugim ljudima koji koriste softver. Svatko bi trebao imati pravo nauiti kako neki program radi i ako je potrebno popraviti njegov rad. To je razlog zato nam treba slobodan softver.

16/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

Kategorije slobodnog i ne-slobodnog softvera

Ovaj dijagram (napravio Chao-Kuei) objanjava razliite kategorije softvera. Slobodan softver (free software) to je slobodan softver je objanjeno u tekstu do sada, kratka definicija glasi: slobodan softver je softver koji dolazi sa dozvolom da ga svatko smije koristiti, kopirati, distribuirati (bilo izvornu ili modificiranu verziju) besplatno ili uz naknadu. U biti, to znai da takav softver mora dolaziti sa izvornim kodom. Ako je program slobodan onda ga se potencijalno moe ukljuiti u slobodan operacijski sustav kao to je GNU ili neku od slobodnih verzija GNU/Linuxa. Neke kompanije svoj softver zovu "free" no ne u smislu slobode nego cijene. ("Free" znai slobodan ali i besplatan). Zbog toga treba prouiti licencu s kojom takav softver dolazi da se vidi tono na to se taj pojam odnosi. Slobodan softver je obino pouzdaniji od ne-slobodnog. Open source softver Pojam "open source" vie-manje znai isto to i slobodan softver. Meutim kriterij koji neki softver mora zadovoljavati da bi bio open source je neto blai, dozvoljene su neke restrikcije koje u FSF-u smatraju previe ogrniavajuim.

17/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

Public domain softver Public domain softver je softver za kojeg ne postoje vlasnika prava. Ako je izvorni kod u public domain onda je to poseban sluaj non-copylefted slobodnog softvera, to znai da neke verzije ili modifikacije moda uope nisu slobodne. Ako je samo izvrna datoteka u public domain a source kod nije onda to nije slobodan softver jer on podrazumijeva da mora biti dostupan izvorni kod. Veina slobodnog softvera nije public domain, nego na njemu postoje vlasnika prava koja pak daju legalno pravo svima da koriste slobodno taj program. Copylefted softver Copylefted softver je slobodan softver iji uvjeti distribucije ne dozvoljavaju distributeru dodavanje nikakvih novih, dodatnih ogranienja prilikom distribucije ili modifikacije softvera. To znai da svaka kopija tog softvera, makar i modificirana, mora biti slobodna. Copylefted je generalni koncept, da bi ga ostvarili morate koristiti specifian skup distribucijskih pravila. Iako se moe postii raznim licencama preporuka je koristiti "GNU General Public License" jer dvije razliite licence mogu biti nekompatibilne to znai da bi spajanje takvih programa bilo nezakonito. Non-copylefted free software Non-copylefted free software dolazi sa dozvolom da se dalje distribuira i modificira ali se takoer mogu dodavati i nove restrikcije. Softver koji dolazi na takav nain moe imati verzije koje uope nisu slobodne. Softverske kompanije mogu kompajlirati takav softver sa ili bez modifikacija i prodavati ga kao vlasniki softver. GPL-covered software GPL-covered software je softver koji je pokriven sa "GNU General Public License". GNU projekt veinu svog softvera distribuira kao takav softver. The GNU system GNU sustav je potpun unixoidni operacijski sustav. Sastoji se od hrpe programa i ukljuuje sav GNU softver kao i mnogo drugih paketa kao to su X Window System i TeX koji nisu GNU softver. Budui da je svrha GNU-a da bude slobodan, svaki njegov dio mora biti slobodan. GNU programi
18/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

Termin "GNU program" je ekvivalent terminu "GNU softver". Neki program je GNU program ako je GNU softver. Takoer se koristi i termin "GNU paket". GNU softver GNU softver je softver izdan pod nadlenosti GNU projekta. Veina GNU softvera je copylefted, no ne sav. Bitno je da je sav GNU softver slobodan (free) softver. Dio GNU softvera su napisali ljudi iz FSF-a no veinu su napisali volonteri. Ne-slobodan (non-free) softver Non-free softver je softver koji nije slobodan. To ukljuuje "semi-free" softver i vlasniki softver. Semi free softver Semi free softver je softver koji nije slobodan ali dolazi sa dozvolom pojedincima da koriste, kopiraju, distribuiraju i mijenjaju program za neprofitne svrhe. Etiki je semi-free sofver bolji od vlasnikog softvera no svejedno stvara probleme jer se ne moe upotrijebiti kao dio slobodnog operacijskog sustava. Vlasniki (proprietary) softver Vlasniki softver je softver koji nije niti slobodan (free) niti semi-free. Njegovo koritenje, redistribuiranje ili modifikacija su zabranjeni ili zahtijevaju posebnu dozvolu. Freeware Termin "freeware" nema jasnu prihvaenu definiciju. Obino se koristi za softver koji dozvoljava redistribuciju ali ne dozvoljava mijenjanje i izvorni kod mu nije dostupan. Takav softver nije slobodan (free) softver, to su dva potpuno razliita termina. Shareware Shareware je softver koji dolazi sa dozvolom da ga se redistribuira ali svatko tko ga nastavi koristiti mora platiti licencnu naknadu. Shareware nije ni slobodan niti semi-free softver. Dva su razloga: shareware ne dolazi sa izvornim kodom, znai ne moe ga se mijenjati te shareware ne dolazi sa dozvolom da ga se instalira i koristi bez da ga se plati, ak niti u nekomercijalne svrhe.

19/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

Privatni softver Privatni ili "prilagoeni" softver je softver razvijen za jednog korisnika (tipino organizacija ili kompanija). Taj ga korisnik uva i koristi za svoje potrebe i ne distribura ga. Privatni softver je slobodan softver u jednostavnom smislu da ako je jedinstven, korisnik ima sva prava na njega. No, dublje gledajui, nema smisla razmiljati o privatnom softveru na nain je li on slobodan ili nije. Komercijalni softver Komercijalni softver je softver razvijen sa ciljem da se na njemu zaradi novac. Komercijalni softver i vlasniki (proprietary) softver nisu ista stvar. Veina komercijalnog softvera je vlasniki softver ali postoji i komercijalni softver koji je slobodan isto kao to postoji neslobodni (non-free) ne-komercijalni softver. Vana stvar je naglasiti da je mogu slobodan komercijalni softver. Zato ne bi smo trebali govoriti komercijalni softver kad mislimo na vlasniki sofver.

20/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

GNU LICENCA GNU Opa javna licenca - prijevod


GNU OPA JAVNA LICENCA verzija 2, lipanj 1991.
This is an unofficial translation of the GNU General Public License into Croatian. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GNU GPL--only the original English text of the GNU GPL does that. However, we hope that this translation will help Croatian speakers understand the GNU GPL better. Ovo je neslubeni prijevod GNU Ope javne licence na hrvatski jezik. Nije ga objavio Free Software Foundation i zakonito ne izrie uvjete distribucije programa koji koriste GNU GPL - to ini samo izvorni, engleski tekst GNU GPL-a. Meutim, nadamo se da e ovaj prijevod pomoi hrvatskim itateljima u boljem razumijevanju GPL-a. Copyright (C) 1989., 1991. Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Umnaanje i distribuiranje primjeraka ove licence jednakih izvorniku doputeno je svakomu, no njeno je mijenjanje zabranjeno.

Predgovor
Licence veine programa nastoje vam oduzeti slobodu da ih dijelite i mijenjate. Tomu nasuprot, GNU Opa javna licenca jami vam slobodu dijeljenja i mijenjanja slobodnih programa -- kako bi program bio slobodan za sve svoje korisnike. Ova Opa javna licenca vrijedi za vei dio programa Free Software Foundationa i bilo koji drugi program iji se autor obvee na njeno koritenje. (Neke druge programe Free Software Foundationa pokriva GNU Opa javna licenca za knjinice.) I vi je moete primjeniti na svoje programe. Kada govorimo o slobodnim programima, govorimo o slobodi, a ne cijeni. Naa Opa javna licenca je stvorena kako bi vam zajamila slobodu distribuiranja primjeraka slobodnih programa (i, ako elite, naplaivanje toga), primanje izvornog koda ili mogunost da ga dobijete, mogunost mijenjanja programa ili koritenja njegovih dijelova u novim slobodnim programima; te saznanje da to moete uiniti. Kako bi zatitili vaa prava, moramo postaviti ogranienja koja zabranjuju bilo kome poricanje ovih prava ili zahtjev da ih se odreknete. Ova ogranienja predstavljaju odreene odgovornosti za vas ako distribuirate ili mijenjate primjerke programa. Na primjer, ako distribuirate primjerke takvog programa, besplatno ili ne, primateljima morate dati sva prava koja imate i sami. Takoer, oni moraju dobiti izvorni kod ili mogunost njegova dobivanja. A vi ih morate obavijestiti o ovim uvjetima kako bi znali svoja prava. Vaa prava titimo u dva koraka: 1. stavljajui autorska prava na program, te 2. nudei vam ovu licencu koja vam omoguava zakonito umnaanje, distribuiranje i/ili mijenjanje programa.

21/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

Takoer, zbog zatite svakog autora i nas, elimo biti sigurni da svi razumiju da za ovakve slobodne programe nema jamstva. Ako program netko promijeni i poalje dalje, elimo da njegovi primatelji znaju kako ono to su dobili nije izvornik, kako bilo kakvi problemi u takvoj verziji ne bi utjecali na ugled izvornog autora. Na kraju, svakom slobodnom programu stalno prijete patenti. elimo izbjei opasnost individualnog licenciranja od strane redistributora slobodnog programa, to bi program uinilo vlasnitvom. Da to sprijeimo, razjasnili smo kako svaki patent mora biti licenciran za svaiju slobodnu uporabu ili uope ne biti licenciran. Slijede tone obveze i uvjeti za umnaanje, distribuiranje i mijenjanje.

GNU OPA JAVNA LICENCA OBVEZE I UVJETI ZA UMNAANJE, DISTRIBUIRANJE I MIJENJANJE


0. Ova Licenca vrijedi za svaki program ili drugo djelo koje sadri obavijest vlasnika autorskog prava prema kojoj se ono moe distribuirati pod uvjetima ove Ope javne licence. Pojam "Program" nadalje se odnosi na svaki takav program ili djelo, a "djelo zasnovano na Programu" odnosi se na Program ili bilo koji rad izveden iz njega po zakonu o autorskim pravima: dakle, djelo koje sadri program ili njegov dio, toan ili s promjenama i/ili preveden na drugi jezik. (Nadalje, prijevod je bez ogranienja ukljuen u pojam "promjena".) Svakom korisniku licence obraamo se kao "vama". O aktivnostima osim umnaanja, distribucije i mijenjanja ova Licenca ne govori; one su izvan njenog dosega. in pokretanja Programa nije ogranien, a o njegovom rezultatu govorimo samo ako je sadraj rezultata takoer djelo zasnovano na Programu (bez obzira to ga je stvorio Program). Je li to istina ovisi o funkciji Programa. 1. Smijete umnaati i distribuirati tone kopije izvornog koda Programa kakvog ga dobijete, na bilo kakvom mediju, ako oigledno i prikladno na svakoj kopiji istaknete odgovarajuu poruku o autorskim pravima i odricanje jamstava; ostavite nepromijenjenim sve obavijesti koje se odnose na ovu Licencu i na nepostojanje jamstava; i dajte svakom primatelju Programa primjerak ove Licence zajedno s Programom. Smijete naplatiti fiziki in prenoenja kopije i moete po svom izboru ponuditi jamstvo za naplatu. 2. Smijete mijenjati svoj primjerak ili primjerke Programa ili bilo kojeg njegovog dijela, tako oblikovajui djelo zasnovano na Programu, i umnaati i distribuirati takve promjene ili djelo pod uvjetima prethodnog Dijela 1., ako zadovoljavate ove uvjete: a) Promijenjene datoteke moraju nositi istaknute obavijesti da ste promijenili datoteke i datum svake promjene. b) Svako djelo koje distribuirate ili objavite, a koje u cjelosti ili djelomino sadri ili je izvedeno iz Programa ili njegovog dijela, mora biti licencirano u cjelosti bez naplate svima pod uvjetima ove Licence. c) Ako promijenjeni program, kada je normalno pokrenut, ita naredbe interaktivno, on mora, pokrenut za takvu interaktivnu uporabu u najuobiajenijem nainu, ispisati ili prikazati obavijest koja ukljuuje odgovarajuu poruku o autorskim pravima i obavijest da nema jamstva (ili drugaiju, koja kae da vi jamite) i da korisnici mogu ponovno distribuirati program pod ovim uvjetima, i objasniti korisniku kako da proita primjerak ove Licence. (Iznimka: ako je sam Program interaktivan, ali obino ne ispisuje takvu obavijest, vae djelo zasnovano na Programu ne mora ispisati obavijest.)

22/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

Ove potrebe vrijede za promijenjeno djelo u cjelini. Ako raspoznatljivi dijelovi tog djela nisu izvedeni iz Programa, i mogu se sami razumno smatrati nezavisnim i odvojenim djelima, onda ova Licenca, i njeni uvjeti, ne vrijede za te dijelove kada ih distribuirate kao zasebna djela. Ali ako distribuirate iste dijelove kao dio cjeline koja je djelo zasnovano na Programu, distribucija te cjeline mora zadovoljavati uvjete ove Licence, ije dozvole drugima koji su je licencirali vrijede za cjelinu, odnosno svaki njen dio bez obzira tko ga je napisao. Dakle, ovom dijelu nije namjera da dobije prava ili da pobija vaa prava na djelo koje ste vi napisali u cjelini; namjera mu je poboljati pravo nadzora distribucije izvedenih ili skupljenih djela zasnovanih na Programu. Takoer, sama integracija drugog djela nezasnovanog na Programu s Programom (ili djelom zasnovanim na Programu) na mediju pohranjivanja ili distribucije ne dovodi to drugo djelo u doseg ove Licence. 3. Smijete umnaati i distribuirati Program (ili djelo na njemu zasnovano, po Dijelu 2.) u objektnom kodu ili izvrnom obliku pod uvjetima Dijela 1. i 2. ako uinite jedno od sljedeeg: a) Popratite ga potpunim odgovarajuim strojno itljivim izvornim kodom, koji mora biti distribuiran pod uvjetima Dijela 1. i 2. na mediju po izboru koritenom za razmjenu programa; ili b) Popratite ga pisanom ponudom, koja vrijedi barem tri godine, da ete svakoj treoj stranci dati, za cijenu ne veu od vaeg troka fizikog vrenja distribucije izvornog koda, potpunu strojno itljivu kopiju odgovarajueg izvornog koda, koju e se distribuirati pod uvjetima Dijela 1. i 2. na mediju po izboru koritenom za razmjenu programa; ili c) Popratite ga informacijama koje ste vi primili o ponudi za distribuciju odgovarajueg izvornog koda. (Ova mogunost vrijedi samo za nekomercijalnu distribuciju i samo ako ste primili program u objektnom kodu ili izvrnom obliku s takvom ponudom, prema prethodnom Odlomku b.) Pod izvornim kodom za djelo mislimo na eljeni oblik djela za njegovo mijenjanje. Za izvrno djelo, potpuni izvorni kod odnosi se na izvorni kod svih modula koje ono sadri, uz datoteke koje definiraju svako ukljueno suelje, uz skripte za nadzor prevoenja i instalacije izvrne datoteke. Meutim, kao posebna iznimka, distribuirani izvorni kod ne mora ukljuiti bilo to to se obino distribuira (bilo u izvornom kodu, bilo u izvrnom obliku) s glavnim dijelovima (prevodioc, jezgra, itd.) operacijskog sustava na kojem izvrna datoteka radi, osim ako sam taj dio prati izvrnu datoteku. Ako se izvrna datoteka ili objektni kod distribuira omoguavanjem pristupa kopiji na odreenom mjestu, onda se omoguavanje jednakog pristupa izvornom kodu smatra distribucijom izvornog koda, iako se drugi ne prisiljavaju na umnaanje izvornog koda zajedno s objektnim. 4. Ne smijete umnaati, mijenjati, podlicencirati ili distribuirati Program osim kako je izraeno u ovoj Licenci. Bilo kakav pokuaj umnaanja, mijenjanja, podlicenciranja ili distribuiranja Programa je nezakonit, i odmah ponitava vaa prava prema ovoj Licenci. Meutim, strankama koje su od vas dobile kopije ili prava pod ovom Licencom nee biti ponitene licence, dok zadovoljavaju sve uvjete. 5. Ne morate prihvatiti ovu Licencu, poto ju niste potpisali. Meutim, nita vam drugo ne jami dozvolu za mijenjanje ili distribuciju Programa ili iz njega izvedenih djela. Te su radnje zakonom zabranjene ako ne prihvatite ovu Licencu. Prema tome, mijenjanjem ili distribuiranjem Programa (ili djela na njemu zasnovanog), pokazujete svoj pristanak na ovu Licencu, i sve njene obveze i uvjete za umnaanje, distribuiranje i mijenjanje Programa ili djela na njemu zasnovanih.
23/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

6. Svaki put kada ponovo distribuirate Program (ili bilo koje djelo zasnovano na Programu), primatelj automatski prima licencu od izvornog vlasnika za umnaanje, distribuiranje ili mijenjanje Programa prema ovim obvezama i uvjetima. Ne smijete nametnuti bilo kakva daljnja ogranienja na primateljevo koritenje ovdje zajamenih prava. Niste odgovorni za traenje zadovoljavanja ove Licence od drugih stranaka. 7. Ako vam se, kao posljedicu sudske presude ili tube za krenje patenta ili iz bilo kojeg drugog razloga (ne samo to se tie patenata), nameu obveze (bilo sudskim nalogom, nagodbom, ili drukije) u kontradikciji s uvjetima ove Licence, to ne znai da smijete kriti uvjete ove Licence. Ako ne moete distribuirati tako da zadovoljavate istodobno i svoje obveze pod ovom Licencom i sve ostale odgovarajue obveze, onda kao posljedicu uope ne smijete distribuirati Program. Na primjer, ako patentna licenca ne doputa slobodnu redistribuciju Programa svima koji njegove kopije dobiju izravno ili neizravno od vas, onda je jedini nain na koji moete zadovoljiti i nju i ovu Licencu prestanak distribuiranja Programa. Ako se bilo koji dio ovog Dijela dri nevaeim ili neprovedivim pod bilo kakvim okolnostima, namjena je Dijela da vrijedi i Dio u cjelini namijenjen je da vrijedi u drugim okolnostima. Ovom Dijelu nije svrha da vas potakne na krenje patenata ili drugih prava na vlasnitvo ili na njihovo pobijanje; jedina mu je svrha zatita integriteta distribucijskog sustava slobodnih programa, kojeg implementira javna praksa. Mnogi ljudi su velikoduno pridonijeli velikom broju programa distribuiranim kroz taj sustav pouzdajui se u dosljednu primjenu tog sustava; na autoru/donatoru je odluka da li e programe distribuirati nekim drugim sustavom i korisnik licence ne moe mu nametati svoj izbor. Namjera ovog Dijela je razjanjavanje onoga za to se vjeruje da su posljedice ostatka Licence. 8. Ako je distribucija i/ili koritenje Programa u nekim dravama ogranieno bilo patentima bilo sueljima na koje se polau autorska prava, izvorni vlasnik autorskih prava koji je Program stavio pod ovu Licencu moe dodati eksplicitno zemljopisno ogranienje distribucije izuzimajui takve drave, i inei distribuciju dozvoljenom samo u ili meu dravama koje nisu izuzete. U tom sluaju, ova Licenca ukljuuje ogranienje kao da je napisano u tijelu ove Licence. 9. Free Software Foundation s vremena na vrijeme moe objaviti promijenjene i/ili nove verzije Ope javne licence. Takve nove verzije bit e duhom sline sadanjoj, no mogu se razlikovati u detaljima kako bi se rijeili novi problemi ili brige. Svakoj verziji se daje razliit broj verzije. Ako Program navodi broj verzije ove Licence koja za njega vrijedi i "bilo koja kasnija verzija", smijete potovati obveze i uvjete te verzije ili bilo koje kasnije verzije koju je objavio Free Software Foundation. Ako Program ne odreuje broj verzije ove Licence, smijete odabrati bilo koju verziju ikad izdanu od strane Free Software Foundationa. 10. Ako elite ukljuiti dijelove Programa u druge besplatne programe iji se uvjeti distribucije razlikuju, piite autoru i traite njegovu dozvolu. Za programe ija autorska prava ima Free Software Foundation, piite Free Software Foundationu; ponekad radi toga radimo iznimke. U odluivanju e nas voditi dva cilja uvanja slobode svih izvedenica iz naeg programa i promicanje dijeljenja i ponovnog koritenja programa openito. NEMA JAMSTVA 11. POTO JE PROGRAM LICENCIRAN BESPLATNO, ZA PROGRAM NEMA JAMSTVA, U MJERI DOPUTENOJ PRIMJENJIVIM ZAKONOM. OSIM AKO JE DRUKIJE IZRAENO NAPISMENO, VLASNICI AUTORSKIH PRAVA I/ILI DRUGE
24/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

STRANKE PROGRAM DAJU "KAKAV JEST" BEZ JAMSTVA BILO KOJE VRSTE, IZRAENOG ILI PODRAZUMIJEVANOG, UKLJUUJUI, ALI NE SAMO NJIH, PODRAZUMIJEVANA JAMSTVA TRGOVINSKE PRIKLADNOSTI I ODGOVARANJA ODREENOJ SVRSI. SVI RIZICI VEZANI ZA KVALITETU I BRZINU PROGRAMA OSTAJU NA VAMA. AKO SE PROGRAM POKAE NEVALJANIM, VI SNOSITE SVE TROKOVE POTREBNOG ODRAVANJA, POPRAVLJANJA I ISPRAVLJANJA. 12. NI U KOJEM SLUAJU, OSIM NUNO PO PRIMJENJIVOM ZAKONU ILI NAGODBOM NAPISMENO, BILO KOJI VLASNIK AUTORSKIH PRAVA, ILI BILO KOJA DRUGA STRANKA KOJA SMIJE MIJENJATI I/ILI REDISTRIBUIRATI PROGRAM KAKO JE DOZVOLJENO GORE, NEE BITI VAMA ODGOVORAN ZA TETE, UKLJUUJUI OPE, POSEBNE, SLUAJNE ILI POSLJEDINE TETE PROIZALE IZ KORITENJA ILI NEMOGUNOSTI KORITENJA PROGRAMA (UKLJUUJUI, ALI NE SAMO NJIH, GUBITAK PODATAKA ILI INJENJE PODATAKA NETONIM ILI GUBITKE VAS ILI DRUGIH STRANAKA ILI NEUSPJEH PROGRAMA DA RADI S BILO KOJIM DRUGIM PROGRAMOM), AK I AKO JE TAKAV VLASNIK ILI DRUGA STRANKA UPOZORENA NA MOGUNOST TAKVIH TETA. KRAJ OBVEZA I UVJETA

25/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

Vrste GNU licenci


Postoje tri vrste GNU licenci: GNU GPL Koristi se sa veinom GNU programa i sa vie od polovice svih slobodnih softverskih paketa. Osnovna ideja je da prui potpunu slobodu korisnicima softvera i onemogui dodavanje ikakvih dodatnih restrikcija na program. GNU LGPL Koristi se za neke (ne sve) GNU biblioteke (library). Ova licenca se je nekad zvala "Library GPL" ali joj je ime promjenjeno jer je navodila ljude da je koriste ee no to je to potrebno. Glavna razlika je u tome to se biblioteka izdana pod LGPL moe upotrijebiti i u vlasnikom softveru dok se biblioteka izdana pod obinom GPL smije upotrijebiti samo u slobodnom softveru. to je od toga bolje, stvar je strategije i ovisi za svaku biblioteku posebno. GNU FDL Koristi se za dokumentaciju koja se izdaje uz slobodan softver (no ne nuno samo za to). Daje slobodu svima da koriste, kopiraju, mijenjaju, distribuiraju tu dokumentaciju, besplatno ili uz naknadu. GNU General Public Licence (GNU GPL) GNU Lesser General Public License (GNU LGPL) GNU Free Documentation Licence (GNU FDL)

26/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

ZAKLJUAK
GNU pokret je pokrenut iz jednostavog razloga - elje za slobodom, elje da se napravi neto pozitivno, neto od ega e svi imati koristi. Ljudi koji su to gurali imali su teak zadatak ispred sebe, napraviti slobodan operacijski sustav. Nisu imali neograniena materijalna sredstva za to, nisu imali ni obeanje da ih novac eka na kraju tog dugog puta. Imali su samo znanje i veliku volju. Malo po malo, kako se je sve vie ljudi ukljuivalo u pokret, uspjeli su doi do svog cilja (iako ne ba onako kako su imali u planu na poetku). Nastao je GNU/Linux. Svijet je dobio slobodni operacijski sustav (u nekim verzijama). Je li on bolji ili loiji od drugih? O tome postoje podjeljena miljenja no to nije vano. Vano je da je on slobodan to znai da ako netko smatra da neto ne valja i da moe bolje, ima slobodu to sam napraviti. To mu je omogueno time to ima izvorni kod i time to mu GNU licenca pod kojom dolazi osigurava to pravo. Druga stvar koja je proistekla iz tog pokreta je pojam slobodan (free) softver. Pokazalo se da je taj softver u pravilu bolji i pouzdaniji od vlasnikog (proprietary) softvera. Razlog je ponovno taj to slobodan softver dolazi sa izvornim kodom. Dostupnost izvornog koda omoguuje bilo kome da proui taj softver i samim time se bugovi bre pronalaze. Takoer, sloboda da se mijenja kod omoguuje bilo kome da prilagodi program upravo svojim potrebama. Time se dobija velika baza gotovog softvera u kojoj svatko moe nai neto korisno za sebe, pogotovo ako sam nije vian programiranju. Kakva je budunost GNU pokreta i slobodnog softvera? To je teko pitanje. S jedne strane imamo velike kompanije sa mnogo novca koje na razne naine ele zaustaviti slobodan softver koji je zbog svoje kvalitete postao ozbiljan konkurent njihovim loim poluproizvodima, a potpuno je besplatan. Ide se ak tako daleko da se pokuava uvesti patent na softverske algoritme to je po mom miljenju totalno apsurdno i glupo, da ne kaem opasno. Apsurdna je sama ta ideja da se neto tako apstraktno kao to je znanje, moe smatrati materijalnim dobrom i polagati prava na to. Drugi problem GNU pokreta i slobodnog softvera je taj to se izdavanjem programa kao slobodnog (pod GNU GPL) ne moe obogatiti budui da svatko tko jednom dodje do programa tako izdanog, moe ga dalje distribuirati bez ikakve naknade autoru. Iako postoje naini da se i takav softver unovi (donacije, posebne prilagodbe

27/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

softvera i sl.) zarada nikada nije i ne moe biti ni blizu onoj koja se okree u vlasnikom softveru. Kod nekih drava (ukljuujui i Hrvatsku) veliki problem u prihvaanju slobodnog softvera je i vrlo razvijena kultura piratsva. U zemljama gdje piratsvo nije tako raireno slobodan softver je dobar izbor i zbog svoje cijene (besplatan je). Tamo gdje je piratski softver normalna stvar, jedina prednost slobodnog softvera je to sto dolazi sa izvornim kodom, ali ta prednost veini korisnika nije bitna jer samo rijetki imaju znanje to iskoristiti. Na kraju, nebitno kakva budunost eka slobodan softver, on je sada tu. Poeo je kao ideja jednog ovjeka, tekom mukom i uz puno odricanja napravio je poetak, pridruili su mu se i drugi i stvar je krenula. Danas za gotovo sve to postoji kao vlasniki softver postoji i verzija slobodnog softvera, koji budui da je nastao iz ljubavi prema programiranju a ne zbog novca, je obino bolji i kvalitetniji. Zbog toga svi mi imamo mogunost izbora (jo kad bi se i igre izdavale pod GNU licencom kao slobodan softver, gdje bi nam bio kraj). :)

28/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

NAPOMENE
Materijal i ideje za ovaj seminar sam naao uglavnom na web stranici http://www.gnu.org ili linkovima koji su postavljeni tamo. Zbog prirode teme, nisam mogao pisati samo injenice nego je velik dio rada zapravo stav i razmiljanje jednog ovjeka, Richarda Stallmana (osim zakljuka koji je iskljuivo moje miljenje o svemu tome). Najvei problem mi je bio prevoenje nekih rijei koje u hrvatskom jeziku nemaju zamjenu ili ako i imaju, runo zvue. Zbog toga sam neke rijei ostavio u izvornom, engleskom obliku. Prijevod GNU licence (pod 4.1) sam kopirao takoer sa http://www.gnu.org jer ja i tako to ne mogu bolje prevesti a i bilo bi suvino prevoditi kad prijevod ve postoji.

29/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

Marijela Napast

STRUKTURA UNIXA

30/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

OPERACIJSKI SUSTAV
Svako raunalo ima operacijski sustav. Operacijski sustav je program koji kontrolira rad svih ostalih dijelova raunala, kako hardvera, tako i softvera. Najvanije je to nam doputa da koristimo sve mogunosti koje nam pruaju razni programi. Detaljno govorei Unix nije samo jedan operacijski sustav, on je obitelj operacijskih sustava. Razliiti proizvoai proizvode svoje verzije Unixa. Iako su sve verzije jako sline, postoje male razlike koje mogu uzrokovati probleme. Najoitiji primjer je raspored sustava datoteka i tono odreeni format nekih naredbi. Jedna od velikih prednosti Unixa za programere je to da su svi najbolje napisani korisniki programi neovisni od hardvera to ih ini lako itljivim novim sistemima. Unix je viekorisniki i viezadani operacijski sustav. Tako moe istovremeno postojati vie korisnika povezanih na sistem i svaki od njih moe imati pokrenuto vie programa. Korisnici velikom prednou Unixa smatraju mogunost istovremenog koritenja vie programa jer tako ne gube vrijeme na ekanje da se jedan posao zavri kako bi mogao zapoeti novi. Unix se koristi na radnim stanicama i viekorisnikim serverima. Na X terminalima i radnim stanicama X Windows predstavlja grafiko suelje izmeu korisnika i Unixa. Ali ipak poznavanje Unixa je potrebno za operacije koje nisu pokrivene grafikim programom, ili kad ne postoji X Windows sistem npr. u telnet sessionu.

OSNOVNA STRUKTURA UNIX OPERACIJSKOG SUSTAVA


Unix je operacijski sustav koji se sastoji od 3 najvanija dijela: kernela, shella(ljuske) i datotenog sustava tj. programa. Strukturu Unixa moe opisati slika1.

Slika 1.

31/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

KERNEL
Kernel kao to govori i njegovo ime je jezgra svakog Unix sistema i oitava se prilikom svakog pokretanja sistema i vezan je uz sam pokretaki dio programa. Rukuje sa cijelim izvornim sistemom i prezentira nam ga zajedno sa svakim spojenim korisnikim sustavom. Zadaa kernela je da dri procese i korisnike odvojenima i regulira pristup hardveru sistema, ukljuujui i procesor, memoriju, disk i druge ulazno izlazne ureaje. Kernel direktno komunicira sa hardverom i omoguava koritenje korisnikih programa. Ti korisniki programi ne trebaju znati nita o hardveru. Oni samo trebaju znati na koji nain komunicirati s kernelom i traiti od njega da izvri eljenu operaciju. Oni komuniciraju s kernelom kroz skup standardnih sistemskih poziva. Ti sistem pozivi trae od kernela da izvri operacije kao to su: otvaranje, zatvaranje, itanje, pisanje, povezivanje, izvravanje, startanje ili promjenu zapisa zbrojeva, mijenjanje vlasnitva nad datotekom ili direktorijem, promjene u novi direktorij, stvaranje procesa, determiniranje procesa, omoguavanje pristupa hardver ureajima i postavljanje granica izvornom sistemu. Najjednostavnije reeno kernel na naredbu korisnika ukljuuje i iskljuuje dio sistema. Npr. ako traimo da nam raunalo ispie sve datoteke unutar direktorija naredbom ls, onda kernel nareuje raunalu da s diska uita sve datoteke u traenom direktoriju i ispie ih na ekran. Neke od osnovnih funkcije kernela su: rukovanje s memorijom sustava i alociranje memorije za svaki proces rasporeivanje rada procesora kako bi rezultati rada svakog korisnika bili to uspjeniji organiziranje prenaanja podataka iz jednog djela raunala u drugi dio prihvaanje instrukcija od strane shella i njihovo predstavljanje iznuivanje dozvola pristupa koje su na snazi u datotenom sustavu Da bi se prikazao primjer na koji shell i kernel rade zajedno pretpostavimo da korisnik utipka naredbu rm moja_datoteka (koja ima uinak brisanja datoteke moja_datoteka). Shell trai datoteku koja sadri program rm i zatim postavlja zahtjev kernelu kroz sistemske pozive da izvri program rm na mojoj_datoteci. Kad proces rm moja_datoteka zavri, shell tad vraa korisniku znak unixa % to ukazuje na to da eka na nove naredbe. Da bismo locirali kernel potrebno je znati da root direktorij sadri oboje, pokretaki (boot) program i kernel za sistem. Ime kernel datoteke varira od proizvoaa do proizvoaa,

32/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

ali obino ukljuuje skup slova: nix da bi ga se moglo pronai sa tzv. Wildcard znakovima. Npr.: ls /*nix* -rwxr----- 1 root 1558734 Sep 24 1992 /vmunix

Ova lista definira svaku datoteku u root direktoriju sa skupom slova nix u njihovu imenu. U ovom primjeru ispisuje vmunix to je zajedniko ime za kernel file.

33/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

SISTEMSKI POZIVI
Sistemski pozivi su suelje izmeu kernela i korisnikih programa koji se pokreu na vrhu njega. Korisnici koji rukuju samo s shellom, tekst editorima ili drugim aplikacijskim programima nemaju potrebu znati mnogo o sistemskim pozivima, ali pravo poznavanje poziva je najvanije za Unix programere. Sistemski pozivi su jedini nain na koji se moe pristupiti opcijama kernela, kao to je sustav datoteka, mehanizam viezadanosti i meuprocesno komuniciranje. Sistemski pozivi definiraju ono to je Unix, jer sve ostalo tj. subrutine i naredbe se grade na toj osnovi. Neki od njih su povezani sa podacima koje korisnici ne smiju mijenjati. Postavlja se pitanje kako programeri pristupaju sistemskim pozivima. Ne postoji razlika izmeu sistemskog poziva i bilo kojeg drugog poziva funkcije. Npr. sistemski poziv read moe se postaviti ovako: amt = read (fd, buf, numbytes) ; Implementacija subrutine read varira u raznim oblicima Unixa. Obino je to asemblerski jezik koji koristi instrukciju stroja dizajniranu tono za sistemski poziv, a nije direktno izvriva iz C programa. Danas je pametno pretpostaviti da su sistemski pozivi jednostavno C subrutine, ali moramo biti svjesni da s obzirom na to da sistemski pozivi ulaze u promjenu konteksta (od korisnika do kernela i natrag), potrebno je mnogo vie vremena nego za obinu sistemsku subrutinu za koju proces posjeduje svoj adresni prostor. Veina sistemskih poziva vraa neku vrijednost. U navedenom primjeru poziv read vraa broj bita. Da bi ukazao na greku sistemski poziv vraa vrijednost koja se ne moe zamijeniti s tonim podatkom i obino je to 1. Zbog toga bi navedeni primjer trebao biti kodiran na sljedei nain: If ((amt= read(fd, buf, numbytes)) == -1) { printf(Read failed\n) ; exit (1) ; } Primjeujemo da je exit takoer sistemski poziv, ali on ne moe vratiti greku. Postoji vie razloga zbog kojih sistemski pozivi koji vraaju 1 nisu uspjeli obaviti traeni posao. Globalna varijabla errno sadri kod koji ukazuje na razlog. Errno sadri tone podatke samo

34/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

ako sistemski poziv doista vrati 1. Ne moemo koristiti errno da bi smo ustanovili da li je do greke uope dolo. Sistemska rutina perror uzima za svoj argument string i daje string, kolonu i opis razloga greke pohranjenog u errnu. Nain na koji koristimo opisane funkcije prikazuje primjer: If ((amt= read(fd, buf, numbytes)) == -1) { perror (read) ; exit (1) ; } Kao izlaz moemo dobiti sljedei tekst: file does not exist on an error. Na stranicama za pomo moemo pronai deklaraciju za svaki poziv. Tu je prikazano koji tip vrijednosti poziv vraa, koji tip argumenata uzima i koje datoteke moramo ukljuiti za koritenje odreenog sistemskog poziva. Slijedi primjer za poziv read(). #include <unistd.h> #include <sys/types.h> #include <sys/uio.h> int read(int d, char *buf, int nbytes) Read() pokuava proitati nbytes podataka iz objekta referenciranog deskriptorom

datoteke d u spremnik buf. Ako je poziv uspjean, vraa toan broj proitanih bita inae vraa 1 i postavlja globalnu varijablu errno koja pokazuje na greku. Prvi dio koda pokazuje koje datoteke moraju biti ukljuene, a onda je napisana sama deklaracija sistemskog poziva. int read(int d, char *buf, int nbytes) Read() uzima 3 argumenta : int koji je nazvan sa d, pokaziva na znak nazvan buf i jo jedan int nazvan nbytes. Read() vraa int kao rezultat. Imena argumenata odreujemo sami. Jo jedan jednostavan primjer sistemskog poziva je vremenski sistemski poziv:

35/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

long time(timep) long *timep;

/* Vraa vrijeme u sistemu */ /* Pointer na vrijeme */

Time vraa vrijeme u sekundama od 01.01.1970. Ako je argument timep razliit od nule tono vrijeme se pohranjuje u integer na koji pokazuje. Neki od sistemskih poziva najnie razine su: kreiraj otvori zatvori iskljui itaj pii trai Neki od sistemskih poziva za kontroliranje procesa su: razdvoji ekaj izvri izai signal Sistemski pozivi za IPC su: pipe dup

36/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

SHELL
Svaki put kad se ukljuujemo u Unix sistem, program za ukljuivanje provjerava nau ifru i korisniko ime i smjeta nas u program koji se zove shell (ljuska). Shell djeluje kao suelje izmeu korisnika i kernela. Shell je dio korisnikog programa, a ne dio kernela. Shell omoguuje izvravanje nekih procesa u pozadini. Shell je prevoditelj naredbi (command line interpreter(CLI)). Moemo vidjeti njegov pokaziva na ekranu obino u obliku imena raunala na kojem radimo kojeg slijedi znak %. Po elji korisnik sam moe promijeniti taj pokazni znak. Da bismo napravili na eljeni posao unaamo naredbe na mjesto tog pokazivaa odnosno komandne linije koja se nalazi odmah iza pokazivaa. Shell funkcionira kao prevoditelj naredbi, uzima svaku naredbu i da bi bila obraena prosljeuje ju kernelu. On tada prikazuje rezultat operacija na ekranu. Da bismo saznali koji shell koristimo treba nam informacija koja se nalazi u shell okrunoj varijabli. Naredba echo $SHELL ispisuje vrijednost te varijable. Da bismo otkrili koji shell upravo koristimo potrebno je znati posljednji dio imena, pa tako postoje sljedee mogunosti: Ime: /.../sh /.../csh /.../tcsh /.../ksh /.../bash Shell: Bourne shell C shell TC shell Korn shell Bourne Again SHell

Najee se koriste dva shella; Bourne shell (sh) i C shell (csh). Moemo koristiti razliite shellove upisivanjem imena shella na mjesto pokazivaa, pa emo tako upisati npr. imeshella% csh da bismo pokrenuli C shell, ili imeshella% sh da bismo pokrenuli Bourne shell. Na shell u koji nas sustav odmah ukljuuje moemo promijeniti koritenjem naredbe chsh. Da bismo napustili odreeni shell koristimo naredbu imeshella% exit. Razliiti shellovi izvravaju razliit broj funkcija. Shell provodi sljedee funkcije: a) stvara okruje susretljivo naim potrebama Nae radno okruje je definirano svaki puta kad se spojimo ili zapoinjemo rad s novim shellom. Okruje je definirano vrijednostima koje shell nalazi u inicijalizacijskim datotekama koje se uvijek itaju prilikom pokretanja. Okruje moemo promijeniti promjenom tih

37/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

datoteka i postavljanjem novih vrijednosti u varijable. Svaki shell rukuje na drugaiji nain sa svojim inicijalizacijskim datotekama. esto koritene varijable za radno okruje su: IME EDITOR PAGER PATH PRINTER SHELL TERM TZ b) npr. mail programa Postavlja pager koji e biti koriten od drugih programa, npr. mana za ispisivanje man stranica Odreuje direktorije kroz koje e shell traiti da bi pronaao odreenu naredbu. Direktoriji se pretrauju redom kojim se pojavljuju Odreuje printer koji e sluiti za ispis svih dokumenata koji e mu biti poslani lpr naredbom Postavlja glavni shell Odreuje tip terminala za programe kao to su editor i pager Postavlja vremensku zonu u kojoj se nalazimo manipulira povijeu naredbi OPIS Postavlja editor koji e biti koriten od strane drugih programa,

Shell uva listu naredbi koje smo upisivali. Ako trebamo ponoviti naredbu, koristimo strelice da bismo se pomicali gore i dolje po listi. c) automatski zavrava linije naredbi Utipkavanjem djela imena naredbe, naziva datoteke ili direktorija i pritiskom na Tab, tcsh shell e zavriti ostatak imena automatski. Ako shell pronae vie od jednog imena koje poinje tim slovima ut e se beep to ukazuje na to da je potrebno utipkati jo nekoliko slova prije ponovnog pritiskanja Taba. d) e) f) pie shell skripte definira naredbene aliase editira zajednike linije

38/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

PROGRAMI
Sve u Unixu je ili datoteka ili proces. Proces je program za izvravanje identificiran jedinstvenim PID-om(Process identifier). Datoteka je kolekcija podataka stvorenih od korisnika koritenjem tekst editora, compilera,itd. Primjeri datoteka su: dokument ( izvjetaj, esej) tekst programa napisan u nekom viem jeziku instrukcije razumljive direktno stroju i nerazumljive prosjenom korisniku, npr. kolekcija binarnih brojeva (executable ili izvrni file) direktorij koji sadri informacije o svojem sadraju koje mogu biti skup drugih direktorija ili poddirektorija i obinih datoteka Okruje aplikacija sastoji se od: shella maila tekst editora (vi, emacs, jove) tekst procesa (nroff, troff, TeX) kontrolnog koda za izvorni sistem (SCCS) razvojnih opcija (as, ld, cpp, cc) drugih opcija (who, date, wc, grep, comp) Programi i naredbe komuniciraju s kernelom kako bi se izvrile funkcije koje je pokrenuo korisnik. Programi su obino grupirani po kategorijama, pa tako npr. imamo programe koje koristimo za pisanje, programe koje koristimo za programiranje ili programe koji slue kao poslovne aplikacije. Sistemski programi su najee binarni i kompajliraju se od C izvornog koda. Smjeteni su na mjesta kao /bin, /usr/bin, /usr/local/bin, /usr/ucb, idr. Oni izvode funkcije na koje nas asocira sama pomisao na Unix, kao to su sh, csh, date, who, more idr. Sve datoteke su grupirane u strukturu direktorija. Sustav datoteka je ureen prema hijerarhijskoj strukturi, kao izokrenuto drvo. Vrh hijerarhije se tradicionalno naziva root i obiljeava se s kosom crtom -/.

39/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

Slika 2 prikazuje strukturu direktorija.

Slika2: Svaki vor predstavlja ili datoteku ili direktorij datoteka, a svaki sljedei sadri druge datoteke i direktorije. Datoteku ili direktorij odreujemo po njegovu imenu, ili punom ili apsolutnom imenu ili jednom relativnom za lokaciju. Puno ime zapoinje s rootom(/), i zatim slijede grane datotenog sustava svaka odvojena s kosom crtom (/), sve dok ne dosegnemo eljenu datoteku. Npr. /home/condron/source/xntp Relativno ime specificira ime relativno drugom imenu, a uobiajeno se odnosi upravo na onaj direktorij u kojem se trenutno nalazimo. Dva posebna direktorij ulaza su: direktorij u kojem se trenutno nalazimo roditeljski direktorij direktorija u kojem se nalazimo Npr. ako se nalazimo u /home/frank i elimo specificirati viu razinu moemo koristiti: ../condron/source/xntp To ukazuje da je prvo potrebno ii jedan nivo direktorija iznad i onda se spustiti kroz condorn direktorij kojeg slijedi source direktorij i onda xntp. Svaki direktorij i datoteka su izlistani u svojem roditeljskom direktoriju. U sluaju root direktorija roditeljski direktorij je on sam. Direktorij je datoteka koja sadri tablicu s imenima datoteka koja se nalaze u njemu i svako ime datoteke pridruuje inode broju u listi. Inode je specijalna datoteka dizajnirana da ju kernel moe itati kako bi dobio informacije o svakoj
40/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Struktura Unixa

datoteci. Odreuje dozvole nad datotekama, vlasnitvo, datum stvaranja, zadnjeg pristupa i promjene, te fiziku lokaciju blokova podataka na disku koji sadre datoteku. Sistemu nije potrebna nikakva posebna struktura za podatke koji se nalaze u datoteci. Datoteka moe biti ASCII ili binarna ili kombinacija i moe prezentirati tekstualne podatke, shell skriptu, kod za program, tablicu direktorija, junk ili bilo to drugo. Ne postoji zaglavlje, naslovna informacija ili EOF znak kao dio datoteke. Svaki Unix sustav ima svoju strukturu dozvola. Slijedi jednostavno objanjenje dozvola nad datotekama na serveru temeljenom na Unixu. Svaka stvorena datoteka ili direktorij imaju: a) vlasnika to je obino osoba koja je stvorila datoteku vlasnik datoteke ili direktorija moe davati razliita doputenja b) grupu kako vie korisnika moe biti povezano u korisniku grupu, postoji grupno vlasnitvo vezano za pojedinu datoteku ili direktorij c) ostalo (svijet) svi ostali korisnici, u ovom sluaju bilo tko spojen na Internet Postoje 3 naina zatite datoteka i direktorija a) r ((Read) - itaj) korisnik koji ima dozvolu itanja datoteke i moe zakljuati sadraj te datoteke korisnik koji ima dozvolu itanja nad direktorijem moe saznati koje se datoteke nalaze u direktoriju (ako se trae detaljne informacije o datotekama unutar direktorija, direktorij mora imati execute dozvolu) b) datoteke korisnik koji ima dozvolu pisanja nad direktorijem moe mijenjati sadraj tog direktorija c) x ((Execute)-Izvri) korisnik koji ima dozvolu izvravanja nad datotekom moe koristiti ime te datoteke kao Unix naredbu korisnik koji ima dozvolu izvravanja nad direktorijem moe kopirati direktorije w ((Write) - Pii) korisnik koji ima dozvolu pisanja nad datotekom moe mijenjati sadraj te

41/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

Andrija Martinovi

SHELL

42/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

UVOD
U doba nastanka i razvijanja UNIX operativnog sistema, 1970-tih i 1980-tih, raunala nisu bila toliko mona koliko su danas, tako da nije postojalo grafiko suelje (GUI). Prvi ulazno / izlazni ureaji bili su terminali i teleprinteri. Postojali su (viekorisniki) multiuser serveri na koje se bilo mogue spojiti putem terminala i moglo se raditi u tekstualnom nainu rada, komandnoj liniji (CLI), tj. SHELL-u. I danas je ostalo popularno raditi u shell-u, ne samo zbog povijesnih razloga, nego i praktinih. Unix korisnicima je gotovo nezamislivo raditi bez shell-a, tj. terminala. Terminali su i danas prisutni u raznim ustanovama i poduzeima, nije potreban dodatan software da bi se dodao jo jedan terminal, a vano je napomenuti i da je mogue i osobno raunalo koristiti kao obian terminal. Nakon logiranja korisnik moe raditi u shell-u. Danas u standardnim distribucijama (ne onima za specijalne namjene) sve ee se korisnik nakon startanja nae automatski u grafikom okruenju - XWindows, tako da terminal niti ne vidi. Naravno, u bilo kojem trenutku moe aktivirati ili terminal ili X-e (npr. Alt+F2). Dakle, Shell je tekstualno okruenje pomou kojega korisnik komunicira sa operacijskim sustavom, po defaultu koristei tastaturu (kao input) i monitor (kao output). Korisnik instrukcije zadaje u obliku znakovnih komandi, a shell ima zadatak prevoditi te komande u instrukcije razumljive OS-u.

43/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

SHELL
Shell je korisniki program kao i svaki drugi.

Shell je komandni interpreter UNIX operativnog sistema i moe se promatrati kao sloj koji se nalazi izmeu kernela i korisnika. Interaktivan je s obzirom da ima direktnu komunikaciju sa korisnikom. On dobiva korisnike zahtjeve, interpretira ih i predaje kernelu na izvravanje. Shell je komandni interpreter, tj. jo jedan sloj kojim je hardware raunala sakriven od korisnika.

44/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

Shell ili CLI (Command Line Interpreter) je suelje izmeu korisnika i operativnog sustava (UNIX-a), tj program koji interpretira ono to se napie u komandnoj liniji. Prvo to korisnik vidi kad se UNIX digne je login: pa password:. Nakon uspjenog logiranja OS dodijeli UID (user ID) i GID (primary group ID) i doemo do shell-a. Trebali bi biti u svome (HOME) direktoriju ako postoji ili u ROOT (/) direktoriju. U komandnu liniju, iji defaultni prompt moe izgledati: $ ili # (kod Bourne shell-a) ili % (kod C shell-a), upisuju se naredbe. Te komande mogu biti built-in, tj. ve ugraene tako da se izvravaju direktno iz shell-a , ili se mogu indirektno pozivati iz nekih drugih programa. Ugraene naredbe su razliite kod razliitih verzija shell-ova. Iako su verzije UNIX-a sline, ipak postoje odreene razlike izmeu verzija. Kompatibilne verzije (sh, bash, ksh) i posebna vrsta c shell-a (csh, tcsh). U veini verzija UNIX operativnog sustava obino su na raspolaganju sljedee vrste shell-ova: SHELL Bourne Shell KRATAK OPIS /bin/sh - jednostavan za koritenje, fleksibilan, sa ugraenim programskim jezikom. /bin/rsh - reducirana verzija Bourne Shell-a. /bin/csh - komandni interpreter i programski jezik koji podrava komandni buffer, kontrolu poslova i sintaksu C-like. /bin/ksh - dodatne mogunosti u odnosu na Bourne Shell./bin/rksh reducirana verzija Korn shell-a. /bin/tcsh - unaprjeena verzija C shell-a. Ima bolje editiranje komandnih linija, kompletiranje imena fajlova, ponavljanja komandi.

C Shell

Korn Shell

Turbo C Shell

Naravno, postoji daleko vei broj shell-ova, ali o tome kasnije.

45/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

OSNOVNA STRUKTURA UNIX-A


Na slici je prikazana arhitektura UNIX operativnog sustava. U centru strukture nalazi se hardware koji opskrbljuje operativni sustav svim potrebnim hardware-skim resursima. Oko hardware-a se nalazi niz slojeva koji odvajaju korisnika od stroja inei mu na taj nain komforniji rad na raunalu. Prvi sloj oko hardvera je jezgra (kernel) operativnog sistema koje ima zadatak da vie slojeve odvoji od sloja ispod, to jest da ih uini hardware-ski nezavisnim. Slijedei sloj ini komandni interpreter (shell). Prvenstveni zadatak ovog sloja jeste interakcija sa korisnikom (prihvaanje korisnikih zahtjeva, njihovo interpretiranje i predavanje niem sloju (kernelu) na izvravanje). U najviem sloju nalaze se razliite komande i korisniki programi iji je zadatak direktno pruanje specifinih usluga korisniku. Na slici (dole), ovaj sloj je podijeljen na vise dijelova. Svaki dio predstavlja skup srodnih komandi. Imajui ovo u vidu, moe se rei da razumijevanje UNIX operativnog sustava zahtjeva poznavanje etiri njegove osnovne komponente: kernel, shell, komande i fajl sistem koji nije eksplicitno prikazan na slici ali je implicitno sadran u djelu kernela.

Dakle, UNIX OS se sastoji od: jezgre (kernel) zajednikih programa ljuske (shell) viih programskih jezika razliitih namjenskih programa Sada emo malo detaljnije objasniti kernel i shell.

46/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

KERNEL (JEZGRA)
Kernel UNIX operativnog sistema kontrolira pristup raunaru, upravlja fajl sistemom, resursima raunara, diskovima, trakama, tampaima, komunikacionim linijama i drugim ureajima. Na slici dat je pregled funkcija Kernel-a.

Za kernel (jezgru) moemo rei da je centralni dio operacijskog sustava koji se uitava pri podizanju sustava, a upravlja raunalnim sklopovljem, radom procesora i dodjelom memorije. Poznavanje jezgre operacijskog sustava nije nuno za koritenje raunala. Nedostupna je obinom korisniku koji moe komunicirati s jezgrom samo preko poziva sustavu.

47/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

LJUSKA (SHELL)
Ljuska je tuma ( tzv. interpreter ) naredbi i slui kao veza izmeu korisnika i UNIX-a. Svaki korisnik ima odvojenu kopiju ljuske pa prema tome one mogu biti razliite za svakog korisnika. Kod pokretanja operacijskog sustava UNIX, proces init izvodi proces getty za svaku aktivnu liniju terminala. Prilikom prijave korisnika UNIX-u, odvijaju se sljedee akcije: -getty oslukuje liniju i kada otkrije na njoj skup znakova zakljuen znakom za kraj retka, pokree novi proces login, prenese mu proitane znakove i nestaje -login zavrava proces prijave korisnika UNIX-u (ime korisnika i njegova lozinka te provjera identiteta) i ako je sve u redu, provjerava zadnje polje u datoteci etc/passwd za prijavljenog korisnika. To polje je ime ljuske koja e zamijeniti proces login: ime: ime: passwd: broj1: broj2: tekst:maticno kazalo:ime_ljuske Ljuska je interpreter naredbi. Njezini zadaci su: Primanje korisnikih naredbi Pokretanje korisnikih programa i komunikacija sa jezgrom Prikazivanje rezultata na zaslonu Prilikom spajanja na raunalo, po uspjenoj identifikaciji, nalazimo se u poetnoj ljusci

48/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

VEZA UNIX-a I LJUSKE


Komunikacija korisnika i ljuske odvija se sljedeim aktivnostima: ljuska znaka odziva (eng. prompt)(%) naredba ljuska. Izlazak iz ljuske rezultira u preuzimanju linije terminala od strane procesa init i sve ide iz poetka (init getty login ). Ljuska pripada grupi korisnikih programa. Kod operacijskog sustava nema nikakvih privilegija. To znai da svaki korisnik moe odabrati jednu od ponuenih ljusaka ili (ako ima dovoljno znanja) moe napisati program koji e biti njegova ljuska. UNIX ne propisuje kako e izgledati ljuska. Zbog toga danas postoji vei broj ljusaka meusobno razliitih po mogunostima ali s istim globalnim zadatkom. Danas su najrasprostranjenije slijedee ljuske u UNIX-u: sh Stephen Bourne standard shell (Bourne shell) ksh David Korn shell (Korn shell) csh Berkeley C-shell (Bill Joy shell) tcsh poboljana verzija ljuske csh bash GNU Bourne-Again Shell (kombinacija sh, ksh i csh sukladna s IEEE Posix Shell&Tools specification (IEEE WG 1003.2) rsh (eng. restricted shell) dozvoljava samo nedestruktivne akcije na UNIX-u (npr. uporaba za sajmove, predstavljanja, informacije i sl.) rsh (eng. remote shell) ljuska koja omoguuje izvoenje naredbi na udaljenim raunalima u mrei (TCP/IP) ssh (eng. secure shell) omoguuje sigurnu uspostavu veze preko mree ali mogu bit i neto "egzotinije", npr.: psh postscript ljuska (akcije posluivaa NeWS) ocsh objektna ljuska (napisana pomou ljuske csh i razvijena u okviru Gruppe predmeta Raunarski sustavi i procesi (RASIP) na FER-u) sh4 (tvrta 4-MATE, Zagreb). Ljuska je napisana u jeziku C uz koritenje biblioteke curses, namijenjena je korisnicima UNIX-a na obinim terminalima i omoguuje ugodan rad s datotekama (slino programu Norton u DOS-u). Openito za sve ljuske vrijedi pravilo: "Ako u obavljanju zadataka koristimo UNIX-ove naredbe kao elemente, za njihovo povezivanje u kompleksnu cjelinu potrebno je koristiti programiranje u jednoj od ljusaka". Ako je za rjeenje zadataka potrebno koristiti osnovne

49/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

strukture i elemente nekog programskog jezika, preporuka je napisati program u jednom od raspoloivih programskih jezika. UNIX-ove ljuske imaju i nedostatke: Ne izvode se pretjerano brzo. Programi napisani u jednoj od ljusaka su tekst datoteke pa se kao takve i raspodjeljuju, a otean je i sigurnosni mehanizam (problem bitova setuid i sticky). Vii programski jezici ( C, Pascal, Fortran, LISP itd.) omoguavaju korisniku izradu vlastitih programskih aplikacija unutar UNIX okruenja. Razliiti namjenski programi (koji se koriste pod UNIX OS) su programi za dizajniranje, obradu teksta, matematike proraune itd. Dobra strana u ovom suparnitvu je u tome to sve ljuske mogu istodobno postojati na jednoj UNIX-ovoj instalaciji, a na krajnjim korisnicima je da odlue koju e koristiti. Ljuske sh i csh su sastavni dijelovi gotovo svih inaica UNIX-a, a ostale ljuske su negdje prisutne, a negdje ih treba dodatno instalirati. Dva su osnovna naina koritenja ljuske: interaktivni rad koritenjem preusmjeravanja i ulanavanja pojedinih naredaba skupna (eng. batch) obrada u kojoj se naredbe itaju iz datoteke (eng. shell script).

50/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

SHELL KAO SKRIPT INTERPRETOR

Uz pomo VI (ili nekog drugog tekst editora) napie se skripta. Ako prva linija poinje sa # onda je C shell scripta. U suprotnom, script se tretira kao Bourne shell script. izvravanje: /bin/csh [-vx] script_name args ... -v -x ili: % chmod +x script_name % script_name args ... Skripte se koriste kada je interaktivni rad teak i previe zamren te kada zahtjeva mnoge komplicirane akcije koje se ponavljaju. ispisuje linije skripte koje se izvravaju ispisuje komande koje se izvravaju

51/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

STARTANJE SHELL-A
Shell se starta kao i svaki drugi program, programskom naredbom. UNIX je graen tako da u operaciji boot procesa ukljui i startanje Shell-a, zapravo to je zadnji korak u boot procesu. Odmah po ukljuivanju raunala boot proces obavlja niz radnji kako bi kontrolu predao u ruke korisnicima, i pod boot procesom podrazumijevamo u ovom kontekstu tri osnovne faze. Prva faza je uitavanje jezgre odnosno alociranje raunarskih ureaja i kad se jednom starta kernel on ostaje u memoriji tokom itavog rada raunara odnosno do nestanka napona u memoriji. Druga faza je identifikacija korisnika kako bi bila mogua dodjela kontrolnih prava korisniku i u tu svrhu se pozivaju dva programa a to su getty i login. Prvi ima funkciju obezbjeivanja portova odnosno komunikacijskih kanala prema korisniku. Ti kanali se oznaavaju kao tty sa rednim brojem iza toga. getty prima string sa tastature od korisnika i prosljeuje ga programu login koji odreuje na osnovu tog stringa za koji pretpostavlja da je korisniko ime (Username) korisnika kontrolna prava (permissions), zatim se zahtjeva od korisnika da zada sljedei string koji e od login-a biti prepoznat kao korisnika lozinka (password). Ako password ne odgovara postojeem korisniku ili korisnik nije definiran na toj maini onda login ponovno vraa kontrolu programu getty, a ako je identifikacija validna onda program login starta sljedei program koji izmeu ostalog slui za izolaciju jezgra od korisnika a to je Shell. U svrhu ostvarivanja to vee sigurnosti sistema startanje Shell-a moe biti uskraeno odnosno onemogueno. Tu opet postoje opcije pomou kojih se odreuje koji e se program odmah nakon logiranja startati. To moe biti neki text procesor ili neki spreadsheet program tako da korisnik nema pravo upravljanja fajlovima koji nisu odgovarajueg formata za taj program, i poslije iskljuivanja tog programa sistem korisnika vraa ponovo na identifikaciju. Koji program e biti startan odreuje se u fajlu /etc/passwd koji sadri, izmeu ostalog, logine, kriptirane passworde, UID, GID, Ime korisnika, itd. Dva fajla, koja u stvari predstavljaju shell skripte, se izvravaju u toku login procedure. To su .login i .cshrc i oba se nalaze na HOME direktorijumu korisnika. Prvi se izvrava iz login programa koji obavlja autorizaciju korisnika (provjera login imena i passworda). Ako je autorizacija obavljena uspjeno, sam login program starta shell korisnika. Slino, kao login, shell izvrava svoj start-up fajl. Start-up fajl C shell-a je .cshrc. Oba spomenuta start-up fajla slue za inicijalno automatsko izvravanje odreenih komandi, definiranje aliasa, varijabli,

52/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

radne okoline, i slino. Razlika izmeu .login i .cshrc fajla je ta sto se .login izvrava prvi i to prije startanja shell-a, ali to obino nije znaajno Tipian sadraj .cshrc fajla: # Definicija aliasa # alias ls "ls -CF" alias ll "ls -al" alias la "ls -a alias hi "history" alias xdvi "xdvi -geometry 730x860+30-1 -s 4 -paper a4" alias snns "snns -mono" # # Definiranje varijabli shell-a # set history=40 set filec set prompt="`hostname` \!% " set path=($path /usr/TeX/bin ~srle/bin /usr/local/spice/bin) # # Varijable okoline # setenv SPICE_LIB_DIR /usr/local/spice/lib # # Ostalo # umask 077

53/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

PRIJAVLJIVANJE SA TERMINALA
Da bi se koristile mogunosti udaljenog raunala, potrebno se na njega prijaviti. Da bi ta prijava bila prijava bila jednaka kao da je raunalo lokalno, koriste se dva protokola: TELNET (virtual terminal protocol) i RLOGIN (Remote Login Protocol). Prijavljivanje sa terminala (preko serijske veze) i konzole (kada X-i nisu pokrenuti) osigurava getty program. init pokree posebnu instancu (kopiju) getty-a za svaki terminal za koji je dozvoljeno prijavljivanje. getty uitava ime korisnika i pokree login program koji uitava ifru korisnika. Ako su korisniko ime i ifra ispravni login pokree shell. Shell je tada korisnikova radna okolina; moe biti tekstualna, Bourne komandni shell ili ak grafiki shell - X-i...) . Kada shell program zavri svoj rad npr. korisnik se odjavi, ili ako je login prekinuo izvravanje zbog neispravnog korisnikog imena ili lozinke, init ovo registrira i pokree novu instancu getty-a. Kernel ne zna nita o prijavama jer sve potrebne poslove obave sistemski programi.

54/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

SHELL KAO INTERPRETOR NAREDBI

Sintaksa naredbi
Kada login ukljui Shell na ekranu se ispisuje komandni prompt koji obino poinje sa znakom $ ili % ili ako je rije o Superuser-u # sharp sign. Iza toga se nalazi komandna linija (kako se jo i naziva) odnosno komandni input, pa se od korisnika zahtjeva zadavanje komande da bi je Shell pokuao interpretirati. Sintaksna pravila nalau format u obliku komande i argumenata: $ naredba argumenti naredba je neka izvrna datoteka kao npr. naredba, alat, shell, skripta, itd. Naredba mora biti executable odnosno user mora imati pravo na izvraanje te komande, pravo x u listi prava koju ima svaka datoteka u UNIX-oidima. Veina komandi oekuje argumente u sljedeoj formi:

55/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

opcije imena_fileova Na primjer: $ ls la example1.c tulip.o ovo su ukupno tri argumenta. Prvi je opcija a druga dva su imena fileova. Naredbe definiraju akcije na UNIX-u. Svaku naredbu jedinstveno odreuje njeno ime i argumenti. Zadaci shella su izmeu ostalog i uklanjanje suvinih informacija kao to su nepotrebni razmaci izmeu argumenata , itd. U komandama se mogu koristiti univerzalni znakovi *,[] , ?. UNIX je CASE SENSITIVE operativni sistem, odnosno string otkucan VELIKIM i malim slovima nema isto znaenje. Na slici je prikazan dijagram toka izvravanje naredbi.

Neki znakovii koji se sa tastature dobivaju kombiniranjem kontrolnih i standardnih tipki imaju specijalna znaenja. Najznaajniji su:

< Ctrl > S < Ctrl > Q < Ctrl > D < Ctrl > C < Ctrl > Z

-izlaz na ekranu se privremeno zaustavlja. -izlaz na ekranu se nastavlja. -najjednostavniji nain odjavljivanja sa sistema. -prekid procesa. -privremeno zaustavljanje procesa.

56/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

Sve komande UNIX-a se, prema svojim funkcijama, mogu svrstati u neku od sljedeih klasa: obrada teksta -tekst editori (ed, ex, vi), spell checker, tekst formateri i slino, upravljanje podacima -kreiranje, organizacija i brisanje fajlova i direktorijuma, elektronske komunikacije -vise programa (write, mail) koji omoguavaju razmjenu poruka meu korisnicima, programska okolina -mogunost definiranja komforne programske okoline koritenjem razliitih uslunih programa, razvojno okruenje -kompajleri i interpreteri raznih programskih jezika, linkeri, debageri,... ostali usluni programi -grafika podrka, X Windows.

Pisanje vie naredbi u jednu liniju


esto se javljaju problemi tokom rada glede zadavanja naredbi. Ako korisnik eli zadati nekoliko naredbi u jednom redu, odnosno eli jednom komandom narediti izvravanje vie naredbi od jednom shell nudi takvu mogunost na dva potpuno razliita naina: $ cd /usr/local/apache/conf; vi httpd.conf to su zapravo dvije naredbe stavljene u jednu komandnu liniju koje koriste za editiranje konfiguracionog fajla Apache web servera. Kljuni sintaksni karakter je semikolon ;. On govori shellu da razdvoji dvije naredbe u jednoj komandnoj liniji. Shell e to uraditi, to znai da e prvo promijeniti radni direktorij u /usr/local/apache/conf gdje se nalazi datoteka httpd.conf i zatim e pokrenuti vi editor za editovanje httpd.conf fajla. Ali ovakav nain zadavanja naredbi bi trebao biti koriten samo onda kada korisnik tono zna kakvog tipa izvrne fajlove pokree. Ova vrsta sintakse bi se trebala izbjegavati ukoliko se radi o odreenim shellovim skriptama.

57/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

Drugi nain zadavanja vie naredbi u jednu komandnu liniju je startanje konkurentnih naredbi: $ named & apachectl start & mysqld & startx & netscape ova komandna linija starta pet programa od toga etiri u pozadini. Procesi startani u pozadini ne zarobljavaju komandni prompt ve se odvijaju u pozadini a prompt ostaje slobodan za zadavanje daljnjih naredbi. Kljuni znak je & i stavlja se iza naredbe koja pokree program koji elimo startati u pozadini. To su obino neki servisi jer nema potrebe da servis zauzme jedan komandni prompt.

Pisanje jedne naredbe u vie linija


Ponekad je potrebno zadati naredbe koje sa svojim argumentima zauzimaju vie od jedne komandne linije u promptu. To esto uradi sam terminal ako ima mogunost automatskog wrapiranja teksta ali kod nekih tipova terminala to nije sluaj pa je potrebno manualno prelomiti komandu u vie linija: $ echo ovo moe biti predugaak > jednu komandnu liniju text da bi stao u \

ovo moe biti predugaak text da bi stao u jednu komandnu liniju znak \ je tzv. backslash karakter. Echo naredba ispisuje tekst na standardni output. Kao to ve spomenuo shell uklanja sve nepotrebne razmake (space caracter) tako da je tekst ispisan bez velikih razmaka kao u komandnoj liniji. Shell vidi komandu kao string i dijeli ime programa i argumente pomou razmaka ma koliko veliki oni bili, a kraj komande prepoznaje po newline karakteru. Newline karakter se generira kada pritisnemo enter na tastaturi. Na samom programu je da razlui to je opcija a to neki drugi argument. Prelamanje se vri upotrebom backslash karaktera tako to se pie kada ponestane mjesta za itavu komandu i poslije toga pritisnemo enter. Backslash je zapravo tzv. escape karakter. Poslije njega svi karakteri se tretiraju literalno. Ovdje se mora biti paljiv jer ako poslije backslasha ne doe

58/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

newline ve recimo space pa onda newline backslash nee prelomiti liniju i shell e pokuati interpretirati ono to je prethodno ukucano.

Literalna interpretacija
Kao to sam gore naveo backslash je escape karakter. Bilo koji znak se odmah iza njega tretira literalno. Kao recimo newline. Ali ako elimo da nam echo vrati rezultat tono onakav kakvog smo ga napisali, odnosno ako elimo da veliki razmaci budu tretirani kao takvi, onda se koristimo escape karakterima kao to su ( ) i ( ): $ echo ovo je text sa ovo je text sa prevelikim razmacima

prevelikim

razmacima

znak ( ) se koristi za izbjegavanje grupa specijalnih znakova. Ali ako elimo koristiti neke specijalne karaktere sa njihovim funkcionalnim znaenjem onda se koristi ( ) escape karakter: $ echo moj home direktorij je $HOME

Uslovno izvrenje komandi


Na osnovu prethodno izvrene komande mogue je usloviti izvrenje druge: $ ls l nepostojei_fajl && echo ova naredba se nee izvriti ako prvi proces vrati nulu druga naredba e se izvriti a ako vrati nonzero druga naredba se nee izvriti. Tako e naredba: $ ls l postojei_fajl && halt

59/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

izlistati navedeni fajl i ugasiti raunar. $ ls l fajl || ls -la ako prvi dio komande vrati zero druga komanda ls se nee pokrenuti a ako vrati nonzero komanda e izlistati sve u aktivnom direktoriju. Uslovna izvrenja su omoguena upotrebom uslovnih iskaza && i || .

&& ||

logiko AND logiko OR

Znak ! ukoliko je napisan ispred i spaceom odvojen od naredbe predstavlja negaciju pa se moe kombinirati sa gore navedenim u svrhu ispunjavanja skoro svih situacija uslovnog izvrenja. Treba napomenuti da ako se znak ! napie odmah ispred naredbe bez odvajanja spaceom to znai da shell treba da izvri tu naredbu sa istim argumentima sa kojima je zadnji put bila pozvana: $ telnet 212.69.23.100 e uspostaviti konekciju sa hostom na toj IP adresi, a ako nakon toga ponovo pokrenemo telnet: $ !telnet uinit e isto, barem e to pokuati.

60/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

Iniciranje Programa
Kada shell okona interpretaciju komande onda pokuava inicirati izvravanje programa. Jezgra izvrava program ali shell inicira njegovo izvravanje. Koko bi inicirao izvravanje shell pretrauje PATH standardnu varijablu u potrazi za direktorijem koji sadri odgovarajuu naredbu i starta subshell da pokrene program. Za razliku od shell-a podshell moe da sam mijenja radni direktorij ali nakon izvrenja naredbe shell ostaje u direktoriju u kojem je bio kada je pokrenuo program.

Redirekcija INPUT-a i OUTPUT-a


Redirekcija inputa i outputa je zadatak shella. Shell prvo uradi redirekciju pa onda izvri komandu. Na primjer elimo da neki listing direktorija sauvamo u jednom fajlu radi kasnijeg indeksiranja recimo CD-a punog mp3-jeva: $ ls la > listing.txt Ova komanda e upisati sve fileove u koji se nalaze u aktivnom direktoriju u fajl koji se zove listing.txt. Ali da bi naveli tipian primjer redirekcije odnosno primjer koji dokazuje da se redirekcija izvrava od strane shella je sljedei. Naime ja u sada zadati komandu koja treba da izbroji linije u jednoj tekstualnoj datoteci: $ wc l .bash_history 143 .bash_history $ wc l <.bash_history 143 U prvom primjeru imamo rezultat koji je vratio program za prebrojavanje rijeci u datoteci (opcija l govori programu da prebroji redove) zajedno sa imenom fajla koji je
61/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

trebao da pretrai. Ovdje mu je reeno gdje da trai podatke za obradu. U drugom primjeru shell mu je samo proslijedio podatke za obradu pa stoga program nije ni znao odakle su podaci doli.

Pipeline konekcija
Pipeline je standardni kanal na koji podaci ulaze ili izlaze. Pa je zato konekcija pipelinea vrsta redirekcije inputa i outputa. Pomou ove konekcije na lagan nain je mogue output jednog programa preusmjeriti ka standardnom inputu drugog. Takoer ovakve konekcije su zadatak shella i obrauju se prije samog izvrenja programa: $ ls la | wc l 26 u ovom primjeru program ls ne alje podatke na standardni output nego ih je shell preusmjerio u standardni input programa wc. Krajnji rezultat je broj linija koji je trebao ls da ispie na ekran.

Supstitucija imena fajlova


Uz pomo shell-a mogue je na jednostavan nain koristiti metakaraktere za manipuliranje veom koliinom datoteka. Kao to ste pretpostavljali shell je odgovoran i za supstituciju. Supstitucija se izvrava prije samog izvravanja programa: $ ls file* ova e naredba izlistati sve fajlove u aktivnom direktoriju ija imena poinju sa stringom file.

62/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

Upravljanje varijablama
Shell ima ugraenu mogunost da alocira memoriju u vidu varijabli. Zapravo, mnoge stvari u shellu su rijeene uz pomo varijabli. itavo ureenje interfacea se u shellu moe uraditi pomou varijabli: $ MOJDIR=/home/mozaik je jedan od naina definiranja varijabli, zapravo najee koriteni. Sintaksa je dakle: ime_nestandardne_varijable, znak_jednakosti, sadraj. U gore navedenom sluaju varijabla MOJDIR sadri string /home/mozaik.: $ echo $MOJDIR /home/mozaik karakter $ odmah ispred imena varijable MOJDIR oznaava da se radi o varijabli jer bi u protivnom komanda : $ echo MOJDIR vratila rezultat: MOJDIR Mogua je i supstitucija imena datoteka pomou varijabli tipa: $ ls a $MOJDIR ova komanda bi izlistala sve datoteke iz direktorija /home/mozaik.

63/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

Uslovna supstitucija varijabli


Varijable je mogue definirati uslovno u zavisnosti od toga dali je varijabla definirana ili ne. To se postie upotrebom vitiastih zagrada. Ako: $ echo $MOJDIR ne vrati nikakav rezultat, komanda: $ echo ${MOJDIR:-/home/mozaik} $ /home/mozaik e postaviti vrijednost odnosno nee u koliko je ta vrijednost prije to predefinirana. Ova vrijednost e ali ostati definirana samo na nivou aktivne komande i poslije toga e se izbrisati. Ovo je naravno mogue i uraditi na nain da varijabla ostane definirana dok je mi opet na neki nain ne predefiniramo ili unitimo: $ echo ${MOJDIR:= /home/mozaik} $/home/mozaik I obrnuto ako je varijabla definirana njenu izmjenu moemo izmijeniti: $ echo ${MOJDIR:+ /home/users/mozaik} ali ako varijabla nije predefinirana ostat e takva.

64/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

Uslovna supstitucija varijabli sa provjerom greke


Ako varijabla prethodno nije setovana sljedea komanda e vratiti error: $ echo ${MOJDIR:?} bash: MOJDIR: parameter null or not set Ovdje bi dodao samo jo to da bash podrava i polja varijabli. Polja mogu biti samo jednodimenzionalna. Format polja je IME_VARIJABLE[n] gdje je n neki integer.

$# $$

Sadri broj argumenata proslijeenih aktualnoj naredbi. Sadri process ID aktualnog procesa. Sadri exit status posljednje zavrene naredbe. Programi po svom zavravanju

$?

vraaju nulu (zero) ukoliko je proces uspjeno okonan a ostale vrijednosti (nonzero) ako nije. Ali ne moraju svi programi potovati ova pravila.

$* $n $@

Sadri sve argumente proslijeene programu. Gdje je n neki integer sadri odreen argument po redoslijedu. Tako je $0 sama naredba bez argumenata, $1 prvi argument, $2 drugi, $3 trei, itd Isto to i $*

Standardne varijable su osnova za kontrolu okoline i bash koristi veliki broj standardnih varijabli. Sluajno mijenjanje njihovih vrijednosti dovodi do izmjene radne okoline kako na nivou tako i na nivou sistema pa je zbog toga mogu i pad djela sistema u smislu onesposobljavanja sistemskih bash skripti. Neke od standardnih shell varijabli je nemogue promijeniti premda su one read-only ali sam pokuaj koritenja istih bi dovelo do neeljenih mijenjanja vrijednosti pa je zbog toga na kraju data lista standardnih varijabli bash-a.

65/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

KONTROLA RADNE OKOLINE


Kad login ukljui shell postavljaju se i standardne (ili okolinske enviromental) varijable. Kao to je reeno pomou njih se moe podeavati radna okolina korisnika. Tako, na primjer varijabla PATH sadri listu direktorija u kojima shell automatski trai egzekutabilne fileove, varijabla TERM sadri tip terminala, UID user ID, HOST ime maine, CPU vrstu procesora, USER ime usera, OSTYPE tip OS-a najee linux, itd. Korisnik moe mijenjati ove postavke jednostavno mijenjajui sadraj standardnih varijabli. Ove postavke se pohranjuju u shellove konfiguracione fajlove koji opet mogu biti razliiti u zavisnosti od verzije shella, distribucije unix-a, itd.

Environment varijable
Postoje globalne i lokalne (shell) environment varijable. Globalne se definiraju pri logiranju i kod novih aplikacija, a lokalne se koriste samo u shell-u i ne mogu biti koritene u drugim procesima. Popis svih globalnih environment varijabli dobije se naredbom env ili printenv. Ponitavaju se sa unsetenv (C shell), tj. unset (Bourne shell) naredbom. Primjer: $ printenv _=/usr/bin/printenv MANPATH=/usr/share/man/%L:/usr/share/man:/usr/contrib/man/%L:/usr/contrib/man:/ n PATH=/usr/bin:/usr/ccs/bin:/usr/contrib/bin:/opt/nettladm/bin:/opt/fc/bin:/opt/. NAME=ime COLUMNS=80 EDITOR=vi LOGNAME=andrija MAIL=/var/mail/andrija ERASE=^H SHELL=/usr/bin/sh

66/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

HOME=/home/andrija TERM=vt320 PWD=/home/andrija TZ=MET-1METDST LINES=25

Pojanjenje nekih varijabli:


EDITOR GROUP HOME HOST IFS LOGNAME PATH PS1 PS2 SHELL TERM USER Putanja do defoultnog editora Login grupa Putanja do HOME direktorija Hostname operativnog sistema Interni separator polja, uglavnom white space Login usera Putanja gdje se nalaze naredbe Primarni prompt string Sekundarni prompt string Login shell koji se koristi Tip terminala koji se koristi Ime korisnika

Dodjeljivanje vrijednosti globalnoj varijabli: $ NAME=ime; export NAME Dodjeljivanje vrijednosti lokalnoj varijabli: $ name=ime Trenutna vrijednost varijable: $name ili ${name}

67/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

FUNKCIJE SHELL-A
Primarne funkcije Shell-a su ostvarivanje interakcije korisnika sa jezgrom, a sve u svrhu sigurnosti datoteka na raunalu. Zato je to tako? Naime Jezgra je takoer u neku ruku interpreter odnosno ono prevodi podatke koje dobije od programa procesorske instrukcije razumljive samo raunarskom hardveru. Podatke (instrukcije) koje dobiva kernel su razumljive samo jezgri i bilo bi gotovo nemogue da ovjek ui te instrukcije napamet i da ih onda sam prenosi kernelu. Shell je program koji prevodi zahtjeve za kontrolu sistema kao to su auriranje datoteka na sistemu, administraciju OS-a itd. Od usera se zahtjeva pridravanje odreenih sintaksnih pravila i razumijevanje logike koje se Shell pridrava. Neovisno od vrste Shell-a svi imaju zajednike osnovne funkcije: Interpretacija komandne linije (Command line interpretation) Iniciranje programa (Program Initation) Preusmjeravanje Inputa i Outputa (Input Output redirection) Lanano povezivanje komandi (Pipeline connection ) Supstitucija Imena Datoteka (Substitutions of Filenames) Upravljanje varijablama (Maintenace of Variables) Kontrola radne okoline (Enviroment Control) Programiranje skripti (Shell programming)

68/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

ZAJEDNIKI FEATURES-I SVIM SHELL-OVIMA


Simbol/ comanda Znaenje/akcija

> >> < << | & ; * ? [] () `` "" '' \ $var $$ $0 $n $* # bg break cd continue

Redirekcija na izlaz Dodati u file Redirekcija na ulaz "ovaj" dokument (redirekcija na ulaz) Pipe izlaz. Startanje procesa u pozadini Separator naredbi u istoj liniji Zamijeni bilo koji znak u fajlu Zamijeni jedan znak u fajlu Zamijeni bilo koji znak unutar zadanog intervala Izvri u subshell-u. Substitut izlaza uz naredbu Dio quote (mogu i varijable i komande). Cijela quote Quote slijedee znakove Upotrijebi vrijednost za varijablu Process id. Command name. n-ti argument (0<n<9). Svi argumenti kao jedna rije Poetak komentara Pozadinsko izvravanje Prekid loop izraza Promjena direktorija Nastavak loop programa

69/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

Simbol/ comanda

Znaenje/akcija

echo eval exec fg jobs kill newgrp shift stop suspend time umask unset wait

Prikai na izlazu (npr. ekran) Evaluiraj argument Izvri Foreground izvravanje Prikai aktivne procese Terminiraj proces Promijeni u novu grupu Shift-aj poziciju parametara Suspendiraj proces u pozadini Suspendiraj proces u foreground-u Vrijeme naredbe Postavi dozvole nad fileom Obrii varijablu ili funkciju ekaj dok zavri proces u pozadini

70/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell

KARAKTERISTIKE RAZLIITIH SHELL-OVA


Osobina Kontrola toka Opis Omoguuje kontrolu izvravanja scripti pomou konstrukcija kao sto su petlje uslovne naredbe i sl. Mogunost praenja interrupt i drugih signala koje alje UNIX. U cilju poveanja sigurnosti sistema, nekim Restriktivni shell korisnicima se dodjeljuje shell sa ogranienim mogunostima. Korisniku stoji na raspolaganju mogunost da alias komande preimenuje neke komande ili da vise komande ujedini u jednu. nizovi Mogunost da se vie podataka identificira istim imenom. Mogunost da se komande smjetaju u buffer, kasnije modificiraju i ponovo izvravaju. Mogunost da se u komandnoj liniji automatski dovri ime zapoetog fajla. Mogunost obavljanja aritmetikih operacija nad varijablama u scriptama bez UNIX komandi. Mogunost praenja i pristupa poslovima koji se odvijaju u pozadini. Mogunost da se prethodna ili tekua komandna linija modificira tekst editorom. Ne Da Da Ne Da Da Da Da Ne Bourne Korn C Da Da Da

Praenje signala

Da

Da

Da

historija komandi Kompletiranje imena fajlova Integer aritmetika

Ne

Da

Da

Ne

Da

Da

Ne

Da

Da

Kontrola posla Editovanje komandne linije

Ne

Da

Da

Ne

Da

Ne

71/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Sinia Julijan

SH I BASH

72/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

UVOD
Prva stvar s kojom se korisnici susreu na UNIX/LINUX operativnom sistemu je command shell ili ljuska. Shell je termin za tekstualno okruenje pomou kojega korisnik komunicira sa sistemom koristei se tastaturom (input) i monitorom (output). Korisnik instrukcije sistemu zadaje u vidu znakovnih naredbi. Izvorni UNIX System Shell poznat pod imenima sh ili Bourne shell tokom godina doivio je mnogo nadogradnji tako da danas postoji vie inaica shell-a (csh, tcsh, bash, ksh, psh, zsh) od kojih svaka nudi odreena poboljanja u odnosu na standardni sh shell. Uobiajeni shell u Linux operacijskom sustavu je bash (Bourne Again Shell) i svi daljnji primjeri odnositi e se veinom na bash ili sh shell. Ako niste sigurni koji shell program koristi vaa distribucija, ukucajte sljedee:

echo $SHELL

73/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

POVIJEST SHELLA
Prva vani shell bio je Bourne shell, koji je dobio ime po svom kreatoru Steve Bourneu. Ovaj shell je bio ukljuen u prvu popularnu verziju Unixa, verziju 7 iz 1979. godine. Bourne shell je na sistemu poznat kao sh. Pored svih promjena kroz koje je Unix proao, Bourne shell je jo ostao popularan i gotovo nepromijenjen. Mnogi alati i administracijske funkcije oslanjaju se na ovaj shell. Prvo iroko rasprostranjeno alternativno okruenje bio je C shell ili csh. Ovo je okruenje napisao Bill Joy sa Sveuilita Kalifornije na Berkleyu kao dio Berkley Software distribution (BSD) verzije Unix sistema, koja je izala nekoliko godina poslije verzije 7. Ova ljuska je ukljuena u sve trenutne verzije Unixa. C shell dobio je ime po slinosti naredbi sa C programskim jezikom. Na ovaj nain Unix programeri mogu mnogo lake savladati ovu ljusku. Osim dvije prethodno navedene ljuske popularnom je postala i Korn ljuska. Ta je ljuska komercijalni produkt koji ujedinjuje najbolje karakteristike Bourne i C ljuski uz jo mnoge mogunosti.

74/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

BOURNE AGAIN SHELL


Bourne Again Shell dobio je ime po Steve Bourne-ovom shell-u i kreiran je za koritenje u GNU projektu. GNU projekt je zapoet od strane Richarda Stallmana, iz Free Software Fondation (FSF) sa ciljem stvaranja Unix kompatibilnog sistema i zamjene svih komercijalnih Unix programa sa slobodno distribuiranim programima. Na ovaj nain nismo samo dobili besplatne programe ve i novi koncept, tzv. copyleft. Copyleft je zapravo licenca, a programi koji su napravljeni pod tom licencom mogu biti slobodno distribuirani. Bash ljuska je bila razvijena kako bi postala standardna ljuska na GNU sistemu i prvi put je objavljena u Nedjelju 10. Sijenja l988. godine. Brian Fox je napisao originalnu verziju i nastavio rad u sljedeoj dekadi. U ranoj l989. godini pridruio mu se i Chet Ramey, koji je ovoj ljusci dao velik doprinos u rjeavanju mnogih greki te dodavanjem mnogih opcija. Chet Ramey je kasnije zamijenio Briana Foxa i postao voa projekta. Pratei GNU principe, sve verzije bash-a poslije 0.99 su slobodno dostupne iz FSF. Danas je bash standardni shell na Linuxu a besplatna verzija je iroko koritena na Unix operativnim sistemima.

75/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

OPENITO O UNIXU
Osnovni principi u Unixu: Portabilan napisan u C programskom jeziku Dostupan za iroki spektar raunala od malih desktop raunala do velikih superraunala Vrlo dobar i pouzdan operativni sustav Programsko okruje je vrlo bogato i produktivno Filozofija iza Unix sistema Programi sa jednostavnim input/output sueljem Programi su kreirani kao mali nezavisni moduli Vrlo velika mogunost kombiniranja vie programa izlaz jednog programa postaje ulaz drugog (pipe). Programi su pisani u C(C++) programskom jeziku kao i sam operacijski sustav i vrlo su dobro integrirani u sustav. Sve u Unix sustavu je datoteka - B.W. Kernighan Tipovi datoteka: obine datoteke tekst, programi.... direktoriji su takoer datoteke i to takve koje sadre imena datoteka koje posjeduju specijalne datoteke devices, pipes (da i ureaji su datoteke, pipe-ove emo spomenuti kasnije) Unix ima monorootnu (samo jedan root) strukturu file sustava (za razliku od MSDOS, Windows gdje ima vie root-ova npr. C:\, D:\ itd).

76/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Standardna struktura direktorija na Unix sustavima:

77/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

UNIX FILE SYSTEM


Ovdje u nabrojati neke od vanijih direktorija te njihov sadraj: /bin /dev /dev/null /dev/tty /lib /include /home /usr /usr/bin /usr/bin/openwin /usr/lib /usr/include /usr/local /tmp /sbin lokalne host datoteke temp direktorij administratorski alati binarni podaci (programi - komande) ureaji (devices) nul-device terminal ureaji lib datoteke include header datoteke korisniki home direktoriji korisnike datoteke korisnike binarne datoteke (programi) X windows datoteke korisnike lib datoteke

Path (staza, put do odreene datoteke na Unix sustavu)


Apsolutni /dir1/dir2/dir3 gleda se od root-a

78/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Relativni ../ ~/

dir1/dir2/

gleda se od sadanjeg direktorija nadreeni direktorij (parent) ~user

home direktorij user-ov home direktorij

Nekoliko naredbi za prikaz i manipulaciju datotekama

ls [options] [dir dir ...] opcije a l F R .... pwd cd[dir] df du mkdir dir rm file....

daje listu datoteka u direktoriju

ispisuje radni direktorij mijenja radni direktorij trai disk ispisuje iskoritenost prostora na disku stvara novi direktorij brie file ili ak cijelo stablo direktorija

cp file1 file2..... target kopira datoteke mv file1 file2..... target cat [file1 file2...] more file1 file2.... file file... tail file ... premjeta datoteke prikaz datoteka prikaz datoteka stranu po stranu doznaje tip datoteke prikazuje zadnji dio datoteke

79/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Kada radite na Unix sustavu niste preputeni sami sebi. Za svaku naredbu postoje help stranice tzv. man pages, koje objanjavaju kako radi program, sintaksa ... imena autora, e-mail adresa za prijavu eventualnih greaka u programu podaci o copyright-u ili bolje copyleft-u te man stranice vezane uz trenutnu, koje bi moda trebali proitati.

Openito
man k keyword - daje listu man stranica u ukljuujui i kljune rijei

A kako bismo potraili vie informacija o samoj man naredbi? Jednostavno: man man

Ovo je primjer prikaza na ekranu nakon upisa naredbe: man ls da biste mogli pregledati stranu po stranu : man ls | more

80/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

LS(1)

FSF

LS(1)

NAME
ls - list directory contents

SYNOPSIS
ls [OPTION]... [FILE]...

DESCRIPTION
List information about the FILEs (the current directory by default). Sort entries alphabetically if none of cftuSUX nor --sort. -a, --all do not hide entries starting with .

*********** i jo puuuno opcija ************

AUTHOR
Written by Richard Stallman and David MacKenzie.

REPORTING BUGS
Report bugs to <bug-fileutils@gnu.org>.

COPYRIGHT
Copyright (C) 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

SEE ALSO
The full documentation for ls is maintained as a Texinfo manual. If the info and ls programs are properly installed at your site, the command info ls should give you access to the complete manual. ls (fileutils) 4.1 March 2002 LS(1)

81/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

UNIX TEXT EDITORI


vi standardni Unix editor (staromodan) emacs i xemacs GNU (free software) editor i njegova X windows verzija jed mala emacs varijanta textedit openwin editor dtpad CDE text editor to se rada u shelu tie najkoriteniji su vi i emacs. * (vie o njima proitajte u seminarima kolega Mario Strini vi te Matko Peji emacs)

82/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

UNIX SHELL
Shell ili ljuska je korisniki program kojemu je osnovna namjena olakati interakciju korisnika i sustava. To je zapravo naredbeni interpreter koji izvrava naredbe koje korisnik unosi pomou tipkovnice. Shell nije dio UNIX/LINUX jezgre, ali ju koristi za pokretanje programa, kreiranje datoteka itd. Osim to je naredbeni interpreter, shell se koristi i kao skriptni jezik za pisanje shell skripata, koje automatiziraju odreene korisnike radnje. Ako povuemo paralelu s MSDOS operacijskim sustavom shell moemo usporediti s COMMAND.COM programom, a shell skripte su sline .bat datotekama. Mogunosti koje prua shell: podeavanje okruja pisanje shell skripti command history (pamti uneene naredbe tokom sessiona) command aliases (definiranje novog imena za postojeu komandu) command editing Shell je samo program i s obzirom na to postoje vie razliitih verzija: Bourne shell (sh) dostupan na svim Unix sustavima C shell (csh) shell sa C sintaksom TC shell (tcsh) ukratko kao C shell sa emacs stilom command editing-a Korn Shell (ksh) novi shell standard, unaprijeeni Bourne shell emacs ili vi stil command editing-a Bourne Afain Shell (bash) spoj C i Korn shell kompatibilan sa Bourne shell-om Defaultni shell specificiran je u /etc/passwd datoteci. Kao to sam spomenuo na poetku, ako elite saznati u kojem shell-u radite utipkajte:

echo $SHELL

83/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Razni shell-ovi se pozivaju razliitim naredbama (naravno, ako su instalirani): sh, bash, ch, tcsh... exit - naputa pokrenuti shell

Promjenu defaultnog login shell-a radimo sa naredbom (npr. u bash) chsh /bin/bash

Usporedbu, to moe koji shell moemo vidjeti ovdje:

84/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

UPOTREBA SHELL NAREDBI


Opi model: command [options] [arguments] wc l file koritenje vie opcija: koritenje vie argumenata: Koritenje regularnih izraza: ? * zamjenjuje jedan znak (character) zamjenjuje nula ili vie znakova ls aF cat file1 file2 file3

[nnn] zamjenjuje bilo koji od znakova u uglatim zagradama [!nnn] zamjenjuje sve znakove osim onih u uglatim zagradama [n-m] zamjenjuje bilo koji znak u zadanom rasponu Primjer: ls [fF]ile[0-3] mogui ispisi: File0 file0 File1 file1 File2 file2

*(Vie o regularni izrazima s primjerima moete proitati u seminaru Regular expresions kolega Manuela Vidonisa i Zorana Zoriia)

85/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

OSTALI SPECIJALNI ZNAKOVI KOJE SHELL INTERPRETIRA


;&()|\^~%{}$#'@*?[]!<Return><Space><Tab> Evo nekoliko primjera: # komentira karakter ; ponavljanje vie komandi u jednoj liniji cd .. ; pwd 'command' expandira komandu npr.:

echo Radni direktorij je 'pwd' ispisuje Radni direktorij je /home/user Kako koristiti specijalne znakove? \ prima slijedei znak kakav je, bez interpretiranja

'.........' prima cijeli izraz bez interpretiranja .... Primjer: echo \\ ispisuje expandira samo znakove $ ' !

86/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

\ echo \' '\ /$&' \' ispisuje ' \ /$& '

87/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

PREUSMJERAVANJE STANDARDNOG ULAZA I IZLAZA (REDIRECTING)

Mnoge komande u Unix shell-u uzimaju ulaz sa standardnog ulaza (tipkovnica) i alju podatke na standardni izlaz (monitor). Primjer: sort 1 3 2 ^D(EOF- End Of File) 1 2 3 Preusmjeravanje standardnog izlaza: cat a.txt b.txt prikazuje datoteke a.txt i b.txt na standardnom izlazu cat a.txt b.txt > c.txt preusmjerava standardni izlaz u datoteku c.txt cat c.txt >> d.txt preusmjerava standardni izlaz i dodaje na kraj datoteke d.txt

Preusmjeravanje standardnog ulaza: mail user <pismo.txt

88/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

POVEZIVANJE (ULANAVANJE) KOMANDI (PIPING)


Kada bismo npr. eljeli saznati broj datoteka u direktoriju morati bismo napisati otprilike slijedee: ls > lista ; wc < lista dakle prvo bismo ispis komande ls spremili u datoteku lista, a potom bismo istu datoteku stavili na standardni ulaz naredbe wc. Umjesto kreiranja datoteke lista mogli bismo standardni izlaz komande ls direktno spojiti na standardni ulaz komande wc. Tu nam pomae mehanizam pipe-ove (cjevovoda). ls | wc kao da smo pomou cijevi povezali izlaz ls sa ulazom wc komande. Moemo koristiti i vie pipe-ova kako bismo povezali (ulanali) vie komandi ls dir1 dir2 dir 3 | sort | lp Ovim nizom naredbi smo prvo dobili sadraj direktorija dir1, dir2, i dir3, koji smo poslali naredbi sort (na sortiranje), a potom poslali na ispis na printer. Vie o pipe-ovima moete proitati u seminaru kolege Gorana Juriia Pipe i fifo. Komandni alias-i ili kako definirati vlastitu komandu U razliitim shell-ovima se razliito zadaju. Openito alias ime definicija (csh, tcsh) alias ime=definicija (sh, ksh, bash)

89/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Primjer: alias ll=ls l alias l=ls -F alias rm=rm -i alias unalias ime prikaz svih aliasa brie alias

90/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

COMMAND HISTORY I COMMAND EDITING

Openito, tcsh i bash shell-ovi su pogodniji za command editing od csh shell-a sh(Bourne shell) nema command editing.

Procesi
Svaka komanda pozove program i pokree ga. Za vrijeme dok je on pokrenut, zovemo ga proces. Unix je multitasking Sustav, to znai da moe pokretati vie procesa istovremeno. Ako neki proces pokrene potproces, onda njega nazivamo roditeljski (parent) proces, a proces kojeg je on pokrenuo dijete (child) proces. Sukladno tome imamo PPID (parent proces ID) i PID. Kako da vidimo te procese? ps prikazuje trenutne procese

91/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Podaci o procesima: PID TT STAT TIME proces ID jedinstveni cijeli broj procesu pridruen terminal status procesa R runnable, T stopped, I idle, W swapped out, ... vrijeme procesora koje je koristio proces

COMMAND ime komande koja je pokrenula proces Osim na normalan nain, proces se moe izvravati i u pozadini: foreground i background

Zamislite da ste zadali Unix sustavu procesorski zahtjevan i dugotrajan posao. Za vrijeme procesiranja shell je zauzet (nema prompta dok se proces ne zavri) i vi ne moete dalje raditi na raunalu. Da bi se izbjegle takve situacije, takvi procesi se stavljaju da rade u pozadini, dok vi dalje nastavljate svoj rad normalno. Kako se proces stavlja u pozadinu ? Openito: command & [1] 276 Komanda je zapoela izvravanje, ID procesa je vraen i shell je spreman primiti novu komandu.

92/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Suspendiranje foreground procesa proces ulazi u stanje stopped : ^Z [stopped] Stavljanje procesa zapoetog u foregroundu u background: ^Z bg Stavljanje background procesa u foreground: fg [process -id] Ubijanje procesa: kill [-9] process id ...

93/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

ENVIROMENT I SHELL VARIJABLE


Standardne Unix varijable se dijele u dvije kategorije, enviroment i shell varijable. Shell varijable se odnose sa na momentalnu instancu shell-a pa su stoga i kratkoga vijeka. Enviroment varijable imaju veu vanost, jer traju koliko i radni session, a bivaju postavljene nakon logina. One se konvencionalno piu velikim slovima, dok se shell varijable piu malim slovima. Korisnici mogu kreirati vlastite varijable kako bi podesili svoje radno okruenje (enviroment), ali se bitno izbjegavati podudaranje sa imenima standardnih varijabli. Radno okruenje je definirano setom enviroment varijabli. Evo popisa najvanijih enviroment varijabli: Ime varijable HOME npr. /student/ivica LOGNAME korisniko ime (npr. ivica) kojim se prijavljuje MAIL PATH SHELL TERM TZ za e-mail popis apstraktnih imena direktorija koje sustav /bin pretrauje da bi naao i izvrio naredbe apsolutno ime shell-a koju treba startati kao login shell (npr. /bin/bash) zadaje tip terminala na kojem korisnik radi zadaje vremensku zonu i razliku od Greenwich Mean time /usr/bin ivica apsolutno ime direktorija gdje se nalazi inbox /usr/mail/ivica

Opis apsolutno ime korisnikovog home-direktorija

Uobiajena vrijednost ita se iz etc/passwd

94/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Kada elimo vidjeti stanje neke varijabli piemo: echo $ime_varijable Primjer: echo $PATH .:/user/openwin/bin:/user/local/bin:/user/bin Postavljanje enviroment varijabli na neku vrijednost (razliito u raznim shell-ovima): setenv name value export name=value Primjer: setenv EDITOR emacs export EDITOR=emacs - csh i tcsh - sh i bash -csh i tcsh - sh i bash

Postavke varijabli mogu se spremiti u datoteke .login ili u alternativnu .*shrc (.shrc, .bshrc, .cshrc, .tcshrc) datoteku te se kasnije mogu referirati na ve prikazan nain. Openito enviroment i shell varijable, koje imaju isto ime, su razliite i neovisne, osim to moda imaju jednake inicijalne vrijednosti. Ipak postoje iznimke: Svaki put kada shell varijable home, user i term promjene vrijednost dotine enviroment varijable HOME, USER i TERM poprimaju iste vrijednosti. Obrnuti proces nema efekta. path i PATH specificiraju direktorije u kojima se nalaze komande. Obje varijable predstavljaju istu listu direktorija i kojeg god da promijenimo, promijenit e se vrijednost onog drugog.

95/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Shell varijable su sline enviroment varijablama, ali se za razliku od njih ne prenose iz child procesa. Definiranje shell varijabli ( takoer razliito u raznim shell-ovima): set name=value set name=(value1 value2 value3) name=value (sh, bash) (csh, tcsh)

argv cwd home path shell status term

vrlo su vani shell programerima (komandni argumenti) trenutni radni direktorij Staza do home direktorija (ime home direktorija) lista direktorija koji sadravaju komandne programe Va login shell kod koji pokazuje stupanj uspjenosti prijanjih komandi tip terminala koji koristite

prompt tekst string koji se prikazuje prije unosa komandi (prompt)

Primjer podeavanje prompta: prompt="$cwd \> " /home/user > Kao prompt prikazat e se trenutni direktorij moe smanjiti koritenje pwd komande, a moe ga se postaviti na bilo koji drugi tekst prompt="Bok $LOGNAME, kaj ima novo \>" Bok Janica, kaj ima novo > - ako Janica koristi Unix

96/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Ekspandiranje varijabli
echo $PATH PATH=/usr/local/bin:/usr/bin:/usr/openwin/bin PATH=.:$PATH:$HOME/bin echo $PATH PATH=.:/usr/local/bin:/usr/bin:/usr/openwin/bin:/home/user/bin * user oznaava bilo kojeg usera Primijetite kako smo definirali novu vrijednost varijable PATH. Nova vrijednost varijable PATH je '.:' plus stara vrijednost varijable PATH plus ':' plus vrijednost varijable HOME plus '/bin', gdje se plus koristi kao znak za konkatenaciju. Varijable u kombinaciji sa ostalim tekstom moraju se odvojiti vitiastim zagradama: datoteka=${LOGNAME}_datoteka

97/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

VANE SISTEMSKE DATOTEKE


Svakom korisniku Unix sustava dodijeljen je set datoteka koji podeavaju standardno radno okruenje. Od tih najvanije su .shrc (.profile) (sh) ili .bshrc(bash), .login i .logout. Gdje se nalaze?

Dobar nain podeavanja vaeg okruja je da uvijek dodajete nove komande. Osim ako stvarno znate to radite nemojte nikada potpuno zamijeniti njihov sadraj. S obzirom da se .login ita samo jedanput tokom jednog session-a, njegov smisao je da postavi uvjete koji e vaiti za cijeli session te da odradi akcije bitne samo prilikom login-a. .shrc ili .bshrc se koriste za postavljanje uvjeta i odraivanje akcija prigodne za shell i njegove instance. to gdje staviti? (openito) .shrc ili .bshrc sve definicije shell varijabli, osim path varijable bolje je koristiti export PATH (enviroment varijabla) alias komande umask komandu ostale komande koje trebaju biti izvrene za svaku instancu shell-a .login export komande (ukljuujui gore navedenu PATH) kommande koje treba izvriti samo jednom (prilikom logina) npr. stty, mesg,limit komande koje generiraju output

98/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Nakon to napravite izmjene u datotekama nee se vidjeti njihov efekt do slijedeeg logina. Promjene u .shrc ili .bshrc moete provesti i ranije: % source .cshrc

grep nai string


Sintaksa: grep [-bchilnsvw] [-e izraz] [ime_datoteke....] ita datoteke ili standardni ulaz trai specificirani izraz (patern) u svakoj liniji alje rezultate na standardni izlaz Primjeri: grep user /etc/passwd find .-print | grep Unix - trai string user u datoteci /etc/passwd - trai sve datoteke koje sadre string Unix

find .-print | grep '^Unix' - trai sve datoteke koje zapoinju sa Unix grep v Unix datoteka Neke korisne opcije: -C -h -l -v -x broji linije ne prikazuj ime datoteke izlistaj samo datoteke koje sadravaju linije sa zadanim uvjetom prikai linije koje ne zadovoljavaju uvjet prikai one linije koje u potpunosti zadovoljavaju uvjet - prikai sve linije koje ne match-aju Unix

99/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Regularni izrazi za grep: c \c ^ $ [....] [^....] . r* r+ bilo koji ne specijalni znak iskljui svako specijalno interpretiranje znaka c poetak linije kraj linije bilo koji znak u rasponu bilo koji znak van raspona bilo koji znak nula ili vie ponavljanja r jedno ili vie ponavljanja r

100/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

AWK PROGRAMSKI JEZIK


AWK autori Aho, Weinberger i Kernighan awk je programski jezik pogodan za manipuliranje textom i za kreaciju izvjetaja Verzije: awk originalna verzija nawk (new awk) poboljani awk-a qawk gnu awk poboljani nawk dostupan je na Unix sustavima, a postoji i verzija za DOS Primjer: cat adresar.txt John Doe 021-336699 Jane Doe 021-332211 John Smith 021-112233 awk {print "Ime: ",$1,$2," adresar.txt Ime: John Doe Ime: Jane Doe Ime: John Smith Telefon: 021-336699 Telefon: 021-332211 Telefon: 021-112233 Telefon: ",$3}

*(vie o awk-u moete proitati u seminaru kolege Branimira ivkovia awk i sed).

101/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

PROGRAMIRANJE U SHELL-U
Kao to moete pokretati komande u shell-u tako moete koristiti njegov ugraeni programski jezik za pisanje vlastitih komandi i programa. Kreiranje i pokretanje shell skripte: Iskoristite neki od tekst editora da biste kreirali skriptu: emacs ime_datoteke vi ime_datoteke Kad ste zavrili sa radom u editoru dodajte dozvolu za izvravanje: chmod u=rwx ime_datoteke chmod +x ime_datoteke Pokrenite skriptu: ./ime_datoteke Prva linija u skripti mora definirati shell: #!/bin/sh #!/bin/csh #!/bin/tcsh #!/bin/bash C shell TC-shell BASH shell Bourne shell ili ili

102/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Primjer 1:

#!/bin/bash # Ova skripta daje prikaz datuma, vremena, # username-a, trenutnog radnog direktorija echo Datum i vrijeme: date echo echo Vase korisnicko ime je: $(whoami) \n echo Trenutno se nalazite u \c pwd Izlaz: Datum i vrijeme: Sun Feb 15 23:35 Vase korisnicko ime je: user Trenutno se nalazite u: /home/user Specijalne shell varijable: $1-$9 $0 $# $? $$ $! $* $@ - argumenti - ime komande - broj argumenata - exit status zadnje pokrenute komande - PID trenutne instance shell-a - PID zadnje komande pokrenute u pozadini - string koji sadrava sve argumente - isto kao igore, osim kada je pod navodnicima

103/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Komanda shift pomie argumente - $n+1 postaje $n Primjer: demo_shift skripta: echo "arg1=$1 arg2=$2 arg3=$3" shift echo "arg1=$1 arg2=$2 arg3=$3" $ demo_shift jedan dva tri cetiri arg1=jedan arg2=dva arg3=tri arg1=dva arg2=tri arg3=cetiri Evaluiranje shell varijabli Definicija Opis

$var $(var) $(var-nesto) nesto. $(var=nesto) nesto.

Expandira vrijednost varijable var isto osim to zagrade zatvaraju ime varijabli koja e biti zamijenjena ako je definirana, vrijednost od var; inae nesto i $var nije setirana na

ako je definirana, vrijednost od var; inae nesto i $var je setirana na

$(var?poruka) ako je definirana, vrijednost od var, inae ispii poruku i izai iz shella. Ako je poruka prazna ispii standardnu poruku. $(var+nesto) Ako je definirana var, vrijednost od nesto, inae nita

104/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Za itanje korisnikog unosa koristimo komandu read. echo "Unesite svoje ime" read ime echo "Dobro dosli na labos $ime" if then else fi if [uvjet] then razne_komande # if uvjet je zadovoljen (true) else razne_komande # if uvjet nije zadovoljen (false) fi if....... then.... elif.... ...... fi Primjer (provjera je li traeni korisnik logiran): user=$1 then echo "$user je logiran" else echo "$user nije logiran" fi # ulazni parametar

if who | grep s $user > /dev/null

105/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

Komanda test testiranje za datoteke i varijable if [! f $FILE] then if test "$WARN"= "yes" then echo "$FILE ne postoji" fi fi Test uvjeti: -e datoteka -d datoteka -f datoteka -L datoteka -r[wx] datoteka -z string -n string str1=str2 str1!=str2 n1 eq n2 istina ako datoteka postoji istina ako je datoteka direktorij istina ako je datoteka obina datoteka istina ako je datoteka simboliki link istina ako datoteka ima dozvolu za itanje [pisanje, pokretanje] istina ako je string nul-string istina ako string nije null-string istina ako su str1 i str2 isti istina ako su str1 i str2 razliiti istina ako su brojevi n1 i n2 jednaki (ostale kljune rijei: -ge, -gt,-le, -lt, -ne) case case word in pattern1) command(s) ;; pattern2) command(s) ;;

106/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

patternN) comand(s) ;; esac for do done for var in listofwords do commands done Primjer #!/bin/bash # usporeuje datoteke iz dva direktorija # unesi cmpfile dir1 dir2 dir1=$1 dir2=$2 for i in $(ls $dir1) do echo $i: cmp $dir1/$i $dir2/$i echo done

while do done & until do done while command_list1 do command_list2 done

107/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

until command_list1 do command_list2 done

108/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

KREIRANJE NOVIH PROCESA


exec starog procesa prepisuje se novi fork procesu Kao najei primjer za exec i fork uzima se slijedee: kreiranje novog procesa fork vraa status 0 child procesu i ostale vrijednosti parent pokretanje novog programa u istom procesu preko memorijskog prostora

109/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sh i bash

to se to zbilo?
nakon uspjenog logina exec-a se shell (login proces umire std(in,out i err) su prespojeni na shell) Happy Unix user unosi komandu ls fork-a se shell, novoj instanci shell-a dodjeljuju standardni streamovi, parent shell ivi i eka da se child process zavri u toj novoj instanci shell-a se exec-a ls koji preuzme streamove obavi svoje i umre streamovi se otvaraju prvotnom shell-u, koji oekuje novu komandu Happy Unix user is even more happy

110/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Marijana Ladan-Pelivanovi

C SHELL, T C-SHELL

111/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

UVOD
Shell kao korisniko okruenje ima ogromne mogunosti. Dostupne su velike skupine programa, od tekstualnih procesora, programa za komunikaciju, administraciju sistema pa do raznih programskih alata. Prvo iroko rasprostranjeno alternativno okruenje UNIX sistema bio je C shell. Nastao je na Berkeley sveuilitu u Kaliforniji a razvio ga je Bill Joy kao dio Berkley Software Distribution (BSD) verzije UNIX sistema, koja je izala nekoliko godina poslije verzije 7 (1979). Inae C shell je dobio ime po slinosti naredbi sa C programskim jezikom. Oni programeri koji koriste C ili C++ najee programiraju u C-shellu. Kao i KornShell i C shell je produetak sh shell-a. Tenex-C shell je poboljana verzija C shell-a. Izvrni program C shell-a nalazi se u datoteci /bin/csh.

112/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

START-UP FAJLOVI C SHELL-A


Start-up datoteke C shell-a su .cshrc i .login. Datoteke .login i .cshrc izvravaju se u toku login procedure, znai prilikom svakog pokretanja shell-a. Nalaze se u HOME direktoriju korisnika. Prva se izvrava iz login programa koji obavlja autorizaciju korisnika. Kada je autorizacija uspjeno zavrena sam login program starta shell korisnika. Slino kao login, shell izvrava svoju start-up datoteku. Ove start-up datoteke slue za inicijalno automatsko izvravanje odreenih naredbi, definiranje aliasa, varijabli radne okoline i sl. Razlika izmeu .login i .cshrc datoteke je ta to se .login izvrava prva i to prije startanja shell-a, ali to obino nije znaajno. Korisniku se preporuuje dodavanje svojih definicija u .cshrc datoteku. Komande set i setenv koristimo za inicijalizaciju varijabli, set se koristi za shell a setenv jo i za bilo koju podljusku. C shell koristi simbol ~ za oznaavanje direktorija u path-u, npr. ~/.cshrc ili za specifikaciju drugih korisnikih login direktorija npr. ~username/.cshrc. Primjer .cshrc datoteke: # ! /bin/csh # Sample .cshrc file setenv EXINIT 'set smd sw=4 wm=2' set history=50 set savhist=50 set ignoreeof noclobber if ($?prompt) then set prompt='[\!] % ' alias f finger -R alias lo logout endif

113/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Primjer .login datoteke #!/bin/csh # Sample .login file stty erase ^H intr ^C susp ^Z echo "Welcome to Wiliki\!" frm -s n Primjer .logout datoteke #!/bin/csh # Sample .logout file echo -n "Logged out of Wiliki " dat

Komandne linije C shell-a


Shell naredbe su linije sastavljene od jedne ili vie rijei, koje su odvojene razmakom ili TABom. Prva rije u liniji je naredba. Ostatak (ako ih ima) su argumenti (parametri) datoj naredbi, a predstavljaju imena objekata na koje e naredba djelovati. command options arg1 arg2 ... < Enter > Opcije obino poinju crticom (-). Primjer -ls naredbe za listanje sadraja direktorija: -ls -ls -a -l

114/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Postavljanje prompta
Kod t (csh) prompt moemo postaviti tako da u naoj .cshrc datoteci postavimo slijedeu liniju set prompt=" % m % / % " Ovim nainom, svaki put kada pritisnemo return, prompt e nam rei gdje se nalazimo bez da prvo mijenjamo direktorij.

Leksika struktura
Shell dijeli ulazne linije u rijei, prazna mjesta i tabove. Specijalni karakteri kao '&', '|', ';', '<','>', '&&', '||', '<<', '>>' su uvijek odvojene rijei, bile one ili ne okruene praznim mjestima (whitespace). Specijalni karakteri ukljuujui i prazan space i tab mogu imati drugo znaenje i biti dio druge rijei, ukoliko se nalaze ispred backslash '\' ili jednostukog " ili dvostrukog "" navoda.

Nastavljanje i razdvajanje naredbi


Razdvajanje naredbi. Primjer: % ls -l; rm *.* <Enter>

Nastavljanje naredbe u vie redova. Primjer: \ % cat *.* \ <Enter> grep "srce" | \ <Enter> more <Enter>

115/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Aliasi
Prilikom rada na UNIX-u esto se susreemo sa naredbama koje imaju komplicirane nazive. Ponekad naredbe koje esto koristimo sadre mnogo opcija i argumenata koji se moraju navesti. Tada se koristimo aliasima. Pomou aliasa dugake naredbe tj. naredbe s puno argumenata i opcija moemo skratiti ili im dati druga jednostavnija imena. Aliasi se mogu definirati u naredbenoj liniji ili .cshrc datoteci koristei formu: alias novoime=naredba Znai novoime je alias za naredbu po imenu naredba.

Varijable
Za vrijeme rada shell pohranjuje tzv. shell varijable. Varijable u C shellu su definirane koritenjem interne set naredbe. C shell podrava varijable okoline (environment varijable) i varijable same ljuske. Varijable okoline programa definiramo sa: setenv ime vrijednosti Varijable same ljuske se postavljaju sa: set ime=vrijednost Neke od najee koritenih varijabli: logname, home, path, mail, term automatski se ukljuuju i u okolinu nakon ove naredbe, pa za njih nije potrebno upotrebljavati setenv. Prilikom ukljuenja u okolinu, imena ovih varijabli se piu velikim slovima npr. PATH.

116/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Setenv izlistava okolinu koja se predaje programima, dok set daje popis svih varijabli koje poznaje sama ljuska. Varijable u C shell-u moemo koristiti pisanjem znaka $ prije imena varijable. Ili ako su varijable napisane kao varijable stringova onda koristimo zagrade. Postojanje varijabli provjeravamo upisivanjem $?variable

Primjeri: set var = (srce.c srce.o) echo "Type yes or no?" set yes_no=($<) set i=15 setj=20 echo$k

117/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Najznaajnije predefinirane i ugraene shell varijable


argv cwd home ignoreeof argumenti iz komandne linije trenutni direktorij HOME direktorij Ako je setovana, shell e ignorirati <Ctrl> D sa terminala. Sprjeava se neeljeni logout Lista datoteka gdje shell provjerava da li je pristigla pota. Ako je prva mail rije u mail broj onda je to interval na koliko se provjerava pristizanje pote. noclobber path Ako je setovana nije dozvoljeno prepisivanje datoteka redirekcijom lista direktorija gdje shell trai naredbe

String koji se pojavljuje na terminalu kada je shell spreman da primi prompt narednu naredbu. ! se zamjenjuje rednim brojem komandne linije. Obino se postavlja na slijedeu vrijednost: set prompt= "hostname'\!%" user term shell korisniko ime, startamo sa $USER tip terminala koji koristimo, startamo sa $TERM Puno ime trenutnog shell-a, startamo sa $SHELL

118/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Povijest naredbi
Povijest naredbi je mogunost smjetanja naredbi u bafer, njihovo kasnije modificiranje i ponovno izvravanje. Znai shell pamti prethodno unesenu naredbu i omoguava da se ista ponovno pozove. Po izlasku iz shell-a, lista se upisuje u ~/.history i tako biva zapamena izmeu dva login procesa. Sa history i savehist varijablama mogue je postaviti broj prethodno izvrenih naredbi koje e biti opet pozvane. Primjer spremanja 100 zadnjih naredbi u shellu i 50 zadnjih naredbi u .cshrc koje e biti pozvane sljedeim loginom. set history=100 savehist=50 Prethodne naredbe mogue je pozvati i koritenjem ugraenih history varijabli. History substitution

!!

Prethodna naredba. Primjer: % !! < Enter> Izvrava ponovno prethodnu naredbu.

!n !-n !string

Naredbena linija broj n. Broj n se moe otkriti sa history Naredbena linija sa brojem za n manji od trenutnog Zadnja naredbena linija koja poinje stringom. Primjer: % c proba.c pr.c obj. o -o proba -lm ... % !c

!?string?

Zadnja naredbena linija koja sadri string.

!n*

Svi argumenti n-te naredbene linije. Ako se ne zada n podrazumijeva se prethodna linija. Primjer:

119/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

% c proba.o pr.o obj.o -o proba !n^ !n$ !i:j ^str1^str2 !n:s/str1/str2/ Prvi argument n-te naredbene linije Zadnji argument n-te naredbene linije j-ti argument i-te naredbene linije U zadnjoj naredbi zamijeni str1 sa str2 U n-toj komandnoj liniji zamijeni str1 sa str2.

Kontrola poslova (Job control)


Kontrola poslova je mogunost praenja i pristupa poslovima koji se odvijaju u pozadini.

&

Izvravanje naredbe u pozadini (background). Primjer: % du > zauzeto &

<Ctrl>Z bg [%job]

Privremeno zaustavljanje procesa Naredba za prebacivanje procesa u pozadinu. Ako nema argumenata prebacuje se trenutni posao (zadnje prekinuti). Primjer: % infinite < Ctrl > Z % bg

fg [%job]

Naredba za prebacivanje procesa iz pozadine u radni (foreground). Primjer: % infinite & % fg % infinite

stop [%job]

Prekida proces koji se izvrava u pozadini. Primjer: % stop % infinite

<Ctrl> C

Prekidanje trenutnog procesa.

120/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Praenje Signala
U C shell-u jedino to moemo napraviti sa signalima je hvatanje signala SIGNIT

Pozivanje funkcije
Funkcije u shell script-ovima kao i u viim programskim jezicima predstavljaju osnovno sredstvo modularizacije programa. Postoje dva naina definiranja funkcija: function ime { naredbe } ili ime ( ) { naredbe } Funkcije se pozivaju jednostavnim navoenjem imena i argumenata iza imena ukoliko takvi postoje. Primjer pozivanja funkcije main: Prototip prema kojem se poziva funkcija main svakog programa u UNIX-u je: int main(int argc, char *argv[], char *envp[]); argc je broj argumenata navedenih kod poziva programa, a argv je niz od argc pokazivaa na te argumente kao nizove znakova. Prvi od tih nizova je ime samog pozvanog programa. envp je niz pokazivaa na nizove znakova oblika "ime=vrijednost" koji ine okolinu. Posljednji pokaziva je NULL.

121/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Takoer, program koji ne koristi nikakve ulazne parametre moe definirati main kao: int main(void) { ... } main treba vratiti cjelobrojnu vrijednost jer poziv moemo pojednostavljeno zamisliti kao: exit(main(argc, argv, envp)); Ako program zavrava pozivom exit na nekom mjestu, onda ne dolazi do povratka iz main. Meutim, ako main normalno zavrava, onda je potrebna povratna vrijednost koja e postati argument poziva exit.

Standardni ulaz i izlaz


Velika snaga UNIX-a je u preusmjeravanju ulaza i izlaza naredbi u datoteke (time i na sve vanjske jedinice), kao i meusobno spajanje ulaza i izlaza vie naredbi. Svaka naredba ima: standardni ulaz u program (stdin, tastatura,0) standardni izlaz iz programa (stdout, monitor,1) standardni izlaz za greke iz programa (stderr, monitor,2)

122/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Redirekcija
Mehanizam redirekcije omoguava kombiniranje osnovnih naredbi (npr. cat, grep, sort, cut,tr) u cilju obavljanja sloenih operacija. Osnovni tipovi redirekcije (preusmjeravanja): Preusmjeravanje izlaza naredbi za rezultate (stdout): > date > now Dodavanje na kraj postojee datoteke >> ps -ef >> proba Preusmjeravanje izlaza naredbi za pogreke (stderr): >& ls abc>& er2 upisuje u stvorenu datoteku >>& dodavanje na kraj postojee datoteke ls abc >>& er1 Preusmjeravanje ulaza naredbi (stdin): < cat<.login ita iz postojee datoteke << cat<<EOF ita iz tijela datoteke tipkam...... EOF

123/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Piping
Jedna od moi komandne linije je mogunost koritenja piping-a. Koritenje ove tehnike u terminalu je dobar trik, a predstavlja i olakanje pri radu. Piping je takoer iroko rairena metoda meu C programerima. Bez pipinga, da bi napravili jednostavne zadatke morali bi pisati velike koliine koda. U osnovi piping ini proces pokretanja neke naredbe i slanje njenog izlaznog rezultata na drugi program ili datoteku, tj. zapisivanje u tu datoteku. Zamislimo da imamo tekst datoteku u tekuem direktoriju koja sadri mnogo linija teksta sadranih od rijei TUX, a zatim jednu reenicu koja e sadrati rije TUX i rije Uni. grep TUX datoteka_1.txt Rezultat e biti izlistan na ekranu, a sainjavat e pretragu za reenicama koje sadre rije TUX. Ako napiemo grep TUX datoteka_1.txt > tux_recenice.txt rezultat moemo vidjeti u datoteci tux_recenice.txt. Znai, rezultat naredbe grep je redirektiran i zapisan u datoteku tux_recenice.txt. Dio naredbe " >tux_recenice.txt" govori shell-u da napravi novu datoteku tux_recenice.txt i u nju zapie rezultat naredbe grep, umjesto da sve izlista na ekran. Ukoliko datoteka s tim imenom ve postoji rezultat naredbe grep biti e zapisan preko sadraja te datoteke. Ako umjesto znaka > stavimo znak >>, sadraj ve postojee datoteke e ostati isti, a rezultat e biti dodan na zadnju liniju teksta. Prava mo pipinga je kada jedan program moe itati output nekog drugog programa. Ako napiemo grep TUX datoteka_1.txt | grep Uni

124/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Prva grep naredba izlista sve tux reenice kao output. Znak | vrijednosti iz outputa prenosi na input slijedee naredbe, koja je takoer grep naredba. Druga grep naredba pregleda sadraj inputa u potrazi za reenicama koje sadre rije Uni u sebi. Naredba grep na ovaj nain se koristi kao filter.

stout

stdin naredba1

naredba2

% naredba1 | naredba2 Redirekcija i piping u viestrukoj kombinaciji mogu initi uda.

Specijalni znaci u C shell-u (Pattern Matching)


Shell i neki tekst procesori dozvoljavaju zamjenu meta-karaktera ili wild cards specijalnim znacima. ? Zamjenjuje samo jedan znak. Primjer: % ls prim?.c prim1.cprim2.c % ls ?ead * Ispisuje sve datoteke koji imaju 4 znaka i koji zavravaju sa "ead" Zamjenjuje bilo koji string. Primjer: % ls *.c prim1.c prim2.c primer.c % ls * % ls *ing [lista] Ispisuje sve datoteke trenutnog direktorija Ispisuje sve datoteke trenutnog direktorija koji zavravaju sa "ing" Zamjenjuje bilo koji znak u listi Primjer: % ls [blm] ead >bead, lead, mead [x-y] Zamjenjuje bilo koji znak u rangu od x do y. Primjer: % ls srce[a-g].c srceb.c srced.c

125/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

{ string..}

Grupiranje. Primjer: % ls { x *y* ?z* } x myfile yourfile xza yza

~home ~user

Trenutni direktorij korisnika Home direktorij odreenog korisnika

Regular expressions
Neki tekst procesori kao grep, egrep, sed, awk i vi omoguavaju pretraivanje pattern-a umjesto fiksnih stingova. Takvi tekstualni modeli (pattern) su poznati kao regular expressions. . Zamjenjuje bilo koji znak * Zamjenjuje nulu $ Oznaava kraj linije

Proces kreiranja i izvravanja C shell scripta


Zahvaljujui script-ovima, komandni jezik ljuske moe se smatrati nekom vrstom programskog jezika, rije je o jeziku koji se interpretira, a ne kompilira. Zaista, jezik ljuske ima razne osobine koje inae susreemo kod obinih programskih jezika: mogunost testiranja uvjeta (istina/la), uvjetno izvravanje komandi (if), viestruko izvravanje komandi (for i while petlje), prebacivanje argumenata iz komandne linije u "program" (script). Shell scriptovi se uglavnom koriste za poslove administriranja UNIX sistema, dakle za upravljanje resursima i procesima, za pretraivanje i auriranje sistemskih datoteka i sl. Uz pomo VI (ili nekog drugog tekst editora) formiramo script. Ako prva linija poinje sa # onda se radi o C shell scriptu. U suprotnom, script se tretira kao Bourne shell script.

126/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

izvriti: /bin/sch [-vh] script_name args ... -v ispisuje linije skripta koje se izvravaju -x ispisuje naredbe koje se izvravaju ili: % chmod +x script_name % script_name args...

Argumenti naredbene linije


Argumenti iz naredbene linije prenose se u script varijable argv. Primjer: Ekvivalentno: echo $argv echo $*

echo $argv[2] echo $2

Kontrola toka
Omoguuje kontrolu izvravanja scripta pomou konstrukcija kao to su petlje, uvjetne naredbe i sl. IF (izvrava niz naredbi ako je uvjet istinit) if (izraz) then naredba endif naredba if (izraz) then naredba

else if (izraz) then

127/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

else naredba endif (za postojanje i else) Provjera datoteka: if ( -c filename) then .... gdje je -c : r w x e o z d Istinito ako korisnik koji izvrava script moe itati datoteku.

Istinito ako korisnik koji izvrava script moe pisati u datoteku.

Istinito ako korisnik koji izvrava script moe izvravati datoteku.

Istinito ako datoteka postoji.

Istinito ako je korisnik koji izvrava script vlasnik datoteke.

Istinito ako je datoteka prazna.

Istinito ako je direktorij.

SWITCH (ovisno o ispunjenosti uvjeta izvrava se jedan od nekoliko zadanih nizova naredbi) switch ($var) switch($1) case -p: lp $2 breaksw cc -c $2 breaksw case -l: naredba breaksw ... case strn: naredba breaksw case -c: case strl1:

128/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

default: naredba breaksw endsw endsw

cc $2 breaksw

FOREACH (izvrava niz naredbi odreeni broj puta) foreach var name (wordlist) naredba end end foreach arg ($*) echo $arg

WHILE (izvrava niz naredbi dok god je uvjet istinit) while (izraz) naredba end set i=1 set j=10 while ($i<=$j) echo Neto @i++ end

GOTO loop: naredba goto loop

129/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

INTEGER ARITMETIKA
Mogunost obavljanja aritmetikih operacija nad varijablama u scriptu bez UNIX naredbi Aritmetike operacije + zbrajanje - oduzimanje * mnoenje / dijeljenje ++ inkrementiranje -- dekrementiranje Logike operacije << pomicanje u lijevo >> pomicanje u desno | ili operacija ^ ekskluzivno ili

% dijeljenje po modulu & I operacija

Logiki operatori
== != =~ !~ Istinito ako je lijevi string jednak desnom Istinito ako lijevi string nije jednak desnom Istinito ako lijevi string odgovara stringu sa desne strane s tim to su Istinito ako lijevi string ne odgovara stringu s desne strane. Univerzalni znaci

univerzalni znaci dozvoljeni ($file =~ *.c). su i ovdje dozvoljeni <Istinito ako je broj s lijeve strane manji od desnog <= >= && Istinito ako je broj s lijeve strane manji ili jednak broju s desne strane Istinito ako je broj s lijeve str. vei ili jednak desnom Logiko i Istinito ako je naredba uspjeno zavrena >Istinito ako je broj s lijeve strane vei od desnog || Logiko ili {command}

130/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Neke najznaajnije ugraene naredbe C-Shella


Bez argumenata prikazuje sve definirane aliase i njihove izraze. Samo sa name printa alias sa tim imenom. Kompletna naredba definira novi alias pod imenom name. Prebacuje proces u pozadinu Promjena trenutnog direktorija Ispisuje words na standardnom izlazu. S opcijom -n sprjeava se prelazak u novu liniju Izlazak iz shell-a sa statusnom linijom Vraanje procesa iz pozadine

alias [name[expression]] bg [%job] cd [name], chdir [name] echo [-n[words...]] exit [status] fg [%job] history jobs [ l ] kill nohup [command [args...]] rehash repeat count command [args...]

Daje listu poslova. Sa -l dobiva se detaljnija lista.

Izvrava naredbu ignorirajui signale. Naredba se ne moe prekinuti ni kada se korisnik koji je startovao odjavi sa sistema. Preraunava tabelu direktorija u promjenjivoj path. Neophodno jedino kada se dodaju nove naredbe dok smo prijavljeni u sistem. Ponavlja naredbu count puta.

setenv name value Postavlja varijable okoline (USER,PATH se postavljaju automatski) shift [varijable] source [-h] filename stop [%job] unalias pattern Brie postavljene aliase ija imena odgovaraju patternu. Npr. unalias * brie sve. Pomjera rijei u varijable u lijevo. Prva rije se gubi. Anko nije definirano ime varijable, korist se argv. Izvrava drugi script. Sa -h opcijom naredbe iz scripta se ne izvravaju nego samo umeu history u listu.

131/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

unset pattern unsetenv pattern

Resetuje sve varijable ija imena odgovaraju patternu. unset* resetuje sve Brie varijable okoline ija imena odgovaraju patternu. unsetenv* brie sve.

Komentari i izlaz
Sve od # do kraja linije smatra se komentarom. Izlaz iz shella sa statusom status: exit [status]

132/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

T C SHELL (TENEX-C-SHELL)
T shell odnosno Tenex shell je poboljana i potpuno kompatibilna verzija C shell-a. T C shell je komandni interpreter kojeg koristimo i kao interaktivni login shell i kao shell script komandni procesor. Ukljuuje: Editiranje komandne linije Nadzor login/logout procedure History nadopunu Periodino izvoenje naredbi Ispravljanje gramatikih pogreki (pravilno pisanje rijei) Rad s dugakim listama argumenata Start-up Tcsh
Tcsh

Interaktivan

Neinteraktivan

Login

No-Login

Interaktivni i neinteraktivni Tcsh


Ukoliko je T-C-Shell povezan sa standardnim ulazom i izlazom( s virtualnom konzolom) tada se radi o interaktivnom shellu. Interaktivni Bash podijeljen je u login Tcsh i No-login Tcsh. Tcsh radi kao login-shell, kad se starta eksplicitno opcijom >>-l<< ili kada je prvi argument (znai argument 0) >>-<<. Login-shell najprije izvrava naredbe iz sistemskih datoteka >>/etc/csh.cshrc<< i >>/etc/csh.login<<. Redoslijed je razliit obzirom na verziju koja se koristi. Najee se promatra datoteka ~/.tcshrc, ako ne postoji onda se promatra ~/.cshrc. Ukoliko postoji redoslijed izgleda ovako: ~/.history, ~/.login i ~/.cshdirs.

133/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Login i Logout script


Prilikom startanja tcsh izvravaju se slijedee scripte: /etc/csh.cshrc /etc/csh.login (samo kao login shell) /etc/environment (samo kod AIX kao login shell) $HOME/.tcshrc logout /etc/csh.logout $HOME/.logout Posebnost tcsh je i autologout mehanizam. user@sunce>tcsh -l sunce/home/user>set autologout =1 #Nakon 1 min. ne dogaanja nita user@sunce>auto-logout

Podeavanje prompta
set prompt = " --%T %n % ~--\n$" Kod tc shell-a postoje 3 vrste prompta 1. prompt1: Kazuje da tcsh oekuje novu naredbu

134/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

2. prompt2: "Nastavak prompta" javlja se kod nepotpune while ili foreach petlje kao i poslije linija koje zavravaju \. 3. prompt3: Ovaj prompt se javlja samo u sluaju greke i nudi malu pomo kroz tcsh.

Editiranje komandne linije


Mogunost da se prethodne ili trenutne komandne linije modificiraju tekst editorom. Tcsh posjeduje mogunost editiranja komandne linije i history. Mnoge verzije tcsh po defaultu koriste emacs komandnu liniju editiranja, meutim mogue je i postavljanje vi editora. bindkey -v primjer za vi-editor bindkey -e primjer za emacs-editor

Kompletiranje imena fajlova i liste


Mogunost da se u naredbenoj liniji automatski dovri ime zapoetog fajla. Shell je obino u mogunosti dopuniti rije ako je napisana samo skraenica. Npr. upiemo samo dio rijei 'ls/usr/lost' i pritisnemo tab tipku kako bi pokrenuli complete-word komandni editor. Shell e sam dopuniti ime fajla '/usr/lost/' u '/usr/lost+found/' i u ulaznom baferu nepotpuni naziv zamijeniti punim Primjer: echo $ar[tab] echo $argv (ukoliko niti jedna druga varijabla ne poinje sa ar.) Isto tako mogue je upisivanjem '^D' kako bi pokrenuli delete-char-or-list-or-eof komandni editor ispisati nadopunu rijei. Shell ispisuje moguu nadopunu koritenjem ugraene ls -F i reprinta prompt i nedopunjenu komandnu liniju.

135/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Primjer: >ls/usr/l[^D] lbin/ lib/ local/ >ls/usr/l Ako je postavljen autolist onda to izgleda ovako: >set autolist >nm/usr/lib/libt[tab] libtermcap.a@libtermlib.a@ >nm/usr/lib/libterm Definiranje listi % set x = aaa bbb ccc % echo $x $#x $x[1] aaa 1 aaa % set x = "aaa bbb ccc" % echo $x $#x $x[1] aaa bbb ccc 1 aaa bbb ccc % set x = (aaa bbb ccc) % echo $x $#x $x[1] aaa bbb ccc 3 aaa Broj rijei u listi definiramo sa $#var lost+found/

136/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima C shell, T C-shell

Ispravljanje gramatikih pogreaka


Shell je u mogunosti korigirati imena datoteka, naredbi i imena varijabli. Pojedine rijei je mogue ispraviti uz pomo spell-word komandnog editora. Ispravna shell varijabla postavlja sena 'cmd' kako bi ispravili ime naredbe. Primjer: >set correct =cmd > lz/usr/bin CORRECT>ls/usr/bin (y|n|e|a)? Mogue je odgovoriti sa 'y' ili pritisnuti space tipku kako bi ispravili liniju, 'e' ostaviti naredbu neispravljenu u ulaznom baferu ili 'a' za prekid naredbe.

Automatsko periodino izvoenje komandi


Uz pomo interne naredbe sched naredbe moemo izvoditi u odreeno vrijeme ukoliko shell nije zatvoren.

137/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

Predrag Jovanovi

SHELL PROGRAMIRANJE (shell i bash)

138/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

UVOD to je shell i vrste shell-a?


Shell je program koji je posrednik (suelje) izmeu korisnika i operativnog sustava, prihvaa naredbe od strane korisnika i izvrava ih sistemskim pozivima prema kernelu (jezgri operativnog sustava), te vraa rezultat operacije. Postoji nekoliko vrsta shell-ova: Bourne shell (sh),C shell (csh),Korn shell (ksh), TC shell (tcsh),Bourne Again Shell (bash).Bash shell je primarni shell na Unix raunalima.

Kako se pokree shell?


Shell se pokree nakon ukljuivanja raunala kao zadnji korak boot procesa.Odmah po ukljuivanju raunala Linux-ov boot proces obavlja niz radnji kako bi kontrolu nad sustavom predao korisniku.Prva faza je uitavanje jezgre odnosno alociranje raunalnih ureaja i kada se jednom starta kernel on ostaje u memoriji tokom itavog rada raunala odnosno do nestanka napajanja.Druga faza je identifikacija korisnika kako bi bilo mogue kontrolirati odreena prava korisnika na sustavu.U tu svrhu se pozivaju dva programa, a to su getty i login.Prvi ima funkciju osiguravanja portova odnosno komunikacijskih kanala prema korisniku.Ti kanali se u linux-u oznaavaju kao tty s rednim brojem iza toga.Getty prima niz znakova s tipkovnice i prosljeuje ga programu login,koji na osnovu tog niza znakova za koji pretpostavlja da je korisniko ime (username) korisniku dodjeljuje njegova korisnika prava i dozvole (permissions), a zatim se zahtjeva od korisnika unos lozinke (password).Ako password ne odgovara postojeem korisniku,onda login ponovo vraa kontrolu programu getty,a ako je identifikacija uspjena program login starta shell program.

Funkcije shella
Primarne funkcije shell-a su ostvarivanje interakcije korisnika s kernelom,a sve u svrhu sigurnosti datoteka na raunalu.Kernel (jezgra) je u neku ruku interpreter odnosno on prevodi

139/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

podatke dobivene od programa u procesorske instrukcije razumljive samo hardware-u.Bilo bi gotovo nemogue da ovjek ui te instrukcije kako komunicirao s jezgrom.Shell je dakle program koji prevodi korisnike zahtjeve za upravljanje nad sustavom.Od korisnika se zahtjeva potivanje odreenih sintaksnih pravila i razumijevanje logike funkcioniranja sustava koje se shell strogo pridrava.Neovisno od vrste Linux-ovog shella svi imaju zajednike osnovne funkcije: interpretacija komandne linije (command line interpretation) iniciranje programa (program initation) preusmjeravanje ulaza i izlaza (input output redirection) lanano povezivanje komandi (pipeline connection) supstitucija imena datoteka (substitution of filenames) upravljanje varijablama (maintenace of variables) kontrola radne okoline (enviroment control) programiranje skripti (shell programming)

to je shell skripta?
Izvrna datoteka koja se sastoji od niza shell naredbi,skripta se ponaa kao program,naredbe se izvravaju sekvencijalno.Svaki od postojeih shellov-a ima svoj skriptni jezik,postoje slinosti ali i razlike. Skriptni jezici se sastoje od kontrolnih struktura,shell naredbi,varijabli i izraza. Ako je skripta napisana nekim skriptnim jezikom da bi ju pokrenuli mora se koristiti odgovarajui shell. Prva linija skripte specificira odgovarajui shell. Na primjer za Bourne Again Shell (bash): #!/bin/bash Skripte se piu u nekom od tekstualnih editora Vi, Emacs npr.

140/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

primjer 01: #!/bin/bash # je oznaka za komentar echo Moja prva skripta Skriptu prije pokretanja moramo uiniti izvrnom,naredba koja nam to omoguuje je naredba chmod. chmod a+x ime_skripte poziv skripte: bash ime_skripte

Postavljanje dozvola za izvravanje skripte chmod naredba i opcije chmod mijenja dozvole za datoteku ili direktorij opcije: + r w x u g o a dodaje dozvolu uklanja dozvolu postavlja dozvolu za itanje postavlja dozvolu za pisanje postavlja dozvolu za izvravanje postavlja dozvolu za korisnika koji je kreirao datoteku postavlja dozvolu za grupu korisnika postavlja dozvolu za sve ostale korisnike sistema postavlja dozvolu za korisnika,grupu i sve ostale

141/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

Argumenti skripte
Shell skripta kao i naredbe moe imati argumente.Pri pozivu skripte poslije imena mogu se unositi argumenti.Vrijednosti argumenata mogu se koristiti unutar skripte koritenjem operatora $ i broja.Prvi argument $1,drugi $2 itd. Specijalno $0 sadri ime shell skripte.Mijenjanje vrijednosti ulaznih argumenata nije dozvoljeno. primjer 06: #!/bin/bash echo Prvi unijeti argument je: $1 echo Drugi unijeti argument je: $2 echo Trei unijeti argument je: $3

poziv skripte: skripta05 danas je padao snijeg rezultat: Prvi unijeti argument je:danas

Drugi unijeti argument je:je Trei unijeti argument je:padao snijeg

Varijable
U shellu varijable nemaju tipove,mogu sadravati brojeve,znakove i nizove znakova.Ne moraju se ak ni deklarirati.Vrijednosti se pridruuju varijablama pomou =operatora.Koritenje vrijednosti varijable nam omoguava specijalni operator $ ispred imena varijable.Imena varijabli mogu sadravati znakove,brojeve i podvlaku,ne smiju sadravati rezervirane znakove shell-a kao to su usklinici,& ampersand ili razmaci koji se koriste za odvajanje naredbi i razdvajanje naredbe i argumenata.

142/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

primjer 02: #!/bin/bash str="Moja druga skripta!" echo $str lokalne varijable primjer 03: #!/bin/bash var=shell function fun{ local var=programiranje echo $var } echo $var fun echo $var

Funkcije
Bash nam omoguava grupiranje koda u cjeline pomou funkcija.One rade na slian nain kao kod programskih jezika.Funkcije nam daju mogunost da neki dio koda ako se radi o veoj koliini,ne ponavljamo nekoliko puta.Funkcije se pozivaju njihovim imenom I mogue ime proslijediti argumente. Sintaksa: ime_funkcije() { naredbe } jednom definirana funkcija se poziva imenom i parametrima.

143/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

ime_funkcije [ param1 param2 param3 ]

Ulaz i izlaz skripte echo,read Naredba echo alje podatak na standardni izlaz,a naredba read upisuje podatak u varijablu.

primjer 04: #!/bin/bash echo Unesite Vae ime: read ime echo $ime,kako ste!

Eksportiranje varijabli
Sve definicije varijabli unutar odreene skripte su dostupne samo toj skripti.Meutim ako elimo da su varijable definirane u skripti,vidljive i u nekoj drugoj skripti koja se poziva iz tekue,moramo koristiti naredbu export koja e osigurati kopije varijabli za sve skripte koje se pozivaju iz tekue. primjer 05: #!/bin/bash var1=ime_osobe export var1 druga_skripta #!/bin/bash var2=prezime_osobe echo $var1 $var2

144/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

dakle kada se iz tekue skripte pozove druga_skripta bit e joj proslijeena kopija varijable var1 i moi e ju koristiti unutar svog shella.

Aritmetike shell operacije: naredba let


Naredba let je bash shell naredba koja se koristi za izvravanje operacija nad aritmetikim vrijednostima.Naredba let moe se inicirati kljunom rijei let ili postavljanjem dvostrukih zagrada.Pridruivanje vrijednosti se kombinira s aritmetikim izrazom,takoer se mogu koristiti i operatori usporedbe. Sintaksa: let vrijednost1 operator vrijednost2 ((vrijednost1 operator vrijednost2))

primjer 07: #!/bin/bash let rez = 2 * 7 echo $rez

-ako se eli koristiti razmak izmeu operanada mora se sve stavit pod navodnike.

145/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

Operatori naredbe let:


Aritmetiki operatori Funkcija * / + % Relacijski operatori > < >= <= = == != & ! vee od manje od vee ili jednako manje ili jednako jednako za naredbu expr jednako za naredbu let razliito logiki AND logiki ILI logika negacija mnoenje dijeljenje zbrajanje oduzimanje ostatak cjelobrojnog dijeljenja

Naredba test
Pomou naredbe test moemo usporeivati cjelobrojne vrijednosti, stringove,te obavljati logike operacije. Naredba se sastoji od kljune rijei test,iza koje se navode vrijednosti koje se usporeuju,a izmeu njih je option kljuna rije koja odreuje tip usporedbe.Option se moe smatrati operatorom,ali se zapisuje slovnom oznakom ispred koje je znak minus.npr eq.Vraa izlazni status 0 ako je usporedba tona. Sintaksa: test vrijednost1 option vrijednost2

146/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

primjer 08: #!/bin/bash num=5 test $num eq 10 echo $? rezultat: 1

Kao alternativa postoji mogunost da umjesto kljune rijei test koristimo zatvorene uglate zagrade [ ],tada bi linija test $num eq 10 izgledala ovako: [ $num -eq 10] Opcije i operatori naredbe test: Usporedba cjelobrojnih vrijednosti: -gt -lt -ge -le -eq -ne Usporedba nizova znakova -z -n = != Str testiranje za prazan niz znak testiranje za vrijednost jednakost nejednakost da li je vrijednost stringa null Funkcija vee od manje od vee ili jednako manje ili jednako jednako razliito

147/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

Logike operacije -a -o ! Testovi za datoteke -f -s -r -w -x -d -h -c -b datoteka postoji,obina je datoteka nije prazna moe se itati mogue pisanje u datoteku mogue izvravanje datoteke ime datoteke je direktorij ime je simboliki link ime je oznaka ureaja ime je blok datoteka logiki AND logiki OR logika negacija

Kontrolne strukture
Bash shell ima skup kontrolnih struktura koje nam omoguavaju kontrolu toka programa,odnosno redoslijed izvravanja naredbi. Uvjetna struktura If testira uspjenost izvoenja shell naredbe,a ne izraza kao u veini programskih jezika. Ifthen struktura mora zavriti s kljunom rijei fi ifthen Sintaksa: fi ifthenelse if naredba then naredba

148/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

Sintaksa: else

if naredba then

naredbe naredbe fi

primjer 08: #!/bin/bash if [ "bash=bash" ]; then echo izraz se izraunao u true fi

primjer 09: #!/bin/bash if [ $# -ne 1 ]; then echo Netoan broj argumenata exit 1 fi echo $1

primjer 10: #!/bin/bash if [ "bash=shell" ]; then echo izraz se izraunao u true else echo izraz se izraunao u false fi

primjer 11: #!/bin/bash echo Unesite s za ispis datoteka prema veliini echo inae ce se ispisati sve informacije

149/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

echo n Molim Vas unesite opciju: read var if [ "$var= s ] then ls s else ls l fi

Petlje: while,until,for-in,for Bash shell posjeduje kontrolne strukture petlje koje nam omoguavaju ponavljanje naredbi.Poput bash if strukture,while i until ispituju rezultat naredbe. Meutim,for i for-in strukture ne izvravaju testove,ve prolaze kroz niz vrijednosti,dodjeljujui svaku vrijednost varijabli. Sintaksa for-in: for varijabla in lista-vrijednosti do naredbe done Sintaksa until: naredbe done done until naredba do Sintaksa for: for varijabla do naredbe done Sintaksa while: while naredba do naredbe

For-in petlja For-in petlja je pogodna i za manipulaciju s datotekama.Moemo koristit specijalne znakove za generiranje imena datoteka kao listu vrijednosti u for-in petlji.Na primjer specijalni znak * generira listu svih datoteka u direktoriju, *.c sve datoteke s ekstenzijom .c

150/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

primjer 12: #!/bin/bash for var in *.c do cp $var mybackup/$var echo $var done

primjer 13: #!/bin/bash for i in `seq 1 10`; do echo $i done

While petlja Petlja while ponavlja naredbe.Poinje kljunom rijei while iza koje slijedi naredba navedena u zatvorenim uglatim zagradama. primjer 14: #!/bin/bash broja=0 while [ $broja -lt 1000 ]; do echo Broja je $broja let broja=broja+1 done

primjer 15: #!/bin/bash str=da

151/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

while [ $str = da ] do echo n Unesite Vase ime: read ime echo Postovanje, $ime echo n Zelite li ponoviti: read ime done echo Ok

primjer 16: #!/bin/bash brojac=1 while let brojac <= 4 do echo $brojac shell let brojac = brojac + 1 done

For petlja Struktura for bez odreene liste vrijednosti podrazumijeva listu ulaznih argumenata komandne linije.Kada pozovemo shell skriptu,navedeni argumenti postaju lista vrijednosti koju poziva for,varijabla koja se koristi u for naredbi se postavlja automatski na svaku vrijednost argumenta u nizu.Struktura for je ekvivalentna listi koja se generira pomou $@. $@ je specijalna varijabla ija vrijednost predstavlja listu argumenata komandne linije. primjer 17: #!/bin/bash for var do

152/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

cp $var mybackup/$var echo $var done poziv skripte: bash uarg main.c lib.c io.c A moemo i eksplicitno pozivati argumente pomou for-in i jedne od specijalnih Varijabli $* ili $@. Struktura for-in e posebno pozivati svaki argument I dodjeljivati vrijednost for-in varijabli.Postoji razlika jer $* e pozivati svaku rije posebno i ako su rijei navedene pod navodnicima. primjer 18: #!/bin/bash echo Unijeli ste $# argumenata for var in $* do echo $var done poziv skripte: izlaz: jedan dva tri etiri Dakle,ako elimo da se argumenti u navodnim znacima tretiraju kao jedan argument,koristimo $@. primjer 18: #!/bin/bash echo Unijeli ste $# argumenata bash numarg jedan dva tri etiri

Unijeli ste 3 argumenta

153/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

for var in $@ do echo $var done poziv skripte: izlaz: jedan dva tri etiri bash numarg jedan dva tri etiri

Unijeli ste 3 argumenta

Logike naredbe && i | | Logike naredbe izvravaju logike operacije na dvije naredbe shella. Sintaksa: naredba && naredba naredba | | naredba U sluaju logikog I (&&),ako su obje naredbe uspjeno izvrene,uspjena je i logika naredba i vraa izlazni status 0.Za logiku ILI naredbu ako je barem jedna od naredbi uspjeno izvrena,uspjena je i logika ILI (| |) naredba i vraa izlazni status 0.Logike naredbe nam slue za testiranje uvjeta u kontrolnim strukturama.

Case Kontrolna struktura koja nam omoguava izbor izmeu vie opcija.Izbor se donosi usporedbom vrijednosti sa ponuenim vrijednostima.Struktura zapoinje kljunom rijei case, zatim izraunavanje vrijednosti varijable,pa in. Zatim slijede opcije iza svake ide ),naredbe,pa ;; *) defaultna opcija. I kljuna rije esac na kraju.

154/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

Sintaksa: case string in opcija1) naredbe ;; opcija2) naredbe ;; *) naredbe ;; esac

primjer 19: #!/bin/bash # Program koji korisniku omoguava razliit # nain za izlistavanje datoteka echo s. ispis datoteka prema veliini echo l. ispis svih informacija o datotekama echo c. ispis datoteka s .c ekstenzijom echo n Molim Vas unesite izbor: read izbor case $izbor in s) ls s ;; l) ls l ;;

155/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

c) ls *.c ;; *) echo Niste unijeli nijednu od opcija esac

Koritenje preusmjeravanja i pipe operacija s kontrolnim strukturama


Kontrolne strukture moemo promatrati kao naredbe koje rezultat operacija alju na standardni izlaz.Izlaz je mogue preusmjeriti u drugu naredbu,program ili datoteku.U kontrolnoj strukturi for-in moemo postaviti operator (>) koji slui za preusmjeravanje, odmah poslije kljune rijei done kako bi izlaz petlje preusmjerili u datoteku. primjer 20: #!/bin/bash artikli=med jabuke sir voe for var in $artikli do echo $artikli done > hrana Pipeline je standardni kanal na koji podaci ulaze ili izlaze,stoga govorimo o pipeline-u kao vrsti redirekcije standardnog inputa i outputa.Pomou ove konekcije moemo vrlo jednostavno izlaz jednog programa preusmjeriti na ulaz drugog programa. Sintaksa: naredba1 | naredba2

primjer 21: #!/bin/bash for var in *.c do

156/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

cp $var mybackup/$var echo $var done | sort > cdat u ovom primjeru naredba echo ispisuje imena svih datoteka s .c ekstenzijom,a imena datoteka se prosljeuju do filtra za sortiranje koji sortira imena prije preusmjeravanja.

Trap strukture: trap


Trap struktura izvrava naredbu ili naredbe kada se dogodi odreeni dogaaj. Dogaaj se moe dogoditi u bilo kojem trenutku u toku izvravanja programa.Ovi dogaaji se obino nazivaju signalima.Kada sustav primi signal,izvrava se trap i kontrola se prenosi na naredbu dodijeljenu trap strukturi. Sintaksa: trap naredbe brojevi-signala

Trap struktura je osmiljena za upravljanje vanjskim dogaajima koji remete rad programa.Najuobiajeniji je primjer signala prekida kojeg obino alje korisnik pritiskujui CTRL-C.Ako za vrijeme izvravanja programa pritisnemo CTRL-C program e se zaustaviti.Kad god se program prekine na ovakav nain,postoje akcije koje moemo poduzeti.Obino je to izlazak iz programa s vrijednou greke.Sustav svakom dogaaju dodjeljuje odreen broj. -broj signala za CTRL-C je 2 primjer 21: #!/bin/bash trap echo Prekid program; rm cdat; exit 1 2 for var in *.c do cp $var mybackup/$var

157/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

echo $var done | sort > cdat Naredba trap se moe koristiti za spreavanje zaustavljanja programa zbog nekih vanjskih dogaaja.Na primjer,pretpostavimo da ne elimo dati mogunost korisniku da sam zaustavi program s CTRL-C; elimo ignorirati sve vanjske dogaaje.Naredba trap moe presrest dogaaj CTRL-C i sprijeiti zaustavljanje programa.To se moe izvesti unoenjem skupa praznih jednostrukih navodnika na mjestu prvog argumenta naredbe trap. ( trap 2 )

158/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Shell programiranje (shell i bash)

ZAKLJUAK:
Linux-ov shell (bash) nije grafiki orijentiran i za sve operacije koje elimo izvriti nad operativnim sustavom moramo poznavati naredbe kao i njihove formate argumenata.To je naravno puno tee od GUI pristupa ali za neke operacije shell je jednostavno nuan i prua velike mogunosti manipulacije nad sustavom kakve GUI ne prua.Na primjer uzmimo neki sustav koji iskljuivo koristi GUI za komunikaciju korisnika sa operativnim sustavom.Kada se dogodi problem koji je prouzrokovao,na bilo koji nain greku u radu hardware-a ili software-a odgovornog za rad grafike na raunalu,to se esto dogaa,ak i ti operativni sustavi predlau nakon to doive kolaps,startanje svojevrsnog shell-a (command prompt-a) za rjeavanje problema sustava na nekom niem nivou,bliem samim komponentama raunala. to se tie pisanja skripti u shell-u,zakljuak bi bio da se pisanjem skripti moe postii znatna uteda u vremenu i smanjenje vjerojatnosti pogreaka. Jednostavno ako svaki dan odraujemo slijedno odreene akcije nad sustavom i na to troimo odreeno vrijeme, trebalo bi razmisliti da li bi mogli napisati skriptu koja bi to odraivala za nas. Dakle imamo prednosti pisanja skripti: kreiranje vlastitih skripti za obavljanje odreenih zadataka, uteda vremena, smanjuje se mogunost pogreke, automatizacija svakodnevnih zadataka, automatizacija administrativnih poslova time poveana produktivnost.

159/1275

Sveuilite u Splitu Struni studij Raunarstva

Programski alati na Unix raunalima

Marko Vukovi

BASH ADVANCED SHELL PROGRAMIRANJE

160/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

UVOD ZATO SHELL PROGRAMIRANJE?


Sposobnost rada sa shell scripting-om je nuno svakom tko eli biti razumno efektivan sistem-administrator, ak i ako nije struan u pisanju script datoteka. Shvatimo to ovako: kad se Linux raunalo starta, ono pokree script kd u /etc/rc.d sa svrhom da nanovo postavi konfiguraciju sustava i poetnih usluga. Detaljno poznavanje ovog startup script kda je vano prilikom analiziranja ponaanja cjelokupnog sustava, i ako je to mogue: modificiranja istog. Pisanje script kda nije teko za nauiti, budui da script kd moe biti upisan u memorijske sekcije veliine jednog byte-a, i takoer postoji razmjerno malen set operacija i naredbi koje su specificirane kao shell, koji nije teko shvatiti. Sintakse su jednostavne i izravne, sline onima koje pozivaju ili povezuju razne segmente kda u komandnoj liniji. Postoji jo i nekolicina pravila koja se takoer moraju nauiti. Veina kraih kdova radi besprijekorno prvi put, a i otklanjanje greaka kod duih vri se kratko i izravno, ali samo zbog jednostavnosti kda, budui da BASH ne sadri nikakve debugging programe. No, o tome kasnije. Shell script kd je "brza i prljava" metoda stvaranja prototipova sloenih aplikacija. Mogunost rada ak i sa ogranienom funkcionalnou esto se smatra korisnom prvom stranicom u razvoju projekta. Na ovaj nain, struktura aplikacije se moe testirati i isprobavati, prije nego to se konano kdira u C++, Java-i ili Perl-u. Shell scripting se dri klasine UNIX filozofije razbijanja sloenih projekata u jednostavnije podzadatke, i povezivanja komponenti i segmenata kda. Mnogi smatraju ovaj pristup boljim, ili barem estetskijim pristupom u rjeavanju problema, od koritenja jednog od "sve-u-jednom" jezika nove generacije (Perl), koji funkcioniraju na nain da bude pristupaan svakom korisniku, a to trai od zahtjevnijeg korisnika prilagoavanje svojeg naina razmiljanja odgovarajuem programskom alatu.

161/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

OSNOVNI PRINCIPI RADA U BASH-U


U ovom u seminaru opisati BASH, to je akronim za "Bourne-again shell" i prestavlja proireni dodatak na klasini shell scripting koji je razvio Stephen Bourne. BASH je de facto postao standard shell scripting-a na svim varijantama UNIX-a. Veina principa kojima u se baviti u ovom seminaru takoer je povezana i sa ostalim verzijama shell scripting-a, kao to su Korn shell (od kojeg potjeu neke karakteristike BASH-a) i C shell i njegove razne varijante. Primjer: kd za "ienje" log datoteka u /var/log U ovom najjednostavnijem primjeru, kd nije nita drugo doli lista sistemskih naredbi pohranjena u datoteci. Ako nita drugo, onda ovaj nain barem tedi vrijeme i trud prilikom svakog ponovnog pretipkavanja tih naredbi kod svakog novog pozivanja istih:

cd /var/log cat /dev/null > messages cat /dev/null > wtmp

U ovom primjeru nema nita neoekivano, samo set naredbi koje mogu lako biti izvravane jedna po jedna izravno iz komandne linije radne konzole. Prednost stavljanja naredbi u sript kd ide dalje od primitivnog naela utede truda i vremena kod tipkanja. Script kd lako moe biti modificiran, izmijenjen, prilagoavan i generalno moe ga se uiniti pristupanim za neku odreenu aplikaciju.

162/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Izvravanje script kda


Nakon to je kd napisan, moemo ga izvriti naredbom sh scriptname, ili alternativno bash scriptname (nije preporuljivo koritenje sh <scriptname,

budui ovaj nain efektivno onemoguava itanje iz ulazne biblioteke stdin unutar script kda). Puno sigurnije je napraviti da script kd direktno izvriv sa naredbom chmod. Npr.: chmod 555 scriptname ili: chmod +rx scriptname (omoguava itanje i izvravanje svim korisnicima), chmod u+rx scriptname (omoguava itanje i izvravanje samo autoru kda). Nakon to je script kd postao izvriv, moe se testirati upisivanjem naredbe ./scriptname. Ukoliko nema problema u sintaksi, izvravanjem kda poziva se pravilni prevodilac naredbi i obrauje kd. Za zadnji korak, nakon testiranja i eventualnog otklanjanja greaka, korisnik bi se mogao odluiti za pomicanje datoteke u /usr/local/bin (kao root direktorij), tako da omogui pristup datoteci (kdu) na nain da bude izvrna i dostupna u cijelom sustavi. To se odnosi na sve korisnike. Datoteka se jednostavno ozvrava pozivanjem: scriptname [ENTER] iz komandne linije. (omoguava itanje i izvravanje)

Otklanjanje greaka (debugging)


BASH shell ne sadri nikakav poseban debugger, niti ima specificirane naredbe za otklanjanje greaka. Greke u sintaksi ili pogreke u pisanju generiraju ifrirane poruke o greci koje esto nimalo ne pomau u otkrivanju greaka nefunkcionalnog kda. To je, naalost, jedna od mana ovog jezika.

163/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

UVOD U VARIJABLE I PARAMETRE


Poznavanje rada sa varijablama ini jezgru svakog programiranja kao to i one ine jezgru svakog programskog jezika. Pojavljuju se u aritmetikim operacijama i kvantitativnim zadatcima, radu sa znakovnim nizovima, i nezamjenjive su u radu sa simbolima. No, varijabla nje nita vie od memorijske lokacije ili seta memorijskih lokacija koje sadre nekakvu informaciju.

Referenciranje varijabli
Ime varijable je oznaka za njenu vrijednost, informaciju koju dri ista. Referenciranje vrijednosti jedne varijable se zove supstiticija varijable. Ime i vrijednost varijable su dvije sasvim odvojene karakteristike varijable. Ako je varijabla1 ime varijable, tada je $varijabla1 referenca (adresa) na varijablu, dakle na informaciju koju ona sadri. Jedini put kad se varijabla pojavljuje bez reference, bez prefiksa $, jest kad je deklarirana ili pridruena, kad nije postavljena, kad se koristi u "export" nainu rada ili u posebnim sluajevima kad avrijabla predstavlja signal. Pridruivanje moe biti sa '=' znakom, u naredbi read i na poetku petlje. Zatvaranje referencirane vrijednosti pod dvostrukim navodnicima (" ") se ne sukobljava sa zamjenom varijabli. Ovaj nain se zove djelomini navod, neto kao "slabi navod". Koritenje jednostavnih navodnika (' ') koristi ime varijable doslovce, i supstitucija nije mogua. Ovo se naziva puni navod, negdje spominjan i kao "jaki navod". Primjeti se da je $varijabla1 zapravo jednostavnija forma od ${varijabla1}. U kontekstu gdje sintaksa $varijabla1 rezultira grekom, preporua se koritenje due forme.

164/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Deklaracija varijabli
Deklaracija varijabli se koristi sa operatorom pridruivanja '=' (bez koritenja razmaka prije i poslije znaka). Dotini operator se moe koristiti u svrhu pridruivanja ili testiranja, ovisno o kontekstu. Primjer: jednostavna deklaracija varijable U ovom odsjeku je prikazan najednostavniji nain pridruivanja vrijednosti nekom imenu varijable:

echo a=879 echo "vrijednost varijable \"a\" je $a." let a=16+5 #pridruzivanje koristenjem 'let'

echo "vrijednost varijable \"a\" sada je $a." echo

Primjer: deklaracija i referenciranje varijable Slijedei programski odsjeak pokazuje kako se deklariraju varijable i potom kako se vri zamjena:

#!/bin/bash a=375 hello=$a echo hello echo $hello echo "$hello" echo "${hello}" echo hello="A B echo $hello echo "$hello" C D" # ispis: A B C D # ispis: A B C D #identicno kao i: echo ${hello}

165/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

echo echo '$hello' # ispis $hello # ovdje uocavamo efekte # razlicitih tipova navoda echo exit 0

BASH varijable: bez tipa


Za razliku od mnogih ostalih programskih jezika, BASH ne segregira svoje varijable po "tipu". U originalu, BASH varijable su znakovni nizovi, ali, ovisno o kontekstu, BASH dozvoljava cjelobrojne operacije i usporedbe varijabli. Kljuni faktor je da li vrijednost varijable sadri znamenke.

Posebne vrste varijabli


Definiramo tri vrste varijabli: Lokalne varijable: vidljive su samo unutar odsjeka kda ili fukcije Globalne varijable: imaju utjecaj na ponaanje shell-a ili korisnikog suelja. Generalno, svaki proces ima svoje okruje, a to je grupa varijabli koje sadre informaciju na koju se stanoviti proces odnosi. Sa ovog stajalita shell se ponaa kao bilo koji drugi proces. Svaki put kad se pokrene shell iznova, on stvara shell varijable koje komuniciraju sa svojim globalnim varijablama. Svako novo dodavanje ili mijenjanje globalnih varijabli uzrokuje da shell nanovo postavi svoje okruje i svaki od tzv. "dijete"-procesa biva pod utjecajem takovog novog okruja. Prostor koji mogu zauzimati varijable je ogranien. Upisivanje prevelikog broja globalnih varijabla ili onih koje koriste previe memorijskih mjesta moe prouzroiti probleme. Ako se u script kdu definiraju globalne varijable, one trebaju biti prijavljene u lokalno okruenje script kda. To je funkcija naredbe export. Ona se odnosi samo na "dijete"-procese, dakle na recesivne procese. Pozicijski parametri: argumenti dodani kdu iz komandne linije: $0, $1, $2, $3... $0 je ime kda, $1 ime prvog argumenta, $2 ime drugog, itd. Poslije devetog, argumenti

166/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

moraju biti oznaeni sa vitiastim zagradama: ${10}, ${11}, ${12}. Posebne varijable $* i $@ iskljuuju sve pozicijske parametre.

167/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

exit i exit status Naredba exit


Naredba exit se moe koristiti za prekidanje izvrenja kda, kao u programu u C-u. Takoer moe vratiti vrijednost, koje je neophodna u izvravanju "roditelj"-procesa.

exit status
Svaka naredba vraa izlazni status znan kao exit status (negdje u literturi je oznaen i kao return status). Uspjeno izvrena naredba vraa nulu (0), dok neuspjela naredba vraa broj razliit od nule koji uglavnom oznaava broj greke (engl. error code). Uspjeno izvrene UNIX naredbe i programi vraaju nulu kao izlazni status nakon uspjenog kompletiranja, iako postoji i par iznimaka.

Uvjetne naredbe
Svaki kompletan programski jezik sadri set nekakvih uvjetnih naredbi koje se izvravaju u skladu sa zadanim uvjetom. BASH ima naredbu test, razne operatore koji koriste uglate i vitiaste zagrade, i if/then konstrukciju.

Uvjetne konstrukcije
Uvjetna konstrukcija if/then ispituje da li je izlazni status naredbe jednak nuli (budui da "0" znai uspjeno izvrenu naredbu prema pravilima UNIX-a), i ako jest, prealzi u izvravanje jedne ili vie zadanih naredbi. Takoer postoji i poseban operator "[" (lijeva uglata zagrada). On je sinonim za naredbu test i postoji iskljuivo zbog razloga efikasnosti. Ova naredba prihvaa zadane argumente kao izraze usporedbe ili ispituje fajlove, te vraa izlazni status usporedbe (0 za istinito, 1 za pogreno). if naredba takoer moe ispitivati i exit status bilo koje naredbe, ne samo produkt usporedbe.

168/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Naredba test ispituje tipove datoteka i usporeuje nizove.Postoji jo i naredba elif kao sinonim za else if. eljeni efekt je gnijeenje jedne konstrukcije (unutarnje) if/then unutar druge (vanjske).

169/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

PETLJE I GRANANJE Petlje


Petlja je odsjeak kda koji iterira zadani set naredbi (ponavlja se) dokle god je konrolni uvjet petlje istinit. BASH se u ovome ne razlikuje bitno od C-a. Sadri naredbe for (in), while, until, koje se koriste u kombinaciji sa do i done koje oznaavaju poetak i kraj odsjeka vezanog uz petlju. Princip petlje je dakle, kao i u ostalim programskim jezicima isti, pa e ovdje biti spomenuto neto openito o petljama, vezano za sam pojam petlje. Kontrolne naredbe break i continue rade na istom principu kao i u ostalim jezicima. Naredba break prekida izvravanje petlje, dok naredba continue radi skok na slijedeu iteraciju petlje, preskaui ostatak kda u trenutnom ciklusu petlje. Konstrukcije case (in)/esac i select tehniki ne predstavljaju petlju, budui da ne iteriraju izvravanje odreenog programskog odsjeka. Meutim, one, poput petlji, diktiraju smjer izvrenja programa, ovisno o uvjetima zadanima na poetku ili kraju bloka. Naredba case (in) obavlja grananje na jedan od nekolicine programskih odsjeaka, ovisno o uvjetu. Slui kao preica za viestruke if/then/else konstrukcije, i pokazala se izuzetno korisnom pri stvaranju menija. Konstrukcija select, koja je usvojena iz Korn shell-a, je jo jedna alatka za stvaranje menija.

170/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Ugnjeene petlje
Ugnjeena petlja je petlja unutar petlje, tj. unutarnja petlja u bloku vanjske petlje. Tu se deava da prvi prolaz kroz vanjsku petlju pokree i unutarnju, koja se izvrava do kraja. Slijedei prolaz kroz vanjsku petlju opet aktivira unutarnju. Ovo se ponavlja dok se vanjska petlja ne izvri do kraja. Naravno, naredbom break moemo u svakom dijelu vanjske ili unutarnje petlje utjecati na prijevremeni prekid iterativnog procesa.

Primjer: ugnjeena petlja

for a in 1 2 3 4 5 do

#vanjska petlja

echo "stavi $outer u vanjsku petlju." echo "----------------------" inner=1 #resetiraj inner

for b in 1 2 3 4 5 do

#unutarnja petlja

echo "stavi $inner u unutarnju petlju." let "inner +=1" done #povecaj brojac inner za 1 #kraj unutarnje petlje

let "outer +=1" echo done

#povecaj brojac outer za 1

#kraj vanjske petlje

171/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

INTERNE NAREDBE (BUILTIN-OVI)


Builtin (engl. builtin ugraeno) je naredba koja je sadrana unutar BASH-ovog seta naredbi, dakle doslovce ugraena u programski jezik. One postoje iskljuivo zbog efikasnosti izvravaju se bre od eksternih naredbi, koje obino zahtijevaju ravanje posebnog procesa, ili zbog toga to odreene builtin naredbe trebaju izravan pristup samom jeziku. Kad se neka naredba ili shell inicijaliziraju zbog izvravanja nekog podzadatka, taj proces se zove ravanje. Novi proces koji je nastao se naziva "dijete", a proces koji je pokrenuo ravanje "roditelj". Dok "dijete" - proces obavlja svoj posao, "roditelj" je jo u postupku izvravanja. Generalno gledano, BASH builtin naredba ne kreira podzadatak, sve dok se izvrava unutar nekog kda. Eksterni sustav naredbi ili nekakav filter unutar kda obino znaju generirati podzadatke. Builtin je takoer sinonim za sistemsku naredbu istog imena, meutim BASH ju interno reimplementira. Npr. BASH naredba echo nije isto to i /bin/echo, iako je ponaanje tih dviju naredbi skoro identino. Postoje jo i kljune rijei. To su razne rijei i interpunkcijski znakovi. One imaju posebno znaenje za shell, i neke predstavljaju granice programskih odsjeaka sintakse nekog kda. Npr. sve uvjetne konstrukcije i ono to ide uz njih predstavljaju kljune rijei. Slino kao i builtin-ovi, kljuna rije je implementirana u BASH-u, ali za razliku od builtin naredbe, ona sama po sebi nije naredba, ve dio vee komandne strukture. Ni kod pregleda internih naredbi se BASH ne razlikuje previe od ostalih jezika. Nabrojimo neke I/O naredbe koje su implementirane u ovom jeziku: echo, printf, read, zatim naredbe za rad sa datotekama: cd, pwd, pushd, popd, dirs, pa rad sa varijablama: let, eval, set, unset, export, typeset, declare, readonly, getopts, rad sa kdom: source, exit, exec, shopt. Recimo neto i o eksternim naredbama, a u kontekstu internih naredbi. Standardne UNIX naredbe ine shell script kd svestranijim. Vrlina BASH-a jest kombiniranje internih naredbi sa jednostavnim konstrukcijama programa. Standardnih naredbi ima vie vrsta. Moemo ih podijeliti po karakteru, po nainu rada, po sloenosti... Po sloenosti se dijele na: osnovne (ls, cat, chmod,...), te sloene naredbe (expr, find, xargs,...). Po nainu rada na naredbe za rad sa vremenom i datumom, za procesiranje teksta, za rad sa datotekama, za matematike operacije, itd.

172/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

ARITMETIKO PROIRIVANJE
Aritmetiko proirivanje prua jednostavan i izravan nain obrade aritmetikih podataka u kdu. Prevoenje znakovnog niza u brojevnu vrijednost je prilino izravno, i koristi se u kombinaciji sa jednostrukim navodnicima (`...`), dvostrukim zagradama ( ((...)) ), ili naredbom let. Navest emo par primjera aritmetikog proirivanja u nastavku.

Aritmetiko proirivanje sa jednostrukim navodnicima


esto se koristi u kombinaciji sa naredbom expr. Primjer: Aritmetiko proirivanje sa jednostrukim navodnicima z = `expr $z + 3` #naredba expr vrsi prosirivanje

Aritmetiko proirivanje sa dvostrukim zagradama i naredbom let


Upotreba dvostrukih zagrada u aritmetikom proirivanju je potisnula koritenje jednostrukih navodnika, koje je praktiki izvan upotrebe i zbog sve veeg koritenja naredbe let u istom kontekstu. Primjer: Aritmetiko proirivanje sa dvostrukim zagradama z=$(($z+3)) z=$((z+3))

#takodjer se mogu definirati operacije unutar #dvostrukih zagrada

n = 0 echo "n = $n" # n = 0

((n += 1)) echo "n = $n"

#povecaj n za 1 # n = 1

173/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Primjer: Aritmetiko proirivanje sa naredbom let let z = z+3 let "z=z+3" #navodnici dopustaju upotrebu razmaka, #ovdje naredba let zapravo izvrsava #aritmeticku usporedbu, a ne prosirivanje

174/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

I/O PREUSMJERAVANJE
Uvijek postoje tri osnovne "datoteke" koje su otvorene: stdin (predstavlja tipkovnicu), stdout (predstavlja ekran) i stderr (predstavlja izlaz za javljanje greke, takoer ekran). Te, i mnoge druge otvorene datoteke, mogu biti preusmjerene. Preusmjeravanje obino znai slanje izlaznog stanja (odreene datoteke, linije, programa ili ak dijela kda unutar script-a) prema ulazu druge datoteke, linije, programa,... Svakom otvorenom fajlu se pridruuje njegov pokaziva (engl. file descriptor jednostavan broj koji operativni sustav pridruuje otvorenoj datoteci zato da ju moe pratiti. Pojednostavljena verzija pokazivaa na datoteku u C-u.). Standardni pokazivai za stdin, stdout i stderr su 0, 1 i 2. Za dodatne otvorene datoteke, ostaju nam pokazivai od 3 do 9. Ponekad se ti dodatni pokazivai koriste za dohvat jedne od standardnih datoteka, dakle kao privremena duplicirana veza. Ovo pojednostavljuje vraanje u normalni nain rada poslije kompleksnog preusmjeravanja i mijeanja datoteka.

Naredba exec
Upotreba naredbe exec <ime_datoteke preusmjerava stdin prema nekakvoj datoteci. Od te toke nadalje, svi podaci vezani uz stdin dolaze ravno iz te datoteke, za razliku od svog normalnog izvora (obino unos iz tipkovnice). Ovo omoguava metodu itanja datoteke liniju po liniju i eventualno ralanjivanje svake linije unosa koritenjem naredbe sed i/ili awk. Slino tome, naredba exec >ime_datoteke preusmjerava stdout u eljenu datoteku. Ovim postupkom se alju svi izlazni podaci u spomenutu datoteku. I/O preusmjeravanje je takoer pametan nain da se izbjegnu problemi koji se javljaju kad su neke varijable nedostupne, tj. unutar nekog subshell-a.

175/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Preusmjeravanje odsjeaka kda


Programski odsjeci, poput onih sa while, until i for petljama, pa ak i sa if/then naredbama takoer mogu sudjelovati u preusmjerivanju ulaza stdin. U nekim sluajevima se ak i funkcije koriste u tu svrhu. Operator < na kraju bloka kda osigurava da se provede redirekcija. Preusmjeravanje odsjeka datoteke stdout ima za posljedicu upisivanje tog istog bloka u zadanu datoteku. Pametna uporaba I/O preusmjerivanja omoguava komadanje i spajanje snopova kda komandnog izlaza, to dalje dovodi do stvaranja reportnih i log datoteka.

176/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

PODZADATCI (Subshell-ovi) Definicija podzadatka


Uitavanje shell datoteke ili kda aktivira jo jedan segment komandnog procesora. Kao to se zadane naredbe interpretiraju u komandnoj liniji, slino se deava i u procesu izvravanja seta naredbi u datoteci. Svako pokretanje shell script kda je, openito, podzadatak nekog procesa "roditelja", poetnog procesa iz kojeg je ravanjem nastao. "Roditelj" proces je vidljiv na konzoli ili xterm suelju. Meutim, shell script proces takoer moe i stvarati podzadatke. Takvi podzadatci se izvravaju paralelno, to kao posljedicu daje izvravanje vie procesa istodobno. U globalu, eksterna naredba u nekom dijelu kda moe generirati podzadatak, i to tamo gdje BASH builtin naredba to ne moe. Ali, zbog ovog nedostatka, builtin naredbe se izvravaju efektivnije i bre od svojih eksternih alternativa. Primjer: paralelno uitavanje i izvravanje procesa #spajanje i sortiranje oba seta listi istodobno #ivrsavanje u pozadini osigurava paralelnu obradu

(cat list1 list2 list3 | sort | uniq > list123) & (cat list4 list5 list6 | sort | uniq > list456) &

wait

#ne pokreci slijedecu naredbu dok se #podzadatci nisu izvrsili

diff list123 list456

Ovdje se za preusmjeravanje I/O podataka u podzadatak koristi tzv. pipe operator, tj. "|".

177/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

ZAKLJUAK
Shell programiranje je principijelno jednostavan nain pisanja programa, temeljen na najjednostavnijim principima programiranja. Podrava klasine UNIX programe, koristi interne naredbe kako bi se poboljala efikasnost izvoenja istih, i slijedi najjednostavniji princip rada s varijablama. Naravno da kod svakog programskog jezika uoavamo mane, pa tako je i s ovim. Konkretno u BASH shell scripting-u jednostavnost je u drugom smjeru mana, ali ne koliko je vrlina, nasreu. BASH ne koristi nikakve debugging programe, teak je za prepoznavanje i otklanjanje greaka, to je, proporcionalno s veliinom kda, isto toliko i vei problem. Osim toga, postoje i situacije u kojima nije preporuljivo koristiti Shell scripting: Intenzivni zadatci, pogotovo tamo gdje je brzina neophodna Zadatci sa sloenim matematikim operacijama Zadatci koji zahtjevaju prenosivost izmeu radnih platformi Sloene, strukturirane aplikacije Kritine backup aplikacije Situacije gdje je prijeko potrebna sigurnost, gdje moramo garantirati vrst integritet sustava, kao i zatitu od upada, provala i kompjuterskog vandalizma Operacije sa izvrnim datotekama (BASH je ogranien na serijski pristup podatcima, a i to samo u djelomino nespretnom i neefektivnom redak-po-redak nainu rada) Zadatci sa multidimenzionalnim poljima Zadatci sa strukturnim fajlovima, kao to su povezane liste ili stabla Zadatci kreiranja ili manipuliranja grafikom ili GUI-em (Graphics User Interface Grafiki modelirano suelje od strane korisnika) Zadatci koji zahtjevaju izravan pristup sistemskom hardveru Zadatci koji zahtjevaju izravan pristup port-ovima ili I/O utorima Aplikacije zatvorenog kda Ukoliko se korisnik nae u jednoj od gore spomenutih situacija, pametnije je iskoristiti jedan od jezika nove generacije: Perl, Tcl, Python, Ruby ili ak i C, C++ i Java-u. ak i onda stvaranje prototipa aplikacije kao shell script kda moe biti koristan korak razvoja kda. Ako sve zbrojimo i oduzmemo dobili smo razmjerno jednostavan programski jezik, kompatibilan s jezicima nove generacije, isto kao i raznim shell programskim standardima,

178/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Manuel Vidonis, Zoran Zorii

REGEX

179/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

REGULAR EXPRESSIONS
((pravilni | regularni) izrazi)

Poetak regularnih izraza


Oko 1940. godine dva su neuropsihologa, Warren McCulloch i Walter Pitts, razvila modele za koje su vjerovali da predstavljaju rad ivanog sustava na razini neurona. Postoji veliki broj razliitih realizacija neuronskih mrea, a samim tim postoji i mnogo podjela. Neuronske mree moemo klasificirati prema: broju slojeva, vrsti veza izmeu neurona, vrsti obuavanja neuronskih mrea, smjeru prostiranja informacija, vrsti podataka. Neuronske mree u informatici imaju veliku primjenu, slue za: prepoznavanje oblika, prepoznavanje govora, prepoznavanje rukopisa, kompleksne proraune i procjene, predvianje cijena na burzi, vremenske prognoze, kompresiju podataka, itd. Kod realizacije neuronskih mrea na raunalima, situacija otprilike izgleda tako da za jedan neuron treba jedan procesor. Neuron je laiki opisan kao procesor s lokalnom memorijom. Poto su regularni izrazi izvedeni iz neuronskih mrea, moemo pretpostaviti da regularni izrazi na jednoprocesorskim sustavima zahtijevaju veliku koliinu procesorskog vremena.

180/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

MODEL NEURONA:

u1..n w1..n f( ) i

ulazni podaci teinski koeficijenti funkcija izlazni podatak

Nekoliko godina kasnije matematiar Stephen Kleene je te modele formalno matematiki opisao. Nazvao ih je regularni skupovi. Kleene je razvio jednostavnu notaciju (sustav znakova) za izraavanje regularnih skupova koju je nazvao regularni izrazi. Sredinom prolog stoljea, 50-ih i 60-ih godina, regularnim izrazima su se bavili i matematiari. Robert Constable je napisao dobar prirunik za matematiki naklonjene strunjake: "The role of finite automata in the development of modern computing theory". RegEx je poseban jezik koji omoguava inteligentno usporeivanje stringova, temelji se na matematikoj teoriji jezika, deterministikih i nedeterministikih konanih automata. Prednost regEx a je u tome to se usporedba stringa ne vri, ali i moe, prema nekom fiksnom stringu. Usporedba stringa vri se prema nekom uzorku koji predstavlja odreeni skup razliitih strigova ili znakova. Kao rezultat usporedbe dobivamo sve one stringove koji u sebi imaju odreeni uzorak. Uzorak se odreuje pomou zamjenskih znakova (metacharacters) i posebnih nizova (special sequences). Jezik regularnih izraza koristi se u Unix OS, a koriste ga razni programi i okoline:

181/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Zamjenski znakovi u raznim okolinama i programima:


Program ili okolina vi visual c++ awk sed Tcl Ex grep egrep fgrep Perl . X X X X X X X X X X [] X X X X X X X X X X ^ X X X X X X X X X X $ X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \( \) X X X X X X \{ \} ? + | ()

Kratki opis nekih programa koji koriste regEx - e: awk: awk [-fscript-name] [-Fc] [inline-script] [params] [filename] awk pretrauje ulaznu datoteku (ili stdin) i trai linije ili polja koje zadovoljavaju uzorke te izvrava pridruene operacije. Uzorci i akcije se zadaju u komandnoj liniji (inline-script) ili datoteci (script-name). Omoguava referenciranje linije ili bilo kojeg polja u liniji.

182/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

grep, egrep, fgrep: grep [options] PATTERN [FILE....] grep je program koji na ulaznoj datoteci usporeuje uzorak koji smo mu predali. Uzorak se usporeuje sa svakom linijom u datoteci. Linije u kojima imamo pogodak se ispisuju ili broje, ovisno o opciji koju smo ukljuili pri pokretanju programa. vie o tome: man grep. Program grep ima nekoliko razliitih verzija: egrep za proirene regularne izraze. fgrep koristimo kad elimo raditi usporedbu samo prema nekom fiksnom uzorku. egrep == grep E ... fgrep == grep F ... vie informacija: man grep sed: Supstitucija u sed-u: sed 's/uzorak1/uzorak2/ ' file sed je stream editor i slui za izvoenje osnovnih tekstualnih transformacija na svom ulazu. sed se razlikuje od drugih editora po tome to za ulaz moe primiti datoteku ili tok podataka (pipeline). vie informacija: man sed vi: vi [options] [file] vi ili vim (vi improved) je text editor koji se moe koristiti za ureivanje bilo kakvog teksta. Najvie se koristi za ureivanje programa.

183/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

vi txt1 pokretanje vi editora i ureivanje txt1 datoteke :q! izlaz iz vi editora bez spremanja podataka vi u ex modu nam omoguava koritenje supstitucije. ex txt1 "txt1" 4L, 246C Entering Ex mode. Type "visual" to go to Normal mode. :q! vie informacija: man vi

184/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Kratki pogled na regEx generator


Postoje dvije vrste regEx generatora: text directed engines, regEx directed engines. Jeffrey Friedl ih je u knjizi "Mastering regular Expressions" nazvao DFA i NFA engines. Razlika izmeu text-directed generatora i regEx-directed generatora je u tome to je regEx-directed nedeterministiki , a text-directed deterministiki. "RegEx directed generator je nestrpljiv u svom nastojanju da napravi pogodak." RegEx directed generator uvijek vraa najljeviji pogodak RegEx directed generator uvijek vraa najljeviji pogodak, ak i ako ga kasnije eka bolji pogodak. Kad usporeujemo regularni izraz sa stringom, generator e poeti na prvom znaku stringa. Pokuat e usporediti sve permutacije izraza (ovisi o izrazu), svaki put istim redoslijedom. Rezultat toga je da regEx-directed generator uvijek vraa najljeviji pogodak. Kad usporeujemo regEx "cat" sa stringom "He captured a catfish for his cat.", regEx directed generator e usporediti prvi znak regEx-a 'c' s prvim znakom iz stringa 'H'. Deava se promaaj. Poto ne postoje ostale permutacije na tom "mjestu" regEx-a (regEx "cat" je obian niz znakova. Imali bi permutacije da, na primjer, pokuavamo usporediti regEx [cb]at), parser nastavlja usporedbom 'c' na drugi znak stringa 'e'. Promaaj, i isto na usporedbi sa spaceom. Dolazimo do 4. znaka stringa, 'c' pogaa 'c' . Generator sada pokuava usporediti sljedei znak regEx-a 'a' s 5. znakom stringa 'a'. Pogodak, ali na 6. znaku stringa 't' ne pogaa 'p'. Generator sada zna da regEx ne moe pogoditi string poevi na 4. znaku. Nastavlja gdje je stao, a to je na 5. znaku stringa 'a'. Deava se promaaj i nastavlja se dalje. Na 15. znaku stringa imamo pogodak: 'c' pogaa 'c' , 'a' pogaa 'a', 't' pogaa 't'. Potpuni pogodak ("cat" vs. "catfish") i generator je zadovoljan. Poto se radi o pohlepnom generatoru, nema nastavka usporedbe, bez obzira na to to kasnije u stringu postoji bolji rezultat ("cat" vs. "cat"). Za pohlepni algoritam "cat" vs. "catfish" je na boljem mjestu.

185/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Zamjenski znakovi (Metacharacters):


. ^ $ * + ? { }[ ] \ | ( ) . ^ $ * + ? zahvaa bilo koji znak oznaava poetak reda oznaava kraj reda trai se nula ili vie zadanih (Kllene star) trai se jedan ili vie zadanih trai se nula ili jedan znak

{ } koristi se kada elimo odrediti neko ponavljanje [ ] koristi se kada elimo odrediti listu znakova koje traimo, ili neki raspon znakova [.-.]. Zamjenski znakovi unutar uglatih zagrada imaju drugaije znaenje (vie o tome kasnije). \ | koristi se kad elimo iskljuiti specijalnu namjenu zamjenskog znaka, koristi se kad elimo postaviti alternativni odabir ili kod specijalnih nizova ( ) koristi se za grupiranje izraza; izrazi se grupiraju i privremeno uvaju u memoriji, moemo ih referencirati s \1, ... .. .. .,\9

Kolinici * + ? {min, max} (Quantifieres)


Potrebno je znati da su kolinici pohlepni (greedy). Openito pohlepni algoritmi su oni koji uvijek uzimaju prvo rjeenje, a ponekad prvo rjeenje nije najbolje, to u RE znai vraanje unazad. Kolinici imaju minimalni i maksimalni broj pokuaja zahvaanja nekog znaka. Na primjer, regularni izraz ca*t e zahvatiti "ct" (0 'a' znakova), "cat" (1 'a' znak), "caaat" (3 'a' znaka), i tako dalje. Generator regEx-a e kod kolinika *, +, {} ('*' 0 ili vie, '+' 1 ili vie, {min} min ili vie) forsirati to vie pogodaka, zato ih zovemo pohlepnima. U izrazu *2 string "abcdrefghfds789254gfhh2568975hujkhfed" RE prvo prolaze do kraja stringa, a tek onda pokuavaju usporediti broj 2.

186/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Sada imamo vraanje (backtracking) prema poetku sve dok ne nae prvi broj 2 (gledajui s desna na lijevo). Zahvaeni string e biti "abcdrefghfds789254gfhh2". Backtracking je posljedica pohlepnosti nekih zamjenskih znakova (*,+,{}); on uvijek vraa najdesniji pogodak (njegovo je kretanje s desna na lijevo). Pohlepnost moemo iskljuiti tako da iza svakog pohlepnog zamjenskog znaka piemo '?' . "*?" "+?" "{min, max}?" "??". Sada je situacija malo drugaija. Uzmimo zadnji primjer: regEx .*?2 i string "abcdrefghfds789254gfhh2568975hujkhfed". Regularni izraz sada nakon svakog znaka s kojim je imao pogodak pokuava usporediti broj 2. Zahvaeni string e sada biti "abcdrefghfds7892". Korak po korak primjer: Regularni izraz a[bcd]*b, zahvaa slovo a, nula ili vie slova iz liste [bcd], i na kraju b. Usporedimo to sa stringom "abcbd" Korak Pogodak 1 2 3 4 5 6 7 a abcbd Promaaj abcb abc abcb Zahvaa 'a' Zahvaa [bcd]*, ide daleko koliko moe, a to je do kraja stringa Pokuava zahvatiti b, poto je trenutna pozicija kraj stringa, imamo promaaj Povratak na poetak, tako da [bcd]* zahvati jedan znak manje Ponovno natrag, tako da [bcd]* zahvaa samo "bc" Ponovno pokua s b.Ovaj put znak na trenutnoj poziciji je "b", znai uspijeva Objanjenje

Promaaj Pokuava b ponovo, trenutna pozicija je zadnji znak, a to je "d"

187/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Specijalni nizovi (Special Sequences):


\d \D \w \W \b \B \s \S \< \> \A \Z '\d' zahvaa jednu znamenku '\D' iskljuuje znamenku '\w' zahvaa slovo, broj ili '_' '\W' iskljuuje bilo koje slovo, broj ili '_' '\b' zahvaa rijei koje imaju odreene znakove na rubovima rijei '\B' iskljuuje rijei koje imaju odreene znakove na rubovima rijei '\s' zahvaa bilo koji white space '\S' iskljuuje bilo koji white space '\<' poetak rijei '\>' kraj rijei '\A' poetak stringa '\Z' kraj stringa

188/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Osnovni primjeri
(sintaksa zamjenskih znakova, sintaksa specijalnih nizova) sintaksa zamjenskih znakova:
. zahvaa bilo koji znak A.A Zahvaa bilo koji troslovni niz znakova koji poinje i zavrava s A. PRIMJER: A.A zahvaeni stringovi: AA AbA ABA AzA A.A nezahvaeni stringovi: A A AbbA A__A AokoA A.LA

^ oznaava poetak reda ^Koliko je sati zahvaa liniju koja poinje stringom "Koliko je sati" ^\d PRIMJER: ^Koliko je sati zahvaeni stringovi: "koliko je sati .. .." ^\d zahvaeni stringovi: 1ds 0ABD nezahvaeni stringovi: zahvaa liniju koja poinje brojem

"Koliko je sada sati" nezahvaeni stringovi: _987h d0d

189/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

$ oznaava kraj reda \d$ zahvaa liniju koja zavrava brojem \.$ zahvaa liniju koja zavrava tokom PRIMJER: \d$ zahvaeni stringovi: An52 Bell1 _5 \.$ zahvaeni stringovi: eto. nezahvaeni stringovi: dkkd bell 6_ nezahvaeni stringovi: marko.hr

* trai se nula ili vie zadanih == {0,} D\d*A zahvaa string koji izmeu znakova D i A nema nijednu ili ima vie znamenki PRIMJER: D\d*A zahvaeni stringovi: DA D0123A D01A-KT nezahvaeni stringovi: DBA D1CA DB23A

190/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

+ trai se jedan ili vie zadanih == {1,} D\d+A zahvaa string koji izmeu znakova D i A ima jednu ili vie znamenki PRIMJER: D\d+A zahvaeni stringovi: D1A D0123A D01A-KT nezahvaeni stringovi: DA D1CA DB23A

? nula ili trai se jedan znak == {0,1} 25?6 zahvaa string koji poslije 2 nema nijedan ili ima jedan broj 5 i zavrava sa 6 PRIMJER: 25?6 zahvaeni stringovi: 256 26 256adf nezahvaeni stringovi: 2556 236 2d8

{ } koristi se kad elimo odrediti neko ponavljanje 2(5{2, 4})9 zahvaa sve stringove koji poinju s 2 i imaju min 2 i max 4 broja 5, a sekvenca broja 5 zavrava s 9 PRIMJER: 2(5{2, 4})9 zahvaeni stringovi: 2559 255559 255596 nezahvaeni stringovi: 259 255555555559 250559

191/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

[ ] koristi se kada elimo odrediti listu znakova koje traimo

^[abc] zahvaa svaku liniju koja poinje slovima a, b ili c ^[A-Z] zahvaa svaku liniju koja poinje velikim slovom PRIMJER: ^[abc] zahvaeni stringovi: ako je bGet cuker ^[A-Z] zahvaeni stringovi: A Guru Pas nezahvaeni stringovi: zakon Bget Car nezahvaeni stringovi: aS luk 23pc TF

koristi se kad elimo iskljuiti specijalnu namjenu zamjenskog znaka ili

kad elimo ukljuiti specijalnu namjenu nezamjenskog znaka \.\*.*\\ zahvaeni stringovi su svi oni koji za prvi znak imaju '.', zatim '*'

te nula ili vie bilo kojih znakova i zavravaju znakom '\' PRIMJER: \.\*.*\\ zahvaeni stringovi: .*asdasd\ .*\ nezahvaeni stringovi: .8995\ .*AAA

192/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

koristi se kad elimo postaviti alternativni odabir

rib(a | e) zahvaa string koji kao prva tri znaka ima "rib", a kao etvrti znak ima 'a' ili e (c|C)$ zahvaa linije koje zavravaju s c ili C PRIMJER: rib(a | e) zahvaeni stringovi: zaribati ribe (c|C) $ zahvaeni stringovi: Tko je u dv.C Gdje je Wc nezahvaeni stringovi: ribolov stribor nezahvaeni stringovi: tko je u dv.C ? c.

( ) koristi se za grupiranje izraza (\w\.)(.\d) zahvaa sve one koji poinju slovom, brojem ili underscoreom te kao drugi znak imaju toku, pa bilo koji znak i nakon toga znamenku PRIMJER: (\w\.)(.\d) zahvaeni stringovi: _.d5 A.D4 nezahvaeni stringovi: Dd5 d.dd

193/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

sintaksa specijalnih nizova


'\d' zahvaa jednu znamenku '\d' = [0-9] \d\d\.0\d\* zahvaeni su oni stringovi koji imaju niz: dvoznamenkasti broj zatim toku i 0 te nijednu ili vie znamenki PRIMJER: \d\d\.0\d\* zahvaeni stringovi: 22.05 g22.0 22.088A nezahvaeni stringovi: D22g056 22.988 c8.089

'\D' iskljuuje znamenku '\D' = [^0-9] ^\D\d\d zahvaene su sve linije koje poinju bilo kojim znakom osim broja, a nakon toga imaju dvoznamenkasti broj PRIMJER: ^\D\d\d zahvaeni stringovi: _22dlf g33_.c nezahvaeni stringovi: 555fhdj h5.tz

194/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

'\w' zahvaa slovo, broj ili '_' '\w' = [0-9a-zA-Z_] \w\d\d\w zahvaa sve one nizove znakova koji kao prvi znak imaju broj, slovo ili '_', kao drugi i trei znak imaju dvoznamenkasti broj, a zadnji znak imaju isti kao i prvi PRIMJER: \w\d\d\w zahvaeni stringovi: 5556as d99d456 nezahvaeni stringovi: s5aff 7aaa

'\W' iskljuuje bilo koje slovo, broj ili '_' '\W' = [^0-9a-zA-Z_] \d\W\d zahvaa sve one nizove znakova koji kao prvi znak imaju za broj, kao drugi znak ne smiju imati broj, slovo ili '_', a kao zadnji znak moraju imati broj PRIMJER: \d\W\d zahvaeni stringovi: 26 2.6 nezahvaeni stringovi: 2a5 222

195/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

'\b' zahvaa rijei koje imaju odreene znakove na rubovima rijei [0-9]\b zahvaa sve "rijei" koje kao prvi i zadnji znak imaju broj PRIMJER: [0-9]\b zahvaeni stringovi: 0fshdf0 1g9 987 nezahvaeni stringovi: ad9 _99s 99dl.

'\B' iskljuuje rijei koje imaju odreene znakove na rubovima rijei [0-9]\B zahvaa sve rijei koje nemaju znamenku kao prvi i zadnji znak PRIMJER: [0-9]\B zahvaeni stringovi: adf pl89pp nezahvaeni stringovi: 123 1vf.

'\s' zahvaa bilo koji white space

Znak \f \n \r \t \v \r+\f

Opis Form-feed (poetak reda) Linefeed (novi red na poetak) Carriage return (novi red) Tab Vertical tab

196/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

'\s' = [ \t \n\r\f\v]

^\s zahvaa sve linije koje poinju white spaceom PRIMJER: - za primjer smo odredili da toka oznaava poetak linije - poetak linije ->' . ' ^\s . zahvaeni stringovi: Ides u ducan.. nezahvaeni stringovi: .idem

'\S' iskljuuje bilo koji white space '\s' = [^ \t \n\r\f\v] ^\S zahvaa sve linije koje ne poinju white spaceom PRIMJER: - za primjer smo odredili da toka oznaava poetak linije - poetak linije ->' . ' ^\S zahvaeni stringovi: .idem . nezahvaeni stringovi: Ides u ducan..

'\<' poetak rijei 9\< zahvaa sve rijei koje poinju brojem 9 PRIMJER: 9\< zahvaeni stringovi: 9idem 945 nezahvaeni stringovi: a9cd 899

197/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

'\>' kraj rijei A\> zahvaa sve rijei koje zavravaju slovom A PRIMJER: A\> zahvaeni stringovi: 1233A DA nezahvaeni stringovi: 1233 Da

'\A' poetak stringa PRIMJER: \A... zahvaa prva tri slova nekog stringa \A... zahvaeni stringovi: Tada se zbilo... nezahvaeni stringovi: f\n

\A zahvaa poetak stringa isto kao ^, samo to ^ uvijek zahvaa nakon \n

'\Z' kraj stringa PRIMJER: ...\Z zahvaa zadnja tri slova nekog stringa ...\Z zahvaeni stringovi: Tada se zbilo...\n nezahvaeni stringovi: f\n

\Z zahvaa string ispred \n, a ako ne postoji string, moe zahvatiti i \n, za razliku od $ koji uvijek zahvaa ispred \n

198/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Lookahead Assertions
(?=regEx) nalazi li se ispred...

foo(?=bar) vs. foobat Najprije se usporeuje prvi dio regEx-a "foo" sa stringom "foobat". Usporedba se izvrava kao to smo objasnili. Imamo poklapanje "foo" s prva tri slova stringa "foobat". Nakon toga kree regEx generator s drugim dijelom usporedbe "bar" vs. "bat". Imamo dva pogotka, ali 'r' ne pogaa 't' pa imamo promaaj. foo(?=bar) vs. "foobar" Pogodak! Generator zahvaa foo jer se iza nalazi bar. \t(?=MATEMATIKA) Traimo pogodak na liniji: MATEMATIKA Pogodak na matematici 2. (?!regEx) da li se ispred NE nalazi ... MATEMATIKA 2 TALIJANSKI ...

Traimo pogodak nad imenima fajlova koji nemaju ekstenziju "bat" ili "exe". .*[.](?!bat$|exe$).*$ Imamo pogodak na svakoj fajlu koji ne zavrava s "bat" ili "exe".

199/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Lookbehaind Assertions
(?<=regEx) da li se iza nalazi ...

(?<=a)b vs. "thingamabob" Generator se kree znak po znak i uvijek radi korak prema poetku stringa te usporeuje sadraj zagrade. Ako ima pogodak, gleda znak iza i usporeuje ga sa znakom iza zagrade. (?<!regEx) da li se iza ne nalazi ...

(?<!a)b vs "cab" promaaj. (?<!a)b vs "bed" pogodak. (?<!a)b vs "debt" pogodak.

Primjena regularnih izraza na nekim uniX alatima EGREP PRIMJER: Datoteka tel_imenik /* Ana, Ban Alex, France Indi, Car Elvis, Potrag Marko, Zeus Zoran, Yevs */ egrep "^A" tel_imenik 3398-000 5598-999 8895-977 9989-771 1189-001 9987-573

200/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Ana, Ban Alex, France

3398-000 5598-999

PRIMJER: egrep "[xX]" tel_imenik Alex, France egrep ' ( Indi|Elvis) ' tel_imenik Indi, Car Elvis, Potrag 8895-977 9989-771 5598-999

PRIMJER: zo@linux:~> cat srijeda alan nije napisao nista od onoga sto je trebao, sada mu je dobro. aln nije napisao nista od onoga sto je trebao, sada mu je dobro. alau nije napisao nista od onoga sto je trebao, sada mu je dobro. alan nije napisao nista od onoga sto je trebao . alanu je dobro. zo@linux:~> egrep -e '^alan[u]?[ \ta-zA-Z]*je[ \tA-Zaz,]*dobro\.?$' srijeda alan nije napisao nista od onoga sto je trebao, sada mu je dobro. alanu je dobro. zo@linux:~> Telefonski brojevi: zo@linux:~> cat srijeda 3893-464

201/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

3893 -986 9236- 563 2359 - 323 9885-9663 11-66666 2356-99 6 55555-666 zo@linux:~> egrep -E '^[0-9]{4}[ \t]?-[ \t]?[0-9]{3}$' srijeda 3893-464 3893 -986 9236- 563 2359 - 323 zo@linux:~> Floating point + int: zo@linux:~> cat srijeda 2566.56555 25985526.322 256.325 6596 56...5544 256.3. 256.23 .32 zo@linux:~> egrep -E '^[0-9]+\.?[0-9]+$' srijeda 2566.56555 25985526.322 256.325 6596 256.23 zo@linux:~> Ako elimo samo floating point brojeve:

202/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

'^[0-9]+\.[0-9]+$' Ako elimo samo int brojeve: '^[0-9]+$'

PRIMJER: Lg.txt MANU GNO GNO EXI EXI LOGIN LOGOUT LOGIN LOGOUT MANU LOGOUT LOGIN 01.01.2004. 12:00 01.01.2004. 12:38 01.01.2004. 23:58 02.01.2004. 23:59 03.01.2004. 23:15 03.01.2004. 23:29 03.01.2004. 23:29 03.01.2004. 23:30 04.01.2004. 09:00 04.01.2004. 09:05 04.01.2004. 10:01 04.01.2004. 10:03 04.01.2004. 10:05

ZORAK LOGIN MANU LOGIN ENA LOGIN ZORAK LOGOUT SETER LOGIN MANEK SEKOviN

LOGIN LOGIN

MARA LOGIN MANU LOGOUT ZORAK LOGIN SEKOviN INED ENA MARA LOGOUT LOGIN LOGOUT

04.01.2004. 11:59 04.01.2004. 12:47 04.01.2004. 23:00 04.01.2004. 12:59 04.01.2004. 13:59 04.01.2004. 15:08 04.01.2004. 16:00 04.01.2004. 16:07 04.01.2004. 16:26 05.01.2004. 00:05 05.01.2004. 06:01 05.01.2004. 08:02 05.02.2004. 09:08

LOGOUT

SETER LOGOUT MANEK INED EXI LOGOUT LOGIN

LOGOUT

BREZ LOGIN MANU LOGIN

203/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

ZORAK LOGOUT MANU LOGOUT ZORAK LOGIN ZORAK LOGOUT EXI EXI EXI EXI LOGIN LOGOUT LOGIN LOGOUT

05.02.2004. 09:09 05.02.2004. 10:59 06.02.2004. 11:55 06.02.2004. 12:59 06.02.2004. 13:05 06.02.2004. 13:00 10.02.2004. 08:00 10.02.2004. 08:01 12.02.2004. 09:05 12.02.2004. 09:58 13.02.2004. 08:08 LOGOUT 14.02.2004. 09:05

SETER LOGIN SETER LOGOUT SETER LOGIN

SETER

MANU login & logout za 1 mjesec. zo@linux:~> egrep -E '^MANU[^\D\S]*(0.\.01\.2004\.)' lg MANU LOGIN 01.01.2004. 12:00 MANU LOGOUT 01.01.2004. 23:58 MANU LOGIN 03.01.2004. 23:30 MANU LOGOUT 04.01.2004. 12:47 zo@linux:~> MANU login & logout za 2 mjesec. zo@linux:~> egrep -E '^MANU[^\D\S]*(0.\.02\.2004\.)' lg MANU LOGIN 05.02.2004. 09:08 MANU LOGOUT 05.02.2004. 10:59 zo@linux:~> Sve aktivnosti u 23 satu u 01 mjesecu bilo koji dan.

204/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

zo@linux:~> egrep -E '^[^\D\S]*(0.\.01\.2004\..)(23)' lg MANU LOGOUT 01.01.2004. 23:58 GNO EXI EXI LOGOUT 02.01.2004. 23:59 LOGIN 03.01.2004. 23:15 LOGOUT 03.01.2004. 23:29

ZORAK LOGIN 03.01.2004. 23:29 MANU LOGIN 03.01.2004. 23:30 ZORAK LOGIN 04.01.2004. 23:00 zo@linux:~> Svi Logout-ovi u 23 satu u 01 mjesecu bilo koji dan.

zo@linux:~> egrep -E'LOGOUT[^\D\S]*(0.\.01\.2004\..)(23)' lg MANU LOGOUT 01.01.2004. 23:58 GNO EXI LOGOUT 02.01.2004. 23:59 LOGOUT 03.01.2004. 23:29

zo@linux:~> Svi login-ovi setera. zo@linux:~> egrep -E '^SETER.?LOGIN[^\D\S]*(1([09]?)\.02\.2004\..)' lg SETER LOGIN 10.02.2004. 08:00 SETER LOGIN 13.02.2004. 08:08 zo@linux:~> Svi logout-ovi setera. zo@linux:~> egrep -E '^SETER.?LOGOUT[^\D\S]*(1([0-9]?)\.02\.2004\..)' lg

205/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

SETER LOGOUT 12.02.2004. 09:05 SETER LOGOUT 14.02.2004. 09:05 zo@linux:~>

PRIMJER: E-mail addr filter. zo@linux:~> cat ma2 mali_fl@pl_hr mali_fl@@pl_hr jhjh??@dfd_pl hjlsll_@ww mali.pes@yoki.hr mali-.pes@xor.mg. mali-.pes@xor.mg.hl mali....pes@xor.mg .mali.pes@yahoo.com ernest.flego@malibu.23 endel.fdu@kos.de.ff.dd ma-Exvest@net.hr zo@linux:~> egrep -E '(^([a-zA-Z0-9-_])+)\.?[a-zA-Z0-9_]*[@]{1}([a-zA-Z0-9]+)\.{1}([a-zA-Z]{2,10})(?(\.)[a-z-A-Z]{2,3}|[a-zA-Z]{0,3})' ma2 mali.pes@yoki.hr mali-.pes@xor.mg.hl ma-Exvest@net.hr IP addr filter

206/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

ip.wpad /* 158.988.456.235 163.254.252.111 111.189.299.266 11.58.566.233 */ zo@linux:~> egrep -E '(25[0-5]|2[0-5][0-9]|[01][0-9][09]\.25[0-5]|2[0-5][0-9]|[01][0-9][0-9]\.25[0-5]|2[0-5][0-9]|[01][0-9][0-9]\.25[0-5]|2[05][0-9]|[01][0-9][0-9])' ip.wpad 163.254.252.111 zo@linux:~> AWK PRIMJER: F1/* ime darko darko marin eston narav */ awk_/* $5 ~/[0]/ {print $0} $5 ~ /[0]/ {lines++} END{print "Broj duznika:",lines} */ prezime puh on draget 4 sret tezak 4 7 marke kolicina kocke 1 7 buli plast 0 kugla kocke naziv 0 1 0 1 1 placeno marko puzla 5

207/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

zo@linux:~> awk -f awk_ f1 marko puzla darko on narav tezak Broj duznika: 3 zo@linux:~> Ili zo@linux:~> awk '$5 ~/[0]/ {print $0} $5 ~ /[0]/ {lines++}END{print "Broj duznika:",lines} ' f1 marko puzla darko on narav tezak Broj duznika: 3 zo@linux:~> vi supstitucija u vi ex modu 7 4 5 kocke 0 kocke 0 marke 0 7 4 5 kocke 0 kocke 0 marke 0

PRIMJER: zo@linux:~> cat sub1 function(x+1,x,x+2) zo@linux:~> ex sub1 "sub1" 2L, 14C Entering Ex mode. Type "visual" to go to Normal mode.

208/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

:%s/function(\([^,]*\),\([^,]*\),\([^,]\))/function(\2,\1,\3)/g :wq

zo@linux:~> cat sub1 function(x,x+1,x+2)

PRIMJER: zo@linux:~> cat sub2 Marko Blazevic, Jadranka Muzic Parduk, HR, ,APL ,HR, 10000 Zagreb SLO,21100 Ljubljana 21000 Split ,42000 Varazdin

Melten Bukrest, SmartNet, Gonar Tenser, Siemens,HR Drago Mio,Endor-Soft zo@linux:~> ex sub2 "sub2" 6L, 212C

,BIH, 50000 Sarajevo

Entering Ex mode. Type "visual" to go to Normal mode. :%s/\([^,]*\),\([^,]*\),\([^,]*\),\(.*\)/\1,\3,\4,\2/ :wq zo@linux:~> cat sub2 Marko Blazevic, HR, Melten Bukrest, Jadranka Muzic 10000 Zagreb, SLO,21100 Ljubljana, ,HR, 21000 Split,APL Siemens Parduk SmartNet

Gonar Tenser,HR ,42000 Varazdin ,

Drago Mio,BIH, 50000 Sarajevo,Endor-Soft

209/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

zo@linux:~> ex sub2 "sub2" 6L, 212C Entering Ex mode. Type "visual" to go to Normal mode. :%s/[\t]*,[\t]*/,/g :wq //g[opcionalan] ako elimo da se izraz primijeni na cijelu liniju, //inae samo na prvi pogodak zo@linux:~> cat sub2 Marko Blazevic,HR,10000 Zagreb,Parduk Melten Bukrest,SLO,21100 Ljubljana,SmartNet Jadranka Muzic,HR,21000 Split,APL Gonar Tenser,HR,42000 Varazdin,Siemens Drago Mio,BIH,50000 Sarajevo,Endor-Soft zo@linux:~> zo@linux:~> cat txt 16:30-19:00 MAT II DV.F101 19:00-21:20 DV.F101 16:30-18:00 MAT II DV.F101 18:10-21:20 UNIX DV.F101 16:30-18:00 NWP DV.F101 18:10-21:20 DV.F112 13:15-14:50 8:00-9:35 DV.F02 9:45-13:05 PIN DV.F02

TALIJANSKI

EKONOMIKA

NWP(labosi?)

210/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

PIN(labosi) DV.F111 zo@linux:~> ex txt

"txt" 12L, 301C Entering Ex mode. Type "visual" to go to Normal mode. :%s/MAT/MATEMATIKA/g MATEMATIKA II :wq zo@linux:~> cat txt 16:30-19:00 MATEMATIKA II DV.F101 19:00-21:20 EKONOMIKA DV.F101 16:30-18:00 MATEMATIKA II DV.F101 18:10-21:20 UNIX DV.F101 16:30-18:00 NWP DV.F101 18:10-21:20 NWP(labosi?) DV.F112 13:15-14:50 PIN(labosi) DV.F111 zo@linux:~> cat txt1 Kako bismo ubrzali stranicenje, trebamo podrku hardvera - asocijativnu memoriju. TLB je hardverski ureaj koji kesira polja tabele stranica. Postoje specijalne instrukcije kojima OS moe upravljati TLB-om. Tipina veliina TLB-a je 8-2048 ulaza. zo@linux:~> ex txt1 "txt1" 4L, 246C 8:00-9:35 TALIJANSKI DV.F02 9:45-13:05 PIN DV.F02 MATEMATIKA II NWP TALIJANSKI

211/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima RegEx

Entering Ex mode. Type "visual" to go to Normal mode. :%s/TLB/Translation Look-Aside Buffer/g 3 substitutions on 3 lines :wq

zo@linux:~> cat txt1 Kako bismo ubrzali stranicenje, trebamo podrku hardvera - asocijativnu memoriju. Translation Look-Aside Buffer je hardverski ureaj koji kesira polja tabele stranica. Postoje specijalne instrukcije kojima OS moe upravljati Translation Look-Aside Buffer-om. Tipina veliina Translation Look-Aside Buffer-a je 8-2048 ulaza. zo@linux:~>

Jedini zakljuak koji moemo donijeti vezan uz regularne izraze je taj da regularni izrazi bez obzira na to kako vam se inili na poetku u nezamislivoj mjeri olakavaju posao, ako se ne slaete sa tom tvrdnjom pokuajte sami napisati rutinu za provjeru e-maila koja e obuhvaati sve sluajeve iz primjera.

212/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

Mario Strini

VI EDITOR

213/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

UVOD
VI je screen based editor, najee koriten na UNIXoidima. Osnovni razlog uspjenosti VI editora su mnoga svojstva koja pomau programerima, ali i mnotvo mogunosti koje nudi u, nazovimo, svakodnevnom editiranju file-ova. esta je pojava da ga poetnici izbjegavaju upravo zbog mnotva mogunosti koje nudi. Osim VI-a postoje jo dva standardna UNIX editora, to su: ed linijski orijentiran editor, prilino kompliciran za uporabu ex linijski editor praktino jednakih mogunosti kao i VI

Startanje:
VI prua mogunost kreiranja novih ili editiranja starih dokumenata. Naredba za pokretanje je: VI [filename] (filename je opcionalan) Ukoliko se prilikom pokretanja ne navede ime file-a potrebito je prilikom snimanja dati ime. Prilikom prvog pokretanja ekran je ispunjen tildama (~) s lijeve strane ekrana. Na dnu (ukoliko je naveden filename) pisat e neto poput: filename lines 21, 400 characters (ime file-a, broj linija i broj znakova) Ukoliko file nije postojao pisat e neto poput: newfile [newfile] Za pokretanja bez imena file-a (bilo starog ili novog imena) donja linija bit e prazna.

214/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

MODOVI RADA:
VI editor ima dva moda rada: komandni insert

Komandni mod:
Omoguuje unos komandi i manipulaciju tekstom. Za ulazak u komandni mod potrebito je pritisnuti dirku Escape (Esc)(prilikom startanja VI se i nalazi u komandnom modu). Pojavit e se : u oekivanju komande. Naredbe su obino duge jedan (1) ili dva (2) znaka. Za prelazak u insert mode koriste se naredbe a i i. Format naredbi je: [count] komanda [where] Count je broj koji poinje sa 1-9 i odnosi se na broj znakova na koji elimo imati uinak. Npr. naredba x20 e obrisati 20 znakova. Where govori na koliko linija elimo uinak naredbe (takoer, moe biti i naredba za pomicanje kursora. Jednostavne Naredbi: a h i ulazak u insert mode mie kursor lijevo jednu poziciju ulazak u insert mode otkucani znakovi e biti umetnuti prije trenutne

pozicije kursora. Ukoliko navedemo count sav tekst koji je umetnut bit e ponovljen count puta j k l r u pomie kursor jednu liniju dolje pomie kursor jednu liniju gore pomie kursor desni jednu poziciju mijenja znak pod kursorom (count za zamjenu vie znakova) povrat zadnje naredbe (undo)

215/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

x q q! w

brie znak pod kursorom (count za obrisati count znakova) naputanje VI editora (ukoliko je dokument mijenjan dobit emo naputanje bez snimanja (nema upozorenja) snimanje (moe se navesti iza w ime file-a)

upozorenje)

wq snimiti i napustiti

Text baferi u VI
VI ima 36 bafera sa spremanje dijelova teksta i bafer ope namjene. Kad god je neki dio teksta obrisan ide u bafer ope namjene ali se moe pohraniti i u drugi bafer ako se tako specificira. Bafer se specificira naredbom iza koje slijedi broj ili slovna oznaka bafera. Na primjer: mdd znai koristi bafer m i obrii trenutnu liniju ili mp kopira sadraja bafera m(uradi paste)

Sjeenje (cut) teksta


Naredba koju obino koristimo za sjeenje (cut) texta je d. Kombinacije naredbe d: dd brie liniju d^ - brie od pozicije kursora do poetka linije d$ - brie od pozicije kursora do kraja linije dw brie od trenutne pozicije kursora do kraja rijei 3dd brie tri linije teksta od trenutne pozicije prema dole Postoji i naredba y koja funkcionira na slinom principu koja uzima tekst bez brisanja.
216/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

Lijepljenje (pasting)
Naredbe za lijepljenje su p i P. Jedina razlika meu njima je u relativnoj poziciji kursora gdje lijepe. p lijepi specificirani ili opi bafer poslije pozicije kursora, dok P p lijepi specificirani ili opi bafer prije pozicije kursora. Specifiranje counta prije paste naredbe lijepi tekst count puta.

Indentacija i provjera
VI editor ima sklop osobina koje mu omoguuju pomo pri programiranju. Postoji varijabla kojom moemo podesiti identaciju za svaki nivo ugnjedavanja koda. Varijabla je sw. Na primjer: :set sw=5 (podesit e pomak na 5). Naredbe za indentaciju: << Pomie trenutnu liniju na lijevo za irinu jednog pomaka >> Pomie trenutnu liniju na desno za irinu jednog pomaka Posebno zgodna osobina VI editora je to to omoguuje provjeru koda za viseim zagradama. Naredba % e traiti lijevu pripadajuu zagradu.

Pretraivanje rijei i znakova:


VI posjeduje dva naina pretrage: po znakovima po rijeima

217/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

Za traenje stringova koristimo naredbe: / i ?. Jedina razlika izmeu ove dvije naredbe je u tome to / trai string prema naprijed, dok naredba ? trai string prema natrag.Naredbe n i N ponavljaju prethodnu naredbu u istom ili suprotnom smjeru. Neki znakovi u VI-u imaju posebno znaenje stoga je ispred njih potrebito staviti \ (backslash) da bi bili ukljueni u pretragu. Specijalni znakovi: ^ - poetak linije . odgovara jednom znaku - oznaava 0 (nula) ili vie znakova $ - kraj linije [ - poetak seta pripadajuih znakova < - krak rijei >- poetak rijei Naredbe f i F trae znak na trenutnoj liniji.Naredba f trai naprijed, dok F trai unatrag. Naredbe t i T trae znak na trenutnoj liniji, ali t pomie kursor na poziciju prije traenog znaka (traei unaprijed), dok T pretrauje unatrag do znaka prije traenog. Gore navedene naredbe f i F, te t i T mogu biti ponovljene koristei ; ili , gdje: ; ponavlja pretragu u istom smijeru, dok , to radi u obrnutom smijeru.

218/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

PODEAVANJE VI-A
Mogue je podesiti nain na koji se VI ponaa i to se radi naredbom :set. Edit opcije raspoloive naredbom set: noautoindent autoprint noautowrite nobeautify nodoubleescape /usr/lib/tags noedcompatible noerrorbells noexrc flash hardtabs=8 noignorecase keyboardedit keyboardedit! nolisp nolist paragraphs=IPLPPPQPP prompt noreadonly redraw remap report=5 scroll=11 sections=NHSHH shell=/bin/csh shiftwidth=8 LIpplpipnpbp term=xterm noterse timeout timeoutlen=500 ttytype=xterm warn window=23 HUuhsh+c wrapscan wrapmargin=0 nowriteany magic mesg nmodelines nonumber nooptimize noshowmatch noshowmode noslowopen tabstop=8 taglength=0 tags=tags

directory=/tmp nonovice

Nekim od ovih opcija je potrebito dodijeliti vrijednost sa =, dok su druge set ili not set. Primjer: :set autoindent - Ova opcija e osigurati da svaka slijedea linija ima istu indentaciju :set mesg za aktiviranje poruka ili :set nomesg ako ne elimo poruke :set number ispisuje broj linije s lijeve strane :set warn upozorava da li je file snimljen ili ne :set wi=xx podeava broj linija koje VI koristi (xx)

219/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

:set ws ako je ova opcija upaljena ako ne pronae eljeni string poinje pretragu s poetka teksta :set wm xx automatski "word wrap", to znai da e prei u novu liniju poslije odreenog broja znakova (xx mora biti vei od 0)

220/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

SKRAENICE I MAPIRANJE DIRKI:


Veoma korisna naredba u VI-u je naredba skraivanja naredbi (abbreviate command). Naredba izgleda ovako: :ab string thing to substitute for

Primjer: Ako smo otkucali neto poput Pero Peric huuuuuuuuuuuuuum i ne elimo to stalno ponavljati moemo napisati: :ab Pe Pero Peric huuuuuuuuuuuuuum Sada kad otkucamo Pe pojavit e se: Pero Peric huuuuuuuuuuuuuum

Skraenice se mogu ukinuti. Naredba za to je unabbreviate. U prethodnom primjeru bi bilo: :una Pe Za listu skraenica otkucati: :ab. Druga veoma korisna naredba je naredba za mapiranje.Postoje dvije vrste mapiranja u komandom i u insert modu. Ove dvije komande su: :map :map! Mapiranje radi slino skraenicama, da se sekvenca tipki i potom sekvenca za zamjenu. EXINIT Environment Variabla and the .exrc file: Postoje dva naina za prilagoavanje(customize) VI-a korisniku. Ako kreirate file .exrc u svom home direktoriju, sve komande tamo e biti itane prilikom startanja VI-a. Drugi nain je da podesimo varijablu EXINIT. Opcije e biti smjetene u vaem shellsetup file-u. Ako koristite /bin/csh (C-Shell) koristite ovu naredbu: setenv EXINIT '...'

221/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

Ako koristite /bin/sh or /bin/ksh koristite ovu naredbu: export EXINIT EXINIT='...' Umjesto ... stavite naredbu koju elite, na primjer za C shell: setenv EXINIT 'set ai nu wm=3' Ako elite staviti vie od jedne naredbe odvojite naredbe uspravnom crtom (|). Primjer: setenv EXINIT 'set ai nu wm=3|map g G' Ako elite kreirati file .exrc moete staviti iste stvari u njega kao to je napisano pod navodnicima poslije EXINIT.

222/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

POVRAT PODATAKA
Vi editira privremenu kopiju vaeg file-a i kad je editiranje zavreno ili kad snimimo od mijenja sadraj privremene kopije sa novom. Ako neto krene naopako dok editirate file VI e pokuati snimiti bilo kakav rad koji je u tijeku i snimiti ga za kasniji povrat. (Ako VI umre dok radite na file-u on e vam poslati e-mail kako ga povratiti. Opcija r e u tom sluaju biti upotrijebljena prilikom slijedeeg dizanja. Komanda bi trebala izgledati ovako vi r vitalinfo. Naravno, poslije povrata (recoveringa) file je potrebito ponovo snimiti.)

Upozorenja vezana uz rad na radnim stanicama:


Na dvije stvari treba paziti kada radimo sa radnim stanicama(workstations): editiranje istog file-a u isto vrijeme u vie puta promjena veliine ekrana. Poto VI kopira originalni file i snima sadraj kopije u originalni file, ako ste logirani vie od jedan put i editirate isti file vie od jedan put koristei VI, ako snimite na jednom prozoru pa onda na drugom, promjene napravljene prvi put biti e prebrisane. Najsigurnije je uvijek koristiti jednu kopiju file-a.

223/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

PREGLED NAREDBI: Rezanje(cutnig), lijepljenje(pasting) i brisanje(deleting)


specifiranje bafera koji se koristi D brie od trenutne pozicije do kraja linije P lijepi sadraj bafera prije trenutne pozicije kursora X brie znak prije kursora d brie do where (pogledati modove rada) p - lijepi sadraj bafera poslije trenutne pozicije kursora x brie znak na kom je kursor

Umetanje teksta
A dodaje na kraj trenutne linije I ubacuje na poetak linije ulazi u insert mode u novu liniju iznad trenutne pozicije kursora i ulazi u insert mode, znakovi e biti ubacivani prije trenutne pozicije kursora - ulazi u insert mode u novu liniju ispod trenutne pozicije kursora

Kretanje kursora unutar file-a


Ctrl + B skrola nazad jednu stranicu. Count skrola navedeni broj stranica Ctrl + D skrola naprijed pola prozora. Count skrola broj linija Ctrl + F skrola naprijed jednu stranicu. Count skrola navedeni broj stranica Ctrl + H pomie kursor jedan space lijevo. Count pomie navedeni broj mjesta Ctrl + J pomie kursor dole jednu liniju u istoj koloni. Count pomie navedeni broj linija dolje

224/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

Ctrl + M pomie kursor na prvi znak slijedee linije Ctrl + N - pomie kursor dole jednu liniju u istoj koloni. Count pomie navedeni broj linija dolje Ctrl + P Pomie kursor gore jednu liniju u istoj koloni. Count pomie toliko linija gore Ctrl + U Skrola nazad pola prozora. Count skrola toliko linija. $ - pomie kursor na kraj trenutne linije. Count pomie na kraj slijedeih linija % - pomie kursor na mjesto parne zagrade ^ - pomie kursor na prvi non-whitespace znak ( - pomie kursor na poetak reenice ) pomie kursor na poetak slijedee reenice { - pomie kursor na prethodni paragraf. } pomie kursor na slijedei paragraf | - pomie kursor na kolonu specificiranu sa count + - pomie kursor na prvi non-whitespace znak u slijedeoj liniji - pomie kursor na prvi non-whitespace znak u prethodnoj liniji _ - pomie kursor na prvi non-whitespace znak u trenutnoj liniji 0 (Nula) pomie kursor na prvu kolonu trenutne linije B pomie kursor nazad jednu rije preskaui punktuaciju E pomie kursor na kraj rijei preskaui punktuaciju G ide na broj linije specificiran sa count, ako count nije zadan onda ide na kraj file-a H pomie kursor na prvi non-whitespace znak na vrhu ekrana L pomie kursor na prvi non-whitespace znak na dnu ekrana M pomie kursor na prvi non-whitespace znak na sredini ekrana W pomie se naprijed na poetak rijei preskaui punktuaciju b pomie kursor nazad jednu rije. Ako je kursor na sredini rijei, pomie kursor na prvi znak te rijei e pomie kursor naprijed jednu rije. Ako je kursor na sredini rijei, pomie kursor na zadnji znak te rijei h pomie kursor na lijevo jedan znak j pomie kursor dolje jednu liniju k pomie kursor gore jednu liniju
225/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

l pomie kursor na desno jedan karakter w pomie kursor naprijed jednu rije. Ako je kursor na sredini rijei pomie kursor na prvi znak slijedee rijei

Kretanje kursora po ekranu


Ctrl + E skrola naprijed jednu liniju. Count skrola toliko linija Crtrl + Y skrola nazad jednu liniju. Count skrola toliko linija z ponovo iscrtava ekran sa slijedeim opcijama: z<return> stavlja trenutnu liniju na vrh ekrana. z stavlja trenutnu liniju na centar ekrana z- stavlja trenutnu liniju na dno ekrana Ako se stavi count prije z-a on mijenja trenutnu liniju u specificiranu. Npr. 18z stavlja liniju 18 na centar ekrana.

Zamjena teksta:
C mijenja do kraja linije od trenutne pozicije kursora R mijenja znakove na ekranu sa setom znakova unesenih sa Escapeomey. S mijenja cijeli liniju c- mijenja sve dok cc ne promjeni trenutnu liniju. Count mijenja navedeni broj linija. R mijenja jedan znak pod kursorom. Count mijenja navedeni broj znakova s mijenja jedan znak pod kursorom i ide u insert mode. Count mijenja broj znakova. $ e biti stavljen na zadnji znak zamjene

226/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

Traenje teksta ili znakova:


, - ponavlja zadnje f, F,t ili T naredbu u obrnutom redoslijedu / - pretrauje file prema dole traei string specificiran poslije / ; - ponavlja zadnju f, F, t ili T naredbu ? pretrauje file prema gore traei string poslije znaka ? F pretrauje trenutnu liniju unatrag traei znak specificiran poslije F naredbe. Ako pronae pomie kursor na tu poziciju. N ponavlja zadnju pretragu zadanu sa / ili ? ali u obrnutom smjeru T pretrauje trenutnu liniju nazad traei znak specificiran poslije T naredbe i pomie se na kolonu poto je pronae f pretrauje trenutanu liniju traei znak specificiran poslije f naredbe. Ako nae pomie kursor na danu poziciju n ponavlja zadnju pretragu zadanu sa / ili ? t pretrauje trenutanu liniju traei znak specificiran poslije t naredbe i pomie se na kolonu prije znaka ako je pronaen

Formatiranje znakova/linija
~ mijenja case znaka po kursorom < - pomjera linije do where prema lijevo za jednu irinu pomaka << pomjera trenutnu liniju na lijevo i moe biti specificirano sa count - pomjera linije do where prema desno za jednu irinu pomaka << pomjera trenutnu liniju na desno i moe biti specificirano sa count J spaja trenutnu liniju sa slijedeom. Counr spaja navedeni broj linija

Snimanje i izlaz:
Ctrl + \ - naputa VI mode i odlazi u EX mode. EX editor je linijski editor na kom je baziran Vi editor. Komanda za povrat nazad je :vi Q naputa VI i odlazi u EX mode ZZ naputa editor, snima ako ima izmjena

227/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

Miscellany:
Ctrl + G Prikazuje ime file-a i status Ctrl + L isti i ponovo iscrtava ekran Ctrl + R Ponovo iscrtava ekran uklanjajui pogrene linije Ctrl + [ - Escape tipka. Odgaa prethodno danu komandu Ctrl + ^ - ide nazad na prethodno editirani file ! izvrava shell naredbu. & - ponavlja prethodnu :s naredbu . ponavlja zadnju naredbu koja je promijenila file : - poetak tipkanja EX editor naredbi. Naredba je izvrena kad user otipka return @ - ispisuje naredbu spremljenu u baferu U vraa trenutnu liniju u stanje koje je bilo prije no to je kursor uao u liniju m oznaava trenutnu poziciju sa znakom specificiranim poslije m naredbe u vraa zadnju promjenu napravljenu na filu. Ponovno u e negirati prethodno u

228/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima VI editor

ZAKLJUAK
Vi editor predstavlja moan alat za editiranje texta. Iz pobrojane liste naredbi lako je vidljivo da je gotovo teko zamisliti neku operaciju sa tekstom koju VI ne moe izvriti. Osim toga odvojenost modova rada (komandnog i insert moda) u bitnome olakava navigaciju kroz VI. Naredbe su jednostavne i logino postavljene. Stoga nije nimalo udno da je VI postao bazinim editorom UNIX based Operacijskih sustava.

229/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

Matko Peji

EMACS

230/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

UVOD

to je Emacs?
Emacs je besplatan, portabilan, nadogradivi tekst editor. Besplatan znai da je izvorni kod (source code) za Emacs dostupan svima sa pristupom internetu te se moe besplatno kopirati i redistribuirati. Portabilan znai da se Emacs moe pokrenuti na nizu strojeva i radi na nizu operativnih sustava tako da se slobodno moete pouzdati u injenicu da moete koristiti isti program za ureivanje teksta neovisno kojim strojem se sluite. Sa rijei nadogradivi opisuje se trea, ali vjerojatno najvanije karakteristika Emacs-a. Ne samo da moete prilagoditi sve mogunosti Emacs-a tako kako vama najvie odgovara, ve moete isprogramirati Emacs da radi stvari koje njegovim kreatorima nisu uope pale na pamet. Zbog svega ovoga Emacs je izuzetno popularan i uspjean program. Jedini popularniji tekst editor koji se koristi na Linux i Unix strojevima je sveprisutni vi. Ali Emacs nije samo program za obradu teksta. Ako koristite jedan od mnogih poznatijih programskih jezika, Emacs vjerojatno sadri mod koji omoguuje lako editiranje koda u tom jeziku. Kompajliranje, debagiranje , direktna interakcija sa interpreterom, skakanje po kodu na bilo koju poziciju oznaenu simbolom (funkcija ili ime varijable), sve su to opcije koje pisac koda moe koristiti u Emacsu. Emacs takoer sadri programe za itanje pote (mail readers), za itanje vijesti (news readers),www, gopher i FTP klijente, spell checking i psihologa (Rogarian therapist-probati obavezno) Emacs je veinom napisan u Lisp programskom jeziku, a u jezgri se nalazi Lisp interpreter napisan u C-u. Samo osnovni dijelovi Emacsa su napisani u C-u. Emacs je stvoren prije dvadeset godina tako da postoji more razliitih add-on paketa, od kojih vam veina omoguuje stvari o kojima kreator Emacsa nije ni sanjao.

231/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

Varijacije Emacsa i kako je sve poelo


Emacs je ustvari ime za cijelu obitelj tekst editora koji ili nasljeuju ili su inspirirani nekom prethodnom verzijom. Prvi Emacs za Unix stroj bio je Goselim Emacs koji je poslije postao komercijalan pod imenom Unipress Emacs. Kada se danas kae Emacs misli se na GNU Emacs kojeg je napisao Richard Stallman, osniva Free software Fundation, i jo uvijek ga odrava. Vano je napomenuti da postoje dva Emacs editora: Emacs i Xemacs. Xemacs sadri GUI-Graphic User Interface te zbog toga postaje sve popularniji. Mnogi ga ak nazivaju modernom inaicom Emacsa. Meutim veina stvari navedenih u daljnjem tekstu odnosi se na Emacs verziju 20.3, ali se golemi postotak svega toga moe komotno upotrijebiti i za Xemacs.

Kako doi do Emacs editora?


Vrlo lako. Ako koristite jednu od popularnih Linux distribucija kao Debian, RedHat, Slackware, Emacs je vjerojatni jedna od opcija koju moete instalirati. Ako ne, moete lako doi do Emacs source koda i sami ga kompajlirati. Posjetite GNU stranice i pronaite tonu lokaciju za download: http://www.gnu.org/software/emacs/emacs.html.

232/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

TEORIJA I PRAKSA TIPKOVNICE I SKUPOVA ZNAKOVA


Jedan od prvih problema sa kojim se poetnici na Emacs-u susreu je tipkovnica i skup znakova. Budui da je portabilan, Emacs ne moe znati kakvom tipkovnicom se vi sluite i koje sve tipke ta tipkovnica sadri. Sve Emacs komande su 8-bitni ASCII znakovi, meutim neke tipkovnice imaju tipke koje ne odgovaraju nekom odreenom ASCII znaku. To je naroito sluaj na PC i Macintosh tipkovnicama kada su spojene na Unix stroj preko nekog posrednikog ili telekomunikacijskog programa. U tom sluaju, jedini podaci koji teku izmeu tipkovnice i Unix stroja su 8-bitni ASCII bajti. Na primjer, tipina PC tipkovnica ima tipke oznaene sa PAGE UP i HOME, strelicama, funkcijske tipke itd. Ne samo da sve ove tipke nemaju ASCII vrijednosti, ve uope ne generiraju ASCII znake. PC ih moe prepoznati kroz scan codes, ali to se dogaa kada ste spojeni na Unix stroj preko telekomunikacijskog programa i pretisnete neku od ti tipki? Jedna od slijedeih stvari se dogodi, ovisno o telekomunikacijskom programu: Uope se ne poalje ASCII znak Jedan ASCII znak se poalje, ali to je obino obavezan znak koji se razlikuje od jednog telekomunikacijskog programa do drugog Poalje se neka izlazna sekvenca Moe se ak dogoditi da telekomunikacijski program mijenja vrijednost koju odreena tipka poalje ak i kod tipki koje imaju pridruenu ASCII vrijednost!!! (Control-@ je est problem). I na kraju jo i operativni sustav moe zamutiti stvari dodatno. Emacs oekuje da mu je cijeli ASCII znak skup dostupan, ali moe se dogoditi da OS uzurpira neke znake. Najbolji primjer su control-S i control-Q koji se nekad koriste za kontrolu toka. To su vane Emacs komande i morate biti sigurni da ih va telekomunikacijski ili bilo koji drugi program nije oduzeo (Emacs se sam pobrine za OS) . Kod svega gore navedenog Emacs je nemoan. On samo vidi 8-bitne znake koje mu dostavlja OS. Ali ako dobro razumijete va telekomunikacijski program neete imati problema sa Emacs-om i tipkama.

233/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

Napomena: Emacs u nekim sluajevima koristi posebne znakove kao strelice (npr. pod X-om ili kad se vrti pod DOS-m, gdje Emacs razumije dogaaje tipkovnice). Ali preporuka je ne koristiti te tipke ak i kad rade, da bi mogli koristiti Emacs sa bilo kojeg terminala.

Notacija
U nastavku teksta koristiti e se standardna Emacs notacija za opisi utipkavanja: C-x M-x C-M-x RET SPC ESC Za bilo koji x, znak je Control-x Za bilo koji x, znak je Meta-x (vie o Meta znakovima u Za svaki x, znak je Control-Meta-x. Tipka povratka (zapravo C-m). Razmaknica Tipka izlaza, odgovara joj C-[

nastavku teksta).

234/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

NAREDBENA STRUKTURA EMACS-A


Za Emacs svaka udarac tipke je naredba, ak i jednostavni tipke kao A ili z (ispis znakova) su naredbe za umetanje. Znakovi koji ne slue za ispis su naredbe za ureivanje; miu kursor, skrolaju tekst, briu ili kopiraju tekst itd. Svaka naredba ima svoje ime koje moete pronai u dokumentaciji (npr. kill-line, delete- backward-char, ili self-insert-command). Ove naredbe su vezane za pritisak tipki zbog lakog ureivanja. Takvo vezanje tipki i naredbi naziva se key binding ili samo binding (vezivanje). Skup svih vezivanja (binding-a) ini Emacsov skup naredbi (Emacs command set). Meutim Emacs je nadogradiv, promjenjiv editor. To znai: Vezivanje moe biti razliito za razliite modove ovisno o nadogradi Vezivanje moe biti razliito za razliite modove ovisno o promjenama U ovom tekstu opisana su standardna vezivanja.

Jednostavne tipke
Postoji 95 raznih ASCII znakova koji se mogu ispisati i svi su vezani uz self-insertcommand da bi se mogli umetnuti u tekst kada su odabrani. Za naredbe ureivanja Emacs koristi sve control znake: C-a, C-b itd. Ali to je jo 32 znakova, a Emacs ima vie od 32 naredbe za ureivanje. 128 znakova u gornjoj polovici ASCII-a nisu zauzeti, ali kako ih otipkati? Emacs koristi Meta tipku koja radi na isti nain kao i Control i Shift tipke, tj. ne generira znak sama po sebi ve se koristi za modifikaciju nekog drugog znakova sa tipkovnice.Meta tipka generira isti znak uz koji je pritisnuta, ali sa bit setom vieg reda. To nam daje pristup znakovima kao Meta-a, Meta-b itd. (Postoji takoer i Meta-A, ali da bi se izbjegla mogua zabuna metaznakovi tampanih slova odgovaraju metaznakovima pisanih) to je sa control znakovima sa bit setom vieg reda? To su potpuno validni metaznakovi; oznaavaju se sa C-M-a, itd. Za njihov odabir zajedno se dre pritisnute Control i Meta tipke. Budui da su i Control i Meta Shift tipke M-C-a i C-M-a je zapravo isto. Zbog ujednaenosti uglavnom se pie M-C-a.

235/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

Prefiksne ili sloene tipke


Control i meta tipke plus znakovi za ispis daju nam zajedno 256 mogue kombinacije tipki, ili 160 naredbi za ureivanje, kada se oduzmu samo insertirajui znakovi. Ali Emacs ima vie od 160 naredbi za ureivanje! Zbog toga takoer koristimo prefiks naredbe. Prefiks naredba je tipka koja kada ju pritisnemo nita ne ispisuje, ve eka odabir neke druge tipke zajedno sa njom inei jednu naredbu. Svaka prefiks naredba dodaje jo 256 moguih kombinacija za koje moemo vezati odreene naredbe. Prefiks naredbe obino grupiraju naredbe koje su na neki nain povezane. Standardne prefiks naredbe su: C-c Koristi se za naredbe koje su specifine za odreeni mod tako da bi se mogle koristiti za razliite naredbe ovisno o kontekstu. To su najvarijabilnije Emacs naredbe. C-h Koristi se za Help naredbe C-x Ovaj prefiks se najee koristi za naredbe za manipulaciju datoteka, prozora i meuspremnika. Prefiksi nam daju dodatnih 768 mogunosti i zbroj se penje na 928. Ali Emacs ima vie od 928 naredbi! Zbog toga postoji mogunost jedne subnaredbe od prefiks naredbe za neku prefiks naredbu, kao npr C-x 4 ili C-x v , svako takvo vezivanje daje dodatnih 256 mogunosti kombiniranja tipki. Postoji niz takvih dvoznakovnih prefiksa, ali su dosta specijalizirani i ne sadre cijeli skup od 256 naredbi. Postoje ak i tro-znakni prefiksi, ali veina ljudi nee priznati da ih koristi.

Koritenje produenih naredbi (extended commannds)


Logian zakljuak svega gore navedenog je da ak i najvei Emacs zaljubljenik ne moe znati sve naredbe. Neke naredbe se koriste vrlo rijetko, i obino je lake nai dugo ime naredbe (koristei info, Emacs-ov online sustav za pomo) i utipkati ga direktno. Postoji jedna Emacs naredba koja se koristi za izvravanje bilo koje druge naredbe: Mx. Kada upiete M-x Emacs vas trai da upiete dugo ime naredbe i onda ju izvri.

236/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

ESC prefiks
Ne postoji drugi prefiks koji je istovremeno vrlo vaan i potpuno suvian kao ESC prefiks. Sve tipkovnice nemaju Meta tipku koja postavlja bit vieg reda (high order bit). Na PCu na kojem se vrti Emacs Alt tipka se koristi kao Meta, ali na PC-u koji je povezan sa Unix strojem preko nekog telekomunikacijskog programa Alt tipka moe, ali i ne mora raditi. Sreom ak i ako nemate Meta tipku nije sve izgubljeno. Kao zamjenu koristite ESC prefiks. Dakle M-a postaje ESC a, C-M f postaje ESC C-f (ne zaboravite da C-M-f = M-C-f) Postoji samo jedna kvaka: ESC nije shift tipka, ve validan ACSCII znak. Dakle nemojte pokuavati drati ESC pritisnutim dok pritiete neku drugu tipku, koristite ga kao prefiks i otipkajte ga odvojeno. Ako ga zadrite pritisnutim sekundu predugo vjerojatno ete izazvati autorepeat to bi vas moglo vrlo zbuniti.

Previe naredbi?
Kako popamtiti sve ove naredbe? Jednostavno: nikako.Veina korisnika Emacs-a naui samo osnovne naredbe i sa tim su potpuno zadovoljni. Neki naue osnovne naredbe i jo neke koje im trebaju za neke posebne zadae. Neki konstantno ue nove naredbe da bi ubrzali editiranje. Vrlo mali broj korisnika doe do stupnja da piu svoje vlastite, potpuno nove Emacs naredbe.

237/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

DATOTEKE, MEUSPREMNICI I PROZORI (FILES, BUFFERS AND WINDOWS )


Emacs sadri tri (zapravo etiri) strukture koje su neodvojivo povezane i vrlo vane za razumjeti: File (datoteka) - Datoteka je zapravo Unix datoteka na disku. Nikada ne ureujete ovu datoteku, ve uitavate kopiju u Emacs meuspremnik (buffer) i piete kopiju mauspremnika na disk da ju spremite. Meuspremnik (buffer) - Meuspremnik je interna podatkovna struktura koja sadri tekst koji ureujete. Emacs moe imati vie aktivnih meuspremnika u isto vrijeme. Veina, ali nikako svi, meuspremnici fu povezani sa datotekom. Meuspremnici imaju imena; meuspremnik koji je aktiviran iz datoteke je gotovo uvijek nazvan po toj datoteci, i kaemo da meuspremnik posjeuje datoteku (a buffer is visiting a file) Prozor (window) - Prozor je va pogled na meuspremnik. Zbog ogranienosti monitora vjerojatno neete moi vidjeti sve vae buffere odjednom. Moete podijeliti ekran u koliko dijelova elite (ili za koliko imate mjesta), ovisno koliko buffera elite vidjeti. Takoer je mogue da vie prozora gledaju razliite dijelove istog meuspremnika.Prozore moete stvarati i brisati kad kod elite, brisanjem prozora ne brie se sadraj meuspremnika. Okvir (frame) - Okvir je slian prozoru, ali se tretira kao posebna cjelina pod X prozorskim sustavom.

Naredbe za manipulaciju datotekama


C-x C-f find-file. Ovo je glavna naredba za uitavanje datoteke u meuspremnik. Kada izvrite ovu naredbu Emacs eka da upiete ime datoteke. Slijedee provjerava da li ve ureujete tu datoteku u nekom drugom meuspremniku, i ako je tako jednostavno skae na ve postojei meuspremnik i ne uitava datoteku ponovo. Ako je provjera negativna otvara se novi

238/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

meuspremnik, naziva se po datoteci i inicijalizira se sa kopijom datoteke. U oba sluaja trenutni prozor prikazuje meuspremnik. C-x C-s save-buffer. Ovo je glavna naredba za spremanje datoteke, tj. za pisanje kopije aktivnog meuspremnika na disk. C-x s save-some-buffers. Omoguuje vam da spremite sve meuspremnike koji posjeuju datoteke, pitajui vas za svaki i nudei nekoliko opcija (spremi, nemoj spremiti, baci pogled pa ga moda spremi, itd.)

Naredbe za manipulaciju meuspremnika


C-x b switch-to-buffer. Pita za ime meuspremnika i prebacuje meuspremnik trenutno aktivnog prozora na taj meuspremnik.Ne mijenja konfiguraciju prozora. Ova naredba e stvoriti novi prazan meuspremnik, ako upiete neko nepostojee ime. Taj meuspremnik nee posjeivati datoteku neovisno kako ga nazovete. C-x C-b list-buffers. Novi prozor se pojavljuje sa popisom svih meuspremnika, dajui ime, obavijest o promjenama, veliinu u bajtima, glavni mod i ime datoteke koju posjeuje. C-x k kill-buffer. Pita za ime meuspremnika i uklanja cijelu podatkovnu strukturu za taj meuspremnik iz Emacs-a. Ako je meuspremnik promijenjen ponuditi e vam se mogunost spremanja. Ovo ne brie pridruenu datoteku. C-x C-q vc-toggle-read-only. Uini meuspremnik read-only ili ga uini read-write ako je readonly

239/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

Naredbe za manipulaciju prozorima


C-v scroll-up. Osnovna naredba za skrolanje naprijed za jedan cijeli ekran. Po defaultu Emacs ostavlja dvije linije sadraja sa prethodnog ekrana. M-v scroll-down. Isto kao i C-v samo se kree unazad. C-x o other-window. Promjena aktivnog prozora. Neprekidan poziv ove naredbe rezultira prolaskom kroz sve prozore, s lijeva nadesno i odozgo prema dole. C-x 1 delete-other-window. Brie sve druge prozore osim aktivnog, inei jedan prozor veliine ekrana. Ova naredba ne brie meuspremnike i datoteke pridruene prozoru. C-x 0 delete-window. Brie samo aktivan prozor, a drugima mijenja veliinu proporcionalno. C-x 2 split-window-vertically. Po vertikali dijeli aktivan prozor u dva. Ovo rezultira stvaranjem novog prozora, ali ne i novog meuspremnika Dva prozora sada gledaju isti meuspremnik. Ovo vam omoguuje gledanje dva dijela meuspremnika istovremeno. C-x 3 split-window horizontally. Po horizontali dijeli aktivni prozor u dva. Ovo rezultira stvaranjem novog prozora, ali ne i novog meuspremnika Dva prozora sada gledaju isti meuspremnik. Ovo vam omoguuje gledanje dva dijela meuspremnika istovremeno. C-M-v scroll-other-window. Radi isto to i C-v ali skrola drugi prozor. Ako imate vie od dva prozora skrola onaj prozor koji bi C-x o uinio aktivnim.

240/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

OSNOVNI KONCEPTI
Vjerojatno je vanije razumjeti ove osnovne koncepte nego znati bilo koju naredbu za editiranje. Naredbe za editiranje su detalji: moete ih i sami nauiti,a ko temeljito obradite osnove.

Ulaenje i izlaenje
Za ui u Emacs jednostavno utipkajte: emacs kada se digne, neete editirati niti jednu datoteku. Sada moete upotrebom odgovarajuih naredbi uitati datoteku za ureivanje. Druga mogunost je da upiete emacs foo.tl i pokrenete Emacs sa inicijalnom datotekom Za izlaz iz Emacsa koristite naredbu C-x C-c (koja je vezana za save-buffer-kill-emacs). Ponuditi e vam se spremanje meuspremnika i izlaz iz Emacsa. Emacs moete i suspendirati (u Unix-su to znai zaustavljanje programa i stavljanje ga u pozadinu) koristei naredbu C-x C-z (koja je vezana za suspend-emacs). Kako ga ponovo pokrenuti ovisi o vaem shell-u, ali je vjerojatno temeljeno na fq naredbi.

Naredbe za samo-umetanje (self inserting commands)


Sada kada ste pokrenuli Emacs moete poeti pisati u njega. Ne postoji potreba za posebnim insert modom ili tako neim; upamtite znakovi za ispis (printing characters) se sami umeu jer su vezani za self-insert-command.

241/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

Ekran
Linija moda (The Mode Line)
Cijeli Emacs ekran je posveen tekstu vae datoteke, osim jedne linije blizu dna: to je linija moda. Ova linija slui za informiranje, nikada ne moete u nju ui. Gotovo uvijek je na neki nain oznaena. Ona ispisuje vane obavijesti (koje se mogu mijenjati) kao: Stanje meuspremnika. Da li je promijenjen, nije promijenjen ili je readonly. Ime datoteke koju ureujete. Glavni mod. Dio datoteke koju vidite na ekranu: All Top Bot Percentage Vidite cijelu datoteku Vidite vrh datoteke Vidite dno datoteke NN% pokazuje postotak datoteke iznad vrha prozora

Mali meuspremnik (The Minibuffer)


Prazna linija ispod linije moda je minibuffer. Emacs koristi minibuffer za prikaz poruka, ali i za input kada vas Emacs trai da upiete neto (traiti e vas da upiete yes ili no kao odgovor na pitanje, ime datoteke za ureivanje, dugo ime naredbe, itd.) Minibuffer je takoer poznat kao echo area, zbog toga to Emacs tu daje jeku pritiska tipke, ako tipkate jako polako.

udne poruke
S vremena na vrijeme Emacs e u minibuffer upisati neku svoju poruku koja, na prvi pogled nema veze sa onim to vi radite. Dvije najee poruke su: Mark set i Garbage collecting.... Prva poruka znai da je Emacs odredio cilj (set a mark) za vas ovisno o vaoj zadnjoj naredbi; automatsko odreivanje cilja je poeljna mogunost za neke naredbe. Druga

242/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

poruka znai da Emacs-ova lisp maina preuzima spremanje (reclaming storage). Ovu poruku moete ignorirati i nastaviti tipkati. Emacs nee izgubiti vae znakove.

Duge linije (Long Lines)


Emacs ne prekida linije automatski, osim ako to od njega ne zatraite. Po defaultu ostavlja linije onoliko duge koliko vi piete. A to je jo vanije ne dira vae duge linije u datotekama (neki editori kao stari vi su rezuckali linije). Moda se ini dosadnim da morate udariti return na kraju svake duge linije, ali to je zapravo defaultna postavka samo za neke modove. Razlog za to je taj to je Emacs editor za programere, a svaki editor koji umee prekide linija bez da mu vi to kaete nije dovoljno pouzdan da se u njemu editira kod. U modovima za ureivanje teksta, Emacs umee prekide linija za vas.

Prekidanje i ponitavanje (Interrupting and Abortiong)


Ponekad e Emacs uiniti neto to ne razumijete: traiti e neke informacije, ili e zapitati kada pokuate neto otipkati, ili e uiniti neto jednako tako zbunjujue. To samo znai da ste pozvali neku naredbu grekom. Kada se tako neto dogodi samo trebati napisati C-q (to je vezano za keyboard-quit). ZO je ASCII BEL znak koji prekida sve to Emacs radi. To e vas izvui iz bilo kojeg pitanja koje vam Emacs postavi, prekinuti e bilo koju parcijalnu sekvencu tipki . Budui da je Emacs potpuno rekurzivan, ponekada ete morati otipkati C-q vie puta, kako bi izali iz rekurzivnog niza naredbi. I za kraj, ako je Emacs potpuno zablokiran, utipkavanje C-q tri puta zaredom brzo e prekinuti to god je uzrok blokade.

Pomo
Emacs ima veliki i opirni online help, koji je dostupan preko help tipke C-h. C-h je prefiks tipka. Pritisnite C-h dvaput i dobiti ete listu podnaredbi; uinite to tri puta i dobiti

243/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

ete prozor koji opisuje sve te naredbe (SPC e skrolat taj prozor). Neke od najboljih help naredbi su: C-h a command-apropos. Trai kljunu rije i onda ispisuje sve naredbe sa tom Kljunom rijei u njenom dugom imenu. C-h k describe-key. Trai pritisak tipke i opisuje naredbu vezanu za tu tipku (ako postoji) C-h i info .Ulazi u Info hipertekst ita dokumentacije (Info hypertaxt documentation reader) C-h m describe-mode. Opisuje trenutni glavni mod i njegove key bindings. C-h p finder-by-keyword. Pokree interaktivni pretraiva Emacs paketa. C-h t help-with-tutorial. Pokree emacs tutorial.

Info
Emacs ima ugraeni hypertext documentation reader, Info. Da bi ga pokrenuli otipkajte C-h i ili M-x info RET. On sadri svoj vlastiti tutorial. Tutorial pretpostavlja da poznajte Emacs otprilike koliko je opisan u ovom dokumentu.

Beskonani Undo i Redo


Jedna od najvanijih Emacs naredbi je undo. Koji se poziva sa C-_. C-_ je validan ASCII znak, ali ga neke tipkovnice ne generiraju pa takoer moete koristiti C-x u--. Undo naredba je vrlo korisna kada uinite neto to niste eljeli. Jedan udarac tipkom sve mijenja unazad.

244/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

Kae sa da Emacs ima beskrajan undo, jer moete izvriti undo nad dugakim nizom naredbi, za razliku od nekih drugih editora. Kaemo da Emacs ima redu jer moete promijeniti smjer dok izvravate undu i tako u stvari pozvati undo na undo. Jednom kada se nauite na ovu mogunost nasmijati ete se na svaki editor koji ju nema. Vrlo je vano da se to prije udomaite sa undo naredbom. Preporua se paljivo itanje undo dijela manuala i puno vjebe.

Backups i Auto Save Mode


Emacs nikad ne mijenja datoteku na disku dok mu vi to ne kaete, ali je vrlo paljiv oko spremanja vaeg rada: Backup datoteke - Emacs uvijek sprema i prolu verziju datoteke kada vi izvrite spremanje. Ako se vaa datoteka zove foo, onda se backup zove foo~. Iako je po defaultu iskljueno, Emacs e imati vei broj prethodnih verzija datoteka za vas, foo.~1~, foo.~2~, foo.~3~. Vi sami odluujete koliko verzija ete spremati. Auto-Save datoteke Emacs po defaultu izvrava auto-save datoteke dok ju ureujete. Auto-save datoteka za datoteku foo se zove #foo#. Ako se Emacs (ili sustav) srui, a vi niste uspjeli spremiti promjene na svojoj datoteci veinu vaeg rada ete moi nai u toj datoteci. Auto-save se, po defaultu dogaa svakih 300 znakova ili kada naleti greka u sustavu.

Completion
Emacs nudi vie mogunosti nadogradnje (completion. To znai da Emacs pokuava zavriti vaa parcijalno otipkana imena datoteka, imena naredbi, itd. DA bi pozvali completion pritisnite TAB.

245/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

Davanje argumenata naredbama


Mnoge Emacs naredbe primaju argumente na isti nain kao i funkcije ili procedure to ine u programskim jezicima. Veina naredbi e vas traiti argumente, npr. naredba za itanje datoteke e vas traiti ime datoteke. Postoji jedna vrsta argumenata koja je toliko esta da postoji poseban nain njihovog prosljeivanja: brojevni argumenti. Veliki broj naredbi e brojevni argument interpretirati na nain da e se toliko puta pozvati. Naredba delete-char (vezana je na C-d) brie jedan znak desno od kursora, ali ako joj se da brojevni argument n, izbrisati e n znakova. Da bi se naredbi proslijedio brojevni argument, npr. 12, otipkajte C-u 12 prije naredbe Ako tipkate dovoljno polako vidjeti ete C-u 1 2U echo podruju (echo area). Onda otipkajte C-d i tako ste naredbi delete-char dali argument 12. Budui da esto ni ne znamo koliko tono puta elimo da se neka naredba ponovi, postoji laki nain za prosljeivanje brojevnih argumenata razliitih veliina. C-u sam po sebi, bez brojki, je jednak brojevnom argumentu 4. Jo jedan C-u mnoi to sa jo 4, inei 16. Slijedee C-u mnoi to sa jo 4 inei 64, itd. Zbog toga se C-u naziva universal argument. Vano je znati da sve naredbe ne interpretiraju brojevne argumente kao broj ponavljanja; neke ih ignoriraju, a neke ih gledaju kao boolean (ili postoji argument ili ne). Proitajte dokumentaciju za naredbu prije nego ju probate.

Citiranje znakova koji su vezani kao naredbe (Quoting characters That Are Bound As Commands)
Ponekada trebamo umetnuti controlni znak u datoteku. Ali kako da umetnemo ESC kada je koristimo kao prefiks naredbu? Odgovor jr: koristimo quoted-insert koji je vezan za C-q. C-q rdi kao prefiks naredba na nain da kada ju napiete ona eka jo jedan znak. Ali taj znak se ne izvri kao naredba ve se umee u meuspremnik. Dakle C-q ESC umee Escape.

246/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

Onemoguene naredbe (Disabled Commands)


Neke naredbe koje su vrlo zbunjujue za poetnike su po defaultu onemoguene. Kada pozovete onemoguenu naredbu pojavljuje se prozor sa dokumentacijom za tu naredbu i nude vam se tri mogunosti Razmak- da probate naredbu jednom i ostavite ju onemoguenom Y- da ju probate i omoguite (nema upita kod ponovnog koritenja) N- da ne uinite nita (naredba ostaje onemoguena) Vrlo vjerojatno ete naii na jednu specifinu onemoguenu naredbu M-ESC (takoer poznata kao i ESC ESC), jer je vrlo lako otipkati dva Escape-a zaredom kada se koristi ESC prefiks.

247/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

KRETNJE I OBJEKTI (MOTION AND OBJECTS)


Jedna od najeih stvari koje korisnik editora radi je pomicanje naokolo, da bi izvrio odreene naredbe. Emacs nudi mnoge naredbe za kretanje koje se odnose na tekstualne objekte; za svaki tekstualni objekt, postoji naredba kretnje kojom se pomiete na poetak ili kraj objekta. Sve te naredbe za kretanje primaju brojevne argumente za odreivanje broja ponavljanja. Osnovni tekstualni objekt je znak. Emacs prepoznaje i niz drugih objekata ovisno u kojem ste modu (C-ovski tekstualni objekt nema ba puno smisla ako ne editirate C kod). Tona definicija objekta ovisi o vaim postavkama, ali jo vanije varira od moda do moda. Znakovi koji tvore rije u Text modu, ne moraju biti isti kao oni koji tvore rije u C modu. Ovo je jako korisno jer moete koristiti iste naredbe za pomicanje, a opet da budu razliito podeene za razliite vrste teksta.

Znakovi
C-f Forward-char. Mie naprijed (desno) preko znaka C-b Backward-char. Mie nazad (lijevo) preko znaka 6.2 Rijei M-f Foreward-word. Mie naprijed preko rijei. M-b Backward-word. Mie unazad preko rijei.

248/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

Linije (vertikalno)
C-n next-line. Mie dolje do slijedee linije. C-p previous-line. Mie gore do prethodne linije. Kada se kree po linijama kursor pokuava ostati u istom stupcu, ali ako je nova linija prekratka, pozicionirati e se na kraj linije. Ovo je vrlo vano: Emacs ne umee razmake na kraj linija.

Linije (horizontalno)
C-a begining-of-line. Mie na poetak trenutno aktivne linije. C-e end-of-line. Mie na kraj trenutno aktivne linije. E kao end (kraj), a A kao poetak abecede.

Reenice
M-a backward-sentence. Mie na poetak trenutno aktivne reenice. M-e foreward-sentence. Mie na kraj trenutno aktivne reenice.

249/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

Odlomci
M-{ backward-paragraf. Mie na poetak trenutno aktivnog odlomka. M-} foreward-paragraph. Mie na kraj trenutno aktivnog odlomka.

Stranice
C-x [ backward-page. Mie na poetak trenutno aktivne stranice. C-x ] foreward-page. Mie na kraj trenutno aktivne stranice. Stranice su u veini modova odvojene sa C-l.

Meuspremnici
M-< beggining-of-buffer. Mie na poetak meuspremnika M-> end-of-buffer. Mie na kraj meuspremnika.

250/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

Funkcije
Budui da su funkcije tako vaan dio svakog programskog jezika, Emacs sadri naredbe za pomicanje kroz njih. Ove naredbe rade bez problema u veini modova. U Emacsu funkcije i procedure se nazivaju defun kao i u Lispu. C-M-a begining-of-defun. Mie na poetak trenutno aktivne defun. C-M-e end-of-defun. Mie na kraj trenutno aktivne defun.

251/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

BRISANJE, UBIJANJE I VRAANJE (DELETING, KILLING AND YANKING)


Emacs-ove naredbe za brisanje su takoer bazirane na gore navedenim tekstualnim objektima. Ali prvo da se razjasni terminologija: brisanje (deletion) oznaava brisanje teksta iz meuspremnika bez spremanja; veina naredbi za brisanje radi na malim dijelovima teksta. Ubijanje (killing) oznaava spremanje obrisanog teksta tako da ga se poslije moe vratiti (yanking). Ubijeni tekst je spremljen u kill-ringu. Kill-ring sadri zadnjih N ubijanja (kills). N je po defaultu 30, ali to se moe promijeniti promjenom kill-ring-max varijable. Kill-ring se ponaa kao fifo struktura kod ubijanja, poslije 30-tog ubojstva (kill) prvo se brie. Za razliku od toga, kod vraanja (yanking) kill-ring se ponaa kao krug (moete vraati stvari cirkularno kao po krugu). kill-ring-max se ne odnosi na veliinu teksta (u bajtima) koju moete spremiti u kill-ring (veliina je neograniena), ve na broj ubojstava.

Znakovi
C-d delete-char. Brie znak desno od kursora. DEL delete-backward-char. Brie znak lijevo od kursora.

Rijei
M-d kill-word. Ubija sve do kraja rijei desno od kursora. M-DEL backward-kill-word. Ubija sve do poetka rijei lijevo od kursora.

252/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

Linije (horizontalno)
C-k kill-line. Ubija do kraja trenutno aktivne linije ne ukljuujui newline znak. Dakle, ako elite ubiti cijelu liniju potrebna su dva C-k. C-u 0 C-k kill-line. Ubije do poetka trenutno aktivne linije, ne ukljuujui newline znak. Ako ste moda ste pomislili da C-u -1 C-k ubija liniju do poetka, imali ste pravo, ali ta naredba brie i newline znak ispred.

Reenice
M-k kill-sentence. Ubija do kraja trenutno aktivne reenice ukljuujui i sve newline znakove na koje naie. C-u -1 M-k kill-sentence. Ubija do poetka trenutno aktivne reenice ukljuujui i sve newline znakove na koje naie.

Odlomci
Naredbe forward-kill-paragraph i backward-kill-paragraph postoje, ali po defaultu nisu vezane za neke odreene tipke.

Stranice
Ne postoje naredbe za ubijanje stranica

253/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

Meuspremnici
Naredba kill-buffer ne ubija sav tekst u meuspremniku, ve ubija cijelu strukturu podataka meuspremnika

Funkcije
Ne postoje naredbe za ubijanje funkcija (defun).

Produena ubojstva (Extended Kills)


Ako ubijete nekoliko objekata u nizu, neupotrebivi neku drugu naredbu (non-kill naredu), sva ta ubojstva se veu u jedan kill-ring. Moete, na primjer, ubiti dio teksta kao nekoliko linija odabirom C-u 6 C-k naredbe. To e ubiti est linija, ali e to biti samo jedno ubojstvo (kill).

Vraanje (Yanking)
Jednom kada ste ubili neki tekst, kako ga vratiti? Zadnje ubijeni tekst moete vratiti (yank) sa C-y. Budui da Emacs ima samo jedan kill-ring, ubojstvo moete izvriti u jednom meuspremniku , a tekst vratiti (yank) u drugom. Da bi vratili prethodna ubojstva morate se pomicati po kill-ringu. Ponite sa C-y i onda koristite M-y da bi se pomakli na prethodno mjesto u kill-ringu zamjenom upravo vraenog teksta prethodnim ubojstvom. Svaki daljnji My mie as po kill-ringu, svaki put zamjenjujui vraeni (yanked) tekst. Kada doete do teksta koji vas interesira jednostavno stanite. Svaka druga naredba prekida kruenje po kill ringu i C-y vraa zadnje ubojstvo.

254/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

KOPIRANJE I POMICANJE TEKSTA


Emacs nema potrebu za posebnim naredbama za pomicanje i kopiranje teksta (ve smo ih naveli!!!). Za pomicanje teksta, jednostavno ga ubijte i vratite negdje drugdje. Za kopiranje ubijte tekst i odmah ga vratite. Nita se nije dogodilo osim to je tekst sada u kill- ringu, spreman za izvlaenje, vraanje.

255/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

TRENJE I ZAMJENA (SEARCH AND REPLACE)


Emacs sadri niz neobinih i poprilino sloenih naredbi za pronalaenje i zamjenu. Najvanija je incremental search. To izvrava naredba isearch-forward, koja je vezana za C-s; ona trai inkrementalno, jedan po jedan znak, kako vi upisujete string koji traite (search string). To znai da esto Emacs nae ono to vi traite prije nego to vi upiete cijeli string. Da bi prekinuli pretragu, jednostavno pritisnite RET ili otipkajte bilo koju Emacs naredbu (to e izazvati prekid pretrage i izvrenje naredbe). Moete triti slijedee poklapanje sa C-s ili obrnuti pretragu sa C-r; DEL koristite za brisanje i promjenu onoga to traite. Naredba isearch-backward, koja je vezana za C-r radi na isti nain, ali trai unazad. Sa vremena na vrijeme moda poelite traiti ne-inkrementalno. To moete uiniti utipkavanjem C-s RET text RET, gdje je text, onaj tekst koji traite. Puno korisniji je word search koji vam omoguuje traenje niza rijei neovisno o tome kako su odjeljenje. Da bi pokrenuli tu vrstu traenja otipkajte C-s RET C-w word word word RET. Emacs takoer moe pretraivati po regularnim izrazima. To je izuzetno moan alat, ali prekompleksan da bi ga se ovdje objasnilo.

Zamjena
Najvanija naredba za zamjenu je query-replace (vezana za M-8). Ova naredba e od vas zatraiti tekst za zamjenu i tekst koji elite zamijeniti te e potom izvriti zamjenu unutar trenutno aktivnog meuspremnika. Naredba query-replace je interaktivna, nakon svakog pronalaska ponuditi e vam slijedee mogunosti: SPC DEL Izvri zamjenu Nemoj izvriti zamjenu

256/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

RET ESC

Zaustavi query-replace, ne izvrivi zamjenu isto kao i RET

. Izvri zamjenu i zaustavi query-replace ! izvri zamjenu i sve druge zamjenu u unutar meuspremnika bez daljnje interakcije Postoji jo podnaredbi, ali one zahtijevaju dodatno poznavanje Emacsa. Postoji jo naredbi za zamjenu koje bi trebali poblie upoznati: replace-string (jednostavna,neuvjetovana zamjena), replace-regexp i query-replace-regexp (kole rade sa regularnim izrazima) i tags-query-replace (zamjenjuje sve identifikatore u kolekciji source datoteka). Naredba query-replace, kao i sve ostale naredbe za zamjenu, po defaultu prepoznaje velike i male znakove. Na primjer, ako zamjenjujete foo sa bar i naletite na Foo, Emacs e Foo zamijeniti sa Bar.

257/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

OZNAKE I REGIJE (THE MARK AND THE REGION)


Emacs moe manipulirati unaprijed odreenim dijelovima teksta, a ne samo tekstualnim objektima. To se radi na nain da se odredi regija teksta; mnoge naredbe e se odnositi na tu regiju. Regija je tekst izmeu toke (point) i oznake (mark). Point je u biti Emacs-ov termin za kursor. Mark se postavlja sa naredbom C-@ (set-mark-command). Ta naredba postavlja mark tono tamo gdje je point sa tim da sada point moete pomaknuti i tako dobiti regiju. Svaki meuspremnik ima svoj point i mark, dakle i svoju regiju. (mogue je da meuspremnik uope nema mark i tako nema ni regiju). Regija postoji nevezano uz to da li je prvo doe mark ili point, postavite ih kako vama odgovara. Regija je obino nevidljiva, ali ako vrtite Emacs na nekom programu sa prozorima moete je uiniti vidljivom sa M-x (transient-mark-mode) Mnoge naredbe koje pomiu point na neku veu udaljenost (npr. M-< ili C-s) postavljaju mark na mjesto sa kojeg su krenule. Natpis Mark set e se pojaviti u echo area kada se to dogodi. Kada koristite Emacs pod nekim sustavom kao X moete se posluiti miem za oznaavanje regije, ali mnogi korisnici Emacsa preferiraju drati ruke non-stop na tipkovnici, te koristiti naredbe za pomicanje. Postoje neke posebne naredbe dizajnirane samo za to da postave regiju oko nekog interesantnog dijela teksta. M-@ mark-word. Postavlja regiju oko slijedee rijei, ili od poetka do kraja rijei kojoj ste trenutno pozicionirani. M-h mark-paragraph. Postavlja regiju oko trenutno aktivnog odlomka. C-M-h mark-defun. Postavlja regiju oko trenutno aktivne funkcije (defun). C-x C-p mark-page. Postavlja regiju oko trenutno aktivne stranice. C-x h mark-whole-buffer. Postavlja regiju oko cijelog meuspremnika.

258/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

Sada smo odredili regiju. to moemo sa njom uiniti? C-x C-x exchange-point-and-mark. Zamjenjuje point i mark. Brzo uzastopno izvravanje ove naredbe omoguuje vienje dokle regija dosee. C-w kill-region. Ubija regiju M-w kill-ring-save. Sprema regiju u kill-ring bez da je brie iz meuspremnika. C-x C-i indent-rigidly. Uvlai regiju za koliko god znakova odredimo u brojevnom argumentu (default je 1) . C-x C-l downcase-region. Pretvara sva slova u mala. Po defaultu ova naredba je onemoguena. C-x C-u upcase-region. . Pretvara sva slova u velika. Po defaultu ova naredba je onemoguena. Postoji jo mnogo drugih naredbi.

259/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

UVLAENJE (INDENTATION)
U modovima za programske jezike, Emacs koristi TAB tipku za automatsko uvlaenje linije, sukladno sa pravilima za uvlaenje koja vrijede za dotini jezik. Na primjer u C modu Emacs prepoznaje if, while, switch, do, for, funkcije itd. , te uvlai tekst ovisno o potrebi. Dakako u veini jezika pravila za uvlaenje nisu striktno odreena, pa Emacs dozvoljava da ih svako odredi kako mu odgovara.

260/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

MODOVI
Glavni nain na koji Emacs prilagouje naredbe svakoj vrsti teksta je kroz major i minor modes. Svaki meuspremnik ima major mod i nula, jedan ili nekoliko minor modova. Nekada Emacs izabire major mo automatski, obino na temelju ekstenzije datoteke. Naravno moete i eksplicitno odrediti mod.

Neki glavni modovi


Fundamental Mode Osnovni mod koji je temelj svih modova. Odlian za editiranje teksta, samo to ne prua neke dodatne mogunosti Text Mode Za editiranje teksta. Sadri posebne naredbe za spell checking centriranje linija itd. Lisp Mode Za editiranje Common Lisp source koda. Sadri interaktivnu vezu sa Common Lisp interpretorom u drugom meuspremniku. Tcl Mode Za editiranje Tcl source koda. . Sadri interaktivnu vezu sa Tcl interpretorom u drugom Meuspremniku. C Mode Za editiranje C koda. Sadri posebnu indentaciju itd. Postoji jo niz drugih glavnih modova od kojih su neki su jako specijalizirani (modovi za editiranje e-mailova, za itanje news grupa, pretraivanje World Wide Web-a itd.)

261/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Emacs

ELITE LI ZNATI VIE?


Za s daljnje informacije o Emacs-u pregledajte: GNU Emacs Frequently Asked Question List Info news grupe gnu.emacs.help comp.emacs gnu.emacs.announce alt.religion.emacs gnu.emacs.sources

262/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Login i ID

Maja Mehinagi

LOGIN I ID

263/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Login i ID

UVOD
UNIX sistem je viekorisniki (multi-user) operativni sistem. To znai da vie od jedne osobe moe koristiti sistem u isto vrijeme. Sistem moe opsluivati vie od jednog korisnika isto kao to moe da izvrava vie procesa u isto vrijeme za jednog korisnika. Viekorisnika osobina omoguava da grupa korisnika radi zajedno, dijelei informacije i zajednike programe na sistemu. Ako se UNIX nalazi na osobnom raunalu, moe postojati samo jedan korisnik koji moe koristiti vieprocesnu (multi-tasking) osobinu i pokretati vie procesa istovremeno.

Prijavljivanje na UNIX sistem


Svakome tko koristi UNIX sistem pridruuje se ime korisnika (user name) koje se koristi prilikom prijavljivanja na sistem. To ime korisnika esto se naziva i raun (account). U praksi, jedna osoba moe koristiti vie korisnikih imena. Razliita imena koristimo kada koristimo sistem za razliite potrebe. NPR. Jedna osoba koristi program za obraunavanje plaa i program za stanje rauna. U prvom sluaju korisnik se prijavljuje pod imenom ''plaa'', a u drugom sluaju pod imenom ''raun''. Vie korisnika koji rade na istom projektu mogu sainjavati grupu koja ima svoje ime. Jedan od korisnika UNIX sistema ima vea prava i obaveze nego ostali korisnici, tj. ima funkciju super korisnika (super-user). To je osoba koja ima obavezu administriranja, dodjeljivanja dozvola za rad novim korisnicima i koji se brine o cjelokupnom sistemu. Super korisnik prijavljuje se pod imenom ''root''. Kao dodatak imenu korisnika, prilikom prijave na sistem skoro uvijek je potrebno zadati i lozinku (password). To je jedan niz karaktera koji je poznat samo danom korisniku i koji treba biti ispravno dodijeljen radi dobivanja dozvola za rad sa sistemom. Super korisnik poznaje lozinku korisnika samo prilikom dodjeljivanja dozvole za rad nekom od korisnika. Nakon toga, poslije uspjenog prijavljivanja na sistem, korisnik moe izmijeniti lozinku

264/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Login i ID

naredbom passwd i tada je poznaje samo on. Super korisnik moe dodijeliti novu lozinku korisniku u sluaju da je korisnik zaboravio staru. Da bismo dobili dozvolu za pristup UNIX sistemu, moramo izvriti proces prijave na na sistem (signing on). Taj proces se najee zove ''logiranje'' (loggin in, loggin on). Pretpostavimo da je terminal direktno vezan (hard-wired) na UNIX sistem. Kod pojedinih sistema, kada je terminal udaljen, moramo preko telefonske centrale pozvati UNIX sistem i posredstvom modema dobiti pristup. Kada se pribliimo terminalu koji je vezan na UNIX sistem, na ekranu trebamo vidjeti poruku: Welcome to the UNIX System login: Da bismo se prijavili na UNIX utipkamo nae korisniko ime i pritisnemo <ENTER>. Primjeujete da dok piemo korisniko ime, ono to tipkamo je istog trena prikazano na ekranu. Kada utipkamo nae korisniko ime pod kojim nas UNIX raspoznaje sistem zahtjeva da unesemo i lozinku: Welcome to the UNIX System login: student password: maja za razliku od imena korisnika, prilikom unoenja lozinke na ekranu ne vidimo karaktere koje utipkavamo na tastaturi. To je uinjeno radi vee sigurnosti jer lozinka pomou koje dobivamo dozvolu za rad treba sluiti samo danom korisniku zbog moguih zloupotreba. Nakon uspjenog prijavljivanja na ekranu se pored ostalog i pojavljuje prompt-jedan ili vie karaktera koji nam kazuju da je UNIX spreman da primi i izvri naredbu. esto je prompt # za specijalne korisnike kao to je root,sysadm.... ili $ za obine korisnike. U sluaju da pogrijeimo prilikom unoenja imena korisnika ili lozinke, ponovno se pojavljuje poruka login:. Isto tako, ime i lozinka moraju se unijeti u odreenom vremenskom intervalu, najee 60 sekundi. Ako je taj terminal premaen, postupak se mora ponoviti

265/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Login i ID

ispoetka. To je sve napravljeno radi jo vee sigurnosti tj. da ne bi neovlatena osoba ula u UNIX sistem.

Zavretak rada sa UNIX sistemom


Zavretak rada sa UNIX sistemom vri se utipkavanjem naredbe logout ili <ctrl-D> (drimo tipku CTRL i pritisnemo tipku d), u trenutku kada se na ekranu nalazi prompt tj. kada UNIX oekuje novu naredbu. Postoji i naredba exit kojom takoer moemo zavriti rad tj. odjaviti se sa sistema. Korisnik mijenja svoju lozinku jednostavnim zadavanjem naredbe passwd kao to je prikazano primjerom: $ passwd New password:studentica Retype new password:studentica $

266/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Login i ID

STARTANJE UNIX SHELLA


Na slici 1 je prikazan postupak startanja shell-a prilikom prijavljivanja korisnika na sistem. Svaku terminalsku liniju nadgleda po jedan getty proces iji je zadatak da starta program login koji radi provjeru imena korisnika i lozinke. Kada se korisnik ispravno identificirao, program login starta odgovarajui shell prema informaciji koja se nalazi u konfiguracijskom file-u /etc/passwd.

login:student password:

login:studentica password

Slika 1

267/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Login i ID

Super korisnik
Na svakom UNIX sistemu pored obinih korisnika postoji odreeni broj korisnika koji ima specijalna ovlatenja. To je korisnik poznat pod imenom ''root'' ili super korisnik. Korisnik root moe pristupati svim file-ovima na sistemu kao i svim procesima, a moe ak i unititi cijeli sistem. Korisnik root ne poznaje zabrane i postoje naredbe koje moe izvravati samo on. To su na primjer podeavanje vremena na sistemu (date), podeavanje file sistema (mount) ili kreiranje specijalnih file-ova (mknod). Prvi nain postajanja super korisnika je da dovedemo sistem u stanje u kojem moe raditi samo jedan korisnik (single-user state). To se dogaa uvijek kao meufaza podizanja operativnog sistema (bootstrap). Tijekom boot-a inicijalni shell radi sa privilegijama super korisnika. U viekorisnikom reimu rada (multi-user state), moemo se prijaviti na sistem pod imenom root. Ako smo se prijavili kao obian korisnik, moemo se prijaviti kao root korisnik pomou naredbe: $ su Password:top_tajna # Takoer sa naredbom su (switch user) moemo da se prijavimo pod imenom bilo kojeg korisnika: $ su student Password:msjs $ Ako root izvrava naredbu su, tada se ne zahtjeva unoenje lozinke korisnika ije smo ime zadali kao argument.

268/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Login i ID

Definiranje korisnika i file /etc/passwd


Zavisno od verzije UNIX-a postoje 3 naina definiranja korisnika koji se mogu prijaviti na sistem prema mjestu gdje se uva popis korisnika i odgovarajua lozinka: Tradicionalni nain u /etc/passwd file-u Opis korisnika je u /etc/passwd file-u, dok se lozinke i dodatne informacije nalaze u /etc/shadow file-u Pomou NIS/NIS+ centralizirane baze podataka za sve u mrei Svaki korisnik koji se moe prijaviti na UNIX sistem definiran je jednom linijom u /etc/passwd file-u: # cat /etc/passwd root:x:0:1:0000-Admin(0000):/: daemon:x:1:1:0000-Admin(0000):/: bin:x:2:2:0000-Admin(0000):/usr/bin: sys:x:3:3:0000-Admin(0000):/: adm:x:4:4:0000-Admin(0000):/var/adm: uucp:x:5:5:0000-uucp(0000):/usr/lib/uucp: ... student:x:107:15:maja:/home/student:/bin/csh # Polja u /etc/passwd file-u su odvojena znakom '':'' i uvijek moramo navesti svih est separatora. Znaenje pojedinih polja /etc/passwd file-a prikazano je na slici 2.

POLJE Ime korisnika Lozinka UID Ime pod kojim se korisnik prijavljuje na sistem

OPIS

ifrirana lozinka (crypted password). Ako stoji x tada se opis lozinke uva u file-u /etc/shadow Jedinstveni redni broj korisnika (User IDentiity) na UNIX sistemu.

269/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Login i ID

Super korisnik uvijek ima UID=0. Ostali korisnici imaju UID poevi od 101 ili 201 GID Redni broj glavne grupe (Group IDentitiy) kojoj pripada dani korisnik odgovara definiciji grupe u /etc/group Uporaba se razlikuje zavisno od verzije UNIX-a. BSD UNIX koristi GCOS polje to polje za smjetanje podataka o korisniku, koje dobijemo kasnije naredbom finger Home direktorij Direktorij gdje se nalazi korisnik poslije prijavljivanja na sistem. Naziva se i login direktorij Ime programa koji se koristi kao interpreter naredbi. Ako je izostavljeno podrazumijeva se standardni Bourne Shell (/bin/sh)

Inicijalni shell

Ime korisnika se obino zadaje malim slovima, duine do osam karaktera i ne smije zapoinjati brojem. Korisnici koji se prijavljuju na UNIX sistem mogu biti pojedinci ili drugi UNIX sistemi (uucp na primjer). ifrirana lozinka se kao rezultat jednosmjernog algoritma smjeta u drugo polje /etc/passwd file-a, ako se radi o tradicionalnom nainu. Poslije zadavanja teksta lozinke, prvih osam karaktera se kombinira sa kljuem od dva karaktera, nakon ega se dobiva ifrirana lozinka duine 13 karaktera. Svaki puta kad se korisnik prijavljuje na sistem, lozinku koju unese, ifrira se na isti nain i usporedi sa ifriranom lozinkom koja se uva u /etc/passwd file-u. Ako je dano polje prazno, tada korisnik prilikom prijavljivanja ne mora zadati lozinku.

student

maja

student

Slika 2

270/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Login i ID

Pojedini sistemi uvaju u /etc/passwd file-u pored lozinke i podatke o trajanju valjanosti lozinke i druge informacije. Ti podaci se sastoje od zareza '','' kao separatora i 4 karaktera. Dodaju se na kraj lozinke koristei sljedee oznake: ''.'' = ''0'' : ''/'' = ''1'' ; ''0-9'' = ''2-11'' ; ''A-Z'' = ''12-37'' ; ''a-z'' = ''36-63''. Prvi karakter nakon zareza predstavlja maksimalni broj tjedana valjanosti lozinke. Drugi karakter predstavlja minimalni broj tjedana izmeu dvije izmjene lozinke. Ako su oba karaktera nule (''..''), korisnik mora izmijeniti lozinku prilikom prvog sljedeeg prijavljivanja. Ako je drugi broj vei od prvoga, tada samo super korisnik moe izmijeniti danu lozinku. Ostala dva karaktera predstavljaju broj tjedana kada je lozinka posljednji put promijenjena, poevi od 1.sijenja 1970. godine. Inicijalni podaci o intervalima vremena ubacuju se runo pomou vi editora. Ako elimo privremeno zabraniti prijavljivanje nekom korisniku tj. da zakljuamo (lock) njegov raun, tada dodajemo ''LK'' ispred ifrirane lozinke u odgovarajuem polju. UID kod svih UNIX sistema u mrei koji koriste NFS treba biti isti. Kod sistema koji koriste NIS/NIS+ , taj problem je automatski rijeen. Korisnik nobody je vlasnik file-ova koje nije kreirao super korisnik, te im nitko ne moe pristupiti. Korisnik noaccess slui za prijavljivanje udaljenih korisnika ije je ime ''root''. GID se koristi za utvrivanje dozvola za pristup file-ovima koje se primjenjuju na danog korisnika. Kao to je poznato, svaki file ima tri vrste dozvola: za vlasnika, lanove grupe kojoj pripada vlasnik i ostale korisnike. GCOS polje na UNIX sistemu zadajemo u xxxx-Ime (yyyy) formatu i slui za smjetanje GCOS broja rauna (xxxx) i boksa (yyyy). Na BDS sistemu ovo polje zadajemo u formatu ''Ime Prezime, komentar''. Home direktorijima je mjesto u file sistemu gdje se login program postavlja prije startanja shell-a. U home direktorijima nalaze se svi inicijalizirani scriptovi. Informacija o home direktoriju nalazi se u shell promjenjivoj HOME, koju korisnik nakon prijavljivanja moe promijeniti. Inicijalni shell moe biti sh,csh,ksh,bash,tesh ili uucico (koristi se kod UUCP komunikacije).
271/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Login i ID

Naredbe za rad s lozinkama


NAREDBE passwd korisnik passwd x 84 n 7 korisnik OPIS Promjena lozinke danog korisnika Lozinka vrijedi 84 dana i ne smije se mijenjati prvih 7 dana. Korisnik se moe prijaviti na sistem ali ne moe mijenjati lozinku. Poruuje korisniku da kod sljedeeg prijavljivanja promijeni lozinku. Iskljuuje vremensku kontrolu trajanja lozinke. Prikazuje upozorenje da lozinka istie za 14 dana. Privremena zabrana prijavljivanja danog korisnika. Ukida privremenu zabranu prijavljivanja danog korisnika.

passwd x 7 n 10 korisnik

passwd f korisnik passwd x 1 korisnik passwd -w 14 korisnik passwd -1 korisnik passwd -u korisnik

272/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

Nina ugaj

TELNET I SSH

273/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

UVOD
Za pristupanje nekom udaljenom raunalu putem lokalne ili Internet mree, neovisno o mrei, potrebno je koristiti protokole, pomou kojih se moe uspostaviti veza s udaljenim raunalom. Telnet i SSH dva su takva protokola, koja omoguavaju spajanje i rad na nekom udaljenom raunalu. Telnet je servis (program, a ujedno i naziv protokola), koji omoguuje pristup nekom udaljenom raunalu emulacijom terminala, a SSH je
primaju kodirani, tj. sigurni od presretanja i itanja. kriptirani protokol to znai da su svi podaci koji se alju i

Iako imaju istu funkciju (remote pristup raunalima) i iako je SSH vrlo slian telnetu, zbog potencijalne ranjivosti telneta, SSH se pokazao daleko sigurniji, te se telnet polako povlai iz upotrebe. Takoer, u odnosu na FTP (File Transfer Protocol) ili tradicionalne BSD R-naredbe (Rcommands) - rlogin, rsh i rcp, SSH je sigurniji, a u njegove dvije implementacije SSH1 i SSH2, ispravljeni su neki propusti. Veina njih se svodi na manje bugove, no bilo je i nekoliko ozbiljnih sigurnosnih propusta. Najopasniji od dosad zloupotrebljavanih propusta omoguava udaljenom napadau koritenje raunala kao root. I protokol SSH1 se pri odreenim konfiguracijama pokazao potencijalno ranjivim na sesije koje se dekriptiraju tijekom transfera. Zato se savjetuje, kad god je to mogue, koritenje jaeg protokola SSH2, jer su neke slabosti SSH1 ispravljene u protokolu SSH2. Telnet i SSH rade na razliitom portu: telnet SSH 23 / tcp 22 / tcp

Neovisno o vrsti protokola, da bi se korisnik spojio na neko udaljeno raunalo mora na njemu imati otvoren korisniki raun (account).

Telnet i SSH servisi baziraju se, kao i veina mrenih servisa, na klijent-posluitelj modelu. Klijent uspostavlja vezu s posluiteljskim raunalom na kojem je pokrenut telnet odnosno SSH daemon (tipino telnet na portu 23, a SSH na portu 22), nakon ega slijedi razmjena podataka odnosno naredbi izmeu tih raunala.

274/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

TELNET

Upotreba TELNETA za pristup udaljenim raunalima


Koritenjem protokola telnet omoguuje se interaktivan rad na nekom udaljenom raunalu. Naredba telnet je standardna u svim implementacijama TCP/IP-a (Transmission Control Protocol / Internet Protocol) i neovisna je o operacijskom sustavu. Tako je protokol telnet ugraen u program Telnet koji je standardni dodatak OS Windows. Takoer naredba telnet osnovni je alat za prijavljivanje na daljinu pod Linuxom/Unixom. Telnet pripada grupi emulatora terminalskog rada, to znai da on omoguava lokalnom raunalu da uspostavi vezu s udaljenim raunalom, a nakon uspostave veze oponaa rad terminala, tj. prilikom izvoenja operacija ne koriste se procesor i periferije lokalnog raunala ve udaljenog raunala. Osobno raunalo (raunalo korisnika) se u tom sluaju ponaa kao obini terminal (koji ne posjeduje sekundarnu memoriju i procesor) kojeg i emulira telnet.

Da bi mogli koristiti resurse raunala kojem pristupamo, na njemu treba imati otvoren korisniki raun. Nakon otvaranja veze s udaljenim posluiteljem pojavljuje se prozor koji zahtijeva od korisnika da se prijavi za rad i to unosom korisnikog imena (logina) i ifre (passworda). Nakon upisa istih korisnik moe izvoditi naredbe i operacije na udaljenom posluitelju. U sluaju pogreno upisanih podataka pojavljuje se obavijest o greki i mogunost ponovnog pokuaja. Ukoliko se ifra upie krivo vie od tri puta korisniki raun obino se automatski zakljuava iz sigurnosnih razloga.

275/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

Premda neki sustavi pruaju mogunost prijave kao gosta, takva je mogunost rijetka zbog sigurnosnih razloga. Telnet korisnicima omoguuje i prijavljivanje na njihova vlastita raunala iz udaljenih lokacija, takoer unoenjem korisnikog imena i ifre. Na taj nain korisnici mogu provjeravati e-mail, ureivati datoteke i pokretati programe na svojim uobiajenim raunalima kao da su na njih prijavljeni lokalno. To se, meutim, moe uiniti u okruju koje se temelji na terminalima, jer se za to ne moe koristiti sustav X Windowsa. Telnet prua samo emulaciju terminala za uobiajene terminale poput DEC VT-100, koji ne podravaju grafika okruja poput X Windowsa. Znai da je veza koju telnet omoguuje ograniena na koritenje naredbenog suelja pri radu.

Komponente ostvarivanja telnet veze

Tradicionalni mreni servisi kao to su telnet, ftp, rsh i dr., iako vrlo praktini i jednostavni za koritenje, ujedno sadre i jedan veliki nedostatak imaju implementiran vrlo nizak nivo sigurnosti, budui da se u vrijeme njihova nastanka nije previe panje obraalo na sigurnost raunalnih sustava. Komunikacija nije kriptirana, te su mogue zlouporabe od strane neovlatenih ili zlonamjernih korisnika. U dananje vrijeme kada sigurnosni aspekt predstavlja jedan od najvanijih elemenata svake raunalne mree taj problem svakodnevno dolazi sve vie do izraaja.

276/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

Inherentne slabosti kod takvih mrenih servisa neovlatenim korisnicima omoguuju vrlo jednostavan dolazak do povjerljivih korisnikih informacija te prislukivanje kompletnih mrenih sesija izmeu klijentskog i posluiteljskog raunala. Takoer ne postoji nikakav mehanizam koji bi omoguio meusobnu autentikaciju (authentication) raunala, to neovlatenim korisnicima omoguuje lairanje mrenih sesija, te lano predstavljane pod imenom drugih raunala. Upravo gore navedeni elementi bili su podloga za nastanak SSH protokola i programa koji ga implementiraju, kako bi se na taj nain korisnicima omoguilo sigurno komuniciranje s udaljenim raunalima. Osnovna sintaksa za telnet je sljedea: telnet [hostname] => hostname je ime udaljenog raunala. Ako ime udaljenog raunala nije navedeno, telnet se pokree u svom interaktivnom nainu rada, a ako je ime udaljenog raunala navedeno, telnet odmah pokuava zapoeti sesiju. Telnet prihvaa nekoliko argumenata naredbenog retka: -d => ukljuuje otkrivanje greaka -a => pokuava automatsko prijavljivanje -n tracefile => ukljuuje praenje i podatke iz praenja sprema u datoteku pod tracefile -e escape_char => odreuje da znak za izlazak iz sesije bude escape_char -l user => korisniko ime user alje udaljenom sustavu za automatsko prijavljivanje. Ovaj argument automatski ukljuuje i argument -a. port => ukazuje na broj porta koji treba koristiti za spajanje na udaljeni sustav. Ovaj se argument koristi za odreivanje razliitih mrenih programa. Ako nije naveden, telnet se spaja na unaprijed zadani telnet port.

277/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

Dakle, telnet sesiju korisnik pokree utipkavi telnet, nakon ega slijedi ime raunala na koje se eli spojiti. Telnet zatim vraa poruku Trying i neku IP adresu (gdje je neka IP adresa adresa raunala koje je navedeno). Ako se telnet uspjeno spoji na raunalo (to znai da je to raunalo ukljueno i da mrea nije iskljuena), Linux/Unix e izvijestiti Connected to ime raunala i zatim e rei da je znak za izlazak iz sesije neka odreena kombinacija tipki. Znak za izlazak odreuje i kombinaciju tipki koju treba utipkati za prelazak iz terminalske sesije u telnetov interpretator naredbi. Tamo korisnik prelazi ako naredbe eli izravno slati programu telnet, a ne u sesiju na udaljenom raunalu. Nakon to se telnet uspjeno spojio na udaljeni sustav bit e prikazana prijavna informacija i sustav e zatraiti unos korisnikog imena i ifre. Pod pretpostavkom da korisnik ima valjano korisniko ime i ifru, uspjeno e se prijaviti i tada moe interaktivno raditi na udaljenom sustavu. Na kraju rada svakako se treba odjaviti. Telnet zatim izvijesti da je udaljena sesija zatvorena i korisnik se vraa se u naredbeni redak lokalne ljuske. Primjer telnet sesije iz Linux raunala koje se spaja na Linux raunalo:

U navedenom primjeru Escape character is '^]'. Dakle, telnet dojavljuje da ulogu escape znaka ima Control+]. Pritiskom na tu kombinaciju tipki prelazi se u interaktivni rad s telnet programom, na to upuuje prompt: telnet>

278/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

U interaktivnom radu telnet raspoznaje slijedee naredbe, iji se popis dobije navoenjem naredbe help: close => prekid trenutno spojene veze display => prikaz parametara mode => promjena naina rada: line-by-line (utipkani sadraj retka prvo se prikazuju na lokalnom raunalu, nakon ega se odjednom alje udaljenom raunalu) ili character-at-a-time (veina pritisnutih tipki alje se neposredno udaljenom raunalu) open hostname [port] => povezivanje s udaljenim raunalom. Inicijalno: port 23. quit => naputanje telneta send => prijenos posebnih znakova ( naredbom "send ?" dobije se detaljniji opis). set => postavljanje parametara ("set ?" za detaljniji opis). status => prikaz trenutnog statusa toggle => izmjena parametara ("toggle ?" za detaljniji opis). z => privremeni prelazak u novu ljusku (shell) na lokalnom raunalu ? => prikaz pomoi Povratak u Unix ljusku obavlja se pritiskom na tipku <Enter>. Za zavretak rada s telnetom i prekidanje veze s udaljenim raunalom dovoljno je napraviti odjavu rada (logout).

279/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

SSH
SSH (Secure Shell = sigurna ljuska) je mreni servis koji korisnicima omoguuje uspostavu sigurnog komunikacijskog kanala izmeu dva raunala putem nesigurne raunalne mree. SSH servis svoj rad bazira na koritenju kombinacije simetrine i asimetrine kriptografije, te metoda enkripcije koje omoguuju sigurniji prijenos podataka raunalnom mreom. Trenutno postoje dvije verzije SSH protokola, SSH1 i SSH2. SSH2 je novija verzija, koja sadri odreena poboljanja u odnosu na stariju verziju. Originalna verzija SSH protokola razvijena je od strane Finske kompanije SSH Communications Security Corp , koja je na odreeni nain zatitila svoj proizvod, te samim time ograniila mogunosti njegovog koritenja. Kao rezultat toga nastala je open-source implementacija istog protokola pod imenom OpenSSH, koja se danas najee koristi, te e kao takva biti opisana u nastavku seminara.

280/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

KRIPTOGRAFIJA I ENKRIPCIJA PODATAKA


Kako je ve spomenuto SSH servis koristi enkripciju podataka u svrhu njihove zatite od neautoriziranog pristupa. U ovom dijelu biti e vrlo kratko iznesene osnovne napomene vezane za kriptografiju i enkripciju podataka, kako bi se omoguilo lake razumijevanje naina na koji SSH protokol implementira sigurnost. Postoje dvije osnovne grupe algoritama za enkripciju podataka: simetrini algoritmi - bazirani na jednom tajnom kljuu asimetrini algoritmi - bazirani na tajnom i javnom kljuu Za enkripciju ili dekripciju podataka, osim samog algoritma, potrebno je poznavati i klju (key) na temelju kojeg algoritam provodi kriptiranje podataka. Ovisno u koju od gore navedenih grupa algoritam spada, ovisi na koji e se nain provoditi enkripcija odnosno dekripcija podataka. Kod simetrine kriptografije isti klju se koristi i za kriptiranje i dekriptiranje podataka. Poiljatelj kriptira podatke tajnim kljuem i tako kriptiranu poruku alje na odredite. Primalac poruke istim tajnim kljuem moe dekriptirati poruku odnosno doi do njenog pravog sadraja.

Slika: Simetrina kriptografija Odmah se primjeuje jedan veliki nedostatak ove grupe algoritama, a to je taj da se i poiljatelj i primatelj na neki nain moraju dogovoriti oko tajnog kljua koji e koristiti za komunikaciju. Proces dogovora oko tajnog kljua predstavlja poseban problem, budui da je

281/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

razmjenu kljueva potrebno obaviti nesigurnim putem (mail, telefon ili sl.) to moe ugroziti privatnost kljua. Prednost algoritama ove skupine je ta da su iznimno brzi to je glavni razlog njihove uestale primjene. Najpoznatiji predstavnici ove grupe algoritama su DES (Data Encryption Standard), IDEA, 3DES, Blowfish i dr. Asimetrini algoritmi svoj rad baziraju na koritenju dva kljua umjesto jednoga. Svaki korisnik u tom sluaju posjeduje svoj tajni i javni klju. Kljuevi su meusobno kompatibilni na taj nain da se poruka kriptirana jednim kljuem moe dekriptirati samo drugim kljuem istog korisnika. Tajni klju je strogo povjerljiv i poznat je samo njegovom vlasniku, dok se javni klju slobodno distribuira svim korisnicima s kojima se eli komunicirati ovim putem. Postupak razmjene podataka u tom sluaju je sljedei: poiljatelj poruku kriptira javnim kljuem primatelja poruke koji je svima poznat i dostupan primatelj poruku dekriptira svojim tajnim kljuem koji je poznat jedino njemu

Slika: Asimetrina kriptografija Na taj nain svatko svakome moe poslati enkripcijom zatienu poruku pod uvjetom da je poznat javni klju primatelja poruke i time je omoguena sigurna i jednostavna razmjena podataka izmeu dva korisnika.

282/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

Takoer, uklonjen je i problem razmjene kljueva koji se javljao kod simetrine kriptografije. Najpoznatiji predstavnik ove skupine algoritama je RSA algoritam koji se ujedno koristi i kod SSH protokola. Nedostatak ove metode su neto vei zahtjevi na procesorsku snagu raunala, odnosno neto due trajanje postupka enkripcije podataka. Moderne metode enkripcije za svoj rad koriste kombinaciju simetrine i asimetrine kriptografije. Algoritmi asimetrine kriptografije koriste se na poetku sesije za sigurno dogovaranje tajnog kljua koji e se kasnije koristiti za kriptiranje samih podataka koritenjem nekog od simetrinih algoritama. Na taj nain postiu se optimalne performanse algoritma budui da su iskoritene prednosti obje metode: sigurnost i brzina. Upravo ovakav koncept iskoriten je i kod SSH protokola gdje se razmjena i dogovor oko tajnog kljua sesije obavlja asimetrinim RSA algoritmom, da bi se u sljedeoj fazi tako dogovoreni klju koristio za simetrinu enkripciju podataka koji se razmjenjuju izmeu udaljenih raunala.

283/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

SSH PROTOKOL
Osnovne karakteristike SSH protokola su: smanjene mogunosti provoenja DNS i IP spoofing napada, u kojima neovlateni korisnik pokuava ostvariti neautorizirani pristup raunalnim resursima udaljenog sustava lairanjem IP adresa i DNS imena raunala implementirane metode autentikacije raunala bazirane na RSA algoritmu simetrine kriptografije mogunost preusmjeravanja proizvoljnih TCP/IP portova preko sigurnog SSH komunikacijskog kanala (POP, FTP i dr.) prije bilo kakve razmjene podataka izmeu dva raunala provodi se kompletan postupak meusobne autentikacije klijenta i posluitelja, ime se bitno smanjuje mogunost provoenja bilo kakvog napada na SSH servis jednostavna upotreba programa koji implementiraju SSH protokol Uspostava veze izmeu dva raunala SSH protokolom moe se podijeliti u nekoliko faza: U prvoj fazi klijent i posluitelj razmjenjuju podatke o inaici protokola koji e se koristiti, obavlja se identifikacija koritenih SSH programskih paketa, provjerava se ispravnost veze i sl. U ovoj fazi enkripcija podataka jo se ne koristi. U sljedeoj fazi klijent i posluitelj dogovaraju se o tajnom kljuu i algoritmu koji e se koristiti u daljnjim fazama komunikacije. Nakon ove faze dogovoren je klju sesije i protokol koji e se koristiti za kriptiranje podataka. Svi podaci razmijenjeni izmeu klijenta i posluitelja nakon ove faze biti e kriptirani na dogovoreni nain. Slijedi trea faza u kojoj se klijent autenticira kod posluitelja kako bi se na taj nain utvrdio identitet klijenta odnosno provjerile ovlasti pristupa za tog klijenta. Ukoliko je sve prolo u redu prihvaa se sesija izmeu klijenta i posluitelja nakon ega je mogua sigurna razmjena podataka. SSH podrava nekoliko naina autentikacije korisnika od kojih je najsigurnija ona koja koristi RSA algoritam. Postoje metode bazirane na .rhost i host.equiv datotekama koje su

284/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

naslijeene od rsh i njemu slinih servisa, no iz sigurnosnih razloga ne preporuuje se koritenje ovih metoda. Najjednostavnija i vrlo esto koritena metoda autentikacije je ona koja se bazira na ifri korisnika. Pristup je identian kao i kod veine drugih mrenih servisa s osnovnom razlikom to se ovdje korisniki podatci (korisniko ime i ifra) alju mreom kriptirani. U nastavku e biti opisani osnovni postupci koje je potrebno obaviti kako bi se omoguilo koritenje SSH servisa.

285/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

INSTALACIJA, KONFIGURACIJA I KORITENJE KLIJENTSKOG DIJELA SSH APLIKACIJE


SSH komercijalna verzija dostupna je na http://www.ssh.com/. Programski paket Openssh mogue je skinuti na matinoj web stranici openssh projekta http://www.openssh.com/. Iako dolazi u distribucijama nekih Unix sustava (na Debian i Linux Mandrake platformama), ime je olakan postupak njegove instalacije, ukoliko paket. Koritenje osnovnih mogunosti Openssh programa je vrlo jednostavno, to je bio jedan od osnovnih ciljeva prilikom razvijanja ovog servisa. Nakon to je program instaliran mogue se odmah spojiti na bilo koje udaljeno raunalo na kojem je instaliran SSH posluitelj i na kojem korisnik ima otvoren valjani korisniki raun. Dovoljno je u naredbenom retku upisati naredbu: # ssh -l <korisniko_ime> <ime-raunala> nakon ega e se korisniku prikazati poruka koja govori da se radi o pokuaju spajanja na nepoznato raunalo. Od korisnika se trai potvrda za nastavak postupka spajanja, ime ga se upozorava da se prvi puta pokuava spojiti na udaljeno raunalo. The authenticity of host [hostname] can't be established. Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52. Are you sure you want to continue connecting (yes/no)? Slijedi postupak unosa korisnike ifre za korisniko ime definirano -l parametrom i ukoliko se unese valjana ifra korisnik je sigurnim SSH kanalom spojen na udaljeno raunalo na kojem moe dalje raditi, tj. time se zavrava proces uspostave SSH sesije s posluiteljem. Ukoliko se prilikom pokuaja spajanja navede nepostojee korisniko ime (putem -l opcije), SSH posluitelj nee prijaviti greku o nepostojanju korisnika, ve e korisnika zatraiti da unese ifru za istoga. se program instalira zasebno, instalacija programa zahtjeva Zlib (http://www.gzip.org/zlib/) biblioteku te OpenSSL (http://www.openssl.org/) programski

286/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

Na ovaj nain SSH neovlatenom korisniku onemoguuje pregledavanje postojeih korisnikih rauna na udaljenom raunalu, budui da se ne primijeti razlika izmeu pokuaja spajanja na SSH posluitelj s regularnim i neregularnim korisnikim imenom. Ovakav pristup je sasvim poeljan sa stanovita sigurnosti, budui da se ne eli neovlatenom korisniku omoguiti dolazak do liste postojeih korisnika na udaljenom raunalu. U ovom sluaju kompletan se proces autentikacije korisnika bazira iskljuivo na njegovoj ifri, te se na ovaj nain moe spojiti svatko tko zna odgovarajue korisniko ime i ifru bilo kojeg korisnika sustava. Ukoliko korisnika ifra na bilo koji nain bude kompromitirana SSH autentikacija ovim putem gubi smisao. Zato se drugi nain spajanja na SSH posluitelj bazira na RSA autentikaciji, odnosno na koritenju javnog i tajnog kljua korisnika. Kod ovog pristupa klijent posluitelju u prvoj fazi postupka autentikacije alje poruku koja izmeu ostalih informacija sadri i podatak o njegovom javnom kljuu koji eli koristiti za autentikaciju. Posluitelj u svojoj internoj bazi provjerava da li ima podatak o istom korisniku, te ukoliko ima vraa korisniku znakovni niz (chalenge) koji je kriptiran javnim kljuem tog korisnika. Nakon toga klijent mora dekriptirati primljenu vrijednost te vratiti odgovor posluitelju, koji e potvrditi uspjenu dekripciju primljene vrijednosti. Budui da je dekripciju mogue obaviti jedino pomou tajnog kljua istog korisnika, posluitelj prihvaa sesiju i autenticira korisnika. U ovom sluaju posluitelj nikada ne trai ifru korisnika budui da je kompletni proces autentikacije obavljen na temelju javnog i tajnog kljua korisnika. Da bi se omoguio ovakav proces autentikacije klijent prvo mora generirati svoj par tajni/javni klju, te nakon toga kopiju javnog kljua pohraniti na posluitelju. U svrhu generiranja parova javni/tajni klju korisnika koristi se ssh-keygen program koji dolazi u paketu s openssh programom. Zadavanje naredbe # ssh-keygen rezultirati e kreiranjem javnog i tajnog kljua korisnika pod ijim je ovlastima zadana gore navedena naredba.

287/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

Prilikom postupka generiranja kljueva korisnik e biti upitan da unese tzv. passphrase niz koji prua dodatni nivo zatite kod koritenja SSH servisa i koji se moe jednostavno shvatiti kao ifra za korisnikov par kljueva. Iako nije obavezno definiranje ovog niza (mogue je ostaviti prazan niz, tj. samo pritisnuti <Enter>), korisnicima se iz sigurnosnih razloga preporuuje koritenje istoga. Trenutno postoje dvije verzije SSH protokola, SSH1 i SSH2. Zbog toga je mogue sshkeygen programu proslijediti -t parametar kojim se definira za koji algoritam se eli stvoriti par kljueva: ssh-keygen -t rsa1 => koristi se za SSH1 verziju protokola ssh-keygen -t dsa i ssh-keygen -t rsa => koriste se za SSH2 verziju protokola Budui da datoteke koje sadre kljueve korisnika sadre razliita imena, za svaki od algoritama mogue je generirati zaseban par kljueva. Na taj nain omoguuje se spajanje na razliite SSH posluitelje odnosno izbjegavanje eventualnih problema s kompatibilnou software-a izmeu klijenta i posluitelja. Kljuevi generirani bilo kojom od navedenih opcija nalaze se u $HOME/.ssh direktoriju korisnika, gdje se uvijek za svaki algoritam stvaraju dvije datoteke od kojih jedna sadri javni klju, a druga tajni klju korisnika. Imena su im identina s jedinom razlikom to javni klju sadri ekstenziju .pub. Primjeri: id_rsa => datoteka koja sadri tajni klju korisnika za SSH2 verziju protokola koja koristi RSA algoritam za enkripciju id_rsa.pub => datoteka koja sadri javni klju korisnika za SSH2 verziju protokola koja koristi RSA algoritam za enkripciju

288/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

id_dsa => datoteka koja sadri tajni klju korisnika za SSH2 verziju protokola koja koristi DSA algoritam za enkripciju id_dsa.pub => datoteka koja sadri javni klju korisnika za SSH2 verziju protokola koja koristi DSA algoritam za enkripciju identity => datoteka koja sadri tajni klju korisnika za SSH1 verziju protokola koja koristi RSA algoritam za enkripciju identity.pub => datoteka koja sadri javni klju korisnika za SSH2 verziju protokola koja koristi RSA algoritam za enkripciju Nakon generiranja odgovarajuih kljueva posebnu panju treba posvetiti ovlastima koje su pridijeljene pojedinim datotekama. Sve datoteke koje ne sadre nastavak .pub sadre tajni klju korisnika, te kao takve ne smiju biti dostupne nikome osim samome korisniku ( rw------- ovlasti). Nepaljivo pridjeljivane ovlasti datotekama koje sadre tajni klju korisnika mogu ozbiljno ugroziti sigurnost SSH sustava. Kao to je ve spomenuto, nakon generiranja vlastitog para tajni/javni klju, kopiju javnog kljua klijent mora pohraniti na posluitelju na kojeg se eli spajati. Ukoliko se koristi SSH1 verzija protokola potrebno je identity.pub javni klju kopirati u $HOME/.ssh/authorized_keys datoteku na udaljenom raunalu, a ukoliko se koristi SSH2 verzija protokola to potrebno je je kopirati klju id_rsa.pub ili id_dsa.pub u ili $HOME/.ssh/authorized_keys2 datoteku udaljenog raunala. Nakon stvorena odgovarajua $HOME/.ssh/authorized_keys $HOME/.ssh/authorized_keys2 datoteka potrebno je ispravno postaviti ovlasti tih datoteka kako bi se veza mogla uspjeno uspostaviti. Potrebno je zadati naredbu: # chmod 644 .ssh/authorized_keys .ssh/authorized_keys2 to e rezultirati -rw-r--r-- ovlastima, koje svim korisnicima sustava dozvoljavaju itanje ovih datoteka.

289/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

Ukoliko je sve dobro podeeno potrebno je jo samo pokrenuti proces spajanja SSH protokolom na udaljeno raunalo: # ssh <ime_raunala> nakon ega je korisnik automatski prijavljen u sustav ukoliko je sve prolo u redu za vrijeme postupka autentikacije korisnika. Ukoliko je korisnik definirao passphrase niz prilikom generiranja para tajni/javni klju, biti e potrebno unijeti taj niz ukoliko se eli uspostaviti veza s udaljenim raunalom. Na ovaj nain dodatno je zatien korisnikov par kljueva, budui da je osim poznavanja tajnog kljua u ovom sluaju potrebno i poznavati passphrase niz definiran prilikom postupka generiranja kljueva ime se dodatno podie sigurnosni nivo SSH sustava. U $HOME/.ssh direktoriju korisnika koji koristi SSH servis postoji i datoteka pod imenom known_hosts. Ona sadri listu svih raunala s kojima je klijentski dio SSH aplikacije ikada komunicirao, zajedno s njihovim identifikacijskim oznakama (ssh_host_key), to omoguuje dodatnu identifikaciju udaljenog raunala s kojim se eli uspostaviti sesija. Ssh_host_key je klju koji sadri svako raunalo s instaliranim SSH servisom i generira se prilikom instalacije programskog paketa. Koristi se u svrhu meusobne identifikacije raunala koja meusobno komuniciraju SSH protokolom. Prilikom prvog spajanja na udaljeni SSH posluitelj aplikacija e javiti da ne poznaje udaljeno raunalo te e korisnika traiti potvrdu za nastavak uspostave veze. Ukoliko korisnik odgovori potvrdno uspostavit e se veza s udaljenim raunalom, nakon ega e to raunalo biti zapisano u known_hosts datoteku zajedno s njegovim ssh_host_key.pub kljuem primljenim od strane udaljenog raunala. Svaki naknadni pokuaj spajanja na isto raunalo nee prijavljivati tu poruku budui da je raunalo zabiljeeno u spomenutu datoteku zajedno sa svojom identifikacijom. Ovakav pristup smanjuje mogunost provoenja raznih napada na SSH servis, budui da e pokuaj spajanja na raunalo iji ssh_host_key ne odgovara kljuu koji je pohranjen u known_hosts datoteku za to raunalo, rezultirati neuspjehom. SSH klijent moe se pokrenuti s odgovarajuim parametrima ime se moe preciznije utjecati na nain njegovog rada. Ove opcije potrebno je koristiti ukoliko se ele iskoristiti naprednije mogunosti SSH servisa.
290/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

Neke od opcija koje je mogue proslijediti SSH programu u obliku argumenata su: -c => definira se simetrini algoritam koji e se koristiti za enkripciju podataka. Mogue vrijednosti ovog parametra su: des, blowfish i 3des. Inicijalna vrijednost je 3des, budui da se isti smatra optimalnim. Blowfish je neto manje sigurniji od 3des algoritma ali je zato znatno bri, dok je des algoritam ovdje mogue navesti iskljuivo iz razloga kompatibilnosti sa SSH1 verzijom protokola, a iz sigurnosnih razloga ne preporuuje se njegovo koritenje. -f => zahtjeva se od ssh klijenta da radi kao pozadinski proces. Ova se opcija vrlo esto koristi u sluajevima kada se eli uspostaviti sigurni SSH kanal izmeu dva raunala, koji e se kasnije iskoristiti za tuneliranje drugih TCP protokola. -g => dozvoljava se udaljenim raunalima spajanje na lokalno preusmjereni port. Ova opcija takoer je vezana za mogunost koritenja preusmjeravanja portova. -l => definira se korisniko ime (-l kao login) korisnika, pod kojim se eli spojiti na udaljeno raunalo. -p => definira se port udaljenog raunala na koji e se klijent aplikacija spajati. Inicijalno je to port 22. -x i -X => onemoguuje se ili omoguuje preusmjeravanje X11 sesija peko sigurnog SSH kanala. -C => omoguuje se kompresija podataka koji se prenose SSH kanalom, a nivo kompresije moe se definirati CompressionLevel parametrom u konfiguracijskoj datoteci klijent programa. -v

291/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

=> omoguuje se tzv. verbose mod rada u kojem program ispisuje detaljne poruke vezane za svoj rad. Ova opcija koristi se u sluaju otklanjanja greaka kod SSH servisa. -F => definira se konfiguracijska datoteka SSH klijent aplikacije. Ova opcija definira se u sluaju kada se ne eli koristiti inicijalna config datoteka klijenta. -L port:host:hostport => definira se port port koji e se na lokalnom raunalu preusmjeravati putem SSH kanala na port hostport udaljenog raunala host. Ova opcija koristi se u svrhu preusmjeravanja proizvoljnih TCP portova preko SSH sigurnog kanala. -R port:host:hostport => definira se port port na udaljenom SSH posluitelju koji e biti preusmjeren na port hostport lokalnog raunala host. Opcija koja se takoer koristi za preusmjeravanje portova preko sigurnog SSH kanala. -1 => forsira se koritenje SSH1 verzije protokola. -2 => forsira se koritenje SSH2 verzije protokola.

Konfiguracijska datoteka SSH klijenta


SSH klijentski dio aplikacije svoje konfiguracijske parametre prima iz sljedeih izvora: komandna linija $HOME/.ssh/config konfiguracijska datoteka korisnika /etc/ssh/ssh_config globalna konfiguracijska datoteka Sve opcije koje se zadaju putem naredbenog retka nadjaavaju one definirane u $HOME/.ssh/config datoteci, a sve definirane u $HOME/.ssh/config datoteci nadjaavaju one definirane u globalnoj /etc/ssh/ssh_config datoteci. Svi parametri koje je mogue proslijediti putem naredbenog retka mogue je definirati u navedenim konfiguracijskim datotekama.

292/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

Konfiguracijski parametri mogu se definirati za svako raunalo na koje se eli spajati tako da se navede kljuna rije Host koja definira na koja se sva raunala parametri odnose. Navedeni parametri vrijede sve do sljedee kljune rijei Host nakon koje se navede parametri za sljedeu vezu. Na taj nain mogue je definirati razliite parametre sesije za spajanje na razliita udaljena raunala. Ovo moe biti vrlo korisna opcija, pogotovo ukoliko korisnik posjeduje korisnike raune na vie razliitih SSH posluitelja.

293/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

POSLUITELJSKI DIO SSH APLIKACIJE


Osnovni zadaci SSH posluitelja su da oslukuje mrene zahtjeve SSH klijenata, da provodi odgovarajue postupke autentikacije klijenata, da kriptira podatke na dogovoreni nain, te da omogui klijentu koritenje svih mogunosti SSH servisa. Konfiguracija SSH programa posluitelja nalazi se u /etc/ssh/sshd_config

konfiguracijskoj datoteci. Pokretanje SSH posluitelja potrebno je omoguiti prilikom svakog podizanja sustava, to je mogue postii dodavanjem odgovarajuih start skripti u /etc/rc direktorij. Neki od brojnih konfiguracijskih parametara s kojima je mogue pokretati program su: -b => definira se veliina kljua kojeg posluitelj generira prilikom instalacije. Inicijalno je to 768 bitova. -d => pokretanje moda za otklanjanje greaka. Ukoliko se zada ova opcija sustav e u log datoteke biljeiti sve akcije vezane za rad posluitelja, a ujedno e se i u konzoli generirati odgovarajue poruke to olakava otklanjanje greaka. -f => ukoliko se ne eli koristiti inicijalna /etc/ssh/ssh_config datoteka definira se konfiguracijska datoteka iz koje se ita konfiguracija. -g => definira se vrijeme koje se klijentu dozvoljava za izvravanje postupka autentikacije. Ukoliko se klijent ne autenticira za to vrijeme posluitelj prekida sesiju s klijentom. Inicijalna vrijednost ovog parametra je 600 sekundi. -h => definira se datoteka iz koje se ita javni klju posluitelja. Ovaj parametar potrebno je definirati u sluajevima kada se sshd program pokree pod ovlastima drugog korisnika budui da isti nema ovlasti pristupa ssh_host_key datoteci koja inicijalno sadri ovu vrijednost. U tom sluaju korisnik definira vlastitu datoteku kojoj ima pristup, te je nakon toga navede kao parametar sshd posluitelju.

294/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

-i => ovaj parametar definira se u sluajevima kada se sshd program pokree putem inetd posluitelja. U principu se ovakav pristup ne preporuuje, budui da se na taj nain neto usporavaju performanse sustava. -p => definira se mreni port na kojem posluitelj oslukuje zahtjeve klijenta. Na ovaj nain mogue je ssh daemon programu zadati bilo koji port koji e se koristiti za uspostavu mrenih sesija. Inicijalno je to port 22.

Konfiguracijska datoteka SSH posluitelja


Kako je ve ranije spomenuto sshd program svoju konfiguraciju ita iz datoteke /etc/ssh/ssh_config (osim ukoliko nije drugaije definirano -f parametrom). U toj datoteci mogue je definirati brojne kljune rijei kojima se utjee na rad sshd posluitelja, a neke od njih su: AllowGroups => parametar koji se koristi za definiranje grupe korisnika koja ima prava pristupa SSH posluitelju. Mogue je navesti vie korisnikih grupa, pri emu se iste odvajaju razmakom. Inicijalno je dozvoljeno spajanje korisnika bez obzira kojoj grupi isti pripada. Mogue je koritenje wildcard znakova * i ? za preciznije definiranje liste korisnikih grupa. AllowUsers => slino kao i AllowGroups parametar, samo to se odnosi na korisnike, a ne na grupe korisnika. AllowTCPForwarding => ovaj parametar omoguuje tuneliranje ostalih protokola preko SSH sigurnog kanala. Inicijalno je postavljen na vrijednost "yes". Banner => parametar koji je omoguen samo kod SSH2 verzije protokola, a definira datoteku iji e se sadraj prikazati korisniku prilikom uspostave veze s udaljenim raunalom.

295/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

Chipers => definiraju se grupe algoritama koje se mogu koristiti za kriptiranje podataka. Mogue je definirati sljedee algoritme: aes128-cbc, 3des-cbc, blowfishcbc, cast128-cbc i arcfour. Mogue je definirati vie algoritama pri emu se isti u tom sluaju odvajaju zarezom. CheckMail => definira se da li sshd posluitelj mora provjeravati mail korisnika prilikom njegovog spajanja. Inicijalna vrijednost ovog parametra je "no". Deny Groups i Deny Users => parametri kojima se na slian nain kao i kod AllowGroups i AllowUsers omoguuje zabrana pristupa SSH servisu. Koritenjem ovih parametara mogue je vrlo precizno definirati kojim korisnicima je omogueno koritenje SSH servisa. IgnoreRhosts => onemoguuje se autentikacija korisnika na temelju .rhosts i hosts.equiv datoteka. Inicijalna vrijednost ovog parametra je "yes", budui da se ovaj nain autentikacije smatra manje sigurnim. IgnoreUserKnownHosts => definira se da li sshd posluitelj uzima u obzir known_hosts datoteku prilikom procesa autentikacije korisnika. Inicijalna vrijednost ovog parametra je "yes". PaswordAuthentication => definira se da li je korisniku dozvoljeno prijavljivanje na sustave na temelju korisnike ifre. Inicijalna vrijednost ovog parametra je "yes". PermitRootLogin => definira se da li je dozvoljeno prijavljivanje pod korisnikim raunom administratora sustava. Inicijalna vrijednost ovog parametra je "yes". Mogue je definirati sljedee vrijednosti ovog atributa: yes, no, forced-commands-only (omoguuje prijavljivanje administratora na temelju njegovog para tajni/javni klju) i without-password (bez korisnike ifre). Port => definira se mreni port na kojem sshd posluitelj oslukuje zahtjeve. Inicijalno je to port 22.

296/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

Protocol => definira se verzija protokola koju koristi sshd program posluitelj. Mogue vrijednosti ovog atributa su 1 i 2. PubkeyAuthentication => definira se da li je dozvoljena autentikacija korisnika na temelju para javni/tajni klju. Inicijalna vrijednost ovog parametra je "yes". ReverseMappingCheck => vrlo korisna opcija sa stanovita sigurnosti, kojom se od sshd posluitelja zahtjeva da provjeri IP adresu i ime raunala s kojeg zahtjev dolazi. Na ovaj nain prua se dodatna zatita od IP i DNS spoofing napada u kojima neovlateni korisnik laira IP adresu ili ime raunala s kojeg konekcija dolazi, kako bi na taj nain ostvario neautorizirani pristup resursima drugog sustava. RhostsAuthentication => definira se da li je mogua autentikacija samo na temelju .rhosts ili hosts.equiv datoteka. U normalnim okolnostima ne preporuuje se koritenje ove metode budui da se smatra manje sigurnom. Iz sigurnosnih razloga inicijalna vrijednost ovog parametra je "no". RhostsRSAAuthentication => definira se da li je dozvoljena autentikacija korisnika na temelju .rhosts ili hosts.equiv datoteka u kombinaciji s RSA autentikacijom. Ova metoda neto je sigurnija u odnosu na prethodno navedenu, ali je takoer iz sigurnosnih razloga vrijednost ovog parametra postavljena na vrijednost "no". RSAAuthentication => definira se da li je dozvoljena autentikacija korisnika na temelju RSA algoritma, odnosno na temelju para javni/tajni klju korisnika. Inicijalna vrijednost ovog parametra je "yes", budui da se ovaj mehanizam autentikacije smatra prilino sigurnim. Subsystem => definira se dodatni vanjski podsustav (npr. sftp podsustav za prijenos datoteka). U tu svrhu potrebno je navesti ime podsustava koji se eli koristiti. Inicijalno ovdje nije naveden niti jedan podsustav.

297/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

X11Forwarding => omoguuje se preusmjeravanje X11 protokola putem sigurnog SSH kanala. Inicijalno je ova mogunost iskljuena. Pomou ovih parametara mogue je vrlo precizno definirati ponaanje SSH daemon programa.

Authorized_keys datoteke
Kako je ve ranije spomenuto authorized_keys datoteka sadri popis javnih RSA kljueva svih korisnika koji se SSH protokolom ele spajati na SSH posluitelj pomou svog para tajni/javni klju. Kod SSH1 verzije protokola ta datoteka nosi ime authorized_keys, dok kod SSH2 verzije ta ista datoteka nosi ime authorized_keys2. Na istom sustavu mogue je koristiti obje datoteke ukoliko se eli da posluitelj jednako podrava SS1 i SSH2 verzije protokola. Svaki redak ove datoteke sadri jedan javni klju (RSA ili DSA, ovisno o koritenom algoritmu enkripcije) korisnika. Znak # kao i veini drugih sluajeva predstavlja poetak komentara te se kao takav ignorira. Za datoteku $HOME/.ssh/authorized_keys osim to je na raspolaganju korisniku u ijem se home direktoriju nalazi, takoer se preporuuje da bude dostupna administratoru sustava. U nju e korisnici kopirati svoj javni klju za SSH1 verziju protokola, ili preciznije reeno identity.pub datoteku. U datoteku $HOME/.ssh/authorized_keys2 korisnici kopiraju kljueve vezane za SSH2 verziju protokola, odnosno id_rsa.pub i id_dsa.pub datoteke. /etc/ssh_host_key, /etc/ssh_host_dsa_key, /etc/ssh_host_rsa_key datoteke Navedene datoteke sadre privatne kljueve tog raunala. Slino kao to i svaki korisnik posjeduje svoj par javni/tajni klju, tako i svako raunalo koje koristi SSH servis ima svoj zasebni par kljueva. Ove datoteke iz tog razloga moraju imati ovlasti koje samo

298/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

administratoru sustava omoguuju njihovo pregledavanje i mijenjanje. Sshd program se iz sigurnosnih razloga nee htjeti pokrenuti ukoliko su ovlasti ovih datoteka krivo postavljene. /etc/ssh_host_key.pub, datoteke Navedene datoteke sadre javne kljueve raunala na kojem se nalaze. Za razliku od tajnog kljua opisanog u prethodnoj stavci ova datoteka moe biti dostupna ostalim korisnicima. Njezin sadraj se takoer generira koritenjem ssh-keygen naredbe. etc/ssh_known_hosts i $HOME/.ssh/known_hosts datoteke Ove datoteke koriste se u sluajevima kada se proces autentikacije provodi na temelju .rhosts datoteke u kombinaciji sa RSA postupkom. Javni klju raunala koje se ele spojiti se mora nalaziti u ovoj datoteci ukoliko se eli uspjeno uspostaviti veza sa SSH posluiteljem. Iste datoteke klijent SSH aplikacija koristi kako bi provjerila identitet udaljenog raunala na koje se pokuava spojiti. Ukoliko se u ovome koraku primijete bilo kakve neregularnosti sesija se prekida. /etc/hosts.allow i /etc/hosts.deny datoteke Datoteke kojima se moe tono kontrolirati dozvola pristupa pojedinim servisima instaliranim na istom raunalu. Datoteke se koriste u kombinaciji sa tcp_wraper programskim paketom u svrhu poveane kontrole pristupa pojedinim TCP mrenim servisima. $HOME/.rhosts datoteka Ova datoteka sadri razmakom odvojene vrijednosti korisniko ime - ime raunala, i svi tako navedeni korisnici sa navedenog raunala mogu se spojiti na to raunalo bez navoenja korisnike ifre. Koritenje .rhosts datoteke naslijeeno je od starijih mrenih servisa kao to su rsh, i rlogin koji se danas vie ne koriste. Iz navedenog odmah se moe zakljuiti zato se korisnicima nikako ne preporuuje koritenje ovakvog mehanizma autentikacije, budui da je /etc/ssh_host_dsa_key.pub, /etc/ssh_host_rsa_key.pub

299/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

isti prilino nesiguran. Ukoliko se eli omoguiti ovakav nain autentikacije, to je potrebno eksplicitno navesti u konfiguracijskoj datoteci sshd posluitelja. $HOME/.shosts datoteka Shosts datoteka je posebno odreena datoteka koja obavlja ulogu .rhosts datoteke, s jedinom razlikom da se koristi iskljuivo za ssh servis. /etc/hosts.equiv datoteka U ovoj datoteci navedena su imena raunala koja se mogu spojiti na dotino raunalo bez odgovarajue korisnike ifre, pod pretpostavkom da korisnik ima isto korisniko ime na oba raunala. Slino kao i kod .rhost datoteke korisnicima se iz sigurnosnih razloga ne preporuuje koritenje ove datoteke u svrhu autentikacije udaljenih korisnika. /etc/shosts.equiv Isto kao i /etc/hosts.equiv, samo to datoteka vrijedi iskljuivo za SSH servis.

300/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

OPENITO O PREUSMJERAVANJU TCP PORTOVA I SFTP


Preusmjeravanje portova, popularno zvano tuneliranje, je mehanizam koji korisniku omoguuje preusmjeravanje inae nesigurnog TCP prometa preko sigurnog SSH komunikacijskog kanala. Na ovaj nain mogue je proizvoljne, inae nesigurne (nekriptirane) mrene servise kao to su POP, IMAP, SMTP, telnet i dr., preusmjeriti preko SSH kanala te ih na taj nain zatiti od neovlatenog promatranja. Na sljedeoj slici prikazan je princip na kojem se bazira tuneliranje protokola preko SSH sigurnog kanala:

Slika: Tuneliranje protokola Princip je sljedei: SSH klijentu potrebno je rei koji se port na lokalnom raunalu eli tunelirati kroz sigurni SSH kanal, i na koji port udaljenog raunala se taj promet eli preusmjeriti. U tu svrhu koristi se ve prije spomenuta -L opcija ssh klijenta. Nakon toga kompletni promet lokalnog raunala koji se alje na u prethodnoj fazi definirani port biti e putem sigurnog SSH kanala preusmjeren na sshd posluitelj navedenog udaljenog raunala. Sshd posluitelj prima kriptirani promet na SSH portu 22 i prosljeuje ga servisu na port koji je u prvom koraku definiran kod ssh klijenta. Servis vraa odgovor na primljeni zahtjev, te ga prosljeuje sshd posluitelju, koji ga putem SSH kanala vraa klijentskom dijelu aplikacije.

301/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

SSH klijent prima odgovor i prosljeuje ga servisu koji je inicirao sesiju. Openita sintaksa naredbe kojom se omoguuje tuneliranje, tj. preusmjeravanje protokola je: # ssh -f -L [local port]:[full name of remote host]:[remote port] [some command] Parametar -f nije obavezan, ali ga je poeljno navesti kako bi kreirani ssh tunel radio kao pozadinski proces. Na taj nain nakon uspostave SSH tunela omoguuje se oslobaanje konzole, te je mogue zadavanje drugih naredbi. Ukoliko se ne proslijedi parametar -f nakon uspostave SSH kanala korisnik e morati prei u drugu konzolu ukoliko eli izvravati naredbe na lokalnom raunalu. Parametar -L slui za definiranje parametara postupka tuneliranja, odnosno za definiranje portova koji e biti preusmjereni. Prilikom proizvoljnog odabira porta preporuuje se uzimanje nekog visokog porta koji nije koriten od strane nekih drugih aplikacija, tj. uzimanje nezauzetog porta. Lista portova koji su zauzeti od strane drugih programa moe se nai u datoteci /etc/services. Ukoliko se ssh klijent eli pokretati kao pozadinski proces (parametar -f) neophodno je na kraju naredbe zadati naredbu koju e posluitelj izvriti nakon prihvaanja sesije, npr. naredbu sleep koja ujedno korisniku daje dovoljno vremena da se klijent aplikacijom servisa koji se tunelira (telnet, FTP) spoji na udaljeno raunalo. Naredba sleep kao argument prima broj sekundi koji e udaljeni proces biti spreman prihvatiti zahtjev klijenta. Tuneliranje telnet servisa teoretski nema previe smisla, budui da je SSH sam po sebi sigurna zamjena za telnet servis. Mogue je bilo koji TCP protokol tunelirati kroz SSH kanal (POP, POP3, IMAP, FTP i sl.). Protokoli koji su najvei kandidati za SSH preusmjeravanje su oni koji ne implementiraju nikakve mehanizme zatite podataka. Tuneliranje FTP protokola (FTP slino kao i telnet servis podatke mreom alje u istom tekstualnom obliku) na nain kako je to gore opisano neto je kompleksnije u odnosu na ostale protokole kao to su telnet, POP, NNTP i dr. Razlog je taj to FTP konekcija koristi dva porta za komunikaciju, jedan kontrolni i jedan podatkovni, a stvar se dodatno komplicira budui da postoje dva moda rada FTP protokola aktivni i pasivni. Sftp je program koji dolazi u paketu s openssh programskim paketom, a omoguuje sigurnije koritenje FTP protokola pomou SSH protokola. Koritenje sftp programa preporuuje se svim korisnicima kao sigurnija zamjena za tradicionalni FTP servis, a koritenje programa je vrlo jednostavno, budui da su sve naredbe naslijeene od obinog FTP protokola.

302/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

SCP
S openssh programskim paketom dolazi i scp program. Scp (Secure Copy) program omoguuje sigurno kopiranje datoteka izmeu lokalnog i udaljenog raunala. Sigurno kopiranje datoteka bazira se na koritenju SSH protokola, odnosno kriptiranju podataka koji se prenose raunalnom mreom. Osim sigurnosti koju nude, dodatna prednost sftp i scp programa je ta to ne zahtijevaju instalaciju dodatnih programa posluitelja na udaljenom raunalu. Razlog tomu je taj to oba programa svoj rad baziraju na SSH protokolu, te kao takvi koriste sshd posluitelj. Koritenje scp naredbe vrlo je slino koritenju klasine cp Linux/Unix naredbe s jedinom razlikom to se kopiranje odvija izmeu udaljenih raunala. Primjeri: # scp local_dir/filename myname@host:remote_dir => Gore navedena naredba rezultirati e kopiranjem datoteke filename unutar lokalnog direktorija local_dir u direktorij remote_dir na udaljenom raunalu host. Myname parametar definira korisniko ime korisnika na udaljenom raunalu. # scp local_dir/* myname@host:remote_dir => Slino kao i u prethodnom primjeru, samo to se kopira kompletni sadraj direktorija local_dir. #scp /home/peric/* peric@test2:/home/peric => Kopiranje sadraja home direktorija korisnika peric sa lokalnog raunala test1, u home direktorij istog korisnika na raunalo test2 WinSCP je besplatni programski paket za Windows operativne sustave (Win 95/98/NT/2000/ME/XP), koji omoguuje kopiranje datoteka izmeu lokalnog i udaljenog raunala. Program svoj rad bazira na ranije spomenutom SCP (Secure Copy) protokolu koji dolazi kao dio ssh paketa. Podrane su obje verzije SSH protokola (SSH1 i SSH2), te autentikacija korisnika na temelju RSA para javni/tajni klju odnosno ifre korisnika. Da bi se moglo uspjeno WinSCP klijent aplikacijom uspostaviti veza s udaljenim raunalom, potrebno je na njemu imati pokrenut sshd program posluitelj, budui da se kompletna veza odvija putem SSH protokola.

303/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Telnet i SSH

ZAKLJUAK
Tehnologija i znanost munjevitom brzinom grabe naprijed, a najbre od svih se razvijaju znanosti i tehnologije vezane uz raunala. Svaki napredak ima svoje prednosti i nedostatke. U mrenim okolinama, dok distribuirano raunarstvo uzima sve vie maha, te se vie ne moe vjerovati u dobronamjernost korisnika sustava, kontrola pristupa i autentikacija korisnika postaju nuan uvjet. U ovom seminaru dan je kratki pregled osnovnih karakteristika telnet i SSH protokola, te neke od mogunosti njihove primjene. Opisani su temeljni programski paketi neophodni za koritenje SSH protokola, kao i osnovni postupci njihove konfiguracije. Moe se zakljuiti da je osnovna namjena SSH protokola da omogui kreiranje sigurnih sesija izmeu dva raunala. Na taj nain uklanja se najvei nedostatak mrenih servisa kao to su telnet i sl., a to je nezatienost prijenosa podataka. Podaci se kod takvih protokola prenose raunalnom mreom u istom tekstualnom obliku to neovlatenim korisnicima omoguuje jednostavan dolazak do povjerljivih korisnikih informacija. Upravo zato se svim korisnicima preporuuje prelazak na sigurnije implementacije istih servisa, tj. koritenje SSH protokola. Iz istih razloga poseban je naglasak dan upravo sigurnosnim svojstvima ovog protokola, to je ujedno i njegova najvea snaga.

304/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

Frane Gjeldum

ARHIVIRANJE NA UNIX RAUNALIMA

305/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

STANDARDNI TAR PROGRAM

Opi dio
Program tar se koristi na linux operativnim sustavima za stvaranje i manipuliranje tar arhiva. Arhivom nazivamo pojedinaan file koji sadri vie dokumenata ,a pri tome evidentira imena tih dokumenata ,njihove vlasnike i mnoge druge podatke vezane za njih. Dokumenti unutar arhiva se nazivaju members ili lanovi. to tar radi? Osim to moemo stvoriti tar arhivu moemo vriti razne manipulacije. Tako npr. moemo ekstrahirati tj. istisnuti dokumente iz ve prije napravljenih arhiva , promijeniti ili izlistati dokumente koji su prije spremljeni u arhivu. Sami poetci uporabe tara veu se za magnetsku vrpcu pa tako kratica ureajima, dokumentima, pa i programima. Tar arhive se koriste na mnogo naina .Evo neke od njih: -Kao spremite Posebno se to koristi pri transferu kroz mreu, gdje se spremaju u arhive razni povezani dokumenti. Jedini nain da se pohrani nekoliko dokumenata na traci, a da se zadre informacije o njihovim imenima je upravo koritenjem arhiva. -Kao Back up -Za transport Postupak kopiranja kolekcije dokumenata na disk ili Arhivu kreiranu na jednom sistemu lako prenesemo na traku kao zatita od moguih oteenja ili gubitaka. drugi sistem i tamo ekstrahiramo njen sadraj Obino arhive dolaze s ekstenzijom .tar! Nije potrebno navoditi ekstenziju, ali dobro je radi preglednosti. tar na engleskom znai tape arhiver. Modernije verzije tara danas pristupaju raznim dostupnim

306/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

Autori tara Tar je originalno napisao John Gilmore, ali mnogi drugi su ga modificirali i unapreivali. Vano je istaknuti da je tar zajedniki proizvod rada vie ljudi koji su koristei tar uoavali probleme, pronalazili rjeenja i podijelili svoja miljenja.

Osnovne tar operacije i opcije


Tar moe primiti razliite argumente koji specificiraju i definiraju akcije nad pojedinim dokumentima ili arhivom. Glavni tipovi argumenata spadaju u dvije klase: operacije opcije Dozvoljeno je specificiranje i vie od jedne opcije odjednom, a isto tako nije potrebno navoenje nikakve opcije. Dok kod izvravanja odreenih operacija zahtjeva se specificiranje samo jedne odjedanput. Veinu tar operacija i opcija moemo pisati u bilo kojem od tri forme: Long (mnemonic) forma Short forma Old style forma Na primjer umjesto tipkajui naredbu ; tar - -create - -verbose - -file=afiles.tar apple angst aspic(Long form), moemo tipkati naredbu ; tar c v f afiles.tar apple angst aspic(Short form) Tri najee koritene operacije U radu s arhivama i tar programom najee: --create -c kreiramo novu arhivu,

307/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

--list -t --exstract -x ekstrahiramo lanove arhive. listamo sadraj arhive ili

File i verbose opcije Da bi razumjeli kako raditi s tar operacijama potrebno je poznavati i tar opcije. Upotrebom naredbe tar nije potrebno navoditi opcije, ali one mogu biti vrlo korisne za lake razumijevanje naredbi i izbjegavanje greaka. Opcija ima mnogo i sada emo samo dotaknuti tu temu. Dvije najkoritenije opcije su File i Verbose opcija. File opcijom odreujemo ime arhive s kojom tar radi. Ukoliko navedemo ime arhive tar e upotrijebiti default, obino predodreenu traku prikljuenu za nae raunalo ili ako nema trake, javiti e greku. Primjer Long i Short forme za opciju File: --file=archive-name -f archive-name Verbose opcija prikazuje detalje koji jo uvijek radi. Na primjer, ukoliko elimo vidjeti proces upisivanja dokumenata u arhivu i elimo pojasniti odreene stvari. Primjer Long i Short forme za opciju Verbose: --verbose -v Nakon upoznavanja s osnovnim tar opcijama prouiti emo kako kreirati arhive, listati arhive i ekstrahirati lanove iz arhive.

308/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

Kreiranje arhiva Jedna od osnovnih operacija tara je create (-c) koju upotrebljavamo za kreiranje tar arhiva, naravno da bi to objasnili moramo prvo kreirati direktorij koji sadri tri dokumenta. Navedena tri dokumenta emo spremiti u arhivu. Dokumente emo nazvati blues; folk; jazz, direktorij emo nazvati practice, a arhivu collection.tar. U daljnjim primjerima pretpostavlja direktorija. Da bi stavili dokumente blues, folk, jazz u arhivu collection.tar upotrijebiti emo slijedeu naredbu: $ tar --create file=collection.tar blues folk jazz Redoslijed argumenata nije vaan kada upotrebljavamo long opciju forme, pa se moe napisati: $ tar blues --create folk file=collection.tar jazz Naravno, vidljivo je da je iz ovog redoslijeda tee razumjeti naredbu. Redoslijed argumenata postaje vaan upotrebom short forme gdje pogrean redoslijed moe dovesti do neeljenih rezultata. Kada listamo sadraj radnog direktorija (ls) vidjet emo da se arhiva collection.tar i dokumenti blues, folk i jazz nalaze u njemu. Kreirana arhiva nije unitila kopije dokumenata u direktoriju. Zakljuno, moramo navesti operaciju i ime dokumenata inae tar nee raditi. Vrlo je vano pogledati da ve ne postoji dokument u radnom direktoriju istog imena ,kao arhiva koju emo imenovati prethodnom navedenom naredbom jer e tar izbrisati trenutni sadraj tog dokumenta. Naravno direktorije smo prije kreirali ,a arhivu collection.tar stvaramo i imenujemo prethodnim primjerom tar naredbe. Koristei istu naredbu s verboseopcijom, tar e sam dodati imena dokumenata koje koristi dok radi .To se esto koristi da prikaemo akcije koje inae ne bi vidjeli. $ tar create --verbose --file=collection.tar blues folk jazz se da se nalazimo u direktoriju practice koji je poddirektorij home

309/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

blues folk jazz Ovaj primjer je isti kao i prethodni, samo to tar sam dodaje imena blues, folk i jazz. Isti primjer u kratkoj formi bi izgledao: $ tar cvf collection.tar blues folk jazz blues folk jazz Kao to se moe vidjeti, sistem reagira jednako bez obzira da li uporabimo long ili short formu. Ve je prije napomenuto da pogrean redoslijed moe dovesti do neeljenih rezultata kod upotrebe short opcije. Kao primjer evo naredba: $ tar cfv collection.tar blues folk jazz Ovdje dolazi do greke jer se stvara arhiva imena v jer je najblie argumentu file name.U daljnje probleme neu ulaziti. Vano je napomenuti da je mogue kod stvaranja arhiva i arhivirati itave direktorije, tako da umjesto imena dokumenata navedemo ime direktorija. Direktoriji e biti arhivirani u svome radnom direktoriju i naknadno mogu biti ponovno stvoreni sa svim svojim sadrajem postupkom ekstrahiranja. Tako na direktorij practice ,koji se nalazi u home direktoriju ,moemo arhivirati u novu arhivu music.tar tipkajui naredbu: $ tar --create --verbose --file=music.tar practice practice/ practice/blues practice/folk practice/jazz practice/collection.tar

310/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

Primjeuje se da arhiva nije direktoriju iz kojeg je tar i bio pozvan.. Listanje arhiva

u poddirektoriju practice ,ve u naem home

esto elimo znati to pojedina arhiva sadri. Lako doznamo imena lanova arhive upotrebom list operacije. Tako npr. moemo pregledati sadraj arhive collection.tar tipkajui naredbu: $tar list file=collection.tar Na to bi tar odgovorio : Blues Folk jazz Mogue je i tono odraditi lan neke arhive pa nam tar vrati samo njega: $tar list file=collection.tar blues Pak da bi dobili sadraj arhiviranog direktorija, spominjanog u operaciji create., trebamo uporabiti ime direktorija kao file name argument. $ tar list file=music.tar practice Tar bi odgovorio; Practice/ Practice/blues Practice/jazz Practice/collection.tar Vidimo da su listani svi dokumenti i poddirektorij u direktoriju practice.

311/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

Kako ekstrahirati lanove iz arhive Naravno nema smisla kreirati arhivu s lanovima ako ne moemo te lanove izvaditi i uporabiti. Za ekstrahiranje lanova upotrebljava se operacija (-- extract,-x). Ekstrahiranje lanova arhive ne mijenja samu arhivu; moemo taj postupak obaviti onoliko puta koliko nam treba. Slino i drugim operacijama moemo ekstrahirati cijelu arhivu ili samo pojedine lanove tj. dokumente. Ako elimo ekstrahirati cijelu arhivu navest emo samo ime arhive bez imena lanova. $ tar xvf collection.tar (Tar e vratiti sve lanove arhive.) Ako elimo ekstrahirati tono odraen lan, navest emo ime dokumenta kao parametar nakon imena arhive. $tar extract file=collection.tar blues (Tar e ekstrahirati dokument blues iz arhive collection.tar) Slino je ako elimo ekstrahirati pojedini direktorij iz njegove arhive. Moramo navesti njegovo ime iza arhive. Ipak treba pripaziti da ve ne postoji imenom takav direktorij jer bi onda ekstrahirani dokumenti bili stavljeni ba u taj istoimeni direktorij. Ako u tom direktoriju ve ima dokumenata i to istih imena kao dokumenti u direktoriju koji ekstrahiramo ,izgubit emo ih tj. zamijenit e ih dokumenti direktorija. U sluaju da je dokument bio arhiviran,a da u svom imenu sadri i ime svog direktorija koji ustvari ne postoji unutar radnog direktorija, tar e kreirati taj direktorij. Ako elimo ekstrahirati pojedini dokument nekog direktorija koji se nalazi u arhivi, moramo navesti iza imena arhive puno ime dokumenta toga direktorija. To se vidi u sljedeoj naredbi: $ tar xvf music.tar practice/folk practice/jazz (Direktorij practice koji se nalazi u arhivi music.tar sadri dokumente folk i jazz koje elimo ekstrahirati.) ekstrahiranog

312/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

Napredne tar operacije


U ovom poglavlju spomenuti e se pet preostalih operacija tar programa.: -- append, -- update, -- concatenate, -- delete i compare. Ove operacije i mnoge njihove opcije prosjeni korisnici tar programa ne uporabljuju tako esto. One obavljaju specifine funkcije i poprilino su korisne kad ih zatrebamo. Pokuat emo ukratko se dotaknuti i dati poneki primjer svake od njih. Kroz primjere koristimo i dalje iste dokumente i direktorije kao i do sada. Kako dodati dokument ve postojeoj arhivi(-- append) Ako elimo dodati dokument ve postojeoj arhivi ,ne trebamo kreirati novu arhivu; moemo koristiti append (-r).Koristei append moemo dodati dokument istog imena kao i dokument u arhivi a da se taj dokument ne izbrie. Tar dozvoljava beskonaan broj dokumenata sa istim imenima. Vano je navest ime dokumenta koji dodajemo kao argument jer nema defaulta. Da bi demonstrirali uporabu operacije append, kreirat emo dokument rock u practice direktoriju a nakon toga ga dodati arhivi collection.tarMoramo utipkati sljedeu naredbu: $tar append file=collection.tar rock ( Kada bi pogledali sadraj arhive pomou list operacije, vidjelo bi se da je dokument rock pridodan arhivi.) Auriranje arhive koristei update Vrlo slina operacija kao append je --update (r).Ona modificiranja dokumenta istog imena. Ako je dokument modificiran u skorije vrijeme nego lan arhive ,onda se novija verzija dokumenta dodaje u arhivu. Tako e postojati stara i nova verzija u arhivi. Da bi razumjeli kako to sve radi ,kreirat emo novi dokument , classical, u practice direktoriju i malo neto dodati u dokument blues, ime ga zapravo mijenjamo. aurira tar arhivu

usporeujui datum kreiranja ili modificiranja lana arhive s datumom kreiranja ili

313/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

U primjeru pozvat emo tar s update operacijom : $ tar update -v f collection.tar blues folk rock classical blues classical $ (Naveli smo verbose opciju pa tar vraa imena dokumenata s kojima radi, a to su u ovom sluaju dokumenti koji trebaju biti aurirani(updatirani). Spajanje arhiva s concatenate Da bi dodali jednu ili vie arhiva na kraj neke druge arhive trebamo uporabiti concatenate (--catenate,-a) operaciju. To je mnogo lake nego dodavati svaki lan pojedinano. Nova arhiva nakon spajanja e se zvati istim imenom kao prva navedena arhiva u naredbi i sadravat e lanove svih arhiva, ak i ako se lanovi isto zovu, zajedno e koegzistirati. Znai da nema brisanja lanova. Uklanjanje lanova arhive koristei -- delete Da bi uklonili pojedini lan neke arhive koristei operaciju delete, potrebno je navesti ime arhive i nakon toga ime lana kog elimo izbrisati. Ako ne navedemo ime lana nita nee biti izbrisano. Operacija delete za razliku od drugih nema short formu. Na primjeru emo obrisati dokument blues iz arhive. $ tar delete file=collection.tar blues

Back up i ponovna obnova dokumenata


Kreirati arhivu koja sadri sve dokumente u tom file sistemu znai napraviti back up tog file sistema. Te arhive mogu biti ponovno uporabljene da se obnovi tj. restaurira svaki od arhiviranih dokumenata. To je posebno znaajno ako se fiziki oteti disk ili sluajno obrie neka datoteka. Kopije file sistema nazivamo dumpovima.

314/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

Treba razlikovati potpune arhivske kopije(full dumps) diferecijalne kopije(incremental dumps) Obino se radi potpuna arhivska kopija jedanput na tjedan, a diferencijalna kopija jednom na dan. To znai da e se svaki dan raditi back up svih dokumenata nastalih ili promijenjenih od zadnje potpune kopije. To znai da e neki dokumenti biti arhivirani vie od jedanput .Takva strategija nam omoguava restauriranje file sistema s preciznou od jednog dana ekstrahirajui samo dvije arhive; zadnju tjednu potpunu arhivsku kopiju i zadnju diferencijalnu kopiju. Time bi jedino mogle biti izgubljeni dokumenti kreirani ili mijenjani nakon zadnje dnevne diferencijalne kopije. Program tar obino je distribuiran sa gotovim besplatnim skriptama za back up i restauraciju. Skripte za back up i restauraciju su dizajnirane da budu upotrebljavane zajedno. Osim uporabom skripta uvijek moemo i tipkati naredbe rukom . Vrlo zgodna stvar je da se dokumenti mogu restaurirati tipkajui naredbe rukom iz arhive kreirane back up skriptom i obrnuto. Full dump s esto naziva i level-0 tj. nulti nivo ,a incremental dump predstavlja level-1 tj. prvi nivo. Arhive se obino rade na prenosivim medijima; magnetske vrpce ,diskete , tape catriges i razni drugi mediji. Koliina podataka koji se mogu pohraniti ovisi naravno o veliini diska ili trake, ali i o nainu na kojim su formatirani. Prednost magnetskih medija je da se mogu ponovno uporabiti. Arhive jednostavno obriemo i ponovno uporabimo magnetski medij. Ipak takve medije treba zatititi od magnetskog polja ,a kada ponu proizvoditi greke ,s vremenom ih treba zamijeniti.

315/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

CPIO PROGRAM
Cpio kopira dokumente u tar ili cpio arhivu. Arhiva moe biti dokument na disku ili npr. magnetskoj traci. Slino kao i tar obavlja i ekstrahiranje van arhiva. Gnu cpio podupire sljedee formate arhiva : binarni ,stari ASCII, novi ASCII , star tar , posix.1 tar. Po defaultu cpio kreira arhive u binarnom obliku da bi bio kompatibilan sa starijim cpio programima. Poto podrava i tar format , cpio je kompatibilan i sa tar programom. Kod ekstrahiranja cpio prepoznaje vrstu formata arhiva i moe itati i arhive kreirane na raunalima sa drukijim poretkom bajtova. Gnu cpio izvodi tri primarne funkcije i tri operativna naina rada(moda) -kopira dokumente u arhivu (copy-out mode) -ekstrahira dokumente iz arhive (copy- in mode) -dodaje dokumente drugom direktorijskom stablu (copy- pass mode)

Copy-out mode
U copy out modu cpio kopira dokumente(files) u arhivu. on ita imena dokumenata ,liniju po liniju sa standardnog ulaza i stvara arhivu na standardnom izlazu. Tipian nain da stvorimo listu imena dokumenata je da uporabimo find naredbu. U tom sluaju poeljno je dodati find naredbi opciju -depth da smanjimo probleme s dozvolama neitljivih direktorija. Opa sintaksa: cpio {-o|--create} [-0acvABLV] [-C bytes] [-H format] [-M message] [-O [[user@]host:]archive] [-F [[user@]host:]archive] [--file=[[user@]host:]archive] [--format=format] [--sparse] [--message=message][--null] [--reset-access-time] [--verbose] [--dot] [--append] [--block-size=blocks] [--dereference] [--io-size=bytes] [--help] [--version] < name-list [> archive]

316/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

Generalna sintaksa sadri mnogo opcija pa bi predugo trajalo objanjavanje svake od njih. Nadam se da e biti bar malo razumljivija nakon to pokaemo par primjera. U prvom primjeru prikazat emo arhiviranje sadraja pojedinog direktorija. % ls | cpio -ov > directory.cpio (Naredbu ls koristimo da dobijemo listu imena dokumenata na standardni ulaz. Opcija -o kreira arhivu a -v opcija vraa imena dokumenata redoslijedom kako ih dodajemo u arhivu. Opcije mogu stajati skupa ali mora ispred njih doi crtica ili samostalno bez crtice. Oznaka > obavlja preusmjeravanje izlaza u dokument directory.cpio Ako elimo arhivirati cijelo direktorijsko stablo uporabit emo naredbu find za dobavljanje liste dokumenata. Primjer: % find . -print -depth | cpio -ov > tree.cpio

Copy-in mode
U copy in modu cpio ekstrahira dokumente van arhive i lista sadraj arhive. Arhiva se nalazi na standardnom ulazu. Mogue je uporabiti i predloke (paterns) pa samo imena dokumenata u arhivi koja se podudaraju sa zadanim predlocima e biti ekstrahirana. Ako nisu zadani predloci, ekstrahirat e se svi dokumenti iz arhive. Ekstrahiranje arhive zahtjeva malo vie razmiljanja jer cpio nee kreirati direktorije za obnovljene dokumente po defaultu, ni ti e prepisati stare dokumente bez da mu zadamo opciju. Opa sintaksa: cpio {-i|--extract} [-bcdfmnrtsuvBSV] [-C bytes] [-E file] [-H format] [-M message] [-R [user][:.][group]] [-I [[user@]host:]archive] [-F [[user@]host:]archive]

317/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

[--file=[[user@]host:]archive] [--make-directories] [--nonmatching] [--preserve-modification-time] [--numeric-uid-gid] [--rename] [--list] [--swap-bytes] [--swap] [--dot] [--unconditional] [--verbose] [--block-size=blocks] [--swap-halfwords] [--io-size=bytes] [--pattern-file=file] [--format=format] [--owner=[user][:.][group]] [--no- preserve-owner] [--message=message] [--help] [--version] [-no-abosolute-filenames] [-only-verify-crc] [-quiet] [pattern...] [< archive Primjeri: % cpio -iv < directory.cpio (Ovom naredbom se dokumenti pohranjeni u arhivi directory.cpio ponovno obnavljaju i smjetaju u trenutno aktivni direktorij. Opcija -i ekstrahira arhivu a -v prikazuje imena dokumenata redoslijedom kako se ekstrahiraju.)

% cpio -idv < tree.cpio ( Ovom naredbom se sadraj itavog stabla direktorija ekstrahira u trenutni direktorij. Opcija -d slui za kreiranje direktorija ako je potrebno. Posebna -u opcija se moe uporabiti ako elimo prepisati stare istoimene dokumente s novim ili skorije promijenjenim.)

Copy-pass mode
U copy-pass modu cpio kopira dokumente iz jednog direktorijskog stabla u drugo, kombinirajui korake iz copy-in i copy-out modova a da ustvari i ne koristi arhivu. Sa standardnog ulaza ita listu dokumenata koje treba kopirati u drugi direktorij. Ime tog direktorija se ne zadaje kao opcija ve kao slobodan argument. Opa sintaksa: cpio {-p|--pass-through} [-0adlmuvLV] [-R [user][:.][group]] [--null] [--reset-access-time] [--make-directories] [--link]

318/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

[--preserve-modification-time] [--unconditional] [--verbose] [--dot] [--dereference] [--owner=[user][:.][group]] [--sparse] [--no-preserve-owner] [--help] [--version] destination-directory < name-list% Primjer: find . -depth -print0 | cpio --null -pvd new-dir (Primjer pokazuje kopiranje dokumenata iz trenutnog direktorija i poddirektorija u novi direktorij new dir.Kombinacija opcija -print0 i -null se koristi za dobavljanje imena dokumenata izmeu find i cpio.Opcija -p oznaava cpio-u da doda dokumente u direktorij new dir.

Usporedba tar i cpio programa


Iako se uporabljuju za sline stvari, postoje odreene razlike . Glavna razlika je u sintaksi tj. naredbama koje tipkamo i formatu zaglavlja. Tar je malo vie orijentiran prema trakama .Ako je npr. u pitanju restauracija na magnetskoj traci, a dogodila se neka greka, tar e stati u tom trenutku dok bi cpio preskoio mjesto s grekom i pokuao restaurirati ostatak dokumenata. Prednost cpio programa je upravo to da ne bi blokirao sve pa kaemo da on mnogo efikasnije upotrebljava medije . Tar uvijek koristi 512 bajtova za dokument zaglavlja dok cpio uzima onoliko mjesta koliko mu je potrebno za zaglavlje. Jo jedna razlika je da cpio arhivira specijalne dokumente ,a tradicionalni tar ne. Postoje jo neke razlike u radu s simbolinim linkovima itd.! Naravno neko se moe upitati zato je napravljen cpio kad je tar ve postojao i radio sline stvari. Istina je ustvari da je cpio nastao prvi. Mnogi ljudi koji su radili na ta dva programa su vremenom razvijali razne verzije uvijek teei za boljim rjeenjima .

319/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

DD PROGRAM
Jo jedan program , slian tar ili cpio programima koji se moe uporabiti za arhiviranje je dd program. On kopira dokumente (files) uz manipuliranje ulazno-izlaznim (i/o)veliinama blokova. Opcionalno se mogu vriti konverzije nad dokumentima. Po defaultu kopira dokumente sa standardnog ulaza na standardni izlaz. Opa sintaksa: dd[option] Navest emo neke opcije koje program prima: if=file (ita iz FILE umjesto iz standardnog ulaza) of=file (pie u FILE umjesto na standardni izlaz) ibs=bytes (ita BYTES bajtove po redoslijedu) obs =bytes (pie BYTES bajtove po redoslijedu) bs=bytes (ita i pie BYTES bajtove po redoslijedu cbs=bytes (konvertira bajtove po redoslijedu) skip=blocks (preskae blokove ibs; blokovi na ulazu prije kopiranja) seek=blocks (preskae blokove obs; blokovi na izlazu prije kopiranja) count=blocks (kopira blokove ibs do kraja dokumenta; blokove na izlazu) conv=CONVERSION,CONVERSION] (kopira dokument ali prema tome to je navedeno kao argument) -ascii (pretvara ebcdic u ascii) -ebcdic (pretvara ascii u ebcdic) -lcase (pretvara velika slova u mala) -ucase (pretvara mala slova u velika)

Vidimo da opcija ima dosta , ali najbolje e neke stvari objasniti na konkretnom primjeru.

320/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Arhiviranje na Unix raunalima

U sljedeoj shell naredbi kopirat emo podatke u blokove velike 512 kb, Izmeu diska i trake ali neemo spremati ni restaurirati podatke u labelu na poetku diska. Primjer: (dd bs =4k skip=1 count=0 && dd bs=512 k) < $disk > $ tape -kopirano je sve osim labele na poetku diska Primjer: (dd bs=4k seek=1 count=0 && dd bs=512 k) <$ tape>$disk -kopirano je sve iz trake na disk ali se labela na disku nije dirala

321/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Davorin ajnovi

UNIX devices, mounting devices

322 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

UVOD
UNIX je u razdoblju nastajanja predstavljao jezgru operacijskog sustava, a kasnije je ovo ime znailo i dodatne uslune programe koji su postali sastavni dio UNIX-a i omoguavali rijeavanje razliitih pitanja. Danas izgovarajui rije UNIX u irem smislu, podrazumijevamo jezgru UNIX-a, uslune programe, dodatne mrene servise, koa to su TCP/IP protokol, prijenos datoteka za udaljeni rad, raspodijeljeni sustav datoteka NFS, mrena informacijska baza NIS. Podrazumijevamo i zaista ogroman niz uslunih programa koji se uglavnom mogu besplatno skinuti s Interneta, a kod novijih instalacija ve su po definiciji ugraeni zajedno s UNIX-om. UNIX je podloga gotovo svim aplikacijama od baza podataka, projektiranja u elektrotehnici, do crtanja slika i obrade teksta. Kao to vidimo UNIX pokriva jako iroko podruje i za svako od njih mogla bi se napisati knjiga. U ovom seminarskom radu trudio sam se pokriti neke osnovne stvari tipa montiranja ureaja kao to je CD-ROM, usb, diskovne particije i slino koje mnogima poetnicima u poetku zadaju glavobolje posebno onim korisnicima koji su navikli na prijateljsko okruenje Windowsa. Iako se o ovom podruju moe zaista jako puno toga napisati, trudio sam se to je vie bilo mogue pojednostaviti neke stvari koje sluajnom itatelju mog seminarskog rada u potrazi za nekim rijeenjem moe pomoi u svladavanju problema. Skupio sam nekoliko najee postavljanih pitanja o montiranju(deviceova) na jedno mjesto i objasnio ih. Ipak kako se ovdje govori o UNIX-u mora se imati na umu da je ipak potrebno uloiti truda i imati puno puno strpljenja da bi se na kraju dobili rezultati. U drugom dijelu obrazloio sam Sambu programski paket koji je vrlo popularan zbog svoje sigurnosti i stabilnosti. Dat je uvid u konfiguraciju Sambe kao i neke osnovne stvari pomou kojih se moe stei dojam o samom paketu i njegovim mogunostima.

323 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

MOUNT Sustavi datoteka


Da bi mogli montirati neki od ureaja tipa diska ,cd-rom-a ili npr. Usb-sticka moramo neto spomenuti o sustavima datoteka. Cijela pria se svodi na to da ne moemo jednostavno ubaciti cd-rom ili prikljuiti usb stick i i oekivati da sustav sve sam obavi(proita podatke ili ih zapie) ve moramo te ureaje montirati. Sustavi datoteka tvore osnovu za pohranu podataka na Linux raunalima. Linux programi, biblioteke, sustavske datoteke i korisnike datoteke se nalaze u sustavima datoteka. Zbog specifinog svojstva Linuxa da sve resurse s kojima raspolae tretira kao datoteka ,kod UNIX-Linux korisnika se uvrijeila izreka sve je datoteka. S gledita korisnika postoje tri vrste datoteka: obine datoteke kazala datoteke specijalne datoteka

Malo emo pogledati ovu zadnju vrstu tj. specijalne datoteke! Specijalne datoteke su vrlo neobino ali zgodno svojstvo UNIX-a. Specijalne datoteke se koriste(itaju, piu) kao i obine datoteke , ali zahtijevi za itanjem-pisanjem rezultiraju u aktiviranju pripadne ulazno izlazne jedinice. Ulazi u specijalne datoteke nalaze se u direktoriju /dev iako je to samo dogovorno ne i nuno.Tako ako elimo pisati na pisau piemo u datoteku /dev/lpt. Prednost ovakve organizacije ulaza i izlaza je sljedea: 1. ulaz-izlaz u datoteku i u ulazno-izlaznu jedinicu se ne razlikuju 2. imena datoteka i ulazno-izlaznih jedinica imaju ista svojstva 3. postoji isti zatitni mehanizam i za datoteke i za ulazno-izlazne jedinice itd.

Slika 1. Prikaz dijela strukture kazala

324 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Pogledajmo za ta se koriste direktoriji /dev, /etc, /mnt . direktorij /dev sadri specijalne datoteke,vanjske jedinice,kao npr. diskovi, pisai itd. direktorij /etc sadri dosta izvedbenih i podatkovnih datoteka vezanih uz sam operacijski sustav i njegovu konfiguraciju. Ono je vrlo vaan direktorij jer sadri mnoge datoteke za podeavanje sustava kao i datoteku fstab koja sadri popis sustava datoteka koje se stvaraju prilikom pokretanja Linuxa. direktorij /mnt se koristi za privremeno povezivanje djelova diska, CD-ROM-a i dr. Dakle u Linuxu je prostor na kojem se nalaze datoteke podijeljene na direktorije u obliku stabla na vrhu kojeg se nalazi root slika 1. Korisnici od tog stabla vide samo direktorije i datoteke. U stvari mnogi direktoriji koji se nalaze unutar stabla su fiziki smjeteni na raznim dijelovima diska, na razliitim diskovima ili ak raunalima. Ako je jedna od tih particija smjetena na disku dodana u stablo u direktorij koji je poznat pod nazivom mount point onda se takav direktorij i sve to se u njemu nalazi naziva sustav datoteka.

Postavljanje i uklanjanje sustava datoteka


Sad kad smo neto rekli o sustavima datoteka pogledajmo kako se moze dodavati i uklanjati CD-ROM, diskovna particija, usb mp3 player, flopy disk itd. Da bismo uspostavili sustav datoteka u stablu direktorija, moramo imati fiziku particiju, CD-ROM , flopy i sl. Isto tako moramo provjeriti postoji li direktorij u kojem elimo dodati sustav datoteka. Samim postavljanjem sustava datoteka neemo dodati(stvoriti) takav direktorij mount point, ve on mora postojati prije nego ponemo stvarati sustav datoteka. Recimo da elimo stvoriti sustav datoteka u direktoriju /mnt za CD-ROM(pogon /dev/sr0). Mora postojati direktorij /mnt inae e postupak biti prekinut. Nakon to ste pod tim direktorijem stvorili sustav datoteka svi podatci sa CD-ROM-a pojavit e se u direktoriju /mnt , inae je on prazan.Napomenimo i to da se unutar direktorija /mnt moe kreirati vie razliitih sustava datoteka tipa CD-ROM-a, WIN_C particije, usb, flopy pa im se pristupa na nain /mnt/cd-rom ili /mnt/usb itd. Da bismo uspostavili sustav datoteka upotrijebit emo naredbu mount , a sintaksa je sljedea: mount device mountpoint tj. gdje je device fiziki ureaj(disk ili particija) koji

325 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

montiramo a mountpoint mjesto montiranja odnosno mjesto u stablu direktorija na kojem se stvara sustav datoteka.Naredbu mount mogu koristiti iskljuivo superkorisnici inae bi sustav sigurnosti bio naruen. Napomenimo jo nekoliko argumenata koje koristi naredba mount. Ako nije navedena opcija koja vam je potrebna , program mount e je potraiti u datoteci /etc/fstab.

Argument
-w -r -n -t type -a -o popis_opcija

Opis
Stvaranje sustava dat. Sa dozvolom za itanje i pisanje Stvaranje sustava dat. Sa dozvolom samo za itanje Stvaranje sustava bez zapisivanja u datoteku /etc/mtab Odreivanje vrste sustava datoteke(ext2,msdos,nfs itd) Stvaranje svih sustava dat. Koji se nalaze u /etc/fstab Osim ovih opcija moete koristiti i dodatne!Vidi stranicu man mount

Tablica 1. Argumenti naredbe mount

Primjer mountanja FAT particije:


Prvo moramo vidjeti kako je oznaena particija koju hoemo dii! U zavisnosti o tome na koju smo granu stavili hard disk, oznaavanje diska moe biti sljedee: hda - primarni master hdb primarni slave hdc sekundarni master hdd sekundarni slave Isto tako potrebno je znati i broj particije na disku koju hoemo montirati. To emo najlake saznati ako u konzoli otipkamo sljedee: cat /proc/partitions Dobiti emo listu particija zajedno sa veliinama(izraeno u blokovima) i brojem particije. Kada znamo koje particije elimo montirati, trebamo to ubaciti u /etc/fstab fajl ,moete ga editirati sa vi editorom na nain da utipkate vi fstab. Otvorit e se neto slino ovome: /dev/hda7 /dev/hda6 /dev/hda5 swap swap pri=1 /ext2 defaults /boot ext2 defaults 0 1 1 0 1 1

326 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

none none

/dev/pts /proc proc

devpts gid = 5, mode = 620 0 defaults 0

0 0

Potrebno je ubaciti tekst za win particije , neto ovako: /dev/hda7 /dev/hda6 /dev/hda5 /dev/hda1 /dev/hda8 none none swap swap pri=1 /ext2 defaults /boot ext2 defaults /win/c vfat /win/d vfat defaults defaults 0 1 1 1 1 0 0 1 1 0 0 0 0

/dev/pts /proc proc

devpts gid = 5, mode = 620 0 defaults

Kao to se vidi dodane su dvije nove linije za hda1 i hda8. Parametar vfat govori Linuxu da se radi o FAT particiji, a win/c i win/d su direktoriji gdje kaemo Linuxu da montira win particije.Ti direktoriji moraju postojati inae emo dobiti poruku da je montiranje nemogue(dakle ako ih nema napravimo ih mkdir ....). I na kraju postoje 1 i 0. S ovim parametrima govorimo Linuxu koje particije elimo automatski mountati pri dizanju sistema to smo i napravili. Jo samo snimimo datoteku , zatvorimo je i to je to. Evo jedan primjer runog mountanja bilo kojih particija ili ureaja(CD-ROM-ova) npr. za hda1 particiju kada nije editiran /etc/fstab fajl: mount t vfat /dev/hda1 /win/c ili mount t vfat /dev/hda8 /win/d Dakle mount kae montiraj, -t ukazuje Linuxu na fajl sistem particije, vfat govori da je to FAT a moe biti i iso9660 u sluaju da se montira cdrom ureaj itd. /dev/hda1 govori da se mounta hard disk br. 1 a moemo pisati i /dev/cdrom ako hoemo mountati cd-rom ureaj. /win/c direktori gdje hoemo montirati particiju a obino se koristi /mnt kao mount point(/mnt/win/c). A odmontiravanje ide ovako: umount /dev/hda1.

327 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

328 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Primjer mountanja NTFS particija:


#Mountanje NTFS particija cd /mnt mkdir windows fdisk -l #vidite gdje vam se nalazi particija sa NTFS #to bi bilo , ovako Disk /dev/hda: 41.1 GB, 41174138880 bytes 255 heads, 63 sectors/track, 5005 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 4623 5005 3076447+ f Win95 Ext'd (LBA) /dev/hda4 * 1 4622 37126183+ 7 HPFS/NTFS /dev/hda5 4623 5005 3076416 83 Linux Partition table entries are not in disk order zatim odete na /etc/fstab , kucate u liniju ispod : /dev/hda4 /mnt/windows ntfs rw 1 0 umjesto hda4 , stavite particiju gdje se nalazi windows zatim editirajte /etc/mtab i unesete ispod u sljedecu liniju : /dev/hda4 /mnt/windows ntfs rw 1 0 #izaete iz editora (nakon sto snimite promjene) Nastavak : mount /mnt/windows Kasnije koristite samo "mount /mnt/windows" U ranijim verzijama distribucija pisanje po ntfs particijama nije bilo dozvoljeno iz sigurnosnih razloga (zbog nestabilnosti dijela kernela koji se brine o pisanju). Napomena editirati moete na nain da otvorite u vi editoru na nain vi /etc/fstab i zatim pritisnite tipku insert unesete promjene i spremite klikom na escape zatim na : i unesete wq te pritisnete enter.

329 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Primjer mountanja usb-stick/mp3-player sticka:


Da bi smo mogli uope koristiti USB potrebno je saznati koji driver je potreban za sam USB.To e mo nai tako da otkucamo naredbu dmesg ili lspci i dobijemo neto slino ovome: otipkajmo: localhost @root $ lspci v | grep USB 00:07.2 USB Controller: VIA Technologies, Inc. USB (rev 1a) (prog-if 00 [UHCI]) Subsystem: VIA Technologies, Inc. USB Controller 00:07.3 USB Controller: VIA Technologies, Inc. USB (rev 1a) (prog-if 00 [UHCI]) Subsystem: VIA Technologies, Inc. USB Controller Iz ovog gore vidimo da nam je potreban UHCI driver u kernelu za core USB-a, a treba nam i driver za massstorage i SCSI driver... Kernel dio! Ako nemate kernel-sorce instaliran na vae raunalo instalirajte ga sa instalacijskog cd-a ili downlodajte svoju verziju s interneta. Evo kratkod primjera instalacije s cd-a. cd /mnt/cd_rom rpm i kernel-sorce 2.6.8.1 (ili koji ve imate...) i potvrdite s enterom sve do kraja! Ukoliko imate instaliran kernel dio ovo gore preskoite! Otipkajmo sljedee naredba: cd /usr/src/linux make menuconfig Zatim odaberite: Device drivers SCSI device support <M>SCSI disk support zatim, USB support <M>UHCI HCD(most Intel and Via) support <M>USB Mass Storage support i na kraju File systems DOS/FAT/NT Filesystem

330 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

<M>MSDOS fs support <M>VFAT (Windows-95) fs support

Kad ste sve odabrali spremite promjene i otipkajte sljedee: make modules make modules_install Ako je sve prolo OK pozovemo te module: modprobe usb-storage modprobe vfat modprobe msdos modprobe usb-uhci modprobe sd_mod Prikljuimo usbstick i kucajte dmesg... Trebali bi dobiti neto poput ovoga: usb 1-2: new full speed USB device using address 3 scsi0 : SCSI emulation for USB Mass Storage devices
Vendor: Model: Rev: ANSI SCSI revision: 02 Type: Direct-Access

USB Mass Storage devices found at 3 SCSI devices sda: 252509 512-byte hdwr sectors(129 MB) sda: assuming Write Enabled sda: assuming drive cache: write trougt /dev/scsi/host0/bus0/target0/lun0: p1 Attached scsi removable disk sda at scsi0 , channel 0, id 0, lun 0 To znai da je hardware prepoznaat i ostaje nam samo da ga postavimo u sistem. Na novi hardware e biti pod /dev/sda1 ili ako ve imamo neki scsi sda2 itd.. Napravimo direktorij gdje emo ga mountati... mkdir/mnt/usb zatim (ne zaboravimo kao root) mount t vfat /dev/sda /mnt/usb (msdos ili vfat) Da bi vidjeli je li USB tu otipkajmo sljedee: localhost@root $ df h

331 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Filesystem Size Used Avail Use% Mounted on /dev/hda3.......................... /dev/hda4.......................... /dev/sda1 123M 37M 87M 30% /mnt/usb Bitan nam je ovaj zadnji redak koji potvruje da je na usb uspjeno montiran.

Fstab(file system table) i mtab(mounted filesystem table)


Kao to smo ve mogli vidjeti u gornjim primjerima smo editirali datoteku fstab.Datoteku fstab itaju mount , umount ,swapon i fsck naredbe, zato je bitno da su u njoj toni podatci. Naredbe mount i umount koriste datoteku fstab da bi znale to elimo da uradimo ako smo na komandnoj liniji zadali samo ime particije ili toku povezivanja. Pogledajmo kako bi mogla izgledati datoteka fstab: /dev/sda1 /dev/sda5 /dev/cdrom /dev/fd0 /dev/sdb7 /boot /home /mnt/cdrom /mnt/floppy swap ext2 ext2 iso9660 auto swap ext2 ext2 defaults defaults noauto,owner,ro noauto,owner defaults defaults defaults 1 1 0 0 0 1 1 1 2 0 0 0 2 2

LABEL=/usr /usr LABEL=/var /var Itd.....................

U svakom redu ima po est polja razdvojenih razmacima. Svaki red opisuje po jedan sistem datoteka. Polja su obino poravnata zbog bolje preglednosti ali to nije obavezno. Prvo polje prikazuje ime ureaja ili oznake koja mu je pridruena naredbom e2label(LABEL=oznaka). Datoteka fstab moe sadravati veze do udaljenog sistema i u tom sluaju prvo polje sadri NFS putanju. Zapis server: /resurs upuuje na direktorij /resurs na raunalu serveru. U drugom polju zadaje se toka povezivanja, a tree polje oznaava tip sistema datoteka. Tono ime tipa koristi se kako bi se raspoznali odreeni sustavi datoteka u ovisnosti od konfiguracije sistema. etvrto polje sadrava opcije za povezivanje(po defaultu je rw, za itanje i upis).

332 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Peto polje se obino ne koristi, a u njemu je zadana uestalost ispisa koja se moe koristiti za pravljenje rezervnih kopija. U estom polju zadaju se koraci u kojima naredba fsck ispituje sistem datoteka. Sistem datoteka za koje je u ovom polju zadana ista vrijednost ispituju se istovremeno ako je mogue , tako da se ne zadaje ista vrijednost za dva sustava datoteka koji su na istom disku jer e pomjeranje glave naprijed i nazad znatno pogorati performanse. Samo sustavi datoteka na odvojenim diskovima ispituju se paralelno. Sada koristei upravo prikazanu datoteku fstab, naredba # mount /mnt/cdrom uradit e isto to i naredba # mount t iso9660 o ro,noauto,owner /dev/cdrom /mnt/cdrom . Naredba mount a povezati e sve sistemske dat. navedene u datoteci fstab. Ona se obino izvrava iz pokretakih skripti u toku podizanja sistema. Operator t ograniava tu operaciju na sisteme datoteka odreenog tipa. Na primjer # mount -at ext2 povezati e sve lokalne sisteme datoteka tipa ext2 na osnovno stablo. Naredba mount ita datoteku fstab sekvencijalno. Zbog toga prije prije sistema datoteka povezanih na druge sisteme u datoteci fstab moraju biti navedene njihove roditeljske particije , npr. red var/log mora biti iza reda /var , ako je /var zaseban sistem datoteka.. U datoteci mtab nalaze se svi trenutno montirani filesystemi. Ako otipkamo naredbu mount bez argumenata prikazat e se sadraj datoteke mtab. Isto tako ako elimo neto odmontirati otreba otipkati umount ime. Argument ime je dovoljan za potpunu identifikaciju fiesystema i prilikom poziva umount e prvo pogledati u /etc/mtab gdje se potrai dodatni argument koji ako ne postoji jednostavno dobijemo poruku da se specificirani filesystem ne moe odmontirati jer nije montiran. Vano je napomenuti da sustav datoteka ne moe biti odmontiran jedino ako je zauzet. Ako pokuamo odmontirati takav filesystem dobit emo poruku o zauzeu. Da bi sustav bio zauzet dovoljno je da user promijeni direktorij naredbom cd i da taj filesystem bude zauzet. Naredbom # cat /etc/mtab moemo vidjeti sadraj datoteke mtab-a.

333 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

SAMBA Uvod
U ovom dijelu opisano je instaliranje, podeavanje i koritenje paketa Samba. Pomou sambe moemo uiniti sljedee:

Dijeliti Linux sustave datoteka s Windows operativnim sustavima Dijeliti sustave datoteka iz operativnih sustava Windows s Linuxom Dijeliti pisa koji radi u okruju Windowsa s Linuxom Dijeliti pisa spojen na Linux raunalo s Windowsima

Samba je protokol koji koriste Microsoftovi operativni sustavi za dijeljenje datoteka i pisaa. Tvrtke Microsoft i Intel su 1987. god. razvile protokol SMB(Server Message Block) ,a Andrew Trigdell je prilagodio sustav raznim UNIX i Linux raunalima. Samba je danas dobro podrana i stalno se razvija i proiruje funkcionalnost. Nudi stabilan mehanizam velike snage za integriranje raunala pod Windowsom u mreu pod Linuxom. Adut sambe je to to je podrebno instalirati jedan paket na jedno raunalo pod Linuxom, a na strani Windowsa nije potreban dodatni softwer pod uvjetom da je raunalo pod Windowsima konfigurirano za rad u Microsoft mrei.

Instalacija i konfiguriranje Sambe


Samba se isporuuje uz skoro sve novije distribucije Linuxa(SuSE , Red Hat, Debian, Mandrake...) Zakrpe se mogu nai na www.samba.org. Prvo trebamo izmjeniti datoteku smb.conf kako bi rekli Sambi kako e se ponaati. U ovoj datoteci se navode direktoriji i pisai koji se zajedniki koriste, ovlasti i opi parametri Sambe. Napomenimo da Samba osigurava veliki stupanj sisurnosti ali samo pod uvjetom da je ispravno iskonfigurirana. Dvije stvari koje treba srediti kako bi osigurali osnovni nivo sigurnosti su:

334 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

U datoteci smb.conf raunala definiraju koji klijenti mogu pristupati resursima preko Sambe. U datoteci treba da se nalaze samo IP adrese(ili rasponi adresa) koji tu trebaju biti.

pomou

zatitne barijere(firewall) s filtriranjem paketa blokirati pristup TCP

prikljucima koje koristi CIFS s Interneta. To su TCP priklj. od 137 39. Ovo je primjer cjele datoteke smb.conf za jednostavnu mreu: [global] # workgroup = Ime NT domena ili ime radne grupe workgroup = MojaGrupa #Navodi raunala koja mogu da pristupaju objektima preko Sambe #Ovdje je to doputeno samo raunalima na dvije mree klase C host allow = 192.168.1 192.168.2 #Automatsko uitavanje liste printera iz datoteke printcap name = /etc/printcap load printers = yes #Koristi se zsebna zapisnika datoteka za svako raunalo , granica veliine 500K za svaku log file = /var/log/samba/log.%m max log size = 500 #definiranje naina zatite resursa. Veina korisnika eli sigurnost na nivou korisnika. #Detalji se mogu nai u datoteci security_level.txt u dokumentaciji Sambe security = user #Preporuka je upotreba ifrirane lozinke(ENCRYPTION.txt, Win95.txt u dokumentaciji #Sambe. Ne aktivirati ovu opciju bez da se proui spomenuta dokumentacija ;encrypt password = yes ;smb passwd file = /etc/smbpasswd

335 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

#Veini korisnika ova opcij daje bolje performanse.Prouiti datoteku speed.txt u stranicama #prirunika socket options = TCP_NODELAY #Djeljenje matinih direktorija korisnika. [homes] comment = Home Directories browseable = no writable = yes #Djeljenje svih pisaa [printers] comment = All Printers path = /var/spool/samba browseable = no guest ok = no writable = no printable = yes #Djeljenje odreenog direktorija [devel] comment = Zajedniki direktorij prodajnog odjela path = /devel/shared public = no writable = yes printable = no create mask 0775

NAPOMENA ! Printeri moraju biti konfigurirani na Linux raunalu. Micanjem komentara ; aktiviraju se zakomentirani redovi.

336 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Iz komentara se moe vidjeti da korisnici kada se prijave na svoja raunala mogu koristiti matine direktorije, direktorij /devel/shared i mogu printati na svim printerima poznatim serveru. Kao to se vidi datoteka smb.conf sastoji se od nekoliko odlomaka. Svaki od njih zapoinje imenom odlomka u uglatim zagradama, primjerice odlomak [global]. Unutar svakog vrijednost, primjerice odlomka paratetri se odreuju pomou parova ime =

workgroup=MojaGrupa. Datoteka smb.conf sadri tri posebna odlomka [global], [homes], [printers], te jedan ili vie korisnikih odlomaka. Odlomak [global] upravlja parametrima koji se koriste za kompletan smb posluitelj, a sadri osnovna podeenja(default)vrijednosti koje se koriste u drugim odlomcima. Prvi redak odlomka [global] definira radnu grupu kojoj pripada nae raunalo. Isto tako sadri i mjesto na kojem je definiran sustav za ispis na naem posluitelju ,a u sljedeem retku je naznaeno mjesto gdje se nalazi datoteka za podeenje ispisa. Odlomak [homes] omoguuje mrenim klijentima povezivanje s korisnikim poetnim direktorijem na naem posluitelju, a da pritom nema izravnog zapisa u datoteci smb.conf. Uputimo li zahtijev za odreenom uslugom na posluitelj samba on e prvo pregledati datoteku smb.conf i potraiti poseban odlomak koji odgovara traenoj usluzi. Ako ne nae odgovarajui zapis u datoteci, program Samba provjerava odlomak [homes]. Ako on postoji, Samba trai datoteku s lozinkama, a u njoj poetni direktorij onog korisnika koji je uputio zahtijev. Nakon toga e taj direktorij postati dijeljeni direktorij na mrei. Odlomak [printers] odreuje nain ispisa u sluaju da u datoteci smb.conf nema posebnih zapisa koji se odnose na nain ispisa. Kao i kod odlomka [homes], ako nije naen poseban zapis koji odreuje nain ispisa na pisa, Samba koristi odlomak [printers] kako bi korisnicima omoguila pristup pisaima koji su definirani u datoteci /etc/printcap. Parametar printable moemo podesiti na vrijednost yes i u tom sluaju se zadani pisa moe koristiti za ispis. Parametar guest ok slui za podeavanje mogunosti ispisa za korisnika koji se prijavio kao gost.

337 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Dijeljenje direktorija
Nakon to se uspjeno postavi posluitelj Samba, moemo stvoriti posebne dijeljene

direktorije kojima mogu pristupati odreene grupe korisnika ili javne direktorije kojima mogupristupati svi. Pretpostavimo da elimo napraviti direktorij kojem dozvoljavamo pristup samo odreenog korisnika. Trebamo napisati novi odlomak i unjeti potrebne podatke. Zadati emo korisnika, stazu korisnikog direktorija i jo neka podeenja: [davorovdir] comment = Davorov udaljeni direktorij path = /usr/local/src valid users = tomi browseable = yes public = no writable = yes create mod = 0700 Na ovaj nain stvoren je dijeljeni direktorij pod nazivom davorovdir. Staza do direktorija na lokalnom posluitelju je /usr/local/src. Kako browsable ima vrijednost yes direktori e se pojaviti u mrenom poopisu direktorija, a kako je parametar public postavljen na no moi e mu pristupati samo korisnik s imenom tomi. Pristup drugim korisnicima moemo omoguiti tako da ih se navede u parametru valid users.

338 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Provjera datoteke smb.conf


Nakon to smo stvorili datoteku s podeenjima, trebamo je jo provjeriti pomou programa testparm. Radi se o jednostavnom programu za provjeru datoteke s podeenjima /etc/smb.conf. Ako program ne nae greke prilikom izvravanja moemo koristiti datoteku smb.conf. Primjer naredbe za pokretanje programa testparm: testparm [configfile[hostname hostip]] gdje argument configfile upuuje na mjesto na kojem se nalati datoteka smb.conf . Proizvoljni parametar hostname hostip upuuje program testparm da provjeri ima li host mogunost pristupa servisima koji se spominje u datoteci smb.conf. Sljedi primjer izlaza programa testparm . Ako je u datoteci smb.conf naena greka, program testparm e izvjestiti o tome. #testparm Load smb config files from /etc/smb.conf Processingsection [homes] Processingsection [printers] Loaded services file OK. Press enter to see, a dump of your service definitions Nakon to pritisnemo enter program e otvoriti pojedini odlomak iz datoteke smb.conf.

Pokretanje samba posluitelja


Posluitelj Samba sadri dva programa-demona: smbd i nmbd. Demon smbd omoguuje dijeljenje datoteka pisaa, a nmbd podrku za NetBIOS. Da bi pokrenuli/zaustavili posluitelj Sambu moemo upotrijebiti sljedeu naredbu: /etc/rc.d/init.d/samba start | stop.

339 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Uporaba programa smbclient


Program smbclien omoguuje korisnicima Linuxa pristup drugim, obino Windows, raunalima. Razlog tome je to ako elimo pristupiti datotekama na drugim raunalima, moemo upotrijebiti razne metode kao to su FTP,NFS i r- naredbe(npr. rpc). Program smbclient koristi FTP suelje koje nam omoguuje prijenos datoteka putem mree na drugo raunalo koje koristi Sambu. Za razliku od NFS-a, program smbclient ne nudi mogunost graenja dijeljenog direktorija kao da se radi o lokalnom direktoriju. Da bismo prenjeli datoteku s jednog na drugo mjesto, moramo se najprije povezati sa posluiteljom Samba pomou sljedee naredbe: smbclient '\\WORKGROUP\PUBLIC' I win.netwharf.com U tomi Parametar \\WORKGROUP\PUBLIC odreuje servis na udaljenom raunalu, odnosno odreeni sustav datoteka ili pisa. Opcija U omoguuje nam upis korisnikog imena pod kojim elimo ostvariti vezu. Program Samba e zatraiti da upiemo lozinku i zatim nas postaviti u prompt smb: \ gdje oznaka \ predstavlja radni direktorij.

Neke naredbe programa smbclient


Naredba ? or help ! cd lcd Del mkdir print Parametri [command] [SHELL COMMAND] [directory] [directory] [files] [directory] [file] Opis
Nudi pomo za pojedinu naredbu ili openito pomo Izvrava se odreena naredba iz ljuske ili se korisnik prebacuje u odreenu ljusku. Premjeta korisnika na odabrani direktorij na raunaluposluitelju. Premjetanje korisnika na odabrani direktorij na lokalnom raunalu. Brisanje odabranih datoteka na posluitelju. Stvaranje direktorija na udaljenom raunalu Ispis odabrane datoteke na udaljenom raunalu.

Tablica 1. Prikaz naredbi programa smbclient

340 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Otklanjanje greaka u Sambi


Sambi obino ne treba mnogo nadzor prilikom rada.Ipak ako se dogodi problem, informacije se mogu potraiti na dva glavna izvora: zapisnike datoteke za svakog kljijenta i pomou naredbe smbstatus. Mjesto na kojem se uvaju zapisnike datoteke definirano je u datoteci smb.conf i u tom direktoriju moemo nai po jednu datoteku za svakog klijenta koji je pokuao uspostaviti vezu. Program smbd skrauje te datoteke tako da ne preu zadanu maximalnu veliinu. Primjer zapisnika gdje je prikazano uspjeno povezivanje i jedna pogreno otkucana lozinka: [2004/27/12 19:59:26] smbd/reply.c Rejecting user 'ned' : autentication failed [2004/27/12 20:05:06] smbd/service.c klum (192.168.1.51) connect to service ned as user ned (uid =500, gid = 500) (pid 1275) [2004/27/12 20:10:43] smbd/service.c klum (192.168.1.51) closd connection to service ned [2004/27/12 20:05:44] smbd/service.c klum (192.168.1.51) connect to service admin as user ned (uid =500, gid = 500) (pid 1275) Naredba smbstatus omoguava ispitivanje aktivnih veza i otvorenih datoteka. Te informacije posebno su korisne prilikom ispitivanja problema sa zakljuavanjem (koji korisnik je otvorio datoteku xy s iskljuivim pravop itanja i pisanja?).Prvi odjeljak rezultata nabraja resurse s kojima se korisnik povezao. Drugi dio sadri spisak aktivnih zakluavanja datoteka, a trei prikazuje koritene resurse programa smbd.

Service uid gid pid machine ------------------------------------------------------ned ned ned 1275 klum (192.168.1.51) gold trent trent 1279 admpc (192.168.1.50) admin ned ned 1275 klum (192.168.1.51) Locked files: Pid Deny mode R/W Oplock -------------------------------------------------------1275 1275

Name

DENY_WRITE RDONLY EXCLUSIVE+BATCH/home/admin/doc/ips.txt DENY_NONE RDWR NONE /home/ned/install_notes.txt

Rezultat naredbe smbstatus sadri prilino dugake redove koji su ovdje skraeni zbog jednostavnijeg prikaza i jasnoe!

341 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Poslje greki u radu, programi pod Windowsima esto ostavljaju zakljuane datoteke iza sebe to izaziva probleme prilikom ponovnog pokretanja programa. Moe se nasilno otkljuati datoteka zaustavljanjem procese smbd koji je zakljuao tu datoteku.Nasilno otkljuavanje moe dovesti do greaka u datotekama.

Zakljuak
Samba programski paket je vrlo moan alat u sluajevima kada postoji potreba za meusobnim dijeljenjem raunalnih resursa izmeu raunala sa instaliranim Linux i Windows operativnim sustavima. S obzirom na sve ee situacije u kojima se unutar iste raunalne mree intenzivno koriste raunala sa instaliranim razliitim vrstama i inaicama operativnih sustava (tipino Linux i Windows, ali nisu iskljueni niti ostali operativni sustavi), snaga ovog programskog paketa dolazi do izraaja. Naime, Samba paketom omoguava se meusobno dijeljenje diskovnog prostora (engl. shares), zatim pisaa, pa ak i serijskih portova izmeu razliitih operativnih sustava, to ovaj programski paket ini gotovo neizbjenim izborom u 'mjeovitim' radnim okolinama. Velika prednost Samba paketa lei u injenici da Samba moe zamijeniti Windows posluitelje potrebne za uspostavu lokalne mree (WINS posluitelj i kontrolor domene). Cijene Windows posluitelja su relativno velike dok se Samba distribuira besplatno. Treba uzeti u obzir da se Windows NT posluitelji dodatno naplauju ovisno o tome koliko je raunala u mrei na njih spojeno. Iako Samba paket jo uvijek nema potpunu funkcionalnost NT posluitelja, on se bez problema moe koristiti u manjim lokalnim mreama (do 30 raunala) kod kojih nema potrebe za pomonim WINS posluiteljem i pomonim kontrolorom domene koje Samba jo uvijek ne podrava. Samba WINS posluitelj i kontrolor domene rade zadovoljavajue na raunalu sa P166 procesorom i 128MB RAM-a to su puno manji zahtjevi od onih koje namee Windows NT operacijski sustav. Moe se zakljuiti da je Samba dobra (i jeftinija) zamjena za Windows NT posluitelje u malim lokalnim mreama kao to su SOHO mree.

342 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Branimir ivkovi

AWK & SED

343 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

UVOD
Ime awk nastalo je od inicijala njegovih kreatora: Alfred V. Aho, Peter J. Weinberger, i Brian W. Kernighan. Original program napisan je 1977 u AT&T Bell Laboratories. 1985 nova inaica programa napravila je programski jezik monijim, predstavlja korisniki definirane funkcije, viestruki ulazni sljedovi, izraun regularnih izraza. Ta nova inaica postala je uglavnom dostupna sa Unix System V Release 3.1. izdanjem. Inaica u System V Release 4 izdanju dodaje neka nova svojstva i ispravlja ponaanje u nekim od tamnih strana jezika. Specifikacija za awk u POSIX Command Language and Utilities standardu dodatno je proistila jezik utemeljen na suradnji gawk kreatora, i originalnih Bell Labs awk kreatora. gawk je kompatibilan sa System V Release 4 izdanjem programa awk. Kompatibilan je i sa POSIX specifikacijom jezika awk. GNU implementaciju, gawk, napisali su Paul Rubin i Jay Fenlason 1986 godine, na prijedlog koji je dao Richard Stallman. John Woods je takoer pridonio svojim dijelovima koda. 1988 i 1989 godine, David Trueman temeljito prerauje gawk kako bi bio kompatibilan sa novijim awk programom. U preradi mu je pomogao Arnold Robbins. Tekui razvoj fokusiran je na popravcima pogreaka, poboljanje izvedbe, poklapanje sa standardima, i povremeno, nova svojstva.

344 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

OPIS
awk je jezik za obradu datoteka koji je vrlo pogodan za manipuliranje s podacima i popravljanje informacija iz tekstualnih datoteka. Program awk se sastoji od bilo kojeg broja korisniki definiranih funkcija i pravila u obliku: pattern {action} Svako pravilo specificira uzorak (eng. pattern) koji traimo i akciju (eng. action) koja e se izvriti kada pronaemo uzorak. Uzorak je regularan izraz, poseban uzorak, raspon uzorka, ili bilo koji aritmetiki izraz. BEGIN je poseban uzorak koji slui kao oznaka akcije koju awk izvodi prije itanja bilo kojeg ulaznog zapisa. END je poseban uzorak koji slui kao oznaka akcije koju awk izvodi nakon to su proitani svi ulazni zapisi. Moete zadati raspon uzorka kao: pattern1,pattern2 Ovaj raspon usporeuje sve retke od retka koji se slae sa prvim uzorkom pattern1 do retka koji se slae sa drugim uzorkom pattern2, ukljuivo sa tim uzorcima. Ako izostavite uzorak, ili ako brojana vrijednost uzorka nije nula, awk izvodi akciju koja daje rezultat za taj redak. Akcija je slijed navoda okonan znakom toka zarez (;), znakom za novi redak, ili zatvorenim vitiastim zagradama (}). Uvjet (eng. condition) je bilo koji izraz. Vrijednostkoja nije nula awk smatra istinitom (eng. true), a vrijednost nula neistinitom (eng. false). Izjava (eng. statement) moe biti i slijed naredbi ograen vitiastim zagradama. # if statement if (condition) statement
345 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

[else statement]

# while loop while (condition) statement

# do-while loop do statement while (condition)

# for loop for (expression1; condition; expression2) statement Naredba for je ekvivalentna sljedeem: expression1 while (condition){ statement expression2 } Naredba for moe biti u obliku: for (i in array) statement awk izvodi naredbu statement za svaki element u nizu array.

346 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Naredba break odmah izlazimo iz for ili while naredbe.

continue zaustavlja tekue ponavljanje for ili while naredbe i poinje slijedee ponavljanje (ako takvo postoji).

Next zavri sve obrade za tekui ulazni zapis i odmah zapoinje obradu slijedeeg ulaznog zapisa.

exit[(expr)] odmah odlazimo na END akciju ako postoji. Ako ne postoji END akcija ili ako awk ve izvodi END akciju, awk program zavrava. awk postavlja exit status programa nabrojanu vrijednost koju sadri izraz expr. Ako izostavite izraz (expr), exit status je 0.

return [expr] izlazimo iz funkcije. Ako specificirate izraz expr, funkcija vraa vrijednost izraza expr kao svoj rezultat, inae, rezultat funkcije nije definiran.

delete array[i] obriemo element i iz zadanog niza array.

347 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Postoje dva naina da se specificira awk program: a. proiri. b. Koristei f prog opciju. Direktno na naredbenom retku. U tom sluaju, program je argument jednog naredbenog retka, obino ograen apostrofima (') kako bi sprijeili shell u nastojanju da ga

Program moete specificirati izravno na naredbenom retku jedino ako ne upotrebljavate f prog argumente. Kada specificirate datoteke na naredbenom retku, te datoteke pribavljaju ulazne podatke sa kojima e awk manipulirati. Ukoliko ne specificirate datoteku ili specificirate kao naziv datoteke, awk ita podatke sa standardnog ulaza. Na naredbenom retku varijable moete postaviti na neku poetnu vrijednost koristei: var=vrijednost Na naredbenom retku moete naizmjenino postavljati poetne vrijednosti varijabli i imena ulaznih spisa. awk obrauje postavljanje poetnih vrijednosti varijabli i ulazne datoteke onim redom kojim se pojavljuju na naredbenom retku. Npr. naredba awk f progfile a=1 f1 f2 a=2 f3 postavlja vrijednost varijable a na 1 prije nego to proita ulazne podatke iz f1 i postavlja vrijednost varijable a na 2 prije nego to proita ulazne podatke iz f3. Postavljanje poetne vrijednosti varijable koje se pojavljuje prije prve datoteke u naredbenom retku izvodi se odmah nakon poetne akcije (BEGIN). Postavljanje poetne vrijednosti varijable koje se pojavljuje nakon zadnje datoteke izvodi se neposredno prije posljednje akcije (END).

348 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Opcija -v dozvoljava nam da dodijelimo vrijednost varijable prije poetka izvoenja awk programa (to je prije poetne akcije - BEGIN). Npr. awk -v v1=10 -f prog datafile awk dodjeljuje varijabli v1 pripadajuu vrijednost prije poetne akcije (ali nakon standardnog dodjeljivanja vrijednosti ugraenim (eng. built-in) varijablama kao to su FS (niz znakova za razdvajanje polja) i OFMT, te ugraene varijable imaju posebno znaenje za awk). awk dijeli ulaz na zapise. Po standardu, zapise razdvajaju znakovi za prijelaz u novi red. Ako elite, moete specificirati neki drugi znak za razdvajanje zapisa. awk slijedno usporeuje svaki ulazni zapis sa uzorkom svakog pravila u programu. Ako se uzorak poklapa, nad tim ulaznim zapisom awk izvodi akciju definiranu za to pravilo. Uzorci i akcije se esto odnose na odvojena polja unutar zapisa. Po standardu, white space (obino znakovi za razmak (eng. blank), znakovi novog retka (eng. newline), ili vodoravne oznake tabulatora (eng. horizontal tab characters)) razdvajaju polja. Mogue je specificirati neki drugi niz znakova (eng. string) za razdvajanje polja koristei F ere opciju. Moete izostaviti dio awk pravila koji se odnosi na uzorak ili dio koji se odnosi na akciju ali nije mogue izostaviti oboje. Ako izostavite uzorak, awk izvodi akciju za svaki ulazni zapis (to znai da svaki zapis odgovara). Ako izostavite akciju, awk ispisuje na standardni izlaz svaki zapis koji se poklapa sa uzorkom. Sve to se u retku programa nalazi iza znaka # awk smatra komentarom. Na primjer: # Ovo je komentar

349 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

OPCIJE
-F ere specificira produen regularni izraz koji slui za odvajanje polja. -f prog vraa awk program koji sadri datoteka prog. Ako se na komandnom retku vie puta pojavi opcija f, kao rezultat dobijemo program koji je konkatenacija svih specificiranih programa. -v var=value dodjeljuje vrijednost varijabli var prije poetka izvoenja programa. Ovu opciju moete specificirati puno puta.

350 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

VARIJABLE I IZRAZI
Postoje tri vrste varijabli: identifikatori (eng. identifiers), polja (eng. fields) i niz elemenata (eng. array elements). Identifikator je slijed slova, znamenki i podvuenih crta koji zapoinje slovom ili podvuenom crtom. awk dijeli ulaz na zapise, a zapise dijeli u polja. Specifikacije polja imaju oblik $n gdje n kree od 1 do NF (ugraena varijabla koja sadri informaciju o broju polja u tekuem zapisu). Takva specifikacija polja odnosi se na nto polje tekueg ulaznog zapisa. $0 (nula) odnosi se na itav tekui ulazni zapis. Nizovi su asocijativne kolekcije vrijednosti koje zovemo elementi niza. Konstruirani su u obliku: identifier[subscript] gdje je indeks subscript u obliku izraz ili izraz,izraz,. i upuuje na niz elemenata. Svaki takav izraz moe sadravati bilo koji niz znakova. Za viestruke izraze indeksa, awk ulana vrijednosti niza znakova svih izraza i odvaja ih oznakom SUBSEP. Poetna vrijednost oznake SUBSEP postavljena je na \034 (ASCII field separator). Polja i identifikatore ponekad pripisujemo skalarnim varijablama kako bi ih razlikovali od nizova. awk varijable ne deklariramo i nije ih potrebno postaviti na poetnu vrijednost. Vrijednost varijable koja nije postavljena na neku poetnu vrijednost je prazan niz znakova u string kontekstu i broj 0 u kontekstu brojki. Izrazi se sastoje od konstanta, varijabli, funkcija, regularnih izraza i stanja indeksiranih znakova u nizu u kombinaciji sa operatorima. Svaka varijabla i izraz ima vrijednost u obliku niza znakova i odgovarajuu brojanu vrijednost; awk koristi vrijednost koja odgovara kontekstu. Kad pretvaramo brojanu vrijednost u niz znakova odgovarajue vrijednosti, awk provodi radnju ekvivalentnu pozivu funkcije sprintf . Ako upotrebljavate niz znakova u kontekstu brojke, i awk ne moe interpretirati sadraj niza znakova kao broj, tretirat e vrijednost tog niza znakova kao broj nula.

351 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Brojane konstante su sljedovi decimalnih znamenki. Konstante sastavljene od niza znakova su u navodnicima, npr. a literal string. Konstantan string moe sadravati slijed znakova za prekid koji su prikazani u tablici 1. Escape \a \b \f \n \r \t \v \ooo \xdd \/ \" Character audible bell backspace formfeed newline carriage return horizontal tab vertical tab octal value ooo hexadecimal value dd slash quote

Tablica 1. Konstantan string za prekidni niz u programskom jeziku awk. awk podrava proirene regularne izraze. Kad awk ita program, prevodi znakove ograene slash znakovima (/) kao regularne izraze. Na primjer: /foo.*bar/{print $1,$3} rezultat ove naredbe bit e ispis svih redaka koji sadre niz znakova foo , te nakon toga bilo koji niz znakova koji zavrava nizom znakova bar. awk odreuje uvjet indeksa u nizu na slijedei nain: index in array

352 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

gdje index izgleda kao izraz ili (izraz,,izraz). Ovaj uvjet se izrauna kao 1 ako je vrijednost niza znakova predstavljena sa index ujedno i indeks u nizu, inae se uvjet izrauna kao 0 (nula). Na taj nain pouzdano znamo postoji li taj element niza.

Tablica simbola
Tablici simbola moete pristupiti preko ugraenog niza SYMTAB. SYMTAB[expr] je isto to i varijabla imenovana kao rezultat izrauna izraza. Na primjer: SYMTAB["var"] je sinonim za varijablu var.

353 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

OPERATORI
Unarni operatori su +, -, ++ i --. Operatore ++ i -- moete koristiti kao postfiksne ili kao prefiksne operatore. Binarni aritmetiki operatori su +, -, *, /, % i ^. Uvjetni operator expr ? expr1 : expr2 Izraz expr mora kao rezultat dati broj. Ako je taj broj razliit od nule izraunava se izraz expr1 i njegov rezultat je rezultat cijelog izraza. Ako je taj broj jednak nuli izraunava se izraz expr2 i njegov rezultat je rezultat cijelog izraza. Ako dva izraza nisu razdvojena operatorom, awk konkatenira njihove string vrijednosti. Operator ~ daje rezultat 1 (true) ako regularni izraz na desnoj strani pristaje string vrijednosti na lijevoj strani. Operator !~ daje rezultat 1 kada se desna strana ne poklapa sa lijevom. Na primjer: $2 ~ /[0-9]/ odabrat e svaki redak u kojem drugo polje sadri barem jednu znamenku. awk interpretira svaki string ili varijablu na desnoj strani operatora ~ ili !~ regularni izraz. Relacijski operatori su <, <=, >, >=, == i !=. Kad su oba operanda koje usporeujemo brojke, awk usporeuje njihove brojane vrijednosti, inae ih usporeuje kao string vrijednosti. Operand je brojka ako je to cijeli broj (eng. integer) ili broj sa pominim zarezom (eng. floating point number), ako je to polje ili ARGV element koji izgleda kao broj, ili ako je to varijabla kreirana dodjeljivanjem na komandnom retku koja izgleda kao broj. Boolean operatori su || (or), && (and) i ! (not). Prilikom izrauna izraza koristi se Short Circuit Evaluation. kao dinamiki

354 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Logiki i operator && prvo se izraunava lijevi operand, ako je lijevi operand kao rezultat dao nulu, desni operand se ne izraunava. Logiki ili operator || Prvo se izraunava lijevi operand, ako lijevi operand kao rezultat nije dao nulu, desni operand se ne izraunava. Varijabli moete dodijeliti vrijednost sa var=expr Ako je op binarni aritmetiki operator, naredba var op= expr je ekvivalentna naredbi var = var op expr razlikuju se u tome to se var izraunava samo jednom.

355 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

ARGUMENTI NAREDBENOG RETKA


awk postavlja ugraenu varijablu ARGC na broj argumenata naredbenog retka. Ugraen niz ARGV ima elemente indeksirane znamenkama od nula do ARGC-1, niz daje argumente naredbenog retka onim redom kojim su se pojavili u naredbenom retku. ARGC count i ARGV vector ne sadre opcije naredbenog retka (zapoete sa -) ili program datoteku (koja slijedi nakon -f). Oni sadre ime naredbe, naredbe za inicijalizaciju u obliku var=vrijednost i imena datoteka sa ulaznim podacima. awk zapravo kreira ARGC i ARGV prije nego to uini bilo to drugo. Zatim prolazi kroz ARGV i obrauje argumente. Ako je argument vektora ARGV prazan string, awk ga izostavlja. Ako sadri znak jednakosti (=), awk to interpretira kao dodjeljivanje vrijednosti varijabli. Ako je to znak minus (-), awk odmah ita ulazne podatke sa standardnog ulaza dok ne naie na kraj datoteke; inae, awk tretira argument kao ime datoteke i ita ulazne podatke iz te datoteke sve dok ne dosegne kraj datoteke.

356 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

ULAZNI PODACI
awk dijeli ulazne podatke na zapise (eng. records). Znak za razdvajanje zapisa odvaja svaki zapis od onog slijedeeg. Vrijednost ugraene varijable RS daje tekui znak za razdvajanje zapisa, standardno zapoinje kao newline (\n). Ako varijabli RS dodijelite neki drugi znak, awk e ga od tada koristiti kao znak za razdvajanje zapisa. Order of Operations (A) $i V[a] V++ V ++V --V A^B +A -A !A A*B A/B A%B A+B A-B AB A<B A>B A<=B A>=B A!=B A==B A~B A!~B A in V A && B A || B A?B:C V=B V+=B V-=B V*=B V/=B V%=B V^=B A, B and C are any expression. i is any expression yielding an integer. V is any variable. Tablica 2. awk poredak operacija regular expression matching array membership logical AND logical OR conditional expression assignment exponentiation unary plus, unary minus, logical NOT multiplication, division, remainder addition, subtraction string concatenation comparisons grouping field, array element increment, decrement

357 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

awk dijeli zapise u polja. String za razdvajanje polja, odreuje ga vrijednost ugraene varijable FS, razdvaja svako polje od slijedeeg. Moete postaviti odreeni string za razdvajanje polja tako da dodijelite neku vrijednost varijabli FS, ili tako da specificirate -F ere opciju na naredbenom retku. Varijabli FS moete dodijeliti regularni izraz. Na primjer: FS = "[,:$]" kae da znak zareza, dvotoke ili dolara moe razdvajati polja. Slijedea lista ugraenih varijabli omoguuje razliite dijelove informacija o ulaznim podacima. NF NR FNR broj polja u tekuem zapisu broj ukupno proitanih zapisa broj zapisa proitanih iz tekue datoteke

FILENAME ime datoteke koja sadri tekui zapis

getline uita slijedei ulazni zapis u $0 i razdijeljuje zapis u polja. Varijable NF, NR i FNR su prikladno postavljene. getline var uita slijedei ulazni zapis u varijablu var. awk ne razdijeljuje zapis u polja (to znai da se tekua $n vrijednost ne mijenja), ali se prikladno postave varijable NR i FNR. getline <expr interpretira vrijednost string izraza expr kao da je ime datoteke. awk uita slijedei zapis u $0, razdvoji ga u polja i prikladno postavi NF. Ako datoteka nije otvorena, awk ju otvori. Datoteka ostaje otvorena dok ju ne zatvorite funkcijom close(). getline var <expr interpretira vrijednost string izraza expr kao da je ime datoteke i uita slijedei zapis iz te datoteke u varijablu var, ali ga ne razdijeljuje u polja.
358 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

expr | getline interpretira vrijednost string izraza expr kao naredbeni redak koji treba izvriti, awk proslijedi izlazne podatke te naredbe u funkciju getline i uita ih u $0 na slian nain kao getline <expr. expr | getline var izvrava vrijednost string izraza expr kao naredbu i prosljeuje izlazne podatke te naredbe u funkciju getline. Rezultat je slian kao getline var <expr. Moete imati samo ogranien broj otvorenih polja i kanala (eng. pipe) u isto vrijeme. Polja i kanale moete zatvarati tijekom izvravanja koristei funkciju close(expr) Izraz expr koji zatvaramo mora biti onaj koji je naveden ispred znaka | ili nakon znaka < u funkciji getline, ili onaj koji je napisan nakon znaka > ili znaka >> u naredbi print ili naredbi printf. Ako funkcija uspjeno zatvori kanal, vraa broj nula. Ako zatvarate polja i kanale koji vam vie nisu potrebni, moete koristiti bilo koji broj polja i kanala tijekom izvravanja awk programa.

359 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

UGRAENE ARITMETIKE FUNKCIJE


atan2(expr1, expr2) vraa arctangent od expr1/expr2 u rasponu od pi do pi. exp(expr), log(expr), sqrt(expr) vraa eksponencijalnu vrijednost, prirodni logaritam, i drugi korijen od brojane vrijednosti izraza expr. int(expr) vraa onaj dio koji je cijeli broj (eng. integer)od brojane vrijednosti izraza expr. Ako izostavite (expr), funkcija vraa onaj dio koji je cijeli broj od $0. rand() vraa sluajan broj s pominim zarezom u rasponu od 0 do 1. sin(expr), cos(expr) vraa sinus i kosinus od brojane vrijednosti izraza expr (interpretirane kao kut u radijanima). srand(expr) postavlja poetnu toku rand() funkcije na vrijednost cijelog broja zadanog izrazom expr. Ako izostavite (expr), awk koristi tono vrijeme kao standardnu poetnu toku.

360 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

UGRAENE STRING FUNKCIJE


n = sub(regexp, repl, string) U nekoj string vrijednosti trai prvi podniz znakova koji se poklapa sa proirenim regularnim izrazom regexp, te zamjenjuje taj podniz sa nizom znakova zadanim sa repl. awk zamijeni svaki znak ampersand (&) u repl nizu znakova sa podnizom znakova string vrijednosti koji se poklapa sa regexp. Takvo posebno ponaanje moete sprijeiti tako da stavite znak backslash (\) ispred znaka ampersand. Ako izostavite argument string, funkcija sub() e umjesto njega koristiti tekui zapis. Funkcija sub() vraa broj nula ako nije izvrena zamjena, te broj jedan ako je zamjena izvrena. n = gsub(regexp, repl, string) Radi na isti nain kao funkcija sub(), osim to funkcija gsub() zamijeni svaki podniz koji se nalazi u string vrijednosti i poklapa se sa izrazom regexp. Funkcija gsub() vraa broj izvrenih zamjena. pos = index(string, str) Vraa mjesto prvog pojavljivanja izraza str u string vrijednosti. Ako funkcija index() ne pronae izraz str u string vrijednosti, vratit e broj nula. len = length(expr) Vraa broj znakova u string vrijednosti izraza expr. Ako izostavite (expr), funkcija koristi referencu $0. Zagrade oko izraza expr su neobavezne. n = ord(expr) Vraa integer vrijednost prvog znaka u string vrijednosti izraza expr.

361 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

str = sprintf(fmt, expr, expr...) Formira listu izraza expr, expr... koristei specifikaciju string vrijednosti fmt, te vraa formatiran string. String fmt se sastoji od specifikacija pretvorbi koje pretvaraju i dodaju slijedei izraz expr u string, to su najee znakovi koje funkcija sprintf() dodaje u string. Te specifikacije pretvorbi su sline onima koje koristimo po ANSI C standardu. Specifikacije pretvorbi su u obliku %[-][0][x][.y]c gdje je 0 x y c poravna polje po lijevoj strani; default je poravnavanje polja po desnoj nula na poetku ispisuje broj sa nulom na poetku je minimalna irina polja je preciznost je znak za pretvorbu strani

Za string, preciznost je najvei broj znakova koji trebaju biti ispisani iz string vrijednosti. Za broj, preciznost je broj znamenki koje trebaju biti ispisane sa desne strane decimalne toke kada se ispisuje broj sa pominim zarezom (eng. floating point). Ako je x ili y znak zvjezdica (*), najmanja irina polja ili preciznost je vrijednost slijedeeg izraza expr u pozivu funkcije sprintf(). Znak za pretvorbu c je jedan od slijedeih: d i o u decimal integer decimal integer unsigned octal integer unsigned decimal integer

x,X unsigned hexadecimal integer f,F floating point e,E floating point (scientific notation) g,G the shorter of e and f (suppresses non-significant zeros)

362 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

c s

single character of an integer value; first character of string string

n = split(string, array, regexp) Razdijeli string u polja. Izraz regexp je regularni izraz koji odreuje niz znakova za razdvajanje polja i namijenjen je za ovu operaciju. Funkcija rasporeuje odvojena polja u elemente niza array; indeksi niza poinju od 1. Funkcija split() vraa broj polja u koja je podijelio string vrijednost (taj broj je ujedno i najvei indeks tog niza). Izraz regexp dijeli zapis na isti nain kao i FS string za razdvajanje polja. Ako izostavite argument regexp, funkcija split() koristit e tekuu vrijednost varijable FS. str = substr(string, offset, len) Vraa podniz znakova iz string vrijednosti koji poinje na mjestu offset i uzima najvie len znakova. Prvi znak u string vrijednosti ima offset vrijednost 1. Ako izostavite argument len, funkcija substr() vratit e preostali dio string vrijednosti. str = tolower(expr) Pretvara sva slova string vrijednosti izraza expr u mala slova i vraa rezultat. Ako izostavite izraz expr, funkcija tolower() umjesto izraza koristi referencu $0. str = toupper(expr) Pretvara sva slova string vrijednosti izraza expr u velika slova i vraa rezultat. Ako izostavite izraz expr, funkcija toupper() umjesto izraza koristi $0.

363 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

SISTEMSKE FUNKCIJE
status = system(expr) izvrava string vrijednost izraza expr kao naredbu. Na primjer system("tail " $1) poziva naredbu tail, koristei string vrijednost od $1 kao datoteku koju tail pretrauje.

Korisniki definirane funkcije


Moete definirati svoje funkcije koristei oblik function name(parameter-list){ statements } Definicija funkcije moe se pojaviti na mjestu od pattern {action} pravila. Lista

vrijednosti (eng. parameter-list) sadri bilo koji broj normalnih (skalarnih) i array varijabli odvojenih zarezom. Kada pozivate funkciju, awk prosljeuje skalarne argumente po vrijednosti, i array argumente po referenci. Imena specificirana u listi vrijednosti su lokalna za funkciju; sva druga imena koja se koriste u funkciji su globalna. Funkcija se vraa onome tko ju je pozvao kada izvri zadnju naredbu u funkciji ili kada dosegne eksplicitnu return naredbu. Povratna vrijednost, ako postoji, specificirana je u return naredbi.

364 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

IZLAZNI PODACI
Naredba print ispie svoje argumente u jednostavnom formatu. Ako nema argumenata, ona ispie tekui ulazni zapis u cijelosti. awk dodaje znak za razdvajanje izlaznih zapisa (eng. output record separator) ORS na kraj izlaznih podataka koje proizvede svaka print naredba; kada znak zarez razdvaja argumente print naredbe, znak za razdvajanje izlaznih polja (eng. output field separator) OFS razdvaja odgovarajue vrijednostiizlaznih podataka. ORS i OFS su ugraene varijable i njihove vrijednosti moete promijeniti tako da im dodijelite string vrijednosti. Default vrijednost znaka za razdvajanje izlaznih zapisa je znak za novi redak (eng. newline) i default vrijednost znaka za razdvajanje izlaznih polja je razmak (eng. space). Varijabla OFMT zadaje izlazni oblik brojeva sa pominim zarezom. Default vrijednost varijable OFMT je %.6g; moete promijeniti tu vrijednost tako da varijabli dodijelite neku drugu string vrijednost. OFMT se primjenjuje samo na brojeve sa pominim zarezom (eng. floating point). Naredba printf oblikuje svoje argumente koristei fmt argument. Oblikovanje je isto kao kod ugraene funkcije sprintf(). Za razliku od naredbe print, naredba printf ne dodaje znak za razdvajanje izlaznih podataka automatski, te na taj nain omoguuje programu puno precizniju kontrolu nad izlaznim podacima. Naredbe print i printf piu na standardni izlaz. Moete preusmjeriti izlaz na datoteku ili kanal (eng. pipe). Ako dodate izraz >expr naredbi print ili printf, awk tretira string vrijednost izraza expr kao ime datoteke, i pie izlazne podatke u tu datoteku. Isto tako, ako dodate izraz >>expr, awk pridodaje izlazne podatke tekuem sadraju datoteke. Da bi iskljuili dvosmislenosti, naredbe kao ovakva print a > b c su sintaksno neispravne. Koristite zagrade kako bi izbjegli dvosmislenost.

365 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

SED

Sintaksa naredbenog retka


Sintaksa za pozivanje sed programa ima dva oblika: sed [-n][-e] `command' file(s) sed [-n] -f scriptfile file(s) Prvi oblik dozvoljava vam da specificirate naredbu za obradu na naredbenom retku, okruenu jednostrukim navodnicima. Drugi oblik dozvoljava vam da specificirate scriptfile, datoteku koja sadri sed naredbe. Oba oblika mogu se koristiti istovremeno, i mogu biti koriteni vie puta. Skripta (eng. script) za obradu koji dobijemo kao rezultat je lananje naredbi i script datoteka. Prepoznaju se sljedee opcije -n Ispisuj samo retke specificirane sa p naredbom ili p indikatorom stanja (eng. flag) za s naredbu. -e cmd Slijedei argument je naredba za obradu. Korisno ako je specificirano vie skripti. -f file Slijedei argument je datoteka koja sadri naredbe za obradu. Ako je prvi redak skripte #n, sed se ponaa kao da je bila specificirana opcija n.

366 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Sintaksa sed naredbi


Uobiajen oblik sed naredbi je: [address[,address]][!]command [arguments] sed kopira svaki redak ulaznih podataka u prostor za uzorak. sed instrukcije sastoje se od adresa (eng. address) i naredbi za obradu (eng. editing commands). Ako se adresa naredbe slae sa retkom u prostoru za uzorak, naredba se primijeni na taj redak. Ako naredba nema adresu, primjenjuje se na svaki ulazni redak. Ako naredba promijeni sadraj prostora, naknadne adrese e se primijeniti na tekui redak u prostoru za uzorak, ne na originalan ulazni redak.

Adresiranje uzorka
Adresa moe biti broj retka ili uzorak, ograen u slash znakove (/uzorak/). Uzorak opisujemo koristei regularne izraze. \n moe biti koriten za usporedbu sa bilo kojim newline znakom u prostoru za uzorak, ali ne i sa newline znakom na kraju prostora za uzorak. Ako uzorak nije specificiran, naredba e biti primijenjena na sve retke. Ako je specificirana samo jedna adresa, naredba e biti primijenjena na sve retke koji se slau sa tom adresom. Ako su specificirane dvije adrese odvojene zarezom, naredba e biti primijenjena na raspon redaka izmeu prve i druge adrese, ukljuivo sa tim adresama. Neke naredbe prihvaaju samo jednu adresu: a, i, r, q, i =. Operator ! napisan nakon adrese prouzroi da sed primijeni naredbu na sve retke koji se ne slau sa adresom. Vitiaste zagrade ({}) koristimo da bi ugnijezdili jednu adresu unutar druge, ili da bi primijenili viestruke naredbe na istu adresu. [/pattern/[,/pattern/]]{ command1 command2 }

367 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

Otvorena vitiasta zagrada mora biti na kraju retka, a zatvorena vitiasta zagrada mora biti sama u retku. Nakon zatvorene vitiaste zagrade ne smije biti razmaka.

Zamjenski znakovi regularnih izraza za sed


U slijedeoj tablici nalaze se pattern-matching zamjenski znakovi (eng.

metacharacters). Special Characters . * Slae se sa svakim pojedinanim znakom osim sa newline znakom. Slae se sa bilo kojim brojem (ukljuivi nula) pojedinog znaka (ukljuivi znak specificiran regularnim izrazom) koji se nalazi neposredno prije znaka zvjezdica. [] Slae se sa bilo kojom klasom znakova zatvorenom izmeu uglatih zagrada. Svi drugi zamjenski znakovi gube svoje znaenje kada su specificirani kao lanovi klase. \{n,m\} Slae se sa rasponom pojavljivanja pojedinog znaka (ukljuivi znak specificiran regularnim izrazom) koji se nalazi neposredno prije. \{n\} e se slagati sa tono n pojavljivanja, \{n,\}e se slagati sa baren n pojavljivanja, i \{n,m\} e se slagati sa bilo kojim brojem pojavljivanja izmeu n i m. ^ $ \ \(\) Odreuje mjesto regularnog izraza koji slijedi na poetku retka. Znak ^ je poseban jedino kada se pojavi na poetku regularnog izraza. Odreuje mjesto koje prethodi regularnom izrazu na kraju retka. Znak $ je poseban jedino kada se pojavi na kraju regularnog izraza. Ne obrauje poseban znak koji ga slijedi. Sprema uzorak ograen izmeu \( i \) na posebno mjesto za dranje podataka. Na taj nain, u jedan redak moe biti spremljeno do devet uzoraka. Mogu biti ponovo pokrenuti pomou znaka za izlazni slijed \1 do \9. Usage

368 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Awk & sed

\n &

Slae se sa ntim uzorkom koji je prije toga spremljen pomou \( i \), n je broj od 1 do 9 i spremljeni uzorci se broje slijeva. Ispisuje cijeli tekst koji se slae kada znak koristimo u string vrijednosti za zamjenu. Tablica 3. Pattern-Matching Metacharacters

Osnovne sed naredbe


About the Syntax of sed Commands Comment Substitution Delete Append, Insert, and Change List Transform Print Print Line Number Next Reading and Writing Files Quit Skup sed naredbi sastoji se od 25 naredbi.

369 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Tomislav Grgac

SED

370/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

1. UVOD 1.1. to je SED?


SED je kratica za Stream EDitor. Napisao ga je sad ve pokojni Lee E. McMahon 1973. i 1974., a nastao je kao logini nastavak na UNIX naredbu GREP. SED je neinteraktivni editor dizajniran da bude posebno koristan u tri sluaja: a) kod tekstualne obrade datoteka prevelikih za jednostavno interaktivno editiranje; b) za editiranje datoteka bilo kojih veliina kada su sekvence komandi editiranja prekomplicirane za jednostavno tipkanje u interaktivnom modu rada; c) za efikasno izvoenje viestrukih funkcija globalnog editiranja sa ulaza u jednom koraku. Umjesto da mijenjamo datoteku interaktivno pomiui kursor po ekranu (kao kod tekst procesora), korisnik alje SED-u skriptu komandi za editiranje plus ime datoteke za editiranje (tekst za editiranje moe takoer doi kao izlaz iz Pipe-a). U tom smislu SED radi kao filter koji brie, dodaje ili mijenja znakove, rijei ili linije teksta. Njegov djelokrug aktivnosti odnosno primjene ide od malih, jednostavnih promjena do onih vrlo kompleksnih.

1.2. Vrste SED-ova


SED u primjeni se moe nai u dvije osnovne kategorije: "besplatni" i komercijalni. a platforme na kojima se vrti idu od UNIX-a, OS/2, CP/M-a, MSDOS-a i WINDOWS-a. Pod pojmom "besplatni" ne znai nuno da ga neete morati platiti ve da se baziraju na GNU opoj licenci te da su po njoj "besplatan software" i da moete dobiti izvorni kod i dalje ga razvijati. Spomenut u samo neke od mnogobrojnih verzija SED-a koje se mogu nai na internetu: ssed v3.60 GNU sed v4.0.5 (i ostale nie verzije) BSD (podrava multi-byte znakove) HHsed

371/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

2. SINTAKSA I KORITENJE
Sintaksa SED naredbe ima dvije forme: > sed [options] 'command' file(s) > sed [options] -f scriptfile file(s) Prva forma omoguava nam da direktno u komandnoj liniji upiemo naredbe za editiranje unutar jednostrukih navodnika, dok nam druga omoguava specifikaciju datoteke u kojoj se nalaze sed naredbe. Na kraju se specificira datoteka na kojoj se provodi editiranje, a ako ona nije navedena sed ita sa standardnog ulaza. U ovom poglavlju opisat emo nain rada te sintaksu za sve opcije i naredbe od adresiranja do funkcija te emo za svaku dati i stvarni primjer. Primjeri e ii postepeno, od nekih opih do kompliciranijih, kako emo obraivati pojedine funkcije. Takoer treba napomenuti da e u veini primjera ulazi i izlazi iz SED-a biti datoteke, to nipoto ne znai da su to jedini naini, dapae, u mnogo sluajeva pipe ili preusmjeravanja su jednostavniji, loginiji, praktiniji, a moda i jedini naini ulaza ili izlaza obzirom na svrhu upotrebe SED-a ili operacije koje mu slijede ili prethode.

2.1. Nain rada


Sed radi na slijedei nain: prije bilo kakvog editiranja, sve naredbe za editiranje se skupljaju u formu iz koje se koriste u fazi izvravanja; naredbe se prevode u redoslijedu kako nailaze, a to je obino i redoslijed kojim e biti izvravane u fazi izvravanja; naredbe se izvode jedna po jedna, a ulaz naredbe je izlaz prethodne naredbe; svaka linija za editiranje sa ulaza se kopira u prostor uzoraka (pattern space); sve naredbe za editiranje se izvravaju po redu za svaku liniju sa ulaza; naredbe za editiranje se primjenjuju za sve linije s ulaza osim ako adresiranjem ne specificiramo koje linije obraujemo; ako naredba promijeni liniju s ulaza, naredba koja slijedi e se izvravati na promijenjenoj liniji, a ne na izvornoj;

372/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

Izvorna linija ili ulazna datoteka nakon obrade ostaje nepromijenjena jer naredbe za editiranje mijenjaju kopiju izvorne linije s ulaza. Takva kopija se proslijeuje na standardni izlaz, ali se isto tako moe preusmjeriti u datoteku.

2.2. Opcije
Sed prepoznaje tri mogue opcije sa komandne linije: -n - onemoguava standardni izlaz; prikazuje samo linije specificirane sa zastavicom (flag) '/p'. Standardno ponaanje sed-a je da prikazuje sve linije (ili cijelu datoteku)
Primjer: Recimo da elimo datoteku imena "input" obraditi sa nekom sed naredbom i ne ispisati nita: >sed -n 'command' input ili moemo tu izlaz te datoteke pipe-om preusmjeriti u sed i takoer nita ne ispisati: >cat input | sed -n 'command' Idemo sada ispisati, recimo, od 4. do 12. reda: >sed -n '4,12/p' input

-e - oznaava da je slijedei argument naredba za editiranje; nije potreban osim u sluaju postojanja viestrukih komandi za editiranje.

Primjer: Obradit emo datoteku "input" sa dvije sed naredbe: >sed -e 'command1' -e 'command2' input

-f - oznaava da je slijedei argument ime datoteke koja sadri naredbe za editiranje.

Primjer: Obradit emo datoteku "input" sa naredbama iz skripte "script te jo jednom naredbom nakon skripte: >sed -f script -e 'command' input

373/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

2.3. Adresiranje
Linije teksta iz datoteke za obradu mogu se pojedinano selektirati pomou adresa. Adresiranje moe biti preko broja linije ili kontekstno.

2.3.1

Adresiranje breko broja linije

Broj linije je decimalni integer. Kako se pojedina linija ita sa ulaza, broja linija se inkrementira, adresa broja linije selektira liniju sa ulaza ime se interni broja linija izjednai sa adresom broja linije. Broja zbraja kumulativno preko vie datoteka s ulaza, odnosno ne resetira se prilikom otvaranja nove datoteke. Kao poseban sluaj, sa adresiranjem pomou znaka '$' dobija se zadnja linija datoteke s ulaza.
Primjer: Probajmo adresirati sedmu liniju i obraditi je za sada s "ostatak naredbe": > sed '7 ostatak naredbe' input Ako pak elimo adresirati raspon linija, recimo od 100-te do kraja input datoteke (pri tome smo kraj nali na 412 liniji sa wc naredbom i to moemo napraviti na slijedei nain: > sed '100,412 ostatak naredbe' input ili krae koristei $: >sed '100,$ ostatak naredbe' input Poto interni broja linija radi kumulativno na vie datoteka, evo jednog primjera i za to (uz preusmjeravanje rezultata u datoteku "output": >sed '100,$ ostatak naredbe' input1 input2 input3 > output ili na drugaiji nain (s pipe-om), ali s istim uinkom: >cat input1 input2 input3 | sed '100,$ ostatak naredbe' > output koristei znak ! kao negaciju probajmo adresirati sve osim linija izmeu 2 i 5: >sed '!2,5 ostatak naredbe' input

2.3.2

Kontekstno adresiranje

Kontekstna adresa je uzorak odnosno regularni izraz unutar znakova '/'. Regularni izrazi koje sed prepoznaje konstruiraju se na slijedei nain: Obini znak (niti jedan od dolje obraenih), je izraz, i u tekstu trai taj znak;

374/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

Primjer: Napisat emo naredbu koja trai znak A u datoteci input: >sed '/A/' input ili rije UNIX: >sed '/UNIX/' input

Znakom '^' oznaavamo da se trai izraz koji se nalazi na poetku linije (zapoinje tim izrazom);

Primjer: Traimo u datoteci input sve linije koje zapoinju sa slovom A: >sed '/^A/' input ili rijei UNIX: >sed '/^UNIX/' input

Znakom '$' oznaavamo da se trai izraz koji se nalazi na kraju linije (zavrava tim izrazom);

Primjer: Ponovit emo prethodni primjer ali ovaj put traimo pojavu slova A na kraju linije: >sed '/A$/' input ili rijei UNIX: >sed '/UNIX$/' input Evo jednog zanimljivog primjera - kako nai praznu liniju: >sed '/^$/' input

Znak '\n' trai oznaku za novu liniju (ali ne novu liniju u prostoru uzoraka "pattern space");

Primjer: Traimo oznaku za novu liniju: >sed '/\n/' input ovakva traenja su korisna kada elimo umetati ili brisati linije

Znak '.' trai bilo koji znak osim "terminal newline";

375/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

Primjer: Traimo liniju koja nije prazna: >sed '/./' input

niz znakova u uglatim zagradama '[ ]' trae bilo koji od tih znakova u stringu, a ako je prvi znak u stringu '^' trae se bilo koji znakovi osim tih navedenih u uglatim zagradama '[ ]'; sa znakom '-' oznaujemo niz uzastopnih znakova;

Primjer: Traimo liniju koja poinje s brojem: >sed '/^[0-9]/' input ili liniju koja ne poinje sa znakom A iza kojeg slijedi znak C - tu moemo primjetiti razliito znaenje znaka ^, kao poetak i kao negacija: >sed '/^[^AC]/' input' probajmo sad traiti liniju koja zavrava nekim od znakova izmeu A i K: >sed '/[A-K]$/' input

Izraz iza kojeg stoji znak '*' trai bilo koji broj pojava (ukljuujui nijednu) izraza koji mu prethodi;

Primjer: Traimo znak A iza kojeg slijedi 0 ili vie pojava (zaredom) znaka B: >sed '/AB*/' input ili liniju koja poinje sa razmacima: >sed '/^ */' input'

konkatenacija (spajanje) izraza je opet izraz koji trai konkatenaciju stringova koji se podudaraju sa komponentama izraza;

Primjer: Kako bi recimo nali rije UNIX bez obzira da li je pisana velikim ili malim slovima: >sed '/[Uu][Nn][Ii][Xx]/'

izraz unutar sekvence '\ slijedeom tokom;

\' ima identian uinak kao i obian izraz bez te

sekvence, ali ima popratni uinak koji emo opisati pod funkcijom 's' i pod

376/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

izraz '\(n,m\)' (n i m su brojevi) trai niz pojava znakova koji se trae unutar sekvence '\ \' napisane prije nje; '\n\)' e traiti n-tu pojavu; '\n,\)' e traiti najmanje n-tu pojavu; '\(n,m\)' e traiti bilo koju pojavu izmeu n i m;

Primjer: Printat emo samo linije koje sadre 65 znakova i vie >sed -n '/^.\(65\)/p' input

izraz '//' ili "nul izraz" je jednak kao zadnji kompajlirani izraz;

Ako elimo koristiti neke od specijalnih znakova (^ $ . * [ ] \ /) kao elemente izraza, koristimo ih u kombinaciji s '\'.

2.3.3

Broj adresa

Naredbe mogu imati 0, 1 ili 2 adrese. Ukoliko za naredbu postoji vie adresa od maksimalno dozvoljenih, to e se smatrati grekom. Ako je nije navedena niti jedna adresa, ona se primjenjuje na sve linije s ulaza. Ako je navedena jedna adresa, ona se primjenjuje na sve linije koje se s njom podudaraju. Ako su pak navedene dvije adrese, one se primjenjuju na sve linije koje se nalaze izmeu traenih (adresiranih), ukljuujui i njih. Kod pisanja naredbi takve dvije adrese se odvajaju zarezom.

2.4. Funkcije
Funkcije su u stvari bit sed-a. One su te koje mijenjaju ulazni string. Naredba za editiranje se sastoji od adrese (koje smo opisali gore) i od funkcije. Funkcije se imenuju jednim znakom i dijelimo ih na slijedee podgrupe: Funkcije orijentirane na cijelu liniju (Whole-Line Oriented Functions) koje dodaju, briu ili mijenjaju cijele linije teksta; Zamjenske Funkcije (Substitute Functions) koje trae i mijenjaju regularne izraze unutar linije; Ulazno izlazne funkcije (Input-Output Functions) koje se bave itanjem i zapisivanjem linija ili datoteka;

377/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

Funkcije vie ulaznih linija (Multiple input-line functions) koje trae izraze koji se proteu kroz vie linija; Funkcije uvanja i dohvaanja (Hold and Get Functions) koje omoguavaju spremanje i uitavanje ulaznog teksta za kasniju upotrebu; Funkcije kontrole toka (Flow of Control Functions) koje kontroliraju redoslijed primjene funkcija; Ostale funkcije (Miscellaneous Functions)

2.4.1. Funkcije orijentirane na cijelu liniju (Whole-Line Oriented Functions)


d - brisanje linija (delete lines) Funkcija d brie iz datoteke (ne zapisuje na izlaz) sve linije koje se podudaraju s njenom adresom. Takoer ima popratni uinak da se niti jedna druga naredba nee izvravati preko obrisane linije. im se funkcija izvrila, nova linija se ita s ulaza i editiranje zapoinje s prvom naredbom iz skripte.
Primjer: Obrisat emo sve linije koje sadre rije UNIX: >sed '/UNIX/d' input obriimo sve linije od prve koja sadri rije hello do i ukljuujui one koja sadri rije goodbye (ovdje vidimo primjer dvije adrese): >sed '/hello/,/goodbye/d' input obriimo sad sve prazne linije: >sed '/^$/d' input obriimo sve linije koje zapoinju s tokom i preusmjerimo u output (toka je specijalni znak i za nju je potrebna escape sekvenca \.): >sed '/^\./d' input > output

n - slijedea linija (next line) Funkcija n ita slijedeu liniju s ulaza zamjenjujui trenutnu liniju koja se ako je tako specificirano zapisuje na izlaz, a kontrolu preuzima naredba koja slijedi iza n.

Primjer: Dodat emo praznu liniju iza svake druge linije (koristit emo G (get) funkciju opisanu u poglavlju 2.4.5. gdje dodajemo sadraj privremenog buffera koji je prazan): >sed -e 'n' -e 'G' input

378/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

a\ <text> - dodavanje teksta (append) Funkcija a dodaje tekst iz argumenta nakon linije koja je adresirana. Funkcija se pie na kraju linije, iza nje se pie '\', a tekst koji se dodaje ide u slijedeu liniju. Ukoliko tekst iz argumenta ide u vie linija oznake za nove linije moraju biti "skrivene" tako to e znak '\' prethoditi svakoj novoj liniji. Rezultat e se poslati na izlaz nakon to se izvre naredbe za editiranje, bez obzira na to to se desilo sa adresiranom linijom (ona je ak mogla biti obrisana ili zamijenjena funkcijom d ili c).

Primjer: Ubacit emo liniju s tekstom "Programski alati na UNIX raunalima" iza svake linije koja sadri rije "Kolegij": >sed '/Kolegij/a\ >Programski alati na UNIX raunalima' input

i\ <text> - umetanje teksta (insert) Funkcija i radi isto to i funkcija a, osim to se tekst iz argumenta dodaje ispred linije koja je adresirana.

Primjer: Ubacit emo liniju s tekstom "/*Komentar: ovo je pretprocesorska direktiva*/" ispred svake linije koja poinje s "#": >sed '/^#/i\ >/*Komentar: ovo je pretprocesorska direktiva*/' input

c\ <text> - zamjena teksta (change) Funkcija c brie adresiranu liniju i zamjenjuje je sa tekstom iz argumenta. Poput finkcija i i a ako postoji vie linija teksta s kojim se zamjenjuje, nove linije moraju biti skrivene sa '\'. c funkcija moe imati dvije adrese te samim time adresirati regiju teksta. Takva selektirana regija se brie te se umjesto nje umee tekst iz argumenta (umetanje se vri jednom za cijelu regiju, a ne za svaku pojedinanu liniju iz regije).

379/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

Primjer: Zamijenit emo svaku liniju koja je prazna s linijom koja sadri tekst "prazna linija": >sed '/^$/c\ >prazna linija' input probajmo sada zamijeniti linije od 4. do 6. sa linijama "etvrta linija", "peta linija" i "esta linija": >sed '4,6/c\ >etvrta linija\ >peta linija\ >esta linija' input

2.4.2. Zamjenska funkcija (Substitute Function)


Jedna vrlo vana funkcija mijenja dio linije preko kontekstne adrese. s<pattern><replacement><flags> - s funkcija zamjenjuje dio linije selektiran uzorkom <pattern> sa zamjenom <replacement>. Argument <pattern> sadri uzorak, identian kao u kontekstnom adresiranju obraenom u poglavlju 2.3.2. Jedina razlika je da kontekstne adrese moraju biti odvojene (delimited) znakom '/', dok argumenti <pattern> funkcije s mogu biti odvojeni bilo kojim znakom osim znakom za razmak ili novu liniju.
Primjer: Zamijenit emo pojavu teksta "Zgb" sa "Zagreb": >sed 's/Zgb/Zagreb/' input ili isto to ali jo i tekst "St" sa "Split": >sed -e 's/Zgb/Zagreb/' -e 's/St/Split/' input probajmo sada maknuti sve praznine na poetku linije: >sed 's/^ *//' input

Po defaultu e samo prvi niz znakova koji se podudara s uzorkom biti zamijenjen, ali i tome se moe doskoiti (vidi flag g ispod). <Replacement> nije uzorak, odnosno svi posebni znakovi koji se upotrebljavaju kod uzorka, nemaju specijalno znaenje. Pa ipak neki drugi znakovi su specijalni: & - taj znak e se zamijeniti sa skupom znakova koji se podudara s uzorkom <pattern>;
Primjer: Zamijenit emo pojavu teksta "UNIX" sa "Programski alati na UNIX raunalima" koristei specijalni znak & (primjetimo da ne moramo koristiti escape sekvence za navodnike): >sed 's/UNIX/"Programski alati na & raunalima"/' input

380/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

\d - (d je jednoznamenkasti broj) bit e zamijenjen sa d-tom pojavom znakova koji se trae unutar sekvence "\( \)".

Primjer: >sed 's/\(alati \)\(programski \)/\2\1/' input Ovdje smo imali primjer zamjenske funkcije koja se sastoji od regularnog izraza podjeljenog u dvije grupe " alati " i "programski". Ako se ta funkcija primjeni na liniju koja sadri izraz "alati programski", regularni izraz "hvata" svaku od podgrupa, dok zamjenski izraz \2\1 zamjenjuje redoslijed grupa i producira izraz "programski alati"

Argument <flags> moe sadravati slijedee zastavice (flag-ove): g - zamjenjuje <replacement> argument za sve pojave argumenta <pattern> u liniji. Nakon uspjene zamjene, potraga za slijedeom instancom argumenta <pattern> poinje iza prethodno umetnutog niza znakova.
Primjer: Zamijenit emo svaku pojavu teksta "password" sa "xxxxxxxx" izmeu prve i 15 linije: >sed '1,15 s/password/xxxxxxxx/g' input

n - (n je broj izmeu 1 i 512) zamjenjuje <replacement> argument za n-tu pojavu argumenta <pattern> u adresiranoj liniji.

Primjer: Zamijenit emo treu pojavu teksta "kuna" sa "dolar" za drugu liniju ulaza: >sed '2 s/kuna/dolar/3' input

p - daje liniju na standardni izlaz ako (i samo ako) je zamjena uspjeno obavljena. Tu moemo primjetiti da ako postoji vie s funkcija koje imaju p zastavicu (flag), koje uspjeno izvedu zamjenu na istoj liniji s ulaza, tada emo na izlaz dobiti vie kopija obraene linije - po jednu za svaku uspjenu zamjenu.

Primjer: Ako naa input datoteka sadri tekst: >Prva linija >Dobro more Dobro jutro >trea linija tada primjenom slijedee sed naredbe: >sed 's/Dobro/Plavo/p input kod veina verzija SED-a dobivamo na ispis slijedee:

381/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

>Prva linija >Plavo more Dobro jutro >Plavo more Dobro jutro >trea linija objanjenje toga je da SED po default-u printa sve linije, dok p flag trai ispis uspjeno izmjenjene linije. Ukoliko primjenimo slijedeu sintaksu: >sed -n 's/Dobro/Plavo/p' input dobivamo: >Plavo more Dobro jutro onemoguili smo default-ni ispis -n opcijom, a p flagom traili ispis samo promijenjene linije. Ako pak elimo dobiti ispis cijele datoteke, ukljuujui i promijenjene linije te da nema dupliciranja, neemo koristiti niti -n opciju, niti p flag. Recimo da elimo u naoj datoteci input promijeniti sve pojave "Dobro" u "Plavo" u liniji i istodobno ispisati promijenjenu liniju, tada koristimo kombinaciju flagova g i p (g mora biti prvi), a sintaksa izgleda: >sed 's/Dobro/Plavo/gp input

w <filename> - ta zastavica (flag) omoguuje da se linija koja je uspjeno bila obraena s funkcijom zapisuje u datoteku danu argumentom <filename>. Tu, kao i kod p zastavice (flag-a) moemo imati zapisivanje vie razliitih kopija iste linije. Ako datoteka specificirana <filename> argumentom ve postoji, bit e prepisana, a ako ne postoji, bit e kreirana kao nova. Kombiniranjem w zastavice i w funkcije (opisane ispod) mogue je specificirati do 10 razliitih naziva datoteka.

Primjer: Koristit emo datoteku input sa sadrajem iz prethodnog primjera i primjenom slijedee sintakse: >sed 's/Dobro/Plavo/w output' input na standardni izlaz, ali i u datoteku output smo zapisali linije koja je promijenjena (samo prva promjena): >Plavo more Dobro jutro ako pak elimo napraviti izmjene na cijeloj liniji, koristimo kombinaciju g i w flagova: >sed 's/Dobro/Plavo/gw output' input i dobivamo na ekranu i u datoteci output: >Plavo more Plavo jutro ako pak elimo izlaz na paralelni printer (LPT1) tada je sintaksa: >sed 's/Dobro/Plavo/gw lpt1' input ili redirekcijom na printer bez koritenja w flaga: > sed 's/Dobro/Plavo/g' input > LPT1:

382/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

p i w flagovi funkcije s rade isto kao samostalne funkcije p i w (opisane dolje) osim to su ovisne o uspjehu svoje zamjenske funkcije s.

2.4.3. Ulazno-izlazne funkcije (Input-Output Functions)


p - funkcija koja pie adresiranu liniju na standardni izlaz . Linija se zapisuje u trenutku nailaska na p funkciju, bez obzira to slijedee naredbe za editiranje rade na liniji.
Primjer: >sed 'p' input ovakvom sintaksom vjerojatno emo izazvati neeljeni uinak - ispisivat e se sve linije duplicirane. Zbog toga najee koristimo funkciju p zajedno s opcijom -n: >sed -n 'p' input Recimo da elimo printati linije od 35 do kraja datoteke, tada emo koristiti: >sed -n '35,$p' input ili od linije koja sardri rije "poetak" pa do linije koja sadri rije "kraj": >sed -n '/poetak/,/kraj/p' input evo jo jednog zanimljivog primjera gdje printamo sve linije osim one koja sadri izraz "ne printaj" (primjetimo upotrebu ! funkcije opisane u poglavlju 2.4.6.: >sed -n '/ne printaj/!p' input

w <filename> - zapisuje adresiranu liniju u datoteku specificiranu sa <filename>. Ako datoteka specificirana <filename> argumentom ve postoji, bit e prepisana, a ako ne postoji, bit e kreirana kao nova. Kao i kod funkcije p linija se zapisuje u trenutku nailaska na p funkciju, bez obzira to slijedee naredbe za editiranje rade na liniji. Mogue je specificirati do 10 razliitih naziva datoteka (kombiniranjem sa zastavicom (flag) w funkcije s.

Primjer: Kod funkcije za zamjenu w flag smo koristili za zapisivanje samo promijenjenih linija u datoteku. Funkcija w moe stajati sama i recimo da cijelu promijenjenu datoteku elimo spremiti moemo koristiti slijedeu opu sintaksu: >sed -e 'funkcija koja mijenja' -e 'w output' input a stvarni primjer: >sed -e 's/kuna/dolar/g' -e 'w output' input Napomena: Nigdje ne stoji da datoteka input i output moraju biti razliite, dapae, w funkcija (i w flag s funkcije) e vrlo rado izvriti spremanje rezultata u datoteku iz koje smo itali podatke, tako da ako je to stvarno ono to elimo, moramo paziti na pravilnu sintaksu i smisao funkcija i opcija koje prethode w funkciji jer nakon to se w funkcija izvri povratka nema.

383/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

r <filename> - ita sadraj datoteke zadane argumentom <filename> i dodaje (append) ga nakon linije koja se poklapa s adresom. Datoteka e se proitati i dodati (appendirati) bez obzira to slijedee naredbe za editiranje rade na obraivanoj liniji. Ako su funkcije r i a (opisane gore) izvrene na istoj liniji, tekst iz funkcije a i funkcije r su dodani onim redom kako su funkcije izvravane. Ako pak datoteka iz argumenta <filename> ne moe biti otvorena, smatra se da je "NULL file", te se nee tretirati kao greka.

Primjer: >sed 'r source' input ovakvu sintaksu nemojte koristiti osim ako niste sigurni da to elite. Naime, poto nema adresiranja, ovakav kod e uzrokovati da se sadraj datoteke source ubaci iza svake linije datoteke input, to moe biti nezgodno ako je datoteka source jako velika. Probajmo radije ubaciti njen sadraj iza 4 linije datoteke input: >sed '4r source' input Sintaksa r funkcije ne doputa specifikaciju vie od jedne adrese tako da e slijedei kod uzrokovati greku: >sed '4,7r source' input ako ipak elimo ubaciti sadraj datoteke source iza svake od 4. do 7. linije potrebno je koristiti funkciju za grupiranje { } koju emo opisati u poglavlju 2.4.6, a kod bi izgledao: >sed '4,7{ >r source >}' input

Napomena: Poto postoji limit na broj datoteka koje se mogu otvoriti istovremeno, treba obratiti panju da ne bude vie od 10 datoteka spomenutih u w funkciji i w zastavici (flagu) s funkcije, te da se taj broj smanjuje za 1 ako se izvrava i r funkcija (samo jedna datoteka za itanje moe biti otvorena).

2.4.4. Funkcije vie ulaznih linija (Multiple Input-Line Functions)


Postoje tri funkcije, i sve se piu velikim slovima, koje se posebno bave s prostorom uzoraka (pattern space) koji u sebi sadri ugraene nove linije (embedded newline). Njihova uloga je u principu da omogue traenje uzoraka teksta preko vie linija s ulaza. N - slijedea linija (next line) - funkcija koja slijedeu liniju s ulaza dodaje (append) trenutnoj liniji u prostor uzorka. Dodana linija je odvojena od prethodnog sadraja s oznakom za novu liniju. Koristei '\n' za pronalaenje kraja linije, uzorak se moe proiriti preko vie linija.

384/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

Primjer: Sama za sebe N funkcija nije previe zanimljiva jer ne mijenja ulazni tekst, ali probajmo napraviti slijedee:na liniju koja zavrava s tokom, dodat emo slijedeu liniju s ulaza (opet emo koristiti funkciju grupiranja { }): >sed '/\.$/ { >N >s/\n// >}' input ili drugi primjer gdje emo izbrisati sav tekst izmeu rijei "poetak" u prvoj liniji i rijei "kraj" u drugoj liniji (opet koristimo funkciju grupiranja i to sada i sa njenim ugnjeivanjem): >sed '/poetak/ { >N >/\n.*kraj/ { >s/poetak.*\n.*kraj/poetak kraj/ >} >}' input

D - funkcija koja brie prvi dio vielinijskog prostora uzoraka kreiranog N funkcijom i to do i ukljuujui prve oznake za novu liniju. Nakon izvrenja nastavlja se editiranje s prvom naredbom iz skripte. Ukoliko ova funkcija potpuno izbrie prostor uzoraka (a to znai da je oznaka za novu liniju bila ujedno i kraj), tada se ita nova linija s ulaza.

Primjer: Koristit emo primjer slian prethodnom samo emo ovog puta obrisati liniju u kojoj se nalazi rije "poetak" ako se u slijedeoj liniji nalazi rije "kraj": >sed '/poetak/ { >N >/\n.*kraj/ D }' input

P - funkcija koja tampa prvi dio vielinijskog prostora uzoraka kreiranog N funkcijom i to do i ukljuujui prve oznake za novu liniju.

Primjer: I opet primjer s "poetak" i "kraj", ali sada, umjesto brisanja, isprintat emo liniju u kojoj se nalazi rije "poetak" ako se u slijedeoj liniji nalazi rije "kraj": >sed -n '/poetak/ { >N >/\n.*kraj/ P }' input i sada evo primjera gdje kombiniramo sve tri Multiple input line funkcije (najei redoslijed njihove primjene je prvo N pa P i na kraju D); traimo liniju koja sadri rije "poetak", uitavamo slijedeu liniju, ako u njoj postoji rije "kraj" briemo sav tekst izmeu njih, printamo i briemo prvu liniju:

385/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

>sed '/poetak/ { >N >/poetak.*kraj/ { >s/poetak.*kraj/poetak kraj/ >P >D >} >}' input

Funkcije P i D su ekvivalenti funkcija p i d ukoliko na njih nije bila primjenjena funkcija N, odnosno u prostoru uzoraka nema oznake za novu liniju.

2.4.5. Funkcije uvanja i dohvaanja (Hold and Get Functions)


Pet je funkcija koje omoguavaju spremanje te dohvaanje spremljenog sadraja za moguu naknadnu upotrebu: h - uva prostor uzoraka - h funkcija kopira sadraj prostora uzoraka u posebni privremeni buffer. Prethodni sadraj privremenog buffera se time unitava. H - funkcija koja dodaje (append) sadraj prostora uzoraka u buffer iza postojeeg sadraja, s time to ih odvaja novom linijom. ak i ukoliko je sadraj buffera bio prazan, funkcija H e svejedno prvo dodati novu liniju. g - dohvaa sadraj buffera - g funkcija kopira sadraj buffera u prostor uzoraka, unitavajui njegov prethodni sadraj. G - funkcija koja dodaje (append) iza sadraja prostora uzoraka oznaku za novu liniju te sadraj buffera. Ukoliko je buffer bio prazan, oznaka za novu liniju se svejedno dodaje iza prostora uzoraka.
Primjer: Ubacit emo praznu liniju iza svake linije datoteke input: >sed 'G' input > output prilino jednostavno, ali to ako ve imamo praznih linija u datoteci input, a elimo samo jednu liniju razmaka izmeu svake "neprazne" linije: >sed -e '/^$/d' -e 'G' input > output Evo koda koji e kopira od 4. do 10. na kraj datoteke: >sed -e '4h' -e '5,10H' -e '$G' input > output

x - izmjena - ova funkcija izmjenjuje sadraj prostora uzoraka sa sadrajem buffera.


386/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

Primjer: sed 'x' input > output ovakva sintaksa e dodati praznu liniju na poetak datoteke i izbrisati zadnju liniju. Evo kako radi: na prvoj liniji se izmjenjuje sadraj privremenog buffera (koji je prazan) sa sadrajem prve linije koja je sad pohranjena u buffer, druga linija se izmjenjeuje s prvom i tako dalje do zadnje linije koja se sprema u buffer i izmjenjuje s predzadnjom koja je u bufferu. Slijedi izlazak iz naredbe ime je obrisan buffer u kojem je bila zadnja linija koja nije nigdje zapisana.

2.4.6. Funkcije kontrole toka (Flow of Control Functions)


Ove funkcije se ne bave editiranjem odnosno mijenjanjem linija s ulaza, ve kontroliraju primjenu funkcija na linije selektirane u adresnom dijelu. ! - funkcija koja uzrokuje da se slijedea naredba (napisana u istoj liniji) primjenjenjuje na sve linije koje NISU selektirane u adresnom dijelu (ekvivalent NOT operatoru).
Primjer: Ve smo imali primjere upotrebe funkcije !, ali evo jo primjera: recimo da elimo na svim linijama koje NE zapoinju s "Poetak" zamijeniti sve pojave stringa "neto" s "neto drugo": sed '/^poetak/!s/neto/neto drugo/g' input ili isto na svim linijama osim onih izmeu 5 i 16: >sed '5,16!{ s/neto/neto drugo/g' '} input

{ } - funkcija za grupiranje naredbi omoguuje da se skup naredbi unutar nje tretira, na linijama selektiranim u adresnom dijelu, kao jedan blok. Prva naredba u bloku moe (i ne mora) biti u istoj liniji sa { dok se zatvaranje bloka naredbi oznaava sa } i mora biti u posebnoj liniji. Takoer je bitno spomenuti da se grupe mogu ugnjeivati.

Primjer: Poto smo ve u prijanjim primjerima imali upotrebu funkcije za grupiranje, evo jednog primjera njenog ugnjeivanja (nesting): >sed /^Poetak/ { >/10000/ { >s/Zgb/Zagreb/2 >s/^/Promijenjeni / >} >}' input evo pojanjenja to smo napravili: adresirali smo sve linije koje poinju s "Poetak"; primjenjujemo funkciju za grupiranje i u njog adresiramo sve linije koje sadre 10000; na njima primjenjujemo novu funkciju grupiranja u kojoj mijenjamo drugu pojavu stringa "Zgb" u "Zagreb" i na poetak linije umeemo string "Promijenjeni"

387/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

:<label> - ova funkcija biljei mjesto u listi naredbi za editiranje kojem se mogu obratiti b i t funkcije (obraene ispod). Argument <label> moe biti niz od osam ili manje znakova. Ukoliko postoje dvije ili vie istih labela funkcije :, generirat e se compile time diagnostic te nee biti pokuaja izvrenja. Funkcija : i njen argument se piu zajedno (bez razmaka).

Primjer: Primjer za samu funkciju je prilino besmislen. Funkcija e zabiljeiti dio koda, ali bez funkcija grananja b i t, nikad nee biti ponovo pozvan.No ipak, evo sintakse: >sed ':labela' input

b <label> - grananje do labele (branch to label) - ova funkcija uzrokuje da se transferira kontrola na neku drugu liniju u skripti. Labela je opcionalna, a to znai da, ako je ima izvrenje se nastavlja na liniji obiljeenoj funkcijom : i pripadajuom labelom, a ako je nema, kontrola se transferira na kraj skripte. Ukoliko pak nije pronaena funkcija : s istom labelom, generirat e se compile time diagnostic te nee biti pokuaja izvrenja. Funkcija grananja moe se iskoristiti za izvravanje niza naredbi kao procedura koja moe biti zvana vie puta iz glavnog tijela skripte.

Primjer: Ako je linija prazna idi na kraj skripte: >sed '/^$/b' input

t <label> - testiranje promjene (test substitutions) - ova funkcija testira da li je na trenutnoj liniji s ulaza uspjeno izvrena neka promjena. Ukoliko je, izvrava se grananje do labele markirane : funkcijom, a ukoliko nije, ne dogaa se nita. Zastavica (flag) koja oznaava da je uspjeno izvrena promjena na liniji se ponitava izvravanjem t funkcije ili itanjem nove linije s ulaza.

Primjer: Ako postoji vie praznih linija zaredom, briemo sve osim jedne: >sed '/^$/ { >:loop >N >s/^\n$// >t loop >}' input postupak je slijedei: traimo praznu liniju; kad i ako je naemo grupiramo daljnje funkcije i labelom oznaavamo poetak; uitavamo slijedeu liniju; radimo zamjenu: ako linija izmeu svog poetka i kraja ima samo embedded newline briemo ga; ako je za supstitucija uspjela granamo se do labele loop i ponavljamo dok god se supstitucija ne izvri (linija nije prazna).

388/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

2.4.7. Ostale funkcije (Miscellaneous Functions)


= - ova funkcija pie na standardni izlaz broj linije selektirane u adresnom dijelu.

Primjer: Evo kako moemo saznati koliko linija ima naa datoteka input: >sed -n '$=' input Napomena: funkcija = sama ne broji linije, ve samo ispisuje redni broj adresirane linije. Kad smo ve kod adresirane linije idemo ispisati broj linije koja poinje s "Poetak" >sed -n '/^Poetak/=' input ako pak elimo ispred svake linije dodati njen broj koristimo slijedeu sintaksu: >sed -n -e '=' -e 'p' input

q - quit - funkcija koja uzrokuje da se trenutna linija zapie na izlaz (ako treba), svi dodani ili proitani tekstovi da se zapiu i da se prekine izvravanje.

Primjer: Ako elimo isprintati prvih 10 linija koristei q funkciju to bi izgledalo ovako: >sed '10q' input apsolutno isti uinak dobili bi koristei p funkciju: >sed -n '1,10p' input slijedei kod bi printao sve linije od prve do i ukljuujui i onu u kojos se nalazi "traeni tekst" i nakon toga prekinuo rad: >sed '/traeni tekst/q' input Napomena: Pri koritenju q funkcije treba biti oprezan ako se promjene zapisuju u originalnu datoteku iz koje itamo jer nakon izvrenja funkcije q nema vie zapisivanja na izlaz.

Obje funkcije primaju samo jednu adresu tako da ako elimo raditi s vie adresa ili regijom, moramo koristiti funkciju za grupiranje. Ovime smo pokrili sve osnovne funkcije SED-a. Postoje jo neke funkcije koje nisu sastavni dio McMahonovog SED-a, ali ih podravaju neke druge verzije. Za te funkcije neemo davati primjere ve emo ih samo popisati i objasniti: y - transform - funkcija slina zamjenskoj funkciji s (ima istu sintaksu), a radi trasformiranje znakova u adresnom dijelu sa znakovima u replacement dijelu l - ispusuje trenutni sadraj prostora uzoraka (korisno kod debuggiranja skripte) ; - function (command) stacking - funkcija koja nam omoguuje slaganje vie SED funkcija jednu iza druge bez upotrebe -e opcije ili { } funkcije.

389/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

3. ZAKLJUAK
Prilikom izrade ovog seminara naao sam se u dilemi: da li od poetka krenuti sa stvarnim, konkretnim primjerima rjeavanja nekog odreenog, konkretnog problema ije su sintakse obino prilino nerazumljive i komplicirane ili poeti od jednostavnih i openitih primjera pa ih vremenom kombnirati i "komplicirati". Traei literaturu i primjere na internetu, ustanovio sam da je onih prvih puno vie te da je veina materijala raena povrno i pogotovo nesistematino. Najbolji primjer toga su materijali koji daju popis opcija, adresiranja i funkcija abecedno, ne pazei na njihovo grupiranje ili nain rada samog SED-a, ime je vrlo teko korisniku poetniku nai i primjeniti ono to mu treba. Stoga sam odluio da ovaj seminar bude pisan za nekog tko se jo sa SED-om nije susretao, a eli ga nauiti i nakon toga ga znati uspjeno primjeniti, a za one koji imaju kakav stvaran problem, moda im poslui neka od gotovih skripti koje se nalaze u dodatku. U svakom sluaju, SED je izuzetan alat. Na alost, veina ljudi ne uspije shvatiti njegovu pravu snagu. Jezik je vrlo jednostavan, ali dokumentacija je loa. Korisnici (programeri) e pisati programe za editiranje nekog teksta esto neznajui da isti cilj mogu postii sa nekoliko ili ak jednom sed naredbom.

390/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

4. DODATAK
Skripta za brisanje vie od jedne prazne linije izmeu "nepraznih" linija
# Write non-empty lines. /./ { p d } # Write a single empty line, then look for more empty lines. /^$/ p # Get next line, discard the held <newline> (empty line), # and look for more empty lines. :Empty /^$/ { N s/.// b Empty } # Write the non-empty line before going back to search # for the first in a set of empty lines. p

Skripta za pretvaranje prvog slova rijei iz malih u velika slova (Carlos Duarte)
# idea: # . grab all first chars of all words into the second part of line # . convert that chars # . for each word, replace first char with those # # if line is: "carlos duarte", then # # carlos duarte # \ncarlos duarte\nCD # Carlos \nduarte\nD # Carlos Duarte\n\n h s/\([a-zA-Z]\)[a-zA-Z][a-zA-Z]*/\1/g s/[^a-zA-Z]*//g y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ x G s/^[^a-zA-Z]*/&\ / ta :a s/\n[a-zA-Z]\([a-zA-Z][a-zA-Z]*[^a-zA-Z]*\)\(.*\n\)\(.\)/\3\1\ \2/ ta P d

391/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

Skripta za formatiranje teksta tako da ni jedne linija nije dua od 40 znakova (Carlos Duarte)
# fmt.sed -- format text such as each line gets below 40 chars # Carlos Duarte, 980528 :a /^.\{40\}/!{ $q N s/ *\n */ / ba } s/^.\{40\}/&\ / s/^\(.*\) \(.*\)\n/\1\ \2/ P s/^.*\n// ba

Skripta za obrtanje redoslijeda znakova na svakoj liniji datoteke s ulaza


# Reverse a line; add a new-line to the end s/$/\ / # Move first character at the end. The regexp matches # until the first character has become the new-line tx :x s/\(.\)\(.*\n\)\(.*\)/\2\1\3/ tx # Remove the new-line s/^.//

Skripta za obrtanje redoslijeda linija datoteke s ulaza


1! G h $p

392/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

Skripta za centriranje svih linija datoteke na 80 znakova (lako podesivo na druge veliine)
# center all lines of a file, on a 80 columns width # # to change that width, the number in \{\} must be replaced to w+1, and # the number of added spaces also must be changed # 1{ # Prepare 80 spaces in the buffer x s/^$/ / s/^ *$/&&&&&&&&/ x } # del leading and trailing spaces y/ // s/^ *// s/ *$// # add a new-line and 80 spaces to end of line G # keep 1st 81 chars (80 + new-line) s/^\(.\{81\}\).*$/\1/ # spaces are split into two halves through the use of back-refs. s/^\(.*\)\n\( *\)\2.*$/\2\1/

Skripta za brisanje C i C++ komentara (Brian Hiles, Paolo Bonzini)


# Remove C and C++ comments, by Brian Hiles (brian_hiles@rocketmail.com) # Sped up (and bugfixed to some extent) by Paolo Bonzini (bonzini@gnu.org) # Works its way through the line, copying to hold space the text up to the # first special character (/, ", '). The original version went exactly a # character at a time, hence the greater speed of this one. But the concept # and especially the trick of building the line in hold space are entirely # merit of Brian. : loop # This line is sufficient to remove C++ comments! /^\/\// s,.*,, /^$/{ x p n b loop }

393/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

/^"/{ : double /^$/{ x p n /^"/b break b double } H x s,\n\(.[^\"]*\).*,\1, x s,.[^\"]*,, /^"/b break /^\\/{ H x s,\n\(.\).*,\1, x s/.// } b double } /^'/{ : single /^$/{ x p n /^'/b break b single } H x s,\n\(.[^\']*\).*,\1, x s,.[^\']*,, /^'/b break /^\\/{ H x s,\n\(.\).*,\1, x s/.// } b single } /^\/\*/{ s/.// : ccom s,^.[^*]*,, /^$/ n /^\*\//{

394/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima SED

s/..// b loop } b ccom } : break H x s,\n\(.[^"'/]*\).*,\1, x s/.[^"'/]*// b loop

Skripta za printanje duplih linija s ulaza


# print all duplicated uniq lines on a sorted input # like `uniq -d' $b N /^\(.*\)\n\1$/{ s/.*\n// p :b $b N /^\(.*\)\n\1$/{ s/.*\n// bb } } $b D

395/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

Kreimir Heimovi

GCC COMPILER

396/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler "Ne smije vam past na pamet kritizirati GCC dok ga dobro ne upoznate!" Pavle poljari Zagreb, 08.01.2004.

SOFTWARE
Raunala ne mogu nita napraviti bez uputa korisnika. Da bi napravili bilo koji posao morate raunalu dati niz instrukcija. Taj set instrukcija naziva se raunalni program. Software se odnosi na skup raunalnih programa i procedura koje opisuju kako koristiti te programe. Moemo rei da je software kolekcija programa koje poveavaju mogunosti hardware-a. Software vodi raunalo pri svakom koraku, gdje da pone i gdje da zavri odreeni posao. Proces izrade softvera je ono to svi nazivamo programiranje. Raunalni software se obino dijeli na dvije iroke kategorije: sistemski software aplikacijski software Sistemski software Znamo da je program set instrukcija koje se moraju uitati u raunalo da bi moglo raditi. Kad upalite raunalo neki programi se izvre i aktiviraju razliite dijelove raunala i spremaju ga za rad. Taj set programa je sistemski software. Stoga moemo rei da je sistemski software set od jednog ili vie programa napravljenih za kontroliranje rada raunala kao sistema (komunikacija s printerom, diskom, kontrola upotrebe memorije i procesora i sl.). Bez sistemskog softwareas (operacijskog sustava- DOS, WINDOS, UNIX) nije mogue raditi na raunalu. Razvoj sistemskog softwarea je kompleksan posao i zahtjeva mnogo znanja o raunalnoj tehnologiji. Zato se za razliku od aplikacijskog softwarea ne razvija kod kue. Aplikacijski software je set programa koji izvravaju operacije za odreenu primjenu (pisanje teksta, izrada statistikih izvjetaja, analiza podataka itd). Jedan primjer aplikacijskog softwarea su programski jezici.

Odnos izmeu hardwarea, softwarea (sistemskog i aplikacijskog) i korisnika

397/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

PROGRAMSKI JEZICI
Upoznati smo sa terminom "jezik". Jezik je sistem komunikacije izmeu dvije ili vie osoba. Moemo komunicirati na nekoliko jezika: hrvatski, engleski, njemaki... No kako komunicirati sa raunalom. Raunalo nee razumjeti govorne jezike (za sada) za prijenos podataka i instrukcija. Zato postoje programski jezici posebno razvijeni da moete prenijeti podatke i instrukcije raunalu za obavljanje odreenog posla. FORTRAN, BASIC, C, COBOL samo su neki od mnotva programskih jezika. Instrukcije i programi piu se u odreenom jeziku ovisno o vrsti posla koju elimo da program obavlja. Na primjer za znanstvene aplikacije koristi se FORTRAN, a za poslovne COBOL. Svaki programski jezik moe se kategorizirati u slijedee kategorije: jezici visoke razine - High Level Languages jezici niske razine - Low Level Languages (strojni i asemblerski jezici)

Jezici niske razine


Termin niska razina znai blizina nainu rada stroja. Jezici niske razine su strojno orijentirani i zahtijevaju irok spektar znanja o hardwareu i njegovoj konfiguraciji. Oni su jako blizu hardwareu (velika brzina izvoenja) ali su teki za pisanje programa. a) Strojni jezik Strojni jezik je jedini jezik koji raunalo direktno razumije, ne zahtjeva nikakav prijevod. esto ka zovemo i strojni kod. Napisan je kao set binarnih brojeva: 1 (jedinica) i 0 (nula). Instrukcija moe izgledati ovako: 1011000111101. Kad sa odreenim sekvencama koda "nahranimo" raunalo, ono prepozna kod i pretvara ga u elektrini signal potreban za izvrenje tog koda. Taj jezik nije lako nauiti jer ga je teko shvatiti (no nije nemogue). To je jezik efikasan za raunalo no nije za programera. Osim to ga je teko programirati, kod u strojnom jeziku jo je tee debugirati. Jedina prednost je to se program u strojnom jeziku izvrava vrlo brzo jer procesoru nije potrebno prevoditi instrukcije. Strojni jezik je jezik prve generacije.

398/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

b) Asemblerski jezik To je prvi korak ka poboljanju strukture programiranja. Poto raunalo prepoznaje brojeve i slova odreena kombinacija alfanumerika se moe iskoristiti za zamjenu strojnog koda. Asemblerski jezik, dakle, tvori set simbola i slova a prevoditelj (asembler) je taj koji prevaa asemblerski jezik u strojni. Programiranje u asemnbleru je mnogo lake jer omoguava programeru da lake shvati kod. Npr. liniju koda (izmiljena) "CPx1000 R1", koja kopira (CP-copy) sadraj s adrese(x) 1000 u registar R1, lake je shvatiti nego "1010 1000 1110" (1010-copy, 1000-adresa, 1110-registar). Asebblerski jezik ima istu razinu izvravanja kao i strojni jezik, jer je asembler prevoditelj jedan-za-jedan. (jedna naredba u asemblerskom jeziku = jedna naredba u strojnom jeziku). Glavni nedostatak asemblerskog jezika je to to je strojno ovisan. Program napisan za jedno raunalo moda se nee pokrenuti na drugim raunalima sa drugaijom konfiguracijom hardwarea.

Jezici visoke razine


Asemblerski jezik i strojni jezik zahtijevaju duboko poznavanje hardwarea, dok je u jeziku visoke razine potrebno samo poznavanje instrukcija (naredbi) u engleskom jeziku i logiku problema bez obzira koje raunalo koristili. Jezici visoke razine su jednostavni jezici koji koriste engleski i matematike simbole poput +,-,*,/,% itd. Jezici visoke razine su problemski orijentirani jer su naredbe prikladne za rjeavanje odreenih problema. U FORTRAN-u, na primjer naredbe su prilagoene za rjeavanje matematikih problema, a u COBOL-u za poslovne probleme. Stoga su problemski orijentirani jezici napisani na takav nain da vie slie jeziku problema. U govoru poslovni ovjek koristi poslovne termine a znanstvenik znanstvene. Velika je prednost jezika visoke razine to su laki za nauiti i koristiti jer na neki nain slie govornom jeziku engleskom. Svaki jezik visoke razine mora se pretvoriti u strojni jezik da bi ga raunalo moglo razumjeti.

399/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

primjer.c

C kompajler

primjer.exe

Kompajler (Compiler)
Kompajler je prevoditelj koji prevodi naredbe pisane u jeziku visoke razine u strojni jezik. Zove se kompajler jer kompajlira (najblii prijevod bio bi - prevodi). Kompajler je programski prevoditelj poput asemblera samo mnogo sofisticiraniji. On najprije pregledava program i onda ga prevodi u strojni jezik. Program koji pie programer u nekom jeziku visoke razine naziva se izvorni program (source program), a kod tog programa izvorni kod (source code). Kad kompajler taj program prebaci u strojni jezik dobiva se objektni program. Kompajler moe prevoditi samo one izvorne programe koji su pisani u jeziku za koji je kompajler namijenjen. Fortran kompajler nee kompajlirati izvorni kod napisan u COBOL-u. Objektni program koji napravi kompajler je strojno ovisan. To znai da se programi kompajlirani za jednu platformu nee izvravati na drugoj. Zato svaka platforma mora imati svoj kompajler za odreeni programski jezik. Platformska neovisnost postie se koritenjem jezika vie razine na razliitim platformama.

400/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

Interpreter
Interpreter je jedna druga vrsta prevodioca koja se koristi za prevoenje programskih jezika viih razina u strojni jezik. On uzima jednu naredbu jezika vie razine, prevodi ju u strojni jezik i odmah ju izvrava. Prevoenje i izvravanje izvodi se za svaku naredbu. Uvelike se razlikuje od kompajlera koji prevodi cijeli program u strojni jezik i ne izvrava ga. Prednost interpretira nad kompajlerom je brza reakcija na promjene u izvornom programu. On eliminira potrebu za zasebnim kompajliranjem nakon promjena za svaki program. Interpretere je relativno lako napisati u usporedbi s kompajlerima i ne zahtijevaju mnogo memorije. Problem je to se izvrenje svake naredbe svaki put najprije prevodi pa onda izvrava. Zato se kompajlirani program izvrava mnogo bre nego interpreterski program.

401/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

OBJEKTNO ORIJENTIRANO PROGRAMIRANJE


Objektno orijentirano programiranje temelji se na nekim starim idejama, proiruje ih i objedinjuje na nov nain. Rezultat toga je svestranost i korak naprijed za umjetnost programiranja. Objektno orijentiran pristup ini programe intuitivnijim, brim, vie podlonim modifikacijama i lakim za razumijevanje. On vodi ne samo prema alternativnim nainima izrade programa nego i k alternativnim nainima shvaanja programskih zadataka. Za one koji nisu nikad koristili objektno orijentirano programiranje za izradu aplikacija, moe se initi da je objektno orijentirano programiranje velika prepreka. Ono donosi nov nain izrade stvari koje se mogu isprva initi udnima, te novu terminologiju na koju se treba neko vrijeme navikavati. Terminologija e na kraju pomoi no nije ju lako nauiti zato je pomalo teko poeti.

Fortran
Jedan od najstarijih programskih jezika, FORTRAN, razvio je tim programera IBM-a na elu s Johnom Backusom i prvi put je predstavljen 1957. Ime FORTRAN je akronim od FORmula TRANslation, jer je napravljen da olaka prevoenje matematikih formula u kod. Zbog toga se esto se govori o FORTRANu kao znanstvenom jeziku. FORTRAN je prvi jezik visoke razine koji je koristio prvi kompajler ikad napravljen. Prije njegova razvitka programeri morali su pisati u strojnom/asemblerskom kodu. Cilj dizajniranja FORTRANa, bio je da se napravi programski jezik kojeg bi bilo lako nauiti, koji bi bio prikladan za razliite aplikacije, neovisan o platformi i omoguavao da se kompleksni matematiki izrazi piu slino obinoj algebarskoj notaciji. Uz sve to ideja je bila da bude gotovo jednako efikasan pri izvravanju kao asemblerski jezik. Poto je FORTRAN mnogo lake kodirati programerima je omogueno 500% bre pisanje programa, dok se efikasnost izvravanja smanjila za samo 20%. To je omoguilo programerima da se vie posvete rjeavanju aspekata problema a manje samom kodiranju. FORTRAN je nije bio inovativan samo zbog toga to je bio prvi jezik visoke razine, ve i zbog svog kompajlera, koji je priznat kao roditelj nove grane raunalne znanosti teorija kompajlera. Nekoliko godina nakon izdavanja, FORTRAN je razvio mnogo dijalekata (zbog tweakanja programera koji su ga eljeli prilagoditi za svoje potrebe) i bilo je teko prenaati program s jednog stroja na drugi.

402/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

ANSI (American National Standards Institute) je 1966. izdala prvi Standard za Programski Jezik. Ta standardizirana verzija poznata je kao FORTRAN '66 (FORTRAN IV). Unato standardizaciji, nekoliko godina poslije ponovno se pojavila skupina dijalekata, pa je bilo potrebno da ANSI pogleda stvar jo jednom. Nova standardizirana verzija izlazi 1978. pod nazivom FORTRAN '77 (jer je ANSI poeo s revizijom 1977.). U tu verziju ukljuene su neke nove opcije:nov nain rukovanja grekama i mehanizmi za velike programske projekte. Zadnja verzija, Fortran '90 (vie nije sve velikim slovima) dodaje jo novih mogunosti: rekurziju, pokazivae i korisnike tipove podataka. Budunost Fortrana '90: Trenutna istraivanja u teoriji kompajlera ukljuuju sposobnosti kompajlera da generira objektni kod koji e moi iskoristiti mogunosti velikih paralelnih raunala. Fortran '90 kompajleri su glavne mete takvih istraivanja.

C
Programski jezik C je prvobitno razvio Dennis Richie (Bell Laboratories) 1970. iz BCPL-a (B Compiler), s namjerom da se pokree na PDP-11 sa UNIX operacijskim sustavom. Prvobitni naziv mu je bio NB (New B). Iako je namijenjen da se pokree pod UNIX-om, postojao je veliki interes za pokretanje C-a pod MS-DOS-om na IBM PC i kompatibilnim raunalima. To je odlian jezika takvu okolinu zbog jednostavnosti izraza, cjelovitosti koda i irokog spektra primjene. Zbog jednostavnosti pisanja C compiler je obino prvi jezik visoke razine dostupan na svakom novom raunalu, ukljuujui mikroraunala, miniraunala i mainframe raunala. C nije najbolji jezik za poetnike, jer na prvi pogled izgleda zagonetan. On doputa programeru irok raspon operacija od visoke razine do vrlo niske, pribliavajui se razini asemblerskog jezika. Gotovo da nema granice dozvoljene fleksibilnosti. Jedan iskusan C programer davno je izjavio: "U C-u moete programirati sve", mnogo C-programera i jo vise C-programa mogu potvrditi njegovu izjavu. Sa velikom dozom slobode koju prua C morate prihvatiti i velik dio odgovornosti, jer je vrlo lako napisati program koji se rui zbog bezvezne male greke koju e neki drugi kompiler oznaiti i pozvati fatal error. U C-u ste preputeni sami sebi. Programiranje u C-u je odlino na podrujima gdje bi ste eljeli koristiti asemblerski jezik sa jednostavnou pisanja i lakoom odravanja. Kae se da program napisan u C-u

403/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

"plaa" poveanje od 20 do 50% u brzini izvedbe, jer niti jedan jezik visoke razine nije tako cjelovit kao asemblerski jezik. Ipak vrijeme koje se utedi na kodiranje moe biti ogromno, to ini C najpoeljnijim jezikom za mnoge programere. S druge strane, poto veina programa troi 90 posto svoga vremena u samo 10 posto ili manje koda, mogue je napisati C program i potom prepraviti mali dio koda u asemblerskom jeziku i na taj nain dobiti na brzini programa, kao da je cijeli napisan u asemblerskom jeziku. Kad je postalo oigledno da programski jezik C postaje vrlo popularan jezik dostupan na razliitim platformama, grupa zabrinutih pojedinaca sastala se da predloi standardni set pravila za koritenje C-a. Grupa je predstavljala sve sektore software industrije i nakon mnogo sastanaka i puno predloaka, napisali su prihvatljiv standard za programski jezik C. Prihvaen je od strane ANSI-a (American National Standards Institute) i ISO-a (International Standard Organization). Nitko ga nikome nije nametnuo, no poto je tako iroko prihvaen bilo bi nerazborito, za bilo kojeg pisca compiler-a, odbiti prilagoditi se standardu. Danas vie nije bitno treba li kod programskog jezika C pronalaziti loe strane ili ga hvaliti, kao to nema smisla raspravljati o tome je li dobra sadanja signalizacija na prometnicama ili bi bilo bolje zamijeniti znaenje crvenog i zelenog svijetla. Bavimo li se djelatnou u kojoj se koristi jezik C, moramo ga to prije usvojiti i primjenjivati. Pri tome postoje razliite razine koritenja meu kojima je najvanija razumijevanje ve napisanog programa C uz mogunost njegove promjene (prilagodbe) pri rjeavanju konkretnog problema. Ta razina zahtijeva relativno malo napora za ovladavanje jezikom, a u praksi je prijeko potrebna.

C++
C++ je objektno orijentiran jezik koji je napravio Bjarne Stoustrup u Bell Labs-u 19831985 (danas AT&T Labs i Lucent Bell Labs). C++ je nastavak na C. Prije 1983 Stoustrup je na C dodao dodatne mogunosti i formirao jezik koji je sam zvao "C sa klasama". Kombinirao je koritenje klasa Simule i objektno orijentirane mogunosti sa snagom i iskoristivou C-a. Pojam C++ prvi je puta upotrebljen 1983. C++ je dizajniran za UNIX okruenje, no ubrzo je prihvaen na drugim operacijskim sustavima. Sa C++-om programeri su dobili mogunost da poboljaju kvalitetu koda i dijelove koda su mogli ponovno koristiti.

404/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

C++ implementira izdvajanje podataka (data abstaction) koristei koncept "klasa" (class), uz druge mogunosti, da bi omoguio objektno orijentirano programiranje. Novi koncept "preklapanja operatora" (operator overloading) uveden u C++-u nije vien u drugim objektno orijentiranim programima. Neke dodatne mogunosti C++-a dozvoljavaju niskorazinski pristup memoriji no i dalje sadre elemente jezika visoke razine.. C++ je standardiziran od strane ANSI-a i ISO-a. Zadnja verzija standarda napravljena je 2002. godine

Objective-C
Objective-C je jednostavni programski jezik dizajniran da omogui sofisticirano objektno orijentirano programiranje u C standardu. On je nastavak ANSI C standarda, i zato je mogue postojee C programe prilagoditi koritenju software frameworka bez gubitaka uloenog rada u originalni razvoj. Poto Objective-C ukljuuje C, kad radite sa njim dobivate sve mogunosti C-a. Moete birati kada elite neto napraviti na objektno orijentiran nain (na primjer definiranje klase), a kada zadrati proceduralne programske tehnike (definiranje strukture i nekih funkcija umjesto klasa). tovie, Objective-C je jednostavan jezik. Sintaksa mu je mala, nedvosmislen je i lako ga je nauiti. Objektno orijentirano programiranje, zbog terminologije i naglaska apstraktnom dizajnu, esto predstavlja potekoe poetnicima. Dobro organiziran jezik poput Objective-Ca moe olakati put prema znanju objektno orijentiranog programiranja. U usporedbi sa drugim jezicima baziranim na C-u, Objective-C je dinamian. Kompajler uva veliku koliinu informacija o objektima koje koristi prilikom izvoenja. Odluke koje bi u nekim sluajevima bile napravljene tijekom kompajliranja mogu se odgoditi sve do vremena izvoenja. To daje Objective-C programima neobinu fleksibilnost i mo. Na primjer, dinaminost Objective-Ca donosi prednosti koje se teko mogu dobiti u drugim objektno orijentiranim jezicima: Objective-C podrava otvoreni stil dinamikog spajanja, stil koji moe smjestiti jednostavnu arhitekturu za interaktivna korisnika suelja. Poruke nisu nuno vezane uz klase, primatelje ili selektor metoda, stoga software framework moe dopustiti korisnicima donoenje odluka pri izvoenju i dozvoliti razvijaima slobodu izraza u njihovu dizajnu. Dinaminost Objective-C-a omoguava izgradnju naprednih razvojnih alata. Suelje prema nainu izvravanja omoguuje pristup informacijama o pokrenutim aplikacijama, pa je

405/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

mogue razviti alate koji nadgledaju, otkrivaju i mijenjaju pozadinsku strukturu i aktivnosti Objective-C aplikacija.

Java
Java kao programski jezik razvio se iz jezika Oak. Oak je razvio Sun Microsystems u ranim devedesetim kao jezik neovisan o platformi orijentiranim prema potrebama zabavne industrije poput komunikacije igaraih konzola i video rekordera. Oak je isprva napravljen za koritenje u set-top kutijama dizajniranim za video-on-demand usluge (npr. teletext). Taman kad je posao s proizvoaima set-top kutija bio pri kraju pojavio se WWW (World Wide Web). Oak dizajneri poeli su shvaati trend te se njihov fokus prebacio na Internet i WebRunner (browser s omoguenim Oak-om) je roen. Oak je preimenovan u Java a WebRunner postaje HotJava browser. Oduevljenje Internetom privuklo je mnoge dobavljae softwarea tako da su Java razvojni alati mnogih proizvoaa ubrzo postali dostupni. Isto oduevljenje odrazilo se na proizvoae softwarea koji su netom pohitali da poblie upoznaju Javu i njene mnoge divne mogunosti. Java je isti objektno orijentiranim jezik.. To znai da je u Java programu sve objekt i sve proizlazi iz bazne klase (root object class). Java okruje ukljuuje stotine klasa i metoda u est glavnih podruja. Jedna od Javinih najprivlanijih mogunosti je njen standardni library (Rich Standard Library). Mnogi e kao prednost Jave istaknuti mogunost dinamike alokacije varijabli, a glavni razlog koji je omoguio brzo prihvaanje Jave je slinost Javine sintakse sa popularnim programskim jezikom C++.

406/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

GNU
GNU Projekt je razvio potpuno slobodan softwareski sistem nazvan "GNU" (GNU's Not Unix) koji je kompatibilan s UNIX-om. Ime GNU izabrano je jer ispunjava slijedee zahtjeve; prvo, to je rekurzivna kratica za "GNU's Not Unix", drugo, to je rije i tree zabavno ga je izgovoriti. Rije "slobodan" ne odnosi se na cijenu, ve na slobodu. Moete ili ne morate platiti odreenu cijenu da biste dobili GNU software. Bilo kako bili, jednom kad imate GNU software imate tri specifine slobode pri njegovoj upotrebi: Prvo: slobodu kopiranja programa i dijeljenja meu prijateljima i kolegama Drugo: slobodu izmjene programa na bilo koji nain, jer imate izvorni kod Tree: slobodu distribucije unaprijeene verzije, na taj nain pomoi izgradnju drutva (Ako redistribuirate GNU software, moete naplatiti fiziki in prijenosa kopije ili moete kopije davati) GNU projekt je zaet 1983 kao nain vraanja kooperativnog duha koji je nekad bio prisutan da se ponovno omogui suradnja sklanjajui prepreke koje nameu vlasnici softwarea. 1971, kad je Richard Stallman poeo karijeru u MIT-u, radio je u grupi koja je koristila termin "besplatan software". ak su i neka raunalna poduzea distribuirala besplatni software. Programerima je omoguen zajedniki rad. Do kraja 1980 gotovo sav softwaer je bio u neijem vlasnitvu (propritary), a njegovi su vlasnici prijeili suradnju korisnika. To je uinilo stvaranje neega poput GNU Projekta potrebnim. Svako raunalo zahtjeva operativni sistem; ako nema besplatnog operativnog sistema, ne moete pokrenuti raunalo bez da dohvatite vlasniki softvare. Tako je prva stvar pri stvaranju besplatnog softwarea bila napraviti besplatni operacijski sustav. Operacijski sustav nije samo jezgra (kernel); on ukljuuje i kompajlere, editore, programe za obradu teksta i mnoge druge stvari. Pisanje operacijskog sustava je vrlo velik posao, te je trajao nekoliko godina. Odluili su napraviti operacijski sustav kompatibilan s UNIX-om jer je bio isproban i portabilan, a kompatibilnost bi uinila prelazak s UNIX-a na GNU laganim. Inicijalni cilj da se napravi UNIX-oidni operacijski sistem bio je postignut. Do 1990. napravljeni su ili naeni svi glavni dijelovi osim jednog jezgre. Tada je Linus Torvalds razvio besplatnu jezgru Linux. Spajajui Linux sa gotovo zavrenim GNU sistemom dobiven je kompletan operativni

407/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

sustav: Linux baziran GNU sistem. Procjenjuje se da stotine tisua ljudi danas koristi Linuxbased GNU sisteme, ukljuujui Slackware, Debian, Red Hat i druge. Meutim GNU Projekt nije ogranien na operacijske sustave. Njihov cilj je omoguiti cijeli spektar software-a, to god neki korisnik moe poeljeti. To ukljuuje i aplikacijski software. elja im je omoguiti software za ljude koji nisu strunjaci na polju raunala. Zato se trenutni razvija drag'n'drop desktop s ikonama (slino Windowsima) da bi poetnici lake koristili GNU sisteme. GNU Projekt takoer eli omoguiti besplatne igre i ostale oblike zabave (neke igre su ve dostupne). Kako daleko moe ii besplatan software? Nema granica, osim kad zakona poput patentnih sistema potpuno zabrane besplatan software (eli se patentirati ideja????). Krajnji cilj je omoguiti besplatan software za sve to korisnici poele i na taj nain vlasniki softvare potjerati u zaborav.

408/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

GCC

Kratka povijest GCC-a


Izvorni autor GNU C Compilera (GCC) jer Richard Stallman, osniva GNU projekta. Svaki UNIX-oid (operativni sustav baziran na UNIX-u) treba C kompajler, a u to vrijeme nije bilo besplatnih stoga ga je GNU Projekt morao razviti od poetka. Rad na kompajleru sponzoriran je donacijama pojedinaca i kompanijama Free Software Foundation-u, neprofitnoj organizaciji koja je nastala da podri rad GNU Projekta. 1987. godine izlazi prvo izdanje GCC-a. To je bio veliki pomak poto je GCC bio prvi portabilni ANSI C optimizirajui kompajler izdan kao besplatni software. Od te godine GCC je postao temelj sveg besplatnog softwarea. GCC je izdan pod GPL-om (GNU Public License).GPL podrazumijeva od svakoga tko promjeni GNU software i redistribuira izmijenjeni proizvod, da ponudi svoje izmjene u izvornom kodu zajednici. Velika revizija kompajlera desila se 1992. godine serijom 2.0 kojom je dodana mogunost kompajliranja C++-a. 1997. kreirana je eksperimentalna grana kompajlera (EGCS Enhanced (Experimental) GNU Compiler System) koja je poboljala optimizaciju i podrku za C++. Te mogunosti su integrirane u glavni dio razvoja GCC-a i postale dostupne kao 3.0 verzija GCC-a 2001. Danas je GCC proiren na mnoge dodatne programske jezike, ukljuujui FORTRAN, Java, Objective-C. Dijelovi za druge jezike, poput Mercury-a i Pascal-a postoje, no jo nisu integrirani u GCC. Kratica GCC se sada koristi umjesto novog imena "GNU Compiler Colection". Njegov razvoj vodi GCC Upravljaki Odbor (GCC Steering Committee), skupina predstavnika GCC korisnike zajednice iz industrije, istraivanja i akademske zajednice. Odbor se ujedinio brine i da netko ne bi preuzeo kontrolu nad GCC-om (da se ne uniti baza besplatnog softwarea). GNU zajednici. Tako e izmjene uvelike koristiti cjelokupnoj software

409/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

Glavne Odlike GCC-a


GCC je, prije svega, portabilni kompajler mogue ga je pokrenuti na veini danas dostupnih platformi i moe napraviti kod za mnoge tipove ipova, od 8-bitnih mikrokontrolera do procesora koritenim u superraunalima. GCC nije samo kompajler, on moe i kros-kompajlirati (cross-compile) svaki program, tj proizvesti izvrne datoteke za razliite datotene sustave od onoga na kojem se kompajler izvrava. To je prilino korisno za raunala sa ugraenim sustavom (embedded systems) koja nisu sposobna pokrenuti kompajler. GCC je napisan u C-u i moe sam sebe kompajlirati, tako da moe biti prebaen na drugi sustav u budunosti. Programi u svakom jeziku mogu biti kompajlirani u GCC-u ili kros-kompajlirani za bilo koju arhitekturu. Na primjer ADA program mogue je kompajlirati za mikrokontroler ili C program za superraunalo. GCC ima modularni dizajn to doputa lako dodavanje podrke za nove jezike i arhitekture. Dodavanje novog front-enda za jezik u GCC omoguuje koritenje tog jezika na bilo kojoj platformi. Slino tome, dodavanjem podrke za novu platformu svim jezicima je ona dostupna. Najbitnije i najvanije GCC je besplatan software. Znai moete ga koristiti i modificirati kao i svaki drugu GNU software. Kad se govori o C++ kompajleru najee se koristi izraz "G++", no poto postoji samo jedan kompajler, moe ga se zvati "GCC" bez obzira na koji se jezik misli. Termin "G++" koristan je kad se eli naglasiti kompajliranje C++ programa. Front Endovi koje nudi GCC (kompajleri podrani od GCC-a): C, C++, Objective C Ada 95 (GNAT) Fortran77, Fortran95 Pascal Modula-2, Modula-3 Java (od verzije gcc 3.0) Cobol Chill (Cygnus)

410/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

Strojevi (raunala) podrani od strane GCC-a: Gotovo svi strojevi u irokoj upotrebi Acorn (Advanced) RISC Machine. Alpha (DEC) Intel x86 Families, i860, i960. Motorola 680x0, 68C11,DSP56000 Hitachi SH,H8300 Intel IA-64 (Itanium) MIPS, IBM PowerPC, HP PA-RISC, SUN SPARC

Sistem kompajliranja GCC-a


Sistem kompajliranja ukljuuje slijedee faze Predprocesor Kompajler Optimizator Asembler Linker Compiler Driver je zasluan za koordinaciju tih faza Nain izvravanja GCC-a

411/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

Make file
Make file je datoteka koja se koristi pri kompajliranju izvornog koda. U njemu su definirana odnosna pravila i akcije koje trebaju biti napravljene po tim pravilima. Poopena sintaksa pravila/akcije je: mojprogram: mojfile.c _________gcc mojfile.c -o mojprogram gdje "_________" predstavlja TAB (tabulator), "moj_program" je meta pravila, "mojfile.c" je zavisnik pravila, a "gcc ....." je naredba. UPOZORENJE: TAB je potreban i ne mogu ga zamijeniti prazna mjesta. Gornje pravilo kae: Da bi napravio "moj_program" provjeri je li "mojfile.c" modificiran nakon to je trenutna verzija "mojprogram", ako postoji, kreirana. Ako je "mojfile.c" izmijenjen ili ako "mojprogram" ne postoji, onda izvri naredbu "gcc mojfile.c -o mojprogram" (koja generira "mojprogram"). Pravila u make file-ovima izvravaju se pozivom UNIX-ovog make programa sa parametrom <ime_programa> u komandnoj liniji. (U gornjem sluaju: "make mojprogram"). Prednost koritenja make datoteke je: nije potrebno ponovno pisati dugake naredbe za kompajler make kompajlira samo one datoteke koje treba, odnosno one kojima su zavisnici pravila izmijenjeni Obino se napie i pravilo sa metom "clean" koja uklanja sve izvrne i sve objektne datoteke npr. clean: ________/bin/rm f mojprogram Primijetite da meta "clean" nema zavisnika, to jest, ako napiete "make clean" u UNIX promptu, naredba e se uvijek izvriti. Takoer, po defaultu , ako napiete samo "make" bez parametra (mete), izvriti e se prvo pravilo u make datoteci. Stoga je tipini poetak make datoteke navoenje default-nog pravila: default: mojprogram kojim se osiguramo da e naredba "make" imati eljene posljedice.

412/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

Predprocesor
Predprocesor je program koji u izvornom kodu programa trai predprocesorske

direktive koje prevodi i u skladu s rezultatom previenja mijenja izvorni program. C predprocesor je makro procesor koji C kompajler automatski koristi za promjenu koda prije kompilacije. Zove se makro procesor jer dozvoljava definiranje makroa koji slue kao pokrate za dulje konstrukcije. C predprocesor se koristi samo u C, C++ i Objective-C izvornim kodovima. U prolosti je bio koriten kao generalni program za obradu teksta. Danas bi se "zaguio" kad bi u kodu pronaao neto to se kri sa leksikim zakonima C-a. Na primjer, apostrofe e prevoditi kao poetak konstante i javljati e greku. Takoer je nemogue osloniti se na ouvanje karakteristika koje nisu znaajne za C obitelj programskih jezika. Ako bi predprocesirali Make datoteku, sve TAB-ove bi maknuo i Make ne bi radio. Ako je ovjek malo paljiv moe se provui i iskoristiti C predprocesor za stvari koje nisu C. Neki programski jezici mogu proi (Pascal, Ada, itd). Mnogi problemi mogu se izbjei pisanjem C ili C++ komentara (/**/,//) umjesto komentara tog jezika, i pisanjem jednostavnih makroa. Kad god je mogue trebali bi koristiti predprocesor vezan uz jezik u kojem se pie kod. Moderne verzije GNU asemblera imaju makro postrojenja. Veina programskih jezika visoke razine ima svoju kondicionalnu kompilaciju i ukljune mehanizme. Ako sve drugo padne u vodu, moe se pokuati sa pravim generalnim tekst procesorom, poput GNU M4. GNU C predprocesor ima malo izmijenjene opcije od ISO Standarda. Da bi dobili isti ISO Standard C potrebno je koristiti @option {-std=c98} ili c99 opcije, a da bi dobili svu dijagnostiku koristi se opcija @option {-pedantic}

Kompajler
GCC kros-kompajler Alat koji konvertira program iz C naredbi u strojni kod je kros-kompajler. Termin kroskompajler (cross-compiler) koristi se zato to je kompajler pokrenut na jednoj CPU arhitekturi (u primjeru Intel Pentium), a generira strojni kod za drugu arhitekturu (motorolin MC68360). Koraci konverzije prikazani su na slici.

413/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

Kros-kompajler (m68k-rtems-gcc) ita datoteke koje sadre C program (filex.c) i sve datoteke koje ukljuuju (#include predprocesorska direktiva) te ih pretvara u instrukcije MC68360 strojnog koda. Prebacivanje ukljuuje tri odvojena posla: - Predprocesor skuplja sve ukljuene datoteke i proiruje makro definicije (mijenja ih kroz cijeli kod) - Kompajler prebacuje tako dobivene naredbe u MC68360 asemblerski jezik - Asembler prevodi MC68360 asemblerski jezik u MC68360 strojni jezik Krajnji strojni kod je sadran u "objektnim datotekama" (object files). Za svaku C izvornu datoteku (filex.c) postoji jedna objektna datoteka (filex.o). Kros-linker (m68k-rtemsld) spaja izvrni RTEMS, objektne datoteke proizale iz C izvornih datoteka i library rutine koje poziva C kod u jedan izvrni image (datoteka koja je prividno izvrna). Taj image je samostalni program koji se moe prenijeti bilo gdje, a izvriti samo na MC68360 platformama.

414/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

Optimizator
Oprimizator poboljava (optimizira) GCC/G++ asemblerski kod za Pentium ili Pentium Pro instrukcije ili bez MMX instrukcija. Rezultat optimizacije je bre izvoenje programa. To se napravi tako da se prevede GCC/G++ asemblerska datoteka (koja je u GAS formatu) u novi GAS ili za NASM datoteku. Potrebno je tako napraviti jer GAS/NASM mogu raditi sa Pentium, Pentium Pro i MMX instrukcijama. GAS ih moe obraditi no GCC/G++ ih ne koristi jo dok se generira izlazna datoteka. Izlaskom verzije 2.8.x GCC/G++-a neke programi s instrukcijama za GAS su zastarjeli. No programe je jo uvijek mogue prevesti u NASM kod koji omoguuje lake prenoenje programa u asemblerskom obliku.

Asembler
GAS GAS je GNU Asembler na koji se oslanja GCC. Poti je GAS napravljen da podrava 32-bitno UNIX raunalo, koristi standardnu AT&T sintaksu koja jako slii sintaksi standarda za m68k asemblere i standard je za UNIX svijet. Sintaksa nije ni gora ni bolja od intelove sintakse. Jednostavno je drugaija. Kad se naviknete na nju izgleda vie pravilnija od Intelove sintakse, no mnogo je dosadnija. Glavne odlike GAS-ove sintakse: Imena registara su prefiksirana sa %, pa su registri %eax, %dl i tako dalje umjesto samo eax, dl itd. Zato je mogue C-ove vanjske simbole direktno ukljuiti u izvorni kod asemblera bez rizika zabune i bez potrebe za podvuenim (underscore) prefiksima. Redoslijed operanada je prvo izvor(i) a zatim odredite, to je obrnuto od Intelove konvencije. Pa e Intelova sintaksa mov eax,edx (prebaci sadraj registra edx i registar eax) u GAS-u izgledati mov %edx,%eax. Veliina operanada je specificirana kao sufix imenu instrukcije. "b" za byte (8-bit), "w"za word (16-bit) i l za long (32-bit). Ispravna sintaksa za gornju instrukciju bi

415/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

dakle bila movl %edx,%eax.. No GAS ne zahtjeva strogu AT&T sintaksu, pa je sufiks opcionalan kad se veliina moe pogoditi iz operanda registra a u ostalim sluajevima defaultna vrijednost je 32 bita (s upozorenjem) neposredni operandi su oznaeni sa $ prefiksom, kao u add $5,%eax (dodaj neposredno long vrijednost 5 u registar %eax) ako nedostaje prefiks operanda smatra se da je rije o sadraju memorije; tako movl $foo,%eax stavlje adresu varijable foo u registar %eax, a movl foo,%eax stavlja njenu vrijednost u %eax indeksiranje ili indirekcija se postie zatvaranjem indeksnih registara ili indirektne adrese memorijske elije u zagrade; kao u testb $0x80,17(%ebp) (testira vii bit byte vrijednosti na 17 mjestu od elije na koju pokazuje %ebp) Postoje neki programi koji mogu prebacivati izvorni kod izmeu AT&T i Intel asemblerske sintakse, neki su ak sposobni raditi konverziju u oba smjera. NASM projekt (Netwide Assembler) prua i386 assembler, napisan u C-u, koji bi trebao biti dovoljno modularan da na kraju podri sve poznate sintakse i formate objekata. Odnedavno GAS podrava i Intelovu sintaksu.

Linker
Linker povezuje sve potrebne datoteke u jednu cjelinu. Linker konstruira tablicu objektnih modula i njihovu veliinu (u byte-ovima). Na osnovi te tablice, svakom objektnom modulu pridrui poetnu adresu. Zatim, rjeava sve nedosljednosti alokacije. npr. nalazi sve instrukcije koje referenciraju memoriju i dodaje realokacijske konstante jednake poetnim adresama modula. Na kraju se rjeavaju vanjske reference nalazi se adresa vanjske memorije i procedura i auriraju se instrukcije. Objektni modul je linearna struktura podataka koja sadri identifikator ili tablicu sadraja. U tablici sadraja nalazi se: tablica simbola (imena simbola segmentu) tablica vanjskih referenci (koje se varijable koriste no u stvari su u drugim modulima) i offset u tekstualnom/podatkovnom

416/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GCC compiler

ime simbola, lista instrukcija koje koriste simbol, simbole proglaene vanjskima (tip external) u trenutku definicije, nerazrijeeni simboli u trenutku translacije se smatraju vanjskima, programski tekst npr asemblirane instrukcije (binarno), programski podaci npr konstante, rjenik relokacija, lista instrukcija koje treba obnoviti kad se program uita na adresi koja nije $0000 oznaka kraja modula. Nakon linkanja napravi se izvrna datoteka koja izgleda gotovo isto kao gore opisan objektni modul. Kad se program pokrene, u stvari se pokree program koji se zove "loader". On ita datoteku koja sadri program, uita ju u memoriju i sredi relokacije (ako je program uitan na mjestu razliitom od $0000).

417/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

Janko Rade

GDB THE GNU SOURCE LEVEL DEBUGGER

418/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

UVOD Debugger
Debugger nam slui da bismo vidjeli to se deava unutar programa dok se izvodi ili da bismo vidjeli to je program radio kada se sruio. Debugger je openiti koncept koji se koristi u razliitim programskim jezicima za pronalaenje greaka i uvid u izvravanje programa.

GDB (GNU debugger)


GDB moe raditi etiri osnovne zadae (plus jo puno drugih stvari koje proizlaze iz osnovnih) da bi pomogao nai greke: Pokrenuti program, navesti bilo to bi moglo djelovati na njegovo ponaanje. Zaustaviti program tono na navedenom poloaju. Pretraiti to se to dogodilo na tom poloaju (dijelu programa) kada je program stao. Promijeniti kod u tom programu tako da se moe ispravljati jednu greku i nastaviti s ispravljanjem druge greke. GDB je besplatan (slobodan) program, zatien sa strane General Public License (GPL)-a. GPL daje slobodu kopiranja i prilagoavanja koda programa osobnim zahtjevima i potrebama. Svaki ovjek koji dobije tu slobodu takoer dobiva pravo da distribuira taj svoj program, ali svima mora dati pravo uvida u svoj kod. Razne softwerske kue koriste zatitu autorskih prava da bi ograniili individualnu slobodu, a Free Software Foundation koristi GPL da bi odrali tu slobodu. U osnovi GPL je dozvola koja daje slobodu. Tu slobodu (dozvolu) nitko ne smije nikome uskratiti. Richard Stallman je originalni autor gdb-a i puno ostalih gnu programa. Razvitku gdb-a je doprinijelo mnogo ljudi.

419/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

Ulaenje i izlaenje iz gdb-a


Ovaj odlomak objanjava kako pokrenuti gdb i kako izai iz njega. Osnove: o o utipkaj gdb da ue u gdb. utipkaj quit ili Ctrl-d da izae i gdb-a.

Pozivanje gdb-a
Pozivanje gnu debuggera radi se tako da pokrene program gdb. Jednom kada se pokrenuo, gdb prihvaa i obrauje komande s tipkovnice sve dok mu se ne kae da izae iz programa (quit). Gdb se takoer moe pozvati s raznim varijantama opcija i argumenata da bi se dobila razumljivija okolina za ispravljanje greaka. Uobiajeni nain pokretanja gdb-a je pokretanje s jednim argumentom, tj. upiemo gdb pa ime programa kojega elimo ispravljati. gdb program Gdb se takoer moe pokrenuti i tako da poslije imena programa upiemo i ime core file-a (CORE file je datoteka koja sadri neke dijelove adresnog prostora od programa koji se ispravlja, a gdb pristupajui exe fileu sam trai ostale dijelove adresnog prostora). gdb program core Kao drugi argument takoer se moe napisati i PID (process ID) ako se eli ispravljati proces koji se izvrava trenutno na kompjuteru. gdb program 1234 - takvim upisom bi gdb ispravljao proces s ID-om 1234 (samo ako ne postoji file s imenom 1234(core)). Gdb se moe jo na puno naina pokrenuti tako da se koriste opcije s komandne linije. GDB te moe prisjetiti tih opcija ako se upie gdb help ili gdb -h

420/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

Snimanje izlaznih poruka


Ako se eli snimiti izlazne poruke gdb-ovih komandi u datoteku za to postoji nekoliko naina: set logging on Ukljuivanje ispisa izlaznih poruka. set logging off Iskljuivanje ispisa izlaznih poruka. set logging file Promjena imena datoteke gdje se spremaju izlazne poruke.U default-u:gdb.txt. set logging overwrite [on|off] Prepisivanje datoteke za spremanje izlaznih poruka. set logging redirect [on|off] Ako elite da se poruke ne ispisuju na ekranu nego samo u datoteku, trebate opciju redirect na vrijednost ON. show logging Prikazuje trenutne vrijednosti opcija za ispis izlaznih poruka.

Upravljake komande gdb-a


Komandna linija
Komandna linija gdb-a se sastoji od jedne linije za unos. Ne postoji ogranienje duine komandne linije. Poslije komande se upisuju argumenti znaajni za tu komandu. Neke komande ne dozvoljavaju argumente.

Nadopunjavanje komandne linije


Gdb moe sam zavriti komandu koju elimo napisati ako za njen nastavak postoji samo jedna mogunost, ali moe i ponuditi sve ostale komande koje zadovoljavaju poetak koji smo upisali. To je mogue ako se nakon poetka komande pritisne (hTABi). Npr.

421/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

Info bre (hTABi)

gdb e zavriti komandu sa

info breakpoints

To vrijedi za komande, podkomande i imena simbola u programu.

Pomone informacije
Pomo i informacije o komandama uvijek moemo dobit koristei komandu help Help ili h

(gdb) help List of classes of commands: aliases breakpoints data files internals obscure running stack status support tracepoints user-defined -- Aliases of other commands -- Making program stop at certain points -- Examining data -- Specifying and examining files -- Maintenance commands -- Obscure features -- Running the program -- Examining the stack -- Status inquiries -- Support facilities -- Tracing of program execution without stopping the program -- User-defined commands

Kompajliranje i pokretanje programa unutar GDB-a


Prije pokretanja programa trebamo generirati s kompajlerom ispravljake informacije (debugging information), osim ako ispravljamo ve pokrenuti proces. Te informacije su pohranjene u objekt koji opisuje tipove varijabli u programu i povezanost izvornih brojeva linija i adresa u kodu. run ili r Run komanda se koristi da bi pokrenuli program unutar gdb-a. Prvo se

specificira ime programa pa onda argumenti.

422/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

Argumenti: Ako se pokrene program samo sa run bez argumenata onda on nasljeuje argumente od posljednje run komande koja je izvrena ili po postavkama komande set args. Show args pokazuje koji su argumenti podeeni da se automatski pokreu kada sami ne navedemo argumente. Ulazi i izlazi programa: Program koristi ulaze i izlaze na isti terminal kao gdb. info terminal program. Moemo jednostavno preusmjeriti ulaze i izlaze programa komandom run npr.: run > outfile pokree program ali se izlaz zapisuje u outfile. Jo jedan nain da se preusmjeri ulaze/izlaze programa na druge terminale pomou komande tty npr.: tty /dev/ttyb - preusmjerava ulaze/izlaze na terminal ttyb. Pokazuje informacije o ulaznim i izlaznim opcijama koje koristi

Zaustavljanje i nastavljanje izvravanja programa


Glavna svrha ispravljanja programa je ta da moemo zaustaviti program prije nego se srui tako da moemo saznati gdje i zato je dolo do prekida. Unutar gdb-a program se moe zaustaviti iz vie razloga: signali, zaustavne toke, ili dolazak na novu liniju nakon naredbe step. Tada moemo provjeravati i mijenjati varijable, postavljati nove prekidne toke ili brisati stare, pa onda nastaviti sa izvravanjem. info program - prikazuje informacije o statusu, procesu i razlogu zato je stao; nezavisno da li je taj program pokrenut ili nije.

423/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

Breakpoints, watchpoints & catchpoints Toke prekida, toke pregleda i toka zahvata
Toka prekida se koristi da bi zaustavili program na odreenom mjestu. Za svaku toku prekida se mogu postaviti uvjeti za detaljniji prikaz. Postavljanje se moe izvriti preko komande break i njenih razliitih varijanti koje se po liniji, funkciji i tonoj memorijskoj adresi postavljaju na mjesta prekida. Toka pregleda je posebna toka prekida koja zaustavlja program kada se vrijednost varijable ili funkcije promijeni. Toke pregleda se drukije postavljaju od toaka prekida, ali ih se ukljuuje- iskljuuje s istim komandama. Toka zahvata je takoer posebna toka prekida koja zaustavlja program kada se mijenjaju dogaaji kao itanje iz library a. Kao i sa tokama pregleda tako i sa tokama zahvata koriste se drukije komande, ali ih se ukljuuje - iskljuuje s istim komandama kao za toke prekida. GDB dodjeljuje brojeve na svaku toku koju napravimo, ti brojevi poinju od 1 i poveavaju se za 1. Ti se brojevi koriste kada se te toke ele promijeniti ili izbrisati.

Postavljanje toaka prekida


Toke prekida se postavljaju komandom break (b). Postoji vie naina odluivanja gdje e toka prekida zaustavljati program. break break function break +offset break offset Postavljanje toke prekida na funkciju function Na broj(offset) linije ispred/iza (+/-) od trenutne linije

424/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

break linenum break filename:linenum break filename:function break *address break ... if cond tbreak args hbreak args thbreak args rbreak regex Na adresu address Sa uvjetom cond Samo za jedno zaustavljanje Hardware toke prekida Hardware toke prekida za jedno zaustavljanje Na svim funkcijama koje odgovaraju na izraz regex info watchpoints [n] info breakpoints [n] info break [n] Stupci tablice info Breakpoint Numbers Type Disposition Enabled or Disabled Address What y/n memorijska adresa mjesto u kodu # Breakpoint, watchpoint, ili catchpoint. Ispisuje tablicu svih toaka prekida, toaka pregleda i toaka zahvata koje nisu izbrisane

Postavljanje toaka pregleda


Toka pregleda je posebna toka prekida koja zaustavlja program kada se vrijednost varijable promijeni bez da znamo tono mjesto gdje se to desilo. Toke pregleda se implementiraju softverski ili hardverski ovisno o sistemu. Softverske toke su puno sporije od hardverskih.

Postavljanje toke pregleda


watch expr rwatch expr Za izraz . Koja e se zaustaviti kada se expr proita iz programa.

425/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

awatch expr

Koja e se zaustaviti kada se expr proita ili upie u program. ispisuje popis preglednih toaka , isto kao i info break

info watchpoints

GDB postavlja hardverske toke pregleda ako je to mogue zato to su jako brze, a ako ne moe onda postavlja softverske toke prekida koje su znatno sporije i pokazuju promjenu u slijedeem redu koda. Ako je bio u mogunosti postaviti hardversku toku pregleda kada postavimo komandu watch, gdb prijavljuje Hardware watchpoint num: expr Ponekada se ne moe postaviti hardverska toka pregleda zato to tip podataka koju nadgleda ima iri opseg od opsega koju moe sama pridruiti. Postavljanje toaka zahvata Pomou komande catch postavljamo toke zahvata. catch event event: throw catch exec fork vfork load load libname unload unload libname Dinamino zatvaranje shared library-a ili zatvaranje library-a:libname. Dinamino uitavanje shared library-a ili uitavanje library-a:libname. Bacanje C++ exception-a. Hvatanje C++ exception-a. Poziv komande exec. Poziv komande fork. Poziv komande vfork. Zaustavlja kada se desi dogaaj event

tcatch event

Postavljanje toke zahvata samo za jedan korak step.

426/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

Brisanje toaka prekida


Kada nam vie ne trebaju toke prekida potrebno ih je obrisati. Kada ju obriemo ona vie ne postoji. S komandom clear briemo toke prekida ovisno o tome gdje se nalazi, sa komandom delete briemo ih ovisno o njihovom broju. To vrijedi i za toke pregleda i za toke zahvata. Clear Clear function clear filename:function clear linenum clear filename:linenum linenum delete [breakpoints] [range...] brie svaku toku u opsegu range. Ako se ne navedu argumenti, obriu se sve toke brie svaku toku koja postoji u odreenom redu koda brie svaku toku koja postoji u slijedeoj instrukciji brie svaku toku koja postoji u slijedeoj funkciji

Iskljuivanje toaka prekida


Iskljuivanje toaka prekida se koristi ako toke prekida zatrebaju kasnije; da ih ne briemo pa ponovo radimo nove. Iskljuivanje i ukljuivanje se radi sa enable i disable komandama specificirajui broj toke na kojoj se eli komanda izvriti. disable [breakpoints] [range...] enable [breakpoints] [range...] enable [breakpoints] once range... enable [breakpoints] delete range... iskljuivanje toaka prekida ukljuivanje toaka prekida poslije zaustavljanja programa postaju iskljuene samo jednom zaustavlja program pa umire

Uvjeti zaustavljanja programa


Ako se ispuni zadani uvjet mogue je postaviti toke prekida koje zaustavljaju program. Uvjet je zadan Boolean izrazom. Ako je True toan, onda se zaustavi program. Uvjeti se takoer koriste i kod toaka pregleda.
427/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

condition bnum expression

uvjet broj_toke izraz

Nastavljanje i step-anje(koraanje)
Nastavljanje znai da program nastavlja s izvravanjem dok ne naie na kraj ili neku kontrolnu toku. Step (korak) znai izvravanje trenutne linije koda i prebacivanje u slijedeu liniju. continue [ignore-count] c [ignore-count] fg [ignore-count] step step count next [count] set step-mode set step-mode on set step-mode off until stepi arg nexti arg ni Izvravanje jedne strojne instrukcije preskae sve linije koje nemaju ispravljake informacije Dok se izlazi iz frame-a until komande u drugi frame nastavljanje do slijedeeg reda koda Nastavljanje, ali onoliko puta koliko je zadano count-om ignore-count odreuje koliko break-ova da ignorira.

Pretraivanje stoga
Kada se program zaustavi analizirajui kod, traimo kada i zbog ega je stao kako bismo popravili greku ili nadopisali potrebne instrukcije. Svaki put kada se pozove funkcija varijable i ostale informacije o funkciji se spremaju u stog (stack frame). Stog se nalazi u memoriji i moe se pregledavati pomou naredbi za pretraivanje.

428/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

Okviri stoga
Stog je podijeljen na okvire u kojima se nalaze informacije o varijablama adrese funkcije i argumenti. Kada se pokrene program dobiva prvi okvir za funkciju main. Unutar programa okviri se razlikuju po brojevima koji im se dodjeljuju poevi od 0 prema gore. Ti brojevi samo slue da bi se razlikovali i prepoznavali okviri. frame args vrijednosti. select-frame samo prebacivanje bez ispisivanja koristimo za prebacivanje iz jednog okvira u drugi i ispisivanje

Prethodni tragovi
Prethodni tragovi(backtrace) su informacije o tome kako je program doao na mjesto na kojem se nalazi. backtrace bt ispisuje prethodne tragove koje je preao program Zaustavljanje backtrace-a se vri pomou (CTRL+C) backtrace n bt n bt - n ispisuje samo podatke o unutarnjem okviru (frame-u) specificiranom s n ispisuje samo podatke o vanjskom okviru (frame-u) specificiranom s n. backtrace -n

Backtrace ispisuje i ime datoteke, argumente i broj linije u kodu. bt 3 at builtin.c:993 #1 0x6e38 in expand_macro (sym=0x2b600) at macro.c:242 #2 0x6840 in expand_token (obs=0x0, t=177664, td=0xf7fffb08) at macro.c:71 (More stack frames follow...) pokazuje unutarnja tri okvira(frame).

#0 m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)

429/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

Odabir okvira
Veina komandi za odabir okvira i podataka radi sa trenutno odabranim okvirom. Evo nekih komandi za odabir okvira koje automatski ispisuju kratke informacije o odabranom okviru. frame n fn frame addr f addr up n down n npr: (gdb) up #1 0x22f0 in main (argc=1, argv=0xf7fffbf4, env=0xf7fffbfc) at env.c:10 10 read_input_file (argv[i]); up-silently n down-silently n varijante komandi up i down ali ne ispisuju na ekranu promjenu okvira. odabir okvira na adresi address pomicanje okvira n po stogu prema gore pomicanje okvira n po stogu prema dolje odabir okvira n

Informacije o okvirima
frame f info frame info f Ispisuje detaljnije informacije o trenutno odabranom okviru u obliku: ispisuje informacije o okviru koji je trenutno odabran

430/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

adresa okvira adresa slijedeeg okvira (up) adresa slijedeeg okvira (down) jezik izvornog koda koji je pisan u okviru adresa argumenata u okviru adresa lokalnih varijabli okvira programsko brojilo imena registara iz okvira info frame addr info f addr info args info locals ispisuje informacije o okviru na adresi addr ispisuje argumente iz okvira ispisuje lokalne varijable okvira

Pretraivanje podataka
Uobiajeni nain pregleda podataka je komandom print (p). print expr print /f expr print print /f Ispisuje vrijednost zadnjeg izraza ako se ne napie koji izraz. Ispisuje vrijednost izraza expr

Izrazi
Print i sve druge gdb-ove komande prihvaaju izraze i izraunavaju njihovu vrijednost. Izrazi mogu biti konstante, varijable, operatori, uvjetni izrazi, pozivi funkcija i string-ovi. GDB ima podrku za slijedee operatore: @ :: :: {type} addr @ koristi se za upravljanje memorijom kao jednim nizom (array) odreivanje varijable po uvjetima u kojima je nastala. odnosi se na objekt tipa type pohranjenog na adresi addr

431/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

Ispis izlaznih vrijednosti


Gdb ispisuje vrijednosti ovisno o tipu podataka, a to nam ponekad neodgovara. Npr: trebamo hexadecimalnu vrijednost broja ili decimalni prikaz pointera ili dio memorijske lokacije kao string. To se radi tako da poslije print komande koristimo kosu crtu(slash) pa eljeni argument: x d u o t a c f broj u hexadecimalni oblik. broj u decimalni oblik(signed). broj u decimalni oblik(unsigned). broj u oktalni oblik. broj u binarni oblik. kao apsolutnu adresu kao slovo (character) kao broj s pominim zarezom

Pretraivanje memorije
Za pretraivanje memorije se koristi komande x (examine) u nekoliko varijanti x/nfu addr x addr x Pretraivanje memorije

n,f i u su parametri koji odreuju u kojem obliku se radi ispis memorije, a addr mjesto sa kojega se poinje ispisivati memorija. n f u b h w g broj ponavljanja nain prikaza veliina jedinice u byte - ima. ili polu rijeima(2 byte-a) ili rjeima(4 byte-a) ili velikim rijeima(8 byte-a).

432/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

Automatski prikaz
Ako elimo svaki put kada program stane ispisati vrijednost neke varijable, onda nam gdb to moe napraviti automatski. To se radi tako da na (automatic display list) dodamo varijablu. Svaki izraz dodan u takvu listu dobiva identifikacijski broj; taj broj se koristi kad ga briemo s liste izraze. Lista izgleda ovako 2: foo = 38 3: bar[5] = (struct hack *) 0x3804 Ispis prikazuje identifikacijske brojeve, izraz i njegovu trenutnu vrijednost. Takoer se moe odrediti u kojem obliku e se ispisivati koje varijable (vidi Ispis izlaznih vrijednosti). display expr display/fmt expr automatskog prikaza. undisplay dnums... delete display dnums... disable display dnums... enable display dnums... display info display brie izraz odreen identifikacijskim brojem dnum iskljuuje ispisivanje, ali ga je kasnije mogue opet ukljuiti ukljuuje ispisivanje automatskog prikaza ispisuje trenutne vrijednosti isto kao i kada stane program ispisuje popis varijabli koje se ispisuju dodaje izraz expr u listu automatskog prikaza. dodaje izraz expr u odreenom formatu fmt u listu

433/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima GDB

434/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Marko Ferk

GNU MAKE

435 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

UVOD
Kako biste se priremili za koritenje makea, morate napisati file nazvan makefile koji opisuje povezanost sa bilo kojim, executable jezikom za programiranje i koji omoguuje auriranje svakogfilea. Tipino,u programu file je auriran iz fileovih objekata, koji su redom napravljeni compiling izvorom fileova. Kad ste jednom napravili odgovarajui makefile, svaki put kada promijenite izvor fileova, ova jednostavna shell zapovijedi: Make. suffices koji e provoditi sve potrebne rekompilacije. Make program koristi makefile bazu podataka i posljednji modificiran broj filea kako bi odluio koji podatak treba biti auriran. Za svaki od tih fileova on izdaje naredbe pohranjene u bazi podataka. Moete stvoriti argumente na komandnoj liniji makea kako bi se kontroliralo koje fileove treba rekompilirati i kako.

436/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

PREDSTAVLJANJE MAKEFILEOVA
Makefile vam je potreban da biste dali naredbu makeu. Najee nam makefileovi pokazuju kako kompajlirati i povezati program. U ovom emo poglavlju govoriti o jednostavnom makefileu koji povezuje kako kompilirati i sloiti tekst koji se sastoji od osam C izvora i 3 glavna filea. Makefile takoer upuuje kako pokrenuti naredbe koje su izriito traene (primjerice, ukloniti odreeni file kao radnja ienja). Kad make rekompajlira editor, svaki izmijenjeni izvor C filea mora se rekompajlirati. Ako je glavni file promijenjen, svaki e izvor C filea koji ukljuuje glavni file, on se mora rekompajlirati kako bi se sauvao. Svaka kompajlacija provodi objekt na kojega se file podudara izvoru filea. Na posljetku, ako je bilo koji izvor filea rekompajliran, svi se objekt fileovi, bilo novi ili sauvani iz prethodnih kompajlacija, moraju povezati kako bi se stvorio novi izvrni editor.

KAKO PRAVILO IZGLEDA


Jednostavni makefile sastoji se od pravila slijedeeg tipa: target : prerequisites command

Meta (target) je obino naziv filea koji je generiran programom; primjeri targeta su izvrni fileovi. Meta takoer moe biti ime radnje ili izvedbe, kao te je `clean`. Preduvjet je file koji se koristi kao input da bi se kreirala meta. Ona esto ovisi o vie fileova. Naredba (command) je radnja koji make izvodi. Pravilo moe imati vie od jedne naredbe, svake u svom nizu. Imajte na umu: trebate umetnuti tab oznaku na poetku svakog naredbenog reda. Ovo se odnosi na vas neoprezne.

437/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Obino je naredba u pravilu s preduvjetom i slui kako bi se kreirao target file ako se bilo koji od preduvjet izmijeni. Kako god, pravilo koje specificira naredbe za metu ne treba. Primjerice, pravilo koje sadri naredbu delete spojenu s metom `clean` nema preduvjete. Pravilo (rule) nadalje objanjava kako prepraviti odreene fileove koji su mete odreenog pravila. Make iznosi naredbe preduvjeta da stvore ili auriraju metu (target). Pravilo takoer moe objasniti kako i kada izvesti neku radnju. Makefile mora sadravati i drugi tekst osim pravila, ali jednostavni makefile treba sadravati samo pravila. Pravila se mogu doimati do neke mjere kompliciranijima nego to je ovdje prikazano, no svi vie ili manje odgovaraju vezi.

JEDNOSTAVNI MAKEFILE
Ovdje je nanizan makefile koji opisuje nain o kojem izvrni file nazvan edit ovisi o osam objekata filea koji, zauzvrat, ovisi o osmini C izvora i tri osnovna filea. U ovom primjeru svi C fileovi ukljuujui `defs.h`, a samo oni koji definiraju naredbe za montiranje ukljuuju `command.h`. Samo fileovi na niskim nivoima koji se mijenjaju pri montiranju ukljuuju `buffer.h`.

Edit: main.o kbd.o command.o display.o \ Insert.o search.o files.o utils.o Cc o edit main.o files.o utils.o Insert.o search.o files.o utils.o

main.o : main.c defs.h cc c main.c kbd.o : kbd.c defs.h command.h cc c kbd.c command.o : command.c defs.h command.h cc c command.c display.o : display.c defs.c buffer.c cc c display.c insert.o : insert.c defs.h buffer.h

438/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

cc-c insert.c search.o : search.c defs.h buffer.h cc c search.c files.o : files.c defs.h buffer.h command.h cc c files.cc clean : rm editor main.o kbd.o command.o display.o \ insert .o search.o files.o utils.o

Podijelimo svaku drugu liniju u dva niza koristei blackslash-newline. Ovo je kao koritenje jedne druge linije, ali se lake ita. Kako biste koristili ovaj makefile da biste stvorili odgovarajui file, utipkajte: make Kako biste koristili make da biste izbrisali odgovarajui file i sve objekte iz direktorija, utipkajte:

make clean

U ovom primjeru mete ukljuuju odgovarajui file `edit`, te objekte main.o i kbd.o. Prerekviziti su fileovi poput main.c i defs.h. Zapravo svaki `.o` file je istodobno meta i preduvjet. Naredbe ukljuuju `cc c main.c` i `cc c kbd.c`. Kad je file meta treba se rekompajlirati ili prespojiti ukoliko se bilo koji preduvjet izmijeni. U dodatku. Bilo koji preduvjet koji je sam po sebi automatski generiran, prvo treba aurirati. U ovom primjeru `edit` ovisi o svakoj osmini objekt filea; objekt `main.o` ovisi o izvoru filea `main.c` i o glavnom fileu `defs.h`. Naredba shell prati svaki niz koji sadri metu i preduvjet. Ove shell naredbe govore kako aurirati file metu. Tab oznaka mora doi na poetak svakog naredbenog niza kako bi se razlikovale naredbene linije od ostalih linija u makefileu. (Imajte na umu da make ne zna nita o tome kako naredbe funkcioniraju. Ovisi na vama da traite naredbe koje e aurirati file metu na pravi nain. Sve to make ini jest da izvrava naredbe po pravilima koje ste vi zatraili kat file meta treba biti aurirana.)

439/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Meta `clean` nije file, ve samo naziv radnje. Budui da ne elite iznijeti radnje u ovom pravilu, `clean` nije preduvjet nijednog drugog pravila. S tim u vezi, make nikad ne poduzima nita s tim ukoliko to izriito zatraite. Imajte na umu da ovo pravilo ne samo da nije preduvjet, ve ih niti ne sadri, tako da je jedina svrha pravila vriti traene naredbe. Mete koje se ne odnose na fileove, nego su samo radnje zovu se lane mete (phony targets).

KAKO MAKE PROCESIRA MAKEFILE


Make zapoinje prvom metom (ne mete iji nazivi poinju sa `.`). Ovo se naziva default goal. Ciljevi (goals) su mete koje make (strives) ultimativno na auriranje. U jednostavnom primjeru iz prethodnog poglavlja, pogrean je cilj aurirati odgovarajui program `edit`; stoga to pravilo primjenjujemo prvo. Zato, kad izdate naredbu make make oita makefile u trenutnom direktoriju i pone procesirati prvo pravilo. U ovom primjeru, ovo je pravilo za povezivanje `edit` i stoga make lako procesira ovo pravilo. Mora procesirati pravila za fileove o kojima `edit` ovisi, a koji su u ovom sluaju objekt fileovi. Svaki je od ovih fileova procesiran u skladu sa svojim pravilom. Ova pravila upuuju na auriranje svakog `.o` filea kompilirajui njegov izvorni file. Bilo koji glavni file nazvan preduvjetom ei je od objekt filea ili ako objekt file ne postoji. Druga su pravila procesirana jer se njihove mete pojavljuju kao preduvjeti cilja. Ako neko drugo pravilo ne ovisi o cilju to se pravilo ne procesira, ukoliko ne kaete makeu da to uini (naredbom kao to je `make clean`). Prije rekompajlirana objekt filea, make razmatra auriranje preduvjeta, izvornog filea i glavnih fileova. Ovaj makefile ne specificira da se bilo to uini za njih -- `.c` i `.h` fileovi nisu mete nikakvih pravila, tako da make za ove fileove ne ini nita. No make e automatski aurirati generirane C programe, poput onih koje su napravili Biton i Yacc po vlastitim pravilima. Nakon rekompajliranja bilo kojeg objekt filea koji je potreban, make odluuje da li e prespojiti `edit`. Ovo se mora napraviti ukoliko file `edit` ne postoji ili ako je bilo koji

440/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

objekt file noviji od njega. Ukoliko je objekt file tek rekompajliran, sad je noviji nego `edit`, pa je `edit` prespojen. Ako provjerimo file `insert.c` i pokrenemo make, make e kompajlirati taj file da aurira `insert.o` i zatim povezati `edit`. Ako promijenimo file `command.h` i pokrenemo make, make e rekompajlirati objekt fileove `kbd.o`, `command.o` i `files.o`, te zatim povezati file `edit`. U naem primjeru, trebali smo izlistati sve objekt fileove dvaput u naem pravilu za `edit` (ponovljeno ovdje):

edit: main.o kbd.o command.. display.o/ insert.o search.o files.o utils.o cc o edit main.o kbd.o command.o display.o / insert.o search.o files.o utils.o

Takva duplikacija jest error-prone; ukoliko je novi objekt dodan sistemu, moemo ga dodati jednoj listi i drugu zaboraviti. Moemo ukloniti rizik i pojednostaviti makefile koristei varijablu. Varijable doputaju tekstualnom nizu da se definiraju odjednom i zamijene na viestruka mjesta kasnije. Standardna je praksa da je svaki makefile imenovan varijabilno; objekti, OBJEKTI, objs, OBJS, obj, ili OBJ, to predstavlja niz svih naziva objekt fileova. Ovako emo to definirati:

objects = main.o kbd.o commadn.o display.o \ insert.o search.o files.o utils.o

Nadalje, na svakom mjestu gdje elimo umetnuti listu naziva objekt fileova, moemo zamoijeniti vrijednost varijable tako da upiemo `$(objects).` Evo kako izgleda kompletan jednostavni makefile kada koristite varijablu za objekt fileove:

objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o

441/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

edit : $(objects) cc o edit $(objects) main.o : main : main.c defs.h cc c main.c kbd.o : kbd.c defs.h command.h cc c kbd.c command.o : command.c defs.h command.h cc c command.c display.o : command.c defs.h buffer.h cc-c display.c insert.o : insert.c defs.c buffer.h cc -c insert.c search.o : search.c defs.h buffer.h cc -c search.c files.o : files.c defs.h buffer.h command.h cc c files.c utils.o : utils.c defs.h cc c utils.c clean : rm edit $(objects)

JO JEDAN STIL MAKEFILEOVA


Kad su objekti stvarani samo po implicitnim pravilima, alternativni stil makefilea je mogu. U ovom stilu makefileova, vae se grupe unose po njihovim preduvjetima umjesto po njihovim metama.

PRAVILA ZA IENJE DIREKTORIJA


Kompiliranje programa nije jedina stvar za koju ete pisati pravila. Makefileovi zajediki govore kako uiniti jo neke stvari pokraj kompiliranja programa; na primjer, kako ponititi sve objekt fileove i tako da direktorij bude `clean`. Evo kako bismo mogli napisati make pravilo za ienje naeg editora iz primjera: clean : rm edit $(objects)

442/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

PISANJE MAKEFILEOVA

TO MAKEFILE SADRI
Makefileovi sadre pet vrsta stvari: eksplicitna pravila, implicitna pravila, varijabilne definicije, direktive i komentare. Pravila, varijable i direktive opisane su dalje u ovim poglavljima. Eksplicitno pravilo kae kad i kako prepraviti jedan ili vie fileova, nazvanih metom pravila. Izlistava druge fileove o kojima meta ovisi, nazvanim preduvjetima mete. Takoer moe dati naredbe za koritenje pri kreiranju ili auriranju meta. Implicitno pravilo govori kad i kako prepraviti razred fileova zasnovano na njihovim nazivima. Opisuje kako meta moe ovisiti o fileu sa nazivom slinim meti i daje naredbe za kreiranje ili auriranje takve mete. Varijabilna definicija je linija koja odreuje vrijednost tekstualnog niza za varijablu koja moe kasnije biti zamjena u tekstu. Ovaj jednostavni primjer makefilea prikazuje varijabilnu definiciju objekta kao liste svih objekt fileova. Direktiva je naredba da make uini neto specijalno dok oitava makefile. To ukljuuje: itanje drugog makefilea odluivanje definiranje varijable iz (verbatim) niza koji sadri viestruke redove.

`#` u nizu makefilea oznauje komentar. S ostatkom se niza ignorira, samo to (trailing backslash) koji nije nestao iz drugog backslasha nastavlja komentar kroz viestruki niz. Niz koji sadri samo komentar (moda i sa razmakom ispred) prazan je i ignorira se. Ako elite koristiti doslovce znak # uinite to backslashom (npr. \#). Komentari se mogu pojaviti u bilo kojem nizu makefilea iako se oni posebno tretiraju u odreenim situacijama. Sa komandnom skriptom (ako niz poinje s likom TAB) itav se niz prenosi u shell, kao sa bilo kojim drugim nizom koji poinje sa TAB. Shell odluuje kako e se interpretirati tekst: je li ovo komentar ili nije odluuje shell.

443/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Sa direktivom define komentari se ne ignoriraju tijekom definiranja varijabli. Kad je varijabla proirena, tretirati e se ili makeovim komentarom ili kao tekst u komandnoj skripti, ovisno o sadraju.

KOJE IME DATI VAEM MAKEFILEU


Kad make trai makefile, pokuava kroz slijedee nazive, redom: GNUmakefile`, `makefile` i `Makefile`. U normalnim okolnostima trebati sve makefileove nazvati `makefile` ili `Makefile`. Prvi je naziv provjeren, `GNUmakefile` nije preporuljiv za veinu makefileova. Trebali biste koristiti ovaj naziv ukoliko imate makefile koji je specifian GNU makeu i kojega nee razumjete ostale verzije makea. Ostali make programi trae `makefile`, `Makefile`, ali ne i `GMUmakefile`. Ukoliko make ne pronae ni jedan od ovih naziva, ne koristi niti jedan makefile. Zatim morate specificirati cilj sa naredbenim argumentom i make e pokuati dokuiti kako da ga prepravi koristei samo ugraena implicitna pravila. Ukoliko elite koristiti nestandardni naziv za va makefile moete specificirati naziv sa `-f` ili `--file` opcijom. Argumenti `-f name` ili `--file=name` govore makeu da oita naziv name kao makefile. Ukoliko koristite vie od vie od jedne `-f` ili `--file` opcije moete specificirati vie makefileova.

444/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

PRIDRUIVANJE DRUGIH MAKEFILEOVA


Include direktiva govori makeu da prekine oitavanje trenutnog makefilea i oita jedan ili vie makefileova prije nego to nastavi. Taj niz direktive u makefileu izgleda ovako:

Include filenames

Filenames (nazivi fileova) ne mogu sadravati shell file naziv veze. Dodatni prostori doputeni su i ignorirani na poetku niza, ali tab nije doputen. Prostor je poeljan izmeu include i naziva filea, te izmeu naziva vie fileova. Dodatni prostor ignorira se tu i na kraju direktive. Komentar koji zapoinje sa `#` je doputen na kraju niza. Ukoliko naziv filea sadri bilo koju varijabilnu ili funkcijsku referencu, on se proiruje. Na primjer, ako imate tri `.mk` filea, `a.mk`, `b.mk` i `c.mk`, te $(bar) ekspanzije do bla bla onda je slijedee proirenje include foo*.mk $(bar) jednako include foo a.mk b.mk c.mk bla bla

VARIJABILNI MAKEFILEOVI
Ako je definirano okruenje varijabilnog MAKEFILEA, make promatra njegovu vrijednost kao listu naziva dodatnih MAKEFILEOVA koje e oitati prije drugih. Ovo djeluje dosta slino include direktivi: razliiti direktoriji pretraeni su za te MAKEFILEOVE. Osnovna uporaba MAKEFILEOVA jest u komunikaciji izmeu rekurzivnih zazivanja makea. Obino nije poeljno namjetati varijablu okruenja prije nego to make zazove gornji nivo jer je najee bolje ne razmjetati makefileove izvana. Kako god, ukoliko koristite make bez odreenog makefilea, makefile u MAKEFILEOVIMA moe uraditi korisne stvari kako bi vam pomogao da implicitna pravila djeluju bolje, poput npr. definiranja puta kojim se trai.

445/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

VARIJABILNA MAKEFILE_LISTA
Kako make oitava razliite makefileove, ukljuujui bilo kakvo postizanje iz varijabli MAKEFILEA, naredbenog niza,, default fileova, ili iz include direktiva, njihovi e se nazivi automatski dodati varijabli MAKEFILE_LISTE. To znai da je prva stvar to make uini jest pregled posljednje rijei u ovoj varijabli i to e biti naziv trenutnog makefilea. Kad je jednom trenutni makefile uporabio include, posljednja rije e biti tek-pridrueni makefile. Ako makefile nazvan Makefile ima ovakav sadraj:

name1 := $(word $ (word $(,MAKEFILE_LIST)),$(MAKEFILE_LIST)) include inc.mk name2 := $(word $(words $(MSKEFILE_LIST)),$(MAKEFILE_LIST)) all: @echo name1 = $(name1) @echo name2 = $(name2)

oekivat ete da ima ovakav output:

name1 = Makefile name2 = inc.mk

OSTALE POSEBNE VARIJABLE


GNU make takoer podrava posebne varijable. Zapazite kako e svaka vrijednost koju pridodate varijabli biti ignorirana, uvijek e vraati njezinu posebnu vrijednost. Prva posebna varijabla je .VARIABLES. Kad se proiri, vrijednost sadri listu naziva svih globalnih varijabli definiranih u svim makefile oitavanjima do te toke. Ovo ukljuuje i varijable koje imaju prazne vrijednosti kao i dograene varijable, ali ne ukljuuje bilo koje varijable koje su definirane samo meta-specificiranim sadrajem.

446/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

KAKO SE MAKEFILEOVI STVARAJU


Ponekad se makefileovi mogu preraditi iz drugih fileova, poput RCS ili SCSS fileova. Ako se makefile izradi iz drugih fileova, elite da make ima auriranu verziju makefilea koju e uitati. Nakon oitavanja svih makefileova make e razmotriti svaki kao ciljnu metu i pokuati je aurirati. Ako makefile ima pravilo koje govori kako to uiniti ili ako se implicitno pravilo na to odnosi, bit e aurirano ukoliko je potrebno. Nakon to su svi makefileovi provjereni, ukoliko su se neki izmijenili, make zapoinje fazu ienja i ponovnog oitavanja makefileova. Ako znate da se jedan ili vie vaih makefileova ne mogu preraditi i elite sprijeiti make da izvri pretragu implicitnim pravilom, moete koristiti bilo koju uobiajenu metodu sprjeavanja implicitnog pretraivanja. Na primjer, moete napisati eksplicitno pravilo sa makefileom kao metom, te praznu zapovjednu nit.

447/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

OITAVANJE DIJELA IZ DRUGOG MAKEFILEA


Ponekad je korisno imati makefile koji je po svemu ba poput ostalih makefileova. esto moete koristi `include` direktivu kako biste ukljuili jedno u drugo, te kako biste dodali vie meta ili varijabilnih definicija. Bilo kako bilo, ako dva makefilea daju razliite naredbe za istu metu, make vam nee dopustiti da to uinite. No postoji drugi nain. U ovom makefileu u kojega elite prikljuiti drugi moete koristiti match-anything pravilo kako biste naredili da se prepravi bilo koja meta, to se ne moe napraviti iz informacije u sadranom fileu. Make e pregledati drugi makefile. Na primjer, ako imate makefile nazvan `Makefile` koji govori kako napraviti metu `foo` (i druge mete). Moete napisati makefile nazvan `GNUmakefile` koji sadri:

foo: frobnicate > foo %: force @$(MAKE f Makefile $@ force: ;

KAKO MAKE OITAVA MAKEFILE


GNU make radi svoj posao u dvije faze. Tijekom prve faze oitava sve makefileove i analizira sve varijable i njihove vrijednosti, implicitna i eksplicitna pravila i konstruira graf ovisnosti svih meta i njihovih preduvjeta. Tijekom druge faze make koristi interne strukture kako bi se odluilo koje mete treba ponovno izgraditi, te potie pravila koja su za to potrebna. Vano je razumjeti ovaj dvofazni pristup jer ima izravan znaaj na to kako se ponaaju varijable i funkcijsko proirenje; ovo je esto izvor zabuna pri pisanju makefilea. Ovdje emo prikazati zbroj faza u kojima se proirenja odvijaju za razliite konstrukcije unutar makefilea. Kaemo da je proirenje trenutno ukoliko se dogaa za vrijeme prve faze: u ovom e sluaju make proiriti bilo koju varijablu ili funkciju u tom razredu. Ako se proirenje ne izvede odmah, kaemo da je ona deferirana. Ona se ne odvija dok god se bilo koja konstrukcija kasnije ne pojavi u trenutnom kontekstu ili pak u drugoj fazi. Moda niste upoznati s nekima od ovih konstrukcija.
448/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

PRIJENOS VARIJABLI

immediate = deferred immediate ?= deferred immediate := immediate immediate += deferred or immediate

define immediate deferred endef

Za pridodavanje operatora, `+=`, desna se strana razmatra trenutno ukoliko su varijable prethodno ureene kao jednostavne varijable (`:=`) i drugaije. KONDICIONALNI IZVADAK Sve instance kondicionalne sintakse su u potpunosti izbaeni, to ukljuuje ifdef, ifeg, ifdef i ifneg oblike. DEFINICIJA PRAVILA Pravilo se uvijek proiruje na isti nain, bez obzira na formu: immediate : immediate ; deferred deferred To jest, dijelovi mete i preduvjeta proireni su odmah, a zapovijedi koritene pri konstruiranju mete su uvijek deferirane. Ovo openito pravilo je istinito za eksplicitna pravila, pravila o vezama, o sufiksima i statistikim vezama, te za definicije jednostavnih preduvjeta.

449/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

PISANJE PRAVILA
Pravilo se pojavljuje u makefileu i govori kad i kako prepraviti odreeni file, a naziva se metom pravila. Izlistava druge fileove koji su preduvjeta mete i naredbe koje e koristiti pri kreiranju ili auriranju mete. Red pravila nije bitan, osim odluivanja default cilja; mete o kojoj e make razmatrati, ukoliko ne specificirate jednu. Default cilj jest meta prvog pravila u prvom makefileu. Ako prvo pravilo ima viestruke mete, samo je prva meta uzeta kao default. Postoje dvije iznimke: meta koja poinje sa tokom nije default osim ako ne sadri jednu ili vie kosih crta `/` i meta koja definira da pravilo veze nema uinka na default cilj.

PRIMJER PRAVILA
Ovdje je jedan primjer pravila: foo.o : foo.c defs.h cc c g foo.c #module for t widdling the forbs

Njegova je meta `foo.o`, a preduvjeta `foo.c` i `defs.h`. Ima jednu naredbu, koja je `cc c g foo.c`. Naredbeni niz poinje tabom kako bi se identificirala kao naredba. Ovo pravilo ukazuje na dvije stvari: kako odluiti da li je `foo.o` zastario ; zastario je ako ne postoji kako aururati file `foo.o` koristei cc. Naredba ne spominje izriito `defs.h`, no pretpostavljamo da je `foo.c` ukljuuje i stoga je `defs.h` dodan preduvjet.

SINTAKSA PRAVILA
Openito, pravilo izgleda ovako:

targets : prerequisites command

450/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

ili ovako:

targets : prerequisites ; command command

Mete (targets) su nazivi fileova, odvojeni razmakom. Mogu se koristiti wildcard oznake i naziv oblika `a(m)`, gdje m predstavlja lana u fileu arhivi a. Obino postoji samo jedna meta po pravilu, no povremeno ima razloga da ih bude vie. Naredbeni nizovi zapoinju tab oznakom. Prva se naredba moe pojaviti u nizu nakon preduvjeta sa tab oznakom ili se moe pojaviti u istom nizu sa polunizom. U oba sluaja efekt je isti. Budui da se simbol dolara koristi za zapoinjanje varijabilnih referenci, ako zaista elite simbol dolara morate ih upisati dva, `$$`. Moete uzdu podijeliti niz umeui blackslash iza kojeg slijedi novi red, no ovo nije obavezno, budui da make ne postavlja granice u redovima makefilea. Pravilo govori dvije stvari: kad je meta zastarjela i kako je aurirati kad je potrebno. Kriterij za zastarjelost je odreeno uvjetom preduvjeta, koji sadri imena fileova koji su odvojeni razmakom. Zamisao je da se sadraj mete filea temelji na informaciji u preduvjeta, tako da ako se neki preduvjeta izmijeni, sadraj postojee mete vie nuno ne postoji.

VRSTE PREDUVJETA
Postoje dvije vrste preduvjetA koje razumije GNU make: normalni preduvjeti poput onih opisanih u prethodnim poglavljima i order-only prerkviziti. Normalni preduvjeti zapravo imaju dvije tvrdnje; prvo, unosi red svrgavanja izgraenih naredbi: bilo koje naredbe koje su potrebne da bi se izgradio preduvjet bilo koje mete bit e potpuno svrgnut prije nego to bilo koja naredba pone izgraivati metu. Drugo, unosi ovisnu vezu: ako je bilo koji preduvjet noviji od mete, ona se smatra zastarjelom i mora e ponovno izgraditi.

451/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Naravno, to je upravo ono to vi elite: ako je preduvjet mete auriran, isto se treba uiniti sa metom.

UPORABA FILEOVA

WILDCARD

OZNAKA

NAZIVIMA

Samo jedan naziv moe oznaavati mnoge fileove koji koriste wildcard oznake. U makeu su one `*,?` i (). Na primjer, `*.c` oznaava popis svih fileova iji nazivi zavravaju sa `.c`. Oznaka ` na poetku file moe takoer znaiti da file od posebnog znaaja. Ako je samo ili iza njega slijedi crta, predstavlja va home direktorij. Na primjer `~/bin` proireno je `home/you/bin`. Ako nakon `~` slijedi rije, nit predstavlja home direktorij korisnika koji je nazvan po toj rijei. Na primjer, `~john/bin` proiruje se na

`/home/john/bin`. U sistemima koji nemaju home direktorij za svakog korisnika (poput MS DOS ili MS Windows) ova se funkcija simulira postavljanjem varijabilnog okruenja HOME.

TRAENJE DIREKTORIJA ZA PREDUVJETE


Za velike direktorije esto je poeljno umetanje izvora u odvojene direktorije iz binarnog sustava. Odlike traenja direktorija u makeu zadovoljavaju ovo automatskim traenjem vie direktorija kako bi se pronaao preduvjet. Kad raspodijelite fileove meu direktorije, ne trebate mijenjati pojedinana pravila, samo traite putove.

LANE METE
Lana je meta ona koja nije pravi naziv filea. To je tek naziv za neke naredbe koje se izbacuju kad to izriito zatraite. Postoje dva razloga za koritenje lanih meta: za izbjegavanje sukoba sa istoimenim fileom ili kako bi se poboljala izvedba. Ako napiete pravilo ije naredbe nee kreirati ciljanu metu, naredba e biti izbaena svaki put kad se meta bude prepravljala. Evo primjera: clean: rm*.o temp

452/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Budui da rm naredba ne stvara file nazvan `clean`, takav file vjerojatno nikad nee postojati. Zato e rm naredba biti izbrisana svaki put kad kaete `make clean`. Lana e meta prestati raditi ako bilo to ikad kreira file nazvan `clean` u ovom direktoriju. Budui da preduvjeta nema, file `clean` razmotrit e se za auriranje, a njegova se naredba nee izbaciti. Kako bi se izbjegao ovaj problem, moete izriito zatraiti lane mete koristei posebnu metu .PHONY.

.PHONY : clean

Kad ste ovo napravili, `make clean` e provoditi naredbe bez obzira postoji li file nazvan `clean`. Poto zna da lane mete ne imenuju prave fileove koji se mogu prepraviti iz drugih fileova, make preskae implicitno pravilo o potrazi za lanim metama. Zato je deklariranje mete lanom dobra izvedba, ak i ako vas ne zabrinjava da takav file postoji. Zato prvo morate napraviti niz koji tvrdi da je clean lana meta, zatim napiete pravilo ovako:

.PHONY: clean clean: rm*.o temp

Jo jedan primjer korisnosti lanih meta je u kombinaciji sa rekurzivnim invokacijama makea. U ovom sluaju nakefile e esto sadravati varijablu koja izlistava broj poddirektorija koje treba izgraditi. Jedan nain na koji se to rijeava je s jednim pravilom ija je naredba shell petlja preko poddirektorija, ovako:

SUBDIRS = foo bar baz

subdirs: for dir in $(SUBDIRS); do \ $(MAKE) C $$dir; \ done

453/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Dodue, postoji nekoliko problema sa ovom metodom. Prvo, otkrivena greka u pod-makeu nije obuhvaena ovim pravilom tako da e nastaviti graditi ostatak direktorija ak i kada se jedan srui. To se moe preduhitriti tako da se doda shell naredba koja e primijetiti greku i izai, no tada e to raditi ak i ako make pobudi k opcija, koja je nesretna. Drugo, i moda jo vanije, ne moete oduzeti prednost paralelno izgraenim mogunostima makea koji koriste ovu metodu, budui da postoji samo jedno pravilo. Deklariranjem poddirektorija kao lane mete uklonit ete ove probleme:

SUBDIRS

= foo bar baz

.PHONY: subdirs $(SUBDIRS) subdirs: $(SUBDIRS) $(SUBDIRS): $(MAKE) C $@ foo: baz

Ovdje smo takoer deklarirali da `foo` poddirektorij ne moe biti izgraen dok god `baz` direktorij nije potpun; ovakva povezanost deklaracije je osobito vana kad se pokuava paralelno izgraivanje. Lane mete ne bi trebale biti preduvjet prave mete filea; ako je, njene naredbe se pokreu svaki put kada make aurira taj file. Dok god lana meta nije preduvjet prave mete, naredbe lane mete e se izbacivati samo kad je lazna meta odreena za cilj. Lane mete mogu imati preduvjete. Kad jedan direktorij sadri viestruke programe, najvie bi odgovaralo opisivanje svih programa u jednom makefileu `./Makefile`. Budui da e meta prepravljana pogrekom biti prva u makefileu, ustaljeno je nazvati ovu lanu metu `all` i dati joj, kao preduvjeta, sve individualne programe. Na primjer:

all : prog1 prog2 prog3 .PHONY : all prog1 : prog1.o utils.o

454/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

cc o prog1 prog1.o utils.o prog2 : prog2.o cc o prog2 prog2.o prog3 : prog3.o sort.o utils.o cc o prog3 prog3.o sort.o utils.o

PRAVILA BEZ NAREDBI I PREDUVJETA


Ako pravilo nema preduvjetA niti naredbi i meta pravila je nepostojei file, make zamilja da je ova meta aurirana svaki put kad se pravilo pokree. Ovo znai da sve mete koje ovise o ovoj, njihove e se naredbe uvijek pokretati.

PRANJENJE META FILEOVA KAKO BI SE SNIMILI DOGAAJI


Isprazni metu je mogunost lanih meta, obino dri naredbe za radnje koje s vremena na vrijeme eksplicitno zatraite. Za razliku od lanih meta, meta filea zaista moe postojati, ali sadraj filea nije bitan i obino je prazan. Svrha praznih meta fileova jest za snimanje, sa vremenom zadnje modifikacije, tj. kad su pravila naredbe zadnji put izbaene. Ovakav file bi trebao imati neke preduvjete. Kad zatraite prepravljanje praznu metu, naredbe se izbacuju ukoliko je bilo koji preduvjet ei od mete; drugim rijeima, ako se preduvjet promijenio od kad ste zadnji put prepravljali metu. Evo primjera:

print: foo.c bar.c lpr p $? touch print

POSEBNO UGRAENI NAZIVI META


Odreeni nazivi imaju posebna znaenja ako se pojavljuju kao meta. To su: .PHONY, .SECONDARY, SUFFIXES, .DEFAULT, .PRECIOUS, .INTERMEDIATE,

.DELETE_ON_ERROR,

.IGNORE,

.LOW_RESOLUTION_TIME,

.SILENT, .EXPORT_ALL_VARIABLES, .NONPARALLEL.

455/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

VIETRUKA PRAVILA ZA JEDNU METU


Jedan file moe biti meta za vie pravila. Svi preduvjeti spomenuti u svim pravilima nalaze se na jednoj listi preduvjeta za metu. Ukoliko je meta starija od bilo kojeg preduvjeta bilo kojeg pravila, naredbe se odbacuju. Moe postojati samo niz naredbi koje se izbacuju za file. Ukoliko vie od jednog pravila izdaje naredbu za isti file, make koristi posljednji dani niz i ispisuje poruku s grekom. Povremeno je korisno da iste mete pobuuju razliite naredbe koje su definirane u razliitim dijelovima vaeg makefilea; moete koristiti double-colon pravila. Posebno pravilo samo sa preduvjeta moe se koristiti za davanje dodatnih preduvjeta mnogim fileovima odjednom. Na primjer, makefileovi esto imaju varijablu poput objekata kojoi sadre popis svih kompiliranih output fileova u sustavu koji se gradi. Lak naina da se kae kako se svi oni moraju rekompajlirati ako se `config.h` promijeni, uinit ete ako napiete: objects = foo.o bar.o foo.o : defs.h bar.o : defs.h test.h $(objects) : config.h

STATINI UZORCI PRAVILA


Ovo su pravila koja odreuju viestruke mete i konstruiraju nazive preduvjeta za svaku metu zasnovanu na njenom imenu. Openitiji su od obinih pravila sa viestrukim metama jer mete ne moraju imati identine preduvjete. Oni moraju biti analogni, ali ne nuno identini.

PRAVILA DVOSTRUKIH KOLONA


To su pravila napisana sa `::` umjesto `:` iza naziva meta. Kad se iste mete pojavljuju u vie od jednog pravila s njima se postupa razliito od obinih pravila. Kad se meta pojavi u viestrukim redovima, sva pravila moraju biti istoga tipa: sva uobiajena ili sva u dvostrukoj koloni. Ako su u dvostrukoj koloni svaki je od njih neovisan o drugima. Svaka naredba dvostruke kolone izvreno je ako je meta starija od bilo kojih preduvjeta toga pravila. Ako nema preduvjeta za to pravilo, njegove se naredbe uvijek izvravaju (ak i ako

456/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

meta ve postoji). Ovo moe rezultirati tako da se izvri nijedno, neka ili sva pravila dvostrukih kolona. Pravila dvostrukih kolona za metu izvravaju se redom kako se pojavljuju u makefileu. Kako god, sluajevi gdje dvostruke kolone imaju smisla su ona gdje redoslijed izvravanja naredbi nije bitan.

457/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

KAKO KORISTITI VARIJABLE


Varijabla je naziv definiran u makefileu koji predstavlja tekstualni niz, nazvan varijabilnom vrijednou. Ove su vrijednosti zamjene za eksplicitne naredbe u mete, preduvjete, naredbe i druge dijelove makefilea. Varijable i funkcije u svim dijelovima makefilea proiruju se kad se oitaju, osim za shell naredbe u pravilima, desnim stranama varijabilnih definicija koristei `=` i tijela varijabilnih definicija koja koriste define direktivu. Varijable mogu predstavljati liste naziva fileova, mogunosti zaobilaenja kompiliranja, programa za pokretanje, direktorija za pretraivanje izvora fileova, direktorija za ispisivanje outputa ili bilo to to moete zamisliti. Naziv varijable moe biti nastavak oznaka koje ne sadre `:,#,`=` ili koje vode do praznog prostora. Kako god, nazive koji sadre oznake koje nisu slova, brojevi i slino treba izbjegavati, jer mogu imati posebna znaenja u budunosti. Nazivi varijabli su osjetljivi. Nazivi `foo`, `FOO` i `Foo` odnose se na tri razliite varijable. U nazivima varijabli koritenje ovih slova je tradicionalno, no preporuamo koritenje slova donjeg tipa za parametre kako bi se kontrolirala implicitna pravila ili parametri, koje e korisnik preskoiti sa naredbenim opcijama.

OSNOVE VARIJABILNIH REFERENCI


Da biste zamijenili vrijednost varijable, upiite znak dolara uz ime varijable u zagradi ovako: $(foo) ili ${foo}. To je ispravna referenca varijable foo. Poseban znaaj `$` je u tome da morate upisati `$$` kako biste dobili uinak za oznaku jednog dolara. Varijabilne reference mogu se koristiti u bilo kojem kontekstu: metama, preduvjetima, naredbama, veini direktiva i novim varijabilnim vrijednostima. Evo primjera za zajedniki sluaj gdje varijable sadre sadre nazive svih objekt fileova u programu:

objects = program.o doo.o utils.o

458/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

program : $(objects) cc o program $(objects) $(objects) : defs.h

Varijabilne reference rade po strogoj tekstualnoj zamjeni. Tako da se pravilo

foo = c prog.o : prog.$(foo) $(foo)$(foo) -$(foo) prog.$(foo)

moe primijeniti u kompiliranju C programa `prog.c`. Budui da su razmaci ispred varijabilne vrijednosti ignorirani u varijabilnim oznakama, vrijednost fooa je precizno `c`. (Nemojte doslovno ovako pisati svoje makefileove!)

DVA TIPA VARIJABLI


Postoje dva naina po kojima GMU make varijabla moe imati vrijednost. Razlikuju se po tome kako su definirani i u emu djeluju kad ih se proiri. Prvi je tip varijable rekurzivno proirena varijabla. Varijable ovog tipa definirane su po redovima koristei znak `=` ili po define direktivi. Vrijednost koju odredite je instalirani verbatim. Ako sadri reference drugim varijablama, te se reference proiruju kad god se ova varijabla zamjenjuje.

459/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

KONDICIONALNI DIJELOVI MAKEFILEA


Kondicional uzrokuje da se dio makefilea ignorira ovisno o vrijednosti varijable. Kondicionali mogu usporediti vrijednost jedne varijable s drugom, ili vrijednost varijable s konstantnom niti. Kondicionali kontroliraju to make zapravo vidi u makefileu, tako da se ne mogu koristiti pri kontroli shell naredbe u vrijeme izbacivanja. Primjer: Libs_for_gcc = -lgnu Normal_libs = Foo: $(objects) Ifeq ($(CC),gcc) $(CC) o foo $(objects) $(libs_for_gcc) else $(CC) o foo $(objects) $(normal_libs) endif

Kondicional sluajevi koriste tri direktive: jednu ifeg, jednu else i jednu endif. Direktiva ifeg poinje sa kondicionalom i oznaava stanje. Sadri dva argumenta odvojena sa zarezom i okruena zagradama. Varijabilna zamjena je obavljena za oba argumenta i oni su usporeeni. Linije u makefileu koje slijede ifeg su proitane ako se dva argumenta podudaraju, inae su ignorirane. Direktiva else uzrokuje sljedbeni niz koji se oitava ako je prethodni kondicional propao. U primjeru iznad to znai da je druga alternativa povezivanja naredbi koritena kad god se prva alternativa ne koristi. Imati else u kondicionalu je po izboru. Endif direktivom kondicional zavrava. Svaki kondicional mora zavriti sa endif. Slijedi tekst koji ne sadri kondicional.

460/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

SINTAKSE KONDICIONALA
Sintaksa je jednostavan kondicional bez else kako slijedi: conditional-directice text-if-true endif

Text-if-true moe biti bez tekstualne linije da bi se smatrao dijelom makefilea ako je stanje istinito. Ako je stanje lano, nikakav se tekst ne koristi. Sintaksa conditional-directive je ista bilo da je kondicional jednostavan ili sloen. Postoje etiri razliite direktive koje testiraju razliita stanja. Evo njihove tabele:

ifeg (arg1, arg2) ifeg `arg1` `arg2` ifeg arg1 arg2 ifeg arg1 arg2 ifeg `arg1` `arg2`

Proiri sve varijabilnle reference u arg1 i arg2 i usporedi ih. Ako su identine text-if-true je efektivan, u protivnom je text-if-false, ako ga ima, efektivan.

461/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

FUNKCIJE PREOBRAZBE TEKSTA


Funkcije vam doputaju da procesirate tekst u makefileu, da kompilirate fileove, da njima operirate ili da koristite naredbe. Funkciju koristite u function call, gdje date naziv funkcije i neto teksta (argumente) da biste operirali funkcijom. Rezultat procesiranja funkcije je zamijenjen za makefile na temelju poziva, ba kao to se zamjenjuje varijabla.

SINTAKSA FUNKCIJSKOG POZIVA


Funkcijski poziv lii na varijabilnu referencu. Izgleda ovako:

$(function arguments) ili ovako: ${function arguments}

Ovdje je function ime funkcije; jedan od naziva s kratke liste koji su dio makea. Takoer moete sastavno kreirati vlastite funkcije koristei ugraenu call funkciju. Arguments su argumenti funkcije. Od funkcije su odvojeni imenom s jednim ili vie razmaka i ako postoji vie od jednog argumenta, onda su odvojeni zarezom. Takav prostor i zarezi nisu dio vrijednosti argumenta. Delimitri koje koristite kako biste okruili funkcijski poziv, mogu se pojaviti u argumentu samo u prikladnim parovima; druga se vrsta delimitara moe pojaviti pojedinano. Ako argument sam po sebi sadri funkcijski poziv ili varijabilnu referencu, najpametnije je koristiti istu vrstu delimitara za sve reference; napiite `$(subst a,b,$())`, a ne `$(subst a,b,${})`. Zato to je jasnije i zato to samo jedan tip delimitara odgovara da bi se pronaao kraj reference. Tekst napisan za svaki argument procesira se zamjenom varijabli i funkcijskim pozivom da bi se proizvela argumentirana vrijednost, koja je tekst na koji se funkcija odnosi. Zamjena je izvrena redosljedom kojim se argumenti pojavljuju. Zarezi i neprikladne zagrade ne mogu se pojaviti unutar argumentiranog teksta kako je zapisano, prazan prostor u uvodu se ne moe pojaviti u tekstu prvog argumenta kako je

462/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

napisano. Te oznake mogu samo biti umetnute u vrijednost argumenta po principu varijabilne zamjene. Prvo odredite varijable comma i space ije su vrijednosti izolirane oznakama zareza i razmaka, zatim zamijenite ove varijable gdje su takve oznake potrebne, kao ovdje:

comma:=, empty:= space:= $(empty) $(empty) foo:= a b c bar:= $(subst $(space),$(comma),$(foo)) # bar is now `a,b,c'.

Ovdje subs funkcija zamjenjuje zamjenjuje rezultat.

svaki razmak sa zarezom, kroz vrijednost fooa i

FUNKCIJE ZA ZAMJENU NIZA I ANALIZA


Ovdje su neke funkcije koje operiraju nizom:

$(subst from,to,text)

Izvodi se tekstualna izmjena u tekstu text: svako pojavljivanje form zamijenjeno je sa by. Rezultat je zamjena funkcijskog poziva. Na primjer,

$(subst ee,EE,feet on the street)

zamjenjuje niz `fEEt on the strEEt`.

$(patsubst pattern,replacement,text) Pronalazi razmak odvojen rijeima u textu koji odgovara uzorku i zamjenjuje ih zamjenom. Ovdje uzorak moe sadravati `%` koji ima ulogu wildcard oznake, a odgovara bilo kojem broju bilo koje oznake unutar rijei. Ako zamjena takoer sadri `%`, onda se taj znak zamjenjuje tekstom koji mu odgovara u uzorku. Samo prvi `%` u uzorku i zamjeni tretira se ovako: bilo koji zamijenjeni `%` je nepromijenjen.

463/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

FUNKCIJE ZA NAZIVE FILEOVA


Nekoliko ugraenih proirenih funkcija odnosi se na razdvajanje naziva fileova ili liste naziva fileova. Svaka od slijedeih funkcija izvodi odreenu transformaciju naziva filea. Argument finkcije odnosi se na seriju naziva fileova, odvojenih razmakom. Svaki naziv filea u seriji mijenja se na isti nain i rezultati su prikazani sa pojedinanim razmacima izmeu njih. Razlikujemo value funkciju, eval funkciju, te origin i shell funkciju.

FUNKCIJE KOJE KONTROLIRAJU MAKE


Ove funkcije kontroliraju pokretanje makea. Openito proizvode informacije za korisnika makefilea ili kako bi naveli make da stane ako doe do nekakve pogreke u okruenju.

$(error text)

Generira kobnu pogreku gdje je poruka text. Primijetite kako se pogreka generira svaki put kad je ova funkcija procijenjena. Tako, ako umetnete naredbu ili doznaku na desnoj strani rekurzivne varijable, nee se procjenjivati neko vrijeme. Text e se proiriti prije nego to se pogreka generira. Na primjer,

Ifdef ERROR1 $(error error is $(ERROR1)) endif

e generirati fatalnu pogreku za vrijeme itanja makefilea ako je make varijabla ERROR1 definirana.

KAKO POKRENUTI MAKE


Makefile nam govori kako se rekompilirani program moe koristiti za vie sluajeva. Najjednostavnija je uporaba rekompiliranje svakog filea koji je zastario. Obino su makefileovi napisani tako da kad pokrenete make bez ikakvih argumenata, on radi samo to.

464/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Meutim moda elite aurirati samo neke od svojih fileova, pa elite koristiti razliite mogunosti kompiliranja; moda elite samo pronai koji su fileovi zastarjeli i ne elite ih mijenjati. Dajui argumente dok make radi, moete uiniti bilo koju od ovih stvari i jo mnoge druge. Izlazni status makea uvijek je jedan od triju vrijednosti:
0

Izlazni status je nula ako je make uspjean.


2

Izlazni je status dva ako makenaie na kakve pogreke. Ispisat e poruke opisujui odreene pogreke.
1

Izlazni je status jedan ako koristite `-q' zastavicu I make zakljuuje da su neke mete zastarjele.

ARGUMENTI KOJI ODREUJU MAKEFILE


Makefile ete odrediti sa `-f' or `--file' opcijom (`--makefile' takoer djeluje). NA primjer, `-f altmake' upuuje na upotrebu `altmake' kao makefilea. Ukoliko koristite `-f' zastavicu vie puta I slijedite svaki `-f' sa argumentom, svi se specificirani fileovi koriste zdrueno kao makefileovi. Ako ne koristite `-f' ili `--file' zastvicu, pogreno je pokuati `GNUmakefile', `makefile', i `Makefile', tim slijedom, kao I uporaba prve rijei od ovo troje.

ARGUMENTI KOJI ODREUJU CILJEVE


Ciljevi su mete koje bi make trebao potpuno aurirati. Drugemete su aurirane kako se pojavljuju kao prerekviziti ciljeva, ili prerekviziti prerekvizita ciljeva itd. Pogrekom, cilj je prva meta u makefileu (ne brojei mete koje zapoinju sa tokom).Stoga, makefileovi se obino piu tako da prva meta kompilira itav program ili programe koje opisuje. Ako prvo pravilo u makefileu ima nekoliko meta, samo prva meta u pravilu postaje pogrean cilj, a ne itava lista. Makeu moete odrediti razliite ciljeve (ili cilj). Upotrebite naziv cilja kao argument. Ako oznaite nekoliko ciljeva make procesira svaki od njih i to redom kojim vi elite. Bilo se koja meta u makefileu moe odrediti kao cilj (osim ako poinje sa `-' ili sadri `='). Mogu se oznaiti ak I mete koje nisu u makefileu, ukoliko make moe pronai implicitna pravila koja govore kako ih napraviti.
Make postavlja posebnu variablu MAKECMDGOALS u listi ciljeva koju ste oznaili na

naredbenom nizu. Ako na naredbenom nizu nije zadan ni jedan cilj, varijabla je prazna. Imajte na umu da se ta varijabla koristi samo u posebnim uvjetima. Primjer pravilne uporabe da bi se izbjegao `.d' file tijekom clean pravila, tako da ih make ne kreira samo zato da bi ih odmah zatim uklonio: sources = foo.c bar.c

465/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

ifneq ($(MAKECMDGOALS),clean) include $(sources:.c=.d) endif Uporaba odreivanja cilja je opravdana ako elite kompilirati samo dio programa, ili samo jedan od nekoliko programa. Odredite kao cilj svaki file za koji elite da se prepravi. Na primjer, razmislite o direktoriju koji e sadravati nekoliko programa, sa makefileom koji zapoinje ovako: .PHONY: all all: size nm ld ar as Ukoliko radite na veliini programa (size), vjerojatno ete htjeti narediti `make size` tako da se rekompiliraju samo fileovi iz tog programa. Jo jedna uporaba odreivanja cilja je da se uredi da fileovi nisu mormalno napravljeni. Primjerice, to moe biti file outputa ili verzija programa koja je kompilirana posebno za testiranje, koje sadri pravilo u makefileu, no nije prerekvizit neispravnog cilja. Jo jedna uporaba odreivanja cilja je da se pokrenu naredbe povezane sa lanim metama ili praznim metama. Mnogi makefileovi sadre lanu metu nazvanu `clean` koja unitava sve osim izvornog filea. Jasno, to e uiniti samo ako zatraite `make clean`. Slijedi popis tipinih lanih naziva praznih meta. `all' `clean' `mostlyclean' `distclean' `realclean' `clobber' . `install' `print' `tar' `shar' `dist' `TAGS' `check' `test'

IZBJEGAVANJE REKOMPAJLIRANJA NEKIH FILEOVA


Ponekad moda izmijenite izvorni file ali ne elite rekompilirati sve fileove koji o njemu ovise. Na primjer, pretpostavimo da dodate makro ili deklaraciju glavnom fileu o kojemu mnogi drugi fileovi ovise. Make konzervativno pretpostavlja da o glavnom fileu ovisi i rekompilacija mnogih drugih fileova, no vi znate da se oni ne trebaju rekompilirati I ne elite troiti vrijeme na ekanje da se svi oni kompiliraju. Ukoliko iekujete problem prije nego to izmijenite glavni file, moete koristiti `-t` zastavicu- Ona govori makeu da ne pokree naredbe unutar pravila, nego da oznai aurirane mete mijenjajui im posljednji datum modifikacije. Slijedit ete ovaj postupak:

466/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

1. Koristite naredbu `make' kako biste rekompilirali izvorne fileove koji zaista trebaju rekompilaciju, uvjerivi se da su objekt fileovi aurirani prije nego to ponete. 2. Napravite promjene u glavnim fileovima. 3. Upotrijebite naredbu `make -t' kako biste oznaili sve objekte do zadnje izmjene. Slijedei put kad budete pokretali make, promjene u glavnom fileu nee uzrokovati nikakve rekompilacije. Ukoliko ste ve promijenili glavni file do trenutka kad neki fileovi zatrebaju rekompilaciju, prekasno je da ovo napravite. Umjesto toga moete upotreijebiti `-o file` zastavicu, koja specifini file oznaava starim. To znai da se file sam po sebi nee preraditi niti e se preraditi ita drugo na njegov raun. Slijedite ovu proceduru:

1. Rekompilirajte izvorne fileove koji kompilaciju trebaju zbog razloga neovisnih o odreenom oglavnom fileu sa naredbom `make -o headerfile'. Ako je ukljueno nekoliko fileova, upotrijebite posebnu `-o` opciju za svaki glavni file. 2. Dodirnite sve objekt fileove sa `make -t'.

TESTIRANJE KOMPAJLACIJE PROGRAMA


Naravno, kad se dogodi pogreka u izvravanju shell naredbe, make odmah odustaje I vraa nonzero status. Dalje se ni jedna naredba ne izvrava niti za jednu metu. Pogreka upuuje na to da se cilj ne moe ispravno prepraviti I make obo ozvjesti im sazna. Kad kompilirate program koji ste upravo izmijenili, to nije ono to elite. Umjesto toga radije biste da make kompilira svaki file koji moe, kako bi vam pokazao to je vie mogue kompilacijskih pogreaka. U ovakvim prilikama trebali biste koristiti `-k' ili `--keep-going' zastavicu. Ovo govori makeu da nastavi s razmatranjem ostalih prerekvizita, prepravlja ih ako je potrebno prije nego to odustane I vrati se na nonzero status.Na primjer, nakon pogreke u kompilaciji jednog objekt filea `make -k' e nastaviti s kompiliranjem drugih objekt fileova iako ve zna da je njihovo povezivanje nemogue. Nakon to je shell naredba propala `make -k' e nastaviti s radom to je vie mogue nakon spoznaje da ne zna kako napraviti metu ni prerekvizit filea. Ovo e svaki put uzrokovati pogrenu poruku, ali bez `-k` ta je pogreka fatalna. Uobiajeno ponaanje makea pretpostavlja da je vaa svrha namjetanje ciljeva; jednom kada make naui da je to nemogue, moe bez problema priopiti propast. `-k` zastavica kae da je prava svrha testiranje to je vie mogue promjena koje nastanu u programu, moda kako bi se otkrilo nekoliko neovisnih problema pa da ih moete ispraviti prije idueg pokuaja kompiliranja. Zato Emacova M-x compile naredba upuuje na `-k` zastavicu kao na pogreku.

467/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

ZAKLJUAK
Kroz ovaj seminarski rad pokuao sam objasniti uporabu makea. Ovdje je neizbjean file nazvan makefile, koji alje naredbe makeu. Najee nam makefileovi pokazuju kako kompajlirati i povezati program. Makefile takoer upuuje kako pokrenuti naredbe koje su izriito traene, kao na primjer uklanjanje odreenog filea kao radnja ienja. Makeova formula je jednostavna; nakon to korisnik izmijeni izvorne fileove i eli izgraditi svoj program, make provjerava kronologiju kako bi vidio to se izmijenilo, te gradi samo ono to je korisniku potrebno bez suvinog gubljenja vremena. Osmiljen jo u ranim 1970-ima, make je do dananjih dana okosnica u veini programskih projekata. Sadri bogati spektar izbora koji vam doputa manipulaciju viestrukim direktorijima, zatim izgradnju razliitih verzija programa, te se prilagoava vaim potrebama. Piui ovaj seminar ustanovio sam zato ovaj program zauzima visoko mjesto u procesu izgradnje softvera unato mnogobrojnoj mlaoj konkurenciji.

468/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Damir Jajeti, Tomislav Domanovac

CVS SUSTAV ZA VERZIONIRANJE

469/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

UVOD
Ovaj dokument sadri seminarski rad na temu CVS sustav za verzioniranje. Pokuaemo kroz njega pruiti uvid u osnovne funkcionalnosti koje nam ovaj i ovakav sustav prua. U ovom uvodu biti e definirani neki pojmovi koji su bitni za daljnji sadraj dokumenta. CVS je alat za upravljanje i kontrolu programskog koda. To je vrlo pojednostavljena, no tona definicija. Ukoliko elimo definirati preciznije, potrebno je dodati da osim same kontrole i verzioniranja programskog koda, takvi sustavi zapravo omoguuju ozbiljan razvoj grupama programera, i oni slue kao repozitorij svih datoteka koje su ukljuene u projekt na kojemu se radi. Najprimitivniji nain upravljanja datotekama je redovno pohranjivanje u projekt ukljuenih datoteka. Na taj nain postoji posljednja verzija tih datoteka no to iz pogleda osobe ukljuene u razvoj ostavlja otvorenim slijedea pitanja i probleme: Neto sam promijenio, odluio vratiti nazad promjene, no nemogu pronai datoteku. U programu je neki udnovati kod, zato je tamo? Prijavljen je gubitak funkcionalnosti programa od prolog tjedna. to se od onda u programu mijenjalo? Developer je prije par dana otklonio bug. Kakve su to izmjene bile? Developer A i developer B mijenjaju iste skripte u isto vrijeme! Developer je otklonio bug u zadnjem releasu, i sada tih njegovih promjena vie nema. Potrebno je napraviti velike izmjene u dijelu koda i paralelno ispravljati bugove u predanim skriptama. Dobio sam neiji tui kod na kojem pri svakom novom releasu moram raditi neke izmjene. Imam dugotrajni veliki projekt, sa velikim koliinama koda i datoteka i izrada dnevnih backupa svega toga se otima kontroli. Niko ne vodi rauna o aurnosti backupiranih podataka.

470 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Nemogu pratiti povijest promjena nekih datoteka.

Svaki dobar alat za upravljanje i verzioniranje programskog koda mora imati zadovoljavajue rjeenje za svaki od ovih problema. Developeri moraju rado koristiti taj alat, dakle nesmije im biti naporan za koritenje, i mora se moi integrirati sa razvojnim alatima koje na projektu koristimo. Treba voditi rauna i o mrenim mogunostima alata, dakle pokrivene moraju biti i opcije mrenog pristupa takvom servisu, ponekad e razvojni timovi biti dislocirani, i treba im omoguiti pristup bez ugroavanja sigurnosti, a i u sluaju da nisu stalno spojeni na mreu, mora im se omoguiti produktivnost. CVS je dobar odabir takvog alata. Kroz ovaj seminarski rad pokuati emo pruiti uvid u njegove glavne funkcionalnosti. Generalno se za CVS moe rei da je lagan za uporabu. Novo suelje ili par novih komandi za nauiti. Naravno da postoje i kompliciraniji dijelovi ali oni mogu biti zakopani u perl skriptama da bi se omoguilo lake koritenje. Moe raditi na vie datoteka odjednom, fleksibilan je (mislei pritom otvorenost prema razvojnim okruenjima). Vrlo je bitna karakteristika i njegova cijena. CVS nije skup, plaa se zapravo samo znanje instalacije i odravanja, a raditi e dobro i pouzdano ak i pod veim optereenjem ukoliko je dobro postavljen i instaliran.

471 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

CVS model
Cvs model nije zakljuaj izmijeni otkljuaj model. To znai da ne ohrabruje pristup po kojem programer uzima datoteku zakljuava ju onemoguavajui drugima pristup, mijenja ju i zatim izmijenjenu vraa u stanje raspoloivosti za druge. Takav model, zakljuavanja datoteka na kojima se radi, moe biti vrlo nepopularan u razvojnom okruju u kojem developeri nemogu meusobno brzo komunicirati, jer stvara velike probleme ukoliko neki lan razvojnog tima zaboravi otkljuati datoteku, nego npr ode na godinji odmor ostavljajui zakljuane neke datoteke na kojima je radio izmjene. To moe dovesti do ruenja atmosfere u razvojnom timu, pa ako situacija eskalira i do prijetnji te fizikih obrauna. CVS model je kopiraj izmijeni spoji model. Model radi na slijedei nain: developer iz CVS sistema kopira na svoj stroj datoteke na kojima e raditi izmjene (check-out datoteke), radi izmjene na datotekama (za to vrijeme drugi developeri takoer mogu raditi na svojim kopijama te iste datoteke), nakon zavretka rada na datoteci on tu datoteku izmjenjenu vraa nazad u CVS zajedno sa dnevnikom promjena koje je na njoj uinio, i ta datoteka se spaja sa CVS master kopijom. U bilo kojem vremenskom periodu ostali developeri na projektu spajanjem na CVS sustav mogu provjeravati izmjene na datotekama na kojima trenutno i oni rade i ta nova izmjenjena datoteka maginim procesom zanavlja i njihove radne verzije, i tako to ide u tom neprekidnom krugu inei developerski ivot punim uzbuenja i iznenaenja svojim te tuim postignuima. Naravno to sve zvui sjajno, te samim tim daje za naslutiti da ne odgovara stvarnom stanju. Utjecaji koji kvare tu iznimnu zamisao posljedica su ljudske udnje za radom. Promotrimo slijedeu situaciju: developer A iz CVS sistema kopira (glavne radne datotene strukture, repozitorija) svoju radnu verziju opsjednut raznim idejama o poboljanjima koda i funkcionalnosti, nekako u isto to vrijeme developer B bitno manje zainteresiran za bilo kakav rad, reda radi kopira svoju radnu verziju te iste datoteke. Drugi in ovog igrokaza zapoinje odmah, jer developer A ve pomamljeno radi izmjene, koje oduevljeno prijavljuje u repozitorij kao novu verziju, pa zatim odmah nastavlja dalje i radi daljnje izmjene. Prou tako dani, developer A iscrpljeno u repozitorij prijavljuje 6. izmjenu i odlazi na zaslueni poinak. U to vrijeme developer B primjeuje da je prije nekoliko dana planirao neto raditi te
472 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

se svladavajui gaenje, napokon odluuje malo provrljati po kodu, pri tom ni ne pomiljajui da obnovi svoju kopiju raunajui s tim da naravno nitko nije radio izmjene po datoteci ako nije ni on, te naini i sam neke izmjene u kodu. Nakon testiranja developer B odluuje prijaviti svoju datoteku u repozitorij. U tom trenutku dogoditi e se slijedee, kako je datoteka na kojoj B prijavljuje izmjene u meuvremenu mijenjana od ambicioznog developera A CVS e B-a obavijestiti o tome da se datoteka na kojoj je inio izmjene u meuvremenu mijenjana te da ju mora obnoviti prije prijavljivanja. Iznerviran tuom brzopletou B obnavlja svoju datoteku i ukoliko se njegov rad na datoteci ne odnosi na kod mijenjan od Developera A, prijavljivanje izmjena e proi u najboljem redu, i B e napokon zaslueno odahnuti, shrvan svim tim stresom. Meutim, ukoliko se rad Developera B odnosi na isti dio koda kao i onaj Developera A, B-ovi problemi tek nastaju jer je dolo do konflikta. CVS taj konflikt developeru prijavljuje i oznaava dijelove koda na koji se konflikt odnosi oznakama. Sada developer B mora rijeiti taj konflikt kako bi prijavio svoje izmjene. Tu bilo kakva asistencija CVS vie nije mogua, budui da on upozorava na nastale konflikte a na developerima je da ih rijee. Budui se ovaj rad ne bavi socioloko-motivacijskim aspektom developerskog rada prepustiemo developerima iz prethodnog primjera da sami rijee konflikt, za koji su ionako sami krivi.

473 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Upravljanje izmjenama - verzioniranje


Kako bi CVS uinkovito upravljao izmjenama, tj. vodio evidenciju izmjenjenih datoteka, repozitorij mora sadravati sve prijave datoteka od poetka projekta. Na taj nain mogue je povijesno pratiti izmjene na datotekama, i openito razvijanje projekta, i na temelju toga sagledavati u kojem se smjeru projekt kretao. Takoer bitna je i mogunost povratka na starije verzije ukoliko se neto krivo projektiralo. CVS evidenciju promjena radi pri svakom pohranjivanju prijava pomou zapisivanja diff-a. UNIX diff naredbom usporeujemo dvije datoteke i na standardni izlaz ispisujemo samo one linije koje su razliite. Takoer diff program moe se koristiti i za usporeivanje sadraja direktorija, tj. prikazivanje razlika izmeu usporeenih direktorija. Primjer: diff email email2 2a3,4 > ADSL_ZA_DZABE@zg.t-com.hr > Zekorog@zg.tel.hr Izlaz nam pokazuje, liniju po liniju, razliku izmeu datoteka email i addresses. Kako bi te dvije datoteke bile identino potrebno je dodati (a) liniju 3 i 4 (3,4) iz datoteke addresses (>) poslije linije 2 u datoteku email. Pokazaemo i sadraj datoteka koritenih u primjeru kako bi cijeli primjer bio dodatno pojanjen. Linije su numerirane kako bi se lake popratio ovaj primjer: email 1 udrin@zg.tel.hr 2 udrin@zg.htnet.hr 3 aleksandra@zg.hinet.hr 4 oksi@zg.htnet.hr email2 1 udrin@zg.tel.hr 2 udrin@zg.htnet.hr 3 ADSL_ZA_DZABE@zg.t-com.hr 4 Zekorog@zg. t-com.hr 5 aleksandra@zg.hinet.hr 6 oksi@zg.htnet.hr

474 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

PREGLED POJMOVA
Neke od ovih pojmova ili njihove sinonime smo koristili do sada, no vano je prije daljnjih opisa pojmove jo jednom navesti i objasniti, budui e se ti pojmovi koristiti u slijedeim poglavljima. Check out postavljanje zahtjeva za vlastitom radnom kopijom iz repozitorija. Radna kopija koja se dobije je trenutno stanje te datoteke ili projekta u trenutku u kojem se dohvaa. Kao to je ve ranije spomenuto, kada developer zavri sa svojim izmjenama na datoteci potrebno je upotrijebiti commit i update naredbe kako bi se takva preraena datoteka objavila u CVS sistemu, primjenjujui vlastite izmjene na datoteci i ujedno dobivajui na uvid izmjene koje su inili druge osobe ukljuene na projekt Commit slanje promjena iz vlastite radne kopije u centralni repozitorij. Naziva se jo i check in. Conflict situacija u kojoj dva developera pokuavaju napraviti commit promjena koje se odnose na isti dio iste datoteke. CVS takvu situaciju prepoznaje i prijavljuje nastali konflikt, no odgovorni za tu situaciju moraju ju sami i rijeiti. Log message komentar koji se dodaje promjenama koje se commit-a, a koji mora sadravati opis promjena. Pregledavanjem postojeih komentara mora se moi dobiti saeti uvid u stanje projekta i to se na projektu do sada dogaalo. Repository glavna, master kopija projekta, gdje CVS pohranjuje kompletni revision povijest projekta. Svaki projekt ima jedan repozitorij. Revision promjena commit-ana u nekom vremenskom trenutku za jednu datoteku ili grupu datoteka. Revision je zapravo snimka jednog stanja kroz stalne promjene na projektu. Update akcija koja omoguuje primjenjivanje tuih dorada neke datoteke na vlastitu radnu kopiju te iste datoteke. Takoer ta akcija e pokazati dali vaa radna kopija ima nekih izmjena koje jo nisu commit-ane. Ukratko update dri vau radnu kopiju aurnom sa aktualnom kopijom u repozitoriju. Working copy radna kopija datoteke kroz koju developer radi izmjene na projektu. Svaki developer na projektu ima svoju radnu kopiju datoteke na kojoj neto radi ili planira raditi.

475 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

KAKO RADI CVS Pristup repozitoriju i definiranje radnog okruja


Pristup repozitoriju najee se ostvaruje mrenim putem, no mogue je repozitorij drati i lokalno na stroju. Naredbom mojStroj$ cvs -d /usr/local/cvs postavlja se lokacija CVS repozitorija na vlastitom stroju. Mreni pristup stroju na kojem se nalazi CVS repozitorij (zvati emo ga CVS server) mogue je ostvariti na nekoliko naina. Spomenuti emo metodu pristupa pserver (password-authenticated server): mojStroj$ cvs -d :pserver:jrandom@cvs.com:/usr/local/cvs login (Prijava se vri na jrandom@cvs.com) CVS password: mojStroj$ Putanja do repozitorija iza -d parametra govori CVS-u da koristi pserver metodu pristupa sa korisnikim imenom jrandom na server cvs.com, iji se CVS repozitorij nalazi u /usr/local/cvs. Naredba login vas autorizira za rad sa repozitorijem nakon prijave korisnikim imenom i zaporkom. Sa lokalne maine dovoljno se prijaviti samo jednom na CVS server. Nakon uspjene autorizacije CVS pohranjuje lozinku u home direktorij u datoteci .cvspass. Svaki put kada se kontaktira repozitorij pserver metodom ta datoteka se provjerava. Naravno mogue je cvs login pokretati svaki put, a potrebno je pokretati svaki puta kada se lozinka mijenja. Spomenuti emo ovdje i spajanje na CVS server sa windows-ima pogonjene maine. Budui windowsi nemaju home direktorij izveden na isti nain kao UNIX, CVS nezna gdje da stavi .cvspass datoteku. Potrebno je dakle podesiti globalnu varijablu HOME;

476 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

C:\WINDOWS> set HOME=C: C:\WINDOWS> cvs -d :pserver:jrandom@cvs.com:/usr/local/cvs login (Prijava na jrandom@cvs.com) CVS password: C:\WINDOWS>

477 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

KREIRANJE NOVOG PROJEKTA


Kreiranje novog projekta u CVS repozitoriju radi se CVS naredbom: mojStroj$ cvs import CVS radi import svega u direktorijskom stablu, od zadanog direktorija prema nie. Dakle prije importa potrebno se pozicionirati u najvii direktorij svog projekta. mojStroj$ cd myproj mojStroj$ ls README.txt a-subdir/ b-subdir/ hello.c mojStroj$ Sintaksa import naredbe je: mojStroj$ cvs import -m "log msg" projname vendortag releasetag 173_XC02.p65 9/26/01, 9:01 AM 29 Parametar -m(message) slui kratkom opisu import procedure. To je ujedno i prvi log message na projektu. Od tog trenutka i svaki commit e imati svoj kratki opis. Upravo zbog toga to je akcije u repozitoriju potrebno opisivati radi praenja projekta te su poruke obavezne. Argument projname predstavlja ime projekta. Pod tim imenom e se projektu u repozitoriju pristupati. Argumente vendortag i releasetag sada neemo objanjavati(slue za katalogizaciju CVS repozitorija), koristiti emo korisniko ime i start kao vrijednosti za njih. Pokretanje import-a: mojStroj$ cvs import -m "Inicijalni import u CVS" myproj jrandom start N myproj/hello.c N myproj/README.txt

478 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

cvs import: Importing /usr/local/cvs/myproj/a-subdir N myproj/a-subdir/whatever.c cvs import: Importing /usr/local/cvs/myproj/a-subdir/subsubdir N myproj/a-subdir/subsubdir/fish.c cvs import: Importing /usr/local/cvs/myproj/b-subdir N myproj/b-subdir/random.c No conflicts created by this import mojStroj$ itanjem izlaza primjeujemo da CVS ispred svake datoteke stavlja jedno slovo. U ovom sluaju slovo je "N" za "new file". Nakon izrade nebrojenih backupa te redudancije postupaka i kopija svih formata spremni smo na check out radne kopije iz repozitorija.

479 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

CHECK OUT RADNE KOPIJE


Postupak check outa nije nezamislivo kompliciran, dokazaemo primjerom: mojStroj$ cvs checkout myproj cvs checkout: Updating myproj U myproj/README.txt U myproj/hello.c cvs checkout: Updating myproj/a-subdir U myproj/a-subdir/whatever.c cvs checkout: Updating myproj/a-subdir/subsubdir U myproj/a-subdir/subsubdir/fish.c cvs checkout: Updating myproj/b-subdir U myproj/b-subdir/random.c mojStroj$ ls myproj/ was_myproj/ mojStroj$ cd myproj mojStroj$ ls CVS/ README.txt a-subdir/ b-subdir/ hello.c mojStroj$ Valja primijetiti da se od nekuda pojavio i direktorij CVS, nema mjesta panici, uloga tog poddirektorija je da pohranjuje podatke o verzioniranju datoteka. Pogledajmo to sve tamo ima: mojStroj$ cd CVS mojStroj$ ls Entries Repository Root mojStroj$ cat Root /usr/local/cvs mojStroj$ cat Repository myproj mojStroj$

480 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Dakle imamo datoteku Root koji pokazuje gdje se repozitorij nalazi i imamo datoteku Repository koja pokazuje na projekt u repozitoriju (u naem sluaju myproj). Datoteka Entries sadri podatke po pojedinim datotekama unutar projekta. Svaka linija Entries datoteke sadri informacije o jednoj datoteci, naravno unutar krovnog direktorija u kojemu se Entries datoteka nalazi; /README.txt/1.1.1.1/Sun Apr 18 18:18:22 2001// /hello.c/1.1.1.1/Sun Apr 18 18:18:22 2001// D/a-subdir//// D/b-subdir//// Format svake zapisane linije je /ime datoteke/oznaka verzije(revision number)/vremenska oznaka(datestamp universal time)// linije koje se odnose na direktorije imaju prefiks D. Valja napomenuti da vremenska oznaka daje podatak o vremenu zadnje interakcije s datotekom (check out, update, commit)

481 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

MIJENJANJE DATOTEKE I UOAVANJE IZMJENA NA PROJEKTU


Zahtjevnim programerskim zahvatom u datoteku hello.c dodati emo jednu liniju koda koja ispisuje Goodbye, world!. Usporedimo sada nau lokalnu kopiju sa kopijom koja se nalazi u repozitoriju. mojStroj$ cvs update cvs update: Updating . M hello.c cvs update: Updating a-subdir 173_XC02.p65 9/26/01, 9:01 AM 34 An Overview of CVS 35 cvs update: Updating a-subdir/subsubdir cvs update: Updating b-subdir Veliko slovo M pokraj hello.c znai da je datoteka mijenjana od poslijednjeg check out-a i da izmjenjena nije commit-ana u repozitorij. Pogledajmo to nam na prijatelj diff ima za rei. Ovaj puta priapnuemo mu i parametar Q kako nebi inzistirao da nam govori u kojem direktoriju radi diff kao i parametar c kako bi nam pokazao kontekstualne promjene u datoteci. mojStroj$ cvs -Q diff -c Index: hello.c ================================================================== RCS file: /usr/local/cvs/myproj/hello.c,v retrieving revision 1.1.1.1 diff -c -r1.1.1.1 hello.c *** hello.c 2001/04/18 18:18:22 1.1.1.1 --- hello.c 2001/04/19 02:17:07 *************** *** 4,7 **** --- 4,8 -482 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

main () { printf ("Hello, world!\n"); + printf ("Goodbye, world!\n"); } Ovdje je dakle situacija prilino jasna. Nova linija je dodana u datoteku (+ oznaava dodanu liniju). Vano je primijetiti kako CVS ima implicitne (podrazumijevane) argumente. Do sada smo pokretali CVS naredbu iz naredbenog retka bez da napiemo na koju datoteku se odnosi. mojStroj$ cvs diff Takoer i: mojStroj$ cvs update CVS automatski primjenjuje te naredbe za sve datoteke i poddirektorije nie direktorija u kojemu se nalazimo. Naravno mogue je i eksplicitno navoditi imena datoteka kada elimo izbjei primjenu CVS naredbi na sadraj direktorija u kojemu se nalazimo.

483 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

COMMIT-ANJE (STARI HRVATSKI INFORMATIKI POJAM ZA SLANJE PROMJENA U REPOZITORIJ)


Naredba commit poslati e izmjene koje smo uinili u repozitorij. Kako smo ve spomenuli a rado emo i ponoviti, ukoliko se ne navede ime datoteke poslane e biti sve izmjene na svim datotekama koje smo uinili u direktoriju ili nie. Da vidimo: mojStroj$ cvs commit -m "ispisasmo i Goodbye" hello.c Checking in hello.c; /usr/local/cvs/myproj/hello.c,v <-- hello.c new revision: 1.2; previous revision: 1.1 done mojStroj$ Primjeujemo da se oznaka verzije uveala za 1. Svaka datoteka na projektu ima svoju oznaku verzije. Kada se datoteka commit-a, zadnja znamenka u oznaci verzije uveava se za 1, a mi naravno na taj nain uviamo koje se datoteke ee mijenjaju.

484 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Konflikti detekcija i rjeavanje


Otkrivanje konflikata je jednostavno. Kada se pokrene update, CVS javlja ukoliko je dolo do konflikta. Da bi konflikt detektirali i rjeili te na taj nain dokazali istinitost ovih tvrdnji moramo ga i izazvati. Jer kao to je poznato, konflikti nikada ne nastaju sami od sebe. Zato emo izmijeniti datoteku hello.c i ubaciti u nju redak: printf ("izazivanje vraga\n"); na istom mjestu gdje je Developer B commit-ao izmjenu: printf ("redak izmeu hello i goodbye\n"); U tome trenutku status nae kopije datoteke hello.c je slijedei mojStroj$ cvs status hello.c ================================================================== File: hello.c Status: Needs Merge Working revision: 1.2 Mon Apr 19 02:17:07 2001 Repository revision: 1.3 /usr/local/cvs/myproj/hello.c,v Sticky Tag: (none) Sticky Date: (none) Sticky Options: (none) mojStroj$ znai postoje razlike i u repozitoriju i u naoj radnoj kopiji, i te razlike je potrebno spojiti(merati, merge-ati). Uinimo li update vidjeti emo: mojStroj$ cvs update hello.c RCS file: /usr/local/cvs/myproj/hello.c,v retrieving revision 1.2 retrieving revision 1.3 Merging differences between 1.2 and 1.3 into hello.c rcsmerge: warning: conflicts during merge

485 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

cvs update: conflicts found in hello.c C hello.c mojStroj$ Aha. Veliko slovo C ispred imena datoteke znai da iako je merge proao, konflikt postoji. Sadraj hello.c sada pokazuje obadvije promjene: #include <stdio.h> void main () { printf ("Hello, world!\n"); <<<<<<< hello.c printf ("this change will conflict\n"); ======= printf ("between hello and goodbye\n"); >>>>>>> 1.3 printf ("Goodbye, world!\n"); } Konflikti se uvjek prikazuju u slijedeem formatu: <<<<<<< (ime datoteke) promjene u radnoj kopiji koje jo nisu commit-ane bure ture gura ture bure valja ======= nove izmjene koje se nalaze u repozitoriju bure ture gura ture bure valja i tako u nedogled >>>>>>> (zadnja oznaka verzije u repozitoriju) Konflikt se rjeava na isti nain kako je i izazvan. Na datoteci se izvre potrebne izmjene, maknu se >>>> oznake i datoteka se commit-a.

486 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

PREGLEDAVANJE IZMJENA ( - Tko ih je zato i kada radio - ) ILI ija nana crnu vunu prede
Do sada, projekt je pretrpio neke promjene. Ako elimo saznati to se do sada na projektu zbivalo nije potrebno prouavati svaki diff. Pregledavanje poruka o izmjenama(log messagea) trebalo bi nam te informacije pruiti: mojStroj$ cvs log hello.c RCS file: /usr/local/cvs/myproj/hello.c,v Working file: hello.c head: 1.4 branch: locks: strict access list: symbolic names: start: 1.1.1.1 jrandom: 1.1.1 keyword substitution: kv total revisions: 5; selected revisions: 5 description: -------------revision 1.4 date: 2001/04/20 04:14:37; author: jrandom; state: Exp; lines: +1 -1 podesih redak -------------revision 1.3 date: 2001/04/20 02:30:05; author: qsmith; state: Exp; lines: +1 -0 Dodo ja redak -------------revision 1.2 date: 2001/04/19 06:35:15; author: jrandom; state: Exp; lines: +1 -0 ispisasmo i Goodbye -------------revision 1.1

487 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

date: 2001/04/18 18:18:22; author: jrandom; state: Exp; branches: 1.1.1; Initial revision -------------revision 1.1.1.1 date: 2001/04/18 18:18:22; author: jrandom; state: Exp; lines: +0 -0 Inicijalni import u CVS ================================================================== mojStroj$ Kao to se iz izlaza vidi, pregledavanjem log message-a moe se brzo i kvalitetno stei uvid u dosadanji rad na projektu.

488 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

JO NEKE CVS OPERACIJE...


Kako bi u cjelosti priveli ovo poglavlje kraju, valja nam spomenuti i slijedee CVS operacije koliko god one trivijalne bile. Dodavanje datoteka u projekt radi se u dva koraka, prvo se izvri naredba add a zatim se napravi commit: mojStroj$ cvs add novi.c cvs add: scheduling file 'novi.c' for addition cvs add: use 'cvs commit' to add this file permanently mojStroj$ cvs ci -m "Dodo novi.c" novi.c RCS file: /usr/local/cvs/myproj/novi.c,v done Checking in novi.c; /usr/local/cvs/myproj/novi.c,v < novi.c initial revision: 1.1 done mojStroj$ Dodavanje direktorija jo je jednostavnije, jer nije potrebno poslije add naredbe raditi commit. Ovdje je vano napomenuti da se dodavanje binary datoteka radi neto drukije. Naime kako nebi dolo do problema sa konverzijama (oznaka kraja reda npr.) potrebno je add naredbu raditi sa parametrom kb: mojStroj$ cvs add -kb filename Izbijanje datoteka iz projekta zaudo, vrlo je slino dodavanju datoteka. No ovdje valja razmiljati unaprijed, jer potrebno je prvo datoteku izbiti iz radne kopije projekta. mojStroj$ rm novi.c mojStroj$ cvs remove novi.c cvs remove: scheduling 'novi.c' for removal cvs remove: use 'cvs commit' to remove this file permanently mojStroj$ cvs ci -m "mako sam novi.c" novi.c

489 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Removing novi.c; /usr/local/cvs/myproj/novi.c,v <- novi.c new revision: delete; previous revision: 1.1 done mojStroj$ Kod izbijanja direktorija treba voditi rauna da su direktoriji prazni (postupak je naravno isti kao kod izbijanja datoteka).

490 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Vraanje na staru verziju


Kako smo ve ranije zakljuili i u razvoju software-a, kao uostalom i u svemu ostalom u ivotu stvari jednostavno krenu krivim putem. Ne kae se uzalud da je put do pakla poploan dobrim namjerama. No oni sretnici koji krivim putem krenu, a ipak im je pruena prilika za popravak, svakako bi voljeli da nemoraju ponovno sve od poetka, ve bi rado pokuali izmijeniti neslavan kraj, nastavljanjem od toke u kojoj misle da su pogreno skrenuli. CVS dakle svom korisniku u nevolji, prua mogunosti dohvaanja zadnje "dobre" verzije u kojoj se projekt nalazio. Tu mogunost prua kroz vremensku (vrijeme commit-anja) ili povijesnu (oznaka zadnje snimke -snapshota) Datumsko dohvaanje radi se proslijeivanjem parametra D update naredbi: mojStroj$ cvs -q update -D "2001-04-19" U hello.c U a-subdir/subsubdir/fish.c U b-subdir/random.c mojStroj$ Sada je dohvaena najvia verzija svake datoteke u projektu sa zadanim datumom, dakle datoteke u naoj radnoj kopiji biti e vraene na prijanju verziju. esto nam toka na koju se elimo vratiti nee biti datum, ve zadnja stabilna verzija. Oznaavanjem datoteka na projektu tag naredbom, dajemo oznaku jednoj fazi ivota projekta. Vano nam je stanje u kojem se u tom trenutku projekt nalazio. Postavljanje tag-a prilino je jednostavno: mojStroj$ cvs -q tag Testiran_Isporucen_011204 T README.txt T hello.c T a-subdir/whatever.c T a-subdir/subsubdir/fish.c T b-subdir/random.c mojStroj$

491 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Tom naredbom oznaili smo trenutnu snimku stanja naeg projekta sa imenom "Testiran_Isporucen_011204". Oznaavanjem datoteka na projektu tag naredbom, dajemo oznaku jednoj fazi ivota projekta. Vano nam je stanje u kojem se u tom trenutku projekt nalazio. Slijedee slike dobro pokazuju kako tag oznaava datoteke u odreenom trenutku bez obzira kakvu povijest verzija svaka datoteka zasebno ima. Vraanje verzije koju smo oznaili kao vrijednu vraanja, tj. toku u kojoj vjerujemo da imamo dobro stanje projekta radi se na slijedei nain: xxx mojStroj$ cvs update -r Testiran_Isporucen_011204 cvs update: Updating . cvs update: Updating a-subdir cvs update: Updating a-subdir/subsubdir cvs update: Updating b-subdir cvs update: Updating c-subdir mojStroj$ Radna kopija naeg projekta vraena je na verziju Testiran_Isporucen_011204.

492 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

ADMINISTRACIJA REPOZITORIJA

Kreiranje repozitorija
Da bi imali to administrirati, repozitorij je potrebno prvo kreirati. Naredbom cvs -d /usr/local/repozitorij init emo kreirati repozitorij u direktoriju /usr/local/repozitorij koji prije toga trebamo kreirati. U direktoriju e biti kreiran novi direktorij CVSROOT koji ima slijedei sadraj checkoutlist commitinfo commitinfo,v config config,v history loginfo modules modules,v notify notify,v rcsinfo rcsinfo,v taginfo taginfo,v verifymsg verifymsg,v

checkoutlist,v cvswrappers editinfo editinfo,v

cvswrappers,v loginfo,v

Te datoteke slue za administraciju repozitorija. Trenutno nam je cilj da upogonimo repozitorij, a znaenje pojedinih datoteka e biti objanjene kasnije. Da bi korisnici mogli koristiti repozitorij, moraju imati privilegiju za pisanje. Da bi to omoguili preporuljivo je da se kreira korisnika grupa cvs, a da se onim korisnicima koji trebaju raditi sa repozitorijem pridodjeli grupa CVS. U veim projektima korisnici imaju potrebu pristupati repozitoriju sa udaljenih lokacija. U takvim sluajevima potrebno je kreirati "Password Authenticating Server". Kada korisnici pristupaju serveru, alju zahtjeve odreenom portu. Internet deamon kada dobije zahtjev na taj port spaja CVS server i klijenta. Da bi to omoguili u /etc/services datoteci potrebno je pridruiti odabrani port servisu: cvspserver 2401/tcp

493 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Nakon toga je u /etc/inetd.conf datoteci potrebno definirati to je zapravo servis koji smo pridruili portu: cvspserver stream tcp nowait root /usr/local/bin/cvs cvs \ --allow-root=/usr/local/rpozitorij pserver (ne zaboravite da je \ samo oznaka da je slijedei red nastavak prethodnog, a ne nova naredba) Novi servis e biti aktivan nakon to se ponovo pokrene internet deamon a korisnici e moi pristupati sa naredbom: cvs -d :pserver:nekilogin@cvsprimjer.com:/usr/local/repozitorij login nakon toga e se traiti da unese svoju lozinku na tom serveru. Lozinka koja se unosi je lozinka za "shell account" tj. sistemska lozinka. Da bi to bilo mogue u datoteci CVSROOT/config parametar SystemAuth mora biti podeen na "yes". Podeavanje parametara i izmjena datoteka u CVSROOT direktoriju e biti objanjeni neto kasnije. Ukoliko se ne eli koristiti ta lozinka, CVS omoguava da se za logiranje na CVS server koristi posebna lozinka. Da bi to bilo mogue u datoteci CVSROOT/passwd u repozitoriju (dakle u naem sluaju /usr/local/repozitorij/CVSROOT/passwd) je potrebno unijeti lozinke u slijedeem formatu; <ime>:<"kriptirana" lozinka> primjer: nekilogin:aSa3jreTzMheS nekidrugilogin:eFa5jzrLu7hea

494 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Kada se korisnik prijavi na ovaj nain ima ista prva nad datotekama kao i kad se prijavi telnetom. Ukoliko korisniku elimo pridodjeliti novo ime koje e koristiti kada se prijavljuje na CVS server tada je u datoteci potrebno dodati jo jednu kolonu koja e definirati sistemski login koji e biti koriten za rad sa CVS serverom i koja prava e biti dodjeljena. Isto tako je mogue jednom sistemskom loginu dodjeliti vie CVS logina primjer: cvslogin: aSa3jreTzMheS:nekilogin drugicvslogin:eFa5jzrLu7hea:nekilogin u ovom primjeru korisnik cvslogin i korisnik drugicvslogin e imati ista prava kao i sistemski korisnik nekilogin. To moemo iskoristiti i ukoliko elimo na jednostavan nain korisnicima koji rade na jednom projektu zabraniti da mjenjaju dokumente drugog projekta, a istovremeno im zabranimo koritenje sistemskog logina. Da bi omoguili dodatnu kontrolu prava pisanje i itanja, u CVSROOT direktorij moemo dodati dvije datoteke readers i writers. U datoteke zapisujemo imena korisnika s pravima za itanje odnosno za itanje i pisanje. S time da u datoteku zapisujemo ime CVS logina a ne sistemskog logina ukoliko nisu jednaki. primjer: cvslogin1 cvslogin2 cvstrecilogin Ukoliko se neiji login nalazi u datoteci readers tada e taj korisnik imati privilegije samo za itanje, pa makar se nalazio i u datoteci writers. Ukoliko se neiji login nalazi u datoteci writers tada svi korisnici iji se login nalazi u toj datoteci imaju prava za itanje i pisanje. Meutim ukoliko postoji datoteka writers tada svi oni korisnici iji se login ne nalazi u datoteci writers imaju privilegiju za itanje. Tako da odabirom kreiranja jedne od dvije datoteke moemo raditi pozitivnu, odnosnu negativnu selekciju, ili pak i pozitivne i negativne, ukoliko se odluimo na kreiranje obije datoteke.

495 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Dodavanje projekta i sadraj repozitorija


Kreirajmo neki direktorij koji e predstavljati na projekt. Neka to bude npr. ~/projekt i u njemu kreirajmo 2 datoteke hellocvs.c i read.me. Taj projekt emo sada dodati u repozitorij. Potrebno je ui u direktorij projekt i izvriti naredbu cvs import -m "dodavanje projekta u repozitorij" moj_projekt cvsuser start u repozitoriju je sada nastao novi direktorij, nalazi se i direktorij moj_projekt. U direktoriju moj_projekt nalaze se datoteke iz projekta s time to imaju sufiks v, hellocvs.c.v i read.me.v. U tim dokumentima su spremljeni i dokumenti i izmjene dokumenata. Dakle dokument hellocvs.c nee za svaku verziju dokumenta imati vlastitu datoteku u repozitoriju ve e sve verzije biti sadrane u istoj datoteci hellocvs.c.v. Primjer datoteke u kojoj je u verziji 1.1 pisalo hello world a u verziji 1.2 primjer cvs izmjene. U repozitoriju e datoteka izgledati ovako: head access; symbols c:1.1.1.1 b:1.1.1; locks; strict; comment @# @; 1.2;

1.2 date 2004.12.19.21.22.06; author cvsuser4; branches; next 1.1 date 2004.12.12.18.37.53; author cvsuser4; state Exp; 1.1; state Exp;

496 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

branches 1.1.1.1; next 1.1.1.1 date 2004.12.12.18.37.53; author cvsuser4; branches; next ; state Exp; ;

desc @@

1.2 log @izmjena dokumenta @ text @primjer cvs izmjene @

1.1 log @Initial revision @ text @d1 1 a1 1 hello world @

497 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

1.1.1.1 log @ @ text @@ Ukoliko neki dokument obriemo iz projekta tada taj projekt nee biti izbrisan iz repozitorija, jer ukoliko netko eli staru verziju projekta taj dokument mora biti dostupan. Taj dokument e biti premjeten u Attic direktorij, kojeg e kreirati ukoliko ne postoji unutar projekta u repozitoriju. Brisanje dokumenta naravno, radimo pomou CVS alata, nikakve izmjene ne radimo direktno u repozitorij direktoriju. CVSROOT direktorij nije dio niti jednog projekta ve slui za administraciju repozitorija. Meutim ukoliko elimo mjenjati dokumente unutar njega to inimo kao i sa bilo kojim drugim projektom, pomou alata za rad sa repozitorijem. Dakle potrebno je napraviti check out, zatim izmjenu na lokalnoj kopiji, a zatim check in.

498 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Podeavanje ponaanja repozitorija


Promjena ponaanja repozitorija se radi izmjenom nad slijedeim datotekama:

config
U datoteci config moemo podesiti 3 parametra: SystemAuth ako podesimo na no korisnici se nee moi logirati ukoliko ne postoji lozinka definirana u CVSROOT/passwd. Ako se podesi na yes tada e CVS ukoliko ne nae lozinku u navedenoj datoteci, lozinku potraiti u sistemskim lozinkama. TopLevelAdmin ako se podesi na yes tada e se u lokalnoj kopiji projekta pojavljivati CVS direktorij. Tu mogunost iskoritavamo ukoliko korisnici imaju potrebu raditi na vie projekata istovremeno. U protivnom je dobro tu opciju ostaviti na no, PreservePermissions. Ukoliko elimo da se zapamte pristupna prava na datoteke u verzijama tada je potrebno opciju podesiti na no Izmeu imena opcije, znaka jednakosti i kljune rijei yes ili no ne smije stajati razmak. Ukoliko neka opcija nije navedena ili nema kljunu rije yes ili no tada e se repozitorij ponaati kao da je navedena opcija no. Ukoliko imamo potrebu stavljati komentar unutar configuracijske datoteke tada redove sa komentarima treba oznaiti sa poetnim znakom #. Primjer datoteke config: SystemAuth=yes TopLevelAdmin=no PreservePermissions=no

499 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

modules
U datoteci modules moemo grupirati pojedine datoteke unutar projekta u direktorije i datotekama pridjeljivati pomona radna imena. To nam omoguuje da projekt podjelimo u zasebne cjeline, ime omoguavamo efikasniji rad. Datoteka je zapisana u formatu: ime_datoteke ime_direktorija ukoliko elimo datoteku pridruiti direktoriju ili u formatu proizvoljno_ime_aliasa -a naredbe_ili_imena_koje_alias_zamjenjuje ukoliko elimo definirati alias. Alias je rije koja zamjenjuje niz rijei, i ukoliko u komandnoj liniji upiemo rije koju smo definirali kao alias u datoteci modules, tada e se upisana naredba ponaati kao da smo umjesto aliasa upisali zadani niz rijei.

commitinfo
U datoteci commitinfo definiramo dodatne dogaaje u pre-commit fazi. Ukoliko se u datoteci koju commit-amo nae sadraj koji zadovoljava uvjet zadan regular expressionom, tada se pokree program. Taj program moe biti slanje emaila administratoru, kopiranje, premjetanje nekog sadraja ili bilo kakav drugi program. Programu moemo prosljediti i atribute datoteke i to sa kljunim rijeima: %s - ime datoteke %V - verzija prije commita %v - verzija poslije commita Datoteka je zapisana u formatu:

500 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

regular_expression program_koji_se_pokrece_u_slucaju_zadovoljenja

loginfo
Ova datoteka se ponaa isto kao i datoteka commitinfo s tom razlikom to se program ne okida u sluaju da je regular expression zadovoljen u datoteci koju commit-amo, ve u komentaru (log message) koji piemo prilikom commit-a.

taginfo
Ova datoteka se ponaa isto kao i datoteka commitinfo s tom razlikom to se program ne okida u sluaju da je regular expression zadovoljen u datoteci koju commit-amo, ve u imenu "taga" prilikom commita.

verifymsg i rcsinfo
Datoteka verifymsg sadri naredbe koje se izvravaju prilikom svakog commit-a. Najee se koristi ukoliko elimo provjeriti da li je komentar zapisan u zadanom formatu. Ukoliko format nije zadovoljen tada se commit prekida. O formatu komentara se brine datoteka rcsinfo. U njoj se zapisuje koji format e se korisititi ovisno o zadovoljenom regular expressionu u datoteci. Datoteka je zapisana u formatu: regular_expression datoteka_sa_formatom_zapisa. Ukoliko elimo koristiti isti format zapisa za sve datoteke tada je umjesto regular expressiona dovoljno staviti kljunu rije ALL.

501 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

cvswrappers
U ovoj datoteci se moe definirati posebno ponaanje datoteka s obziro na njihovo ime. S obzirom na ogranienu mogunost ove datoteke, najee se koristi da se definira koje datoteke e se korisititi kao binarne. Npr: *.gif -k 'b'

checkoutlist
U ovoj datoteci moemo definirati dodatne administrativne datoteke koje elimo kontrolirati putem verzioniranja, a nisu standardno isporuene. Npr. datoteke koje smo sami napravili u kojima se nalazi format zapisa komentara. Datoteka je zapisana u formatu: ime_datoteke poruka_u_slucaju_greske_prilikom_check_outa

502 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

ALATI SA GRAFIKIM SUELJEM I CVS


Kao to smo vidjeli u prethodnim poglavljima, rad sa CVS-om iz komandne linije nije ba intuitivan i zahtjeva znanje i razumjevanje rada CVS-a. Iz tog razloga su nastala grafika suelja koja pojednostavljuju rad. Meutim veina developera koji rade sa CVS-om koriste iskljuivo check-in/check-out mogunosti CVS-a i ne ele instalirani alat koji bi zamjenjivao 2 naredbe, ve si najee sami napiu skriptu u tu svrhu. To je razlog zbog ega grafika suelja za rad CVS-om do sada nisu postigla veliku popularnost. Grafika suelja predstavljaju suelje na CVS komandni klijent, koji se nalazi instaliran na raunalu. Dakle kada mi u grafikom suelju odaberemo projekt moj_projekt u repozitoriju i odaberemo "check out", tada taj alat nee stvarno sam napraviti check out u repozitoriju, ve e samo u novom procesu pokrenuti naredbu cvs checkout moj_projekt Velika prednost takvog naina je da eventualne pogreke u takvim alatima nee utjecati na konzistenciju repozitorija. Neka grafika suelja ipak i sama za neke svrhe gledaju u repozitorij, ali se uglavnom ograniavaju na itanje. Veina suelja sadri samo osnovne opcije CVS-a, dok za sada niti jednim grafikim sueljem ne moemo u potpunosti zamjeniti sve opcije CVS-a, meutim najbolja suelja omoguuju preglednije praenje verzija modula i druge mogunosti koje nisu dostupne iz komandne linije.

503 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

504 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Pregled grafikih suelja


CERVISIA Ovaj alat je namjenjen za KDE suelje i u mnogim instalacijama linuxa se automatski instalira sa KDE sueljem. Cervisia je najcjelovitije CVS grafiko suelje i podrava mnoge mogunosti osim osnovnih opcija check-in, check-out, add, remove .... Cervisia omoguava napredni pregled datoteka u raznim bojama ovisno o statusu, grafiku usporedbu datoteka, grafiki prikaz datoteka i grana te upravljanje njima. Cervisiu je mogue pokrenuti i na suelju koje nije KDE, meutim u praksi se esto javljaju problemi, pa se u takvim sluajevima najee posee za nekim drugim CVS sueljem.

505 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

TKcvs Ovo Tcl/Tk bazirano CVS grafiko suelje je vrlo popularno, najvie zahvaljujui izvrsnom diff alatu unutar suelja i mogunosti instalacije na Windows, Linux i MacOSX platforme. Poput Cervisie, osim osnovnih ima i brojne napredne mogunosti i spada u red najkvalitetnijih CVS grafikih suelja. Za izvravanje je potrebno imati Tcl/Tk runtime. Primjeri baratanja granama i diff alata uTKcvs-u u razliitim "Window managerima"

506 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

LinCVS Prednost ovog alata je mogunost spajanja na CVS server na vie naina od ostalih suelja (local/nfs, pserver, ssh, ssh-agent, proxy). Iako sadri mnoge napredne mogunosti, ovaj alat nije na razini prethodna dva alata.

507 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Ostala suelja Uz navedena mogu se pronai i druga suelja koja se ne istiu posebnim mogunostima pa emo ih samo nabrojati: gCVS, MacCVS, WinCVS, Pharmacy, JCVS, JavaCVS, MacCVSClient, MacCVS pro, smartCVS, TortoiseCVS, Igloo, CVSGrab, VisualCVS

508 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Ivan Podhraki

IDE

509 /1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

UVOD

U ovom seminaru prezentirat u nekoliko selekcija unutar Integrirane Razvojne Okoline (IDE)

Linux je neto poput raja za programere. Zapravo to je teak programerski jezik, koji spada pod ovaj besplatan operativni sistem. Pa ipak , problem sa mnogim jezicima je njihovo zagonetno funkcioniranje, odnosno komplicirano koritenje.

Na primjer , Visual Basic programeri koji su naviknuti na grafiki podrano suelje, dogaa im se da vie puta odskae ta naredba od crte prevodioca (command line compiler). Zahvalan broj koji se stalno poveava je broj grafikih okolina, koji ini koritenje software lakim poput djeje igre.

510/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Invazija

Za

IDE test uzeo sam

primjer Anjute , u tekuoj beta inaici KDevelop

2.0.2, KDE Studio gold 3.0, isto kao i Kylix 2. U usporedbi Anjute i KDevelop , KDevelop okolina je komercijalni softver. KDE Studio iz the Kompany je dostupna u no-frills , free , Open Source verziji, gdje se Borland Kylix moe besplatno koristiti za privatne potrebe. Funkcionalno i korisniko suelje od svih prisutnih ovdje oslanja se na Windows aplikacije. Koncept posluitelja je da prikuplja baze svih kandidata odnosno sve datoteke koji su

potrebne da bi se za jedan dan izradio nov program. Ovo se ne primjenjuje samo na izvornom kodu, nego isto tako za koritenje knjinice i dokumentacija. Neki IDE trae dozvole upravljanja za pojedini plan i knjinice za program. U usporedbi sa Kylix , okolina nema za obaviti potrebnu radnju vlastiti prevodilac ( ni popratan pomo program ). Umjesto toga , oni svi ( sa iznimkama ) imaju pristup prilagoen GNU komandnim linijama alata. Moraju biti definirani kao centralni , grafiki popraeni proizvodi. Za one koji prelaze sa Microsofta i Borlanda, odnosno sa njihove razvojne okoline pod Windows operativnim sistemom nedostajat e im integrirani dijalog editori.

Takoer postoji tekui IDE za ovaj software i ako nije instaliran na raunalo moe se kasnije instalirati to nas kota nae dragocjeno vrijeme. Tako dobijemo npr.

prikazivanje svih razvojnih okolina , sa izuzetkom od Kylix , koji moe usmjeriti stvaranje pojedinih stranica , na primjer rpm oblik zapisa , to je naravno dostojno svake pohvale. Usprkos mogunosti na test kandidat ima u rutini , razlikovanje sve etiri aplikacije. Sada u prezentirati najzatupljeniji IDE.

511/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

IDE

Anjuta 0.1.8

Anjuta dolazi pod GPL razvojnom okolinom. U svojoj tekuoj inaici je u beta faza i stoga nije jo potpuno proien. Unato to je Anjuta najmanje prisutna, ali ipak ve sada obeava.. Anjuta , u svojoj tekuoj inaici , cilja na razvoj Gtk-a , koji je temeljen na GNOME -

aplikaciji. Stoga nije iznenaenje da je bio oformljen na ovaj bazi. Anjuta ne daje izravnu podrku aplikacijama koje koriste Qt ili KDE. Sva pomo je potpuno prilagoena Gtk-u i Gnome-u. Pa ipak ukoliko ih savjesno zanemarite neete imati problema stvarajui programe temeljene na QT-u. Ovaj je dui i nespretniji put , i jednostavniji za Qt ili KDE razvijen od strane korisnika KDevelop ili KDE Studia. Gtk I Qt su dvije knjinice koje programer moe iskoristiti unutar njihovih aplikacija. Oni opskrbljuju grafike objekte npr. menije. U tom sluaju rad sa Windowsima je olakan za programere. Gtk dolazi pod GPL , i Qt je na isti nain raspoloiv pod ovom licencom. Anjuta razumije programiranje u jeziku C i C ++. Kompatibilnost sa drugim jezicima kao to je Java na primjer , je u planirajuem stadiju ili je ve djelomino gotov. U stvaranju novih programa , pomonik pomae korisniku ,vodei ga kroz nekoliko jednostavnih koraka do eljenog rezultata. (U mojem testu naprimjer, u samo est klikova miem, stvorio sam kostur za novu aplikaciju.

512/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

slika : ANJUTA POMONIK

Anjuta nesvjesno pohranjuje sve projekte u projekt mapu , a taj odredini direktorij se moe prema elji promijeniti u postavkama. Broj oformljenih kartoteka ne moe biti jednostavan Hello World program. U C-u je potrebna minimum jedna, ali se najee koriste dvije kartoteke make kartoteka za kompajlirajui napredak i drugi u kojem se nalazi izvorni kod.). Pod standardnim postavkama Anjuta stvara tri mape koji vodi sa 64 kartoteke ukupno. Preporuljivo je da Anjutin glavni prozor ne prekriva cijeli zaslon. Razlog tome je da softver ispisuje poruke i dodatne vane dijaloge u Windows pozadini, pa bi u protivnom bile prekrivene.. Editor je vrlo koristan te se njime vrlo lako sluimo za obradu izvornog koda.

513/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Pritiskom na Alt + Enter vrlo lako moe biti aktiviran. Anjuta moe otvoriti veinu razliitih oblik zapisa , kao to je Java kod ili Latex kartoteka. Upravo zato jer postoji gomila oblika zapisa , razvojna okolina izgraena je u prigodnim grafikim prijedlocima. Takoer iznenauje sposobnost za unaanje funkcija i klasa, te za unaanje simbola lijevo od koda sa + i - tipkama.

Anjuta ima lak pristup programu za pronalaenje pogreaka Gdb , a to je standardan program za otkrivanje greaka. Za stvaranje aplikacije pomou grafikog suelja, na osnovi Gtk , moe se koristiti vanjski program Glade. Ogranien je na kratak opis za veinu vanijih meni opcije. Anjuta ima vanjski pristup za dokumentaciju.

514/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

KDevelop 2.0.2

U pokuaju kopiranja KDevelops rpm zapisa na moje test raunalo sa SuSE - Linux , dobio sam vie nego to sam oekivao. Upozorio nas je na vie od 20 deinstaliranih paketa. Veina kartoteka upuivala je na Docbook sistem dokumentiranja. Upravo to osigurava KDevelop pomo pri svim funkcijama. Ako paket odbija biti instaliran , znai da razvojna okolina nesvjesno iskoritava Yast2. Oprez! Oni koji se lobiraju nee dobiti direktnu obavijest o postojanju drugih korisnika.. Sa umetnutim instalacijskim CD-om, instalacija je veoma brzo gotova, a hard disk nekoliko megabajta puniji. Do prvog dojma dolazi odmah nakon otvaranja. KDevelop ujedinjuje velik broj programa unutar jednog radnog okruenja. Odmah, kako slijedi, otvara se grafiko okruenje -Qt. Ovaj softver je stvorio Trolltech , proizvoa Qt-a. U usporedbi s Anjutom, vie je baziran na Windows modelu. Takoer je omoguen pristup vrlo detaljnoj pomoi , to upotpunjuje programski jezik sa C++. Vanjski pristup je omoguen za dokumentaciju Qt I KDE klasa.. Editor prozor je smjeten sa desne strane, to je vrlo praktino kod editiranja izvornog koda, te sadri prozore za prikaz drugih dokumenata. Upravo zbog toga ovaj prozor moe biti nezavisno smjeten. Na dnu je smjeten statusni prozor, na kojem se ispisuju razliite poruke upuene korisniku. Ustvari KDevelop vrlo jako naglaava sastavljanje u cjelinu. Upravo zbog toga ne bi trebalo biti iznenaenja, jer svi podaci se oitavaju iz KDE projekata te se postie isti cilj. Primjeuje se da se korijeni Kdevelopa nalaze u KDE projektima. Unato mnogobrojnim KDE i Qt varijacijama programa, , razvojna okolina naalost prua jedinu vrstu aplikacije, na osnovi GNOME knjinice.

515/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

U usporedbi sa Anjutom, KDevelop je idealan za stvaranje

KDE, Qt, C ili C ++ programe.

Sreom , pomonik nudi mnogobrojne mogunosti , kao to je naprimjer promjena postavki u inaici uprava alata CVS. Ovo omoguuje da nekoliko ljudi radi na istom projektu. KDevelop i Kylix su jedini programi prisutni ovdje , to omoguuju rad tima na jednom projektu. Razdijeljen od datoteke sa projektima, pomonik moe stvoriti dokumentaciju za pojedini program Kada su svi razvojni paketi instalirani, softver moe izraditi cijeli nacrt za upravljanje. Pravedan poput Anjute , KDevelop ne ograniava broj novostvorenih fileova. Integrirani preglednik u veini sluajeva svoj posao obavlja uspjeno. To omoguuje da sve klase koje su koritene u projektu budu lako vidljive i modificirane. Pomonik ponekad moe preuzeti stvaranje novih klasa tako da generira dijelove koda i pristupnih fileova. Metode i atributi tada mogu biti dodane ili izbrisane koritenjem prigodnog dijalog prozora Kada to radimo, ponekad nam se ini da je desni klik na miu nalik arobnom tapiu. Atributi koji se runo unaaju u kod , su automatski transformirani u adrese, nakon to prou proceduru. Grafiko suelje je u veini sluajeva vrlo korisno. Sve u svemu Kdevelop sadri mnogo korisnih funkcija , koje su naalost u startu sakrivene od korisnika Vrijeme koje treba premosnici da prebaci podatke izmeu konzole za poruke i nekog drugog statusnog prozora moe biti vrlo sporo, te se na to trebamo priviknuti. Ova procedura je pa ipak u prednosti jer jasno i tono sortira poruke prema tipu.

516/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

KDE Studio Gold u inaici 3.0

KDE Studio je razvijen od strane the Kompany, te je dostupan u dvije inaice. KDE Studio ( izdan pod GPL ) koji je slobodan i u izvornoj inaici koja ini komercijalni KDE Studio Gold. Osnovna razlika izmeu ove dvije inaice je u broju omoguenih mogunosti. Posvetit u se testnoj verziji KDE Studia Gold, koja se moe besplatno presnimiti sa stranice proizvoaa. Internet. Iako prua sve opcije, vrijeme koritenja strogo je ogranieno na 15 minuta . Cijela inaica dostupna je za priblino 25 $. Izravno nakon pokretanja, korisniku pomonik pomae prilagoditi novu radnu okolinu. KDE Studio razlikuje se od

drugih programa, jer razlikuje projekt od radnog prostora ( radne okoline ). KDE Studio koristi ime projekta, te pomou njega odreuje podgrupu. To znai da projekt moe biti novi program ili sastavni dio knjinice. Kada stvaramo novi projekt, ubrzo postaje jasno da KDE Studio daje naglasak na C i C++ razvoj, koristei Qt ili KDE osnovu. Ovaj IDE ne nudi izbor stvaranja GNOME aplikacije, to ostavlja mogunost stvaranja projekta runo, odnosno bez pomoi asistenta. U usporedbi sa konkurencijom, KDE Studio kreira samo jednu kopiju najvanijih podataka. Neki govore da je ak i previe ekonomian jer kao izvor programiranja koristi funkcije koje moraju biti stvorene od korisnika. Aplikacija jedino nudi predloak za KDE ili Qt program. KDE Studio nudi stablo predoeno u gornjem lijevom dijelu prozora, tako da drugi podaci ne mogu biti ispisani na tom mjestu. Statusni prozor se nalazi na gornjem desnom dijelu prozora.. Editor nudi poput Anjute mogunost uvoenja funkcija i klasa. KDE Studio ne

postie djelovanje KDevelopa, odnosno u jednu ruku postie, jer ima preglednik klasa. Takoer nudi grafiko suelje, koje mora biti dodatno pozvano sa menija. Unato svemu izgleda pomalo nejasno.

517/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Apsolutno nema pomonih mehanizama u stvaranju klasa, poput onih integriranih u KDevelopu. Naalost malen je broj ostalih zanimljivih stvari koje se mogu pronai u KDE Studio Gold 3.0, osim u "debug" i "compiler" opcijama.

518/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Kylix 2 Open Edition


Kylix 2 se izdvaja od "kalupa" na mnogo naina. Jedan od najvanijih je u svakom pogledu razraen Prevodioc Borland, koji ima mnogu iskustva u radu sa razliitim razvojnim okolinama na Windows operativnim sistemima. U drugu ruku ovo je komercijalan proizvod. Borland prua mogunost snimanja besplatne verzije sa Interneta. Kako i ime govori, samo slobodna inaica doputa kreiranje projekata pod GNU licencom. Svi ostali koji ele dodatne opcije moraju kupiti, odnosno licencirati software po cijeni od 325 eura na slubenoj Borland stranici. Takoer postoji i licenca za tvrtke koja nudi jo vie funkcija, te je za nju potrebno izdvojiti ak 2585 eura. Besplatna inaica je prvenstveno namijenjena privatnim korisnicima. Sve verzije Kylix softwarea mogu se pronai na slubenim stranicama. Kylix donosi konverzaciju sa Delphiem, popularnim Windows sueljem..Kao to je Microsoft VisualBasic u Windowsima, ovo je kompletna razvojna okolina koja dolazi iz Borlanda. Programi koji su napisani u Delphiu, Kylix moe iskoristiti u oba jezika, Pascal i knjinice oformljene pomou Borlanda. Kune aplikacije na ovaj nain mogu biti brzo i lako

oformljene, ali sve ovisi o znanju korisnika i instaliranim knjinicama.. Borlandu je glavni cilj napraviti aplikaciju u Delphiu, a da takoer radi pod Linuxom, te obrnuto. U tu svrhu , Borland ne koristi za prijenos samo CLX knjinice u Linux , nego je napravio prevodioc pa je i IDE raspoloiv pod Linuxom. Nakon pokretanja , puna inaica zahtjeva unoenje registracijskog koda. izgubimo kod, moemo ga preuzeti besplatno sa Ako sluajno Ako je

http:/register.borland.com .

ulaz odobren, uvodna slika nas obavjetava da smo Delphi korisnik.. Razvojna okolina vrlo nas podsjea na Windows operativni sustav. Delphi korisnici nisi jedni kojima e se svidjeti rad kod kue. Zanimljivo je to, to proizvoa mnogo godina radi na ovom proizvodu.

519/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Izravno nakon poetka , oekuje nas prazan projekt , koji je smjeten u praznom prozoru, a oboje su smjeteni u glavnom prozoru. Ovaj prostor moe biti iskoriten za liste, neto poput opcija u programima za obradu fotografija. Meni predstavlja sve raspolagajue elemente, odnosno opcije. Ovaj prozor je obino

smjeten sa lijeve strane. Za vrijeme kada korisnik stvara grafiko suelje , Kylix za to vrijeme generira pripadajui programski kod. Korisnik tada mora samo pregledati i upotpuniti kod, odnosno provjeriti dali nedostaje koji dijagram. Jednom kada je kod stvoren, te je kompatibilan sa Pascalom, Kylix brzo i efikasno stvara aplikaciju. Sve postavke mogu piti pohranjene te se naknadno mogu promijeniti, uz par klikova miem. Kylix je jedini program, prezentiran u ovom radu, koji podrava grupni rad.

520/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Kratka usporedba programskih jezika

ANJUTA

Anjuta e osigurati jednaku funkcionalnost i korisniko suelje kao C i C++. Vrlo nalikuje Windows korisnikom suelju, te je radna povrina vrlo fleksibilna.

slika : ANJUTA

521/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

ARRIBA

Osigurava jednaku funkcionalnost i korisniko suelje kao

C ++, podrava C i C ++

aplikacije, ali takoer kao Anjuta ne moe otkriti C ++ . Prua podrku za mnogo programskih jezika.

C- FORGE

C - Forge je Power PC razvoj okolina sa podrkom za mnoge jezike, C++ i vrlo popularnu Javu.

slika : C-FORGE OPCIJE

522/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

KYLIX

Kylix je Power PC razvojna okolina sa podrkom za C i C++, te Sadri vlastite prevodioce i grafiki IDE, te program za pronalaenje pogreaka . Prua podrku za baze podataka i XML Java , i FORTRAN.

slika :

KYLIX

523/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

KDE STUDIO GOLD

KDE Studio Gold ( Kompany ) takoer osigurava jednaku funkcionalnost i korisniko suelje kao C ++, te prua podrku za C i C ++. Ima vrlo fleksibilno korisniko suelje.

slika : KDE STUDIO GOLD

524/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Visual SlickEdit

Osigurava jednaku funkcionalnost i korisniko suelje kao jezike te meu ostalim i FTP. Koristi se za otkrivanje pogreaka u Javi.

C ++. Prua podrku za mnoge

slika : SLICK EDIT LOGO

slika : VISUAL SLICK EDIT

525/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

ZAKLJUAK

C ili C ++ programeri koji ele programirati u programima koji su bazirani na Gtk-u trebali bi obratiti pozornost na Anjutu. KDevelop bi ipak trebao biti prva postaja za KDE i Qt programer, dok KDE Studio naalost sam sebe onesposobljuje. Za programere koji prelaze sa Delphia , najvie se preporuuje Kylix. Programeri koji su gradili svoje znanje u Visual Basicu pod Windowsima , ipak preporuujem neto sasvim drugo. Za one koji jo uvijek ne ele ulaziti u opirnost i dubinu C-a i C ++ , bilo bi najbolje da rade u Kylixu.. Navest u jo nekoliko savjeta za programere poetnike. Ako piete neki mali programski kod, ne trebate se optereivati sa radom na nekim monim alatima, jer to je slino kao da gaate vrapca topom. Zato je preporuljivo da svi korisnici koji prelaze sa Windows operativnih sustava koriste Kylix, jer je on upravo tome namijenjen.

526/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Maja ugaj, eljko afar i Damir uric

ECLIPSE

527/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

TO JE ECLIPSE? Eclipse je open source razvojni projekt koji prua stabilnu, kvalitetnu, radnu platformu za razvoj visoko integriranih alata. Sastoji se od 3 projekta: Eclipse Project, Eclipse Tools Project i Eclipse Technology Project. Sve ih nadgleda Project Management Committee (PMC), a vodi Project Charter. Svaki taj projekt sastoji se od nekoliko potprojekata i licenciran je CPL (Common Public License) verzijom 1.0.

to je Eclipse Project?
Eclipse Project sastoji se od jo 3 potprojekta: Platform, JDT Java development tools i PDE Plug-in development environment. Vizija Eclipse-a kao industrijske platforme ostvaruje se tek kada sami korisnici mogu kombinirati alate razliitih proizvoaa prema svojim potrebama i to na nain kojega se ni sami proizvoai nisu dosjetili. Zadatak Eclipse Project-a jest prilagoditi i razviti Eclipse Platform potprojekt i srodne alate da ispunjavaju potrebe korisnika i proizvoaa programskih alata.

to je Eclipse Tools Project?


Eclipse Tools Project predstavlja kljunu toku za graditelje raznih programskih alata, toku koja omoguava stvaranje najboljih alata za Eclipse Platform. Misija Eclipse Tools Project-a jest stvarati iroku paletu alata za Eclipse Platform. Tools Project omoguava jedinstvenu koordinaciju razvoja open source alata; time smanjuje preklapanje i dupliciranje, poveava djeljivost i stvaranje zajednikih komponenti i promie glatko meudjelovanje razliitih tipova alata. Tools Project sastoji se od potprojekata koji predlau, biraju i razvijaju proizvoai alata i Tools Project PMC.

to je Eclipse Technology Project?


Zadatak Eclipse Technology Project-a jest pruati novu mogunost kreatorima open source alata, istraivaima, akademicima i edukatorima za sudjelovanje u trajnom razvoju Eclipse-a. Projekt je organiziran u 3 povezane podgrupe: Istraivanje, Razvoj i Edukacija. Istraivaki projekti razmatraju probleme i pitanja vezana uz istraivanje u Eclipse - srodnim podrujima, kao to su: programski jezici, alati i razvojno okruenje. Projekti Razvoja su mali, neformalno strukturirani projekti koji dodaju nove mogunosti softverskoj bazi Eclipsea. Edukacijski projekti usmjereni su na razvoj edukacijskih materijala, nastavnih pomagala i drugih nastavnih materijala.

528/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

to je Eclipse Platform?
Eclipse Platform je otvoreni produni IDE (Integrated Development Enviroment) za bilo to, ali i ni za to odreeno. Eclipse Platform predstavlja temelje za gradnju i rad integriranih alata za razvoj softvera. Eclipse Platform daje slobodu proizvoaima alata da nezavisno razvijaju alate koje mogu kombinirati sa alatima drugih i to toliko jednostavno da nitko ne moe primijetiti gdje jedan alat zavrava, a drugi poinje.

to je Eclipse SDK?
Eclipse SDK (software developer kit) jedinstveni je spoj komponenti koje su proizvela druga 3 potprojekta: Eclipse Project (Platform, JDT - Java development tools, i PDE - Plugin development environment). Svi dijelovi zajedno stvaraju bogato razvojno okruenje koje programeru omoguava uinkovito razvijanje alata koji se glatko uklapaju u Eclipse Platform.

Kako je Eclipse SDK licenciran?


Eclipse SDK sastoji se od softvera koji je proizveo Eclipse Project u kombinaciji sa softverom nekih drugih open source projekata. Softver koji proizvodi Eclipse Project dostupan je prema Common Public License. Dijelovi drugih projekata dostupni su prema vlastitim licencama.

Razvoj poslovnih aplikacija pomou Eclipse


Openito govorei, razvoj svakog softvera laki je kada se koristi IDE (integrirano razvojno okruenje). Kada se govori o razvoju poslovnih aplikacija, programer obino razmilja o koritenju IDE-a kako bi olakao razvoj aplikacije. S obzirom na to da su zahtjevi razliiti od aplikacije do aplikacije, nije uvijek mogue pronai odgovarajui IDE koji se uklapa u okruenje. esto je potreban framework za razvoj IDE-a kako bi se ovaj problem rijeio. Sreom, tu je Eclipse (open source platforma) koja nudi ba takav framework.

Poslovne perspektive
Eclipse platforma predstavlja framework za prikljune IDE komponente. Izravne prednosti prikljunih IDE komponenti jesu:

529/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Korisnici mogu uitati neke komponente kada su im potrebne i ukloniti ih kada im prestanu biti potrebne. Kod veine komercijalnih IDE-a to nije mogue. Nezavisni prodavai mogu ponuditi specijalizirane komponente, bez razvijanja ostalih jer one su ve dostupne putem Eclipse. Na primjer, komponente project manager ili text editor. Komponente za razvoj zajednikih komponenti: na primjer, prodava koji ima specifini UML editor za odreeni posao, moe ga razviti i integrirati u ve obogaenu Eclipse razvojnu platformu.

Podrka
Kao i kod svih dobrih javno dostupnih projekata, newsgrupe, mailing liste i lanci programera cijelog svijeta podravaju Eclipse. Za gotovo svaku komponentu Eclipse postoji newsgrupa i mailing lista. Komercijalni prikljuci drugih prodavaa nude podrku za licencirane korisnike. Dodatno, sve prikljuke prati korisnika dokumentacija, koja je dostupna i preko IDE-a. Eclipse projekt podravaju i najpoznatija imena industrije, na primjer: Borland, Ericsson, Fujitsu, Hitachi, Hewlett-Packard, IBM, RedHat, SAP i Telelogic.

Poslovne mogunosti
Eclipse podrava poslovni razvoj svojom javno dostupnom razvojnom platformom, jasnom dokumentacijom i iznimnim profesionalnim lanstvom. Stvara nove prikljuke za postojee popularne proizvode i nove linije proizvoda koji e iskoristiti najnovije tehnoloke trendove u razvoju poslovnih aplikacija. Na primjer, myeclipse je specijalizirana verzija Eclipse s prikljucima koji olakavaju kontrolu kompletnog procesa J2EE aplikacija.

Distribucijski razvoj
Distribucijski razvoj, Eclipse je pojednostavnila, integracijom popularnih verzija sustava kontrole kao to su CVS, VSS i ClearCase. Eclipse takoer nudi Repository Provider API koji omoguava prikljuak drugim programerima repositora. Neke od generikih funkcija koje omoguava CVS prikljuak jesu:

530/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

U Eclipse radnom prostoru testirati modul kao projekt Provjeravati promijenjene datoteke Dodati nove datoteke u repozitorij Prepoznati i rijeiti konflikte

Uobiajeni prikljuci
Eclipse prua okvir (prikljuno razvojno okruenje) za stvaranje novih prikljuaka obogaenih dodatnim svojstvima. Zapravo, svi alati Eclipse platforme mogu se interpretirati kao prikljuci i produeci; ne postoji neto kao ugraeni Eclipse.

531/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

PDE (Plug-in Development Environment) PDE (Plug-in Development Environment) je set alata koji omoguuju Eclipse developerima razvoj, testiranje, debuggiranje, izradu i primjenu Eclipse plug-inova, pri radu u Eclipse radnom okruenju. Eclipse moemo shvatiti kao softver koji moemo slagati prema svojim potrebama koristei plug-inove, te bi glavno pravilo kod pisanja novih plug-inova trebala biti mogunost njihove nadopune novima. Eclipse takoer osigurava relativno jednostavan nain pisanja plug-inova s pomou PDE-a, koji se smatra temeljem Eclipse platforme. Tako svaki plug-in pridonosi funkcionalnosti Eclipsea, te se kao takav ukljuuje u rad kada je to potrebno. Svaki plug-in nalazi se u direktoriju eclipse/plugins (sl.1) koji sadri razne datoteke kao to su plugin.xml (opisuje sadraj runtimea Eclipsea), JavaTM code library, ikone, properties datoteke i sl. Sam proces pisanja plug-ina poinje kreiranjem plugin.xml datoteke, pisanjem Java izvornog koda i kompajliranjem koda u biblioteku. Nastavlja se testiranjem samog koda, te pakiranjem plug-ina u formu koja je pogodna za primjenu plug-ina. PDE nije alat koji dolazi razdvojen od samog Eclipsea. On je ugraen u radno okruje Eclipsea, te nudi razne editore, wizarde itd. kojima korisnici mogu pristupiti.

sl. 1 direktorij eclipse/plugins

532/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Konfiguracija PDE-a
Tijekom samog izvoenja mnogi plug-inovi zahtijevaju koritenje nekih drugih pluginova kako bi ispravno radili. Za vrijeme razvoja plug-ina sve biblioteke morale bi biti u build pathu kako bi se kod kompajlirao bez pogreaka. Da bi PDE pruio razvojno okruje koje je identino okruju runtimea u koji e plugin biti ugraen, PDE mora specificirati Target Platform. Specifikacijom target platforme PDE skenira i izlistava sve plug-inove koji su pronaeni na toj lokaciji. Samo oni koje je eksplicitno naveo korisnik grade target platform (sl. 2) i mogu se koristiti u radnom okruju plug-ina, dok su svi ostali zanemareni.

sl. 2 Preferences Target Platform

Kreiranje novog plug-in projekta

533/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Projekt mora sadravati manifest datoteku (opisuje sadraj plug-ina) i build.properties datoteku (sadri informacije koje slue kao vodi kroz proces builda). Za kreiranje novog plug-in projekta PDE nam nudi wizard New Plug-in Project (sl.3) koji moemo nai pod kategorijom Plug-in Development / New Project. Ovaj wizard ne samo da kreira novi projekt, nego i developeru daje mogunost brzog starta tako to kreira plug-in datoteke i prema potrebi Java kod.

sl. 3 New Plug-in Project Wizard Veina plug-inova namijenjena je tomu da sadri pokretake Java kodove; plug-in mora specificirati izvorini direktorij koji e sadravati plug-in kod za vrijeme razvoja i biblioteku gdje e kompajlirani kod biti zapakiran. PDE tada mapira ime biblioteke u izvorini direktorij i sprema te informacije u plugin build.properties datoteku, tako da se ona moe kasnije opet koristiti tijekom build procesa.

534/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Takoer se moe specificirati i output direktorij gdje Java kompajler moe spremati svoje class kompajlirane datoteke projekta - dok Java kod ne sadre svi plug-inovi (npr. dokumentacijski plug-inovi). Tijekom procesa izrade plug-ina developerima, pogotovo poetnicima u radu s Eclipse-om, dostupni su Eclipse templatei. Code Generation wizard (sl.4) generira sav mark-up i kod koji je potreban da bi se proizvela customizirana i potpuno funkcionalna ekstenzija.

sl. 4 Code Generation Wizard Kada odaberemo blank plug-in project, (sl.5) wizard generira plug-in projekt, manifest datoteku, build.properties datoteku i inicijalizira sadraj od tih datoteka bazirano na podacima unesenim u wizard.

535/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

sl. 5 prikaz generiranog blank-plugin project-a

Editiranje plug-in manifest datoteke


Manifest opisuje sadraj plug-ina u Eclipse runtimeu. Sadri 4 glavna dijela: 1. 2. 3. 4. dependencies section - sadri sve plug-inove potrebne plug-inu da se an extension section - deklarira sve funkcionalnosti koje plug-in prua a runtime section - deklarira biblioteke gdje su plug-in kodovi upakirani. an extension points section - deklarira nove function points definirane od kompajlira i sve extension points kojima se koristi platformi

plug-ina koje drugi plug-inovi mogu proirivati.

Dependencies
Lista potrebnih plug-inova odreuje libraries koji e biti na plug-in runtime class pathu. Nakon spremanja manifest datoteke, PDE automatski obnavlja class path projekta tako da sve promjene utjeu na dependency listu, ako takva postoji. Lista potrebnih plug-inova ne bi trebala sadravati neiskoritene stavke. Takvu stavku je lako uoiti zato to se tijekom development vremena plug-in kod se nee htjeti kompajlirati u workspace. EXTRANEOUS stavke tee je uoiti jer su benigne u development vremenu. Mogu usporiti class load u runtimeu kao extra libraries u plug-inu jer se nepotrebno pretrauje classpath.

536/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Prema tome, PDE nudi Find Unused Dependencies (sl.6) mogunost koja trai stavke koje su EXTRANEOUS te nudi mogunost njihova micanja.

sl.6 Find Unused Dependencies

Extensions
Plug-in moe pridonijeti samoj platformi tako to dodaje extension pointove deklarirane od drugih plug-inova. Extension deklaracija mora slijediti shemu definiranu od extension pointova. Shema moe biti jednostavna ili komplicirana onoliko koliko autor eli. Dodajui nove ekstenzije u extensions page, manifest editora ukljuuje kreiranje ugnijeenih elemenata koristei se context menuom i setiranje vrijednosti atributa za te elemente u Properties pogledu. PDE koristi gramatiku extension toke da ispuni context menu s ispravnim nazivima elemenata te nadograuje property pogled sa legalnim atributima odabranog elementa. Menu i elementi menua mogu biti dodani u radno okruje kontribucijom na org.eclipse.ui.actionsets extensions points.

537/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Vrni element ove extenzije jest 'actionset' element koji specificira svoj jedinstveni interni identifikator. Kada je atribut 'visible' postavljen na 'True' tada e actionset biti vidljiv u svim perspektivama (sl. 7).

538/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

sl. 7 extenzije Menu element specificira label menija onakav kakav e se pojaviti u radnom okruju. Element 'separator' kreira menu separator koji takoer slui kao grupa u koju e menu item biti dodan. I na kraju, 'action' element specificira stvarni menu item, koristei se menuom identifikatora i separatorovim imenom 'menubarpath' (atribut indicira slot gdje je item smjeten). Kada je menu akcija odabrana, klasa koja e biti pokrenuta za ispis (konkretno u ovom primjeru 'Hello World' poruke), jest ona specificirana u 'class' atributu.

539/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Runtime
Tip biblioteke, vidljivost i sadraj mogu se namjestiti u Runtime pageu (sl. 8) manifest editora.

sl. 8 Runtime page Library type igra vanu ulogu u runtimeu. Ako je biblioteka deklarirana da sadri i kod i resurse, pristup resursu ili class datoteci iz takve biblioteke rezultira aktivacijom plugina, dok pristup resursu iz biblioteke koji je deklariran tako da sadri samo JAR library nije jo kreiran. Library content sekcija izlistava izvorine direktorije koji e biti kompajlirani u selektiranu biblioteku za vrijeme build procesa. Kada god korisnik modificira listu, PDE automatski obnavlja potrebne entrije u plug-inovoj build.properties datoteci.

540/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Extension points
Definiranje novih extension-pointova zahtijeva pisanje sheme koju svi klijenti extension pointa moraju slijediti da bi se tono procesirali u runtimeu. PDE nudi editor za kompoziciju takve sheme. Ugraeni plug-inovi kao to je ovaj Hello World ne zahtijevaju extension pointove.

Testiranje plug-ina
PDE nudi takoer i launcher u svojoj platformi koji omoguuje test i debuggiranje plug-inova. Runtime workbench pregledava ponaanje plug-inova u okruju u kojem e kasnije biti implementirani. Izlazni direktorij plug-in projekta smjeten je u runtime classpath plug-ina. To omoguuje class loaderu da uvijek bude u mogunosti locirati i uitati najnovije class datoteke plug-ina. Sve ostale execution opcije i postavke nalaze se u samoj launch konfiguraciji (JRE, VM argumenti). Launcher (sl. 9) takoer moe kreirati vie razliitih konfiguracija kako bi testirao (sl. 10) plug-inove pod drukijim uvjetima.

sl. 9 Launcher

541/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

sl. 10 test

Exportiranje plug-ina u zip-file


Zadnje to je potrebno napraviti u izradi plug-ina jest zapakirati plug-in u format koji e se moi lako implementirati u svaki Eclipse bazirani produkt. Sam proces pakiranja plug-in projekta vode build.properties konfiguracijske datoteke. Ova je datoteka strukturirana kao set kljunih vrijednosti (odreuje koje je datoteke potrebno ukljuiti, a koje iskljuiti iz zapakiranog plug-ina). Dva se kljua i koriste pri izradi Hello_world plug-ina: source<library> i bin.includes. Kako bi se omoguio export i pakiranje plug-ina, brine se jo jedan wizard, a to je Deployable Plug-ins and Fragments.(sl. 11)

sl. 11 Deployable Plug-ins and Fragments wizard

542/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Zip-file koji je izgeneriran jednostavno mora biti otpakiran u instalacijski direktorij (sl. 12) bilo kojeg Eclipse-baziranog okruja te tako postaje dio produkta.

sl. 12 instalacijski direktorij

Zakljuak
ini se da plug-inovi ine centralnu stanicu arhitekture Eclipsea, dok druge komponente kao to su fragment featurei i updatei imaju vanu ulogu u razvoju Eclipse produkata.

543/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

ECLIPSE PLATFORM - tehniki pregled Eclipse Platform dizajniran je i graen za ispunjavanje sljedeih zahtjeva: njih podrka razvojnim okolinama GUI i non-GUI baziranih aplikacija izvoenje u raznim operacijskim sustavima, ukljuujui Windows i Linux naglasak na popularizaciji Java programskog jezika za pisanje alata.
TM

podrka konstruiranju razliitih alata za razvoj aplikacija podrka irokom spektru proizvoaa programskih alata, ukljuujui nezavisne podrka alatima za manipulaciju raznih tipova sadraja (npr. HTML, Java, C, omoguavanje savrene integracije alata u razliite sadrajne tipove i preko

softverske prodavae JSP, EJB, XML i GIF)

Glavna uloga Eclipse Platforma jest opskrbljivanje proizvoaa programskih alata mehanizmima, ali i pravilima kojih se potrebno drati da bi alate integrirali u zadane okvire. Ovi su mehanizmi predstavljeni dobro definiranim API-jem, klasama i metodama. Slika 13. prikazuje glavne komponente i API-je Eclipse Platform
Eclipse Platform Workbench JFace SWT NewTool Team Workspace NewTool Help NewTool

Platform Runtime

sl. 13 glavne komponente

544/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Platform Runtime i plug-in arhitektura


Plug-in je najmanja jedinica Eclipse Platforma koja moe biti razvijena i isporuena zasebno. Obino je mali alat napisan kao pojedinani plug-in, dok kompleksni alati imaju svoju funkcionalnost razdijeljenu na nekoliko plug-inova. S iznimkom male jezgre poznate kao Platform Runtime, sve funkcionalnosti Eclipse Platforma locirane su u plug-inovima. Plug-inovi su kodirani u Javi. Tipini plug-in sastoji se od Java koda u JAR biblioteci, nekih read-only datoteka i drugih resursa poput slika, web templatea, kataloga poruka itd. Neki plug-inovi uope ne sadre kod. Jedan takav primjer jest plug-in koji sudjeluje u online pomoi u formi HTML stranica. Plug-in kodna biblioteka i read-only sadraj locirani su zajedno u direktoriju u datotenom sistemu ili u baznom URL serveru. Tu je takoer i mehanizam koji doputa plug-inu da bude sintetiziran iz nekoliko odvojenih fragmenata, svaki u svom vlastitom direktoriju ili URL-u. Ovo je mehanizam koji se koristi kako bi isporuio razliite jezine pakete za internacionalne plug-inove. Svaki plug-in ima manifest datoteku koji deklarira njegovu mogunost povezivanja s drugim plug-inovima. Model povezanosti 'jednostavan' je: plug-in sadri stanovit broj imenovanih nadoveznih toaka (produetaka, extension pointsa) i stanovit broj nadovezivanja na jednu ili vie toaka drugih plug-inova. Plug-in nadovezne toke mogu se 'oslanjati' na druge plug-inove. Npr. workbench plug-in deklarira nadoveznu toku za korisnike preference. Svaki plug-in moe ponuditi svoje korisnike preference definirajui nadovezivanje na tu toku. Nadovezna toka moe imati odgovarajue API suelje. Drugi plug-inovi pridonose implementaciji tog suelja, preko produetka do te nadovezne toke. Svaki je plug-in slobodan definirati novu nadoveznu toku i omoguiti upotrebu novog API-ja za druge pluginove. Pri startanju, Platform Runtime otkriva raspoloiv set plug-inova, ita njihove manifest datoteke i gradi in-memory plug-in registry. Platform spaja nadovezne toke prema imenu s njihovim odgovarajuim prikljunim tokama. Svaki problem, kao to je npr. nadovezivanje na nepostojeu toku, detektira se i logira. Rezultirajui plug-in registry dostupan je preko Platform API-ja. Plug-in se ne moe dodati nakon startanja.
545/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Plug-in manifest datoteka sadri XML. Nadovezna toka moe deklarirati dodatne specijalne XML tipove elemenata na koje bi se nadovezala. Ovo plug-inovima omoguuje povezivanja kojima mogu kolati najrazliitije informacije. tovie, objavljene informacije dostupne su iz plug-in registryja, bez aktivacije sudjelujueg plug-ina ili loadanja bilo kakvog koda. Ova je osobina kljuna za podravanje velike baze instaliranih plug-inova od kojih su samo neki potrebni u bilo kojem danom korisnikom session-u. Dok plug-inov kod nije loadan, njegovo zauzee memorije i djelovanje na vrijeme start-upa jest zanemarivo. Koritenjem XML baziranih manifesta olakano je pisanje alata koji podravaju kreiranje plug-inova. Plug-in razvojna okolina (PDE), koja je ukljuena u Eclipse SDK - jest takav alat. Plug-in je aktiviran kada njegov kod zapravo treba biti izveden. Jednom aktiviran, plug-in koristi plug-in registry za otkrivanje i pristupanje ekstenzijama prikljuenim na njegove 'spojne' toke. Npr. plug-in koji sadri referencijalnu korisniku ekstenziju moe saznati sve sadrane korisnike preference i pristupiti njihovim imenima te sloiti preference dijalog. To moe biti napravljeno samo upotrebom informacija iz registryja, bez potrebe aktiviranja bilo kojeg sudjelujueg plug-in. Sudjelujui plug-in bit e aktiviran tek kada korisnik izabere preferencu s liste. Aktiviranje plug-inova na ovaj nain ne dogaa se automatski; postoji odreen broj API metoda koje slue iskljuivo za aktivaciju plug-ina. Jednom aktiviran, plug-in ostaje aktivan sve dok se Platform ne iskljui. Svaki plug-in opremljen je poddirektorijem u koji pohranjuje podatke specifine za njega; ovaj mehanizam omoguuje plug-inovima da prenose vana stanja izmeu izvoenja. Plaform Runtime zahtijeva specijalni produetak za aplikacije. Kada je instanca Platforma pokrenuta, ime aplikacije specificirano je preko komandne linije; jedini plug-in koji se aktivira inicijalno je onaj koji ta aplikacija zahtijeva. Odreivanjem seta dostupnih plug-inova unaprijed i podravajui znaajnu razmjenu informacija izmeu plug-inova bez potrebe da ih se aktivira, Platform moe opskrbiti svaki plug-in bogatim izvorom bitnih informacija o kontekstu u kojem djeluje. Njegov kontekst ne moe se mijenjati tijekom izvoenja Platforma, zato nema potrebe za kompleksnim dogaajima koji bi izvjetavali kada se kontekst mijenja. Duga start-up sekvenca izbjegnuta je, to je glavni nain izbjegavanja bug-ova zbog nepredvienog redoslijeda aktivacije pluginova.
546/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Eclipse Platform izvodi se s pomou obinog poziva standardne Java virtualne maine. Svakom plug-inu dodijeljen je njegov Java class loader koji je izravno odgovoran za loadanje svoje klase. Svaki plug-in izriito naglaava svoju ovisnost o drugim plug-inovima, od kojih oekuje da imaju direktan pristup klasama. Plug-in kontrolira vidljivost public klasa i upletanje u njihove biblioteke. Ova informacija sadrana je u plug-in manifest datoteci; pravila vidljivosti forsirana su u Runtime-u, plug-in class loaderom. Mehanizam plug-inova upotrebljava se i za podjelu samog Eclipse Platforma. Zaista, zasebni plug-inovi ine workspace, work bench, itd. ak i Platform Runtime ima svoj vlastiti plug-in. Non-GUI konfiguracije Platforma mogu jednostavno preskoiti plug-in workbencha, i druge plug-inove koji ovise o njemu. Eclipse Platform update manager downloada i instalira nove mogunosti ili naprednije verzije postojeih mogunosti. Update manager konstruira novu konfiguraciju dostupnih plug-inova koji e se upotrijebiti sljedei put kada Platform bude pokrenut. Ako se rezultat unapreivanja ili instaliranja pokae kao nezadovoljavajui, korisnik se moe vratiti na ranije koritenu konfiguraciju. Eclipse Platform Runtime takoer osigurava mehanizam za dinamina proirenja objekata. Klasa koja implementira "prilagodljivo" suelje deklarira svoju instancu otvorenom ponaanjima tree strane. Prilagodljiva instanca moe biti zahtjev za adapter objekt koji implementira interface ili klasu. Npr. resursi workspacea prilagodljivi su objekti; workbench dodaje adaptere koji osiguravaju prikladnu ikonu i tekst labelu za resurse. Svaka strana moe dodati ponaanje postojeim tipovima (i klasama i interfaceima) prilagodljivih. Vie strana moe neovisno nadovezati isti prilagodljivi objekt, svaki iz razliitih razloga. Mehanizam koristi samo Java tip prilagodljivog objekta (ne poveava potronju memorije). Bilo koji plugin moe iskoristiti ovaj mehanizam za dodavanje ponaanja postojeim prilagodljivim objektima i definiranje novih tipova prilagodljivih objekta za druge plug-inove i mogue ekstenzije.

Workspace

547/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Razliiti alati ukljueni u Eclipse Platform rade po regularnim datotekama u korisnikom workspaceu. Workspace sadri jedan ili vie top-level projekata, gdje se svaki projekt mapira na odgovarajui direktorij koji je specificirao korisnik, u datotenom sustavu. Razliiti projekti u workspacea mogu se mapirati u razliite direktorije ili driveove, iako se, po defaultu, svi projekti mapiraju u srodne poddirektorije u jedinom direktoriju workspacea. Svaki projekt sadrava datoteke koje je kreirao i njima manipulirao korisnik. Sve datoteke u workspaceu direktno su dostupne standardnim programima i alatima operacijskog sustava. Alati integrirani u Platformu opskrbljeni su API-jem za bavljenje resursima workspacea (kolektivni naziv za projekte, datoteke i direktorije). Resursi workspacea su zastupljeni prilagodljivim objektima, tako da ostali dijelovi mogu proiriti svoje djelovanje. Kako bi se minimizirao rizik od sluajnog gubljenja datoteka, nie rangirani history mehanizam workspacea prati prethodni sadraj bilo koje datoteke koja je promijenjena ili izbrisana integriranim alatima. Korisnik kontrolira rukovoenje historyjem s pomou prostorno i vremenski baziranih preferenca. Workspace sadri marker mehanizam za resurse, koji biljei dogaaje. Markeri se upotrebljavaju za snimanje razliitih biljeaka kao to su compiler error messages, "to-do" lista, bookmarks, search hits i debugger breakpoints. Plug-inovi mogu predoiti nove podtipove markera i kontrolirati pohranjivanje izmeu izvoenja. Platform osigurava generalni mehanizam koji doputa alatu da prati promjene u resursima workspace-a. Registriranjem resource change listenera, alatu je zajameno primanje naknadne obavijesti o svim manipulacijama resursa, brisanju ili promjeni u sadraju datoteka. Platform odgaa obavijest o dogaaju do zavretka seta manipulacija resursima. Izvjetaj o dogaaju ima formu stabla promjena koje opisuje efekt itavog seta operacija. Promjene resursa takoer sadre informacije o promjenama markera. Alati poput kompajlera i linkera moraju obraditi koordiniranu analizu tisua zasebnih datoteka. Platform nudi inkrementalni project-builder. Uvod u inkrementalni build jest upravo koritenje gore navedenog stabla promjena resursa tj. razlika od zadnjeg buildanja. Platform omoguuje vie razliitih inkrementalnih projekt-buildera koji mogu biti registrirani na istim projektima. Mogui workspace auto-build automatski okida potrebne build-ove nakon svake modifikacije resursa.

Workbench i UI Toolkit

548/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Eclipse Platform UI sagraen je oko workbencha koji omoguava cjelokupnu strukturu i predstavlja nadogradiv UI za korisnika. Workbench API i implementacija sagraeni su od dva programska alata: SWT widget set i grafika biblioteka integrirana window sistemom, ali OSJFace UI toolkit implementiran upotrebom SWT koji pojednostavnjuje neovisnim API-jem. uobiajene UI programske zadatke.

SWT (Standard Widget Toolkit)


SWT nudi uobiajeni OS-neovisni API za widget-e i grafiku, implementiran na nain da doputa tijesnu integraciju s osnovnim window-baziranim sistemom. Cijeli Eclipse Platform UI i alat koji se ukljuuje u njega, koriste se SWT-om za prezentaciju informacija korisniku. Glavna stvar u dizajnu widget toolkit-a jest tenzija izmeu prenosivog programskog alata i window-baziranog sistema integriranja. Java AWT nudi low-level widgets kao to su liste, tekstualna polja i buttoni, ali ne i high-level widgets kao to su stabla ili rich tekst. Graditi UI upotrebljavajui samo AWT znai programirati na najmanje uobiajenom denominatoru od svih OS window sistema. Java Swing programski alat rjeava ovaj problem emuliranjem widgets kao stabla, liste i rich teksta. Swing takoer omoguuje izgled i osjeaj emulator sloja koji pokuava stvoriti aplikaciju koja izgleda poput osnovnog windowbaziranog sistema. Ipak, stalno oponaanje widgetsa zaostaje za izgledom i osjeajem prvotnog widgetsa i korisnikova interakcija s emuliranim widgetsom obino je dovoljno razliita da bude zamjetljiva, stvarajui tekoe u izgradnji aplikacija koje usporeuju headon s shrink-wrapped aplikacijama razvijenim specijalno za odreeni window sistem. SWT rjeava ovu stvar definirajui uobiajeni API koji je dostupan preko mnogobrojnih window-podranih sistema. Za svaki razliiti window-bazirani sistem SWT implementacija osigurava pogodnu simulaciju. Uobiajeni niskorazinski widgets kao to su liste, tekstualna polja i buttoni ugraeni su standardno svugdje. Ali neki generalno korisni vie-razinski widgetsi prema potrebi mogu biti proslijeeni na neki window sistem. Npr. SWT toolbar widget implementiran je kao toolbar widget u Windowsima i kao emulirani widget u Motifu .

549/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Uska integracija s osnovnim window-baziranim sistemom nije striktno stvar izgleda i osjeaja. SWT je takoer u interakciji s desktop obiljejima, kao to je "drag and drop" i moe upotrebljavati komponente razvijene s OS komponentnim modelima, kao Windows ActiveX kontrole. Ova strategija uvelike pojednostavnjuje implementaciju, ispravljanje pogreaka i odravanje SWT zato to doputa svim interesantnim razvojnim programima da se izvravaju u Javi. Naravno, ovo nije direktna briga za tipine klijente SWT-a s obzirom na to da su oni kompletno skriveni iza window sistem-nezavisnih SWT API.

JFace
JFace je UI toolkit s klasama za obavljanje mnogo uobiajenih UI programskih zadataka. JFace je window-sistem nezavisan u svojem API-ju i u svojim implementacijama i dizajniran da radi sa SWT bez njegova sakrivanja. JFace se sastoji od uobiajenih komponenti UI toolkita, imid i font registryja, okvira dijaloga, preferenca, wizarda i izvjetaja o napredovanju za dugotrajne operacije. Dva njegova najinteresantnija obiljeja su actions i viewers. Akcijski mehanizam doputa korisnikim komandama da budu definirane nezavisno od njihovih tonih pozicija u UI-u. Akcija predstavlja komandu koja moe biti okinuta od strane korisnika putem tipke, podatka u meniju ili podatka u tool baru. Svaka akcija zna svoj klju UI-propertyja (labela, ikona, tool tip, itd.) koji se koriste za konstrukciju pogodnih widgetsa kako bi se akcija mogla prezentirati. Ovo razdvajanje doputa istoj akciji da bude koritena na vie mjesta u UI-ju, to znai da je lako mijenjati gdje je akcija prisutna u UI-u bez potrebe mijenjanja koda za samu akciju. Vieweri su model-bazirani adapteri za odreene SWT widgetse. Vieweri upravljaju uobiajenim ponaanjem i osiguravaju vierazinsku semantiku od one dostupne sa SWT widgets-a. Standardni Vieweri za liste, stabla i tabline podrke populariziraju viewer elementima iz klijentske domene i dre widgets u sinkronizaciji s promjenama u toj domeni. Ovi vieweri su konfigurirani content i label providerima. Content provider zna kako mapirati viewerov ulazni element u oekivani content viewer i kako da updateaa promjene domene u odgovarajue promjene viewera. Label provider zna kako da proizvede specifini string label i ikonu potrebnu za prikaz svakoga danog elementa domene u widgetu. Vieweri mogu, opcionalno, biti konfigurirani s element-based filtrima i sorterima. Klijenti su obavijeteni o

550/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

izboru i dogaajima u podruju elemenata domene kojima se opskrbljuje Viewer. Viewerova implementacija rukuje mapiranjem izmeu elemenata domene i SWT widgetsa, prilagoavajui se za filtrirani view na elemente i resortiranje potrebnog. Standardni viewer za podravanje tekst-uobiajenih operacija kao to su dvostruko "klikanje", undo, bojenje i navigacija slovnim indeksom ili linijskim brojem. Tekst viewer nudi dokumentni model klijentu i rukovodi konverzijom od dokumenta do informacije traene od SWT ureenog tekst widgeta. Vie viewera moe biti otvoreno u istom modelu ili dokumentu; svi su aurirani automatski kada se model ili dokument promijeni u bilo kojem od njih.

Workbench
Za razliku od SWT i JFace, koji su glavni sadraj UI toolkit-a, Workbench osigurava UI osobnost Eclipse Platforma i opskrbljuje strukture u kojima alati surauju s korisnikom. Zbog ove centralne i kljune uloge, workbench je sinonim s Eclipse Platform UI kao cjelinom. Workbench API ovisan je o SWT API-ju i u manjoj mjeri o JFace API-ju. Implementacija workbencha jest buildana koritenjem i SWT-a i Jface-a. Java AWT i Swings nisu koriteni. Paradigma Eclipse Platform UI temelji se na editorima, viewerima i perspektivama. S korisnikove toke gledita, prozor workbench-a vizualno se sastoji od viewera i editora. Perspektive se manifestiraju u selekciji i obradi editora i viewera vidljivih na ekranu. Editori doputaju korisniku da otvori, obradi i spremi objekte. Oni slijede otvorispremi-zatvori ivotni krug, vrlo slino alatima baziranim na datotenom sustavu, ali mnogo tjesnije integriranim u workbenchu. Kada je aktivan, editor moe izvoditi akciju menuom workbencha i tool bara. Platform osigurava standardni editor za tekstualne resurse; vie specijalizirani editori su osigurani drugim plug-inovima. Vieweri nude informacije o nekim objektima na kojima korisnik radi u workbenchu. Viewer moe asistirati editoru dobavljanjem informacija o dokumentima koji se ureuju. Npr. standardni pripadajui view pokazuje osobine objekta izabranog u drugom view-u. Vieweri imaju jednostavniji ivotni krug nego editori: modifikacije uinjene u Vieweru (kao to je npr. promjena u vrijednosti osobine), generalno, spremaju se odmah i promjena se odmah reflektira u druge povezane dijelove UI-ja. Platform osigurava nekoliko standardnih Viewera; dodatni Vieweri osiguravaju se preko drugih plug-inova.

551/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Prozor workbencha ima vie odvojenih perspektiva, od kojih je samo jedna vidljiva u danom trenutku. Svaka perspektiva ima svoje vlastite viewere i editore koji su ureeni (tiled, stacked ili detached) za prezentaciju na ekranu (neki, prema potrebi, mogu biti skriveni). Nekoliko razliitih tipova viewera i editora mogu u perspektivi biti istodobno otvoreni. Perspektiva kontrolira inicijalnu poglednu vidljivost, layout i akcijsku vidljivost. Korisnik moe brzo mijenjati perspektivu kako bi izvodio razliite zadatke i moe lako presloiti i prilagoditi perspektivu kako bi bolje odgovarala odreenom zadatku. Platform osigurava standardnu perspektivu za openite resursne navigacije, online pomo i team support. Dodatne perspektive osiguravaju drugi plug-inovi. Alati se integriraju u ove editore-poglede-perspektive UI paradigme dobro definiranim nainima. Glavne produne toke doputaju alatima da poveaju workbench: Dodaju novi tip editora. Dodaju novi tip pogleda. Dodaju nove perspektive, koje araniraju stare i nove viewe kako bi odgovarali

novom korisnikovu zadatku. Platformovi standardni vieweri i editori prisutni su koristei se ovim mehanizmom. Alati takoer mogu poveati postojee editore, viewere i perspektive: Dodaju nove sekcije na postojee pogledne lokalne menije i tool bare. Dodaju nove akcije meniju workbencha i alatnom baru kad postojei editor postane aktivan. Dodaju nove akcije "pop-up" sadravajuem meniju postojeeg viewa ili editora. Dodaju nove viewere, akcijske setove i preace u postojeoj perspektivi.

Platform se brine za sve aspekte workbench prozora i upravljanje perspektivom. Editori i vieweri se automatski instaliraju u sluaju potrebe i odbacuju kad vie nisu potrebni. Prikazani labeli i ikone sadrane u alatima izlistane su u plug-in manifestu tako da workbench moe kreirati menije i alatne barove bez potrebe aktiviranja sudjelujuih plug-inova. Workbench ne aktivira plug-in dok korisnik ne pokua iskoristiti funkcionalnost koju taj plug-in prua. Jednom kada editor ili pogled postanu aktivna strana perspektive, mogu se koristiti uslugama workbencha za lociranje aktivacije i selekcije.

552/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

UI Integracije
Alati koji su napisani u Javi s pomou Platform API-ja postiu najvii stupanj integracije u Platformu. S druge strane, vanjski alati koje pokrene Platform moraju otvoriti svoje, posebne prozore kako bi mogli komunicirati s korisnikom i moraju imati pristup korisnikovim podacima preko podlonog datotenog sistema. Njihove integracije su zato vrlo slabe, pogotovo na UI razini. U nekim okolinama Eclipse Platform takoer podrava ovakve vrste integracije: Workbench ima ugraenu podrku za umetanje bilo kakvog OLE dokumenta kao editora (samo u Windowsima). Ova opcija omoguuje tijesnu UI integraciju. Plug-inov alat moe implementirati kontejner koji premouje Eclipse Platform API s ActiveX kontrolom kako bi bila upotrijebljena u editoru, Vieweru, dijalogu ili wizardu (samo u Windowsima). SWT omoguuje potrebnu niskorazinsku podrku. Ova opcija omoguuje tijesnu UI integraciju. Plug-inov alat moe upotrebljavati AWT ili Swing za otvaranje zasebnog prozora. Ova opcija omoguuje slabu UI integraciju, ali doputa usku integraciju ispod UI

Timska podrka
Eclipse Platform doputa projektu u workspace-u da bude smjeten ispod verzije i u 2.1 izdanju (oujak 2003.) Eclipse SDK; ovo vrijedi za Windows , ali ne i za Linux . Naravno, AWT i Swing trebaju biti prisutni u konfiguraciji baznog Java Runtime okoline koji izvodi Eclipse Platform.
TM

Pomo

553/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Mehanizam za pomo Eclipse Platforma doputa alatu da definira i donosi dokumentaciju u jednoj ili vie online knjiga. Npr. alat obino donosi dokumentaciju stiliziranu za pomo u obliku vodia za korisnike i API dokumentaciju (ako je ima) u zasebnom programskom vodiu. Sadraj je dodan u HTML datoteke. Objekti koji ureuju sirovi sadraj u online knjige koristei pogodne navigacijske strukture izraeni su zasebno u XML datotekama. Ovo odvajanje doputa prije postojeoj HTML dokumentaciji da bude inkorporirana direktno u online knjige bez potrebe za editiranjem ili njezinim prepravljanjem. Dodana navigacijska struktura predstavlja sadraj knjiga kao stablo tema. Svaka tema, ukljuujui i nelistovne teme, moe imati link na stranicu golog sadraja. Obina knjiga moe imati viestruke alternativne liste top-level tema, doputajui nekima ili svim informacijama da budu prisutne u totalno razliitim organizacijama; npr. organiziranim prema zadacima ili alatima. XML navigacijska datoteka i HTML sadrajna datoteka su pohranjeni u plug-inovu root direktoriju ili poddirektoriju. Mali alati obino stavljaju svoju dokumentaciju za pomo u isti plug-in gdje je i kod. Veliki alati imaju odvojene plug-inove za pomo. Platform upotrebljava svoj vlastiti interni dokumentacijski server za pribavljanje aktualnih web stranica iz web dokumenta. Ovaj korisniki server doputa Platformu razrjeavanje specijalnih interplug-in linkova i ekstrakiranje HTML stranice iz ZIP arhiva. Kada se organizira sistem za pomo, potpuno tematsko stablo mogue je jedino kada je set alata za dokumentaciju zatvoren. S Eclipse Platformom, set alata je uvijek nadoveziv i posljedica toga jest da struktura dokumentacije za pomo mora biti modularna. Platformov mehanizam za pomo doputa alatu dodavanje i sirovog sadraja i tematskog seta, kako bi indicirao gdje treba umetnuti svoju temu u ve postojee tematsko stablo kao predefiniranu toku za umetanje.

Epilog
Ukratko, Eclipse Platform opskrbljuje jezgru generikih building blokova i API-ja kao to su workspace i workbench, i ostale razliite toke ekstenzija preko kojih nove

554/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

funkcionalnosti mogu biti integrirane. Kroz te ekstenzije, alati pisani kao zasebni plug-inovi mogu proiriti Eclipse Platform. Korisniku je predstavljen IDE sa specijaliziranim setom dostupnih alatnih plug-inova. Ipak, ovo zapravo nije kraj prie nego njezin poetak. Alati u pravilu definiraju nove toke ekstenzija i svoje vlastite API-je i tako slue kao temelji i integracijske toke za nove, nadolazee alate.

555/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Goran Jurii

PIPE I FIFO

556/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

UKRATKO O PROCESIMA
Najkraa definicija procesa bi bila: proces je instanca programa koji se trenutno izvodi. Svaka instanca ima svoj memorijski prostor i stanje izvoenja. Proces mora imati svoj ID (identifikacijski broj) u obliku nenegativnog integer-a tako da operacijski sustav moe razlikovati procese, alocirati i upravljati sa sistemskim resursima koji su potrebni za izvoenje pojedinog procesa. Naravno, svaki process ID je jedinstven. Isto tako, svaki proces ima i svoje tzv. file descriptor-e. *proces ID 0 je najee sistemski proces koji se zove swapper i dio je kernela *proces ID 1 je init proces i pokree ga kernel na kraju bootstrap procedure; podie ga UNIX sistem nakon uitavanja kernela; init ita inicijalizacijske datoteke dovodi sustav u potrebno stanje UNIX je vieprogramski sustav koji moe pokretati vie procesa istodobno. Proces u UNIX-u pokree jedan program i ima inicijalno jedan upravljaki thread. UNIX podrava procese koji su aktivni ak kad korisnik nije prisutan tzv. background procese koji se nazivaju daemons. Daemons-i su startani automatski pri boot-u sustava. Proces u UNIX-u se kreira pomou sistemskog poziva fork kojim se kreira kopija originalnog procesa - child proces , dok proces koji poziva fork sistemski poziv je parent proces. Svaki proces ima i parent process ID koji je inicijalno ID procesa koji ga je stvorio. Parent i child procesi su povezani s obzirom da su promjene koje se dogaaju na jednom od ta dva procesa vidljive na onom drugom. getpid i getppid sistemski pozivi vraaju process ID i parent process ID (ostale funkcije za dobivanje identifikatora procesa nalaze su u dodatku A). Pid_t je unsigned integer koji predstavlja ID procesa. Na 1. primjeru, program ispisuje svoj proces ID i ID svog parent procesa.

557/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Primjer 1. #include<stdio.h> #include<unistd.h> int main() { printf (ID procesa je %d\n, (int) getpid() ); printf (ID parent procesa je %d, (int) getppid() ); return 0; } Povratne vrijednosti su cast-ane na long jer nema garancije da e pid_t stati unutar int-a. Primijetite da ako pokrenete ovaj program vie puta, javlja se razliit proces ID jer svako pokretanje programa je novi proces. S druge strane, ako pokrenete program svaki put iz istog shell-a, parent process ID (odnosno, process ID shell procesa) je svaki put jednak. /*definira fork() i pid_t*/

Stvaranje procesa
Kao to smo ve spomenuli, proces moe stvoriti novi proces putem sistemskog poziva fork. Proces koji poziva postaje na taj nain parent proces, a stvoreni proces je child proces. Funkcija fork kopira memorijsku sliku parent procesa, tako da novi proces prima kopiju adresnog prostora parent procesa. Oba procesa nastavljaju na instrukciju nakon fork.

Primjer 2. #include<unisth.h> pid_t fork( void );

558/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Povratna vrijednost funkcije fork je vana karakteristika koja omoguava parent i child procesima da se meusobno razlikuju. Funkcija fork vraa 0 child-u te vraa child process ID parent procesu. U sluaju neuspjeha fork vraa -1 i ne stvara child process. Zvui zbunjujue? Evo primjera koji e pomoi. Primjer 3. #include<stdio.h> #include<unistd.h> int main() { int x; x=0; fork(); x=1; printf (Ja sam process %ld I moj x je %d\n, (long)getpid(), x); return 0; } Prije fork-a, jedan proces se izvrava sa jednom x varijablom. Nakon fork-a, dva nezavisna procesa se izvravaju, svaki sa svojom kopijom x varijable. Budui da se parent i child procesi izvravaju nezavisno, oni ne mijenjaju istu memorijsku lokaciju. Svaki proces ispisuje poruku sa svojim process ID i vrijednosti varijable x. Parent i child procesi, u ovom primjeru, izvravaju iste instrukcije jer u kodu nismo testirali povratnu vrijednost funkcije fork. Primjer 4. demonstrira kako testirati povratnu vrijednost funkcije fork.

559/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Primjer 4. #include <stdio.h> #include<unistd.h> #include<sys/types.h> int main(void) { pid_t childpid; childpid = fork(); if(childpid == -1) { perror(Neuspjeli pokusaj fork-anja!); return 1; } /*kod za child*/ if (childpid == 0) printf(Ja sam child %ld\n, (long)getpid() ); else /*kod za parent*/ printf(Ja sam parent%lj\n, (long)getpid() ); return 0; } Originalni proces u primjeru 4. ima vrijednost varijable childpid koja nije 0, tako da izvrava drugu printf naredbu. Child proces ima vrijednost varijable childpid 0 i izvrava prvu printf naredbu. Zar bi moglo ii bez Hello world!? Naravno da ne; pa u to ime evo jednog primjera koji koristi sistemske pozive za stvaranje child procesa koji ispisuje Hello world!.

560/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Primjer 5. #include<unistd.h> /*definira fork() I pid_t*/ #include<sys/wait.h> /*definira wait() sistemski poziv*/ pid_t child_pid; /*smjestaj pid child procesa*/ int chile_status; child_pid = fork(); switch (child_pid) { /*fork() NIJE uspio*/ case -1: perror(fork); /*ispisuje vec definiranu poruku o gresci*/ exit (1); /*fork() JE supio, sad smo unutar child procesa*/ case 0: printf(Hello world!\n); exit (0); /*ovdje izlazimo iz CHILD procesa*/ default: } /* ovdje mozemo dodati parent kod */ *wait() sistemski poziv eka dok child process ne zavri, i sprema njegov izlazni status u varijablu *perror ispisuje poruku o greci temeljenu na errno varijabli Funkcija fork() kopira i dio memorije poznat kao U Area (User Area). Taj dio memorije sadri izmeu ostalog, file descriptors tablicu procesa. To znai da nakon povratka iz fork() poziva, child proces nasljeuje sve file-ove koji su otvoreni u parent procesu. Isto tako, file-ovi koji su otvoreni nakon fork() poziva, se ne dijele izmeu parent i child procesa. Ako jedan proces zatvori zajedniki file, on je i dalje otvoren u drugom procesu. /*fork() je uspio, sad smo unutar PARENT procesa*/ wait (&child_status); /*cekaj dok ne zavrsi child process*/ /*sta je tocno napravio child process?*/

561/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

KOMUNIKACIJA MEU PROCESIMA (IPC INTERPROCESS COMMUNICATION)


Oita je potreba za komunikacijom meu procesima u svrhu razmjene i kontroliranja podataka. IPC (Interprocess Comunication) predstavlja transfer podataka meu procesima. Postoje razni naini komunikacije poput: dijeljena memorija - omoguava procesima komunikaciju piui i itajui na odreenu memorijsku lokaciju mapirana memorija - slina dijeljenoj, ali se ne koristi memorijskom adresom nego odreenim file-om socket-i - omoguavaju komunikaciju meu procesima koji se mogu nalaziti ak i na razliitim raunalima pipe omoguava sekvencijalnu komunikaciju srodnih procesa FIFO radi na slinom principu kao i pipe, s razlikom to omoguava povezivanje procesa razliitih parent-a semafori omoguavaju sinkronizaciju procesa signali kratke poruke kojima je omogueno slanje zahtjeva za prekid procesa

562/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Na slici 1. vidi se podjela mehanizama IPC-a.

MEHANIZMI IPC-a

Za procese na istom host-u

Za procese na odvojenim hostovima

Za razmjenu podataka

Za sinkronizaciju

Mreni mehanizmi

semaphores Remote procedure call (RPC)

signals Transport lazer interface (TLI)

pipes sockets

message queues

shared memory

files

Slika 1.

563/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

PIPE (ILI CJEVOVOD)


Pipe je komunikacijski kanal izmeu dva procesa. Putem njega dva procesa mogu izmjenjivati podatke i to half-duplex nainu rada. To znai da u jednom trenutku samo jedan proces moe slati, a drugi primati podatke. shell komande mogu se meusobno povezati tako da izlaz jednog procesa bude direktan ulaz u drugi proces. Upotreba sa naredbom shell izgleda ovako: naredba1 | naredba2 Prema slici 2. vidljivo je to se tono dogaa. Uzmimo, kao primjer, da elimo ispisati imena file-ova u direktoriju koristei naredbu ls | lpr. Tada shell stvara proces ls i odvojeni proces lpr, povezujui ih sa dva pipe-a. Proces ls pie podatke u pipe, a proces lpr ita podatke iz pipe-a. Tok podataka ima samo jedan smjer, od ls prema lpr.

Slika 2.

*pipe-ovi koriste meuspremnike (buffer cashe) veliine jednog bloka (obino 512 bajtova)

564/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Kako to funkcionira u pozadini?


Openito se procesi povezuju pipe-om na sljedei nain: napraviti cjevovod napraviti proces child koji e itati u child-u zatvoriti kraj pipe-a na kojeg se pie (dodati druge stvari ako je potrebno, to se razlikuje od sluaja do sluaja) izvriti program za child koji ita u parent-u zatvoriti kraj pipe-a s kojeg se ita (dodati druge stari ako je potrebno, kao i u child procesu) ako child treba pisati u pipe, stvoriti proces i izvriti program ako parent treba pisati, neka pie Glavni nedostatak komunikacije meu procesima posredstvom pipe-a je da procesi moraju biti povezani (srodni; roditelj dijete). Pipe se ne moe kreirati nakon to su procesi ve stvoreni, jer proces koji stvara cjevovod ne moe prenijeti tzv. file descriptor-e drugom procesu.

Cjevovod stvaramo pozivom pipe(). Odnosno: Int pipe(int fildes[2]) Pipe vraa dva file descript-ora, fildes[0] i fildes[1]. Podaci pisani u fildes[1] mogu se itati iz fildes[0] po sistemu First-In-First-Out. Za pisanje u pipe iz procesa koristi se poziv write() u file descriptor fildes[1], a za itanje iz cjevovoda koristi se poziv read() uz file descriptor fildes[1]. Pipe zatvaramo pozivom close(). Ako je sve uspjeno izvreno, pipe vraa 0; ako nije pipe vraa -1 i postavlja errno. Program moe pristupiti pipe-u samo putem file descriptor-a. Zbog toga pipe moe koristiti samo onaj proces koji ga je stvorio i potomak koji je naslijedio descriptor-e putem fork-a.

565/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Kada process pozove read() iz pipe-a, read() odmah vraa ako pipe nije prazan. Ako je pipe prazan, read() eka dok se neto ne upie u pipe toliko dugo koliko proces dri pipe otvoren za pisanje. Budui da slika govori vie nego 1000 rijei.. Ovako to izgleda kad su oba kraja pipe-a otvorena za oba procesa ( pipe(p) ):

Parent write( )

p[1]

p[1]

Child write( )

pipe read( ) p[0] p[0] read( )

A ovako izgleda kada je sve spremno za transfer podataka:

Parent

p[1]

Child write( )

pipe read( ) p[0]

566/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Grafiki prikaz uspostavljanja komunikacije uz pomo pipe-a


KORAK 1. proces A stvara pipe i dobiva dva file descriptor-a

pipe
KORAK 2. process A stvara dva child

Procesa B i C. B i C nasljeuju descriptor-e.

B
KORAK 3. Svaki proces zatvara onaj

Dio pipe-a koji mu ne treba.

KORAK 4. Proces B moe pisati, a proces C moe itati iz pipe-a.

B
write()

C
read()

567/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Na redu je konkretan primjer gdje parent proces ita unos sa tastature i alje ga child procesu koji e ga ispisati na monitor.

Primjer 6. #include<stdio.h> #include<unistd.h> /*posao koji obavlja child proces*/ void do_child(int data_pipe[]) { int c; int rc; /*podaci primljeni od parent-a*/ /*povratna vrijednost od read()*/ /*prvo zatvaramo write dio pipea*/

close(data_pipe[1]);

/*petlja koja cita podatke iz pipe-a i ispisuje ih*/ while ((rc = read(data_pipe[0], &c, 1)) > 0 { putchar(c); } exit(0); } /*posao koji obavlja parent proces*/ void do_parent(int data_pipe[]) { int c; /*podaci primljeni od korisnika*/ int rc; /*povratni status od getchsr()*/ /*prvo zatvaramo nepotrebni read dio pipe-a*/ close(data_pipe[0]);

568/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

/*sad postavljamo petlju za citanje korisnickog unosa I upis u pipe*/ while ((c = getchar()) > 0) { /*upisi podatke u pipe*/ rc = write(data_pipe[1], &c, 1); if (rc == -1) { perror(Parent); close(data_pip[1]); exit(1); } } /*u slucaju neuspjeha obavijesti o gresci I izai*/

/*ako smo dosli do EOF*/ close(data_pipe[1]); /*zatvori pipe tako da child zna da smo gotovi*/ exit(0); }

/*glavna funkcija*/ int main(int argc, char* argv[]) { int data_pipe[2]; /*niz za spremanje file descriptors-a*/ int pid; int rc; /*prvo stvorimo pipe*/ rc = pipe(data_pipe); if (rc == -1) { perror(pipe); exit(1); /*pid child procesa*/ /*za spremanje povratnih vrijednosti*/

569/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

} pid = fork(); switch (pid) { case -1: exit(1); case 0: default: } return 0; } Dakle, child process je zatvorio write kraj pipe-a (jer treba samo itati iz pipe-a), dok je parent proces zatvorio read kraj pipe-a (jer treba pisati u pipe). *errno kernel javlja razlog greke tako da sprema broj greke u globalnu varijablu errno (sys/errno.h); perror(string) trai broj greke koja se dogodila te pie na standard error poslani string i ispisuje opisnu poruku o greci /*unutar child procesa*/ do_child(data_pipe); /*unutar parent procesa*/ do parent(data_pipe); /*fork nije uspio*/ perror(fork);

Postoji jo jedan nain na koji moemo stvoriti pipe; putem tzv. formatted pipeing-a. Sintaksa je sljedea: FILE *popen(char *command, char *type)

570/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Na taj nain otvaramo pipe za I/O gdje je command proces koji e se povezati sa pozivajuim procesom i na taj nain stvoriti pipe. type je ili r - za itanje, ili w - za pisanje. Pipe koji smo stvorili na ovaj nain bi uvijek trebali zatvoriti sa *stream). Za komunikaciju sa pipe-om koristimo fprintf() i fscanf(). *u C-u postoje dvije klase funkcija koje se bave datotenom problematikom. Prvu klasu ine sve one funkcije koju datoteku pamte preko tzv. File-pointera, odnosno varijable tipa (FILE*). To su funkcije poput fclose,fread,fwrite. U drugu klasu spadaju funkcije koje datoteku pamte preko njezinog rukovatelja (handle). Svakoj se datoteci prilikom otvaranja pridruuje njezin nenegativni i u tom procesu jedinstveni broj koji jednoznano definira tu datoteku. Prvih nekoliko rukovatelja zauzima se ve prilikom pokretanja procesa. To su redom: 0 rukovatelj standardnog ulaza (FILE* ekvivalent stdin), 1 rukovatelj standardnog izlaza (FILE* ekvivalent stdout) 2 rukovatelj standardne greke (FILE* ekvivalent stderr) pclose(FILE

Jo malo detalja o pipe-ovima


U radu s pipe-ovima esto je potrebno duplicirati postojee file descriptor-e (da bi se pipe povezao na standardni ulaz ili izlaz, da bi se descriptor-i za standardni ulaz i izlaz mogli spremiti i vratiti nakon zatvaranja cjevovoda...). Za dupliciranje file descriptor-a slui sistemski poziv dup. Int dup(int fd); Poziv dup kopira postojei file descriptor datoteke fd i vraa novi file descriptor ili -1 u sluaju greke. Poziv ne uspijeva, na primjer ako fd nije otvoren ili je ve otvoren maksimalan broj file descriptor-a (obino 20). Novi file descriptor ima drugaiji broj od originalnog. Pravilo je da se kod otvaranja bilo kojeg novog file descriptor-a uzima najmanji

571/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

slobodni broj. Najmanji brojevi 0, 1 i 2 su descriptor-i standardnog ulaza, standardnog izlaza i standardnog izlaza za greke. Koristei to pravilo, kraj pipe-a iz kojeg se moe itati se povezuje na standardni ulaz na sljedei nain: zatvori se descriptor datoteke 0 i duplicira se descriptor kraja za itanje pipea dup e vratiti descriptor datoteke 0. ako se zatim pokrene proces koji ita standardni ulaz, on e itati iz pipe-a (prethodno treba zatvoriti polazni descriptor kraja za itanje pipe-a ako vie nije potreban)

572/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

NAMED PIPES (IMENOVANI CJEVOVODI - FIFO)


Do sada smo koristili tzv. unnamed pipe(neimenovani cjevovod). Njegovo glavno ogranienje je da putem njega mogu komunicirati samo srodni procesi. Ako elimo omoguiti komunikaciju izmeu dva procesa koji nisu srodni, moramo koristiti named pipe (imenovani cjevovod). Postoji kao posebna datoteka (stalna, ne privremena kao u obinom pipe-u) unutar datotenog sustava. Otvaranjem te datoteke za itanje, proces dobiva pristup itajuem kraju pipe-a. Otvaranjem te datoteke za pisanje, proces dobiva pristup pisajuem kraju pipe-a. Dakle,ako process otvori tu datoteku za itanje, ona je blokirana sve dok je drugi proces ne otvori za pisanje. Isto tako vrijedi i obrnuto. Imenovani cjevovod prenosi podatke po principu prvi unutra prvi van, pa se esto naziva i FIFO (First In First Out). Za razliku od obinog pipe-a on omoguuje povezivanje procesa razliitih predaka. FIFO moemo koristiti na dva naina: 1. 2. sa mknod naredbom iz shell-a. sistemskim pozivom mknod() ili funkcijom mkfifo()

to se prvog naina tie, ako elimo stvoriti imenovani cjevovod koji bi nazvali recimo prvi_fifo, to bi uinili ovako: mknod prvi_fifo p Kao to se vidi, imenovani cjevovodi imaju ime (prvi_fifo) te su oznaeni kao posebna vrsta datoteke (oznaka p pipe). Drugi nain na koji moemo napraviti FIFO je uz pomo mknod() sistemskim pozivom. Int mknod(char *path, int mode, int dev); Tu se stvara nova datoteka iji put (ukljuujui ime) je path. Tako stvoreni imenovani cjevovod moemo otvoriti naredbom:

573/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Int open(char *path, int flags [, int mode] ); Do sada nismo koristili flags koji je kombinacija zastavica definiranih u <fcntl.h>. Najee koritene su: O_RDONLY otvori za itanje O_WRONLY otvori za pisanje O_RDWR otvori za itanje I pisanje O_NDELAY utjee na postupak otvaranja I kasniji rad sa read I write ako se operacija ne moe obaviti bez ekanja , nema ekanja nego se vraa greka O_APPEND dodavanje na kraj datoteke O_SYNC write e ekati sve dok podaci ne budu stvarno zapisani na disk O_CREAT ako datoteke nema, kreira se nova sa pravilima pristupa definiranim u mode O_TRUNC ako datoteka postoji njen sadraj se brie O_EXCL ne dozvoljava koritenje postojee datoteke ako je postavljeno O_CREAT

FIFO moemo stvoriti i pozivom mkfifo() funkcije. #include<sys/stat.h> int mkfifo(const char *path, mode_t mode);

574/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Funkcija mkfifo() takoer stvara novu datoteku iji put je path (path i ime datoteke), dok mode argument specificira dozvole . U sluaju uspjeha, mkfifo vraa 0, a u sluaju neuspjeha vraa -1 i postavlja errno. Otvaranje imenovanog cjevovoda se radi pomou, ve spomenutog, open() sistemskog poziva ili koristei fopen() standardnu C funkciju. U sluaju uspjeha dobivamo file descriptor (u sluaju open(), ili FILE pointer u sluaju fopen()), kojeg moemo koristiti za ili pisanje ili itanje. Zatvaranje fifo-a radimo pomou close() a brisanje pomou unlik() funkcije.

*neke starije verzije UNIX-a imaju samo mknod naredbu, neke samo mknod() funkciju *kad se imenovani cjevovod otvara za itanje, open eka dok ga neki drugi process ne otvori i za pisanje. Vrijedi i obrnuto. To omoguava procesima da se sinkroniziraju prije nego pone prenoenje bilo kakvih podataka. *kapacitet imenovanog cjevovoda ovisi o implementaciji

Toliko o teoriji; na redu je primjer gdje parent ita ono ta je child napisao u FIFO. Primjer 7. #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/stat.h> #include <sys/wait.h> #define BUFSIZE 256 #define FIFO_PERM (S_IRUSR | S_IWUSR) int dofifochild(const char *fifoname, const char *idstring); int dofifoparent(const char *fifoname); int main (int argc, char *argv[])
575/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

{ pid_t childpid;

if (argc != 2) { /* komandna linija ima ime pipe-a */ fprintf(stderr, "Usage: %s pipename\n", argv[0]); return 1; } if (mkfifo(argv[1], FIFO_PERM) == -1) { /* stvori named pipe tj. FIFO */ if (errno != EEXIST) { fprintf(stderr, "[%ld]:failed to create named pipe %s: %s\n",(long)getpid(), argv[1], strerror(errno)); return 1; } } if ((childpid = fork()) == -1){ perror("Failed to fork"); return 1; } if (childpid == 0) /* child pise */ return dofifochild(argv[1], "this was written by the child"); else return dofifoparent(argv[1]); } to se dogaa u primjeru 7.? Prvo se stvara imenovani cjevovod iz path-a odreenog preko komandne linije. Zatim se fork-a child. Child proces pie u imenovani cjevovod, a parent ita ta je napisano. U primjeru je ukljuena provjera greke. Dalji rad sa imenovanim cjevovodima je isti kao i sa obinim cjevovodima.

DODATAK A
576/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima PIPE i FIFO

Funkcije za dobivanje identifikatora procesa: funkcija Pid_t getpid(void) Pid_t getppid(void) Pid_t getuid(void) Pid_t geteuid(void) Pid_t getgid(void) Pid_t getegid(void) Opis Process ID Parent process ID Effective user ID Real group ID Effective group ID

DODATAK B
Dijeljenje datoteka izmeu procesa

Parent i child dijele isti file offset (isti file table entry)
file table
Parent proc.table entry

fd flags ptr f d 0: f d 1: f d 2:

file status flags current file offset v-node ptr

v-node table v-node information i-node information current file size v-node information i-node information current file size

...

file status flags current file offset v-node ptr

Child proc.table entry

fd flags ptr f d 0: f d 1: f d 2:

file status flags current file offset

v-node information i-node information current file size

...

v-node ptr

577/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Krasnodar Krajnik

fork

578/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sadraj

UVOD Sistemski pozivi i C bibliotene funkcije (System Calls and Library Functions)
Svaki operacijski sustav osigurava tono odreeni broj pristupnih tokaka (service points) koje omoguavaju programu da zatrai neku uslugu od kernela (dohvaanje datoteke s diska, kreiranje procesa, alociranje memorije, sistemsko vrijeme i dr.). Skup tih pristupnih toaka, odn. usluga koje je mogue zatraiti od kernela zovu se sistemski pozivi (system calls). U UNIX-u, suelje (interface) tih pristupnih toaka odn. sistemskih poziva je dokumentirano i definirano u C jeziku1. Dakle, u UNIX-u za svaki sistemski poziv postoji ekvivalent - C bibliotena funkcija istog imena. Pozivom takve funkcije u C programu poziva se izvravanje odgovarajueg sistemskog poziva kernela. To se izvodi na nain da C funkcija, uz. ev. podeavanje i pripremu parametara, postavlja odreene vrijednosti u registre, a zatim izvrava instrukciju softverskog prekida (software interrupt) nakon ega kernel izvrava zadani sistemski poziv. Na koji nain kernel ostvaruje neku uslugu (sistemski poziv) ovisno je o implementaciji OS-a i korisnik (bio to korisnik za terminalom ili C programer) na ponaanje sistemskog poziva ne moe utjecati. S druge strane, veina C funkcija nije sinonim jednog sistemskog poziva ve za svoje izvravanje koristi ili nijedan (npr. strcpy(),strlen()) ili vie poziva (npr. system()). S toke gledita programera nema razlike izmeu prvih funkcija koje su slike odn. ekvivalenti sistemskih poziva i drugih koje koriste ili nijedan ili vie poziva. Obje skupine slue za razvoj aplikacijskih programa. Broj, ponaanje i funkcionalnost funkcija u svakoj takvoj biblioteci mogue je mijenjati po potrebi, ali broj i ponaanje sistemskih poziva u UNIX-u unaprijed je utvren implementacijom i ne moe se mijenjati.

Kod Windowsa npr. to nije tako;. skup svojih sistemskih poziva Windowsi ne dokumentiraju i ne definiraju

kao skup C bibliotenih funkcija. Umjesto toga, Windowsi koriste Windows API biblioteku koja predstavlja dodatnu razinu, suelje izmeu aplikacije i operacijskog sustava. Korisniki program poziva API funkcije, a API funkcije izvravaju sistemske pozive. S jedne strane, dakle, nema naina da korisniki program direktno izvri sistemski poziv. S druge strane, mogue je mijenjati implementaciju OS-a odn. sistemskih poziva sve dok izmjenjena implementacija ostaje kompatibilna s API.jem.

579/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sadraj

C bibliotene funkcije koje se odnose na rad sa procesima zapravo su preslike, sinonimi (direktni pozivi) sistemskih poziva (fork, execve, wait, kill). Kako se ovaj tekst odnosi na objanjavanje tih poziva, dalje u ovom tekstu e se terminoloki naglaavati razlika izmeu onoga to zapravo predstavlja takva funkcija, sistemski poziv, i svih ostalih funkcija koje to nisu. Svi primjeri u ovom radu kompajlirani su pomou gcc 3.3.2 kompajlera i testirani na distribuciji Mandrake10 LINUX-a.

580/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

PROCESI U UNIX-U
Proces je instanca programa u izvravanju. Program se izvodi unutar procesa. Takoer, program tijekom izvoenja moe kreirati drugi proces. Svaki proces u UNIX-u identificiran je jedinstvenim brojem, PID-om (process ID). PID je jedinstveni broj dodjeljen od strane operacijskog sustava pri nastanku (kreiranju) procesa. Tip podataka u kojem je sadran PID je pid_t deklariran u <sys/types.h> ( u dananjim sustavima obino 32-bitni unsigned int). Proces iji PID=0 je obino scheduler proces (swapper), dio kernela koji se izvodi kao sistemski proces. Prvi proces, proces s PID=1, zove se init. Init proces je pokrenut od strane kernela na kraju bootstrap procedure. Iz njega su nastali sljedei procesi koji su opet stvarali druge procese itd. Sustav procesa u UNIX-u je, dakle, stablaste strukture
Kernel mode kernel Proces 0: Kernel bootstrap

kojemu je u korijenu init proces. Servisi (procesi) koje pokree init definirani su u konfiguracijskoj /etc/init UNIX-a) (starije i datoteci verzije ili
user2 User mode /etc/init

Proces 1: pokree predefinirane servise, kreira procese za login fork exec login terminal /etc/getty /etc/getty exec /bin/login shell /bin/login exec shell shell user1 provjera passworda

/sbin/init

/etc/inittab. (novije verzije). Init je korisniki proces sa superuser privilegijama koji nikada ne umire.
Slika1. hijerarhija procesa u UNIX-u

pregled aktivnih procesa


Popis svih procesa koji su trenutno pokrenuti u sustavu dostupan je naredbom 'ps'. Primjer ispisa: [user@localhost user]$ ps PID TTY TIME CMD 5687 pts1 00:00:00 bash 5808 pts1 00:00:00 ps

581

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

Mogue je pokrenuti naredbu 'ps' s razliitim opcijama ime utjeemo na izbor procesa i odabir informacija o procesu; selekcija po PID-u, terminalu, korisniku koji je vlasnik procesa, vrijeme startanja procesa itd. (man starnice sadre detalje o opcijama). Primjer punog ispisa svih procesa: [user@localhost user]$ ps -A -f
UID root root ... root ... daemon 1559 user user PID 1 2 5 1 5687 5840 PPID 0 1 1 0 5686 5687 C 0 0 0 12:20 0 0 STIME TTY 12:19 12:19 12:19 ? 13:35 13:58 TIME ? ? ? CMD 00:00:03 00:00:00 00:00:00 init [5] [ksoftirqd/0] [kapmd]

00:00:00 /usr/sbin/atd pts1 00:00:00 /bin/bash pts1 00:00:00 ps -A -f

PID PPID C S(sleeping) STIME TTY TIME CMD

- PID procesa - PID parent procesa - stanje procesa ( R(runnable) pokrenut=1, T (stopped) prekinut=0, - privremeno na 'spavanju', <20s, I(idle) - na 'spavanju' >20s) - vrijeme pokretanja procesa - ime kontrolnog terminala iz kojega je proces pokrenut - ukupno utroeno vrijeme izvravanja - naredba (proces) koja je pokrenula proces

fork
U UNIX-u, kreiranje novog procesa izvodi se izvravanjem sistemskog poziva fork. Svaki UNIX proces kreiran je fork-om i to je jedini nain za kreiranje procesa. Jedine iznimke od toga odnose se na spomenute procese kreirane od strane sistema u toku izvoenja bootstrap procedure. Proces koji poziva fork naziva se parent (roditeljski) proces. Uspjenim izvoenjem poziva fork, nastaje druga (gotovo) identina memorijska kopija programa koji je izvio fork poziv. Ta druga memorijska kopija parenta naziva se child (dijete). Nakon poziva fork obje kopije, i parent i child, nastavljaju izvoenje kao samostalni procesi. Ono osnovno to razlikuje parenta i childa, dakle ono po emu moemo kontrolirati koji dio koda identine memorijske kopije e izvravati parent a koji dio e izvravati child, jest povratna vrijednost koju vraca fork. fork je deklariran kao 582

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

#include <sys/types.h> #include <unistd.h> pid_t fork(void);

// sadri deklaraciju pid_t tipa podataka // sadri deklaraciju forka i ostalih funkcija za rad s procesima

Parent procesu fork kao povratnu vrijednost vraa PID childa. Child procesu fork kao povratnu vrijednost vraa 0, U slucaju greke, fork kao povratnu vrijednost vraa -1. Neuspjeli poziv fork-a moe se dogoditi zbog sljedeeg: - nedostatak memorije za kreiranje novog procesa - u sistemu je pokrenuto previe procesa (ovo obino znai da neto nije u redu sa sistemom) - ukupan broj procesa koje je real user pokrenuo prekorauje dozvoljeni limit (limit se moe podesiti) (dodatno - vidi poglavlje vfork i copy-on-write) Dva su osnovna naina kako se upotrebljava fork: kada se proces eli duplicirati tako da parent i child izvravaju razliite dijelove koda istog programa. Ovo je tipino za mrene servere - parent proces eka na zahtjev klijenta. Kada zahtjev stigne parent forka childa koji e opsluiti zahtjev. Parent nakon fork-a nastavlja s oslukivanjem novih zahtjeva. U ovoj koncepciji se i dio osnovnog koda koji se odnosi na upravljanje serverom i dio koda koji se odnosi na opsluivanje pojedinog klijenta nalaze unutar istog programa, na jednom mjestu. kada proces eli pokrenuti izvravanje nekog drugog programa. U ovom sluaju fork upotrebljavamo za kreiranje novog procesa, a zatim unutar tog procesa pokreemo neki drugi program. Ovo je tipino za shell programe. U tom sluaju nakon forka izvrava se sistemski poziv execve koji slui za pokretanje programa.. Ova podjela ne mijenja nita u nainu rada forka, jednostavno se odnosi na injenicu da je u drugom sluaju potrebno izvriti fork prije nego to se izvri execve budui da sam execve sam za sebe nema previe smisla. Pojednostavljeno, ili koristimo samo fork ili koristimo kombinaciju fork-execve.

583

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

1 - fork()

proces structure

kernel

2 -alocate

6 - set proc. struct.

kernel stack / u area

kernel stack / u area

4 - set pid=0

Stack 3 - copy

Stack

Heap
... pid_t pid; ...

Heap
... pid_t pid; ...

Data Text 5 - shared

Data Text

... pid = fork() if (pid == 0) { ... } else if (pid >0) { ... } parent

7 - run

... pid = fork() if (pid == 0) { ... } else if (pid >0) { ... } child

Slika2. okvirni princip rada forka 'u area' je dio adresnog prostora procesa koji se nalazi iznad stack segmenta i tipino je mapiran na fiksne adrese. 'u area' sadri kontrolne podatke koji operacijskom sustavu slue da osigura pravilno izvoenje s obzirom na proces-specifine karakteristike: PCB (PCB process kontrol Block) u kome se uva stanje registara procesora izmeu promjene konteksta (context switching) , pravi i efektivni UID, varijable okruenja, tablicu file deskriptora i dr. Struktura procesa unutar kernela slui samom kernelu za postizanje funkcionalnosti i pouzdanosti sistema u cjelini i za svaki proces sadri: stanje procesa, pokaziva na 'u area-u', proces GID, prioritet izvravanja, informacije o upravljanju memorijom

Primjer1 ilustrira upotrebu forka kada parent i child izvravaju dio koda unutar istog programa. Jednostavni primjer keiranja procesa forkom:
// primjer1 - jednostavni fork primjer #include <sys/types.h> #include <unistd.h> #include <stdio.h> int main(int argc, char *argv[]) { pid_t fork_return; int exit_state;

584

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

printf("befor fork value of fork_return = %d\n\n"); fork_return = fork(); if (fork_return < 0){ // this part of code is run if fork fail fprintf (stderr, "can't fork \n"); _exit(-1); } else if (fork_return == 0){ // this part of code is run by child printf("I'm the child process\n"); printf("My PID = %d \n",(int)getpid()); printf("My parent PID = %d\n", (int)getppid()); printf("in my part of code fork_return = %d\n\n",(int)fork_return); } else{ // this part of code is run by parent printf("I'm the parent process\n"); printf("My PID = %d \n",(int)getpid()); printf("My parent PID = %d\n", (int)getppid()); printf("in my part of code fork_return = %d\n\n",(int)fork_return); wait (&exit_state); } }

Varijabla fork_return prilikom deklaracije nije inicijalizirana i do poziva fork poprima neku sluajnu vrijednost. Ono to se zapravo dogaa pozivom fork moemo zamisliti kao sljedee: stvara se kopija itavog adresnog prostora procesa koji je pozvao fork (parent). Pritom, ovisno o tome kako pojedina implemetacija upravlja dijeljenom memorijom, text segment (code) i ostale read-only dijelove mogue je samo mapirati, a ne i kopirati. U svakom sluaju, stvara se nova kopija adresnog prostora koji e postati adresni prostor child procesa. Time dobivamo dva identina procesa u sustavu. Nakon toga, na memorijsko mjesto fork_return varijable unutar adresnog prostora child procesa fork postavlja vrijednost 0. Ukoliko fork poziv uspije (alociranje prostora i kreiranje child procesa), fork kao povratnu vrijednost vraen PID child procesa. Ta e se povratna vrijednost pridruiti fork_return varijabli parenta. Dakle, samo parent proces zaista izvodi fork. Nakon toga e i parent i child, sa razliitim vrijednostima fork_return varijabli, nastaviti izvravanje kao odvojeni procesi na prvoj instrukciji koja slijedi fork. U naem primjeru to znai: za parent - pridruivanje povratne vrijednosti, a za child - na if naredbi kojom se ispituje sadraj varijable fork_return2. Dakle, ako je fork uspio, parent proces izvrit e blok koji zadovoljava uvjet (fork_return > 0), a child proces blok koji zadovoljava uvjet (fork_return == 0). Za bolje razumijevanje, u primjeru se koristie sistemski pozivi pid_t getpid() koji vraa PID procesa iz kojega je pozvan te pozivom pid_t getppid() koji, slino, vraa PID parent procesa.

Takav slijed dogaanja prisutan je u Linuxu (Mandrake 10).

585

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

Sistemski poziv wait objasnit emo kasnije. Prethodni program daje sljedei ispis:
before fork value of fork_return = 1075238912 I'm the child process My PID = 12113 My parent PID = 12112 in my part of code fork_return = 0 I'm the parent process My PID = 12112 My parent PID = 12111 in my part of code fork_return = 12113

Dakle, fork je child procesu 'vratio' 0, a parentu broj 12113 koji predstavlja PID od child procesa. Uz to, iz ispisa se vidi da negdje u sistemu postoji i parent proces od naeg parenta. Njegov PID je 12111. Takoer, iz ispisa programa se moe primjetiti da je prvo bio izvren dio koda koji je izvodio child proces, a zatim dio koji je izvrio parent. Da li je to uvijek tako i postoji li pravilo koje odreuje redoslijed? Unix (tonije scheduler) upravlja parentom i childom kao sa samostalnim procesima. Nema garancije koji od njih e prvi nastaviti izvravanje niti koliko e se dugo izvravati prije nego to ga scheduler prekine i dodijeli procesorsko vrijeme nekom drugom procesu. Tonije, ne moemo znati koliki e dio koda izvriti jedan proces prije nego to drugi zavri s izvravanjem. (moemo ev. specificirati prioritet procesa, ali ni to ne daje nikakve garancije) U naem primjeru koristili smo pozive getpid i getppid za dobivanje vlastitog odn PID- a parenta. Odmah spomenimo ovdje da ne postoji funkcija koja bi nekom parent procesu omoguila da dohvati PID nekog svog child procesa. U tom smislu fork je jedini nain za to. U sluaju da parent kreira jednog ili vie child procesa s kojima kasnije ima namjeru manipulirati ili komunicirati trebao bi uvati povratne vrijednosti forka.

586

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

odnos parent child


U smislu identifikaije procesa PID je osnovno po emu razlikujemo parenta od childa. Ako parent i child gledamo kao samostalne procese onda se stvarna razlika svodi se na pitanje: koje osobine child pruzima od parenta, a koje postaju njegove vlastite. Child od parenta nasljeuje sljedea svojstva: identifikaciju stvarnog i efektivnog usera koji je pokrenuo proces (real/effective/saved UIDs and GIDs) - data, heap, stack segmente - varijable okruenja - podruje dijeljene memorije (attached shared memory segments ) - otvoreni file deskriptori - zastavica koja odreuje ponaanje deskriptora prilikom izvravanja exec poziva (close-on-exec flags) - prioritet izvravanja procesa unutar sistema (nice value) - broj trenutne sesije (session ID) - trenutni radni direktorij (current working directory) - root direktorij (root directory) - maska koja se upotrebljabva pri kreiranju datoteka (file mode creation mask (umask)) - limite za resurse (resource limits) - kontrolni terminal iz kojega je proces pokrenut (controlling terminal) Jedinstveno za child to ga razlikuje od parenta je: process ID parent PID child ima vlastitu kopiju file deskriptora. Svaki file deskriptor childa dijeli zajedniki file-pointer s korespondiranim file deskriptorom parent procesa objekti meuprocesne sinkronizacije (process, text, data and other memory locks) nisu nasljeeni - ovo zapravo osigurava ispravnu meuprocesnu komunikaciju( osigurava prevenciju od deadlock-a i sl..) struktura tms nije nasljeena (ova struktura pridjeljena je svakom procesu i sadri podatke o potronji vremena procesora za proces i njegove child procese posebno potronja u user, a posebno u kernel prostoru) reinicijaliziraju se limiti resursa (ovo se odnosi na potronju CPU-a, max. veliine data segmenta(ukljuujui heap), stacka, max. broj datoteka koje proces moe otvoriti, max. broj procesa koje proces dalje moe kreirati itd.) child ne nasljeuje skup definiranih/tekuih signala koje je definirao parent child ne nasljeuje timere koje je definirao parent operacije asinkronog ulaza i izlaza se ne nasljeuju Ovo je okvirni popis. Postoje detalji koji se razlikuju ovisno o implemetaciji odreene verzije Unixa/Linuxa tako da prethodno treba ipak uzeti s rezervom. -

587

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

Nakon poziva fork parent i child nastavljaju izvravanje kao samostalni procesi. To je tono u smislu da i jedan i drugi mogu izvravati bilo kakav kod potpuno neovisno jedan o drugom i naknadno redefinirati odreena svojstva koja su nasljeena pozivom fork. Meutim, sama koncepcija nasljeivanja odreenih osobina dovodi do tendencije organiziranosti i kontroliranosti u hijerarhiji procesa. U tom smislu odnos parent i child procesa nije jednak odnosu dva nepovezana procesa u sustavu. Dapae, ako pogledamo svojstva koja child nasljeuje od parenta moemo vidjeti da su ona oekivana i intuitivno poeljna; ako se program izvrava u svom radnom direktoriju poeljno je da to bude radni direktorij novokreiranog childa; takoer je normalno da korisnik koji je 'vlasnik' programa bude 'vlasnik' i pokrenutog child processa itd. S druge strane, ono to child ne nasljeuje zapravo je prevencija od neeljenih situacija. Npr. nasljeivanje objekta sinkronizacije kao to je mutex proizvodilo bi prije zbrku nego to bi predstavljalo poeljno ponaanje. Zamislimo samo da svaki child nasljedi zakljuani mutex. Ili, ako parent proces definira proceduru za upravljanje nekim signalom (signal handler), to tipino nije ono kako bi i child reagirao na odreeni signal. Na kraju krajeva, child i parent izvravaju razliite dijelove koda, rade razliiti posao.

588

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

fork i execve
U primjeru1 forkom je kreiran child proces koji je izvravao dio koda unutar istog programa kao i parent. Drugi nain upotrebe forka jest kreiranje childa i zatim pokretanje nekog drugog programa unutar tog child procesa. Takvu mogunost ostvarujemo kombinacijom forka i sistemskog poziva execve. Kada proces izvri sistemski poziv execve adresni prostor procesa se 'reinicijalizira' odn. prekriva adresnim prostorom programa koji e se unutar njega pokrenuti. Novi program poinje izvravanje od svoje main funkcije. Proces ID programa koji nastavlja s izvoenjem ostaje isti budui da se ne kreira novi proces. Execve zamijenjuje resurse trenutnog procesa (text, data, heap, stack segmente) sa novim programom uitanim sa diska. Novopokrenuti program preuzima odreena svojstva child procesa. Nabrojimo neka: PID i parent PID, ID stvarnog korisnika i grupe, kontrolni terminal, pokrenute alarme, radni i root direktorij, tms strukturu itd. Zato nam je takva mogunost pokretanja programa unutar postojeeg procesa uope potrebna? Ilustrirajmo to na primjeru UNIX shella. Neprihvatljivo bi bilo ako bi sva funkcionalnost shella bila ograniena na ono sto sam program shella, odn. njegov kod, moe uiniti. Ono to je snaga shella jest upravo njegova mogunost da pokrene izvoenje nekog drugog programa. Nain na koji to zapravo radi jest forkanje novog procesa (novog shella) i izvoenje drugog programa u njemu. execve je deklariran u datoteci zaglavlja <unistd.h> kao int execve(const char *filename, char *const argv [], char *const envp[]); pri emu filename argv [] envp[] - je ime programa kojeg pokreemo - predstavlja listu argumenata prilikom pokretanja; lista argumenata je niz stringova koji mora biti zakljuen nul pokazivaem - predstavlja listu varijabli okruenja; lista varijabli je niz stringova oblika "NAME=value" koji takoer mora biti zakljuen nul pokazivaem U sluaju greke execve vraa -1. Meutim, u sluaju da uspije - ne vraa nita! Execve kopira pokrenuti program u adresni prostor trenutnog procesa. Jedino to se dalje izvodi unutar tog procesa je program koji je pokrenut. Nakon poziva execve nee biti izvrena niti

589

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

jedna linija koda koja ev. slijedi. Tako, u sluaju da poziv uspije, povratna vrijednost se nema kome vratiti. Zato, povratna vrijednost bit e ona koju vrati pokrenuti program. Primjer2 demonstrira upotrebu execve poziva:
// primjer2 - fork i execve #include <sys/types.h> #include <unistd.h> #include <sys/wait.h> #include <stdio.h> int exec_program (char* program, char** arg_list, char **env){ pid_t child_pid; int status; switch (child_pid = fork()){ case (-1): // if fork fail fprintf (stderr, "can't fork new process\n"); _exit(-1); case (0): // in child we execute 'program' execve (program, arg_list, env); fprintf (stderr, "can't execute %s\n",arg_list[0]); abort (); default: // parent will wait until child ends wait(&status); return 0; } } int main (int argc, char **argv, char **envp){ char* arg_list_ls[] = {"ls","-all", 0}; exec_program("/bin/ls",arg_list_ls,envp); execve("/bin/date",0,0); printf ("done with main program\n"); return 0; } // execute 'ls' in function // execute 'date' here

Funkciji exec_program prosljeujemo ime programa koji elimo izvriti, listu argumenata kojima pokreemo program (arg[0] je ovdje takoer ime programa) i listu varijabli okruenja. U main programu prvo pokreemo 'ls' program za koji smo prije definirali listu argumeata. Taj program pokreneemo u novom procesu. Ako pokretanje uspije program e se izvriti, a nakon toga proces e regularno zavriti s izvravanjem ('ls' je jedino to e se izvriti unutar tog procesa). Zatim u main funkciji pokreemo 'date' program. Ispis programa je ovakav:
total 132 drwxrwxr-x drwxrwxr-x drwxrwxr-x drwxrwxr-x -rw-rw-r--rwxrwxr-x 4 3 2 2 1 1 user user user user user user user 4096 user 4096 user 4096 user 4096 user 9719 user 50660 Pro Pro Pro Pro Pro Pro 3 3 3 3 3 3 12:33 01:55 12:33 01:55 01:55 12:33 . .. .deps .libs Makefile primjer2

590

Sveuilite u Splitu Struni studij Raunarstva Zagreb -rw-rw-r-- 1 user user 47208 Pro Fri Dec 3 12:33:47 CET 2004 Press Enter to continue!

Programski alati na Unix raunalima Procesi i upravljanje procesima 3 12:33 primjer2.o

Iz ispisa se moe primjetiti da se linija nakon pokretanja 'date' programa nije izvrila. 'date' je nakon uspjenog poziva execve prepisao adresni prostor procesa programa primjer2.o. Povratna vrijednost koju je terminal dobio je ona koju je vratio 'date'. Postoji vie funkcija (skupina exec) koje slue za pokretanje programa. U mnogim implementacijama UNIX-a, samo je jedna iz te skupine exec funkcija, obino execve, ona koja predstavlja ekvivalent odn. direktan poziv stvarnom sistemskom pozivu. Prostalih pet su bibliotene funkcije koje prije poziva execve obave jo poneko podeavanje vezano uz argumente, putanju do izvrne datoteke i sl. S obzirom na nain pozivanja i karakteristike razlikujemo: funkcije koje sadre slovo 'p' u imenu (execvp i execlp) primaju ime programa i trae program s tim imenom u trenutnom path-u; funkcijama koje ne sadre slovo 'p' potrebno je proslijediti puni path programa koji se eli pokrenuti funkcije koje sadre slovo 'v' u imenu (execv, execvp i execve) za program koji se pokree prihvaaju listu argumenata kao NULL-terminirani niz pokazivaa na string. Funkcije koje sadre slovo 'l' (execl, execlp i execle) prihvaaju listu argumenata kao var-args mehanizam koriten u C jeziku funkcije koje sadre slovo e u imenu (execve i execle) prihvaaju dodatni argument, niz varijabli okruenja u obliku NULL-terminiranog niza pokazivaa na stringove. Svaki string oblika je "VARIJABLA=vrijednost" execve pozivom real user ID i real group ID se ne mijenjaju, ali se efektivni ID mogu promijenti ovisno o statusu set-user-ID i set-group-ID bitova postavljenih za pokrenuti program. Prilikom forkanja svaki deskriptor otvoren u parent procesu ima svoj close-on-exec flag. Ako je taj flag postavljen, deskriptor je zatvoren nakon izvravanja exec poziva. U suprotnom (podrazumijevano stanje), deskriptor ostaje otvoren.

591

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

funcija system
#include <stdlib.h> int system(const char *command); Upotreba standardne C bibliotene funkcije system je jednostavan nain za pokretanje izvravanja nekog programa. Meutim, system funkcija zapravo izvodi kreiranje procesa (fork) u kojem se zatim pokree Bourne shell (execve) i kojem se na izvravanje predaje argument 'command'. Kao povratnu vrijednost funkcija vraa exit status shell komande. Ukoliko shell ne moe biti pokrenut vraa vrijednost 127, a u sluaju neke druge greke -1 (npr greka forka). Sistem funkcija nije zadovoljavajue rjeenje za opu upotrebu budui da se oslanja na postojanje Bourne shell-a u sustavu. U mnogim implementacijama /bin/sh pokazuje na razliite verzije bash-a. Pokretanje programa s root privilegijama pomou system funkcije moe uzrokovati drukiji rezultat na razliitim UNIX/Linux implementacijama. Zato je prporuljivo koritenje fork i execve sistemskih poziva u svrhu pokretanja procesa.

592

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

vfork i copy-on-write tehnika


Spomenuli smo da kreiranje procesa pozivom fork znai kreiranje 'gotovo' identine kopije adresnog prostora tog istog procesa. Kao produkt ove operacije dobili smo dva procesa od kojih svaki izvrava razliite dijelove istog programa ili jo gore, u sluaju izvravanja kombinacije fork-execve - jedno bespotrebno kopiranje adresnog prostora.. Oito je da, sa stanovita performansi i zauzimanja sistemskih resursa, to nije optimalno rijeenje (u velikoj veini sluajeva). Sreom, dosljedno kopiranje adresnog prostora prilikom kreiranja procesa dolazi kao jedino rjeenje tek u starijim implementacijama UNIX-a.

Vfork
vfork sistemski poziv se prvotno pojavljuje u inaici 3.0 BSD-a. Predstavljen je prvenstveno kao zamjena za fork u sluajevima kada je potrebno izvriti kombinaciju fork i exec poziva. Vforkom se izbjegava kopiranje adresnog prostora koji se ionako odmah zatim prepisiuje pokrenutim programom. Osnovna razlika koju ini upotreba vforka proizlazi iz sljedeeg: nakon to se vforka child proces, parent proces se privremeno blokira i child moze "posuditi" parentov adresni prostor. Ovakvo stanje ostaje prisutno sve dok child ili zavrsi s izvodenjem ili izvri sistemski poziv execve. Nakon toga parent proces nastavlja s izvoenjem. Ovo znai da vforkani child proces ne smije neoekivano promijeniti vrijednosti varijabli parent procesa. tovie, child proces ne smije izai (return) iz funkcije koja sadri vfork (u kojem je child kreiran) i ne smije zavriti pozivom exit. Ako child eli izai, trebao bi pozvati _exit. (Ovo se takoer odnosi i na obini fork. Kasnije emo objasniti zato je to tako.) Druga bitna razlika u odnosu na fork je u tome to vfork garantira da e child proces prvi nastaviti izvoenje, sve dok ne pozove execve ili exit. Nakon to child pozove bilo koju od ove dvije funkcije, daljnje izvoenje nastavlja parent. U smislu ovoga to smo naveli vfork je trebao predstavljati optimiziranu verziju forka naroito u sustavima koji nemaju implementiranu copy-on-write tehniku. Meutim, vfork je sa sobom donio previe popratnih problema; od zahtjeva da ne smije mijenjati nita u adresnom

593

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

prostoru parenta (a koristio je i parentov stack), ogranienja s obzirom na nain prekida izvravanja, do najvanijeg - ponaanje u sluaju neuspjelog execve poziva bilo je nedefinirano. Zbog toga, razliite implementacije podravale su ga ili nisu na razliite naine. I sam BSD ve ga je u verziji BSD 4.4 podravao tek kao sinonim forka. Danas se upotreba vforka vie ne preporuuje osim u posebnim sluajevima i za potrebe kompatibilnosti.

copy-on-write tehnika
U Linux-u i novijim verzijama Unix-a poboljanje performansi rada s memorijom koji se naraito oituje prilikom kreiranja procesa ostvareno je koritenjem copy-on-write tehnike. Ova tehnika oslanja se na pomo naprednih sklopova za upravljanje memorijom (MMU) prisutnima u novijim generacijama procesora ili kao dio posebnog hardvera raunala. Osnovna pretpostavka na kojoj se zasniva princip ovakvog upravljanja memorijom je taj da dva ili vie procesa mogu u svom adresnom prostoru istovremeno imati mapirane iste (dijele ih) fizike stranice sve dok nad tim stranicama vre samo operacije itanja. Nakon to proces pokua pisati u stranicu koja predstavlja dijeljeni dio memorije, memory manager (dio kernela zaduen za upravljanje memorijom) razumije da se radi o pokuaju pisanja u copy-on-write stranicu. Umjesto da generira pogreku stranice (page fault odn. access violation) memory manager alocira prostor za novu stranicu u koju zatim kopira originalnu stranicu, a zatim se ta stranica mapira u adresni prostor tog procesa. Dakle, stvarno kopiranje se obavlja samo za one stranice u koje proces upisuje i to tek onda kada pokua izvriti instrukciju pisanja. Za izvravanje forka to znai da se 'skupa' operacija prvotnog kopiranja svodi samo na kopiranje tablice stranica adresnog prostora, a ne i sadraja itavog adresnog prostora. Takoer, ovo bitno smanjuje mogunost neuspjelog poziva forka jer su u ovom sluaju memorijski zahtjevi znatno manji.

594

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

zavretak izvravanja procesa


Postoje tri naina da proces normalno zavri. izvravanje return naredbe iz main funkcije poziv exit funkcije. Ova funkcija definirana je ANSI C standardom i ukljuuje pozivanje svih registriranih exit handlera i zatvaranje svih I/O tokova. Budui da ANSI C ne specificira pojedinosti o file deskriptorima, istovremenom izvoenju vie procesa/theadova unutar jednog programa i ostalim pojedinostima ovisnim o implementaciji OS-a, definicija ove funkcije je openito nekompletna za UNIX poziv _exit funkcije - ova funkcija se poziva exit funkcijom i uvaava specifinosti UNIX-a kao OS-a. Funkcija _exit specificirana je POSIX standardom Dva naina da proces abnormalno zavri su: poziv abort -ovo je poseban sluaj sljedeeg sluaja budui da ovaj poziv generira SIGABRT signal primanje signala od strane kernela, nekog drugog procesa ili samog sebe(poziv abort)

Informacije o tome kako je proces zavrio dostupne su u sluaju exit i _exit funkcija kao exit status, odn argumenat prosljeen prilikom poziva funkcije. U sluaju abnormalne terminacije kernel generira termination status kojim pokuava prikazati razlog abnormalnog prekida izvravanja. Parent proces moe dohvatiti informacije o nainu na koji je child prekinuo izvoenje pomou wait i waitpid sistemskih poziva Zato koristiti _exit radije nego exit kao naredbu za zavretak izvoenja childa? Osnovna razlika izmeu exit i _exit je u tome to prva obavlja ienja vezana uz bibliotene funkcije u user-modu (I/O) i zatim poziva korisniki definirane funkcije ienja. Druga obavlja ienja samo od strane kernela za dati proces. U dijelu koda koji se odnosi na kreiranje, izvoenje i zavretak child procesa stoga je u normalnim okolnostima neispravno koritenje poziva exit. To na primjer, moe dovesti do dvostrukog ispranjavanja spremnika standarnog ulaza (stdio buffer) i brisanje privremenih datoteka. U C++ kodu ovakva situacija postaje jo gora zato jer se destruktori statikih objekata mogu izvriti na pogrean nain. (Postoje odreeni sluajevi, npr. deamon procesi, u kojima bi zapravo parent trebao biti taj koji e izviti sistemski poziv _exit umjesto childa, 595

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

Bazino pravilo u gomili uobiajnih sluajeva jest da je sistemski poziv exit potrebno izvriti samo jednom unutar funkcije main(). U sluaju upotrebe poziva vfork, upotreba exit-a jo je opasnija zbog toga to moe utjecati na stanje parent procesa.

zombie procesi
Budui da je struktura procesa stablastog tipa i postoji parent-child odnos koji proizlazi iz koncepta nasljeivanja svojstava - redoslijed kojim parent i njegovi child procesi zavravaju s izvoenjem nije nebitan. Kada proces zavri s izvravanjem kernel dostavlja njegov exit odn. termination status parent procesu. Ukoliko parent izvri forkanje childa i child zavri s izvoenjem prije parenta, kernel jo uvijek uva informacije o exit statusu childa - za sluaj da parent zatreba te informacije. Ovakva mogunost je poeljna, a esto i nuna. Da bi parent mogao dobiti takvu informaciju, potrebno je da izvri wait sistemski poziv nakon to je izvrio fork. Ovaj poziv uzrokuje da parent zaustavi izvoenje sve dok njegov child na zavri. Nakon to child zavri i izvri se obrada wait poziva odn. dohvaanje exit statusa, kernel moe odbaciti informacije vezane uz childa. Odstupanje od ovakvog redoslijeda uzrokuje nastanak nepoeljnih zombie i orphan procesa. Ako child zavri s izvoenjem prije nego to se uope poinje ekati na njega, on postaje zombie. Ako se nikada nije niti ekalo na zavretak njegovog izvoenja, takoer postaje zombie. Premda se takav child proces vie ne izvrava, i dalje zauzima mjesto (entry) u tablici procesa (ili u novijim implementacijama samo inf. o exit statusu).. Ovo nije dobro zato jer tablica procesa sadri fiksan broj redaka (entryja) i mogue je da postane prepunjena. Takoer, postoji limit broja procesa koje jedan korisnik moe pokrenuti. Ovo je jedan od razloga zato je dobro uvijek provjeriti da li je sam fork uspjeno izvren. Ako parent zavri s izvoenjem prije nego to zavri child, child proces biva posvojen od strane nekog drugog procesa, obino init procesa. Takav child naziva se orphan. Za njega e init pozvati wait odn. obaviti poslove ienja koje je trebao obaviti parent. (Kada init to ne bi uinio ponovno bi se pojavila mogunost da child zavri kao zombie i do daljnjega 'visi' u sustavu.) 596

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

Kako izbjei nastanak zombie-a? Potrebno je osigurati da parent proces izvri poziv wait (ili waitpid, wait3 ili sl.) za svaki child proces koji kreira. Takoer, na nekim sistemima mogue je specificirati da parent nije zainteresiran za exit status childa. Druga mogunost je da parent izvri dvostruko forkanje childa s time jedan child proces zavrava s izvoenjem odmah po pokretanju. Ovo e uzrokovati da proces 'unuk' bude proglaen kao 'siroe', dijete bez roditelja, to e uzrokovati da init proces obavi sva potrebna ienja. Primjer - zombie proces:
// primjer3 - zombie proces #include <sys/types.h> #include <unistd.h> #include <sys/wait.h> #include <stdio.h> int main(int argc, char *argv[]) { pid_t fork_return; int exit_state; fork_return = fork(); if (fork_return < 0){ // printf("Can't fork\n"); _exit(-1); } else if (fork_return == 0){ printf("child is running \n"); // } else{ // printf("parent is running\n"); sleep(1); // system("ps N -r -H"); // wait(&exit_state); system("ps N -r -H"); // } }

if fork fail

child code (return quickly) parent code give child time to finish see if we have a zombie see if we have zombie now!

U ovom primjer parent se nakon kreiranja childa-a prije poziva wait "uspavljuje" na 1 sekundu. Ovo je dovoljno vrijeme da child zavri i postane zombie (defunct). Iz hijerarhijskog ispisa programa vidimo da child proces jo uvijek postoji u sistemu i da mu u opisu stanja stoji zombie ('Z'). Nakon izvrenog poziva wait, child vie ne postoji u sistemu. (naredba 'ps N -r' prikazuje samo procese ije stanje trenutno nije Runnable)

child is running parent is running PID TTY STAT

TIME COMMAND

597

Sveuilite u Splitu Struni studij Raunarstva Zagreb 11027 11028 11029 11030 2245 PID 11027 11028 11031 2245 Press pts1 pts1 pts1 pts1 pts0 TTY pts1 pts1 pts1 pts0 Enter to S 0:00 S 0:00 Z 0:00 R 0:00 S 0:00 STAT TIME S 0:00 S 0:00 R 0:00 S 0:00 continue!

Programski alati na Unix raunalima Procesi i upravljanje procesima /bin/sh -c ./primjer_zombie ; ./primjer_zombie [primjer_zombie] <defunct> ps N -r -H /bin/bash COMMAND /bin/sh -c ./primjer_zombie ; ./primjer_zombie ps N -r -H /bin/bash

wait i waitpid
wait i waitpid su deklarirani kao: #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *statloc); pid_t waitpid(pid_t pid, int *statloc, int options); wait sistemski poziv blokira trenutni proces (onaj iz kojega je pozvan) sve dok: - se ne zavri neki child proces - dok trenutni proces ne dobije signal za vlastito terminiranje - trenutni proces ne dobije signal za izvravanje procedure nekog svog signal-handlera Ako je child proces ve zavrio (ve se nalazi u stanju zombie) poziv odmah zavrava i svi sistemski resursi koje je child zauzimao se oslobaaju. waitpid moe ekati na zavretak tono specificiranog childa i dodatno posjeduje opcije kojima je mogue definirati razliite naine na koji e se izvriti. pid argument moe imati jednu od sljedeih vrijednosti: pid == -1 pid > 0 pid == 0 - eka na bilo koji child proces ( waitpid (-1, &status, 0) = ekvivalent obinom wait pozivu) - eka na child iji PID = pid - eka na bilo koji child iji process group ID je jednak onom u kojem se izvodi sam proces

598

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

pid <= -1

- eka na bilo koji child iji process group ID je jednak apsolutnoj vrijednosti od pid

Vana razlika u odnosu na wait odnosi se na argument options; za vrijednost WNOHANG waitpid ne blokira proces nego dozvoljava trenutnom procesu nastavak izvoenja ak i ako nije zavrio child koji se u waitpid specificirao. Ako je argument options=0, waitpid blokira proces. Uz wait i waitpid u pojedinim implementacijama postoje i proirenja. Npr. BSD 4.3 donosi dva nova poziva, wait3 i wait4. Prednost ovih dvaju poziva je to omoguavaju prenornje dodatnih informacija o koritenim resursima terminiranog procesa i svih njegovih child-ova.3 Primjer4 demonstrira rad poziva waitpid.
// primjer4 - waitpid #include <sys/types.h> #include <unistd.h> #include <sys/wait.h> #include <stdio.h> int main(int argc, char *argv[]) { pid_t fork_return[3]; int exit_state[3],i; for(i=0;i<3;i++){ fork_return[i] = fork(); switch(fork_return[i]){ case (-1): printf("Can't fork\n"); _exit(-1); case (0): printf("I'm child No.%d and I+m going to sleep \n",i); sleep(1); abort(); default: printf("waitpid for child %d after fork \n\n",i); waitpid(fork_return[i],&exit_state[i],WNOHANG); // wrong use of waitpid! } } system("ps N -r -H"); // see that both parent and childs are running sleep(2); system("ps N -r -H"); // see that now childs are zombies for(i=0;i<3;i++){ printf("waiting for child %d \n",i); waitpid(fork_return[i],&exit_state[i],0); // now we clean after the childs } system("ps N -r -H"); }

U Linux-u (Mandrake10) ove i dodatne opcije je dostupne su pozivom waitpid (man stranice sadre detaljnije upute)

599

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

U parent dijelu koda pozivamo waitpid s opcijom WNOHANG iako je oito da se child procesi izvravaju. To znai da e parent nastaviti izvoenje, a child procesi koji zavre prije sljedeeg wait/waitpid poziva postat e zombi procesi. Drugi poziv waitpid na kraju programa pobrinuo se za ienje. Ovdje je kao trei argument waitpid pozivu prosljeena 0 to znai da waitpid blokira proces. Ukoliko bi se specificirani (fork_return[i]) child na kojeg se eka jo izvodio, ovdje bi se parent proces blokirao. U naem sluaju se to ne dogaa jer su svi child procesi ve zavrili. Ispis primjera4:
I'm child No.0 and I'm going to sleep waitpid for child 0 after fork I'm child No.1 and I'm going to sleep waitpid for child 1 after fork I'm child No.2 and I'm going to sleep waitpid for child 2 after fork PID TTY 5105 pts1 Enter to 5106 pts1 5107 pts1 5108 pts1 5109 pts1 5110 pts1 2198 pts0 PID TTY 5105 pts1 Enter to 5106 pts1 5107 pts1 5108 pts1 5109 pts1 5111 pts1 2198 pts0 waiting for waiting for waiting for PID TTY 5105 pts1 Enter to 5106 pts1 5112 pts1 2198 pts0 Press Enter STAT S R S S S R S STAT S S Z Z Z R S child 0 child 1 child 2 STAT S TIME COMMAND 0:00 /bin/sh -c ./primjer4_waitpid ; echo "Press 0:00 ./primjer4_waitpid 0:00 ./primjer4_waitpid 0:00 ./primjer4_waitpid 0:00 ./primjer4_waitpid 0:00 ps N -r -H 0:00 /bin/bash TIME COMMAND 0:00 /bin/sh -c ./primjer4_waitpid ; echo "Press 0:00 ./primjer4_waitpid 0:00 [primjer4_waitpi] <defunct> 0:00 [primjer4_waitpi] <defunct> 0:00 [primjer4_waitpi] <defunct> 0:00 ps N -r -H 0:00 /bin/bash

TIME COMMAND 0:00 /bin/sh -c ./primjer4_waitpid ; echo "Press

R 0:00 ./primjer4_waitpid R 0:00 ps N -r -H S 0:00 /bin/bash to continue!

600

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

spreavanje nastanka zombie procesa rukovanjem signalima


Signali predstavljaju mehanizam za komunikaciju i manipulaciju meu procesima. Signal je poruka upuena procesu. Za slanje signala koristi se sistemski poziv kill. Nakon to primi signal proces moe uiniti jedno od sljedeeg: podrazumijevani odgovor na signal, ignoriranje signala ili odgovor na signal pokretanjem odgovarajue procedure (signal handler). Rukovanje signalima je asinkrono; nakon to primi signal proces prekida trenutno izvoenje i prelazi na obradu primljenog signala. Signal-handler se izvrava do kraja, a zatim slijedi povratak na mjesto izvoenja prije poziva signal-handlera. Sigaction i signal sistemski pozivi slui za postavljanje akcije koja e se izvriti s obzirom na pojedini oekivani signal. Takoer, pomou poziva sigaction, sigprocmask i sigsuspend mogue je kreirati masku kojom se definira upravljanje onim signalima koji pristignu u trenutku kada se ve vri obrada nekog signala. Proces moe biti privremeno zaustavljen signalom SIGSTOP. Da bi nastavio izvoenje mora primiti signal SIGCONT. Proces moe zavriti kao odgovor na signal. Npr. SIGINIT signal alje se procesu nakon to korisnik utipka Ctrl+C u terminalu. SIGTERM signal alje se naredbom kill. Sistemskim pozivom abort, proces sam sebi alje SIGABRT signal. Najmoniji signal za prekid izvravanaja je SIGKILL koji uzrokuje trenutno prekidanje izvoenja i ne moe se blokirati ili handlati na drugi nain. Sistemski poziv kill definiran je kao: #include <signal.h> int kill(pid_t pid, int sig); - pid je PID procesa kojem se upuuje signal, a sig broj signala. Npr. elimo li ubiti child proces iji PID je child_pid, mogli bismo to uraditi na sljedei nain: kill (child_pid, SIGTERM); Kada proces prekine s izvoenjem, na normalan ili abnormalan nain, kernel alje njegovom parent procesu SIGCHLD signal. Parent moe ignorirati ovaj signal (podrazumijevano) ili odgovoriti na njega izvravanjem odreenog signal handlera. Handler je mogue definirati na sljedei nain:

601

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

const struct sigaction act; act.sa_handler = funkcija_handler (ili act.sa_sigaction = funkcija_handler) sigaction (SIGCHLD, &act, NULL) Ovime se definira odgovor na signal SIGCHLD. Sa odgovarajue podeenom sigaction strukturom moemo kontrolirati ponaanje procesa nakon primitka SIGCHLD signala: act.sa_handler = SIG_DFL act.sa_handler = SIG_IGN - podrazumijevani odgovor na signal - signal se ignorira privremeno zaustavlja (SIGSTOP, SIGTSTP, SIGTTIN or SIGTTOU) signal SIGCHLD nee biti generiran act.sa_flags is SA_NOCLDWAIT - child procesi se nakon zavretka nee pretvoriti u zombie procese Primjer5 pokazuje kako se redefinicijom signal-handlera moe sprijeiti nastanak zombie procesa.
// primjer5 - izbjegavanje zombi procesa redefinicijom signala #include <sys/types.h> #include <unistd.h> #include <signal.h> #include <sys/wait.h> #include <stdio.h> int main(int argc, char *argv[]) { pid_t fork_return[3]; int exit_state[3],i; struct sigaction act; act.sa_handler=SIG_IGN; // one way: ignore SIGCHLD (no zombies) act.sa_handler=SIG_DFL; // another way: catch the signal but act.sa_flags=SA_NOCLDWAIT; // set SA_NOCLDWAIT (no zombies) i=sigaction (SIGCHLD, &act, 0); for(i=0;i<3;i++){ fork_return[i] = fork(); switch(fork_return[i]){ case (-1): printf("Can't fork\n"); _exit(-1); case (0): // child code printf("I'm child No.%d and I'm going to sleep \n",i); sleep(1); printf("I'm child No.%d and I'm going to die \n",i); abort(); default: // parent code

act.sa_flags is SA_NOCLDSTOP - kada se child

// //

602

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

printf("I'm the parent. Just create child No. %d \n\n",i); } } printf("\n\nI'm system("ps N -r sleep(3); printf("\n\nI'm system("ps N -r } the parent. Just create all childs \n "); -H"); // see that both parent and childs are running // give childs time to finish the parent. My childs all finished \n "); -H"); // see that now childs are not zombies

SIGCHLD je signal za kojeg smo redefinirali akciju. Sigaction strukturom definira se handler koji e se izvriti kao odgovor na signal. Ovdje smo prosljeivanjem SIG_IGN poruili kernelu da nas ne zanima kada i kako su child procesi zavrili (samim time niti njihov exit status). Tako, nakon to child zavri s izvoenjem kernel e odbaciti sve informacije vezane uz child procese koji zato nee postajati zombie procesi. Ovime smo omoguili neovisno izvoenje parent i child procesa bez bojazni od nastanka zombie procesa. Ispis primjera5:
I'm child No.0 and I'm going to sleep I'm the parent. Just create child No. 0 I'm child No.1 and I'm going to sleep I'm the parent. Just create child No. 1 I'm child No.2 and I'm going to sleep I'm the parent. Just create child No. 2

I'm the parent. Just create all childs PID TTY STAT TIME COMMAND 2694 pts1 S 0:00 /bin/sh -c ./primjer5 ; echo "Press Enter to continue 2695 pts1 R 0:00 ./primjer5 2696 pts1 S 0:00 ./primjer5 2697 pts1 S 0:00 ./primjer5 2698 pts1 S 0:00 ./primjer5 2699 pts1 R 0:00 ps N -r -H 2172 pts0 S 0:00 /bin/bash I'm child No.0 and I'm going to die I'm child No.1 and I'm going to die I'm child No.2 and I'm going to die

I'm the parent. My childs all finished PID TTY STAT TIME COMMAND 2694 pts1 S 0:00 /bin/sh -c ./primjer5 ; echo "Press Enter to continue 2695 pts1 R 0:00 ./primjer5 2700 pts1 R 0:00 ps N -r -H 2172 pts0 S 0:00 /bin/bash Press Enter to continue!

603

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

rukovanje povratnim vrijednostima pomou signala


Child vraa status code vrijednost preko pokazivaa na integer. Preko tog pokazivaa mogue je dohvatiti informacije o nainu na koji je proces zavrio s izvoenjem. Pomou WIFEXITED makroa moe se ustanoviti da li je child zavrio normalno (izlaskom iz main funkcije ili upotrebom funkcija exit odn. _exit). WEXITSTATUS makro dohvaa exit code child procesa. Pomou WIFSIGNALED makroa moe se ustanoviti da li je child terminiran signalom. WTERMSIG vraa oznaku signala. Primjer6 pokazuje kako rukovati proizvoljnim brojem child procesa koji se proizvoljno dugo izvravaju. Primjer je napravljen tako da child procesi s neparnim PID-om zavravaju izvoenje pozivom funkcije exit i kao povratnu vrijednost vraaju broj sekundi koliko su se bili prisutni u sistemu (spavali). Parni child procesi se terminiraju signalom. U postavljenom signal-handleru ispituje se nain na koji je child zavrio izvoenje.

// primjer6 - rukovanje povratnim vrijednostima pomocu signala


#include #include #include #include #include #include #include <sys/types.h> <unistd.h> <signal.h> <sys/wait.h> <stdio.h> <time.h> <stdlib.h>

#define CHILDS 5 int childs=0; void sigchld_handler(int signum) { pid_t pid_exit; int status;

// number of active childs // signal handler

while ((pid_exit = waitpid(-1, &status, WNOHANG )) > 0 ) { if(WIFEXITED(status)) // process use exit() or step out of main() printf("finished child with pid = %d, has returned %d \n",pid_exit, WEXITSTATUS(status)); else if (WIFSIGNALED(status)) // process was terminated by signal printf("finished child with pid = %d, terminetad by signal no. %d \n",pid_exit, WTERMSIG(status)); childs--; } } int main(int argc, char *argv[]) { pid_t pid;

604

Sveuilite u Splitu Struni studij Raunarstva Zagreb


int i, sleep_sec; struct sigaction act; srand((unsigned int)time(0)); memset(&act,0,sizeof(sigaction)); act.sa_handler=sigchld_handler; i=sigaction (SIGCHLD, &act, 0);

Programski alati na Unix raunalima Procesi i upravljanje procesima

// set function to be a handler // set handler to handle SIGCHLD signal

for(i=0;i<CHILDS;i++){ sleep_sec=rand()%10; // child will sleep random sec childs++; switch (pid = fork()){ case (-1): printf("Can't fork\n"); _exit(-1); case (0): // child code printf("I'm child No.%d, my PID is %d, im going to sleep for %d sec \n",i,getpid(),sleep_sec); sleep(sleep_sec); if (getpid() & 1) _exit(sleep_sec); // if odd use exit to finish else kill(getpid(),SIGKILL); // if even terminate with signal default: // parent code break; } } printf("\n\nI'm the parent. Just create all childs \n"); system("ps N -r -H"); // see what is running while (childs) pause(); printf("\n\nI'm the parent. My childs all finished \n"); system("ps N -r -H"); }

pause funkcija 'uspavljuje' proces sve dok ili ne primi signal koji ga terminira ili ne primi signal koji uzrokuje pokretanje nekog signal-handlera. Ova funkcija pozivat e se sve dok broj pokrenutih child procesa ne bude 0 tj. dok signal-handler ne obradi zavretak izvoenja svih child procesa. Evo i ispisa koji ovaj primjer daje. Naravno, budui da se u primjeru koriste random vrijednosti ispis e za svako pokretanje programa biti razliit.

I'm I'm I'm I'm I'm

child child child child child

No.0, No.1, No.2, No.3, No.4,

my my my my my

PID PID PID PID PID

is is is is is

5869, 5870, 5871, 5872, 5873,

im im im im im

going going going going going

to to to to to

sleep sleep sleep sleep sleep

for for for for for

3 6 8 7 0

sec sec sec sec sec

I'm the parent. Just create all childs PID TTY STAT TIME COMMAND 5867 pts1 S 0:00 /bin/sh -c ./primjer6_signali ; echo "Press Enter to 5868 pts1 R 0:00 ./primjer6_signali 5869 pts1 S 0:00 ./primjer6_signali 5870 pts1 S 0:00 ./primjer6_signali 5871 pts1 S 0:00 ./primjer6_signali 5872 pts1 S 0:00 ./primjer6_signali 5873 pts1 RW 0:00 [primjer6_signal] 5874 pts1 R 0:00 ps N -r -H 2121 pts0 S 0:00 /bin/bash

605

Sveuilite u Splitu Struni studij Raunarstva Zagreb finished finished finished finished finished child child child child child with with with with with pid pid pid pid pid = = = = = 5873, 5869, 5870, 5872, 5871,

Programski alati na Unix raunalima Procesi i upravljanje procesima has returned 0 has returned 3 terminetad by signal no. 9 terminetad by signal no. 9 has returned 8

I'm the parent. My childs all finished PID TTY STAT TIME COMMAND 5867 pts1 S 0:00 /bin/sh -c ./primjer6_signali ; echo "Press Enter to 5868 pts1 R 0:00 ./primjer6_signali 5875 pts1 R 0:00 ps N -r -H 2121 pts0 S 0:00 /bin/bash Press Enter to continue!

Zbog kopiranja adresnog prostora koje se dogaa prilikom izvravanja forka vano je da se linija sleep_sec=rand()%10; nalazi u dijelu koda kojeg izvrava parent. Ako ovu liniju stavimo u dio koda koji izvodi child proces svi child procesi 'spavat' e jednako dugo.

komunikacija izmeu parenta i childa


Komunikacija meu procesima je posebna tema. Zato ovdje slijede tek dva vrlo jednostavna primjera koja se odnose na specifinost odnosa parent-child. Komunikacija izmeu parenta i child mogua je kroz bilo koji standardni oblik meuprocesne komunikacije: pipe, sockets, poruke (message queues), dijeljena memorija (shared memory). Uz to, child proces moe sa parentom (kao sto smo vidjeli u prethodnim primjerima) komunicirati preko argumenta funkcije exit. Meutim, upravo karakteristika forka da se svi deskriptori otvoreni od strane parenta kopiraju u child daje velike mogunosti za komunikaciju pomou pipe-a. pipe je mehanizam jednosmjerne komunikacije prema kojem jedan proces pie na jedan kraj, a drugi ita s drugog kraja pipe-a. Zasniva se na sekvencijalnom pisanju na jednom i sekvencijalnom itanju na drugom kraju po principu FIFO ( first-in first-out). Mehanizam pipe-a ne dozvoljava proizvoljno pozicioniranje unutar pipe-a. Sistemski poziv pipe

606

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

int pipe(int filedes[2]); kreira jedan par file deskriptora i stavlja ih u polje fildes pri emu filedes[0] koristimo za itanje, a filedes[1] za pisanje. U luaju da se deskriptori uspiju kreirati povratna vrijednost je 0, a usluaju greke -1 i postavljena globalna varijabla errno. Ovi deskriptori vidljivi su samo unutar parent procesa i svih child procesa naknadno nastalih forkanjem. Dva su uobiajna naina upravljanja deskriptorima nakon forkanja: parent eka na zavretak izvoenja childa. U tom sluaju offset (pozicija) u svakom od deskriptora u koji je child pisao/itao bit e valjano auriran da se izbjegne interferencija, nakon forkanja parent i child zasebno zatvaraju sve deskriptore koji im nisu potrebni close(pipefd) newpipefd = dup(pipefd) dup2(pipefd,newpipefd) - brie deskriptor pipefd i zatvara file na koji se deskriptor odnosi ako je to posljedni deskriptor koji upuuje na file - duplicira pipefd na najnie slobodno mjesto: newpipefd. - zatvara newpipefd ako je razliit od pipefd, a zatim duplicira pipefd na mjesto newpipefd U sljedeem primjeru kreira se child proces koji koristei pipe prosljeuje parent-u rezultat izvravanja programa date.
// primjer7 - pipe #include <sys/types.h> #include <unistd.h> #include <sys/wait.h> #include <stdio.h> int main(int argc, char *argv[]){ char str[1024]; int pipefd[2], status; pid_t pid; if(pipe (pipefd) == -1) exit(-1); switch(pid=fork()){ case -1: printf("can't fork\n"); _exit(-1); case 0 : // child code close(1); // close stdout dup(pipefd[1]); // set pipefd[1] to be stdout execve ("/bin/date",0,0); // date will print in pipefd[1] default: // parent code close(0); // close stdin dup(pipefd[0]); // set pipefd[0] to be stdin fgets(str,1024,stdin); // get 'date' output printf("The date is %s \n", str); wait(&status); } }

607

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

Ispis je: The date is Tue Dec 7 14:58:19 CET 2004 Press Enter to continue! U primjeru8 izmeu parenta i childa postoji dvosmjerna komunikacija. Parent i child koriste streamove koji se kreiraju na osnovu deskriptora. Parent prima string s konzole, prosljeuje ga childu na obradu. a child nakon obrade vraa rezultat. U <stdio.h> deklarirana je funkcija FILE* fdopen (int flides, const char *mode) koja povezuje stream s postojeim file deskriptorom. mode otvaranja mora biti kompatibilan s modom file deskriptora.
// primjer8 - pipe, stream #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdio.h> void read_from_pipe (int file, char *s){ FILE *stream = fdopen (file, "r"); fgets(s,1024,stream); fclose (stream); } void write_to_pipe (int file,const char *s) { FILE *stream = fdopen (file, "w"); fputs(s,stream); fclose (stream); } int main(int argc, char *argv[]){ char str[1024], *cp; int pipe_x[2], pipe_y[2], status; pid_t pid; if (pipe (pipe_x) || pipe (pipe_y)) exit(-1); switch(pid=fork()){ case -1: printf("can't fork \n"); _exit(-1); case 0 : // child code close(pipe_x[1]); close(pipe_y[0]); read_from_pipe(pipe_x[0],str); printf("child read from pipe - %s\n",str); cp=str; while(*cp) *cp=toupper(*cp++); write_to_pipe(pipe_y[1],str); printf("child write to pipe - %s",str); _exit(0); default: // parent code

608

Sveuilite u Splitu Struni studij Raunarstva Zagreb close(pipe_x[0]); close(pipe_y[1]); fgets(str,1024,stdin); write_to_pipe(pipe_x[1],str); printf("parent write to pipe - %s",str); read_from_pipe(pipe_y[0],str); printf("parent read from pipe - %s\n",str); wait(&status); -->pipe } }

Programski alati na Unix raunalima Procesi i upravljanje procesima

Ispis iz programa je:


programski alati na unix raunalima parent write to pipe - programski alati na unix raunalima child read from pipe - programski alati na unix raunalima child write to pipe - PROGRAMSKI ALATI NA UNIX RAUNALIMA parent read from pipe - PROGRAMSKI ALATI NA UNIX RAUNALIMA Press Enter to continue!

609

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Procesi i upravljanje procesima

VEDRAN DEDU VANJA HARAMBAA

PROCESI I UPRAVLJANJE PROCESIMA

610

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Procesi u UNIXU
Glavnim konceptom u svakom operacijskom sustavu smatramo proces, kao apstrakciju izvravanja programa. Sve ostalo ovisno je o ovom konceptu i zbog toga je vano shvatiti to je proces.

Sva moderna raunala, i moderni OS-ovi mogu raditi vie stvari odjednom. Dok izvrava neki korisnikov program, raunalo u isto vrijeme moe itati i pisati po disku, zaslonu ili printeru. Takoer moe izravati tren jedan, tren drugi program, putajui svakog od njih da radi nekoliko desetinki, ili stotinki sekundi. Preciznije reeno u bilo kojem trenutku procesor vrti samo jedan program, ali vrlo brzo prebacuje izvravanje programa sa procesora i vraa ga u stanje ekanja. Ponekad opisujui gornju stvar govorimo o pseudo-paralelizmu kako bi naglasili pravi hardverski paralelizam na vieprocesorksim sustavima.

SLIKA 1.1 Razlika izmeu procesa i programa je jedva zamjetna, ali jako bitna. Da bi lake razumjeli razliku, napravimo jednu analogiju. Zamislimo kuhara koji pee roendarsku tortu svojoj keri. On ima recept i kuhinju opremljenu sa svim sastojcima: branom, jajima i sl. U raunalnom svijetu takav kuhar bio bi procesor, a recept bio program, dok bi sastojci bili ulazni podaci. Zamislimo sad da kuharova ker utri u kuhinju plaui jer ju je ubola pela. Kuhar tada zapamti gdje je stao u svom receptu, i prui pomo svojoj keri.
611/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Gledano u raunalnom svijetu vidimo da je procesor bio prebaen sa jednog procesa na proces vieg prioriteta, od kojih svaki ima razliiti program. Nakon pruene pomoi kuhar e nastaviti tono od mjeswta gdje je stao. Kljuna ideja je da je proces aktivnost neke vrste. On ima program, ulaz, izlaz i stanje. Pojedini procesor moe dijeliti nekoliko procesa, zajedno sa nekim algoritmom rasporeivanja rada tih procesa na tom procesoru.

Procesi i njihovo rasporeivanje


Proces (eng. Process), nekad nazivan i zadatak (eng. Task), je instanca programa koji se izvrava. Sukladno tome, da bi se stvorio proces potrebno je pokrenuti program. Pokretanje aplikacije s medija za pohranu podataka stvara proces. Na jednoprocesorskom raunalnom sustavu sama sredinja procesorska jedinica (eng. Central Processing Unit, CPU) se dijeli meu procesima tako to procesi dobivaju vrijeme za izvravanje na procesorskoj jedinici. Kao i sve ostalo, proces je unutar operativnog sustava OS, predstavljen kao podatkovna struktura. Podatkovna struktura procesa sadri skup vrijednosti za sve promijenljive registre sredinje procesorske jedinice, predstavljajuci tako trenutno stanje izvrenja pripadajueg procesa. Preciznije reeno, sastoji se od tri dijela: segmenta instrukcija, segmenta korisnikih podataka i segmenta sustavnih podataka. Ponekad se naziva i okolina izvravanja. Nabrojat emo i opisati svojstva jednog procesa.

Svojstva procesa
Proces izvrava pripadajuci programski kod koji moe doci iz razliitih izvora tj. Razliitih datoteka. Pri izvravanju proces dobiva ograniena prava s kojima raspolae i u okviru kojih se i izvrava. Sam operativni sustav moe pokrenuti proces s apsolutnim pravima gdje on dobiva potpunu slobodu pri izvravanju.
612/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Dio operativnog sustava, zvan rasporeivac (eng. Scheduler), dijeli vrijeme sredinje procesorske jedinice svakom procesu koliko mu pripada. Proces zahtjeva memoriju za svoju podatkovnu strukturu. Svakom procesu se prilikom izvravanja dodijeli slobodna memorija. U praksi, taj memorijski prostor ne mora biti ulanano nanizan. Proces ima mogunost pristupa datotenom sustavu, a takve aktivnosti se moraju pomno pratiti kako bi bio zadovoljen nivo sigurnosti te da se otvorene datoteke pravilno zatvore kada proces zavri. Kod svakog procesa nuna je identifikacija prema konvenciji operativnog sustava Prednosti procesa su njegova zatiena podatkovna stuktura (od pristupa drugog procesa). Proces je mogue stvoriti (pokretanjem programa iz ljuske operativnog sustava ili iz aplikacije), on moe zavriti, te su mogua prebacivanja s procesa na proces u toku izvravanja. Kao to je reeno, o njihovom prebacivanju se brine dio operativnog ustava rasporeiva. Postoji nekoliko tehnika rasporeivanja procesa koje on moe koristiti, a ovisi o operativnom sustavu. Kada proces dobiva teoretski neprekidno procesorsko vrijeme u trenutku kada doe na red zaizvravanje, operativni sustav koristi tehniku rasporeivanja Prvi dolazeci prvi posluen ili FCFS (eng. First Come-First Served). Tehniku je jednostavno implementirati, ali zato je siromana mogunostima. Bolja tehnika je gdje se svaki proces razlomi u vremenske isjeke (eng. Quantum) za izvravanje koji meusobno razmjenjuju procesorsko vrijeme prilikom kojeg se izvravaju. Ona se naziva metoda vremenskih isjeaka (eng. Time slicing) iliti RR (eng. Round Robin) i omoguava optimiziranije rasporeivanje procesa, pogotovo onih koji krae traju, naspram FCFS tehnike. Drugaije optimizirane i kompleksnije tehnike su slijedi najkrai proces ili SPN (eng. Shortest Process Next), zamjenski SPN iliti PSPN (eng. Preemtive Shortest Process Next), HPRN (eng. Highest Penalty Ration Next), vierazinski FB (eng. FeedBack), sebini RR iliti SRR (eng. Selfish Round Robin) i druge. U praksi, mogue je u operativni sustav implementirati mjeavinu navedenih tehnika. Tim tehnikama se ne dobiva samo simulacija istovremenog izvravanja vie procesa na jedno-procesorskom raunalu, ve se optimizira izvrdavanje korisnikih aplikacija i samog operativnog sustava. Meutim, na vieprocesorskom raunalnom sustavu (sa vie sredinjih procesorskih jedinica), procesi se u stvarnom vremenu izvravaju istovremeno i to onoliko
613/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

njih koliko ima procesorskih jedinica (dvije, etiri ili vie). U praksi, svaka sredinja procesorska jedinica jednog vieprocesorskog sustava pojedinano takoer koristi ranije navedene metode. Navedene metode moemo podijeliti na one koji podravaju zamjenu (eng. Preemption) procesa i one koje rade s nezamjenskim (eng. Non-preemptive) procesima. Zamjenske metode omoguuju da se nad jednom sredinjom procesorskom jediniciom naizmjence izmjenjuju procesi, pod odreenim uvjetima, a prije nego to je pojedini zavrio sa svojim radom (simulacija vieprocesorske okoline). Prema tome, imamo slijedeu podjelu rasporeivakih metoda : zamjenske metode: RR, FB, SRR, PSPN, nezamjenske metode: FCFS, SPN, HPRN. Prilikom zamjene ili prebacivanja, stanje registara procesa s kojeg se prebacuje se mora pohraniti u podatkovnu strukturu tog procesa te se registri procesa moraju napuniti novim vrijednostima iz podatkovne strukture procesa na koji se prebacuje tok izvravanja. to se trajanja tie, samo stvaranje procesa smatra se skupom, dok se prebacivanje procesa relativno skupom operacijom. To su i nedostaci rada s procesima. Takoer, u praksi je moguce u viedretvenoj okolini izvravanje i nezamjenjivih (eng. Non-preemtive) dretvi, ali takvi algoritmi su orijentirani prema izvravanju jedne dretve (po procesoru) omogucujuci time izvravanje dretvi jedne za drugom bez mogunosti zamjenjivanja. Tada je briga o sinkronizaciji svedena na minimum. Algoritmi koji se koriste u tu svrhu su prvi dolazei prvi posluen (FCFS), slijedi najkrai proces (SPN), te sustav prioriteta. Na UNIX/Linux operativnom sustavu, proces koji je nastao kao instanca programa zapisanog na mediju za pohranu podataka, moe stvarati druge procese njegovu djecu ili podprocese.Da bi to napravio, proces roditelj se koristi sustavskim pozivom fork kojim stvara novi proces s nasljeenom veinom sustavnih svojstva roditelja: int fork(void) ;

614/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

U ovaj sustavski poziv ulazi jedan proces, a iz njega izlaze dva odvojena procesa (dijete i roditelj) koji tada dobivaju svaki svoju povratnu vrijednost. Proces dijete dobiva rezultat 0, a roditelj dobiva identifikacijski broj procesa djeteta. Ako doe do greke, vraena vrijednost je -1 i ne dolazi do stvaranja procesa dijete. Poziv fork nema nikakvih argumenata i programer ne moe biti odgovoran za greku. Ona moe biti rezultat nemogunosti jezgre operativnog sustava da stvori novi proces (dijete) zbog nedostatka nekog od potrebnih sredstava. Kao to je reeno, proces dijete nasljeuje veinu svojstava iz segmenta sustavskih podataka kao to su trenutni direktorij, prioritet ili identifikacijski broj korisnika. Manje je atributa koji se ne nasljeuju: Osobni brojevi procesa djeteta i roditelja su razliiti. To su u biti razliiti procesi. Proces dijete dobiva kopije otvorenih opisnika datoteka (eng. File descriptor) od roditelja. No, to nisu ti isti opisnici datoteka s obzirom da ih procesi ne dijele. Ipak, procesi dijele kazaljke poloaja u datotekama (eng. File pointer). Ako jedan proces namjesti kazaljku poloaja na odreeno mjesto u datoteci, drugi proces ce takoer itati odnosno pisati od tog mjesta. Za razliku od toga, ako dijete zatvori svoj opisnik datoteke, to nema veze s roditeljevim opisnikom datoteke. Vrijeme trajanja procesa djeteta je postavljeno na nula. Proces dijete se moe inicijalizirati stvaranjem nove instance programa s medija za pohranu podataka (poziv exec) ili izvoenjem posebnog dijela ve instanciranog programa, dok istovremeno proces roditelj moe ekati da dijete zavri svoj zadatak i/ili raditi neto drugo.Poziv sustavu exit pokrece zavretak izvravanja procesa pozivatelja. Prije samog zavretka, uredno se zatvaraju sve otvorene datoteke. Poziv ne vraa nikakvu vrijednost jer iza njega nema nastavka procesa. Za status se obino stavlja 0 ako proces normalno zavrava, a 1 inae. Void exit(int status);

615/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Roditelj procesa koji zavrava pozivom exit prima njegov status preko sustavskog poziva wait: int wait(int *statusp) ; Poziv wait eka da neki od procesa djece zavri (ili bude zaustavljen za vrijeme ekanja), s tim da mu se ne govori koji proces da eka. Funkcija vraa identifikacijski broj procesa djeteta koji je zavrio i sprema njegov 16-bitni status u cijeli broj na koji pokazuje statusp, osim kada je taj argument NULL. U tom sluaju se status zavrenog procesa gubi. U sluaju pogreke (kada nema djece ili je ekanje prekinuto primitkom nekog prekidnog signala) rezultat je 1. Proces moe zavriti na tri naina i to: pozivom exit, primitkom signala ili padom cijelokupnog sustava (gaenje raunala, nestanak struje i drugo). Logino, samo kod prva dva naina moemo saznati nain zavretka podprocesa itanjem vrijednosti na koju pokazuje statusp. Osnovni oblik upotrebe sustavskih poziva fork, exit i wait izgleda ovako: if (fork() == 0) { // zadatak procesa djeteta exit(0); } // nastavak izvravanja procesa roditelja ekanje na zavetak djeteta wait(NULL); Moemo pokrenuti i nekoliko procesa da rade istovremeno. Kada elimo pokrenuti npr. 5 podprocesa, to moemo uraditi na sljedei nain: N = 5; for (i = 0; i < N; i++) {

616/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

switch (fork()) { case 0: // zadatak u procesu djeteta i exit(0); case -1: // proces nije stvoren } } // petlja za prikupljanje svih stvorenih procesa djece while (i--) wait (NULL); Proces roditelj i proces dijete ne moraju zavriti zadatak istovremeno. Poseban je sluaj kada proces roditelj zavri prije svog procesa djeteta. Tada se djetetu dodjeljuje novi roditelj proces init s identifikacijskim brojem 1. Proces init je vaan prilikom pokretanja sustava. U radu sustava veinom izvodi poziv wait kako bi postao roditelj djeci bez roditelja kada oni zavre. Drugi poseban sluaj je kada proces dijete zavrti zadatak, no proces roditelj ga ne eka s wait pozivom. Tada proces dijete postaje tzv. Proces zombi (eng. Zombie). Kao i inae kad zavri neki proces, otputaju mu se njegovi segmenti u radnom spremniku, no u ovom sluaju ostaju njegovi podaci u tablici procesa operativnog sustava. Oni postoje sve dok roditelj ne izvede wait i tada proces zombi nestaje u potpunosti. Ako roditelj zavri, a nije pozvao wait, proces zombi dobiva ranije spomenuti init proces kao roditelja koji e ga pokupiti za wait pozivom.

617/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

PRIORITETI
Priotiteti procesa kreu se u rasponu od -20 do 20. -20 predstavlja najvii prioritet izvoenja procesa, a 20 najnii. Korisnik moe procesima kojih je on vlasnik prilikom njihovog pokretanja smanjiti prioritet naredbom nice. Sintaksa naredbe nice je slijedea: nice broj naredba gdje je broj relativni prioritet koji se eli postii, dok naredba predstavlja proces koji emo pokrenuti. Tako npr. Moemo u pozadini (operator &) pokrenuti naredbu sleep koja e zavriti nakon 50 sekundi. $ nice -15 sleep 50 & Gornjom smo naredbom procesu sleep smanjili relativni prioritet na 15. Naredbom ps l mogue je vidjeti njezin prioritet (stupac PRI) i njezin relativni prioritet, tzv. Nice number (stupac NI). Stupac PRI predstavlja stvarni trenutni prioritet procesa. Stupac NI (nice number) predstavlja njegov relativni prioritet, broj prema kojem e mu se u vremenu pridjeljivati stvarni prioritet. Stvarni e prioritet biti manji (pozitivniji) to je manji (pozitivniji) nice broj i obrnuto. Uobiajeno je da proces prilikom pokretanja dobiva relativni prioritet 0. Samo superkorisnik (root) moe procesu poveati prioritet. Isprobati naredbu (biti logiran kao root): # nice 10 sleep 50 & Vidimo da je ovu naredbu mogue izvriti jedino ako smo logirani kao root. Uoite da je ovdje rije o negativnom nice broju (-10), dakle poveavamo relativni prioritet procesa. Ukoliko elimo ve aktivnom procesu promijeniti prioritet, koristimo naredbu renice: $ renice 7 432

618/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

gdje je 432 PID (process ID), a 7 konani prioritet dotinog procesa. PID je broj koji je ispisan na ekranu nakon pokretanja procesa. Naravno, moe ga se doznati i koritenjem naredbe ps l.

STANJA PROCESA

SLIKA 1.2

Svaki proces se moe nai u jednom od 3 stanja: 1. Izvrava se (preciznije koristi CPU u tom trenutku) 2. Spreman je (izvriv (runnable) , privremeno zaustavljen jer neki drugi proces koristi procesor) 3. Blokiran (ne moe nastaviti izvravanje dok se ne dogodi vanjski uvjet)

Mogue promjene stanja: 1 -> 2, 2 -> 1, 1 -> 3 i 3 -> 2

619/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

KREIRANJE PROCESA
etiri su razloga koji uzrokuju kreiranje procesa: 1. Inicijalizacija sustava 2. Poziv sistemskog poziva za kreiranje procesa od strane nekog drugog aktivnog procesa. 3. Korisniki zahtjev za kreiranje procesa. 4. Pokretanje neke skripte.

Kada se pokree operacijski sustav, obino se kreira nekoliko procesa. Neki od njih su prvom planu i komuniciraju sa korisnikom i obavljaju nekakav posao za njega, dok su ostali procesi u pozadini, nevezani za pojedinog korisnika, nego za pojedinu funkciju. Procesi koji ostaju u pozadini kako bi rukovali sa aktivnostima poput e-maila, web stranica, printanja i sl. zovu se daemons. Novi proces moe biti kreiran od nekog drugog procesa u bilo koje vrijeme. Npr. ako treba dohvatiti veliki broj podataka preko mree kako bi se sekvencijalno s njima neto raunalo, uobiajeno je da se kreira novi proces koji bi dohvaao te podatke preko mree i spremao ih u nekakvu zajedniku memoriju, dok bi prvi proces uzimao te podatke i raunao s njima. Posebno e doi do ubrzanja kod vieprocesorskih sustava kad bi se svaki od tih procesa odvijao na razliitim procesorima. U nekom interaktivnom sustavu korisnik moe startati program tipkajui naredbu ili klikom na ikonu. I jednim i drugim nainom starta se novi proces u kojem se izvrava odabrani program. Zadnji sluaj kad se proces kreira je npr. pokretanje neke skripte. Korisnik moe poslati sustavu nekakav zathjev ili skriptu (moe i preko 'udaljenih poziva'), nakon ega e operacijski sustav, kad odlui da ima dovoljno resursa za pokretanje idueg posla, kreirati novi proces i unutar njega pokrenuti posao iz reda zahtjeva.

620/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Tehniki gledano, u svim ovim sluajevima, neki postojei proces sistemskim pozivom kreaira novi proces. U UNIX-u postoji sam jedan sistemski poziv za kreiranje novog procesa: fork. Ovaj poziv klonira proces koji ga je pozvao. Nakon fork-a dva procesa, roditelj i dijete, imaju istu memorijsku sliku, jednaki vrijednosti u okruenju (enviroment strings) i iste otvorene fileove. Obino proces dijete sa sistemskim pozivom execve ili nekim slinim poziva neki novi program. Npr. kada korisnik u komandnoj ljusci utipka npr. sort, ljuska sa forkom klonira proces i u procesu dijetetu izvri sort. Razlog ovog postupka u 2 koraka je da bi se djetetu omoguila manipulacija sa file deskriptorima nakon fork-a, a prije izvravanja nekog drugog programa, kako bi se mogle izvriti redirekcije standardnih ulaza i izlaza. U Unix-u, nakon to se proces kreira i roditelj i dijete imaju vlastiti adresni prostor. Ako jedan od njih promijeni neto u svom adresnom prostoru, ta promjena nije vidljiva u drugom. U Unix-u je adresni prostor dijeteta kopija adresnog prostora roditelja, dok su u Windowsima ti adresni prostori razliiti od poetka.

Primjer 1: simuliranje komandne ljuske: U pseudo-jeziku opis ljuske bi mogli dati na ovaj nain: ponavljaj{ ispii_ prompt; uitaj_naredbu(N, P); kreiraj_novi_proces(); roditelj: ekaj dok proces dijete ne zavri; dijete: pokreni naredbu N sa parametrima P; }

621/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Primjer 2: specifinost fork naredbe pod Unixom; primjer da procesi imaju razliite adresne prostore.

ZAVRETAK PROCESA
1. 2. 3. 4. Normalni zavretak (dobrovoljno) Zavretak zbog greke (Error exit) (dobrovoljno) Nepopravljiva greka (Fatal error) (prisilno) Zavren (ubijen) od strane nekog drugog procesa (prisilno)

TERMINACIJA CHILD PROCESA

Nakon kreiranja childa,postoje dvije mogunosti:parent proces zavrava prije childa,ili child zavrava prije parenta.Prilikom zavretka child procesa,parent procesu je poslan signal,koji obavjetava parent proces o unistenju child procesa.Tada je child potpuno uklonjen iz sustava. Stanje izmeu child-ovog zavretka i prije nego sto to parent primi na znanje se naziva zombie.Ako postoji pogreka u kodiranju parent procesa,child ostaje u zombie stanju zauvijek. Mogue ga je uoit pokretanjem ps naredbe.Prepoznaje se po stringu <defunct> .Obavjetavanje procesa o unitenju child-a je najjednostavnije implementirati preko sistemskog poziva wait().Prilikom pozivanja wait() sistemskog poziva,proces je zaustavljen sve dok jedan od njegovih child procesa ne prekine s izvravanjem.Upotreba signala(SIGCHLD ili SIGCLD) je uinkovitija od uporabe wait sistemskog poziva.

622/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

MEUPROCESNA KOMUNIKACIJA (INTER-PROCESS COMMUNICATION)


IPC ili Inter-Process Communication je komunikacija,razmjenom podataka ili kontrolnih informacija,izmeu procesa unutar viezadanog operativnog sustava ili meu vie umreenih raunala. Osnovne metode meuprocesne komunikacije na UNIX raunalima su: -Pipes -Signali -Message queues -Semafori -Dijeljena memorija -Sockets Message queues,semafori i dijeljena memorija su metode koje izvorno potjeu od Unix System V release 4,pa se zbog toga nazivaju i System V IPC.

PIPE
Pipe (anonymous pipe ili unnamed FIFO) je jedan od naina preko kojeg procesi mogu meusobno komunicirat.Pipe je jednosmjerni mehanizam koji omoguuje razmjenu niza bajtova izmeu dva povezana procesa.Pipe moe biti koriten za prenoenje podataka ili za sinkronizaciju izmeu oba procesa.Mogua je i komunikacija u dva smjera,te su u tom sluaju potrebna dva pipe-a.Poredak u kojem su bajtovi zapisani na pipe je identian poretku kako se ti bajtovi itaju s pipe-a.Pipe spaja standardni izlaz(STDOUT) jednog procesa na standardni ulaz(STDIN) drugog procesa,tj STDOUT jednog procesa je STDIN drugog procesa.Jedna od glavnih karakteristika pipe-a je da samo procesi povezani s procesom koji je stvorio pipe mogu meusobno komunicirati preko tog pipe-a. Pipe() je sistemski poziv kojim se stvara read-write pipe koji slui za ostvarivanje komunikacije meu procesima.Poziv uzima za argument polje od dva integera koji e biti
623/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

koriteni za uvanje dva file descriptora.Prvi integer koristimo za itanje s pipe-a,a drugi za pisanje na pipe. Primjer koritenja funkcije: int pipes[2]; int rc = pipe(pipes); if (rc = = -1) { perror("pipe"); exit(1); } Ako pipe() sistemski poziv uspije,pipe e biti kreiran.Pipes[0] e sadravati broj njegovog file descriptora za itanje,a pipes[1] e sadravati broj njegovog file descriptora za pisanje. Nakon poziva fork() funkcije,te kreiranja child procesa,polje pipes[] je identino unutar parenta i unutar child-a,te zbog toga oboje sadre file descriptor pipe-a. /* first, define an array to store the two file descriptors */ /* now, create the pipe */ /* pipe() failed */

Kreiranje pipe-a iz shell-a Unutar shell-a pipe se kreira oznakom |. Npr. ls | more -svaka se od te dvije naredbe izvodi kao zasebni proces.Oba procesa su spojena pipe-om.

Dvosmjerna komunikacije preko pipe-a Ostvaruje se upotrebom dvaju pipe-ova.,svaki za jedan smjer(od parenta prema childu i od childa prema parentu).Loa strana upotrebe dvaju pipe-ova je u tome to mogu uzrokovat stanje poznato pod nazivom deadlock.

624/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Deadlock- stanje u kojem grupa od dva ili vie procesa eka da se oslobode resursi koji su trenutno zauzeti od jednog ili vie procesa unutar iste grupe,ili ekaju na neki dogaaj za koji postoji pretpostavka da bi trebao biti poslan od nekog drugog procesa unutar grupe. Dvije su mogue situacije koje mogu uzrokovati deadlock: Oba pipe-a su prazna i oba procesa pokuavaju itati svoj ulazni pipe.Iz razloga to su oba pipe-a prazna,oba procesa su blokirana kod itanja,te zauvijek ostaju u tom stanju. Svaki pipe posjeduje buffer ograniene veliine.Kad proces zapisuje na pipe,podaci su smjeteni na buffer tog pipe-a,sve dok nisu proitani od drugog procesa.Ako je buffer pun,write() sistemski poziv se blokira sve dok se ne oslobodi mjesta na bufferu.Jedini nain da se oslobodi mjesto na bufferu je da drugi proces proita podatke s njega.Problem je u tome,ako oba procesa zapisuju podatke,svaki na svoj writing pipe,sve dok se bufferi ne ispune,oba procesa e se zablokirati na write() sistemski poziv.Nijedan proces ne ita s bilo kojeg pipe-a,pa oba procesa ulaze u deadlock.

NAMED PIPE (FIFO)


Named pipes koristimo ukoliko elimo postii da dva nepovezana procesa meusobno komuniciraju putem pipe-a.Named pipe (named FIFO ili samo FIFO First In,First Out) je pipe,tj. datoteka unutar datotenog sustava koja slui za prijenos podataka izmeu nepovezanih procesa.Proces moe takvu datoteku otvoriti da bi iz nje itao ili u nju pisao.Otvaranjem datoteke za itanje proces dobija pristup na kraj pipe-a za itanje.Otvaranjem datoteke za pisanje,proces dobija pristup kraju pipe-a za pisanje.Ako proces otvori datoteku za itanje,blokiran je sve dok drugi proces ne otvori tu datoteku za pisanje i obrnuto. Sistemski pozivi kojima se kreira named pipe su mknod() ili mkfifo().Analogno tome,naredbama mknod i mkfifo se iz shell-a moe kreirat named pipe. Npr.

625/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

mknod prog_pipe p

-kreiramo named pipe naziva prog_pipe

Kreirani named pipe,kao i svaka druga datoteka unutar datotekog sustava posjeduje access permission koji definira korisnike koji mogu otvoriti named pipe,za itanje ili pisanje,ili oboje. Izvravanjem naredbe ls -l ,FIFO prepoznajemo po oznaci p na prvom mjestu. Npr. prw-r--r-- 1 root root 0 Jan 4 03:40 prog_pipe

Otvaranje named pipe-a se izvrava isto kao i otvaranje bilo koje druge datoteke unutar datotenog sustava,koristei sistemski poziv open() ili koristei standardnu C funkciju fopen().Ako je poziv uspjean,vraen je file descriptor(u sluaju open() )ili FILE pointer (u sluaju fopen() ).Njih se moe koristit ili za itanje ili za pisanje,ovisno o parametrima proslijeenima sistemskom pozivu open() ili funkciji fopen(). itanje i pisanje s named pipe-a je slino kao i itanje i pisanje u datoteku.Postoje dvije glavne razlike: - Named pipe ne moe biti istovremeno otvoren i za itanje i za pisanje.Proces koji otvara named pipe mora izabrati jedan od ta dva naina(ili itanje ili pisanje) i pridravat ga se sve dok ne zatvori pipe. Kad proces ita iz named pipe-a u kojem nema podataka,proces koji ita se blokira.Proces ne prima EOF (End Of File) vrijednost,kao kod itanja obine datoteke.Kad proces pokuava zapisivati na named pipe koji nema procesa koji ga ita,zapisivanje nije mogue,tj. Proces koji pokuava zapisivati se blokira sve dok drugi proces ponovo ne otvori named pipe.

SOCKETS
Socket je dvosmjerni nain komunikacije izmeu procesa na istom raunalu ili izmeu procesa koji se izvravaju na razliitim raunalima.Socket postoji unutar

626/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

komunikacijske domene.Socket domain predstavlja strukturu adresiranja i skup protokola.Socketi se mogu spajati samo sa socketima unutar vlastite domene. Primjeri socket-a su : Internet domain (TCP/IP version 4) ,Novell's IPX ,i ``Unix domain'' socketi. Unix domain sockets Za razliku od ostalih vrsta socketa,Unix domain socket koristi interni protokol operativnog sustava za komunikaciju meu procesima na jednom raunalu.Postoji slinost s TCP socketima,ali jedna od glavnih razlika je u tome to klijent i server unutar Unix domain-a moraju biti na istom hostu.Upravo zbog toga se ne smatraju mrenim protokolom.Kada se koriste kao stream socketi,Unix domain socketi pokazuju veliku slinost named pipe-u,ali s velikom prednou-uspostavljanje svake nove veze sa socket-om rezultira stvaranjem novog komunikacijskog kanala.

SYSTEM V IPC
System V IPC je skup meuprocesnih komunikacijskih metoda koje originalno potjeu od Unix System V release 4 verzije unix operativnog sustava.Te metode ukljuuje message queues (za slanje i primanje poruka),dijeljenu memoriju (doputa da vie procesa dijeli iste podatke unutar memorije) i semafore (sinkronizacijski mehanizam potreban da bi se uskladio pristup vie procesa pojedinim resursima).Svaki System V IPC resurs je upravljan od sustava,te za razliku od unnamed pipe-a,moe postojati i ako ga je proces koji ga je stvorio uniten.Svaki resurs unutar System V IPC moe biti public ili private.Ako je private,to znai da mu moe pristupiti samo proces koji ga je stvorio ili njegov child.Ako je public,moe mu potencijalno pristupiti bilo koji proces unutar sustava,osim u sluaju ako to nije dozvoljeno permission modom.System V IPC resursi mogu biti zatieni pristupnim permission modom,veoma slino kao i datoteke i direktoriji unutar datotenog sustava.Svaki resurs ima svog vlasnika(korisnika i grupu). Permission mod-ovi definiraju kako procesi koji pripadaju drugim korisnicima na sustavu mogu pristupit pojedinom resursu.Permissioni mogu biti razliito postavljeni za vlasnika resursa,za korisnike iz vlasnikove grupe i za sve ostale.Takoer,permissioni mogu biti odreeni za itanje ili za pisanje. Permissione definira struktura ipc_perm:

627/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

struct ipc_perm { key_t key; /* key identifying the resource ushort gid; ushort cuid; /* creator effective user ID and effective group ID */ ushort cgid; ushort mode; /* access modes ushort seq; /* sequence number }; Pri emu je: key identifikator resursa na kojeg se struktura odnosi uid efektivni user ID vlasnika resursa gid efektivni group ID od grupe koja je vlasnik resursa cuid efektivni user ID korisnika koji je kreirao resurs cgid efektivni group ID od grupe unutar koje je kreiran resurs mode- dozvola pristupa za resurs.Moe imati 6 razliitih vrijednosti: 0400 vlasnik moe itati iz resursa 0200 vlasnik moe pisati u resurs 0040 -grupa koja je vlasnik moe itati iz resursa 0020 -grupa koja je vlasnik moe pisati u resurs 0004 -bilo koji drugi korisnik moe itati iz resursa 0002 -bilo koji drugi korisnik moe pisati u resurs seq sadri interne informacije o resursu. */ */ */ ushort uid; /* owner effective user ID and effective group ID */

628/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Za upravljanje SysV IPC resursima se koriste : ipcs i ipcrm. ipcs provjerava upotrebu postojeih SysV IPC resursa. SYNOPSIS ipcs [-abcmopqstMQST] [-C system] [-N core]

ipcrm uklanja specificirani message queue,semaphore ili segment dijeljene memorije.Za uklanjanje resursa ,potrebna je odgovarajua dozvola. SYNOPSIS ipcrm [-q msqid] [-m shmid] [-s semid] [-Q msgkey] [-M shmkey] [-S semkey] ...

MESSAGE QUEUES
Message queue je niz u koji poruka moe biti smjetena. Poruka je sastavljena od tipa poruke(identifikacijski broj) i podataka.Message queue moe biti private ili public.Ako je private,moe mu pristupiti samo proces koji ga je stvorio ili child od toga procesa.Ako je public,moe mu pristupit bilo koji proces kojem je poznat queue key.Nekoliko razliitih procesa moe zapisivat poruke u message queue ili itat poruke iz niza.Poruke mogu biti iitavane po identifikacijskom broju,pa prema tome ne moraju biti itane u FIFO poretku,kao to je sluaj sa pipe-om. Message queue kreiramo sistemskim pozivom msgget().Msgget() prima dva parametra:queue key i flags. Key moe biti: IPC PRIVATE - stvara private message queue
629/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

pozitivni integer - stvara message queue koji je dosutpan svima(public) Drugi parametar sadri flag-ove koji kontroliraju procesiranje sistemskog poziva.Moe sadravati flag-ove poput IPC_CREAT ili IPC_EXCL.Devet najniih bitova su koriteni za definiranje access permissona za message queue.Bitovi su podijeljeni unutar 3 grupe za vlasnika,grupu i sve ostale.U svakom skupu prvi bit se odnosi na dozvolu za itanje,drugi bit na dozvolu za pisanje,a trei se ignorira. Primjer koda koji kreira privatni message queue: #include <stdio.h> /* standard I/O routines. */ */

#include <sys/types.h> /* standard system data types.

#include <sys/ipc.h> /* common system V IPC structures. */ #include <sys/msg.h> /* message-queue specific functions. */ /* create a private message queue, with access only to the owner. */ int queue_id = msgget(IPC_PRIVATE, 0600); /* <-- this is an octal number. */ if (queue_id == -1) { perror("msgget"); exit(1); } Poruke zapisujemo u message queue upotrebom msgsnd() sistemskog poziva.Msgsnd() sistemski poziv kopira strukturu poruke i stavlja je zadnju u red. Msgsnd() uzima slijedee parametre:

1. int msqid- id message queu-a,vraena vrijednost od msgget() sistemskog poziva 2. struct msgbuf* msg pointer za inicijalizaciju message strukture 3. int msgsz- veliina podatkovnog dijela poruke izraena u bajtovima int msgflg flag-ovi koji odreuju kako poslat message.Moe biti logiki ili IPC NOWAIT

630/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Poruke itamo iz message queua upotrebom sistemskog poziva msgrcv(). Msgrcv() uzima slijedee parametre: 1. int msqid id message queu-a,vraena od msgget() sistemskog poziva struct msgbuf* msg pointer na msgbuf strukturu int msgsz -veliina najvee poruke koju elimo primiti int msgtyp -tip poruke koju elimo itati-moe biti jedna od slijedeih: -0 -pozitivni integer -negativni integer int msgflg -kombinacija bilo koje od slijedeih vrijednosti: -IPC NOWAIT -MSG EXCEPT -MSG NOERROR

631/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

SEMFORI (Semaphores)
Semafor je objekt koji ima funkciju brojaa.Slui za sinkronizaciju pristupa dijeljenim resursima kojima pristupa vie procesa.Najee se koriste kao lock-mehanizam koji sprijeava proces da pristupi odreenom resursu za vrijeme dok drugi proces obavlja neku operaciju nad tim resursom.Kroz semafor ne prolaze nikakvi podaci-njegova jedina funkcija je koordinacija pristupa dijeljenim resursima.Semafori se na UNIX-u implementiraju kao skup,iako skup moe sadravati samo jedan semafor.Skup semafora moe sadravati od jednog semafora pa nadalje,sve do predefiniranog limita.Operativni sustav osigurava da u jednom trenutku samo jedan proces moe upravljati setom semafora.Istovremeni zahtjevi se obavaljaju sekvencijalno. Prema originalnoj definiciji semafor je struktura ija je komponenta nenegativni integer - semval.Nad semaforom su definirane dvije operacije - P i V.Operacija V poveava vrijednost varijable semval za 1.Operacija P smanjuje vrijednost varijable semval za 1.Rezultat smanjivanja vrijednosti varijable semval ne moe biti negativan.Smanjivanje je mogue obavljati sve dok je rezultat nenegativan.V i P operacije su atomarne-ukoliko vie procesa izvrava operacije nad istim semaforom,svaka operacija je zavrena prije nego druga zapone s izvravanjem.Ne moe doi do preplitanja meu procesima u trenutku dok jedan proces obavlja operaciju nad semaforom. Unutar Unix sustava semafor izvrava dvije operacije pod nazivom wait i signal. Na primjer uzmimo da imamo semafor iji je broja postavljen na 1.Samo jedan proces moe izvriti operaciju wait-nazovimo ga proces A.Proces A izvravajui operaciju wait smanjuje vrijednost brojaa za jedan te ulazi u dijeljeni resurs.Kad proces A ue u dijeljeni resurs vrijednosr brojaa je jednaka 0.Proces A izvrava instrukcije nad dijeljenim resursom.Svaki drugi proces koji za to vrijeme pokua pristupit resursu,stavlja se u red ekanja.Proces A naputa resurs i izvrava operaciju signal.Ako postoji proces u redu ekanja,broja ostaje jedak 0.Slijedei proces iz reda ekanja ulazi u dijeljeni resurs i zapoinje s izvravanjem.Svi ostali procesi ostaju u redu ekanja.Ukoliko ne postoje procesi koji ekaju na pristup dijeljenom resursu,broja se poveava za 1 i time se omoguuje slijedeem procesu(u nekom buduem trenutku kad e neki proces pristupat resursu) da ue u taj resurs.

632/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Kreiranje semafora Kreiranje semafora je omogueno upotrebom semget() sistemskog poziva.Prilikom kreiranja semafora definira se ID,neki flag-ovi (za access permissione),te broj semafora koji elimo u skupu. int semget(key_t key, int nsems, int semflg); key - jedinstveni identifikator,prema kojem se prepoznaje set semafora.

nsmes -broj semafora unutar seta semflg -permissioni na semaforu

SIGNALI
Signali su softwarski generirani prekidi,poslani procesu prilikom nekog dogaaja.Veina signala je asinkrona.Sinkroni signali mogu biti generirani prilikom pogreke u programu (SIGFPE i SIGSEGV).Signali mogu procesu biti poslani od aplikacije ili iz kernela OS-a (npr. prilikom greke na sabirnici ili izvoenja nedoputene instrukcije). Svaki signal ima jedno od podrazumijevanih djelovanja koja spadaju u jednu od slijedeih kategorija: 1. Signal je odbaen nakon primanja 2. Proces je uniten nakon to je signal primljen 3. Datoteka jezgre je zapisana,a zatim je proces uniten 4. Nakon primanja signala proces je zaustavljen Veina signala moe biti ignorirana ili blokirana.Jedna od iznimki je KILL signal koji ne moe biti ignoriran.

633/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

PROGRAMI ZA UPRAVLJANJE PROCESIMA


PS
ps daje pregled procesa koji se trenutno izvravaju na sustavu. Primjer ispis-a ps -el naredbe:

F S 4 S 1 S 1 S 1 S 1 S 1 S 1 S 1 S 1 S 1 S 1 S 1 S 1 S 1 S 5 S 5 S 5 S 5 S 5 S 5 S 5 S 1 S 1 S 5 S 5 S 1 S 1 S 4 S 4 S 4 S 4 S 4 S 4 S 4 S

UID 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 29 0 0 0 0 51 0 0 43 0 2 0 0 0 0 0 0 0

PID 1 2 3 4 9 5 6 7 8 10 11 15 73 3056 3060 3078 3097 3164 3202 3216 3236 3245 3264 3275 3335 3344 3353 3361 3362 3363 3364 3365 3366 3367

PPID 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

C PRI 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75 75 75 94 85 75 75 75 75 75 85 75 75 75 75 75 85 84 85 75 75 85 75 75 75 99 75 82 82 82 82 82 82 75

NI ADDR 0 0 0 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 0 -

SZ WCHAN

TTY

TIME CMD 00:00:04 init 00:00:00 keventd 00:00:00 kapmd 00:00:00 ksoftirqd_C 00:00:00 bdflush 00:00:00 kswapd 00:00:00 kscand/DMA 00:00:00 kscand/Norm 00:00:00 kscand/High 00:00:00 kupdated 00:00:00 mdrecoveryd 00:00:00 kjournald 00:00:00 khubd 00:00:00 syslogd 00:00:00 klogd 00:00:00 portmap 00:00:00 rpc.statd 00:00:00 apmd 00:00:00 sshd 00:00:00 xinetd 00:00:00 sendmail 00:00:00 sendmail 00:00:00 crond 00:00:00 cupsd 00:00:00 xfs 00:00:00 anacron 00:00:00 atd 00:00:00 mingetty 00:00:00 mingetty 00:00:00 mingetty 00:00:00 mingetty 00:00:00 mingetty 00:00:00 mingetty 00:00:00 gdm-binary

342 schedu ? 0 contex ? 0 schedu ? 0 ksofti ? 0 bdflus ? 0 schedu ? 0 schedu ? 0 schedu ? 0 schedu ? 0 schedu ? 0 md_thr ? 0 end 0 end ? ?

360 schedu ? 342 do_sys ? 385 schedu ? 381 schedu ? 341 schedu ? 876 schedu ? 506 schedu ? 1477 schedu ? 1428 pause ?

354 schedu ? 1875 schedu ? 1290 schedu ? 350 rt_sig ? 352 schedu ? 338 schedu tty1 338 schedu tty2 338 schedu tty3 338 schedu tty4 338 schedu tty5 338 schedu tty6 3528 schedu ?

634/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb


5 S 5 S 4 S 4 S 1 S 0 S 0 S 0 S 4 S 4 R 4 S 4 S 0 S 0 S 0 S 0 S 0 S 0 S 0 S 4 S 0 S 0 R 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3410 3744 4270 4279 4337 4348 4350 4352 4355 4361 4368 4370 4372 4374 4376 4378 4379 4381 4726 4727 4728 5294 3367 1 3410 3410 4279 1 1 1 1 3216 1 1 1 1 1 1 4376 1 1 4726 4726 4728 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 83 75 81 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3811 wait4 ?

Programski alati na Unix raunalima

00:00:00 gdm-binary 00:00:00 gpm 00:01:10 X 00:00:00 gnome-sessi 00:00:00 ssh-agent 00:00:00 gconfd-2 00:00:00 bonobo-acti 00:00:01 metacity 00:00:00 gnome-setti 00:00:00 fam 00:00:03 gnome-panel 00:00:04 nautilus 00:00:00 magicdev 00:00:00 eggcups 00:00:00 pam-panel-i 00:00:00 rhn-applet00:00:00 pam_timesta 00:00:00 notificatio 00:00:00 gnome-termi 00:00:00 gnome-pty-h 00:00:00 bash 00:00:00 ps

352 schedu ?

- 16038 schedu ? 4623 schedu ? 783 schedu ? 2806 schedu ? 1533 schedu ? 3209 schedu ? 4288 schedu ? 663 ?

5535 schedu ?

- 19369 schedu ? 4057 schedu ? 4156 schedu ? 2899 schedu ? 6061 schedu ? 352 schedu ? 4209 schedu ? 5003 schedu ? 463 schedu ? 1078 wait4 790 pts/0 pts/0

F Flag.Pokazuje vrijednost flag bitova za proces. S Oznaava stanje procesa.Dvije najee vrste S vrijednosti su : S (Sleeping) i R (Runnable).Ostale vrijednosti mogu biti: O (Running on processor) , Z (Zombie) i T (Stopped) UID Pokazuje UserID(UID) vlasnika procesa. PID Pokazuje ProcessID svakog pojedinog procesa.PID je jedinstven za svaki proces. PPID Parent Process ID.Identificira parent proces. C- Iskoritenje procesora. PRI Prioritet procesa.

635/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

NI - Nice vrijednost.Koristi se pri raunanju prioriteta. ADDR - Memorijska adresa procesa SZ - Ukupna veliina procesa unutar virtualne memorije. WCHAN - Dogaaj na koji proces eka. TTY Terminal dodijeljen procesu.? je prikazan kad ne postoji terminal. TIME Ukupno vrijeme izvravanja procesa. CMD Naredba koja je pokrenula proces.

636/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

KILL
kill-unitava proces SYNOPSIS kill [ -s signal | -p ] [ -a ] pid ... kill -l [ signal ] Kill alje odreeni signal specificiranom procesu.Ukoliko nijedan signal nije odreen,alje se TERM signal.Root moe unititi skoro bilo koji proces na sustavu.Nije mogue poslati signal init procesu,jer nema ugraen signal handler.Da unitimo proces koji je u naem vlasnitvu proslijeujemo naredbu kill i PID procesa. Npr. martyp $ ps -ef | grep martyp martyp 19336 19334 0 05:24:32 pts/4 0:01 -ksh martyp 19426 19336 0 06:01:01 pts/4 0:00 grep martyp martyp 19424 19336 5 06:00:48 pts/4 0:01 find / -name .login martyp $ kill 19424 martyp $ ps -ef | grep martyp martyp 19336 19334 0 05:24:32 pts/4 0:01 -ksh martyp 19428 19336 1 06:01:17 pts/4 0:00 grep martyp [1] + Terminated martyp $ U primjeru je najprije izvrena ps naredba da bi se izlistali svi procesi iji je vlasnik martyp,zatim je izvreno unitavanje procesa te provjera da je proces nestao s popisa. find / -name .login &

637/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Krunoslav Zeman

Signali

638/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

UVOD
Signali su softverski prekidi koji se dostavljaju procesima. Svi procesi koji se izvravaju reagiraju na signale koje im alje jezgra operacijskog sustava. Operacijski sustav koristi signale kako bi procesu dojavio da se dogodila neka iznimna situacija. Takav signal moe biti proizveden od same jezgre, proces ga moe poslati sam sebi ili drugom procesu, ili ga moe poslati korisnik. Signali su klasini primjer nesinkronih dogaaja, jer se mogu pojaviti u bilo koje vrijeme u procesu.

639/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

PROCESI
Proces je program koji je trenutno u izvravanju. Svaki proces zauzima odreene sistemske resurse, kao to si memorija i procesorsko vrijeme. Kernel prua korisnicima iluziju konkurentnog izvravanja vie procesa u isto vrijeme rasporeivanjem tih resursa meu procesima koji su spremni za izvravanje. Proces se izvrava ili u korisnikom ili u kernel modu. U korisnikom modu instrukcije se izvravaju u neprivilegiranom modu hardvera. Kada proces zatrai od kernela da izvri neki sistemski poziv, instrukcije se vre u privilegiranom, ali kernelom ogranienom i kontroliranom modu. Ovako su aplikacije odvojene od hardvera. Kernel razlikuje procese prema njihovom proces identifier (PID) broju. Korisnici mogu kreirati procese, kontrolirati izvravanje procesa i primiti obavjest kada se status izvravanja procesa promjeni. Procesi mogu stvoriti nove pozivanjem sistemskog poziva fork. Njime se stvara istovjetna kopija procesa, dobiju se dva ista programa i sa istim vrijednostima. Oba procesa (roditelj i djete) nastavljaju s izvravanjem instrukcije koja slijedi poslije pozivanja fork-a, s tim to postoji jedna razlika, djetetu fork vraa vrijednost nula, a roditelju vraa vrijednost PID-a djeteta.(koji je razliit od nule). Obino nakon pozivanja fork-a jedan od ova dva procesa poziva sistemski poziv execve, kojim se vri prepisivanje postojee memorijske slike procesa novom, koja sw ita iz binarnog faila, poslje ega poinje izvravanje novog programa. Proces moe zavriti svoje izvoenje pozivanjem sistemskog poziva exit. Ako je njegov roditelj pozvao sistemski poziv wait, PID djeteta se signalom alje roditelju tako da on moeznati koje je djete zavrilo s izvravanjem. Ako se proces dijete srui sistem simulira exit sistemski poziv i obavjetava roditelja. Prilikom izlaenja, proces dijete postaje zombi proces, koji se ne izvrava, ali postoji u memoriji, kako bi roditelj mogao, koristei wait4 sistemski poziv, da dobije vie informacija o djetetovom izvravanju.

640/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

Multiprogramiranje
-predstavlja iluziju paralelnog izvravanja vie procesa ili programa. Kernel to omoguava pomou smjenjivanja kontksta procesa (context switching) . Kontekst procesa obuhvaa sve informacije koje kernel koristi za izvravanje procesa (PID,prioritet,stanje izvravanja,data,stack i text segmente,stanje signala,akcije signala,akcije na signale,tajmere,dekriptore...). Kernel odluuje koji e se proces sljedei izvravati, to se naziva scheduling vremensko planiranje.

Scheduling
Zadatak kernela je da isplanira i zakae izvravanje procesa tako da svi procesi mogu zauzeti podjednako resursa. Programi se ocjenjuju prema koliini raunanja i koliini I/O koje izvravaju i na osnovu toga im se odreuje prioritet. On se u FreeBSD-u izrunava svake sekunde, na osnovu koliine raunanja u prethodnom periodu, koliine memorije koju zauzima, ukupne zauzetosti resursa sistema i vrijednosti nice koju ima svaki proces i koja oznaava poeljni prioritet. Svi procesi naizmjenino dobivaju odreeni vremenski period izvravanja. U FreeBSD-u ovaj period je 0,1 sekunda, poslje ega kernel prelazi na izvravanje procesa sa najviim prioritetom. Procesi koji ekaju da se I/O operacija zavri imaju vei prioritet izvravanja, jer se izvravaju u kernel-modu. Nasuprot tome, procesima koji su zahtjevaju dosta raunanja (procesorskog vremana) prioritet im se smanjuje, kako ne bi zauzeli kompletan procesor i zaustavili izvravaje ostalih procesa. Na ovaj nain 4.4BSD kernel daje prednost interaktivnim programima (kakvi su npr. text editori) nad dugotrajnijim batch-type procesima koji zahtjevaju dosta procesorskog vremena i koji zaguuju sistem.

641/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

Ogranenje resursa
Kernel podrava ograniavanje koliine resursa koji su dostupni pojedinim procesima. Ova ogranienja mogu biti: maksimalno CPU vrijeme koje proces moe zauzeti, koliina memorije koju moe alocirati, veliina i broj fajlova koje proces moe kreirati, broj simultanih procesa koje korisnik moe pokrenuti i dr. Za svako ogranienje postoje soft i hard limit. Kada proces pree soft limit site mu signal koji obino rezultira prekidanjem izvravanja procesa, ali proces moe i ignorirati ovaj signal i pokuati osloboditi resurse. Ukoliko to ne napravi sljedei pokuaj alociranja jo resursa nee uspjeti. Hard limit se ne moe prekoraiti. Svi korisnici mogu svojim procesima smanjiti hard limit, a jedino superuser ga moe poveati.

Sistemski procesi
Svi procesi u 4.4BSD-u (i naravno u FreeBSD-u) potiu od jednog procesa kojeg pokree kernel. Proolikom pokretanja sistema kreiraju se tri procesa i oni uvijek postoje i izvravaju se. Procesi swapper i pagedaemon su procesi koji se izvravaju u kernel modu. Swapper (PID 0) je odgovoran za vremensko planiranje premjetanja procesa i RAM memorije u sekundarni memorijski prostor (swap) ukoliko sistem ima manjak memorije. Pagedaemon (PID 2) je odgovoran za ispisivanje djelova adresnog prostora procesa swap. Init (PID 1) je proces koji se izvrava u korisnikom modu, van kernela i koji je odgovoran za administrativne zadatke, kao to je pokretanje drugih procesa (po jedan getty proces u svaki terminal maine) zatvaranje procesa prilikom gaenja sistema (ulaskom u beskonanu petlju ili resetiranjem sistema).

642/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

Identifikatori korisnika
-Vana odgovornost operativnog sistema je da prui mehanizam za kontrolu i ogranienje pristupa privilegiranim operacijama kernela. U FreeBSD-u ovaj mehanizam se zasniva na razlikovanju korisnika i grupa korisnika sistema. Svaki korisnik ima jedinstveni user identifier (UID), 32-bitni broj koji mu je pripisao sistemski administrator. Korisnici su svrstani u grupe, koje se oznaavaju GID (group identifier) brojem. Jednom korisniku koji se naziva superuser dostupne su sve operacije kernela, dok su mnoge od njih nedostupne obinim korisnicima. Svakom procesu su pripisani UID i GID korisnka koji ga je pokrenuo, tako da obini korisnici mogu slati signale svojim procesima. Svaki fail ima pristupne dozvole za vlasnika faila,grupu korisnika kojoj pripada vlasnik i ostale korisnike. Ove dozvole ukljuuju itanje,prepravljanje i izvravanje faila. Ovako se osigurava kontrola pristupa failovima. U unix sistemima postoje setuid i setgid programi kioji omoguuju da korisnik kontrolirano izvri neke operacije koje mu nisu dozvoljene. Ovakvi programi moraju biti veoma paljivo napisani kako ne bi dolo do zloupotrebe privilegija.

Grupe procesa
Procesi su organizirani u grupe procesa. Prilikom pokretanja proces ulazi u grupu procesa u kojoj je i njegov roditeljski proces, a i sam moe napraviti novu grupu. Procesi unutar jedne grupe mogu meusobno slati signale , a signali se mogu poslati cijeloj grupi, tako da svi procesi te grupe prime signal. Ovo se koristi npr. Kada shell pokrene posao (job) kao to je pipeline. Vie procesa se spajaju pajpovima, a signali se mogu slati sviim procesima tog posla odjednom.

643/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

SIGNALI
Signali su kratke poruke kojima je omogueno slanje zahtjeva za prekid odreenom procesu. Signali se mogu razmjenjivati izmeu dvaju procesa (jedan alje signal drugom) ili sama jezgra operacijskog sustava (kernel) moe slati signal odreenom procesu. Popis signala moe se nai u /usr/include/asm/signal.h header datoteci sustava.

Popis signala
#define SIGHUP #define SIGINT #define SIGQUIT #define SIGILL #define SIGTRAP #define SIGABRT #define SIGIOT #define SIGBUS #define SIGFPE #define SIGKILL #define SIGUSR1 #define SIGSEGV #define SIGUSR2 #define SIGPIPE #define SIGALRM #define SIGTERM #define SIGSTKFLT #define SIGCHLD #define SIGCONT #define SIGSTOP #define SIGTSTP #define SIGTTIN #define SIGTTOU #define SIGURG 1 2 3 4 5 6 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
644/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

#define SIGXCPU #define SIGXFSZ #define SIGVTALRM #define SIGPROF #define SIGWINCH #define SIGIO #define SIGPOLL

24 25 26 27 28 29 SIGIO

Vidi se da svaki signal ima svoje ime i broj koji ga predstavlja. Funkcije veine navedenih signala su unaprijed dodijeljene. Tako npr. signal KILL (broj 9) uzrokuje zavretak procesa kojemu je namijenjen. Kaemo da smo proces 'ubili' signalom KILL. Signalima STOP i CONT moe se zaustaviti pa nastaviti izvoenje procesa. No, ima i signala kojima funkciju odreuje korisnik (programer). To su signali USR1 i USR2. Ponekad se moe dogoditi da

je isti signal predstavljen drugim brojem na drugom UNIX sustavu. Zbog toga je preporuljivo koristiti imena signala, a ne njihove brojeve. Isto tako, nisu ba svi signali definirani na svim UNIX sustavima. Slanje signala vri se pozivom sustava kill: int kill(int PID, int SIGNAL) gdje je PID cjelobrojna varijabla koja predstavlja Process ID procesa kojem se alje signal, a SIGNAL je cjelobrojna varijabla koja predstavlja broj signala koji se alje. No, postoji i u ljusku ugraena naredba istog naziva (koja se i zasniva na istoimenom pozivu sustava): kill. Ona slui za slanje signala odreenom procesu iz komandne linije. Naredbom kill l dobiva se popis svih signala. .

Uvjeti koji mogu izazvati generiranje signala


645/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

Od strane terminala generirani signali se pojavljuju kad korisnik pritisne odreene tipke (ili odreenu kombinaciju tipki). Npr. : obino CTRL+C generira signal za kraj izvravanja pojedinog programa Greke (iznimke, exceptions) takoer mogu generirati signal, npr. dijeljenje sa nulom, pogrena memorijska referenca i slino. kill funkcija, odnosno kill naredba na UNIX-u alje signal nekom drugom procesu ili grupi procesa. Softverski uvjeti generiraju signal kad se dogodi neto ega bi proces trebao biti svjestan, npr. kada sat alarma postavljen od strane procesa istekne.

Signal moe biti poslan u bilo kojem trenutku, ali uvijek ne mora biti primljen niti procesi koji ga prime ne moraju uvijek reagirati na njega. Signal ne sadri nikakve informacije i moe biti poslan samo odreenom procesu ili procesima. Signali se nikada ne koriste za normalnu komunikaciju, nego samo za posebne dogaaje.

Kada se signal genrira on postaje nerijeen (u toku, eng. pending) i takav ostaje neko kratko vrijeme dok ne bude dostavljen procesu kojem je namijenjen. Meutim, mogue je da je takav signal trenutno blokiran od strane sustava, pa moe ostati nerijeen proizvoljno dugo, tj. sve do onog trenutka dok ta vrsta signala ne bude deblokirana. Jednom deblokiran dostavlja se odmah. Postoje tri stvari koje proces moe rei jezgri to da uini s dostavljenim signalom: 1. Ignorirati signal. Ovo radi za veinu signala osim za dva signala koja nikad ne mogu biti ignorirana: SIGKILL i SIGSTOP. Razlog zato ova 2 signala ne mogu biti ignorirana lei u injenici da superuseru mora biti omoguena opcija sigurnog zaustavljanja ili ubijanja procesa. Takoer ako ignoriramo neke signale koji su generirani usljed hardverdske pogreke ponaanje procesa nije definirano. 2. Uhvatiti signal.
646/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

Da bi ovo uradili, jezgri treba rei da pri pojavi signala pozove neku odreenu funkciju u kojoj moemo uraditi prouizvoljnu akciju. 3. Pustiti da se dogodi defaulana akcija. Svaki signal ima svoju defaultnu akciju. Veinom je ta akcija prekidanje rada procesa.

647/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

Vrste signala:
Razliiti operativni sustavi definiraju razliite signale. Svaki signal ima ime. Imena svih signala poinju sa SIG, a popis svih signala u pojedinom operativnom sustavu moe se nai u datoteci signal.h. Imena signala su pozitivne cjelobrojne konstante. ANSI C standard specificira sljedeih 6 signala: SIGINT, SIGILL , SIGFPE, SIGSEGV, SIGTERM, SIGABRT.. Vrste signala Moderne implementacije UNIX-a definiraju oko tridesetak signala. Ovdje je pregled samo najznaajnijih. SIGINT alje se svakom procesu za koji je to kontrolni terminal u trenutku kada je pritisnuta tipka za prekid (standardno DEL, najee izmijenjeno u Ctrl-C). SIGQUIT Slino kao SIGINT, ali se odnosi na tipku za kraj izvravanja (standardno Ctrl-\, najee izmijenjeno u Ctrl-X). SIGKILL Jedini siguran nain unitavanja procesa je da mu se poalje ovaj signal, jer ne moe biti ignoriran niti uhvaen. SIGALARM alje se kada istekne traeno vrijeme ekanja procesa. SIGTERM Ovo je standardni signal za unitavanje procesa. Koristi se i kod iskljuivanja da ubije sve aktivne procese. Oekuje se da e proces koji ga primi uredno spremiti aktualno stanje prije zavretka. sigset i njemu bliski sistemski pozivi void (* sigset(int sig, void (* func)())() ;

648/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

specificira ta se deava prilikom primitka odreenog signala. sig je broj signala. Drugi argument je kazaljka na funkciju i moe biti: SIG_DFL. U ovom sluaju postavlja se automatska reakcija na signal. Za veinu signala to znai unitavanje procesa. SIG_IGN. Ovime se postavlja da signal bude ignoriran. Signal SIGKILL se ne moe ignorirati. SIG_HOLD. Signal se prihvaa ali ne obrauje i obradit e se onda kada se definicija ponaanja za taj signal promijeni. Moe se uvati samo po jedan signal svake vrste. SIGFPE Signal koji se dogaa zbog aritmetike pogreke (dijeljenje s nulom, floating point overflow ili underflow) SIGUSR1 i SIGUSR2 signali slobodni u korisnike svrhe

649/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

Rukovanje signalima
Funkcija kojom moemo promijenit defaultno ponaanje signala, te uhvatiti signal i proizvoljno ga obraditi je funkcija signal (i dio je ANSI C-a). Prototip funkcije je: void (*signal (int, void (*)(int))) (int);[3] Nekoliko objanjenja: signal() je sistemski poziv koji vraa adresu funkcije koja kao argumnet uzima int i ne vraa nikakvu vrijednost . Znai signal vraa sljedee: void (*)(int). signal() vraa prethodno asociranu funkciju za obradu prekida. signal() kao argumente uzima sljedee: Prvi parametar tipa int je broj signala. Obino se predaje konstanta sa nazivom signala, npr. SIGINT, SIGALRM ...) Drugi parametar je pokaziva na funkciju - void (*)(int) - koja kao argument prima cijeli broj i ne vraa nita. U sluaju da sustav detektira signal naveden kao prvi argument, pozvat e navedenu funkciju. Ova funkcija se naziva signal handler. elimo li ignorirati signal naveden kao prvi argument, za signal handler emo odabrati konstantu SIG_IGN: npr. signal(SIGINT, SIG_IGN) elimo li postaviti obradu signala na defaultnu postavku kao drugi argument emo postaviti SIG_DFL, npr: signal(SIGALRM, SIG_DFL) U sluaju uspjeha signal e vratiti adresu funkcije koja je prethodno sluila za obradu prekida, inae vratiti e konstantu SIG_ERR. Primjer: hvatanje signala za kraj programa, primjer za hvatanje aritmetikih pogreaka, primjer sa funkcijom alarm, primjer sa dva procesa i signalima. Funkcija signal ima odreene mane. Na starijim verzijama UNIX-a nije bila dobro implementirana, tako je prilikom svakog poziva signal handlera, trebalo ponovo postaviti signal handler. Druga mana, tj. nedostatak je bio da je ponekad bilo poeljno na neko vrijeme

650/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

blokirati mogunost dostavljanja signala to je zahtjevalo malo drugaiju implementaciju signala. Svaki proces ima signalnu masku koja definira skup signala trenutno blokiranih od strane procesa. Moemo to predoiti na nain da svaki bit sadri predstavlja pojedini signal S obzirom da broj signala moe biti vei nego cijeli broj POSIX.1 definira novi tip sigset_t koji sadrava skup signala.

Funkcije za manipulacije skupom signala


int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigaddset(sigset_t *set, int signo); int sigdelset(sigset_t *set, int signo); sve vraaju 0 ako je OK, -1 u sluaju greke int sigismember(const sigset_t *set, int signo); vraa 1 ako je istina , 0 inae int sigprocmask(int how, const sigset_t *set, sigset_t *set); vraa 0 ako je OK, -1 u sluaju greke

651/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

Signalna maska
sigproc mask ispituje ili postavlja (ili oboje) signalnu masku. Ako je oset nenull pointer, trenutna signalna maska se vraa preko oset. Ako je set ne-null pointer tada how odreuje kako je e se signlna maska modificirati. Mogunosti su: SIG_BLOCK Nova signlna maska za proces je unija trenutne signalne maske i skupa signala definiranog sa set, tj. set sadri signale koje elimo blokirati. SIG_UNBLOCK Nova signlna maska je presjek trenutne signalne maske i skupa signala definiranog sa set, tj. set sadri signale koje elimo deblokirati SIG_SETMASK Postavlja se nova signalna maska. U sluaju da je set null pointer, signalna maska se ne mijenja i vrijednost od how je zanemariva. int sigfillset(sigset_t *set); vraa 0 ako je OK, -1 u sluaju greke Slui za dobivanje skupa signala koji su blokirani i ekaju dostavljanje. int sigaction(int signo, const struct sigaction *act,struct sigaction *oldact); vraa 0 ako je OK, -1 u sluaju greke

652/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

Ova funkcija nasljeuje funkciju signal i slui za ispitivanje ili modificiranje (ili oboje) struct sigaction{ void (*sa_handler)(); /*adresa signal handlera ili SIG_IGN ili SIG_DFL*/ sigset_t sa_mask; /*dodatni signali koje treba blokirati*/ int sa_flags; /*signale opcije npr. SA_RESETHAND */ } int sigsuspend(const sigset_t *sigmask); vraa -1 i postvlja errno na EINTR

Signalna maska procesa se postavlja na sigmask i proces se zaustavlja dok se ne pojavi signal (malo neprecizno reeno: unlock and pause)

653/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

Prekidi i signali
SIGNALI Jezgra moe poslati procesu signal. Taj signal moe biti proizveden od same jezgre, proces ga moe poslati sam sebi ili drugom procesu, ili ga moe poslati korisnik. Primjer signala koji potie od jezgre je signal koji je poslan kada proces pokua pristupiti memoriji koja nije u njegovom adresnom prostoru. Primjer signala koji proces alje sam sebi je alarm. Signal koji proces alje drugom procesu je signal koji unitava procese, a alje ga proces koji eli unititi svoju "porodicu" procesa. Tipini korisnikov signal je prekidni signal. Standardno je postavljeno da se taj signal generira tipkom DEL, meutim, veina korisnika to mijenja u Ctrl-C (stty intr ^C). Postoji tridesetak razliitih signala (u razliitim verzijama UNIX-a moe ih biti manje ili vie). Za veinu signala (izuzetak je SIGKILL i jo neki) proces moe kontrolirati to se deava nakon to primi neki signal. Moe prihvatiti ugraenu akciju to (za veinu signala) rezultira unitavanjem procesa, moe ga ignorirati ili moe uhvatiti signal i izvesti odreenu funkciju. Tip signala (cijeli broj) se prenosi u funkciju kao jedini argument i funkcija ne moe otkriti izvor signala. Nakon povratka iz funkcije proces moe nastaviti od mjesta prekida. Znaenje signala za procese je analogno znaenje prekidnih signala na razini procesora. Signal moe biti poslan u bilo kojem trenutku, ali ne mora biti primljen i ne mora nitko reagirati na signal. Ne sadre nikakve informacije i moe biti

poslan samo odreenom procesu ili procesima. Nikada se ne koriste za normalnu komunikaciju, nego samo za posebne dogaaje. Kazaljka na funkciju. Ovime se oznaava da po primitku signala treba pozvati funkciju. Ne moe se upotrijebiti za SIGKILL. Funkciji e biti predan jedan cjelobrojni argument - vrsta signala.

654/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

Prototip je neto tee razumijeti jer je jedan od argumenata kazaljka na funkciju, a i sama funkcija kao rezultat vraa kazaljku na funkciju - prethodnu definiciju ponaanja za zadani signal. To se moe koristiti ako kasnije treba vratiti prijanje stanje.

Nakon povratka iz funkcije za obradu signala, proces nastavlja s radom od mjesta na kojem je prekinut primitkom signala. Meutim, ako je signal prihvaen za vrijeme ekanja na izvrenje poziva read, write, open, ioctl, wait, ili pause oni e biti prekinuti uz postavljanje greke EINTR u errno (ne odnosi se na pristup obinim datotekama). Neposredno pred poziv funkcije za obradu signala func, ponaanje kod prijema dotinog signala se mijenja u SIG_HOLD. Na povratku iz te funkcije restaurira se func kao funkcija za obradu signala i otputa eventualno pristigli signal. To se moe obaviti i prije zavretka same funkcije, pozivom sigrelse, to onda omoguava prijem novog signala prije nego to je prethodni obraen. int sighold(int sig) ; int sigrelse(int sig) ; Ovo su pozivi za manipulaciju sa signalima. sig je signal. sighold i sigrelse se koriste za zatitu kritinih odsjeaka u programu. sighold je analogan podizanju prioriteta i zadravanju signala dok se prioritet ne spusti sa sigrelse. sigrelse obnavlja akciju procesa prethodno specificiranu u sigset, te otputa ranije primljeni i zadrani signal.

655/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

Ostali pozivi za manipulaciju signalima


Iako su ranije opisani pozivi, slijedi opis jo nekoliko vanijih funkcija i sistemskih poziva povezanih sa signalima: int pause(void) ; zaustavlja proces do dolaska nekog signala. To ne moe biti neki od signala koji se ignoriraju. Takoer, ako signal izazove prekid procesa, pause ne moe nita vratiti. Tek ako funkcija za hvatanje signala vraa neto, pause se vraa s rezultatom -1 i errno postavljenim na EINTR. unsigned alarm(unsigned secs) ; postavlja sat na vrijednost secs to predstavlja broj sekunda, a vraa vrijednost na koju je prethodno bio postavljen. Svaki proces ima sat spremljen u segmentu sistemskih podataka. Kada istekne postavljeno vrijeme alje se signal SIGALRM. unsigned sleep(unsigned secs) ; alarm i pauseu kombinaciji formiraju standardnu funkciju sleep. Prvo se postavlja alarm na traeno vrijeme u sekundama, a zatim poziva pause da eka prijem signala. Meutim, sleep moe trajati i krae od zadanog vremena jer pause ne eka samo SIGALRM nego bilo koji signal. Takoer, sleep se brine o ranije postavljenim alarmima pa moe zavriti ranije ili e po svom zavretku restaurirati od prije postojei alarm. U svakom sluaju, sleep kao rezultat vraa "neprospavano" vrijeme (koliko je proces ranije probuen zbog drugih signala). To vrijeme se onda moe nadoknaditi dodatnim spavanjem. int kill(int pid, int sig) ; alje signal procesu. pid je ID broj procesa koji prima signal, a sig je broj signala. Ako je pid jednak 0, signal se alje svim procesima koji su istoj grupi kao i proces koji alje signal. To se obino upotrebljava kod komande kill, ime se unitavaju svi procesi koji se izvode u pozadini, bez obzira na njihov ID.

656/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

U veini sluajeva kill se koristi za unitavanje procesa (od tuda dolazi ime) ili za testiranje ponaanja kod greke simuliranjem signala. Najee se koristi kao komanda, a ne kao poziv u programu. void (* signal(int sig, void (* func)())() ; specificira ta se deava prilikom primitka odreenog signala, slino kao i sigset. signal je stariji i razlikuje se po tome to ne poznaje SIG_HOLD. Takoer, ponaanje na ulasku u funkciju za obradu signala ini ga manje upotrebljivim od sigset. Neposredno pred poziv funkcije za obradu signala, ponaanje kod prijema dotinog signala se mijenja u SIG_DFL. To znai da e slijedei signal istog tipa ubiti proces. Ovo ponaanje se moe promijeniti unutar same funkcije za obradu signala, ali uvijek postoji interval (koji kod veeg optereenja moe biti i prilino dugaak) unutar kojeg prijem signala moe ubiti proces. UNIX ne dozvoljava pojedinom korisniku izravno koritenje prekida procesora. Zato prekide treba simulirati koristei signale koje jezgra operacijskog sustava alje procesima.

657/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

OPIS STANDARDNIH SIGNALA


Linux podupire standardne signale nabrojene ispod,nekoliko signalnih brojeva su zavisni o arhitekturi,to je istaknuto u stupcu value. U stupcu value gdje postoje tri vrijednosti, prva je uobiajeno koja vrijedi za alpha and sparc, srednja za i386,ppc and sh, i zadnja vrijednost je za mips. - oznaava da je signal odsutan za odgovarajuu arhitekturu. U stupcu Action mogu se pojaviti eriti vrijednosti, a njihovo znaenje je: Term-defoltna akcija za terminiranje procesa Ing defoltna akcija za ignoriranje signala Core-defoltna akcija za ignoriranje signala i odvacivanje jezgre Stop-defoltna akcija za zaustavljanje procesa

658/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

POSIX.1 standard Signal SIGINT SIGQUIT SIGILL SIGABRT SIGFPE SIGKILL SIGSEGV SIGPIPE SIGALRM SIGTERM SIGUSR1 SIGUSR2 SIGCHLD SIGCON SIGSTOP SIGTSTP SIGTTIN SIGTTOU Value 2 3 4 6 8 9 11 13 14 15 30,10,16 31,12,17 20,17,18 19,18,25 17,19,23 18,20,24 21,21,26 22,22,27 STOP STOP STOP STOP tty unos za pozadinske procese Tty izlaz za pozadinske procese Action TERM CORE CORE CORE CORE TERM CORE TERM TERM TERM TERM TERM IGN Coment Prekid s tipkovnice Quit s tipkovnice Ilegalna instrukcija Prekid Iznimka pominog zareza Kill signal Pogrena referenca memorije Pisanje Vremenski signal za alarm Signal prekida Samodefinirajui 1 Samodefinirajui 2 Zaustavljanje ili prekidanje djeteta Nastavi ako zaustavljeno Zaustavi prces

659/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

Sljedei signali ne nalaze se u POSIX.1 standardu ali su opisani u SUSv2 i SUSv3 / POSIX 1003.1-2001

Signal SIGPROF SIGSYS SIGTRAP SIGURG SIGVTALRM SIGXCPU SIGXZSZ SIGEMT SIGIO SIGCLD SIGPWR SIGINFO SIGLOST SIGWINCH SIGUNUSED

Value 27,27,29 12,-,12 5 16,23,21 26,26,28 24,24,30 25,25,31 7,-,7 23,29,22 -,-,18 29,30,19 29,-,-,-,28,28,20 -,31,-

Action TERM CORE CORE ING TERM CORE CORE TERM TERM IGN TERM

Coment Profiling timer expired Loi argument u rutinu Breakpoint zamka Urgent condition on socket Virtual alarm sat CPU time limit exceeded File size limit exceeded Stack greka na coprocesoru I/O omoguen Sinonim za SIGCHLD Power failure Sinonim za SIGPWR

TERM IGN TERM

File lock lost Window resize signal Nekoriteni signal

660/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

ZAKLJUAK
LINUX implementira signale koristei signale pohranjene u task_struct za procese. Broj podranih signala je ogranien veliinom rijei procesora. Tako da procesor koji radi veliinom rijei od 32 bita moe imati 32 signala, dok 64 bitni procesori mogu raditi sa do 64 signala (Alpha AXP)

661/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

Igor opec

FORK PROCESI

662/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

FORK PROCESI
Svi procesi su stvoreni od strane drugog procesa (parent - roditeljskog procesa), no ponimo ispoetka, tj. od samog kernela. Nakon to se kernel uitao i pokrenuo svoje podatkovne strukture, on trai sve prikljuene ureaje na maini. U tom trenutku operativni sustav nije u stanju raditi nita, osim to nudi servise novonastalim procesima. Ali kako se stvaraju procesi ? Svaki proces na UNIX operativnom raunalu se stvara od stane drugog ve postojeeg procesa koji izvodi fork operaciju. Fork operacija stvara potpuno novi proces koji sadri kopiju koda i podataka od originalnog procesa. Stvaranje novog (child) procesa se sastoji od dvije operacije : a) stvaranje novog procesa (''forking'') - novi proces je stvoren, koji je skoro u potpunosti identian koristiti e isti dio koda b) preusmjeravanje kontrole na novonastali proces (''exec'') - u ovom koraku se mijenja kod sa onog kojeg je do sada koristio majinski proces, na kod kojeg sad koristi novonastali proces. Kada je novonastali proces napravljen, izvriti e naredbu ''exec'' kako bi se sve prebacilo na dio koda gdje je na novonapravljeni proces A tko je stvorio prvi proces? init je prvi proces kreiran na UNIX raunalu, i iz njega se kreiraju svi ostali procesi. Uvijek ima PID (proces ID) 1, to znai da je majinski proces. Njega je kreirao sami kernel operativnog sustava i on je jedini proces na raunalu koji nema majinski proces. init je proces koji je odgovoran za pokretanje svih ostalih servisa na UNIX raunalu. Servisi koje pokree su definirani u njegovoj konfiguracijskoj datoteci / etc / inittab. majinskom procesu, i

663/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

Init proces (PID=1)

Majinski proces (PID=1)

Novonastali proces (PID=0)

664/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

SVOJSTVA PROCESA - PROCES UID I GID


- Kako bi operativni sustav znao to pojedini proces smije raditi a to ne, on mora pohraniti informaciju o tome tko posjeduje pojedini proces (UID i GID). - UNIX operativni sustav pohranjuje dva tipa UID i dva tipa GID informacija. a) pravi UID i pravi GID - pravi procesov UID i GID e biti isti kao UID i GID od korisnika koji je pokrenuo proces, pa e stoga svaki proces koji pokrenete imati va UID i GID - pravi i stvarni procesov UID i GID slue za potrebe brojanja pristupa procesu

b) efektivni UID i GID - efektivni ili uinkoviti UID i GID se upotrebljavaju da bi se ustanovilo koje operacije moe dotini proces izvoditi, tj. koje dozvole (permission-e) ima - najee je efektivni UID i GID jednak stvarnom UID-u i GID-u, no upotrebom specijalnih dozvola (permission-a) pristupa datotekama, mogue je promijeniti efektivni UID i GID

665/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

ODREIVANJE INFORMACIJE O TRENUTNIM PROCESIMA


Kako shell ljuska operativnog sustava izvrava naredbe? - svaki puta kada se izda naredba u shell-u, UNIX stvara novi proces i suspendira trenutni proces sve dok novonastali proces nije gotov(osim u sluaju pozadinskih procesa) - kao to smo i rekli, svaki proces je oznaen svojim PID-om(procesov identifikacijski broj), koji mu je dodijeljen pri njegovom stvaranju, pa zato kada se elimo obratiti pojedinom procesu obraamo mu se preko njegovog identifikacijskog broja redoslijed: 1) eka na korisnika da izda naredbu 2) izvri odreeni broj radnji ako naredba sadri bilo kakve specijalne znakove 3) nae izvrnu (''executable'') datoteku za dotinu naredbu, a u sluaju da ju ne nae, generira pogreku 4) napravi se novi child proces (tj. izvri se fork operacija nad procesom), koji e izvriti naredbu 5) eka dok se naredba ne izvri (child proces se terminira) i vraa se na poetak primjer iz konzole - stanja procesa: upiemo li naredbu ps x u konzoli trebali bismo dobiti popis trenutno aktivnih procesa i njihove podatke PID TT STAT TIME COMMAND 6799 co IW 6823 co IW 6830 co S 6836 co I 6837 co I 6841 p0 I 6840 p1 I 6842 p2 S 6847 p2 R 0:01 -csh[rich] (csh) 0:00 /bin/sh /usr/bin/X11/startx 0:12 X :0 0:01 twm 0:01 xclock -geometry 50x50-1+1 0:01 -sh[rich on xterm] (csh) 0:01 -sh[rich on xterm] (csh) 0:01 -sh[rich on login] (csh) 0:00 ps -x

6829 co IW 0:00 xinit /usr/lib/X11/xinit/xinitrc --

666/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

PID TT STAT TIME

procesov identifikacijski broj kontrolni terminal procesa procesovo radno stanje koliina procesorovog vremena koju je dotini process uspio pribaviti

COMMAND ime naredbe koja je pokrenula process TT kolumna daje imena terminala, koji se mogu saznati pomou naredbe WHO STAT (State of job) kolumna moe biti predstavljena sa etiri znaka ! R(runnable process) proces koji je mogue pokrenuti T(stopped process) zaustavljeni process S(process sleeping) proces koji spava manje od 20 sekundi I (idle process) process koji spava dulje od 20 sekundi

primjer programa: /**************************************************************/ /* /* */ */ */ /* kratki program o procesu (funkciji) fork()

/**************************************************************/ #include <stdio.h> /***************************************************************/ ChildProcess() //globalna funkcija - definirana izvan main-a { int i; for (i = 0; i < 10; i++) { printf ("%d...\n",i);

667/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

sleep(1); } } /**************************************************************/ int main(void) { int pid, cid; //deklariramo dvije varijable u koje emo pohraniti

//procesov id, pa emo znati da li se radi o majinskom //ili novonastalom procesu pid = getpid();//funkcija getpid() vraa 0 ili 1 printf ("Fork demo! Ja sam majcinski proc (pid = %d)\n",pid); if (! fork()) { cid = getpid(); printf ("Ja sam novonastali proc (cid = %d) of (pid=%d)\n",cid,pid); ChildProcess(); exit(0); } printf("Ovdje majc. proc. ceka na novonastali proces\n"); wait(NULL); printf("Novonastali proc. zavrsio, majc. proces isto zavrsava\n"); return 0; }

668/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

RAD PROCESA U POZADINI


Pretpostavimo da elimo pokrenuti neki proces ali ne elimo ekati da se on izvri, nego elimo u meuvremenu izvravati i druge naredbe u shell-u! Mogli bismo to izvesti tako da izvrimo naredbu i kaemo joj da se izvrava u pozadini. Postoje dva naina za napraviti da se proces odvija u pozadini: - (1) prvi je da se pri izvravanju procesa, sami proces deklarira kao pozadinski proces pomou znaka ampersand ('&'). Pretpostavimo da imamo program koji je velik, tj. program koji e se jako dugo izvravati. Mogli bismo ga pokrenuti u pozadini ovako cc longtimer.c & pa e shell kompajlirati dotini proces u pozadini omoguavajui mi davanje daljnjih naredbi. - (2) drugi nain slanja procesa u pozadinu je pomou naredbe 'bg' ako smo pokrenuli proces i zaboravili ga poslati u pozadinu, prvo ga stopiramo (controlz) a zatim ga poaljemo u pozadinu naredbom 'bg'.

669/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

UNITAVANJE PROCESA
Proces moemo unititi koritenjem naredbe 'kill' . Jednostavno naemo procesov PID (na primjer koritenjem naredbe 'ps'), a potom ga unitimo ovako: kill -9 pid Ako proces trenutno radi u konzoli, tj. nije u pozadini moemo ga jednostavno unititi ovako control-C

670/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Fork procesi

ZAKLJUAK (i moji komentari)


Evo ovo je bio kratak seminar o fork procesima, jednom od glavnih aduta UNIX operativnog sustava koji osigurava njegovu sigurnost i stabilnost. Upravo zbog ovakvih rjeenja je UNIX nenadmaiv u stabilnosti i zbog toga se koristi za posluivanje kompleksnih i vrlo zahtjevnih informacijskih sustava, jednostavno nema mu premca. Izabrao sam ovo podruje jer mislim da je najkompliciranije krenuti raditi u konzoli a dok ne zna njezine potencijale i mogunosti, jer se upravo u konzoli moe apsolutno sve, a dok u bilo kakvom grafikom suelju su stvari okljatrene i apsolutan pristup je ogranien u svakom pogledu! Nadam se da e ovaj seminar pomoi shvatiti kako rade procesi . UNIX rules...

671/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

Matija upen

SOCKETS UNIX DOMAIN, NETWORK

672/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

PREGLED TCP/IP PROTOKOLA TCP/IP i Internet


1969. godine ARPA, Advanced Research Projects Agency, osnovala je istraivaki i izvedbeni projekt izrade eksperimentalne packet-switching mree. Mrea, nazvana ARPAnet, bila je napravljena zbog prouavanja tehnika slanja robusnih i pouzdanih podataka. Mnoge tehnike modernih podatkovnih komunikacija razvijene su sa ARPAnet eksperimentalnom mreom. Eksperimentalna mrea bila je toliko uspjena da su je mnoge organizacije, povezane na nju, poele koristiti za svakodnevnu komunikaciju. 1975. godine ARPAnet je iz eksperimentalne postala vrlo razvijena operativna mrea i odgovornost administriranja je preuzela DCA (Defense Communications Agency) kasnije promijenila ime u DISA (Defense Information System Agency). TCP/IP protokoli usvojeni su kao vojni standardi (MIL STD) 1983. godine, i svi hostovi spojeni na mreu bili su primorani prijei na nove protokole. Da bi olakala prijelaz, DARPA4, je zatraila Bolta, Beraneka i Newmana (BBN) da implementiraju TCP/IP protokole u Berkley (BSD) Unixu. Tako je zapoeo brak Unixa i TCP/IP-a. Kako je sa vremenom prihvaen TCP/IP standard, termin Internet se poeo koristiti u svakodnevnoj upotrebi. 1983. ARPAnet se podijelila na MILNET i novu manju ARPAnet. Internet termin se koristio za cjelokupnu mreu: MILNET plus ARPAnet. Poevi od 1983. godine i konstantno rastui jedna stvar je ostala konstanta: Internet je napravljen na TCP/IP protokolu.

Podatkovni komunikacijski modeli


Arhitektonski model razvijen od International Standards Organization (ISO) je konstantno koriten za opisivanje strukture i funkcije podatkovnih komunikacijskih protokola. Ovaj model, nazvan Open System Interconnect (OSI) Reference model, predstavlja osnovnu referencu za promatranje komunikacija. Termini definirani ovim modelom su vrlo razumljivi i
4

tijekom 1980. ARPA, kao dio U.S. Department of Defense, postala je DARPA (Defense Advanced Research Projects Agency) ali agencija i njena misija razvijanja naprednog istraivanja ostala je ista

673/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

naveliko koriteni u komunikacijskoj organizaciji da je nemogue govoriti o podatkovnoj komunikaciji bez koritenja OSI terminologije. OSI model sadri sedam slojeva (layers) koji definiraju funkcije komunikacijskih protokola. Svaki sloj OSI modela predstavlja funkciju koja se izvodi kada se podaci transferiraju kroz kooperativne aplikacije i mree. Slika 1.1. prikazuje svaki sloj sa imenom i sadri kratki funkcionalan opis. Gledajui sliku, protokoli su kao blokovi stavljeni jedan na drugi. Zbog toga, struktura se esto naziva stack ili protocol stack.

slika 1.1. OSI model Sloj ne definira jedinstveni protokol. Svaki sloj definira podatkovne komunikacijske funkcije koje mogu biti koritene od bilo kojeg broja protokola. Dalje, svaki sloj moe sadravati vie protokola gdje svaki provodi uslugu odgovarajui funkciji sloja. Na primjer, file-transfer protokol i elektronika pota oboje provode korisnike usluge i oboje su dio aplikacijskog sloja (Application Layer).

674/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

Arhitektura TCP/IP protokola


Generalno gledajui TCP/IP protokol sastavljen je od manje slojeva nego sedam koritenih u OSI modelu. Mnogi opisi TCP/IP definiraju tri do pet funkcionalnih slojeva arhitekture protokola. etvero-slojni model prikazan na slici 1.2. baziran je na tri sloja (Application, Host-to-host, Network Access) sa dodatnim internet slojem.

Isto kao i u OSI modelu, podaci se alju prema dolje niz stack kada su poslani na mreu i gore uz stack kada su primljeni sa mree. Struktura TCP/IP-a izgleda na nain da se podaci alju niz protokol stack iz aplikacijskog sloja sve do fizike mree. Svaki sloj u stacku dodaje kontrolnu informaciju da bi potvrdili sigurnu dostavu. Ova kontrolna informacija naziva se zaglavlje (header) jer je postavljen na poetak podataka koji se trebaju poslati. Svaki sloj tretira sve informacije koje primi iz sloja iznad kao podatke i stavlja svoje zaglavlje na poetak informacije. Kada su podaci primljeni, dogaa se suprotno, svaki sloj skida svoje zaglavlje prije nego alje podatke sloju iznad. Slika 1.3.

slika 1.3.
675/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

NETWORKING Uvod
Linux kernel podrava mnogo razliitih mrenih arhitektura (TCP/IP je samo jedna od njih), sa nekoliko implementiranih alternativnih algoritama za razvrstavanje mrenih paketa, ukljuujui i programe koji olakavaju sistemskim administratorima postaviti router, gateway, firewall, pa ak i jednostavan World Wide Web server, direktno na nivou kernela. Trenutni kd, inspiriran sa originalnom Berkley Unix implementacijom, je Net-4. Kako i samo ime govori, ovo je etvrta glavna verzija Linux networkinga. Slino kao i VFS, kd koristi objekte za provedbu sukladnog interfacea do velikog broja dostupnih arhitektura. Suprotno od VFS-a, networking kd je organiziran u slojeve (layers), gdje svaki od njih ima vrlo dobro definiran interface. Poto podaci poslani mreom nisu ponovo upotrebljivi, nema potreba za spremanjem u cache. Potrebom za to veom isplativou, Linux izbjegava kopiranje podataka unutar slojeva. Originalni podaci su spremljeni u memory buffer, koji je dovoljno velik da sadri informacije potrebne svakom sloju.

Mrene arhitekture
Mrena arhitektura opisuje kako je pojedina kompjuterska mrea napravljena. Arhitektura definira grupu slojeva gdje bi svaki trebao imati vrlo dobro definiranu namjenu. Programi u svakom sloju komuniciraju koristei razmjenjive skupove pravila i konvencija (tzv. protokol). Generalno gledajui, Linux podrava veliki broj razliitih mrenih arhitektura. Neke od njih su: name PF_APPLETALK PF_BLUETOOTH PF_BRIDGE PF_DECnet PF_INET mrena arhitektura i/ili protokol Appletalk Bluetooth Multiprotocol bridge DECnet IPSs IPv4 protocol

676/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

PF_INET6 PF_IPX PF_LOCAL, PF_UNIX PF_PACKET PF_X.25

IPSs IPv6 protocol Novell IPX Unix domain socket (local communication) IPSs IPv4/IPv6 protocol low-level access X25

IPS (Internet Protocol Suite) je mrena arhitektura Interneta, ponekad nazvana TCP/IP mrena arhitektura zbog glavnih protokola.

Mrena kartica
Mrena kartica (NIC - Network interface card) je specijalna izlazno/ulazna jedinica koja plasira izlazne podatke do umreenog raunalnog sistema i prima pakete od istih sistema u memoriju kernela. Poevi sa BSD-om, svi Unix sistemi dodjeljuju razliito ime za svaku mrenu karticu instaliranu na raunalu; npr. prva mrena kartica dobiva ime eth0. Umjesto koritenja filesistema, sistemski administrator mora postaviti vezu izmeu imena i mrene adrese. BSD Unix je predstavio novu grupu sistemskih poziva koji su postali standard programiranja modela za mrene ureaje.

BSD sockets
Generalno gledajui, svaki operacijski sustav mora definirati odgovarajui Application Programming Interface (API) izmeu korisnikog moda programa i mrenog kda. Linux mreni API je baziran na BSD socketima. Predstavljeni su u Berkley UNIX 4.1cBSD i dostupni su u gotovo svakom operacijskom sustavu slinom Unixu. Socket je dvosmjerna komunikacijska jedinica koja moe biti koritena za komuniciranje sa drugim procesima na istom raunalu ili sa procesom pokrenutim na drugom raunalu. Internet programi kao Telnet, rlogin, talk ili World Wide Web koriste sockete.

677/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

Socket je komunikacija izmeu tzv. ulaznih vrata i krajnje toke kanala koji povezuje dva procesa. Podaci se poalju na ulazna vrata i nakon nekog vremena pojave se na drugoj strani (izlazu). Komunikacijski procesi mogu biti na razliitim raunalima. Mreni kd Kernela prosljeuje podatke izmeu krajnjih toaka. Linux implementira BSD sockete kao datoteke koji pripadaju u sockfs special filesystem. Preciznije, za svaki novi BSD socket, Kernel kreira novi inode u sockfs filesistemu. Atributi BSD socketa su spremljeni u socket strukturi podataka koja je objekt ukljuen u polju u.socket_i sockfs inode-a. metode BSD socket objekta metoda release bind connect socketpair accept getname ioctl listen shutdown setsockopt getsockopt sendmsg recvmsg mmap sendpage opis zatvara socket dodjeljuje lokalnu adresu (ime) uspostavlja vezu (TCP) ili dodjeljuje remote adress (UDP) kreira par socketa za dvosmjernu razmjenu podataka eka zahtjev za spajanje vraa lokalnu adresu implementira ioctl()komande inicijalizira socket da prihvati zahtjev za spajanjem zatvara pola ili obje polovice full-duplex veze postavlja vrijednosti socket flagovima uzima vrijednosti socket flagova alje paket socketu prima podatak od socketa file memory-mapping (ne koriste mreni socketi) kopira podatke direktno iz/prema fajlu (sendfile() sistemski poziv)

678/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

INET sockets
INET socketi su strukture podataka tipa struct sock. Svaki BSD socket koji pripada IPS mrenoj arhitekturi sadri adrese INET socketa u sk polju socket objekta. INET socketi su potrebni jer socket objekti (opisujui BSD sockete) ukljuuju samo polja koja su znaajna za sve mrene arhitekture. Ali, kernel mora takoer zapamtiti i nekoliko drugih informacija za svaki socket bilo koje mrene arhitekture. Na primjer, u svakom INET socketu, kernel zapisuje lokalne i udaljene IP adrese, lokalne i udaljene brojeve portova, relativni transportni protokl, podatke o primljenim paketima, podatke o paketima koji ekaju da budu poslani socketu, te nekoliko tablica metoda za slanje paketa do socketa. Ovi atributi su spremljeni, zajedno sa mnogim drugima, u INET socketima. INET socket objekt takoer definira neke metode specifine tipu transporta protokola (TCP ili UDP). Metode spremljene u strukturi podataka tipa proto: metode INET socket objekta metoda close connect disconnect accept ioct1 init destroy shutdown setsockopt getsockopt sendmsg recvmsg bind backlog_rcv hash unhash get_port opis close the socket uspostavlja vezu ili dodjeljuje remote adress prekida uspostavljenu vezu eka zahtjev za spajanje implementira ioctl()komande INET socket objekt konstruktor INET socket objekt destruktor zatvara pola ili obje polovice full-duplex veze postavlja vrijednosti socket flagovima uzima vrijednosti socket flagova alje paket socketu prima podatak od socketa dodjeljuje lokalnu adresu (ime) funkcija pozvana kada prima paket doda INET socket per-protocol hash tablici makne INET socket iz per-protocol hash tablice dodjeljuje broj porta INET socketu

679/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

sock objekt sadri otprilike 80 polja od kojih su mnoga pokazivai na druge objekte, tablice, metode ili druge strukture podataka.

Koncepti socketa
Kada kreiramo socket moramo definirati tri parametra: nain komuniciranja (communication style) namespace protokol.

Communication style
Nain komuniciranja kontrolira kako socket tretira poslane podatke i specificira broj komunikacijskih partnera. Kada su podaci poslani kroz socket, raspakirani su u dijelove nazvane paketima. Stil komuniciranja odreuje kako su ti paketi podrani i kako su adresirani od poiljaoca do primatelja. - Connection style garantira isporuku svih paketa po redu kako su poslani. Ako su paketi izgubljeni ili je promijenjen redoslijed zbog problema na mrei, primatelj automatski zahtjeva njihovo ponovno slanje od poiljaoca. Connection-style socket je kao telefonski poziv: Adresa poiljaoca i primaoca je fiksna na poetku komunikacije kada je veza uspostavljena. - Datagram style ne garantira isporuku ili redoslijed dolaska paketa. Paketi mogu biti izgubljeni ili promijenjenog redoslijeda zbog problema na mrei. Svaki paket mora biti oznaen sa svojom destinacijom i nije zagarantirano da e biti isporuen. Sistem garantira samo najbolju volju, tako paketi mogu nestati ili stii u krivom redoslijedu kako su poslani. Datagram-style sockets ponaaju se vie kao slanje pisma potom: Poiljatelj specificira adresu primaoca za svaku individualnu poruku.

Namespace
Socket namespace odreuje kako su zapisane adrese socketa. Adresa socketa odreuje jedan kraj veze socketa. Na primjer, adrese socketa u local namespaceu su obina imena datoteka. U Internet namespaceu adresa socketa je sastavljena od Internet adrese (takoer

680/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

znane kao Internet Protocol adress ili IP address) hosta spojenog na mreu i broj porta. Broj porta raspoznaje viestruke sockete na istom hostu.

Protokol
Protokol specificira kako su poslani podaci. Neki protokoli su TCP/IP, AppleTalk mreni protokol i UNIX lokalni komunikacijski protokol. Nisu sve kombinacije stilova, namespacea i protokola podrane.

Socket buffer
Svaki pojedini paket poslan kroz mrenu jedinicu sastoji se od nekoliko dijelova informacije. Svima osim payloada, podaci ije je slanje prouzroeno kreiranjem samoga paketa, svi slojevi mree, poevi od data link sloja i zavravajui na transportnom sloju, dodaju neke kontrolne informacije. Format paketa kontroliranih od mrene kartice su prikazani na slici.

Cijeli paket je napravljen razliitim funkcijama u nekoliko dijelova. Na primjer, UDP/TCP zaglavlje i IP zaglavlje su sastavljeni od funkcija zavisno transportnom i mrenom sloju IPS arhitekture, dok su zaglavlje hardvera i trailera, napisani odgovarajuom metodom specificiranom mrenom karticom. Mreni kd Linuxa sadri svaki paket u velikom memorijskom podruju nazvanom socket buffer. Svaki socket buffer je definiran sa strukturom podatka tipa sk_buff koja sadri, uz mnoge druge stvari, pokazivae na slijedee strukture podataka: socket buffer payload podaci korisnika (unutar socket buffera) the data link trailer (unutar socket buffera) INET socketi (sock object)
681/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

descriptor zaglavlja transportnog sloja descriptor zaglavlja mrenog sloja descriptor of the data link layer header the destination cache cache entry (dest_entry object) Struktura podataka sk_buff sadri mnoga druga polja, kao identifikator mrenog protokola koriten za slanje podataka (checksum field) i vrijeme dolaska primljenih paketa. Kao glavno pravilo, kernel izbjegava kopiranje podataka ali jednostavno prosljeuje sk_buff descriptor pointer svakom mrenom sloju. Na primjer, kada priprema paket za slanje, transportni sloj poinje kopirati payload iz user mode buffera na viu poziciju socket buffera; tada transportni sloj dodaje svoje TCP ili UDP zaglavlje prije payloada. Nakon toga, kontrola se alje mrenom sloju, koji prima socket buffer descriptor i dodaje IP zaglavlje prije transportnog zaglavlja. Konano, data link layer dodaje svoje zaglavlje i trailer, ime pripremi paket za slanje.

Sistemski pozivi
Socketi su mnogo fleksibilniji nego mnoge druge komunikacijske tehnike. Ovo su sistemski pozivi za sockete: - socket kreira socket - closes unitava socket - connect kreira vezu izmeu dva socketa - bind imenuje server socket sa adresom - listen konfigurira socket da zapamti uvjete - accept prihvaa vezu i kreira novi socket za spajanje

Kreiranje i unitenje socketa


socket i close funkcije kreiraju i unitavaju sockete. Kada kreiramo socket, specificiramo tri parametra: namespace, communication style i protocol. Za namespace parametar koristimo konstante koje poinju sa PF_ (protocol families). Na primjer, PF_LOCAL ili PF_UNIX odreuju lokalni namespace, dok PF_INET odreuje Internet namespace. Za communication style parametar koristimo konstante koje poinju sa SOCK_.

682/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

Za connection-style sockete koristimo SOCK_STREAM a za datagram-style sockete koristimo SOCK_DGRAM. Trei parametar, protokol, odreuje low-level mehanizme za slanje i primanje podataka. Svaki protokol je validan za odreenu namespace-style kombinaciju. Zato jer je uglavnom jedan protokol najbolji za svaki takav par, definirajui 0 je uglavnom ispravan protokol. Ako socket uspije, vraa file descriptor za socket. Moemo itati iz ili pisati u socket koristei read, write. Kada zavrimo sa socketom zovemo close da ga uklonimo.

Connect
Da bi ostvario vezu izmeu dva socketa, klijent zove connect, odreujui adresu server socketa da se spoji na nju. Klijent je proces koji inicira spajanje a server je proces koji eka da prihvati vezu. Klijent zove connect da potakne vezu od lokalnog socketa do server socketa specificiranu u drugom argumentu. Trei argument je duina, u byte-ovima, od adresne strukture na koju pokazuje sa drugim parametrom. Format adrese socketa razlikuje se prema socket namespaceu.

Serveri
ivotni ciklus servera ovisi o kreiranju connection-style socketa, dodijelivi mu adresu na njegov socket, postavljajui poziv na listen koji omoguuje veze do socketa, postavljajui pozive na accept dolazeim vezama, i na kraju zatvarajui socket. Podaci nisu itani i pisani direktno preko server socketa. Umjesto toga program svaki puta prima novu vezu; Linux kreira zasebne sockete za koritenje prijenosa podataka preko te veze. U ovom odlomku emo pokazati bind, listen and accept. Adresa mora biti dodijeljena socketu servera koristei bind ako je klijent mora pronai. Prvi argument bind metode je socket file descriptor. Drugi argument je pokaziva na adresnu strukturu socketa. Trei argument je duina adresne strukture, u byte-ovima. Kada je adresa dodijeljena connectionstyle socketu, mora pozvati listen ime e pokazati da je server. Prvi argument listen metode je socket file descriptor. Drugi argument odreuje koliko je prihvaenih veza u redu (queue). Ako je red pun, dodatna spajanje biti e odbijena. To ne ograniava ukupan broj veza koje server moe obraditi. Ograniava jedino broj klijenata koji se pokuavaju spojiti a nisu jo bili prihvaeni.

683/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

Server prihvaa zahtjev za spajanjem od klijenta pokreui accept. Prvi argument accept metode je socket file descriptor. Drugi argument pokazuje na adresnu strukturu socketa koja je napunjena klijentovim adresama socketa. Trei argument je duina, u byteovima, adresne strukture socketa. Server moe koristiti klijentovu adresu da utvrdi hoe li stvarno komunicirati sa klijentom. Poziv za prihvaanje kreira novi socket za komunikaciju sa klijentom i vraa odgovarajui file descriptor. Originalni server socket nastavlja primati nove klijentove veze. Za itanje podataka iz socketa bez da ga se ukloni iz ulaznog reda, koristimo recv. Koristimo iste argumente kao read, plus dodatni FLAGS argument. Flag MSG_PEEK uzrokuje da moemo itati podatke ali ne i ih maknuti iz ulaznog reda.

Lokalni socketi
Proces spajanja socketa na istom raunalu moe koristiti lokalni namespace prezentiran kao sinonim PF_LOCAL i PF_UNIX. Zovu se lokalni socketi ili UNIX-domain socketi. Njihove socket adrese, specificirane po imenima datoteka, su koritene samo kod kreiranja veza. Ime socketima je specificirano u struct sockaddr_un. Moramo postaviti sun_family polje u AF_LOCAL, odreujui da je ovo lokalni namespace. Polje sun_path odreuje ime datoteke za koritenje i moe biti, najvie, 108 byte-ova dugako. Bilo koje ime moe biti koriteno, ali proces mora imati prava pisanja u direktoriju jer trebamo dodavati datoteke u direktorij. Da bi se spojili na socket, proces mora imati prava itanja za datoteku. Makar razliita raunala mogu dijeliti iste file-sisteme, samo procesi pokrenuti na istom raunalu mogu komunicirati sa lokalnim namespace socketima. Jedini dozvoljeni protokol za lokalni namespace je 0. Zbog toga to postoji u file-sistemu, lokalni socket se moe izlistati kao i datoteka. Na primjer: %ls l /tmp/socket srwxrwxx 1 user group 0 Nov 13 18:18 /tmp/socket

684/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

Primjer koritenja lokalnog namespace socketa


U ovom primjeru server program kreira lokalni namespace socket; listens for connection on it. Kada primi vezu, ita tekstualne poruke i ispisuje ih sve dok se veza ne zatvori. Ako je jedna od poruka quit server program gasi socket i zavrava sa radom. Program uzima path do socketa kao argument iz komandne linije. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/un.h> #include <unistd.h> /* ite text it socketa i printa van. Nastavlja sve dok se socket ne zatvori. Vraa nonZero ako klijent poalje quit */ int server (int client_socket) { while (1) { int length; char* text; /* Prvo, ita duinu textualne poruke iz socketa. Ako itanje vrati zero, klijent zatvara connection */ if (read (client_socket, &length, sizeof (length)) == 0) return 0; /* Alocira buffer za uvanje texta */ text = (char*) malloc (length); /* ita text i printa ga */ read (client_socket, text, length); printf ("%s\n", text); /* Oslobaa buffer */ free (text);

685/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

/* Ako klijent poalje poruku quit, gotovo je! */ if (!strcmp (text, "quit")) return 1; } } int main (int argc, char* const argv[]) { const char* const socket_name = argv[1]; int socket_fd; struct sockaddr_un name; int client_sent_quit_message; /* Kreira socket */ socket_fd = socket (PF_LOCAL, SOCK_STREAM, 0); /* Pokazuje da je ovo server */ name.sun_family = AF_LOCAL; strcpy (name.sun_path, socket_name); bind (socket_fd, &name, SUN_LEN (&name)); /* Listen for connections */ listen (socket_fd, 5); /* Konstantno prihvaa spajanja. Server radi sa svakim klijentom. Nastavlja sve dok klijent ne poalje quit poruku */ do { struct sockaddr_un client_name; socklen_t client_name_len; int client_socket_fd; /* Prihvaa vezu */ client_socket_fd = accept (socket_fd, &client_name, client_name_len); /* Handle the connection. */ client_sent_quit_message = server (client_socket_fd);

686/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

/* Close our end of the connection. */ close (client_socket_fd); } while (!client_sent_quit_message); /* uklanja socket file */ close (socket_fd); unlink (socket_name); return 0; }

Internet-domain sockets
UNIX-domain socketi mogu se koristiti za komunikaciju izmeu dva procesa na istom raunalu. Internet-domain sockets, na drugoj strani, mogu se koristiti za spajanje procesa na razliitim umreenim raunalima. Proces spajanja socketa preko Interneta koristi internet namespace prezentirano sa PF_INET. Najei protokoli su TCP/IP. Internet protokol (IP), low-level protokol, pokree pakete kroz Internet, razdvajajui i sastavljajui pakete, ako je potrebno. On garantira samo best-effort dostavljanje, tako da paketi mogu nestati ili promijeniti redoslijed tijekom transporta. Svako participirajue raunalo je specificirano koristei jedinstveni IP broj. Transmission Control Protocol (TCP), prema slojevima iznad IP-a, provodi pouzdan connection-ordered transport. Zahtijeva vezu kao npr. telefonska linija da bi ostvario komunikaciju izmeu kompjutera i garantira da su podaci preneseni pouzdano i pravilnim redom. Internet socket adrese sadre dva dijela: stroj i broj porta. Ova informacija je pospremljena u struct sockaddr_in varijablu. Postavimo sin_family polje u AF_INET da pokaemo da je ovo Internet namespace adresa. sin_addr polje sadri internet adrese eljenog nam raunala kao 32-bitni integer IP broj. Broj porta odreuje raunalu drugaije sockete. Razliita raunala spremaju vrijednosti u razliitom redoslijedu byte-ova. Zbog toga koristimo htons da konvertiramo broj porta prema mrenom redoslijedu byte-ova.

687/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

#include <stdlib.h> #include <stdio.h> #include <netinet/in.h> #include <netdb.h> #include <sys/socket.h> #include <unistd.h> #include <string.h> /* printa sadrzaj home-pagea za serverov socket. u slucaju uspjeha vraca informaciju. */ void get_home_page (int socket_fd) { char buffer[10000]; ssize_t number_characters_read; /* salje HTTP GET komandu za home-pageom */ sprintf (buffer, "GET /\n"); write (socket_fd, buffer, strlen (buffer)); /* cita iz socketa. Poziv za itanjem mozda ne vrati sve podatke odjednom, tako da pokuava i pokusava dok ne izadjemo */ while (1) { number_characters_read = read (socket_fd, buffer, 10000); if (number_characters_read == 0) return; /* pise podatke na standarni izlaz */ fwrite (buffer, sizeof (char), number_characters_read, stdout); } } int main (int argc, char* const argv[])

688/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

{ int socket_fd; struct sockaddr_in name; struct hostent* hostinfo; /* kreira socket */ socket_fd = socket (PF_INET, SOCK_STREAM, 0); /* sprema ime servera u adresu socketa */ name.sin_family = AF_INET; /* konvertira string u broj */ hostinfo = gethostbyname (argv[1]); if (hostinfo == NULL) return 1; else name.sin_addr = *((struct in_addr *) hostinfo->h_addr); /* web server koristi port 80 */ name.sin_port = htons (80); /* spaja se na web server */ if (connect (socket_fd, &name, sizeof (struct sockaddr_in))== -1) { perror ("connect"); return 1; } /* prima home-page sa servera */ get_home_page (socket_fd); return 0; }

689/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Sockets, unix domain, network

Parovi socketa
Kao to smo prije vidjeli, pipe funkcija kreira dva file descriptora za poetak i za kraj pipe-a. Pipe-ovi su ogranieni jer file descriptori moraju biti koriteni kao povezani procesi i jer je veza nedirektna. socketpair funkcija kreira dva file descriptora za dva spojena socketa na istom raunalu. Ovi file descriptori omoguavaju dvosmjernu komunikaciju izmeu povezanih procesa. Njihova tri parametra su jednaka kao i kod poziva socket: odreuju domenu, stil spajana i protokol. Zadnji parametar je niz dva integera, koji se puni sa file descriptorima od dva socketa, slino pipe. Kada zovemo socketpair, moramo specificirati PF_LOCAL kao domenu.

690/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima TCP/IP

Saa Dragi

TCP/IP

691/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

UVOD Kratka povijest TCP/IP-a


TCP/IP je u zadnjih 10-tak godina postao gotovo standard za prijenos podataka mrezom. To se najveim dijelom desilo rastom i popularizacijom Interneta, te zbog potrebe za komunikacijom izmeu razliitih raunala koja koriste razliite operativne sustave. Npr. u zadnje vrijeme veina mobilnih telefona ima implementiran TCP/IP stack. Kasnih 60-tih ameriko ministarstvo obrane (DOD) dolo je do zakljuka da ima problema s prenoenjem podataka izmeu odjela (osoblje, istraivaki laboratoriji, sveuilita...) jer je svatko koristio drugi raunalni sustav i razliitu topologiju mree te razliite mrene protokole. Problem meusobne komunikacije su dodijelili agenciji za napredna istraivanja (ARPA). ARPA je u suradnji sa sveuilitima i proizvoaima raunala dola do protokola od kojih se razvio TCP/IP.

Open System Interconnection (OSI) model


Zbog ve spomenute problematike u komunikaciji izmeu razliitih raunala i operativnih sustava 1977 Meunarodna organizacija za standardizaciju (ISO) izradila je OSI model. OSI model ne specificira protokol ve sluzi samo da bi po njemu mogli napraviti protokol, tj. vise protokola koji koriste jedan drugi za prijenos.

692/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

OSI model je podijeljen na 7 dijelova:

Iz ove podjele, vidi se da je OSI model tako zamiljen da svaka razina koristi svoj protokol kojeg moemo proizvoljno zamijeniti a da razine, tj. protokoli iznad dalje rade bez problema. Npr. ethernet kao fiziki layer moe koristiti BNC ili UTP ili recimo radio valove, dok IP moe koristiti ethernet, ppp, token ring...

693/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

TCP/IP PROTOKOL DARPA (TCP/IP) model


Dizajneri TCP/IP protokola odluili su pojednostavniti OSI model kako bi poboljali performanse i olakali implementaciju. Ovaj model je slian ISO OSI modelu ali ima samo 4 razine. Slika ispod pokazuje korelacije izmeu razina:

Network Interface
Network interface sluzi za fiziki prijenos podataka izmeu raunala i uglavnom je implementiran u hardwareu. Npr. ethernet, token ring...

Kratak opis etherneta:


Ethernet je postao gotovo standard za lokalno umreavanje. Postoji vise standarda, od kojih u navesti ee koritene:

694/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

10baseT koristi UTP kabel 100baseT koristi UTP kabel 10/100baseT koristi UTP kabel i ima mogunost automatskog prepoznavanja brzine veze, najee koritena Gigabit ethernet (1000baseX) postoji vise verzija, koristi ili optiki ili UTP kabel Ethernet koristi 2 protokola paralelno MAC i LLC. MAC se brine za fiziko adresiranje dok LLC obavlja neto malo vise funkcije vezane uz adresiranje na samom ureaju. Svaka proizvedena mrena kartica ima jedinstvenu MAC adresu (djelomino ju je mogue softwareski mijenjati).

Internet protocol (IP)


Internet protocol (IP) se koristi za bespojnu komunikaciju izmeu raunala i kao sto se vidi iz dijagrama gore, za prijenos ga koriste TCP i UDP. On je odgovoran za pravilno adresiranje raunala i prosljeivanje paketa, ali ne garantira njihovo dospijee. IP takoer poruke moe razbiti na manje pakete te ih sastaviti na odreditu s tim da svaki dio moe

695/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

krenuti drugim putem kroz mreu. Ako paketi ne stignu pravim redoslijedom IP ce ih sastaviti u ispravan paket. IP datagram:

IP header:

696/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Version o 4 bita, verzija ip headera, trenutno se koristi verzija 4. Sljedea verzija je IPv6, koja se zasad koristi samo eksperimentalno. IP Header length o 4 bita, govori koliko je 32-bitnih rijeci ip header dugaak. Type of service o 8 bitova, govori o kvaliteti veze Total length o 2 bytea, oznaava ukupnu duljinu IP paketa Identification o 2 bytea, koristi se za da bi identificirali specifini datagram izmeu poiljatelja i primatelja. Za svaki sljedei IP paket vrijednost se inkrementira. Flags o 3 bita, oznaavaju da li je paket pogodan za fragmentaciju, te da li je fragmentiran Fragment offset o 13 bitova, oznaava mjesto gdje se fragment nalazi u cijeloj poruci (potrebno za sastavljanje poruke) Time to live o 1 byte, oznaava preko koliko prijelaza paket moe proi dok se ne odbaci. Svaki IP router prilikom prosljeivanja paketa dekrementira njegovu vrijednost, a ako je 0, paket se dalje ne prosljeuje. Protocol o 1 byte, oznaava koji protokol se nalazi iznad, tj. iji paket IP paket sadri Protokoli: 1 2 4 6 ICMP IGMP IP in IP encapsulation TCP

697/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

17 41 47 50 51 89

UDP IPv6 Generic Routing Encapsulation (GRE) IP Security Encapsulating Security Payload (ESP) IP Security Authentication Header (AH) OSPF

Header checksum o 2 bytea, osigurava integritet headera Source address o 4 bytea, oznaava adresu poiljatelja poruke Destination address o 4 bytea, oznaava adresu primatelja poruke Options and Padding o dodatne opcije i dopuna paketa da bi njegova veliina bila djeljiva sa 32

Transport layer
Trasnportna razina je zaduena za dostavljanje paketa i osiguravanje njegovog integriteta. Najvie se koriste TCP i UDP.

TCP protokol:
TCP je obostrani spojni protokol koji spaja 2 raunala (TCP konekcija moe biti i unutar jednog raunala, mnoge aplikacije komuniciraju na taj nain, npr. X window system), te osigurava da paketi na odrediste dou traenim redoslijedom.

TCP uspostavlja i odrava konekciju transparentno korisniku. Objanjenje samog protokola uspostavljanja, odravanja i prekida komunikacije preopirno za ovaj dokument.
698/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

TCP datagram:

TCP header:

Source port o polje od 2 bytea koje definira socket sa kojeg se alje TCP segment, tj. definira koja aplikacija na application layeru alje segment, source socket zajedno sa ip adresom jedinstveno definira mjesto sa kojeg je segment poslan Destination port

699/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

polje od 2 bytea koje definira socket na koji se alje TCP segment, tj. definira

koja aplikacija na application layeru prima segment, source socket zajedno sa ip adresom jedinstveno definira mjesto sa kojeg je segment poslan Sequence number o polje od 4 bytea, redni broj poetnog okteta segmenta Acknowledgment numberpolje od 4 bytea, broj slijedeeg okteta korisnikove poruke, ujedno i kumulativna potvrda Data Offset o polje od 4 bytea, oznaava poetak podataka u paketu, ujedno oznaava veliinu TCP headera Reserved o 6 bitova rezerviranih za buduu uporabu, postavljeno na 0 Flags o 6 bitova koje oznaavaju TCP flagove: URG, ACK,PSH, RST, SYN, FIN Window o polje od 2 bytea, govori koliko velik buffer poiljatelj poruke ima za primanje poruka. TCP/IP stack drugog sudionika treba slati pakete velike maksimalno do veliine prozora. Ako je poslana 0, poruke se dalje ne alju, sve dok se ne poalje nova poruka sa vrijednosti veom od 0. Urgent pointer o polje od 2 bytea, govori lokaciju hitnih podataka u segmentu Options o proizvoljne opcije koje se dodaju TCP headeru u paketima od 4 btyea Poznatiji TCP portovi: 19 20 21 23 25 69 80 139 Network News Transfer Protocol (NNTP) FTP Server (data channel) FTP Server (control channel) Telnet Server Simple Mail Transfer Protocol (SMTP) Trivial File Transfer Protocol (TFTP) Hypertext Transfer Protocol (HTTP; Web server) NetBIOS Session Service

700/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

339 445

Lightweight Directory Access Protocol (LDAP) Direct-Hosted Server Message Block (SMB)

UDP protokol:
UDP je bespojni protokol gdje nemamo informaciju da li je paket stigao ili nije. UDP samo prosljeuje pakete protokolu iznad koji se mora brinuti za njihovo pravilno tumaenje. Kako nema overheada i odmah prosljeuje pakete, znatno je brzi od TCP-a. UDP datagram:

UDP header:

Source port o polje od 2 bytea koje definira port sa kojeg se alje UDP poruka, tj. definira koja aplikacija na application layeru alje poruku, polje je opcionalno te ako se ne koristi moe biti 0 Destination port o polje od 2 bytea koje definira port na koji stie UDP poruka, tj. definira koja aplikacija na application layeru prima poruku, zajedno sa ip adresom iz ip headera jedinstveno oznaava kojem processu tj. aplikaciji je poruka poslana

701/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Length o polje od 2 bytea koje oznaava duljinu. Minimalna duljina je 8 byte-ova a teoretska maksimalna 65,515 (duljina ip paketa minus headeri). Prava maksimalna duljina je ograniena MTU-om linka preko kojeg se prenose paketi. Ovo polje je redundantno zato sto se duljina paketa uvijek moe izraunati iz duljine IP paketa. Checksum o polje od 2 bytea koje osigurava integritet podataka Poznatiji UDP portovi: 53 67 68 69 137 138 161 445 520 DNS BOOTP client (Dynamic Host Configuration Protocol [DHCP]) BOOTP server (DHCP) TFTP NetBIOS Name Service NetBIOS Datagram Service Simple Network Management Protocol (SNMP) Direct hosting of Server Message Block (SMB) datagrams over TCP/IP RIP

1812, 1813 Remote Authentication Dial-In User Service (RADIUS)

Application layer
Application razina definira protokol koji korisnik koristi da bi razmjenjivao njemu suvisle informacije. Npr. poslao mail, pogledao sadraj neke web stranice, udaljeno se spojio na drugo raunalo... Primjeri application protokola: Telnet, FTP, SMTP, NFS, DNS, HTTP

702/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

IP ADRESSING, SUBNETS AND ROUTING IP adresiranje


IP protokol zahtjeva da svako raunalo, tonije mreni interface, na mrei ima jedinstvenu IP adresu. IP adresa se sastoji od 4 bytea, a mi ju piemo dekadski, svaki byte posebno odvojeno tokama. Prvi dio IP adrese je mrena adresa, a drugi dio je adresa raunala, a odnos izmeu njihovih duljina ovisi o klasi mree i subnet masci sto ce biti objanjeno poslije.

Klase IP adresa:
IP adrese su podijeljene u klase, ovisno o primjeni i veliini organizacije kojoj se dodjeljuju. Najee koritene su A, B i C. Ovim klasama su definirane duljine mrene adrese i duljine adrese raunala. Klasa A koristi prvih 8 bitova za adresiranje mree, a zadnjih 24 za adresiranje raunala i dodjeljuje se uglavnom ogromnim organizacijama. Klasa B koristi 16 bitova za adresu mree i 16 bitova za adresu raunala i dodjeljuje se uglavnom velikim organizacijama i tvrtkama (ISP-ovi i slino), trenutno tih adresa najvie nedostaje. Klasa C koristi 24 bita za adresu mree, a 8 za adresu raunala. Dodjeljuje se veini organizacija i tvrtki. Ukoliko postoji potreba za vise od 254 ali znatno manja od 65.534 raunala, bolje je zakupiti vise adresa klase C nego jednu B jer time tedimo adrese. Class Addresses A 0.x.x.x to 126.x.x.x B 128.0.x.x to 191.255.x.x C 192.0.0.x to 223.255.255.x D 224.0.0.1 to 239.255.255.255 E 240.x.x.x to 255.255.255.255 Ako u IP adresi sve bitove adrese raunala postavimo na 0, dobili smo adresu mree, a ako ih sve postavimo na 1 dobili smo brodcast adresu. Npr.

703/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

199.10.2.0 adresa mree 199.10.2.255 brodcast adresa mree 199.10.2.4 jedno raunalo na mrei

Loopback adrese:
Za testiranje i mrenu komunikaciju izmeu aplikacija na istom raunalu koristi se specijalna loopback mrena adresa: 127.0.0.0 Bilo koja regularna adresa na toj mrei je adresa samog raunala, najee se koristi: 127.0.0.1

Privatne IP adrese:
Za mree koje se ne planiraju spajati na internet, ili se planiraju spajati na internet pomou jednog gatewaya koji koristi NAT (Network Adress Translation, poznato jo kao i IP Masquarade, IP adresa se u tom sluaju maskira IP adresom gatewaya) predviene su privatne IP adrese. Zapravo, za lokalnu mreu moemo koristiti bilo koje adrese, ali bolje je koristiti privatne da ne bi imali problema sa sluajnim routanjem tih paketa prema van, dok se privatne IP adrese teoretski ne routaju na Internetu. Za svaku klasu imamo set privatnih mreznih adresa: A 10.0.0.0 B 172.16.0.0 - 172.31.0.0 C 192.168.0.0 - 192.168.255.0

704/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Subnets and subnet masks


Kako zbog fizikih problema ne moemo spojiti mnogo raunala na istu mreu (nemogunost hardwareske izvedbe, patile bi performanse) velike mree dijelimo na subnetove (podmree) pomou subnet maski. pomou subnet maske odreujemo (neovisno o klasi mree) koji dio adrese router smatra za mrenu, a koji dio za adresu raunala, tj. prema njoj zna koje adrese routa prema van, a koje zadrava na lokalnoj mrei. Subnet maska je jednake veliine kao IP adresa, znaci 32 bita. Adresa mree je oznaena sa bitom 1, a adresa raunala sa bitom 0, tako da ako recimo klasu B hoemo podijeliti na 256 adresa dobijemo subnet masku 255.255.255.0.

Kako smo doli do toga: N = network H = host Ovako izgleda IP adresa B klase: NNNNNNNN.NNNNNNNN.HHHHHHHH.HHHHHHHH Trenutna subnet maska je: 11111111.11111111.00000000.00000000 Kako je nama potrebno 256 adresa C klase subnet maska ce sad izgledati ovako: 11111111.11111111.11111111.00000000 255.255.255.0

705/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Primjer 2: Ako od adrese raunala u klasi C uzmemo 3 bita moemo kreirati 8 mrea po 30 lanova. Subnet maska nam je: 11111111.11111111.11111111.11100000

Kada to prevedemo u standardni oblik dobijemo: 255.255.255.224 Sad imamo 8 mrea sa sljedeim adresama: Network Hosts Address Range Broadcast 192.168.1.0 192.168.1.0 to 192.168.1.30 192.168.1.30 192.168.1.32 192.168.1.32 to 192.168.1.63 192.168.1.63 192.168.1.64 192.168.1.64 to 192.168.1.95 192.168.1.95 192.168.1.96 192.168.1.96 to 192.168.1.127 192.168.1.127 192.168.1.128 192.168.1.128 to 192.168.1.159 192.168.1.159 192.168.1.160 192.168.1.160 to 192.168.1.191 192.168.1.191 192.168.1.192 192.168.1.192 to 192.168.1.223 192.168.1.223 192.168.1.224 192.168.1.224 to 192.168.1.254 192.168.1.254

Routing
Kako fiziki nije mogue napraviti jednu veliku mreu na koju ce se spojiti sva raunala, koriste se routeri. Router je ureaj koji ovisno o svojoj routing tablici pakete sa jednog mrenog interfacea prosljeuje na drugi interface. Zapravo veina operativnih sustava unutar samog tcp/ip stacka ima implementirana osnovnu verziju routera kojeg onda

706/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

konfiguriramo tako da mu upiemo adresu gatewaya (routera). U tom sluaju sve pakete za koje se raunalo ne zna gdje bi poslalo alje na gateway. Tako se npr. spajamo na Internet. Napredniji operativni sustavi (svi unix-i, noviji windowsi) imaju integriran pravi router. Kako na velikim mreama uglavnom postoji vise putova od jednog do drugog mjesta, tj. ip adrese, routeri tu uglavnom koriste neki od protokola za dinamiko routanje.

Primjer routing tablice na Linux raunalu: Kernel IP routing table Destination 192.168.0.0 169.254.0.0 127.0.0.0 default Gateway * * * 192.168.0.1 Genmask 255.255.255.0 U 255.255.0.0 255.0.0.0 0.0.0.0 U U 0 UG 0 Flags Metric Ref Use Iface 0 0 0 0 0 0 0 eth0 0 eth0 0 lo 0 eth0

Primjer routing tablice na windows XP raunalu: ============================================================== ============= Interface List 0x1 ........................... MS TCP Loopback interface 0x2 ...00 50 56 c0 00 08 ...... VMware Virtual Ethernet Adapter for VMnet8 0x3 ...00 50 56 c0 00 01 ...... VMware Virtual Ethernet Adapter for VMnet1 0x10005 ...00 30 05 55 51 e1 ...... Intel(R) PRO/100 VE Network Connection 0x10006 ...00 10 5a f6 87 d7 ...... 3Com EtherLink XL 10/100 PCI TX NIC (3C905BTX) ============================================================== ============= ============================================================== ============= Active Routes: Network Destination Netmask Gateway Interface Metric

707/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

0.0.0.0 127.0.0.0 141.29.127.0

0.0.0.0 141.29.127.254 141.29.127.160 255.0.0.0 127.0.0.1 127.0.0.1 1

20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1 1 1 1

255.255.255.0 141.29.127.160 141.29.127.160 127.0.0.1 192.168.0.1 127.0.0.1 192.168.0.1 192.168.61.1 127.0.0.1 192.168.61.1 127.0.0.1 127.0.0.1 192.168.0.1 127.0.0.1 192.168.0.1 192.168.61.1 127.0.0.1 192.168.61.1 127.0.0.1

141.29.127.160 255.255.255.255 192.168.0.0 255.255.255.0

141.29.255.255 255.255.255.255 141.29.127.160 141.29.127.160 192.168.0.1 255.255.255.255 192.168.0.255 255.255.255.255 192.168.61.0 255.255.255.0 192.168.61.1 255.255.255.255 192.168.61.255 255.255.255.255 192.168.132.0 255.255.255.0 192.168.132.1 255.255.255.255 192.168.132.255 255.255.255.255 224.0.0.0 224.0.0.0 224.0.0.0 224.0.0.0 240.0.0.0 240.0.0.0 240.0.0.0

192.168.132.1 192.168.132.1 192.168.132.1 192.168.132.1 192.168.0.1 192.168.61.1

240.0.0.0 141.29.127.160 141.29.127.160 192.168.0.1 192.168.61.1

192.168.132.1 192.168.132.1 192.168.0.1 192.168.61.1

255.255.255.255 255.255.255.255 141.29.127.160 141.29.127.160 255.255.255.255 255.255.255.255 255.255.255.255 255.255.255.255 255.255.255.255 255.255.255.255 Default Gateway: ============= Persistent Routes: None 141.29.127.254 192.168.0.1 192.168.61.1

192.168.132.1 192.168.132.1

==============================================================

708/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

OSNOVE PROGRAMIRANJA TCP/IP-A NA UNIXU Uvod


Ovdje emo objasniti osnovne sistemske funkcije za rad sa socketima na Unixu, te pokazati primjer TCP klijenta i servera i program za slanje, te primanje UDP paketa.

Sistemske funkcije za rad sa socketima


socket Socket je komunikacijski kanal. Kada se 2 procesa spoje preko socketa, koriste njegov descriptor za itanje i pisanje. Socket sistemski poziv uzima sljedee argumente: int domain int type int protocol Postoji vise domena za sockete, a one su definirane u /usr/include/sys/socket.h. AF_UNIXUNIX internal protocols AF_INETARPA Internet protocols (most frequently used option) AF_ISOInternational Standards Organization protocols AF_NSXerox Network System protocols Gotovo uvijek emo koristiti AF_INET protokol. Postoji vise tipova socketa: SOCK_STREAMProvides a reliable, sequenced, two-way connection (most frequently used option) SOCK_DGRAMConnectionless and unreliable connection SOCK_RAWUsed for internal network protocols (superuser only)
709/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

SOCK_SEQPACKETOnly used in AF_NS protocol SOCK_RDMNot implemented Gotovo uvijek emo koristiti SOCK_STREAM tip socketa. Trei argument je broj protokola, za primjere emo koristiti 0. bind Bind funkcija spaja proces sa socketom. Bind uglavnom koristimo u serverskim procesima da postavimo socket koji eka na konekcije. Argumenti za bind poziv su: int socket struct sockaddr * my_addr int my_addr_length Prvi argument je socket deskriptor koji nam je vratio socket poziv. Drugi argument je sockaddr struktura ija je definicija u /usr/include/linux/socket.h. struct sockaddr { unsigned short sa_family; // address family, AF_xxx char sa_data[14]; // 14 bytes of protocol address }; Sockaddr mora biti alociran i predan kao drugi argument i dalje se po njemu iz programa ne smije direktno prestupati. Primjer: struct sockaddr_in sin; bzero(&sin, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(port); bind(sock_descriptor, (struct sockaddr *)&sin, sizeof(sin);

710/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

listen Nakon smo socket kreirali i vezali uz proces, proces serverskog tipa moe pozvati listen funkciju da eka na nadolazee socket konekcije. Argumenti su: int socket int input_queue_size Prvi argument je socket deskriptor koji nam je vratio socket, drugi je veliina queua, tj. koliko konekcija moe ekati u redu. Ako emo koristiti fork da bi obraivali svaku konekciju u posebnom procesu broj ne mora biti velik, ali za jednostavnije servere lake je postaviti vrijednost na neto veu i obraivati konekcije po redu. connect Connect koristimo da bi se spojili na socket na nekom serveru. Argumenti su: int socket struct sockaddr * server_address int server_address_length Socket je deskriptor koji nam vrati funkcija socket. Sockaddr smo ve djelomino objasnili i jo emo objasniti u primjeru. recv Recv koristimo za prihvaanje poruka sa socketa kojeg smo ve spojili. Postoje jo recvfrom i recvmsg ali oni se koriste za prihvaanje poruka koje nisu spojno orijentirane pa ih za sad neemo spominjati. Argumenti su: int socket void * buf int buf_len unsigned int flags

711/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Socket, deskriptor spojenog socketa. Buf je pointer na komad memorije gdje emo spremiti podatke. Drugi argument govori koliko je velik alociran komad memorije. A trei su zastavice koje kombiniramo sa |. MSG_OOBProcess out-of-band data (useful for handling high priority control messages), usually zero is used for normal (not out of band) behavior MSG_PEEKPeek at an incoming message without reading it MSG_WAITALLWait for the receiving data buffer to be completely full before returning

send Send se koristi za slanje podatka preko socketa drugom programu. Parametri su: int socket const void * message_data int message_data_length unsigned int flags Socket, deskriptor spojenog socketa. Drugi argument ja pointer na podatke koji se trebaju poslati. Trei argument govori koliko je velika poruka koju treba poslati. etvrti parametar je uvijek 0 u slijedeim primjerima, ali moe biti (iako se koristi jako rijetko): MSG_OOBProcess out of band data (out of band send calls are useful for high priority control messages), usually zero is used for normal (not out of band) behavior MSG_DONTROUTEDo not use routing

Primjer TCP servera


Server iz primjera kreira jedan stalni socket za ekanje na zahtjeve, a kad se klijent spoji, otvara se privremeni socket. Svaki put kad se klijent spoji novi privremeni socket se otvara.
712/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Ovaj server ce samo proslijediti dobivenu poruku nazad. struct sockaddr_in sin; struct sockaddr_in pin; int sock_descriptor; int temp_sock_descriptor; int address_size; sock_descriptor = socket(AF_INET, SOCK_STREAM, 0); bzero(&sin, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(8000); // we will use port 8000 bind(sock_descriptor, (struct sockaddr *)&sin, sizeof(sin)); listen(sock_descriptor,20); //queue up to 20 connections while(1) { // get a temporary socket to handle client request: temp_sock_descriptor &address_size); // receive data from client: recv(temp_sock_descriptor, buf, 16384, 0); // ... here we can process the client request ... // return data to the client: send(temp_sock_descriptor, buf, len, 0); // close the temporary socket (we are done with it) close(temp_sock_descriptor); } Kada ubijemo program, operativni sustav automatski zatvara sve konekcije. = accept(sock_descriptor, (struct sockaddr *)&pin,

713/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Primjer TCP klijenta


Klijent otvara privremeni socket, poalje jednu poruku serveru i eka na jednu poruku nazad. int socket_descriptor; struct sockaddr_in pin; struct hostent *server_host_name; server_host_name = gethostbyname(127.0.0.1); bzero(&pin, sizeof(pin)); pin.sin_family = AF_INET; pin.sin_addr.s_addr = htonl(INADDR_ANY); pin.sin_addr.s_addr pin.sin_port = htons(port); socket_descriptor = socket(AF_INET, SOCK_STREAM, 0); connect(socket_descriptor, (void *)&pin, sizeof(pin)); send(socket_descriptor, test data, strlen(test data) + 1, 0); recv(socket_descriptor, buf, 8192, 0); close(socket_descriptor); = ((struct in_addr *)(server_host_name->h_addr))->s_addr;

714/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Primjer programa za slanje UDP paketa


#include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> int port = 6789; void main() { int socket_descriptor; int iter = 0; int process; char buf[80]; // for sending messages struct sockaddr_in address; // Here, we use SOCK_DGRAM (for UDP) instead of SOCK_STREAM (TCP): socket_descriptor = socket(AF_INET, SOCK_DGRAM, 0); memset(&address, 0, sizeof(address)); address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr(127.0.0.1); // local computer address.sin_port = htons(port); process = 1; // flag for breaking out the do-while loop do { sprintf(buf,data packet with ID %d\n, iter); if (iter >20) { sprintf(buf, stop\n); process = 0; }

715/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

sendto(socket_descriptor, buf, sizeof(buf), 0, (struct sockaddr *)&address, sizeof(address)); iter++; } while (process); }

Primjer programa za primanje UDP paketa


#include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> char * host_name = 127.0.0.1; // local host void main() { int sin_len; int port = 8080; char message[256]; int socket_descriptor; struct sockaddr_in sin; struct hostent *server_host_name; server_host_name = gethostbyname(127.0.0.1); bzero(&sin, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = htonl(INADDR_ANY); sin.sin_port = htons(port);

716/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

// set socket using SOCK_DGRAM for UDP: socket_descriptor = socket(PF_INET, SOCK_DGRAM, 0); bind(socket_descriptor, (struct sockaddr *)&sin, sizeof(sin)); while (1) { sin_len = sizeof(sin); recvfrom(socket_descriptor, message, 256, 0, (struct sockaddr *)&sin, &sin_len); printf(\nResponse from server:\n\n%s\n, message); if (strncmp(message, stop, 4) == 0) break; } close(socket_descriptor); }

717/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Ivan Bri i Neven Kmeti

TCP/IP API

718/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Uvod

Pregled TCP/IP protokola


TCP/IP i Internet
1969. godine ARPA, Advanced Research Projects Agency, osnovala je istraivki i izvedbeni projek izrade eksperimentalne packet-switching mree. Mrea, nazvana ARPAnet, bila je napravljena zbog prouavanja tehnika slanja robusnih i pouzdanih podataka. Mnoge tehnike modernih podatkovnih komunikacija razvijene su sa ARPAnet eksperimentalnom mreom. Eksperimentalna mrea bila je toliko uspjena da su je mnoge organizacije, povezane na nju, poele koristiti za svakodnevnu komunikaciju. 1975. godine ARPAnet je iz eksperimentalne postala vrlo razvijena operativna mrea i odgovornost administriranja je preuzela DCA (Defense Communications Agency) koja je kasnije promijenila ime u DISA (Defense Information System Agency). TCP/IP protokol usvojen je kao vojni standard (MIL STD) 1983. godine, i svi hostovi spojeni na mreu bili su primorani prijei na novi protokol. Da bi olakala prijelaz, DARPA5, je zatraila Bolta, Beraneka i Newmana (BBN) da implementiraju TCP/IP protokol u Berkley (BSD) Unixu. Tako je zapoeao brak Unixa i TCP/IP-a. Kako je s vremenom prihvaen TCP/IP standard, termin Internet se poeo koristiti u svakodnevnoj uporabi. 1983. ARPAnet se podijelila na MILNET i novu manju ARPAnet. Internet termin se koristio za cijelokupnu mreu: MILNET plus ARPAnet.

Podatkovni komunikacijski modeli


Arhitektonski model razvijen od International Standards Organization (ISO) je konstantno koriten za opisivanje strukture i funkcije podatkovnih komunikacijskih protokola. Ovaj model, nazvan Open System Interconnect (OSI) Reference model, predstavlja osnovnu referencu za promatranje komunikacija. Termini definirani ovim modelom su vrlo razumljivi i naveliko koriteni u komunikacijskoj organizaciji pa je nemogue govoriti o podatkovnoj komunikaciji bez koritenja OSI terminologije.

tijekom 1980. ARPA, kao dio U.S. Department of Defense, postala je DARPA (Defense Advanced Research Projects Agency) ali agencija i njena misija razvijanja naprednog istraivanja ostala je ista

719/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

OSI model sadri sedam slojeva (layers) koji definiraju funkcije komunikacijskih protokola. Svaki sloj OSI modela predstavlja funkciju koja se izvodi kada se podaci transferiraju kroz kooperativne aplikacije i mree. Slika 1.1. prikazuje svaki sloj s imenom i sadri kratak opis. Gledajui sliku, protokoli su kao blokovi stavljeni jedan na drugi. Zbog toga se struktura esto naziva stack ili protocol stack.

7. Aplikacijski sloj (APPLICATION) Mrene primjene poput SMTP, HTTP, FTP i sl. 6. Prezentacijski sloj (PRESENTATION) Formatiranje podataka i zatita 5. Sjedniki sloj (SESSION) Uspostavljanje i odravanje sesija 4. Prijenosni sloj (TRANSPORT) Osiguranje prijenosa s kraja na kraj 3. Mreni sloj (NETWORK) Isporuka jedinica informacije, ukljuujui usmjeravanje (routing) 2. Podatkovni sloj (DATA LINK) Prijenos jedinica informacije s provjerom greke 1. Fiziki sloj (PHYSICAL) Prijenos binarnih podataka kroz medij

Slika - OSI model Sloj ne definira jedinstven protokol. Svaki sloj definira podatkovne komunikacijske funkcije koje mogu biti koritene od bilo kojeg broja protokola. Dalje, svaki sloj moe sadravati vie protokola gdje svaki provodi uslugu odgovarajui funkciji sloja. Na primjer, protokol za prijenos podataka (FTP) i elektronika pota (SMTP) provode korisnkike usluge i dio su aplikacijskog sloja (Application Layer).

Arhitektura TCP/IP protokola


Generalno gledajui TCP/IP protokol je sastavljen od manjeg broja slojeva od onih koritenih u OSI modelu. Mnogi opisi TCP/IP definiraju sa tri do pet funkcionalnih slojeva arhitekture protokola. etvero-slojni model prikazan na slici 1.2. (pokazuje korelaciju izmeu OSI i TCP/IP modela). TCP/IP model je baziran na tri sloja (aplikacijski, prijenosni i mreni) i dodatnim internet slojem.

720/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

OSI Model Application Presentation Session Transport Network Data link Physical Slika - Usporedba OSI i TCP/IP modela Isto kao i u OSI modelu, podaci se alju prema dolje niz stack, kada su poslani na mreu, i gore uz stack, kada su primljeni sa mree. Podaci se u TCP/IP-u alju niz protokol stack iz aplikacijskog sloja sve do fizike mree. Svaki sloj u stacku dodaje kontrolnu informaciju da bi potvrdio sigurnu dostavu. Ova kontrolna informacija naziva se zaglavlje (header) jer je postavljen na poetak podatka koji se treba poslati. Svaki sloj tretira sve informacije koje primi iz sloja iznad kao podatke i stavlja svoje zaglavlje na poetak informacije. Kada su podaci primljeni, dogaa se suprotno, svaki sloj skida svoje zaglavlje prije nego poalje podatke sloju iznad.
User data TCP header IP header Network header Application byte stream TCP segment IP datagram Network-level packet

TCP/IP Model Application Transport Internet Network interface

Slika - Prolaz podataka kroz slojeve

721/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Networking na Linuxu
Linux kernel podrava mnogo razliitih mrenih arhitektura (TCP/IP je samo jedna od njih), s nekoliko implementiranih alternativnih algoritama za razvrstavanje mrenih paketa, ukljuujui i programe koji olakavaju sistemskim administratorima postaviti router, gateway, firewall, pa ak i jednostavan World Wide Web server, direktno na nivou kernela. Trenutni kd Net-4 je inspiriran orginalnom Berkley Unix implementacijom. Kako i samo ime govori, ovo je etvrta verzija Linux networkinga. Networking kd je organiziran u slojeve (layers), gdje svaki od njih ima vrlo dobro definiran interface. Poto podaci poslani mreom nisu ponovo upotrebljivi, nema potreba za spremanjem u cache. Linux izbjegava kopiranje podataka unutar slojeva. Originalni podaci su spremljeni u memoriju (memory buffer), koji je dovoljno velik da sadri informacije potrebne svakom sloju.

Mrene arhitekture
Mrena arhitektura opisuje kako je pojedina raunalna mrea napravljena. Arhitektura definira grupu slojeva gdje bi svaki trebao imati vrlo dobro definiranu namjenu. Programi u svakom sloju komuniciraju koristei razmjenjive skupove pravila i konvencija (tzv. protokol). Generalno gledajui, Linux podrava veliki broj razliitih mrenih arhitektura. Neke od njih su:
name PF_APPLETALK PF_BLUETOOTH PF_BRIDGE PF_DECnet PF_INET PF_INET6 PF_IPX PF_LOCAL, PF_UNIX PF_PACKET PF_X.25 mrena arhitektura i/ili protokol Appletalk Bluetooth Multiprotocol bridge DECnet IPSs IPv4 protocol IPSs IPv6 protocol Novell IPX Unix domain socket (local communication) IPSs IPv4/IPv6 protocol low-level access X25

Tablica - Podrane arhitekture pod Linux-om IPS (Internet Protocol Suite) je mrena arhitektura Interneta, ponekad mrena arhitektura zbog glavnih protokola. nazvana TCP/IP

722/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Kratak opis etherneta


Ethernet je postao gotovo standard za lokalno umreavanje. Postoji vie standarda, a neki od njih su:

10baseT koristi UTP kabel 100baseT koristi UTP kabel 100baseFX koristi optiki kabel Gigabit ethernet (1000baseX) postoji vie verzija o 1000baseTX koristi UTP kabel o 1000baseSX, 1000baseLX koriste optiki kabel Data link sloj Ethernet protokola se sastoji od dva podsloja, Media Access Control

sloja (MAC) i Logical Link Control sloja (LLC) kako je prikazano na slici. LLC sublayer Data link layer Slika - Data link sloj Ethernet protokola Podjelu je napravio Institute of Electrical and Electronics Engineers (IEEE). Logical Link Control (LLC) upravlja komunikacijom izmeu mrenih ureaja unutar jednog mrenog spoja. LLC je definiran IEEE 802.2 specifikacijom te podrava spojne i bespojne servise. Media Access Control (MAC) upravlja pristupom mediju za prijenos podataka. IEEE MAC specifikacija definira jedinstvene MAC adrese tako da su mreni ureaji jednoznano identificirani na mrei. Svaka proizvedena mrena kartica ima jedinstvenu MAC adresu koju je, djelomino, mogue softverski mijenjati. Kada MAC sloj primi transmit-frame zahtjev za pripadajuom adresom i podacima iz LLC sloja, MAC poinje slati sekvencu (paket) na mreu prebacivanjem LLC podataka u MAC frame buffer. Svaka mrena kartica prije slanja paketa na mreu provjerava da li moe poslati paket na mreu ili treba ekati da se medij oslobodi. Protokol kojim se to obavlja se naziva Carrier Sense, Multiple Access with Collision Detection (CSMA/CD). MAC sublayer

723/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Internet protocol (IP)


Internet protocol (IP) se koristi za bespojnu komunikaciju izmeu raunala, a za prijenos ga koriste TCP i UDP. On je odgovoran za pravilno adresiranje raunala i prosljeivanje paketa, ali ne garantira njihovo dospjee. IP moe razbiti poruke na manje pakete te ih sastaviti na odreditu s time da svaki dio moe krenuti drugim putem kroz mreu. Ako paketi ne stignu pravim redosljedom IP protokol e ih sastaviti u ispravan paket.
Network interface header Network interface trailer

IP header IP datagram

IP payload

Network-level packet

Slika - IP datagram
Bit: 0 Version 4 IHL 8 Type of service 16 19 31

Total length Flags Fragment offset

Identification Time to live 20 byte Source address Destination address Options + Padding Protocol

Header checksum

Slika - IPv4 header Version IP Header length Type of service Total length Identification 4 bit 4 bit 8 bit 2 byte 2 byte Verzija ip headera, trenutno se koristi verzija 4. Slijedea verzija je Ipv6, koja se za sada koristi samo eksperimentalno Duina IP headera (broj 32-bitnih rijei) Kvaliteta veze Ukupna duljina IP paketa Identifikaciju specifinog datagrama izmeu poiljatelja i primetelja. Za svaki sljedei IP pakeet vrijednost se inkrementira Flags 3 bit Da li je paket pogodan za fragmentaciju, te da li je fragmentiran

724/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Fragment offset Time to live

13 bit 1 byte

Mjesto gdje se fragment nalazi u cijeloj poruci (potrebno za sastavljanje poruke) Vrijeme ivota paketa, tj. Preko koliko prijelaza paket moe proi dok se ne odbaci. Svaki IP router prilikom prosljeivanja paketa dekrementira njegovu vrijednost, a ako je 0, paket se dalje ne prosljeuje

Protocol Header checksum Source address Destination address Options Padding and

1 byte 2 byte 4 byte 4 byte

Koji protokol se nalazi iznad, tj. iji paket IP paket sadri Osigurava integritet headera Adresa poiljatelja poruke Adresa primatelja poruke Dodatne opcije i dopuna paketa da bi njegova veliina bila djeljiva sa 32

Tablica - Opis IPv4 header-a IPv6 header:


Bit: 0 Version 4 Priority 8 Flow label Next header Hop limit 16 24 31

Payload length

Source address

Destination address 40 byte

Slika - IPv6 header

725/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

TCP protokol
TCP je obostrani spojni protokol koji spaja 2 raunala, te osigurava da paketi dolaze na odredite traenim redoslijedom. TCP koneckija moe biti i unutar jednog raunala (mnoge aplikacije komuniciraju na taj nain, npr. X window system).
Network interface header Network interface trailer

IP header

TCP header TCP segment

Segment

IP datagram Network-level packet

Slika - TCP segment


Bit: 0 Source port Sequence number Acknowledgment number 20 byte
Header lenght

10

16 Destination port

31

Unused

Flags

Window Urgent pointer

Checksum Options + Padding

Slika - TCP header Source port


2 byte Socket s kojeg se alje TCP segment, tj. Definira koja aplikacija na application layeru alje segment, source socket zajedno s IP adresom jedinstveno definira mjesto sa kojeg je segment poslan Destination port 2 byte Socket na koji se alje TCP segment, tj. Definira koja aplikacija na application layeru prima segment, source socket zajedno s IP adresom jedinstveno definira mjesto sa kojeg je segment poslan Sequence number Acknowledgment number Data offset Reserved Flags Window 4 byte 6 bit 6 bit 2 byte Poetak podataka u paketu, ujedno oznaava veliinu TCP headera Rezervirano za buduu uporabu (postavljeno na 0) URG, ACK, PSH, RST, SYN, FIN flagovi Veliina buffera poiljatelja poruke koji slui za primanje poruka. 4 byte 4 byte Redni broj poetnog okteta segmenta Broj slijedeeg okteta korisnikove poruke, ujedno i kumulativna potvrda

726/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP TCP/IP stack drugog sudionika treba slati pakete velike maksimalno do veliine prozora. Ako je poslana 0, poruke se dalje ne alju, sve dok se ne poalje nova poruka sa vrijednou veom od 0.

Urgent pointer Options

2 byte

Lokacija hitnih podataka u segmentu Proizvoljne opcije koje se dodaju TCP headeru u paketima od 4 bytea

Tablica - Opis TCP header-a


20 21 22 23 25 80 110 119 143 194 389 FTP-data FTP File Transfer Protocol SSH Secure Shell Telnet SMTP Simple Mail Transfer Protocol HTTP Hypertext Transfer Protocol POP3 Post Office Protocol version 3 NNTP Network News Transfer Protocol IMAP Internet Message Access Protocol IRC Internet Relay Chat LDAP Lightweight Directory Access Protocol

Tablica - Poznatiji TCP portovi

727/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

UDP protokol
UDP je bespojni protokol gdje nemamo informaciju da li je paket stigao ili nije. UDP samo prosljeuje pakete protokolu iznad koji se mora brinuti za njihovo pravilno tumaenje. Kako nema overheada i odmah prosljeuje pakete, znatno je bri od TCP-a.
Network interface header Network interface trailer

IP header

UDP header UDP message

Message

IP datagram Network-level packet

Slika - UDP datagram


Bit: 8 byte 0 Source port Segment length 16 Destination port Checksum 31

Slika - UDP header Source port


2 byte Port sa kojeg se alje UDP poruka, tj. definira koja aplikacija na application layeru alje poruku, polje je opcionalno te ako se ne koristi moe biti 0 Destination port 2 byte Port na koji stie UDP poruka, tj. definira koja aplikacija na application layeru prima poruku, zajedno s IP adresom iz IP headera jedinstveno oznaava kojem procesu tj. aplikaciji je poruka poslana Length 2 byte Minimalna duljina je 8 byte-ova a teoretska maksimalna 65,515 (duljina ip paketa minus headeri). Prava maksimalna duljina je ograniena MTUom linka preko kojeg se prenose paketi. Ovo polje je redudantno zato to se duljina paketa uvijek moe izraunati iz duljine IP paketa Checksum 2 byte Polje koje osigurava integritet podataka

Tablica - Opis UDP header-a Poznatiji UDP portovi:


53 67 68 DNS Domain Name System BOOTP client BOOTP server (DHCP) Dynamic Host Configuration Protocol

728/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb 69 137 138 161 119 520 1812, 1813 TFTP Trivial File Transfer Protocol NetBIOS Name Service NetBIOS Datagram Service SNMP Simple Network Management Protocol NNTP Network News Transfer Protocol RIP Routing Information Protocol

Programski alati na Unix raunalima UDP

RADIUS Remote Authentication Dial-In User Service

Tablica - Poznatiji UDP portovi UDP (User data protocol) je nii nivo protokola od TCP-a. UDP ne garantira dostavu paketa na odredite. Takoer UDP ne garantira dostavu paketa u originalnom poretku, odnosno u onom poretku kojim su bili poslani. Koritenjem UDP socket-a nai programi mogu postati znatno sloeniji nego to to mogu biti TCP socket-i. Evo savjeta i pod kojim uvjetima treba koristiti UDP socket-e: podaci koje trebamo poslati odgovaraju jednom fizikom UDP paketu. UDP paketi su veliki 8192 byte-a, ali zbog podataka za header, preostaje nam jos 5000 byte-a neki podaci se mogu izgubiti bez naruavanja integriteta sistema svaki izgubljeni paket se nemora ponovno slati

Najvea prednost UDP protokola nad TCP-om je ta to je puno bri, ali mu je sigurnost prijenosa, odnosno dostave paketa mana.

Aplikacijska razina
Aplikacijska razina (Application layer) definira protokol koji korisnik koristi da bi razmjenjivao njemu suvisle informacije. Npr. poslao mail, pogledao sadraj neke web stranice, udaljeno se spojio na drugo raunalo i sl. Primjeri su Telnet, FTP, SMTP, NFS, DNS, HTTP i sl.

729/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

IP adresiranje, stvaranje podmrea i usmjeravanje IP adresiranje IP protokol zahtjeva da svako raunalo, tonije mreni interface, na mrei ima jedinstvenu IP adresu. IP adresa se sastoji od 4 bytea, a mi je pisemo dekatski, svaki byte posebno odvojeno tokama. Prvi dio IP adrese je mrena adresa, a drugi dio je adresa raunala, a odnos izmeu njihovih duljina ovisi o klasi mree i subnet maski.

Klase IP adresa
IP adrese su podjeljene u klase, ovisno o primjeni i veliini organizacije kojoj se dodjeljuju. Najee koritene su A, B i C. Ovim klasama su definirane duljine mrene adrese i duljine adrese raunala. Klasa A koristi prvih 8 bitova za adresiranje mree (od kojih je MSB (most significant bit) postavljen na 0), a zadnjih 24 za adresiranje raunala i dodjeljuje se uglavnom ogromnim organizacijama. Klasa B koristi 16 bitova za adresu mree (MS bitovi postavljeni na 10) i 16 bitova za adresu raunala i dodjeljuje se uglavnom velikim organizacijama i tvrtkama (ISP-ovi i slino). Klasa C koristi 24 bita za adresu mree (MS bitovi postavljeni na 110), a 8 za adresu raunala. Dodjeljuje se veini organizacija i tvrtki. Ukoliko postoji potreba za vie od 254 ali znatno manja od 65.534 raunala, bolje je zakupiti vie adresa klase C nego jednu B jer time tedimo adrese. Klasa D ima 4 najznaajnija bita postavljena na 1110, dok klasa E 4 najznaajnija bita ima postavljena na 1111.
Class Addresses A 0.x.x.x to 126.x.x.x B 128.0.x.x to 191.255.x.x C 192.0.0.x to 223.255.255.x D 224.0.0.1 to 239.255.255.255 E 240.x.x.x to 255.255.255.255

Ako u IP adresi sve bitove adrese raunala postavimo na 0, dobili smo adresu mree, a ako ih sve postavimo na 1 dobili smo broadcast adresu.

Npr. 199.10.2.0 adresa mree 199.10.2.255 broadcast adresa mree

730/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

199.10.2.4 jedno od racunala na mrei

Loopback adrese
Za testiranje i mrenu komunikaciju izmeu aplikacija na istom raunalu koristi se specijalna loopback mrena adresa 127.0.0.0. Bilo koja regularna adresa na toj mrei je adresa samog raunala, najee se koristi 127.0.0.1.

Privatne IP adrese
Za mree koje se ne planiraju spajati na internet, ili se planiraju spajati na internet pomou jednog gatewaya koji koristi NAT (Network Adress Translation, poznato jos kao i IP Masquarade, IP adresa se u tom sluaju maskira IP adresom gatewaya) predviene su privatne IP adrese. Zapravo, za lokalnu mreu mozemo koristiti bilo koje adrese, ali bolje je koristiti privatne da ne bi imali problema sa sluajnim routanjem tih paketa prema van, dok se privatne IP adrese teoretski ne routaju na Internetu. Za svaku klasu imamo set privatnih mrenih adresa:
A 10.0.0.0 B 172.16.0.0 - 172.31.0.0 C 192.168.0.0 - 192.168.255.0

Podmree i mrene maske


Poto na istu mreu nije mogue spojiti mnogo raunala (nemogunost hardverske izvedbe, loe performanse) velike mree dijelimo na podmree (subnet) pomou subnet maski. Pomou subnet maske odreujemo (neovisno o klasi mree) koji dio adrese usmjeriva (router) smatra za mrenu, a koji dio za adresu raunala, tj. prema njoj zna koje adrese usmjerava prema van, a koje zadrava na lokalnoj mrei. Subnet maska je jednake velcine kao IP adresa, tj. 32 bita. Adresa mree je oznaena sa bitom 1, a adresa raunala sa bitom 0, tako da ako recimo klasu B elimo podijeliti na 256 mrea dobijemo subnet masku 255.255.255.0. Kako smo doli do toga:

731/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

N = network H = host Ovako izgleda IP adresa B klase: NNNNNNNN.NNNNNNNN.HHHHHHHH.HHHHHHHH Trenutna subnet maska je: 11111111.11111111.00000000.00000000 Kako je nama potrebno 256 mrea C klase, subnet maska e sad izgledati ovako: 11111111.11111111.11111111.00000000 ili 255.255.255.0 Primjer 2: Ako od adrese raunala u klasi C uzmemo 3 bita moemo kreirati 8 mrea po 30 lanova. Subnet maska nam je: 11111111.11111111.11111111.11100000 Kada to prevedemo u standardni oblik dobijemo: 255.255.255.224 Sad imamo 8 mrea sa slijedeim adresama:
Network 192.168.1.0 192.168.1.32 192.168.1.64 192.168.1.96 192.168.1.128 192.168.1.160 192.168.1.192 192.168.1.224 Hosts 192.168.1.1 192.168.1.30 192.168.1.33 192.168.1.62 192.168.1.65 192.168.1.94 192.168.1.97 192.168.1.126 192.168.1.129 192.168.1.158 192.168.1.161 192.168.1.190 192.168.1.193 192.168.1.222 192.168.1.225 192.168.1.254 Broadcast address 192.168.1.31 192.168.1.63 192.168.1.95 192.168.1.127 192.168.1.159 192.168.1.191 192.168.1.223 192.168.1.255

732/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Usmjeravanje (Routing)
Kako fiziki nije mogue napraviti jednu veliku mreu na koju e se spojiti sva raunala, koriste se usmjerivai (router). Usmjeriva je urejaj koji ovisno o svojoj routing tablici pakete sa jednog mrenog suelja proslijeuje na drugo suelje. Zapravo veina operativih sustava unutar samog TCP/IP stacka ima implementiranu osnovnu verziju usmjerivaa kojeg onda konfiguriramo tako da mu upiemo adresu gatewaya (routera). U tom sluaju sve pakete za koje raunalo ne zna gdje bi poslalo alje na gateway. Napredniji operativni sustavi (svi UNIXoidi, noviji Windowsi) imaju integriran pravi usmjeriva. Kako na velikim mreama postoji vie puteva od jednog do drugog mjesta, tj. vie IP adresa, usmjerivai tu uglavnom koriste neki od protokola za dinamiko usmjeravanje (rutanje). Primjer routing tablice na Linux racunalu:
user@localhost:/$ route -n Kernel IP routing table Destination 192.168.0.0 169.254.0.0 127.0.0.0 0.0.0.0 Gateway * * * 192.168.0.1 Genmask 255.255.255.0 255.255.0.0 255.0.0.0 0.0.0.0 Flags Metric Ref U U U UG 0 0 0 0 0 0 0 0 Use Iface 0 eth0 0 eth0 0 lo 0 eth0

user@localhost:/$

733/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Primjer routing tablice na Windows XP raunalu:


C:\>route print =========================================================================== Interface List 0x1 ........................... MS TCP Loopback interface 0x10003 ...00 50 ba b9 03 54 ...... Realtek RTL8139 Family PCI Fast Ethernet NIC =========================================================================== =========================================================================== Active Routes: Network Destination 0.0.0.0 10.0.0.0 10.0.0.11 10.255.255.255 127.0.0.0 224.0.0.0 255.255.255.255 Default Gateway: Netmask 0.0.0.0 255.255.255.0 255.255.255.255 255.255.255.255 255.0.0.0 240.0.0.0 255.255.255.255 10.0.0.1 Gateway 10.0.0.1 10.0.0.11 127.0.0.1 10.0.0.11 127.0.0.1 10.0.0.11 10.0.0.11 Interface 10.0.0.11 10.0.0.11 127.0.0.1 10.0.0.11 127.0.0.1 10.0.0.11 10.0.0.11 Metric 20 20 20 20 1 20 1

=========================================================================== Persistent Routes: None C:\>

734/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Mreno programiranje
Mreno programiranje obuhvaa pisanje programa koji komuniciraju sa drugim programima preko raunalne mree. Jedan program se uobiajeno naziva klijent, a drugi server. Primjer klijent-server komunikacije je Web browser kao klijent i Web server kao server. Veina mrenih aplikacija se moe podijeliti u dvije skupine: klijent i server.

klijent

komunikacijski link

server

Slika - Mrena aplikacija: klijent i server

Klijenti (klijents) uobiajeno komuniciraju sa jednim serverom u isto vrijeme, premda koristimo Web browser kao primjer, moemo komunicirati sa vie razliitih servera. Sa serverske strane, sasvim je uobiajeno da server u jednom trenutku ima uspostavljenu vezu (komunicira) sa vie razliitih klijenata.

klijent

...
klijent server

...
klijent

735/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Slika - Upravljanje servera sa vie klijenata istovremeno

Klijent server mogu se nalaziti u istoj lokalnoj mrei, na primjer Ethernet, ali takoer mogu biti i u razliitim mreama, to je u veini situacija sluaj, povezanim preko wide area network-a (WAN) koristei routere. Slike prikazuju klijent server vezu unutar iste mree i klijent server vezu kada se nalaze u razliitim mreama.

user process

Web klijent

application protocol

Web server

application layer

TCP protocol protocol stack within kernel

TCP

TCP

transport layer

IP protocol

IP

IP

network layer

Ethernet driver

Ethernet protocol

Ethernet driver

datalink layer

actual flow between klijent and

Ethernet

Slika - klijent i server u istom Ethernet, komuniciraju koristei TCP

Bitno je napomenuti, iako izgleda da klijent i server komuniciraju koristei application layer, transport layer komunicira koristei TCP itd., da u stvarnosti to nije tako, ve se sve sputa na najniu razinu, a zatim se vri prijenos podataka od najnie razine do odgovarajue razine.

736/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

klijent application

server application

host with TCP/IP

host with TCP/IP

LAN

LAN

router WAN router router router

router

router

Slika - klijent i server u razliitim LAN mreama povezani preko WAN-a

Uspostavljanje i raskidanje veze


Uspostavljanje veze (three way handshake)
1. server mora biti spreman prihvatiti nadolazeu vezu. To se uobiejeno ostvaruje pozivanjem socket, bind i listen funkcija i naziva se passive open. 2. klijent zapoinje aktivnim otvaranjem (active open) pozivanjem connect funkcije. To uzrokuje da TCP klijent alje SYN segment (koji slui za sinhronizaciju) da se kae serveru da je klijent inicijalizirao broj sekvence za podatke koji e se slati preko uspostavljene veze. Uobiajeno se ne alju podaci kada se alje SYN: on samo sadri IP header, TCP header i mogue TCP opcije. 3. server mora potvrditi klijent-ov SYN, i server mora takoer poslati svoj SYN sadravajui inicijalizirani broj sekvence za podatke koje e server slati na vezu. Server alje svoj SYN i ACK na klijent-ov SYN u jednom segmentu. 4. klijent mora potvrditi serverov SYN

737/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Minimalan broj potvrdnih paketa za ovu izmjenu je tri i zbog toga se uspostava TCP veze i naziva three way handshake. Slika 2.1. pokazuje opisan postupak.

klijent
socket connect (blocks) (active open)
SYN J

server
socket, bind,listen accept (blocks) SYN K, ack J+1

connect returns

ack K+1

accept returns read (blocks)

Slika - TCP three way handshake

Raskidanje veze
Dok je za uspostavljanje veze bila potrebna tri segmenta, za raskid veze su potrebna etiri segmenta. 1. Jedna aplikacija prva zove close, kae se da je kraj izvoenja active close. Ta strana alje FIN segment, to znai da je zavreno slanje podataka. 2. Druga strana koja primi FIN izvodi passive close. Primljeni FIN je potvren od TCP-a. Primitak FIN-a se takoer prosljeuje aplikaciji kao end-of-file (EOF) (nakon svakog podatka koji je moda ve u redu da ju primi aplikacija), budui da primitak FIN-a znai da aplikacija nee primit nit jedan suvian podatak preko veze. 3. Malo kasnije aplikacija koja primi end-of-file e zatvoriti (close) socket. To uzrokuje da TCP poalje FIN. 4. TCP na sistemu koji je primio taj konani FIN (kraj sa active close) potvruje FIN.

738/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

klijent
close (active close)
FIN M

server
(passive close) read return 0

ack M + 1 FIN N

close

ack N+1

Slika - Izmjena paketa prilikom raskida TCP veze

Socketi
Socket se definira kao jedan kraj komunikacijskog kanala. Za komunikaciju para procesa potreban je par socketa za svaki proces po jedan. Socket je odreen IP adresom i brojem port-a. Uglavnom socketi se koriste u klijent-server arhitekturi. Server eka zahtjeve klijenata tako da "slua" na odreenom portu socketa. Serveri obino implementiraju specifine servise na odreenom portu(telnet-23, ftp21, http-80). Svi brojevi portova ispod 1024 su uglavnom koriteni od strane poznatih aplikacija. Kad se klijent spoji na socket dodjeljuje mu se broj porta koji je vei od 1024 npr 1625. Kad se jo jedan klijent spoji na server aplikaciju njemu se dodjeljuje broj porta vei od 1024, ali razliit od 1625. Na taj nain uvijek imamo jedinstveni par socketa za svaki par klijent-server. Dvije vrste socketa su najkoritenije: stream sockets datagram sockets

Stream socketi su pouzdani dvosmjerni komunikacijski kanal. Sve to se upisuje s jedne strane socketa izlazi na drugoj strani u istom obliku. Ako upiete string '1,2,3' na izlazu
739/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

ete proitati '1,2,3'. Takoer sve mogue greke prilikom transporta paketa su ispravljene tako da korisnik ima dojam da je socket "error free". Stream sockete koriste aplikacije poput telnet-a i web browsera koji koriste http protokol. Datagram sockets se jo nazivaju i connectionless. Nisu toliko pouzdani jer datagram koji je poslan moe i ne mora stii, ne moraju stii istim redoslijedom kojim su poslani ali ako stigne biti e ispravan. Datagram socketi koriste IP ali ne i TCP. Nazivaju se connectionless jer se ne mora drugi kraj drati otvoren cijelo vrijeme nego se samo alju paketi sa odredinom adresom. Koriste ga aplikacije poput tftp i bootp. Internet programi kao to su Telnet, rlogin, FTP, talk, i World Wide Web koriste socket za komunikaciju. Na primjer, moemo doi do www stranice preko Web servera koristei socket za mrenu komunikaciju. Da bi uspostavili vezu sa www serverom koristei Telnet program, neka je stranica na koju se spajamo www.imestranice.com, tada emo prilikom spajanja navesti i port koji oznaava da se spajamo na www server, a on je 80. Port 80 je standardni port dodijenjen od IANA-e na kojem 'slua' (listen) web server. Primjer: Dohvaanje HTML-sourca pomu Telnet programa

% telnet www.imestranice.com 80 Trying 206.168.99.1... Connected to oznaka.imestranice.com (206.168.99.1) Escape character is '^]'. GET / <html> <head> <meta http-equiv = Content Type content = text/html; charset iso 8859 1> . . .

740/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

BSD socketi
Generalno gledajui, svaki operacijski sustav mora definirati odgovarajui Application Programming Interface (API) izmeu korisnikog programa i mrenog kda. Linux mreni API je baziran na BSD socketima. Predstavljeni su u Berkley UNIX 4.1cBSD i dostupni su u gotovo svakom operacijskom sustavu slinom Unixu. Socket je dvosmjerna komunikacijska jedinica koja moe biti koritena za komuniciranje sa drugim procesima na istom raunalu ili sa procesom pokrenutim na drugom raunalu. Internet programi kao Telnet, rlogin, talk ili World Wide Web koriste sockete. Socket je komunikacija izmeu tzv. ulaznih vrata i krajnje toke kanala koji povezuje dva procesa. Podaci se poalju na ulazna vrata i nakon nekog vremena pojave se na drugoj strani (izlazu). Komunikacijski procesi mogu biti na razliitim raunalima. Mreni kd Kernela prosljeuje podatke izmeu krajnjih toaka. Linux implementira BSD sockete kao datoteke koji pripadaju u sockfs special filesystem. Preciznije, za svaki novi BSD socket, Kernel kreira novi inode u sockfs filesistemu. Atributi BSD socketa su spremljeni u socket strukturi podataka koja je objekt ukljuen u polju u.socket_i sockfs inode-a.
Metode BSD socket objekta metoda release bind connect socketpair accept getname ioctl listen shutdown setsockopt getsockopt sendmsg recvmsg mmap sendpage opis zatvara socket dodjeljuje lokalnu adresu (ime) uspostavlja vezu (TCP) ili dodjeljuje remote adress (UDP) kreira par socketa za dvosmjernu razmjenu podataka eka zahtjev za spajanje vraa lokalnu adresu implementira ioctl()komande inicijalizira socket da prihvati zahtjev za spajanjem zatvara pola ili obje polovice full-duplex veze postavlja vrijednosti socket flagovima uzima vrijednosti socket flagova alje paket socketu prima podatak od socketa file memory-mapping (ne koriste mreni socketi) kopira podatke direktno iz/prema fajlu (sendfile() sistemski poziv)

741/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Tablica - Metode BSD socket objekta

INET socketi
INET socketi su strukture podataka tipa struct sock. Svaki BSD socket koji pripada IPS mrenoj arhitekturi sadri adrese INET socketa u sk polju socket objekta. INET socketi su potrebni jer socket objekti (opisujui BSD sockete) ukljuuju samo polja koja su znaajna za sve mrene arhitekture. Ali, kernel mora takoer zapamtiti i nekoliko drugih informacija za svaki socket bilo koje mrene arhitekture. Na primjer, u svakom INET socketu, kernel zapisuje lokalne i udaljene IP adrese, lokalne i udaljene brojeve portova, relativni transportni protokol, podatke o primljenim paketima, podatke o paketima koji ekaju da budu poslani socketu, te nekoliko tablica metoda za slanje paketa do socketa. Ovi atributi su spremljeni, zajedno sa mnogim drugima, u INET socketima. INET socket objekt takoer definira neke metode specifine tipu transporta protokola (TCP ili UDP). Metode spremljene u strukturi podataka tipa proto:
metode INET socket objekta metoda close connect disconnect accept ioct1 init destroy shutdown setsockopt getsockopt sendmsg recvmsg bind backlog_rcv hash unhash get_port opis zatvara socket uspostavlja vezu ili dodjeljuje remote adress prekida uspostavljenu vezu eka zahtjev za spajanje implementira ioctl()komande INET socket objekt konstruktor INET socket objekt destruktor zatvara pola ili obje polovice full-duplex veze postavlja vrijednosti socket flagovima uzima vrijednosti socket flagova alje paket socketu prima podatak od socketa dodjeljuje lokalnu adresu (ime) funkcija pozvana kada prima paket doda INET socket per-protocol hash tablici makne INET socket iz per-protocol hash tablice dodjeljuje broj porta INET socketu

Tablica - Metode INET socket objekta

742/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

sock objekt sadri otprilike 80 polja od kojih su mnoga pokazivai na druge objekte, tablice, metode ili druge strukture podataka.

Koncepti socketa
Kada kreiramo socket moramo definirati tri parametra: nain komuniciranja (communication style), namespace, i protokol.

Communication style
Nain komuniciranja kontrolira kako socket tretira poslane podatke i specificira broj komunikacijskih partnera. Kada su podaci poslani kroz socket, raspakirani su u dijelove nazvane paketima. Stil komuniciranja odreuje kako su ti paketi podrani i kako su adresirani od poiljaoca do primatelja. Connection style garantira isporuku svih paketa po redu kako su poslani. Ako su paketi izgubljeni ili je promijenjen redoslijed zbog problema na mrei, primatelj automatski zahtjeva njihovo ponovno slanje od poiljaoca. Connection-style socket je kao telefonski poziv: adresa poiljatelja i primatelja je fiksna na poetku komunikacije kada je veza uspostavljena. Datagram style ne garantira isporuku ili redoslijed dolaska paketa. Paketi mogu biti izgubljeni ili promijenjenog redoslijeda zbog problema na mrei. Svaki paket mora biti oznaen sa svojom destinacijom i nije zagarantirano da e biti isporuen. Sustav garantira samo najbolju volju, tako paketi mogu nestati ili stii u krivom redoslijedu u odnosu na to kako su poslani. Datagram-style sockets nain slanja je mogue usporediti sa slanjem pisma potom: poiljatelj specificira adresu primatelja za svaku individualnu poruku.

Namespace
Socket namespace odreuje kako su zapisane adrese socketa. Adresa socketa odreuje jedan kraj veze socketa. Na primjer, adrese socketa u local namespaceu su obina imena datoteka. U Internet namespaceu adresa socketa je sastavljena od Internet adrese (Internet

743/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Protocol adress ili IP address) raunala spojenog na mreu i broj porta. Broj porta raspoznaje viestruke sockete na istom raunalu.

Protokol
Protocol specificira kakvim socketom se podaci prenose. Neki protokoli su TCP/IP, primarni mreni protokol koriten kod Interneta; Apple Talk mreni protokol; UNIX lokalni komunikacijski protokol.

Socket buffer
Svaki pojedini paket poslan kroz mrenu jedinicu sastoji se od nekoliko dijelova. Svi slojevi mree, dodaju neke kontrolne informacije na osnovni payload, tj. podatak koji se prenosi putem mree. Format paketa se mijenja prolaskom kroz TCP/IP slojeve. Cijeli paket je napravljen u nekoliko dijelova koritenjem razliitih funkcija. Na primjer, UDP/TCP zaglavlje i IP zaglavlje su sastavljeni od funkcija zavisno transportnom i mrenom sloju IPS arhitekture, dok su zaglavlje i trailera, napisani odgovarajuom metodom specificiranom mrenom karticom. Mreni kd Linuxa sadri svaki paket u velikom memorijskom podruju nazvanom socket buffer. Svaki socket buffer je definiran sa strukturom podatka tipa sk_buff sadri, uz mnoge druge stvari, pokazivae na slijedee strukture podataka: socket buffer payload podaci korisnika (unutar socket buffera) the data link trailer (unutar socket buffera) INET socketi (sock object) deskriptor zaglavlja transportnog sloja deskriptor zaglavlja mrenog sloja deskriptor data link layer zaglavlja the destination cache entry (dest_entry object) koja

744/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Struktura podataka sk_buff sadri identifikator mrenog protokola koriten za slanje podataka (checksum field) i vrijeme dolaska primljenih paketa. Kernel izbjegava kopiranje podataka ve jednostavno proslijeuje sk_buff descriptor pointer svakom mrenom sloju. Na primjer, kada priprema paket za slanje, transportni sloj poinje kopirati payload iz korisnikog buffera na viu poziciju socket buffera; tada transportni sloj dodaje svoje TCP ili UDP zaglavlje prije payloada. Nakon toga, kontrola se predaje mrenom sloju, koji prima socket buffer descriptor i dodaje IP zaglavlje prije transportnog zaglavlja. Konano, data link sloj dodaje svoje zaglavlje i trailer, ime pripremi paket za slanje.

Serveri
ivotni ciklus servera ovisi o kreiranju connection-style socketa, dodjelivi mu adresu na njegov socket, postavljajui poziv na listen koji omoguuje veze do socketa, postavljajui pozive na accept dolazeim vezama, i na kraju zatvarajui socket. Podaci nisu itani i pisani direktno preko server socketa. Umjesto toga program svaki puta prima novu vezu; Linux kreira zasebne sockete za koritenje prijenosa podataka preko te veze. U ovom odlomku emo objasniti bind, listen i accept. Adresa mora biti dodjeljena socketu servera koristei bind tako da se klijent moe spojiti na taj socket. Prvi argument bind-a je socket file descriptor. Drugi argument je pokaziva na adresnu strukturu socketa. Trei argument je duina adresne strukture, u byte-ovima. Kada je adresa dodijeljena connection-style socketu, potrebno je pozvati listen ime e pokazati da je server. Prvi argument listen metode je socket file descriptor. Drugi argument odreuje koliko je prihvaenih veza u redu (queue). Ako je red pun, dodatna spajanje biti e odbijena. To ne ograniava ukupan broj veza koje server moe obraditi. Ograniava jedino broj klijenata koji se pokuavaju spojiti a nisu jo bili prihvaeni. Server prihvaa zahtjev za spajanjem od klijenta pokretanjem accept-a. Prvi argument accept-a je socket file descriptor. Drugi argument pokazuje na adresnu strukturu socketa koja je napunjena klijentovim adresama socketa. Trei argument je duina adresne strukture socketa u byte-ovima. Server moe koristiti klijentovu adresu da utvrdi hoe li stvarno komunicirati sa klijentom. Poziv za prihvaanje kreira novi socket za komunikaciju sa klijentom i vraa odgovarajui file descriptor. Originalni server socket nastavlja primati nove klijentove veze. Za itanje podataka iz socketa bez da ga se ukloni iz ulaznog reda,

745/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

koristimo recv. Koristimo iste argumente kao read, plus dodatni FLAGS argument. Flag MSG_PEEK omoguava itanje podataka ali ne i micanje iz ulaznog reda.

Lokalni socketi
Proces spajanja socketa na istom raunalu moe koristiti lokalni namespace prezentiran kao sinonim PF_LOCAL i PF_UNIX. Zovu se lokalni socketi ili UNIX-domain socketi. Njihove socket adrese, specificirane po imenima datoteka, su koritene samo kod kreiranja veza. Socketima je ime specificirano u struct sockaddr_un. Moramo postaviti sun_family polje na AF_LOCAL, ime odreujemo da se radi o lokalnom namespaceu. Polje sun_path odreuje ime datoteke koja e se koristiti i moe biti, najvie, 108 byteova dugako. Moe biti koriteno bilo koje ime, a proces mora imati prava pisanja u direktoriju jer trebamo dodavati datoteke u direktorij. Da bi se spojili na socket, proces mora imati prava itanja iz datoteke. Makar razliita raunala mogu dijeliti iste file-sisteme, samo procesi pokrenuti na istom raunalu mogu komunicirati sa lokalnim namespace socketima. Jedini dozvoljeni protokol za lokalni namespace je 0. Zbog toga to postoji u filesistemu, lokalni socket se moe izlistati kao i datoteka. Na primjer:
$ls l /tmp/socket srwxrwxx 1 user group 0 Nov 13 18:18 /tmp/socket

U dodatku C moe se pogledati primjer komunikacije dva procesa preko socket-a.

746/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

IPv4 Socket adresna struktura


IPv4 socket adresna struktura, esto nazivana Internet socket adresna struktura, je nazvana sockaddr_in i definirana je u <netinet/in.h> header-u. Posix definicija strukture je slijedea:
struct in_addr { in_addr_t }; a_addr; /* 32 - bit IPv4 adress */ /* network byte ordered */

struct sockaddr_in { uint8_t sa_family_t in_port_t struct in_addr char };

sin_len; sin_family; sin_port; sin_addr; sin_zero[8];

/* /* /* /* /* /* /*

lenght of structure (16) */ AF_INET */ 16-bit TCP or UDP port number */ network byte ordered */ 32-bit IPv4 adress */ network byte ordered */ unused */

Socket adresna struktura se moe prosljeivati od procesa prema kernelu, i obratno, od kernela prema procesu. etiri socket funkcije prosljeuju socket adresnu strukturu od procesa prema kernelu, a to su: bind, connect, sendto, i sendmsg. Pet funkcija kojima kernel prosljeuje socket adresnu strukturu su: accept, recvfrom, recvmsg, getpeername, i
getsockname.

Socket adresna struktura se uvijek alje po referenci, kada je prosljeujemo kao argument bilo koje socket funkcije. Kako bi se ostvarila generika socket adresna struktura, neovisna o protokolu bilo je potrebno osmisliti kako e se kroz jednu funkciju slati strukture razliitih protokola. U ANSI C-u rjeenje bi bilo vrlo jednostavno koritenjem void * (void pointera), koji je generiki tip pointera. Ali kako su socket funkcije raene prije nego to je doneen ANSI C, bilo je potrebno pronai nekakvo rjeenje, koje je izabrano 1982. godine kao generika socket adresna struktura i koja je definirana u <sys/socket.h> header-u a izgled strukture je slijedei:
struct sockaddr { uint8_t sa_family_t char };

sa_len; sa_family; sa_data[14];

/* address family: AF_xxx value */ /* protocol-specific address */

747/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Socket funkcije su definirane tako da uzimaju pointer na generiku strukturu, kao to je prikazano u ANSI C prototipu funkcije za bind funkciju:

int bind (int, struct sockaddr *, socklen_t);

Ovo dreuje da za svaki poziv ove funkcije mora se cast-ati pointer socket adresne strukture specifinog protokola na pointer generike socket adresne strukture. Na primjer,
int sockfd; struct sockaddr_in serv; ... bind (sockfd, (struct sockaddr *) &serv, sizeof(serv));

Ako izostavimo cast (struct sockaddr *) compiler generira upozorenje. Slika prikazuje izgled struktura sockaddr_in (IPv4), sockaddr_un (Unix), i sockaddr_dl (Datalink).
IPv4 sockaddr_in() lenght
AF INET

IPv6 sockaddr_in6() lenght


AF INET6

Unix sockaddr_un() lenght


AF INET6

Datalink sockaddr_dl() lenght


AF LINK

16-bit port# 32-bit IPv4 address (unused)

16-bit port# 32-bit flow label

interface index type addr len name len sel len

128-bit IPv6 adress


fixed lenght (16 bytes)

pathname (up to 104 bytes)

interface name and link-layer address

variable lenght fixed lenght (24 bytes)

variable lenght

Slika - Usporedba razliitih socket adresnih struktura

748/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Osnovne funkcije za rad sa socket-ima (System Calls)


socket close connect bind listen accept - kreiranje socket-a - unitavanje socket-a - uspostavljanje veze izmeu dva socket-a - oznaavanje server socket-a sa adresom - konfigurira socket za prihvaanje uvjeta - prhvaa vezu i kreira novi socket za komunikaciju

Socket je predstavljen file descriptor-om.

Pregled osnovnih funkicija


socket funkcija Za izvravanje mrene komunikacije, prvu stvar koju proces mora napraviti je pozvati funkciju socket, odrediti tip komunikacijskog protokola (TCP koristei Ipv4, UDP koristei Ipv6, Unix protokol, itd.).

#include <sys/socket.h> int socket (int family, int type, int protocol); Returns: nonnegative descriptor if OK, -1 on error

family type protocol

- odreuje vrstu protokola - tip podataka koji se prenose socket-om (tip socket-a) - protokol

Za family argument koristimo jednu od ponuenih konstanti:


family AF_INET AF_INET6 AF_LOCAL Description IPv4 protocols IPv6 protocols Unix domain protocols

749/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb AF_ROUTE AF_KEY Routing sockets Key sockets

Programski alati na Unix raunalima UDP

Tablica - Protokol family konstante za socket funkciju

Za type argument koristimo slijedee konstante:


family SOCK_STREAM SOCK_DGRAM SOCK_RAW Description stream socket datagram socket raw socket

Tablica - tip socket-a za socket funkciju

Za protocol argument koristimo nulu, osim ako ne koristimo raw socket. Nisu podrane sve kombinacije parametara. Tablica prikazuje pregled kombinacija koje su podrane.

AF_INET SOCK_STREAM SOCK_DGRAM SOCK_RAW TCP UDP IPv4

AF_INET6 TCP UDP IPv6

AF_LOCAL Yes Yes

AF_ROUTE

AF_KEY

Yes

Yes

Tablica - Podrane kombinacije family-a i type-a za socket funkciju

AF_xxx vs. PF_xxx AF_ prefiks dolazi od address family, a PF_ prefiks dolazi od protocol family. U povijesti je bila intencija da jedna porodica protokola moe podravati vie adresnih porodica i za to je koritena PF_ vrijednost za kreiranje socket-a, dok je AF_ vrijednost koritena u socket address strukturama. Trenutno je PF_ vrijednost postavljena na AF_, ali nema garancije da se to u budunosti nee promijeniti.

750/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

connect funkcija connect funkciju poziva TCP klijent da bi uspostavio vezu sa TCP serverom.

#include <sys/socket.h> int connect (int sockfd, const struct sockaddr *servaddr, socklen_t addrlen); Returns: 0 if OK, -1 on error

sockfd je socket deskriptor koji nam vrati funkcija socket. Drugi i trei argument je pointer na socket address strukturu i veliina te strukture. socket address mora sadravati IP adresu i broj porta servera. Klijent ne mora zvati bind funkciju prije connect funkcije. Kernel e izabrati oboje, polazan port i izvor IP adrese ako je to potrebno. U sluaju TCP socket-a, veza se inicijalizira u tri sinhronizacijska koraka (three way handshake). Ako se veza uspostavi funkcija vraa nulu, inae ako se dogodi error ili se veza ne moe uspostaviti funkcija vraa -1. bind funkcija
bind funkcija oznaava socket sa lokalnom adresom protokola.
#include <sys/socket.h>

int bind (int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);
Returns: 0 if OK, -1 on error

myaddr argument je pointer na socket adresnu strukturu kojom se odreuju osnovne informacije pojedinog protokola, a trei argument je veliina adresne strukture.
bind funkcija je zapravo dodjeljivanje adrese serveru. Adresa koja se postavi ovom

funkcijom je ujedno i adresa na koju se klijenti spajaju kada ele uspostaviti vezu sa serverom.

751/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

listen funkcija
listen funkciju zove jedino server i izvrava dvije akcije:

1. Kada je socket kreiran pomou socket funkcije tada je predodreen da bude aktivan socket, to je, klijentov socket e pozvati connect. listen funkcija pretvara nepovezan socket u pasivan socket, naznauje da kernel mora oslukivati ima li zahtjeva za uspostavljanjem veze i ako ima da ih povee na taj socket. U TCP terminima to znai prelazak socket-a iz stanja CLOSED u stanje LISTEN. 2. Drugi argument funkcije odreuje maksimalan broj veza koje kernel treba poredati za uspostavljanje vez za taj socket.
#include <sys/socket.h>

int listen (int sockfd, int backlog);


Returns: 0 if OK, -1 on error

listen funkcije se uobiejeno zove nakon oba poziva socket i bind funkcija i mora biti

pozvana prije poziva accept funkcije. Kernel mora podrati dva reda: 1. incomplete connection queue, koji sadrava ulaz za svaki SYN koji dolazi od klijenta za koje server eka da se kompletira TCP three way handshake. Takvi socket-i su u SYN_RCVD stanju. 2. completed connection queue, koji sadrava ulaz za svakogklijenta sa kim je TCP three way handshake zavren. Ovakvi socket-i su ESTABLISHED stanju.

752/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP


sum of both queues cannot exceed backlog

server
accept

TCP

3WHS complete

completed connection queue (ESTABLISHED state)

incompleted connection queue (SYN_RCVD state)

arriving SYN

Slika - Dva reda podrana od TCP-a za listening socket

klijent
connect called
SYN J

server

create entry on incomplete queue

RTT

SYN K, ack J+1

RTT
connect returns
ack K+1 entry moved from incomplete queue to completed queue, accept can return

Slika - TCP three way handshake i dva reda za listening socket

753/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Koju vrijednost izabrati za backlog? Kod odabira vrijednost backlog-a najbolje bi bilo provjeriti posljednju dokumentaciju pojedinog operacijskog sustava. U tablici nalaze se trenutne vrijednost za backlog.
Maximum actual number of queued connections Dunix AIX backlog 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 2 4 5 7 8 10 11 13 14 16 17 19 20 22 4.2, Linux 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 BSD/OS 3.0 4.0, 2.0.27, HP-UX 10.30 1 1 3 4 6 7 9 10 12 13 15 16 18 18 19 SunOS 4.1.4 1 2 4 5 7 8 8 8 8 8 8 8 8 8 8 Solaris 2.5.1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Solaris 2.6 1 3 4 6 7 9 10 12 13 15 16 18 19 21 22

Uware 2.1.2

Tablica - Trenutni broj veza za vrijednost backlog-a accept funkcija


accept funkcija zove TCP server, prihvaa slijedeu zavrenu vezu iz reda completed

connection queue. Ako je red zavrenih veza prazan, proces prelazi u sleep stanje (blocking socket). Kada server prihvati novu vezu, kreira se i novi socket preko kojeg se nastavlja komunikacija izmeu servera i klijent-a.
#include <sys/socket.h>

int accept (int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);


Returns: nonnegative descriptor if OK, -1 on error

754/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

close funkcija
close funkcija se koristi da bi se zatvorila i terminirala TCP veza.

Podrazumijevana akcija close funkcije je da oznai socket kao zatvoren za dajlnju komunikaciju. Socket deskriptor vie nije valjan i ne moe se koristiti kao argument funkcija
read i write. Jedina nezgodna stvar kada koristimo close funkciju je to e naa TCP veza i

dalje pokuavati (neko odreeno vrijeme) poslati odnosno primiti podatke. close funkcija se ponaa kao dekrementirajua, dok se funkcija accept ponaa kao inkrementirajua funkcija. Ako drugoj strani elimo odmah poslati FIN signal, kako bi joj dali do znanja da se veza raskida tada emo koristiti funkciju shutdown.

#include <sys/socket.h>

int close (int sockfd);


Returns: 0 if OK, -1 on error

755/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Primjer koritenja socket-a za ostvarivanje komunikacije klijent server


Osnovna ideja je slijedea: server mora biti cijelo vrijeme u radu i oslukivati da li ima clienat-a koji se ele spojiti na server (kao ovjek na informacijama, eka da zazvoni telefon). Ako postoji netko tko se eli spojiti na server, server mu to mora omoguiti (ovjek na informacijama podie slualicu i preusmjerava poziv na odgovarajuu liniju kojom e se vriti komunikacija). Ako postoji jo linija koje se ele spojiti, server e im to omoguiti samo u sluaju da nisu sve linije ve zauzete, to je u naem sluaju broj koji smo naveli u backlog kod listen funkcije. Ako su sve linije zauzete i ne moemo prihvatiti niti jednu nadolazeu vezu, tada klijent-ova strana javlja klijent-u da je server zauzet ili da se ne moe spojiti na odreeni server. Klijent-ova strana moe imati definirani vremenski interval u kojemu e se klijent pokuavati spojiti na server.

Trenutno vrijeme na serveru


Jednostavni primjeri socket-klijent.c i socket-server.c pokazuju najjednostavnije spajanje klijent-a sa serverom. Nakon spajanja, ako spajanje uspije, server alje klijent-u trenutno vrijeme, vrijeme kada se klijent spojio na server. socket-klijent.c
#include #include #include #include #include #include <stdio.h> <sys/types.h> <sys/socket.h> <netinet/in.h> <unistd.h> <string.h> /* osnovni sistemski tipovi podataka */ /* osnovne socket definicije */ /* sockaddr_in{} i druge Internet definicije */

int main (void) { int sockfd; struct sockaddr_in servaddr; char buffer[64] = {0}; /* kreiranje klijent-ovog socket-a za komunikaciju */ sockfd = socket (PF_INET, SOCK_STREAM, 0); if (sockfd == -1) { printf("socket() error!\n"); return 1; } /* dogovorno se struktura inicijalizira na nulu */ memset(&servaddr, 0, sizeof(servaddr)); /* osnovne informacije servera */ servaddr.sin_family = AF_INET; servaddr.sin_port = htons(8000); servaddr.sin_addr.s_addr = INADDR_ANY;

756/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

/* spajanje klijent-a sa serverom, i to na onaj koji je odreen adresnom strukturom */ if ( connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) == -1 ) { printf("connect() error!\n"); return 2; } /* primamo podatke koje nam je server poslao */ recv(sockfd, buffer, sizeof(buffer), 0); puts(buffer); /* zatvaramo socket, kraj komunikacije */ close(sockfd); return 0; }

Primjer - Spajanje klijent-a sa serverom socket-server.c


#include #include #include #include #include #include #include <stdio.h> <sys/types.h> <sys/socket.h> <netinet/in.h> <unistd.h> <string.h> <time.h>

int main (void) { int sockfd, klijent; struct sockaddr_in servaddr, cliaddr; char buffer[64] = {0}; char * begin; int addr_sz; time_t tmp_time; /* kreiranje serverovog socket-a */ sockfd = socket (PF_INET, SOCK_STREAM, 0); if (sockfd == -1) { printf("socket() error!\n"); return 1; } memset(&servaddr, 0, sizeof(servaddr)); /* informacije servera */ servaddr.sin_family = AF_INET; servaddr.sin_port = htons(8000); servaddr.sin_addr.s_addr = INADDR_ANY; /* oznaavanje da je ovo server */ if (bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) == -1) { printf("bind() error!\n"); return 2; } /* oslukivanje konekcije */ if (listen(sockfd, 2) == -1) { printf("listen() error!\n"); return 3; } /* prihvaanje konekcije koja eli uspostaviti vezu */ addr_sz = sizeof(cliaddr); if ( (klijent = accept(sockfd, (struct sockaddr *) &cliaddr, &addr_sz)) == -1) { printf("accept() error!\n"); return 4; } /* dohvaanje trenutnog vremena */

757/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb


tmp_time = time (NULL); begin = ctime(&tmp_time); strcpy(buffer, begin); /* poalji klijent-u vrijeme spajanja */ send(klijent, buffer, strlen(buffer), 0); /* zatvaranje privremenog komunikacijskog socket-a */ close(klijent); /* zatvaranje serverovog socket-a */ close(sockfd); return 0; }

Programski alati na Unix raunalima UDP

Primjer - Jednostavan server program

Primjeri socket-server.c i klijent-server.c su u potpunosti pojednostavljeni kako bi to bolje pokazali najjednostavnije spajanje klijent-a sa serverom. U stvarnosti serverski program je onaj koji radi bez prestanka i tako omoguuje klijent-ima da se spoje u bilo koje vrijeme. Prvo se pokree serverov program koji kreira socket i zatim eka na klijent-a sa funkcijom
accept. Kada se klijent spoji na serverov socket, accept funkcija vrati novi socket preko

kojega e se vriti komunikacija. Nakon toga server klijent-u alje svoje trenutno vrijeme i zavrava sa radom. Klijent dobiva informaciju od servera i takoer zavrava sa radom.

Konkurentni server
Ako elimo da na server program bude to sliniji pravom serveru tada bi accept funkciju stavili u beskonanu while petlju zajedno sa send funkcijom koja alje klijent-u vrijeme servera. Sada je sasvim oit jedan veliki problem, a to je to ako imamo puno klijenata koje se ele spojiti u isto vrijeme? Neki od klijenata bi bili prisiljeni da ekaju one koji imaju uspostavljenu vezu sa serverom. Kako nitko ne voli ekati, a pogotovo klijent, postoji rjeenje ovoga problema, a to je konkurentni server, server koji moe u jednom trenutku izmjenjivati podatke sa vie klijenata. Konkurentan server radi na nain da svaku komunikaciju sa pojedinim klijentom vri u zasebnom thread-u. Pomou thread-ovo dobivamo paralelnu komunikaciju servera sa klijentom. Jedino to treba paziti kod multithread aplikacija je sinhronizacija pristupa dijeljenim resursima i da neke funkcije ne garantiraju ispravan rad u thread funkciji.

758/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Primjer prikazuje kako server komunicira sa vie klijenata u isto vrijeme pomou thread-ova. server-thread.c
#include #include #include #include #include #include #include #include <stdio.h> <sys/types.h> <sys/socket.h> <netinet/in.h> <unistd.h> <string.h> <time.h> <pthread.h>

/* thread definicije */

/* thread funkcija, za sve klijente jednaka */ void * ThreadFun (void *arg) { /* klijent-ov socket */ int clifd = *((int *) arg); time_t tmp_time; char buffer[64] = {0}; char * begin; int i; /* oslobaamo zauzete resurse */ free(arg); /* dohvaanje trenutnog vremena, (ctime() ne garantira ispravan rad) */ tmp_time = time (NULL); begin = ctime(&tmp_time); strcpy(buffer, begin); /* aljemo trenutno vrijeme klijent-u */ send(clifd, buffer, strlen(buffer), 0); /* svaki thread optereujemo dugotrajnom operacijom */ for (i = 0; i < 1000000; i++) printf("Ovo je thread %d\n", i); /* zatvaramo komunikacijski socket */ close(clifd); return NULL; } int main (void) { int sockfd; struct sockaddr_in servaddr, cliaddr; int addr_sz; pthread_t tid; sockfd = socket (PF_INET, SOCK_STREAM, 0); if (sockfd == -1) { printf("socket() error!\n"); return 1; } memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(7000); servaddr.sin_addr.s_addr = INADDR_ANY; if (bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) == -1) { printf("bind() error!\n"); return 2; } if (listen(sockfd, 10) == -1) { printf("listen() error!\n"); return 3;

759/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb


}

Programski alati na Unix raunalima UDP

addr_sz = sizeof(cliaddr); printf("Server ceka na klijent-a!\n"); while (1) { /* za svaku novu konekciju dinamiki alociramo resurse */ int *clifd = (int *) malloc (sizeof(int)); if ( (*clifd = accept(sockfd, (struct sockaddr *) &cliaddr, &addr_sz)) == -1) { printf("accept() error!\n"); return 4; } /* za svaku prihvaenu vezu kreiramo novi thread */ pthread_create(&tid, NULL, ThreadFun, (void *) clifd); } /* kraj rada servera */ close(sockfd); return 0; }

Primjer - Server ostvaren pomou thread funkcije

Klijent-ov kod se nije mijenjao, on se i dalje spaja na server kao i prije promjene, samo sada se ne moe dogoditi zastoj, jer server svaku novu konekciju pokree u zasebnom thread-u. Sad server moe biti samo zauzet ako se dosegne maksimalan broj thread-ova koje server moe opsluivati. Kod koritenja thread-ova imamo mali problem, a to je, ako server ostvari veliki broj konekcija, odnosno, u nekom trenutku imamo puno klijenata koji su trenutno spojeni na na server i ako iz nekog razloga se na server srui, klijenti koji se obrauju u zasebrni thredovima, oni postaju zombiji, ostaju bez onoga tko ih je stvorio. Da bi se izbjegla takva situacija koriste se procesi. Sada emo za svaku uspostavljenu vezu umjesto kreiranja thread-a kreirati novi proces. Jedina mana ovakvom pristupu je ponesto sporiji odziv servera prema klijentu i zauzimanje neto vie osnovnih resursa. Za kreiranje procesa pod UNIX-om koristi se funkcija fork().

fork i exec funkcije


Jedini nain da kreirate novi proces pod UNIX-om je koritenjem fork funkcije. Njezin prototip je vrlo jednostavan i lako za koristiti, samo je osnovno razumijevanje malo sloenije.
#include <unistd.h>

pid_t fork (void);

760/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP


Returns: 0 in child, process ID of child in parent, -1 on error

Ako do sada niste vidjeli ovu funkciju, najtei dio za shvatiti je da se fork funkcija poziva jednom, a da njezin poziv izaziva vrijednosz dva puta. Vraa jednom rezultat pozivajuem procesu (roditelju) i to ID novonastalog procesa, i jednom vraa vrijednost novonastalom procesu (djetetu) i to vrijednost nula. Vraena vrijednost nam ujedno slui da bi znali da li se na program trenutno izvrava kao roditelj ili kao dijete. Ono to je najznaajnije kada koristimo fork funkciju je to da svi deskriptori otvoreni prije samog poziva fork funkcije su dijeljeni izmeu roditelja i dijeteta. Dva tipina naina koritenja fork funkcije: 1. Proces radi vlastitu kopiju tako da jedna kopija moe upravljati osnovnim operacijama, dok druga kopija moe sluit kao pomoni task za obavljanje nekih drugih poslova. 2. Proces eli izvravati drugi program. Jedini nain za kreiranje novog procesa je pozivanjem fork funkcije. Proces prvo poziva fork da bi kreirao vlastitu kopiju, a tada jedna od kopija (najee proces djeteta) poziva exec da bi zamijenio sebe sa novim programom. To je tipino za shell programe.

#include <unistd.h>
int execl (const char *pathname, const char *arg0, ... /* (char *) 0 */ ); int execv (const char *pathname, char *const argv[]); int execle (const char *pathname, const char *arg0, ... /* (char *) 0, char *const envp[] */ ); int execve (const char *pathname, char *const arv[], char *const envp[]); int execlp (const char *filename, const char *arg0, ... /* (char *) 0*/ ); int execvp (const char *filename, const char argv[]);

All six function returns -1 on error, no return on success

761/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Kako tema ovoga seminara nije interprocesna komunikacija, ve TCP/IP API i socket-i, tako da se neemo uputatit u detaljna razmatranja ovih funkcija. Za detalje pogledajte neku od odgovarajuih referenci ili man stranice. Jedina bitna napomena, i to vrlo vana, je to da se esto u ponekim knjigama spominje da upravo ovih est funkcija slue za kreiranje novih procesa ili pokretanje novih programa, to je donekle tono, ali moe biti vrlo krivo shvaeno. Naime, ako ne koristimo fork funkciju, a koristimo jednu od navedenih exec funkcija tada moramo biti svjesni da smo kreirali novi proces unutar adresnog prostora procesa koji pokuava kreirati novi proces. Za kreiranje novog procesa u zasebnom adresnom prostoru, moramo koristiti prvo fork funkciju, a tek tada jednu od navedenih exec funkcija. server-fork.c
#include #include #include #include #include #include #include #include #include <stdio.h> <sys/types.h> <sys/socket.h> <netinet/in.h> <unistd.h> <string.h> <time.h> <signal.h> <sys/wait.h>

/* Funkcija koja hvata signal od childa i poziva waitpid da se ocisti memorija * od child procesa */ void sigchld_handler(int signum) { int status; waitpid(WAIT_ANY, &status, WNOHANG); printf("PARENT: Child exited with signal %d and status %d\n", signum, status); } int main(void) { int sockfd, client; struct sockaddr_in servaddr, cliaddr; char buffer[64] = {0}; char * begin; int address_size; time_t tmp_time; pid_t childpid; /* variable to store the child's pid */ /* kreiranje serverovog socket-a */ sockfd = socket (PF_INET, SOCK_STREAM, 0); if (sockfd == -1) { printf("socket() error!\n"); return 1; } memset(&servaddr, 0, sizeof(servaddr)); /* informacije servera */ servaddr.sin_family = AF_INET; servaddr.sin_port = htons(8000); servaddr.sin_addr.s_addr = INADDR_ANY; /* oznavanje da je ovo server */ if (bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) == -1)

762/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb


{ printf("bind() error!\n"); return 2; } /* oslukivanje konekcije */ if (listen(sockfd, 2) == -1) { printf("listen() error!\n"); return 3; }

Programski alati na Unix raunalima UDP

/* prihvaanje konekcije koja zeli uspostaviti vezu */ address_size = sizeof(cliaddr); while(1) { if ( (client = accept(sockfd, (struct sockaddr *) &cliaddr, &address_size)) == -1) { printf("accept() error!\n"); return 4; } /* Forkanje osnovnog procesa */ if ((childpid = fork())== -1) { perror("fork"); /* display error message */ exit(0); } /* Obrada unutar child procesa */ if (childpid == 0) { /* dohvaanje trenutnog vremena */ tmp_time = time (NULL); begin = ctime(&tmp_time); strcpy(buffer, begin); /* posalji client-u vrijeme spajanja */ send(client, buffer, strlen(buffer), 0); sleep(10); strcpy(buffer, "Zdravo!!!\n"); send(client, buffer, strlen(buffer), 0); /* zatvaranje privremenog komunikacijskog socket-a */ shutdown(client,SHUT_RDWR); _exit(0); } /* Serverski proces */ else { /* Hvatanje signala od Childa i njegovog exit statusa */ signal(SIGCHLD, sigchld_handler); printf("PARENT: Childpid is %d\n", childpid); } } /* zatvaranje serverovog socket-a */ close(sockfd); return 0; }

Primjer - Server ostvaren koritenjem fork funkcije

763/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Procesi vs. Thread-ova


Za neke programe je teko odluiti kada koristiti thread-ove, a kada procese. Evo nekoliko savjeta koji mogu olakati taj izbor: svi thread-ovi u programu moraju biti pokretani unutar istog izvrnog programa. Djetetov proces, sa druge strane, moe pokretati razliite izvrne programe koristei exec funkcije.

"lutajui" thread-ovi mogu nakoditi drugim thread-ovima unutar istog procesa zato to thred-ovi dijele isti virtualni memorijski prostor i druge resurse. Na primjer, jedan thread moe pisati po neautoriziranom dijelu memorije, koja je moda dostupna u drugom thread-u unutar istog procesa. Sa druge strane "lutajui" procesi to ne mogu zato to svaki proces ima vlastitu kopiju memorijskog prostora.

Kopiranje memorije za novi proces je skuplja operacija, od operacije kreiranja threada, zato to se kod kreiranja novog thread-a kopira manji broj potrebnih informacija nego sto je to sluaj kod kreiranja novog procesa.

Thread-ovi bi se trebali koristiti za programe kojima je potrebniji finiji paralelizam, dok bi se procesi trebali koristiti tamo gdje je potrebniji grublji paralelizam.

Dijeljenje podataka izmeu thread-ova je jednostavnije zato to thread-ovi koriste istu memoriju. Jedinu brigu koju moramo paziti kada radimo sa thread-ovima je utrka za resursima. Dijeljenje memorije izmeu procesa je poneto sloenije, ali zato kod njih nema toliko problema oko dijeljenih resursa i puno su rijei bugovi koji se pojavljuju kod konkuretnosti.

764/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Dodatak A: Web server


Napravili smo jedan rudimentalni web server kako bi barem malo doarali kako se pomou TCP/IP API-a izrauju komunikacijski programi. Ovaj web server radi po HTTP 1.1 standardu (opisanom u RFC-u 1216) na portu 8000 (tako da ga moe pokrenuti i obian korisnik, a ne samo root) i isporuuje samo HTML ili obine plain text datoteke. Ostale funkcionalnosti (isporuivanje slika i sl.) nismo stavljali jer nije predmet ovog seminara, a samo bi otealo razumjevanje koda. elite li isprobati kako ovaj server radi, kompajlirajte kod, napravite direktorij htdocs i u njega stavite datoteku index.html. Pokrenite web server, te u web preglednik na tom istom raunalu upiite http://localhost:8000. Naravno, ako serveru pristupate sa nekog drugog raunala, tada umjesto localhost upisujete ime servera ili njegovu IP adresu. Ako je sve prolo kako treba, trebali bi dobiti index.html web stranicu u svom web pregledniku. BiK Web Server:
/*bik-httpd.c*/ #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <string.h> #include <time.h> #include <signal.h> #include <sys/wait.h> #define BUF_SIZE 16384 /* Velicina buffera */ #define SRV_NAME "BiK Web server v0.2" /* Ime servera */ /* Funkcija koja hvala signal od childa i poziva waitpid da se ocisti memorija * od child procesa */ void sigchld_handler(int signum) { int status; waitpid(WAIT_ANY, &status, WNOHANG); printf("Child exited with signal %d and status %d\n", signum, status); } /* postavljanje parametara protokola HTTP 1.1 koji ce se vratiti klijentu u * ovisnosti o statusu */ void parametri_odgovor(int status, char* buff) { char param1[BUF_SIZE/4] = {0}; /* Buffer za parametre na pocetku */ char param2[BUF_SIZE/4] = {0}; /* Buffer za parametre na kraju */ time_t tmp_time; /* ovisno o statusu se vracaju odredjeni parametri klijentu */ switch(status) { case 404: strcpy(param1,"HTTP/1.1 404 Not Found\n"); strcpy(param2,"Transfer-Encoding: chunked\n"); break; case 200: strcpy(param1,"HTTP/1.1 200 OK\n"); strcat(param2, "Last-Modified: Mon, 22 Nov 2004 12:02:11 GMT\n"); strcat(param2, "Accept-Ranges: bytes\n"); strcat(param2, "Content-Length: 4096\n"); break; default: strcpy(param1,"HTTP/1.1 400 Bad Request\n"); strcpy(param2,"Connection: close\n"); } strcpy(buff, param1);

//

765/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

strcat(buff, "Date: "); tmp_time = time (NULL); strcat(buff, ctime(&tmp_time)); strcat(buff, "Server: "); strcat(buff, SRV_NAME); strcat(buff, "\n"); strcat(buff, param2); strcat(buff, "Content-Type: text/html; Charset: UTF-8\n\n"); } /* Obrada HTTP zahtjeva i vracanje odgovora klijentu */ int obrada(int client) { char param[BUF_SIZE/4] = {0}; /* Buffer za parametre HTTP protokola */ char html[BUF_SIZE] = {0}; /* Buffer za isporuku HTML stranice */ char buf1[BUF_SIZE/4] = {0}; /* Privremeni buffer za prihvacanje zahtjeva */ char tmpbuf[BUF_SIZE] = {0}; /* Privremeni buffer za potrebe obrade zahtjeva */ char fpath[128] = {0}; /* relativni path i ime datoteke koja se servira */ char *cmd; /* Parametri zahtjeva koji se ovdje samo ispisuju na strani servera, ali inace sluze HTTP protokolu */ FILE *datoteka; /* Dohvacanje komande od klijenta */ do { recv(client, tmpbuf, sizeof(tmpbuf), 0); if(tmpbuf[0]=='\r') break; strcat(buf1,tmpbuf); } while(tmpbuf[strlen(tmpbuf)-3]!='\n'); /* ako u prvoj liniji nije GET onda se vraca bad request */ if (strncmp(buf1, "GET /", 5)) { memset(param, 0, sizeof(param)); parametri_odgovor(400, param); strcat(html, "12a\n"); strcat(html, "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"); strcat(html, "<HTML><HEAD>\n"); strcat(html, "<TITLE>400 Bad Request</TITLE>\n"); strcat(html, "</HEAD>\n<BODY>\n"); strcat(html, "<H1>Bad Request</H1>\n"); strcat(html, "Your browser sent a request that this server could not understand.\n<P>"); strcat(html, "Invalid URI in request "); strcat(html, buf1); strcat(html, "</P>\n<HR>\n<ADDRESS>"); strcat(html, SRV_NAME); strcat(html, " at localhost Port 8000</ADDRESS>\n"); strcat(html, "</BODY></HTML>\n"); strcat(html, "\n0\n"); send(client, param, sizeof(param), 0); send(client, html, sizeof(html), 0); shutdown(client,SHUT_RDWR); return 0; } /* parsiranje komandi koje su dobivene */ strcpy(tmpbuf, buf1); cmd = strtok(tmpbuf, "\n"); /* Uzimanje imena filea iz trazenog zahtjeva * ako je filename / onda se postavlja na index.html */ sscanf(strstr(cmd, "/"), "%s", &tmpbuf); if (strlen(tmpbuf)==1) strcpy(tmpbuf, "/index.html"); strcpy(fpath, "htdocs"); strcat(fpath, tmpbuf); /* nastavak parsiranja s time da se parametri klijenta u ovoj * verziji ne uzimaju u obzir vec se samo ispisuju na strani * servera na stdout */ while(cmd = strtok(NULL,"\n")) { printf("%i: %s\n", strcmp(cmd,"\r"), cmd); }

766/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

/* Otvaranje trazene datoteke, ili vracanje greske ako trazena * datoteka ne postoji */ if((datoteka=fopen(fpath, "r"))==NULL) { memset(param, 0, sizeof(param)); parametri_odgovor(404, param); strcat(html, "10a\n"); strcat(html, "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"); strcat(html, "<HTML><HEAD>\n"); strcat(html, "<TITLE>404 Not Found</TITLE>\n"); strcat(html, "</HEAD>\n<BODY>\n"); strcat(html, "<H1>Not Found</H1>\n"); strcat(html, "<P>The requested URL "); strcat(html, tmpbuf); strcat(html, " was not found on this server."); strcat(html, "</P>\n<HR>\n<ADDRESS>"); strcat(html, SRV_NAME); strcat(html, " at localhost Port 8000</ADDRESS>\n"); strcat(html, "</BODY></HTML>\n"); strcat(html, "\n0\n"); } else { memset(param, 0, sizeof(param)); parametri_odgovor(200, param); /* Citanje iz trazene datoteke i slanje klijentu */ while(!feof(datoteka)) { memset(tmpbuf, 0, sizeof(buf1)); fgets(tmpbuf, BUF_SIZE, datoteka); strcat(html, tmpbuf); /* zadnju liniju dva puta ispisuje!!! */ } fclose(datoteka); } /* slanje HTTP komandi klijentu */ send(client, param, strlen(param), 0); send(client, html, strlen(html), 0); /* zatvaranje privremenog komunikacijskog socket-a */ shutdown(client,SHUT_RDWR); /* close(client); */ return 0; } int main (void) { int sockfd, client; struct sockaddr_in servaddr, cliaddr; char * begin; int address_size; pid_t childpid; /* variable to store the child's pid */ /* kreiranje serverovog socket-a */ sockfd = socket (PF_INET, SOCK_STREAM, 0); if (sockfd == -1) { printf("socket() error!\n"); return 1; } memset(&servaddr, 0, sizeof(servaddr)); /* informacije servera */ servaddr.sin_family = AF_INET; servaddr.sin_port = htons(8000); servaddr.sin_addr.s_addr = INADDR_ANY; /* oznavanje da je ovo server */ if (bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) == -1) { printf("bind() error!\n");

767/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb


return 2; } /* osluskivanje konekcije */ if (listen(sockfd, 2) == -1) { printf("listen() error!\n"); return 3; }

Programski alati na Unix raunalima UDP

/* prihvaanje konekcije koja eli uspostaviti vezu */ address_size = sizeof(cliaddr); while(1) { if ( (client = accept(sockfd, (struct sockaddr *) &cliaddr, &address_size)) == -1) { printf("accept() error!\n"); return 4; } if ((childpid = fork())== -1) { perror("fork"); /* display error message */ exit(0); } if (childpid == 0) { /* Obrada kompletnog sessiona u posebnoj funkciji */ obrada(client); _exit(0); } else { /* serverski proces */ printf("Childpid is %d\n", childpid); /* Hvatanje signala od Childa i njegovog exit statusa */ signal(SIGCHLD, sigchld_handler); } } /* zatvaranje serverovog socket-a */ close(sockfd); return 0; }

768/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Dodatak B: Klijent server ostvaren pomou UDP-a i koritenjem gethostbyname funkcije


Klijent:
/* uuc.c - UNIX UDP Client Code <stdio.h> <stdlib.h> <string.h> <sys/types.h> <netinet/in.h> <netdb.h> <sys/socket.h> */

#include #include #include #include #include #include #include

int main(int argc, char *argv[]) { struct sockaddr_in their_addr; struct sockaddr_in my_addr; struct hostent *he; int sockfd; int addr_len; char data[32]={0}; int nRet=0; if (argc != 3) { printf("usage: application celsius hostname\n"); return EXIT_FAILURE; } sprintf(data, "%s", argv[1]); he = gethostbyname(argv[2]); if (he == NULL) { printf("Error in gethostbyname\n"); return EXIT_FAILURE; } sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd == -1) { printf("Error Creating Socket\n"); return EXIT_FAILURE; } their_addr.sin_family = AF_INET; their_addr.sin_addr = *((struct in_addr *)he->h_addr); their_addr.sin_port = htons(1092);

if (sendto(sockfd, data, strlen(data), 0, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) { printf("Error in sendto\n"); return EXIT_FAILURE; }

memset(data, 0, sizeof data); addr_len = sizeof(struct sockaddr); if (recvfrom(sockfd, data, sizeof data, 0, (struct sockaddr *)&their_addr, &addr_len) == -1) {

769/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb


printf("Error in recvfrom\n"); return EXIT_FAILURE; }

Programski alati na Unix raunalima UDP

printf("%s Celsius = %s Fahrenheight\n",argv[1],

data);

shutdown(sockfd,2); return EXIT_SUCCESS; }

Server:
/* uss.c - UNIX UDP Server Code <stdio.h> <stdlib.h> <signal.h> <string.h> <sys/types.h> <sys/time.h> <sys/select.h> <sys/socket.h> <netinet/in.h> */

#include #include #include #include #include #include #include #include #include

volatile sig_atomic_t done;

void inthandler(int Sig) { done = 1; } int CheckForData(int sockfd) { struct timeval tv; fd_set read_fd; tv.tv_sec=0; tv.tv_usec=0; FD_ZERO(&read_fd); FD_SET(sockfd, &read_fd); if(select(sockfd+1, &read_fd,NULL, NULL, &tv)== -1) { return 0; } if(FD_ISSET(sockfd, &read_fd)) { return 1; } return 0; }

int main(int argc, char **argv) { int sock; struct sockaddr_in my_addr; struct sockaddr_in their_addr; int address_length; char data[32]= {0}; int celc=0; int farh=0;

if(signal(SIGINT, SIG_IGN) != SIG_IGN) { signal(SIGINT, inthandler); } if(signal(SIGTERM, SIG_IGN) != SIG_IGN) {

770/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb


signal(SIGTERM, inthandler); } my_addr.sin_family = AF_INET; my_addr.sin_addr.s_addr = INADDR_ANY; my_addr.sin_port = htons(1092);

Programski alati na Unix raunalima UDP

if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { printf("Error Creating Socket\n"); return EXIT_FAILURE; }

if (bind(sock, (struct sockaddr *)&my_addr,sizeof(struct sockaddr)) ==-1) { printf("Unexpected error on bind\n"); shutdown(sock,2); return EXIT_FAILURE; } address_length = sizeof(struct sockaddr_in);

while(!done) { if(0 != CheckForData(sock)) { memset(data, 0, sizeof data); if (recvfrom(sock, data, sizeof data, 0, (struct sockaddr *)&their_addr, &address_length) == -1) { printf("Error on recvfrom\n"); }

celc=atoi(data); farh=(celc*2)+32; memset(data, 0, sizeof data); sprintf(data, "%d", farh); if (sendto(sock, data, strlen(data), 0, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) { printf("Error on sendto\n"); } printf("%s\n", data); } } shutdown(sock,2); printf("User requested program to halt.\n"); return EXIT_SUCCESS; }

771/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Dodatak C: Local Namespace Socket


Server:
/* (socket-server.c) Local Namespace Socket Server */ #include #include #include #include #include #include <stdio.h> <stdlib.h> <string.h> <sys/socket.h> <sys/un.h> <unistd.h>

/* ita tekst sa socket-a i ispisuje ga na standardni izlaz. Ponavljaj * dok se socket ne zatvori. Vraa broj razliit od nule ako klijent * poalje "quit" poruku, nulu u suprotnom. */ int server (int client_socket) { while (1) { int length; char* text; /* Prvo, itamo duljinu tekst poruke sa socket-a. ako read vrati nulu, klijent je zatvorio konekciju. */ if (read (client_socket, &length, sizeof (length)) == 0) return 0; /* Alociramo buffer dovoljne veliine. */ text = (char*) malloc (length); /* itamo tekst te ga ispisujemo. */ read (client_socket, text, length); printf (%s\n, text); /* Oslobaamo zauzete resurse. */ free (text); /* Ako klijent poalje "quit" poruku, zavravamo */ if (!strcmp (text, quit)) return 1; } } int main (int argc, char* const argv[]) { const char* const socket_name = argv[1]; int socket_fd; struct sockaddr_un name; int client_sent_quit_message; /* Kreiramo socket. */ socket_fd = socket (PF_LOCAL, SOCK_STREAM, 0); /* Oznaavamo da je ovo server. */ name.sun_family = AF_LOCAL; strcpy (name.sun_path, socket_name); bind (socket_fd, &name, SUN_LEN (&name)); /* Oslukujemo konekcije. */ listen (socket_fd, 5); /* Uzastopno prihvaamo konekcije. Ponavljamo dok klijent ne poalje "quit". */ do { struct sockaddr_un client_name; socklen_t client_name_len; int client_socket_fd; /* Prihvaamo konekciju. */ client_socket_fd = accept (socket_fd, &client_name, &client_name_len); /* Obrada konekcije. */ client_sent_quit_message = server (client_socket_fd); /* Zatvaramo nau stranu konekcije. */ close (client_socket_fd); } while (!client_sent_quit_message); /* Briemo socket file. */

772/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb


close (socket_fd); unlink (socket_name); return 0; }

Programski alati na Unix raunalima UDP

Klijent:
/* (socket-client.c) Local Namespace Socket Client */ #include #include #include #include #include <stdio.h> <string.h> <sys/socket.h> <sys/un.h> <unistd.h>

/* Piemo na socket dan imenom file deskriptora SOCKET_FD. */ void write_text (int socket_fd, const char* text) { /* Zapisujemo broj byte-ova stringa, ukluujui NUL-terminator. */ int length = strlen (text) + 1; write (socket_fd, &length, sizeof (length)); /* Piemo string na socket. */ write (socket_fd, text, length); } int main (int argc, char* const argv[]) { const char* const socket_name = argv[1]; const char* const message = argv[2]; int socket_fd; struct sockaddr_un name; /* Kreiramo socket. */ socket_fd = socket (PF_LOCAL, SOCK_STREAM, 0); /* Spremamo serverovo ime u socket adresnu strukturu. */ name.sun_family = AF_LOCAL; strcpy (name.sun_path, socket_name); /* Spajamo se na socket. */ connect (socket_fd, &name, SUN_LEN (&name)); /* Piemo tekst sa komandne linije na socket. */ write_text (socket_fd, message); close (socket_fd); return 0; }

773/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Dodatak D: Primjer koritenja socketa pod Windows-ima


Za znatieljne itatelje (oni koji ele znati vie) dat je jedan jednostavan primjer komunikacije klijent server pod windows-ima. Server program otvara socket na portu 3490 i eka da se netko spoji na njega. Nakon to se neki klijent spoji na socket ispisuje se string "Hello world!" i zatvara socket. Server:
/* ** server.c -- a stream socket server demo */ #include <winsock2.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define MYPORT 3490 #define BACKLOG 10 // the port users will be connecting to // how many pending connections queue will hold

int main(void) { int sockfd, new_fd; // listen on sock_fd, new connection on new_fd struct sockaddr_in my_addr; // my address information struct sockaddr_in their_addr; // connector's address information int sin_size; int yes=1; WSADATA wsaData; if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) { fprintf(stderr,"WSAStartup failed with error %d\n",WSAGetLastError()); WSACleanup(); return -1; } if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } my_addr.sin_family = AF_INET; my_addr.sin_port = htons(MYPORT); my_addr.sin_addr.s_addr = INADDR_ANY; memset(&(my_addr.sin_zero), '\0', 8); // // // // host byte order short, network byte order automatically fill with my IP zero the rest of the struct

if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) { perror("bind"); exit(1); } if (listen(sockfd, BACKLOG) == -1) { perror("listen"); exit(1); } sin_size = sizeof(struct sockaddr_in); if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) { perror("accept"); } printf("server: got connection from %s\n", inet_ntoa(their_addr.sin_addr)); if (send(new_fd, "Hello, world!\n", 14, 0) == -1) perror("send"); closesocket(new_fd); // parent doesn't need this WSACleanup(); return 0; }

774/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Klijent:
/* client.c -- a stream socket client demo */ #include <winsock2.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define PORT 3490 // the port client will be connecting to #define MAXDATASIZE 100 // max number of bytes we can get at once int main(int argc, char *argv[]) { int sockfd, numbytes; char buf[MAXDATASIZE]; struct hostent *he; struct sockaddr_in their_addr; // connector's address information WSADATA wsaData; if (argc != 2) { fprintf(stderr,"usage: client hostname\n"); exit(1); } if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) { fprintf(stderr,"WSAStartup failed with error %d\n",WSAGetLastError()); WSACleanup(); exit(1); }

if ((he=gethostbyname(argv[1])) == NULL) { // get the host info fprintf(stderr,"gethostbyname"); WSACleanup(); exit(1); } if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { fprintf(stderr,"socket"); WSACleanup(); exit(1); } their_addr.sin_family = AF_INET; // host byte order their_addr.sin_port = htons(PORT); // short, network byte order their_addr.sin_addr = *((struct in_addr *)he->h_addr); memset(&(their_addr.sin_zero), '\0', 8); // zero the rest of the struct if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) { fprintf(stderr,"connect"); WSACleanup(); exit(1); } if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) { fprintf(stderr,"recv"); WSACleanup(); exit(1); } buf[numbytes] = '\0'; printf("Received: %s",buf); closesocket(sockfd); WSACleanup(); return 0; }

775/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Majk Jednakovi

UDP USER DATAGRAM PROTOCOL

776/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

UDP USER DATAGRAM PROTOCOL


U OSI modelu ovaj se protokol nalazi iznad IP protokola. UDP je zamiljen s ciljem omoguavanja prijenosa podataka i razmjene informacija u mreama s preklapanjem paketa (packet switched networks ) kao to je Internet. UDP pretpostavlja da se kao protokol ispod njega koristi IP protokol. UDP omoguava aplikacijskim programima da meusobno razmjenjuju informacije i poruke uz upotrebu minimalnih protokolnih mehanizama. Kako bi se omoguila komunikacija izmeu razliitih aplikacija uvodi se pojam porta. Protokol nije konekcijski orijentiran to znai da dostava paketa nije garantirana. Isto tako se ne provjerava dupliciranje podataka. Isto tako nema provjere redoslijeda pristiglih podataka tako da aplikacije koje to zahtijevaju moraju koristiti TCP protokol ( Transmission Control Protocol ).

4-slojni model prema ARPANET-u


Razvojem ARPANET-a, iji je sponzor i inicijator bilo Ministarstvo obrane SAD-a. (Department of Dafense - DoD), definiran je temeljni vieslojni referentni model komunikacijskih protokola, koji je danas, upravo po svom pokrovitelju, poznat kao DoD model. DoD obuhvaa etiri sloja (razine) protokola, i to: 1. razina:Sloj pristupa mrei (Network Access Layer) 2. razina:Mreni sloj (Internet Layer) 3. razina:Meuraunalni sloj (Host-to-Host Layer) 4. razina:Procesni sloj (Process Layer)

777/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

ISO OSI referentni model i Internet


Aplikacijski sloj (Application Layer) opisuje kako e stvarni posao biti odreen na izvornom i odredinom raunalu.Ovdje se odvajaju upravo one stvari koje korisnika najvie zanimaju: Prenoenje elektronike pote, prenoenje datoteka, pristup World Widw Webu. Ovdje se izvravaju aplikacije pojedinih mrenih usluga. Prezentacijski sloj (Presentation Layer) opisuje sintaksu podataka koji se prenose, te obavlja neke predradnje za sljedei vii sloj.Pretvara datoteke izmeu razliitog formata, brine se o kompresiji i dekompresiji podataka, i slino. Npr. Ovaj sloj opisuje kako e broj sa pominim zarezom biti prenesen na drugo raunalo koje radi na drugaijim matematikim formatima. Sloj sesije-sastanka ili dijaloga (Session Layer) opisuje uspostavljanje dijaloga izmeu ishodinog i odredinog raunala.Zaduen je za uspostavljanje veze (konekcije) s drugim raunalom te prekidanjem uspostavljene konekcije. Transportni sloj (Transport Layer) opisuje kvalitetu i prirodu podataka koji prenose kroz mreu.Npr ovaj sloj opisuje kako e biti izvrena retransmisija neispravno primljenih paketa na odrediste.Brine se o dobrom redoslijedu pristizanja paketa na odredite.U internet mrei to su protokoli TCP i UDP protokoli Mreni sloj (Network Layer) opisuje kako se niz podataka razmjenjuje izmeu bilo koja dva vora mree.Npr. ovaj sloj definira adresiranje i usmjeravanje paketa kroz Internet mreu.U suradnji sa slojem 2.odreuje koji je put najoptimalniji za prijenos podataka do odredita.U Internet mrei to je IP protokol. Sloj podatkovne veze (Data Link Layer) opisuje logiku organizaciju podatkovnih bitova za prijenos kroz medije.Npr. ovaj sloj definira strukturu okvira i paketiranje podataka, adresiranje paketa, metodologiju odreivanja sume, i slino. Fiziki sloj (Physical Layer), opisuje fizikalne karakteristike razliitih komunikacijskih medija kroz elektronike karakteristike signala koji nose podatke. (Npr. Ethernet kablove, utinice, zavretke, naponske razine signala, modeme i modemske standarde, i dr). Mreni sloj (Network Layer) opisuje kako se niz podataka razmjenjuje izmeu bilo koja dva vora mree.Npr. ovaj sloj definira adresiranje i usmjeravanje paketa kroz Internet

778/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

mreu.U suradnji sa slojem 2.odreuje koji je put najoptimalniji za prijenos podataka do odredita.U Internet mrei to je IP protokol. Sloj podatkovne veze (Data Link Layer) opisuje logiku organizaciju podatkovnih bitova za prijenos kroz medije.Npr. ovaj sloj definira strukturu okvira i paketiranje podataka, adresiranje paketa, metodologiju odreivanja sume, i slino. Fiziki sloj (Physical Layer), opisuje fizikalne karakteristike razliitih komunikacijskih medija kroz elektronike karakteristike signala koji nose podatke. (Mpr. Ethernet kablove, utinice, zavretke, naponske razine signala, modeme i modemske standarde, i dr). 1. 2. 3. 4. 5. 6. 7.

779/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Arhitektura Protokola Interneta


Aplikacijski: Talnet-udaljeni terminal FTP-prijenos podataka (File Transfer Protocol) SMTP-elektronika posta(Simple Email Pro) rcp-udaljeno kopiranje datoteka (remonte file copy) rsh-udaljeno procesiranje(remonte shell) rlogin-udaljeno logiranje(remonte login) TFTP-trivijalni prijenos datoteka(Trivial Internet File Protocol) HTTP-web protokol(Hipertext Transfer Protocol) ARP-adresni protokol(Addres RTP-prijenos u realnom vremenu(Real time Transfer Protocol) DHCP-protokol za dinamiku konfiguraciju raunala(Dinamic Host Configuration Pro) NTP-imenik mrenih domena(Domain Name System) SNMP-protokol za upravljanje mrenim ureajima(Simple Network Mangement Pro) Rezolution Protocol) RARP-Rezervni adresni protokol (Reverse Rezolution Pro) RIP-usmjerivaki protokol (Routing Information Pro) BGP-Protokol rubnog mosta (Border Getway Protocol) SLIP/CSLIP-serijski protokoli (Serial line IP/Compresed SLIP) Podatkovni i Fiziki: Ethernet, TokenRing, FDDI, ATM, ISDN.... Mreni: IP-Internet Protokol ICMP-protokol za kontrolu poruka(Internet Control Massage Pro) IGMP-(Internet Grup Mgmnt Pro) Transportni: TCP-Transportni protokol (Transmission Control Pro) UDP-brzi datagramski protokol (User Datagram Protocol)

780/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Telnet
Telnet prua mogunost rada na udaljenog raunalu. Korisnik se s jednog raunala moe logirati (prijaviti) na drugo i ponaati se kao da je tono na tipkovnici drugog raunala. Ova veza moe biti stvorena u lokalnoj mrei ili izmeu bilo koje dvije na svijetu, dokle god korisnik ima doputenje ulogirati se na udaljeno raunalo. Telnet se moe koristiti za rad na raunalima po cijeloj zemlji. Obino se ne koristi osim u LAN / WAN kontekstu, ali postoje raunala koja doputaju telnet pristup kako bi korisnici, primjerice, mogli testirati nove aplikacije ili operativni sustav.

File Transfer Protocol


FTP moe datoteku na jednom raunalu kopirati na drugo. Korisnik se zapravo ne logira kao pravi korisnik na raunalu kojem pristupa (kao kod telneta), nego koristi FTP program koji se pak koristi odreenim setom instrukcija kojim "razgovara" s udaljenim raunalom. Ponovo, korisnik mora imati odreena doputenja na udaljenom raunalu da bi mogao pristupiti datotekama. Jednom kada se uspostavi veza, FTP omoguuje kopiranje jedne ili vie datoteka sa ili na vae raunalo. iroko se koristi na Internetu, kao i na mnogim veim LAN-ovima i WANovima.

Simple Mail Transfer Protocol


Koristi se za prijenos elektronike pote. Transparentan je za korisnika, a "iza scene" se spaja na udaljena raunala i prenosi e-mail poruke slino poput prijenosa FTP-om. Korisnici su rijetko uope svjesni djelovanja SMTP-a, a sistem administratori rijetko imaju problema s njim. Globalno praktiki ne postoji sustav koji ga ne podrava.

Kerberos
Kerberos je sigurnosni protokol. Koristi posebni server za autentifikaciju korisnika kako bi provjeravao lozinke i korisno se enkripcijskim algoritmima. Jedan je od sigurnijih sustava za komunikaciju i dosta est na UNIX-u.

781/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Domain Name System


DNS omoguava mrenim imenima raunala pretvaranje u mrene adrese. Na primjer, PC-u zvanom Luka ne moe se pristupiti sa bilo kojeg drugog raunala na mrei ukoliko ne postoji neka metoda povezivanja raunalovog imena sa mrenom adresom. DNS obavlja ovu konverziju, i zbog njega u na Internet preglednik moemo napisati, npr. www.google.com a ne 204.173.264.318.

Simple Network Management Protocol


SNMP se koristi za statusne poruke i prijavljivanje problema kroz mreu do administratora. Koristi User Datagram Protocol (UDP) kao transportni mehanizam. U SNMPu se koristimo neto drugaijim terminima, pa umjesto klijenta i servera imamo managera i agente (iako su to zapravo iste stvari). Agent prua informacije o ureaju, a manager slui za komunikaciju putem mree sa agentima.

Network File System


Set protokola koji je razvio Sun Microsystems kako bi omoguio transparentno pregledavanje datotenog sustava izmeu vie raunala spojenih na istu mreu. est u velikim, korporativnim okruenjima, posebno onima sa UNIX radnim stanicama.

Remote Procedure Call


Set funkcija koje omoguavaju aplikaciji da komunicira sa drugim raunalom (serverom). Koristi se za programske funkcije, povratne kodove i predefinirane varijable za podrku distribuiranim mreama raunala.

Trivial File Transfer Protocol


Vrlo jednostavan protokol za razmjenu datoteka koji nema nikakvu sigurnosnu zatitu. Koristi UDP za transport podataka. Obavlja istu funkciju kao i FTP, ali kroz drugi transportni protokol.

782/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Transmission Control Protocol


Prua pouzdan transfer podataka. Odgovora na "slaganje" podataka prenesenih iz viih aplikacija u standardne pakete i osigurava da se paketi prenesu kako su i poslani.

User Datagram Protocol


Nije orijentiran na povezivanje toaka (za razliku od TCP-a), jer ne prua retransmisiju datagrama. Dakle, jednom poslani podatak nee se provjeravati da li je stigao kako je trebao. Nije pouzdan, ali ima posebne svrhe. Aplikacije koje koriste UDP imaju ugraene algoritme za provjeru prijenosa, ime se premotavaju nedostatci standardnog UDP-a.

Internet Protocol
Brine se za prijenos paketa podataka koje je sloio TCP ili UDP. Koristi set unikatnih adresa za svaki ureaj na mrei da bi utvrdio smjer i odredite podatka.

Internet Control Message Protocol


Provjerava i generira poruke o statusu ureaja na mrei. Moe se koristiti da bi se drugi umreeni ureaji obavijestili o kvaru na jednom od njih. ICMP i IP obino "rade" zajedno

783/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

CLIENT-SERVER KOMUNIKACIJA
TCP/IP je skup protokola koji se koristi za povezivanje raunala i srodnih ureaja. Iako unutar njega postoji vie protokola promatrat emo samo dva, TCP(Connection oriented) i UDP (Connectionless) te emo priati o StreamSocket-ima odnosno Datagram Socket-ima. to je zapravo socket. Ako za trenutak izuzmemo sockete na lokalnom voru (Unix Sockets) i promatramo samo one Internet sockete, moemo rei da je socket pristupna toka (definirana odreenim parametrima) koja slui za komunikaciju izmeu aplikacija na razliitim raunalima. Karakteristike: Bespojna uluga (Connectionless) UDP protokol osnovna jedinica prijenosa je datagram bespojna veza ne garantira se isporuka pojedinog datagrama, ali se takoer moe desiti isporuka vie identinih kopija istog datagrama ne garantira se ouvanje redoslijeda poslanih datagrama nema kontrole protoka Spojna usluga: pouzdanost: svaki niz poslanih okteta e sigurno stii na odredite, osim u sluaju prekida veze ili neke druge greke na posluitelju o emu e aplikacija poiljatelj biti obavijetena kontrola toka nije mogue zaguenje primatelja od strane poiljatelja ouvani redoslijed isporuke

Strukture potrebne za rad sa socketima


Svaki socket je zapravo deskriptor (socket descriptor) to je cijeli broj. Osnovna struktura koju funkcije oekuju je ---------------------------------------------------------------------------------------------------------struct sockaddr { unsigned short sa_family; // address family, AF_xxx

784/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

char };

sa_data[14]; // 14 bytes of protocol address

--------------------------------------------------------------------------meutim zbog jednostavnijeg koritenje razvijena je struktura: ---------------------------------------------------------------------------------------------------------struct sockaddr_in { short int sin_family; // Address family (AF_xxx) sin_addr; // Internet address unsigned short int sin_port; // Port number struct in_addr unsigned char }; ---------------------------------------------------------------------------------------------------------(Napomena: sin_zero element strukture slui da bi ova struktura imala istu veliinu kao i struktura struct_sockaddr. sockaddr_in je izvedeno zbog lakeg rukovanja.). Pokaziva na ovu strukturu moe se castati u struct sockaddr* i obrnuto. struct in_addr je struktura sa samo jednim lanom (unsigned long s_addr).U sluaju klijenta ovo polje sadri adresu raunala kojem se pristupa i na kojem se oekuje posluitelj, dok kod servera ovo polje sadri adresu suelja na koje se vee server. U sluaju da elimo da server prima pakete na sva suelja koristi se konstanta INADDR_ANY. lanovi strukure sin_port i sin_addr moraju imati vrijednost u network-byte orderu, pa se koriste funkcije: The htonl() function converts the long integer hostlong from host byte order to network byte order. The htons() function converts the short integer hostshort from host byte order to network byte order. The ntohl() function converts the long integer netlong from network byte order to host byte order. The ntohs() function converts the short integer netshort from network byte order to host byte order. sin_zero[8]; // postaviti na 0 sa memset

785/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Adrese koje se koriste i stavljaju unutar ove strukture su 32-bitne adrese. U sluaju da imamo (s naeg gledita) standardni zapis adrese (npr. 161.53.119.118) ona se mora pretvoriti u 32-bitni broj za to moemo iskoristiti funkciju : int inet_aton(const char *cp, struct in_addr *inp); int inet_pton(int af, const char *cp, struct in_addr *inp); (novija) (obrnuta funkcija je inet_ntoa ) U sluaju da ove gornje funkcija ne postoje moe se koristiti funkcija inet_addr() koja u sluaju greke vraa -1 to moe biti krivo interpretirano kao (255.255.255.255)

786/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Redoslijed pozivanja
Slika prikazuje redoslijed pozivanja za TCP protokol. Funkcija accept blokira program sve do trenutka dok se neka od konekcija ne pojavi Server: create endpoint (socket()) bind address (bind()) specify queue (listen()) wait for conection (accept()) transfer data (read() write()) Client: create endpoint (socket()) connect to server (connect()) transfer data (read() write())

UDP protokol: Server: create endpoint (socket()) bind address (bind()) transfer data (sendto() recvfrom()) Client: create endpoint (socket()) bind address (bind()) connect to server (connect()) transfer data (sendto() recvfrom())

787/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Funkcije za rad sa socketima (socket API)


#include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol);

domain predstavlja grupu komunikacijskih usluga koju elimo koristiti. (AF_INET (IPv4) mreni protokol, AF_INET6, AF_UNIX (cjevovod)..[1].) type oznaava koji tip socketa elimo koristiti (npr. SOCK_STREAM , SOCK_DGRAM) protocol oznaava protokol koji e se koristiti za komunikaciju. Ako za vrijednost stavimo 0, protokol e biti odabran od strane jezgre ili funkcije (to i najbolja opcija) U sluaju greke funkcija e vratiti -1, a inae vrijednost deskriptora. Jednom kad je socket kreiran da bi ga se moglo koristiti treba ga vezati (asocirati) na port na lokalnom stroju. (Ovo radi samo server)

#include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, struct sockaddr *my_addr, int addrlen);

sockfd je socket file deskriptor kojeg je vratio poziv funkcije socket(). my_addr je pokaziva na strukturu struct sockaddr koja sadri informacije o adresi i pristupnom broju (port). Portovi ispod 1024 su rezervirani. Mogue je koristiti bilo koji broj porta do 65535 ako ve nije zauzet od strane nekog drugog programa. U sluaju da se za port ostavi 0 vee se na bilo koji broj koji jezgra ili funkcija odredi. addrlen je veliina prethodne strukrure i moe se postaviti na sizeof(struct sockaddr). Dok posluitelj mora vezati socket na neki port i oslukivati, klijent se kod spojne usluge treba konektirati na neki odreeni stroj na neki odreeni port i to pomou funkcije connect

788/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

#include <sys/types.h> #include <sys/socket.h> int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);

sockfd je socket file deskriptor kojeg je vratio poziv funkcije socket(), serv_addr je struktura struct sockaddr koja sadri odredinu IP adresu i odredini port, a addrlen je veliina prethodne strukrure i moe se postaviti na sizeof(struct sockaddr). Primijetimo da klijent ne zove bind() jer ga ne zanima lokalni port, ve samo onaj odredini. Da bi se klijent spojio na odredini stroj, tamo mora netko i ekati i oslukivati, za to slui funkcija listen

int listen(int sockfd, int backlog);

sockfd je socket file deskriptor kojeg je vratio poziv funkcije socket(),a backlog je broj dozvoljenih konekcija u redu ekanja. Konekcije se prihvaaju funkcijom accept().

#include <sys/socket.h> int accept(int sockfd, void *addr, int *addrlen);

sockfd je socket deskriptor od socketa na kojem se oslukuje. addr je obino pokaziva na strukturu struct sockaddr_in i predstavlja informaciju o klijentu(adresa, port). addrlen je cijeli broj kojeg bi trebalo postaviti na sizeof(struct sockaddr_in) prije poziva. accept nee staviti vie od toliko byteova u addr. Ako stavi manje promijenit e vrijednost varijable addrlen. Za slanje i primanje podataka sluit e funkcije send i recv kod spojne usluge, odnosno sendto i recvfrom kod bespojne.

int send(int sockfd, const void *msg, int len, int flags);

int recv(int sockfd, void *buf, int len, unsigned int flags);

789/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

int sendto(int sockfd, const void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen);

int recvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen);

elimo li zatvoriti socket to moemo uiniti pomou close, ili ako elimo malo vie kontrole (npr. zatvoriti ga samo u jednom smjeru) shutdown

close(sockfd); int shutdown(int sockfd, int how);

how (0-Daljnji primitak je onemoguen, 1-Daljnje slanje je onemogueno, 2-oboje (kao close) Od korisnih funkcija spomenimo jo dvije koje slue za dobivanje informacije o klijentu, odnosno o vlastitom stroju.

#include <sys/socket.h> int getpeername(int sockfd, struct sockaddr *addr, int *addrlen);

#include <unistd.h> int gethostname(char *hostname, size_t size);

790/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Koritenje DNS-a
Openito je lake pamtiti simboliko ime stroja, a ne njegovu IP adresu. Za pretvaranje simbolikog imena u IP adresu i obrnuto mogu nam posluiti sljedee funkcije. Funkcija gethostbyname vraa

#include <netdb.h> struct hostent *gethostbyname(const char *name); struct hostent { char *h_name; char **h_aliases; int int }; #define h_addr h_addr_list[0] h_addrtype; h_length;

char **h_addr_list;

Struktura struct hostent ima sljedea polja: h_name slubeno ime stroja h_aliases -- NULL-terminated polje alternativnih imena. h_addrtype tip adrese,obino AF_INET. h_length Duljina adrese u byte-ovima. h_addr_list 0 zavreno-terminated polje mrenih adresa stroja. Adresu su u Network Byte Order. h_addr prva adresa u h_addr_list. gethostbyname() vraa pokaziva na popunjenu struct hostent, ili NULL u sluaju greke. Kod greke se stavlja u h_errno (herror().funkcija). Neke bitnije su: HOST_NOT_FOUND (zadano raunalo ne postoji), NO_ADDRESS/NO_DATA (raunalo postoji, ali nema IP adresu), NO_RECOVERY (neoporavljiva greka), TRY_AGAIN (greka privremenog karaktera). Primjer: getip.c

791/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Oslukivanje na vie socketa


U sluaju da elimo unutar jednog programa oslukivati na vie portova oito ne moe (ne smijemo) ostati blokirani na accept. Iako je socket file deskriptor, pa moemo podesiti (fnctl) da nije blokirajui, bolja varijanta je upotrijebiti select (vidi prethodne vjebe) Sockets in Java Primjer: chatserver.c

Client import java.io.*; impoert java.net.*; public class SocketTest { public static void main(String argv[]) { try { Socket t = new Socket("java.sun.com", 13); DataInputStream is = new DataInputStream(t.getInputStream()); boolean more = true; while (mnore) { String str = is.readLine(); if (str == null) more = false; else System.out.println(str); } } } catch(IOException e) { System.out.println("Error" + e); } } }

792/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Server import java.io.*; import java.net.*; public class EchoServer { public static void main(String argv[]) { try { ServerSocket s = new ServerSocket(8189); Socket incoming = s.accept(); //za adresu od klijenta vidi incoming.getInetAddress DataInputStream in = new DataInputStream(incoming.getInputStream()); PrintStream out = new PrintStream(incoming.getOutputStream()); out.println("Hello. Enter BYE to exit"); boolean done = false; while ( ! done) { String str = in.readLine(); if (str == null) done = true; else { out.println("Echo: " + str); if (str.trim().equals("BYE")) done = true; } incoming.close(); } catch(Exception e) { System.out.println(e); } } }

793/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Sockets in Perl
Perl has a C-like interface to sockets. It also has a higher level one using the IO::Socket module. This example is a client to fetch documents from a Web server. #!/usr/bin/perl -w use IO::Socket; unless (@ARGV > 1) { die "usage: $0 host document ..." } $host = shift(@ARGV); $EOL = "\015\012"; $BLANK = $EOL x 2; foreach $document ( @ARGV ) { $remote = IO::Socket::INET->new( Proto => "tcp", PeerAddr => $host, PeerPort => "http(80)", ); unless ($remote) { die "cannot connect to http daemon on $host" } $remote->autoflush(1); print $remote "GET $document HTTP/1.0" . $BLANK; while ( <$remote> ) { print } close $remote; } Here is a server that will execute some commands and return a result #!/usr/bin/perl -w use IO::Socket; use Net::hostent; $PORT = 9000; # for OO version of gethostbyaddr # pick something not in use => 'tcp',

$server = IO::Socket::INET->new( Proto LocalPort => $PORT,

794/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima UDP

Listen Reuse

=> SOMAXCONN, => 1);

die "can't setup server" unless $server; print "[Server $0 accepting clients]\n"; while ($client = $server->accept()) { $client->autoflush(1); print $client "Welcome to $0; type help for command list.\n"; $hostinfo = gethostbyaddr($client->peeraddr); printf "[Connect from %s]\n", $hostinfo->name || $client->peerhost; print $client "Command? "; while (<$client>) { next unless /\S/; if (/quit|exit/i) { last; } elsif (/date|time/i) { printf $client "%s\n", scalar localtime; } elsif (/who/i ) { print $client `who 2>&1`; } elsif (/cookie/i ) { print $client `/usr/games/fortune 2>&1`; } elsif (/motd/i ) { print $client `cat /etc/motd 2>&1`; } else { print $client "Commands: quit date who cookie motd\n"; } } continue { print $client "Command? "; } close $client; } # blank line

795/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

Boris Ivanievi

FILE, DIRECTORY AND INODE PROGRAMMING

796/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

UVOD
Cilj seminarskog rada je upoznati itatelja sa osnovama file sistema i programiranja unutar unix okruenja. Seminar je podijeljen na vie zasebnih cjelina: unix file sistem gdje se obrauje struktura unix file sistema, odnosno objanjava glavna filozofija. Spomenut e se osnovne stvari koje ine unix file sistem onim to je kao to su to je inode, koje vrste fileova postoje, koje razine ovlasti povezane sa manipulacijom fileova poznajemo, to je root direktorij i koji ostali direktoriji su bitni za funkcioniranje sistema. Komande na unixoidnom operativnom sustavu gdje se navode najvanije komande s kojima manipuliramo fileovima odnosno direktorijima i ovlastima nad njima. Spomenut e se komande man, cp, mv, rm, more, lpr, cd, pwd, ls, mkdir, rmdir i chmod. Programiranje u unixu gdje se navodi zato elimo programirati u C-u, koje emo alate koristiti (gcc kompajler, make alat) i koje standardne biblioteke su nam potrebne u radu. Za kraj dajem dva mala programa. Primjeri programa gdje dajem dva primjera programa pisanih u C programskom jeziku

797/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

UNIX FILE SISTEM

Filozofija unix file sistema


Filozofija unix file sistema je vrlo jednostavna sve unutar njega se tretira kao file. Koliko god ta pretpostavka izgleda jednostavno ona u sebi sadri mo koju je teko na prvi pogled uoiti. Ovim poglavljem u pokuati pokazati da je to tako. Isto tako treba naglasiti da takva pretpostavka na prvi pogled za sobom vue niz prednosti jednostavnost upotrebe, jednoznano definirani pristup svim resursima operativnog sustava.

Struktura unix file sistema


Slika 2.1.1. pokazuje karakteristinu strukturu unix file sistema. On se sastoji od 4 glavna dijela: Boot blok Super blok Lista inodeova Data blokovi Slika 2.1.1. Boot blok sadri osnovni program odnosno pokaziva na njega koji pokree podizanje operativnog sustava. Super blok nosi informacije o file sistemu, njegovu veliinu, listu slobodnih inodeova, odnosno listu slobodnih data blokova (zapravo broj slobodnih blokova i pokaziva na slijedei slobodni blok) te flag za oznaavanje modifikacije super bloka. Tu je jo i polje inodeova i data blokova, gdje su inodeovi i fileovi fiziki zapisani.

to je inode
U unix file sistemu inode igra veliku ulogu. Sadrava sve relevantne informacije o nekom file-u. Zapravo bi ga mogli shvatiti kao posrednika izmeu operativnog sustava i fizikih podataka. Slika 2.3.1. pokazuje okvirnu strukturu inode-a:

798/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

Tip i modovi User i group ID Broj hard linkova Veliina u bajtovima Direktni pointer 1 Direktni pointer 2 ........... Jednostruki indirektni pointer Dvostruki indirektni pointer Trostruki indirektni pointer Slika 2.3.1. Svaki inode sadri podatke o tipu i modovima filea odnosno govori koji je file tipa (direktorij, obini file, pipeline...) i koje su mogunosti pristupa fileu na razini vlasnika (ownera), grupe i ostalih korisnika. To se odnosi na postavke itanja, pisanja odnosno izvravanja fajla ukoliko se on moe pokrenuti. Dalje sadri podatke o vlasniku i grupi za kontrolu pristupa (ti podaci se sastoje od brojeva userID i groupID koji su postavljeni u password fileu). Osim toga tu je i zapisana veliina filea i broj hard linkova na file. I jasno, na kraju tu su pointeri na stvarne fizike blokove memorije i indirektni pointeri. Indirektni pointeri slue za mogunost adresiranja veih fajlova.

799/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

Data blokovi

Legenda Direktni pointer Jednostruki indirektni pointer Dvostruki indirektni pointer Trostruki indirektni pointer Slika 2.3.2.

800/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

Slika 2.3.2. pokazuje kako je pomou indirektnih pointera mogue ostvariti adresiranje veih fajlova. Vano je naglasiti da razliite implementacije unixoidne arhitekture file sistema razliito tretiraju strukturu inodea na nain da poveanjem ili smanjenjem broja direktnih i indirektnih pointera doputaju mogunost spremanja i manipuliranja veim ili manjim fajlovima. To doputa veliku fleksibilnost jer ogranienje veliine najveeg mogueg filea nije dobro. Valja napomenuti da ipak vei broj pointera moe stvoriti dodatni memorijski overhead.

Vrste fileova na unixoidnom file sistemu


Postoje razliite vrste fajlova radi omoguavanja razliitih funkcionalnosti rada sa fileom. Tako postoje regularni fileovi (oznaka -) koji predstavljaju obine fileove koji su ili tekstualni ili binarni, a razlikujemo ih po tome to tekstualni nemaju oznaku x koja slui za pokretanje fileova. Direktoriji (oznaka d) omoguuje pristup direktoriju. Dalje postoje device fileovi, izmeu kojih razlikujemo block (oznaka b) i character (oznaka c) device fileove. Block device fileovi slue za komunikaciju izmeu file sistema i hardwarea raunala te omoguuju slanje podataka izmeu kernela i hardwarea u zadanim veim memorijskim blokovima. Uobiajeno se koriste za referenciranje svih storage devicea (hard diskovi, magnetni mediji, CD i DVD ureaji...). Character device fileovi omoguavaju komunikaciju znak po znak. Koriste se za referenciranje printera i raznih mrenih ureaja. U nekim implementacijama unixoida se svi device fileovi tretiraju kao block device fileovi. Za jednostavno komuniciranje koristimo named pipes (oznaka p). Koristi se za jednosmjernu komunikaciju tipa FIFO (first in first out) obino u situacijama gdje izlaz jedne operacije aljemo kao ulaz drugoj (pipelining). Za dvosmjernu komunikaciju koristimo domain sockets (oznaka s). Oni omoguavaju slanje podataka u oba smjera izmeu lokalnih odnosno mrenih procesa. Symbolic odnosno soft link (oznaka l) oznaava file koji sadri pathname nekog drugog filea. Moe se koristiti za pristup fileovima nekog drugog file sistema. U prethodnom poglavlju o inodovima spomenut je broj hard linkova. Hard i soft linkovi su po prirodi drugaiji. Kad stvorimo neki novi hard link zapravo smo mapirali neko novo ime filea na ve postojei inode kojem je porastao broj hard linkova za jedan. Prilikom pokuaja brisanja filea file e se ukloniti tek ako broj hard linkova padne na nulu. Prilikom stvaranja symbolic linka stvaramo novi inode koji pokazuje na iste fizike podatke kao i

801/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

originalni file. Kod brisanja je bitno uvidjeti da ako izbriemo originalni file soft link vie nije validan. Jo jedna vana razlika je u tome to da bismo stvorili hard link originalni file mora postojati dok kod symbolic linka to nije preduvjet.

Oznaka vrste filea i modovi pristupa


Svaki administrator unixoidnog file systema u sklopu instalacije podeava sistem razina pristupa. On se temelji na stvaranju pojedinaca i grupa korisnika sa pripadajuim razinama ovlasti. Svakom pojedincu pridruuje se userID i groupID broj koji se koristi za zatitu neovlatenog pristupa fileovima. GroupID slui da bi se odreenoj skupini korisnika mogle dati unaprijed uniformirane privilegije jednom komandom. Root user odnosno administrator raunala uvijek ima 0 kao broj userIDa i groupIDa. Njemu su na raspolaganju sve ovlasti nad svim fileovima. Navedeni podaci o korisnicima nalaze se u /etc/passwd fileu. Slika 2.5.1. prikazuje kako izgleda karakteristina ls -l komanda. -rw-r--r-- 1 boris list.c -rw-r--r-- 2 boris stack.c drwxr-xr-x 2 boris blah Slika 2.5.1. Za ovo poglavlje je bitna prva kolona. Ona sadrava informacije o vrsti filea (prvi znak) i kontrole pristupa fileu. Dalje idu oznake pristupa fileu ownera (vlasnika), grupe, i ostalih korisnika. Svakom su pridodjeljena tri znaka. Prvi od tri znaka oznaava mogunost itanja (read) filea (oznaka r). Drugi oznaava mogunost modifikacije (write, oznaka w), dok zadnji znak daje pravo izvravanja (execution) filea. Kod sva tri znaka oznaka znai zabranu odreene operacije pojedinom korisniku. 512 Jun 24 00:19 512 Jun 13 16:19 725 Jul 10 15:07

802/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

Root i ostali direktoriji


Slika 2.6.1. prikazuje hijerarhiju direktorija na unixoidnom file sistemu.

bin

boot

dev

etc

home

lib

sbin

tmp

usr

Slika 2.6.1. Bitno je naglasiti da je ishodite svih direktorija root direktorij (oznaka /). Stoga kad smo na nekoj poziciji unutar stabla direktorija moemo promatrati svoju poziciju s obzirom na direktorij u kojem jesmo (relative path) i poziciju s obzirom na root direktorij (absolute path). Pojedini vani direktoriji su: bin - komande dostupne svima u obliku izvrnih datoteka boot fileovi potrebni bootanju sistema dev kolekcija drivera za hardverske komponente etc sistemski konfiguracijski fileovi i baze podataka home tu se nalaze home direktoriji korisnika lib kolekcija dinamikih biblioteka sbin specijalne komande tmp skladite privremenih fileova usr sve povezano sa pojedinim korisnikom (dodatne komande, man stranice, headeri, standardne biblioteke)

803/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

KOMANDE NA UNIXOIDNOM OPERATIVNOM SUSTAVU


man Najvanija komanda. Slui za prikazivanje manual stranica odreene komande. Izgled: man command Primjer: man cp daje manual stranice o komandi cp

Komande za manipulaciju fileovima


cp Koristi se za kopiranje filea. Izgled: cp source destination Primjer: cp bla.c blah kopira file bla.c u direktorij blah mv Koristi se za pomicanje filea. Izgled: mv source destination Primjer: mv bla.c .. pomie file bla.c u parent direktorij rm Koristi se za brisanje filea. Izgled: rm file Primjer: rm bla.c brie file bla.c more Koristi se za ispis filea u konzolnoj liniji. Izgled: more file Primjer: more blabla.h ispisuje sadraj filea blabla.h

804/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

lpr Koristi se za ispis filea na printer. Izgled: lpr file Primjer: lpr blablah.h printa sadraj filea blabla.h

Komande za manipulaciju direktorijima


Bitno je naglasiti da: / oznaava root direktorij . oznaava trenutni direktorij .. oznaava parent direktorij cd Koristi se za mijenjanje pozicije. Izgled: cd direktorij Primjer: cd hmda ulazak u direktorij hmda pwd Koristi se za ispis trenutne pozicije. Izgled: pwd ls Koristi se za ispis svih fileova unutar trenutnog direktorija. Izgled1: ls daje samo listu imena fileova Izgled2: ls -l - daje vie informacija o fileovima mkdir Koristi se za stvaranje novog direktorija. Izgled: mkdir direktorij Primjer: mkdir mhm stvara novi direktorij mhm

805/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

rmdir Koristi se za brisanje direktorija. Izgled: rmdir direktorij Primjer: rmdir mhm brie direktorij mhm

Komande za manipulaciju ovlastima nad fileom/direktorijem


chmod Koristi se za promijene postavki pristupa fileu. Moe se koristiti na vie naina meutim ovdje u opisati po meni moda najjednostavniju primjenu koja koristi oktalno kodiranje. Slika 3.3.1. pokazuje primjer kodiranja. d r 1 w x 1 7 1 _ 0 _ 0 1 Slika 3.3.1. Izgled: chmod oktalni kod file Primjer: chmod 644 bumbar.h file bumbar.h dobiva ovlasti rw-r--r-x 1 _ 0 w x 1 3 1

806/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

PROGRAMIRANJE U UNIXU

Unix i C
Teko je uope zamisliti kakvo bi bilo stanje u raunalnom svijetu da je unix bio bez C programskog jezika i da je C bio bez unixa. Zapravo popularnost unixa i ostalih slinih operativnih sustava se isto tako duguje C-u. Mase programera napravilo je svoje prve korake pisajui C instrukcije na unixu. Dananji C, kojeg jo i nazivaju moderni asembler, zbog efikasnosti, jednostavnosti i povezanosti sa unixom je vjerojatno najvie upotrebljavan programski jezik na unix platformi (uz veliku upotrebu i nekih ostalih programskih jezika perl, awk...)

Manipuliranje unix fileovima i direktorijima u programskom jeziku C


Sve to nam treba da bismo poeli stvarati programe je par vanih stvari. Koristit emo definicije struktura podataka i funkcija iz unistd.h filea koji sadri standardne unix definicije, zatim dirent.h koji nam treba zbog manipulacije direktorijima, te sys/stat.h koji dozvoljava pregled svih stvari vezanih uz file. U naem radu koristit emo gcc C kompajler koji se namee kao standardan, kvalitetan i besplatan.

Make alat
I jo na kraju, prije programiranja, bitno je spomenuti jo jednu stvar koja nam iz dana u dan moe olakati posao. Svaki put dok programiramo mogli bismo ponavljati jednu te istu stvar kompajlirati .c fileove, dobiti .o fileove sa objektnim kodom, zatim linkati i dobiti izvrne fileove. Meutim taj posao bi postao ogroman kada bismo morali istu stvar raditi za mnogo fileova. Zato nam je ponuen alat koji omoguuje unaprijed zadano ponaanje svih

807/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

fileova od source koda do izvrnog filea. Primjer: Uzmimo situaciju da smo napravili program koji se sastoji od ovih datoteka: stack.h, stack.c, list.h, list.c i main.c. S time da su u main.c includani stack.h i list.h, u stack.c je includan stack.h, a u list.c je includan list.h. Na temelju toga bismo napravili slijedei jednostavni Makefile. program : main.o stack.o list.o gcc -o program main.o stack.o list.o main.o : main.c stack.h list.h gcc -c main.c stack.o : stack.c stack.h gcc -c stack.c list.o : list.c list.h gcc -c list.c clean : rm program main.o stack.o list.o Da bi ovo proradilo file moramo nazvati Makefile. U make fileu navodimo koji file elimo stvoriti i o emu je taj file ovisan. Nakon toga upisujemo komandu kojom ga stvaramo. Linija clean govori da clean nije ovisan niti o jednom fileu i izvrit e se brisanje fileova komandom rm. Make file pokreemo naredbom make koja e nai u trenutnom direktoriju Makefile i pokrenuti ga. Naredba make clean e pokrenuti ienje fileova odnosno pokretanje naredbe rm. Pomou Makea je mogue raditi svata, mogue je koristiti varijable unutar njega, uglavnom s njim radimo proces kompajliranja i linkanja automatiziranim od poetka do kraja.

808/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

Tipovi podataka
Za potrebe programiranja dostupni su nam tipovi podataka u unix okruenju. Oni su definirani u <sys/types.h> datoteci. To su: blkcnt_t blksize_t dev_t gid_t ino_t mode_t off_t uid_t /* int - koristi se za oznaavanje broja blokova */ /* int - koristi se za oznaavanje veliine blokova */ /* int - koristi se za oznaavanje device IDa */ /* int - koristi se za oznaavanje group IDa */ /* unsigned int - koristi se za oznaavanje broja inodea /* int - koristi se za oznaavanje modova filea*/ /* int - koristi se za oznaavanje veliine filea */ /* int - koristi se za oznaavanje user IDa */

nlink_t /* int - koristi se za oznaavanje broja linkova */

Izabrane funkcije
Od mnogih funkcija koje su definirane u raznim unix header fileovima izdvojit emo one koji omoguuju operacije sa fileovima i direktorijima. int symlink(const char *path1, const char *path2); /* <unistd.h> */ int unlink(const char *path); int mkdir(const char *path, mode_t mode); int rmdir(const char *path); int chmod(const char *path, mode_t mode); mode_t umask(mode_t cmask); /* <unistd.h> */ /* <sys/stat.h> */ /* <unistd.h> */ /* <sys/stat.h> */ /* <sys/stat.h> */

Funkcija symlink kreira symbolic link imena path2 koji pokazuje na file imena path1. Funkcijom unlink uklanjamo link. Ukoliko smo uklonili symbolic link brie se file, a ukoliko smo uklonili hard link onda se umanjuje link counter inodea. Funkcije mkdir odnosno rmdir su identine istoimenim unix komandama. Funkcijom chmod mijenjamo modove odreenog filea. Sve navedene funkcije vraaju 0 ukoliko je operacija prola u redu, a u sluaju greke vraaju -1. I na kraju funkcija umask postavlja u trenutnom procesu postavke umaska (u umasku su upisani default modovi koji e se koristiti pri kreiranju fileova). Vraa dosadanju vrijednost umaska.
809/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

Stat struktura
Za dobivanje temeljnih informacija o fileu koristimo stat strukturu. Da bi nam ona bila dostupna unutar koda trebamo ukljuiti (includati) <sys/types.h> i <sys/stat.h> header fileove. struct stat { dev_t st_dev; ino_t st_ino; mode_t st_mode; nlink_t st_nlink; uid_t st_uid; gid_t st_gid; dev_t st_rdev; off_t st_size; time_t st_atime; time_t st_mtime; time_t st_ctime; blkcnt_t st_blocks; mode_t st_attr; }; Za upisivanje stat strukture u varijablu koristimo ove funkcije: int fstat(int filedescriptor, struct stat *buff); int stat(const char *pathname, struct stat *buff); int lstat(const char *pathname, struct stat *buff); Funkcijom fstat dobivamo stat strukturu koritenjem file deskriptora, dok kod funkcija stat i lstat koristimo path filea. Funkcija lstat u sluaju dohvaanja simbolic linka referencira sami link dok stat referencira file na koji link pokazuje. U povratnoj vrijednosti tipa int dobivamo greku u vidu vrijednosti -1 ukoliko funkcija nije mogla biti izvrena na normalan nain. /* ID devicea koji sadri file */ /* broj inodea filea */ /* modovi pristupa fileu */ /* broj linkova na file */ /* userID vlasnika filea */ /* groupID vlasnika filea */ /* device ID ukoliko je file tipa devica */ /* veliina filea u bajtovima */ /* vrijeme zadnjeg pristupa */ /* vrijeme zadnje modifikacije */ /* vrijeme kreiranja filea */ /* broj blokova koje je file alocirao */ /* atributi filea */

blksize_t st_blksize; /* veliina blokova */

810/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

Dalje tu postoje i razliite konstante (defineovi) za tipove i modove fileova te predprocesorske direktive (macroi) koje ispituju tip filea. One svojim razumljivim imenima daju mogunost da ih lagano koristimo. Predprocesorske direktive su iskoritene u primjeru programa u poglavlju 5.

Dirent struktura
Za dohvaanje direktorija odnosno fileova unutar njega trebaju nam dvije stvari. Jedna od njih je tip podataka DIR koji predstavlja direktorij, dok je druga struct dirent (skraenica od directory entry) koji predstavlja jedan unos unutar direktorija. Za koritenje je potrebno ukljuiti (includati) <dirent.h>. struct dirent { ino_t d_ino; }; Da bismo mogli manipulirati s direktorijima dane su nam na raspolaganje ove funkcije. DIR *opendir(const char *pathname); int closedir(DIR *directory); void rewinddir(DIR *directory); long telldir(DIR *directory); void seekdir(DIR *directory, long location); struct dirent *readdir(DIR *directory); Funkcijom opendir otvaramo direktorij odnosno upisujemo ga u DIR* tip varijable, a kao parametar aljemo path eljenog direktorija. Funkcija closedir zatvara direktorij. Vraa 1 u sluaju greke. Funkcija rewinddir nam koristi da vratimo pointer na poetak direktorija. Moe nam koristiti za viestruko iteriranje po direktoriju. Funkcijom telldir dobivamo trenutnu lokaciju unutar direktoija koju onda moemo iskoristiti u funkciji seekdir koja nas postavlja na tu lokaciju. Te dvije funkcije moemo koristiti za pamenje pozicije unutar direktorija i kasnije postavljanje na nju putem argumenta tipa long. I na kraju tu je funkcija readdir koja iz direktorija uitava unos u struct dirent pomou kojega moemo dobiti ime filea.
811/1275

/* broj inodea */ /* ime filea */

char d_name[];

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

PRIMJERI PROGRAMA
Napisat emo program koji e raditi kao ls komanda bez opcionalnih parametara. #include <unistd.h> #include <dirent.h> int main(int argc, char **argv) { DIR *dir; struct dirent *dentry; dir = opendir("."); while(dentry = readdir(dir)) printf("%s ", dentry->d_name); closedir(dir); return 0; } U ovom primjeru emo unijeti ime filea i dobiti koje je vrste. #include <unistd.h> #include <sys/stat.h> int main(int argc, char **argv) { int i; struct stat info; for(i = 1; i < argc; ++i) { printf("%s: ", argv[i]); if(!stat(argv[i], info)) { if(S_ISLNK(info)) printf("symbolic link/n"); else if(S_ISREG(info)) printf("obicni file/n");

812/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

else if(S_ISDIR(info)) printf("direktorij/n"); else if(S_ISCHR(info)) printf("character device/n"); else if(S_ISBLK(info)) printf("blok device/n"); else if(S_ISFIFO(info)) printf("named pipe/n"); else if(S_ISSOCK(info)) printf("socket/n"); } else { printf("nema tog filea"); } return 0; }

813/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima File, directory and inode programming

LITERATURA, NAPOMENE I NEPOZNATI POJMOVI

Literatura
Kao literaturu sam koristio man i web stranice, bez kojih bi ovaj seminar bio teko izvediv, pa se zahvaljujem svim ljudima koji su uloili svoj trud da bi izgradili stranice i pomogli ljudima u otkrivanju znanja. Koristio sam i dvije knjige: Mitchel, M., Oldham, J., Samuel, A., Advanced Linux programming, New Riders Publishing, 2001. Stevens, R.W., Advanced programming in the Unix environment, Addison Wesley, 1996.

Napomene
Zbog nemogunosti odluke i definiranih stajalita struke oko upotrebe raunalnog nazivlja, a isto tako i zbog vlastitog odnosa prema toj temi izabrao sam rjeenja koja mi zvue kao dobra, znajui da e biti onih koji se s njima ne slau. Kod nekih poglavlja se moe primijetiti da nisu opisana do kraja, netko e rei da neto fali, meutim kao to sam i sam uio o ovoj temi pisajui ovaj seminar odluio sam da ono to mi se uinilo kao nepotrebnim, odnosno moda suvie tekim i zbunjujuim, izbacim odnosno pojednostavnim. Poglavlje 3 navodi osnovne oblike komandi. Za njihovo potpuno svladavanje nuno je dalje prouiti man stranice. Ovo sam vie zamislio kao popis najbitnijih komandi.

Nepoznati pojmovi
I jo na kraju bitno je rei da se u seminaru koristi pojam unixoidni file sistem odnosno unixoidni operativni sustav. Tijekom povijesti unix su razvijale mnoge kompanije pa su tako nastale i razne varijante unixa. Zatim se pojavio linux sa svojim mnogim distribucijama, a i bsd operativni sistemi. Teko bi bilo izbrojati koliko operativnih sistema je nastalo na temelju unixa odnosno na temelju nekih njegovih glavnih postavaka koji su isto tako ovdje opisani. Zato se pojam unixoida odnosi na jednu veliku porodicu operativnih sustava koja dijeli istu filozofiju, dok se njene implementacije i posebnosti razlikuju.

814/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima INETD i TCPD

Jurica Boikovi

INETD I TCPD

815/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima INETD i TCPD

INETD

to je INETD
INETD se odnosi na ''Internet Super-Server'' zato jer rukovodi vezama za nekoliko daemon-a (daemoni su programi koji osiguravaju mrene usluge). INETD slui kao upravljajui server za druge daemone. INETD se pokree pri podizanju sustava, a za njegovo pokretanje je zasluan rc(skripte kod podizanja i gaenja). rc je komandna skripta koja kontrolira pokretanje razliitih servicea(usluga) i operacija , a rc.shutdown je komandna skripta koja gasi razliite operacije i usluge. Nakon pokretanja,INETD ''slua'',trai veze na odreenim internet socketima (ulazima). Kada pronae vezu na jednom od ''ulaza'', odluuje kojem je deamonu veza namijenjena i pokree program da obradi zahtjev. Nakon to je program zavrio, nastavlja ''sluati'' ulaze.

Pokretanje usluga (service-a) pomou konfiguracijske datoteke /etc/inetd.conf


Vani inetd file-ovi su konfiguracijska datoteka (/etc/inetd.conf), izvrna datoteka (/usr/sbin/inetd), startup skripta (/etc/init.d/inet ili /etc/rc.d/init.d/inetd ili /etc/init.d/inetd) i file /etc/services (Razliiti brojevi port-ova se koriste za odreene tipove service-a ili usluga.Tako su npr., brojevi od 1 do 1023 rezervirani za standardne usluge i svakom je dano praktino tekstualno ime.) Veina service-a(usluga) moe se pokrenuti na tri naina: prvo kao zasebni daemon (zahtijeva mnogo resursa), zatim pod inetd-om ili kao inetd service koji je tzv. ''TCP wrapper'' izmijenjen.

816/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima INETD i TCPD

Pokretanje samostalnog service-a


Za pokretanje slue sljedee linije: /usr/sbin/in.ftpd D ( /usr/sbin/in.wuftpd s)

Pokretanje inetd service-a


Sljedee linije koda slue za editiranje /etc/inetd.conf datoteke: ftp ( ftp stream tcp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd nowait root /usr/sbin/in.wuftpd in.wuftpd)

Nakon toga restartamo inetd s: /etc/init.d/inet restart ( killall -1 inetd) ( /etc/rc.d/init.d/inet restart) I testiramo s: ps awk | grep ftp ftp localhost Polja u /etc/inetd.conf file-u imaju sljedea znaenja: ftp ime service-a(pogledamo li u etc/services file,vidimo da je to TCP port 21) stream tcp tip socketa I protocol nowait ne eka da process zavri prije nego pone sluati druge veze root inicijalni korisniki ID pod kojim se service izvrava in.ftpd komandna linija

817/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima INETD i TCPD

Pokretanje inetd TCP wrapper service-a


S ovom metodom omoguujemo inetd-u da pokrene service pod komandom tcpd wrappera(omotaa). Metoda je skoro ista kao i prijanje ali uz male promjene u /etc/inetd.conf: ftp ( ftp stream tcp stream tcp nowait root nowait root /usr/sbin/tcpd /usr/sbin/in.ftpd /usr/sbin/tcpd /usr/sbin/in.wuftpd)

Nakon toga restartamo inetd.Ove alternativne linije omoguuju tcpd-u pokretanje in.ftpd (ili in.wuftpd) za inetd. Tcpd provodi razliite testove dolazeih veza da bi provjerio da li im moe vjerovati. Provjerava host (domaina) veze,tj. kojem korisniku veza pripada i usporeuje tog korisnika s podacima u file-u /etc/hosts.allow i /etc/hosts.deny. Znai,tcpd na osnovu ovih provjera moe omoguiti ali i zabraniti pristup.

Naredbe
Omoguene su sljedee opcije: inetd -d inetd l inetd w inetd W inetd c maximum inetd c rate inetd R rate inetd s maximum inetd a inetd p pokree debugger pokree logiranje uspjenih veza(connections) ukljuuje TCP Wrapping za vanjske service(usluge) ukljuuje TCP Wrapping za unutarnje service koje su ugraene u inetd odreuje maximalan broj istovremenih pokretanja za svaki service odreuje maximalan broj koliko puta service moe biti pokrenut iz jedne IP adrese u jednoj minuti odreuje maximalan broj koliko puta service moe biti pokrenut u jednoj minuti,defaultna vrijednost je 256 odreuje maximalan broj istovremenih pokretanja svake usluge(service-a) iz jedne IP adrese odreuje jednu specifinu IP adresu koje se dri odreuje alternativnu datoteku u koju sprema ID procesa

818/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima INETD i TCPD

Konfiguracijska datoteka
Nakon izvravanja, inetd ita svoje konfiguracijske informacije iz konfiguracijske datoteke,koja je obino /etc/inetd.conf . Mora postojati unos za svako polje konfiguracijske datoteke, a svaki unos u polju odvojen razmakom (tab ili space). Komentari se oznaavaju s # na poetku linije.Konfiguracijska datoteka izgleda ovako: [addr:] service-name socket-type protocol [,sndbuf=size] [,rcvbuf=size] wait / nowait [:max] user [:group] server-program server program arguments Postoje dvije vrste usluga(service-a) koje inetd moe pokrenuti: standardna i TCPMUX. Standardni service ima poznati port koji mu je dodijeljen, moe biti service koji izvrava slubene Internet standarde ili je BSD Ns-specific service. TCPMUX services predstavljaju nestandardne usluge koje nemaju dodijeljen port. Oni se pozivaju iz inetd-a kad se program spoji na ''tcpmux'' poznati port i specificira ime service-a. Ova karakteristika je korisna za dodavanje lokalno razvijenih servera. Ime usluge(service-name) je ime valjane usluge u datoteci /etc/services ili specifikacija Unix domain socket-a. Za ''unutarnje'' usluge,ime service-a treba biti slubeno ime te usluge (to je prvi unos u /etc/services). Za TCPMUX usluge vrijednost polja service-name sastoji se od stringa ''tcpmux'', slasha i jedinstvenog imena usluge. Rezervirana imena su imena usluga izlistana u /etc/services i rije ''help''. Socket-type mora biti ''stream'', ''dgram'', ''raw'', ''rdm'' ili ''seqpaclet''. TCPMUX usluge moraju koristiti ''stream''. Protocol mora biti valjani protocol zadan u etc/protocols(npr. ''tcp'' i ''udp''). Wait/nowait odreuje da li server pozvan od inetd-a treba preuzeti socket povezan s pristupnom tokom usluge(service access point) i da li inetd treba priekati da server zavri s radom prije nego pone sluati nove zahtjeve. User treba sadravati korisniko ime(user name) korisnika. Server-program treba sadravati ime staze(pathname) programa koji e se izvriti od strane inetd-a kada je zahtjev pronaen na ulazu(socket-u).

819/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima INETD i TCPD

XINETD
Umjesto uobiajene kombinacije inetd-a i tcpd-a, RedHat se prebacio na xinetd. XINETD kombinira svojstva, karakteristike tcpd-a i inetd-a u jedan paket, koji se sastoji od konfiguracijske datoteke(/etc/xinetd.conf), izvrne datoteke(/usr/sbin/xinetd) i konfiguracijskih datoteka za svaku uslugu(service) u direktoriju /etc/xinetd.d/. XINETD nije samo zamjena za inetd. Svatko ga moe koristiti da bi startao servere koji ne zahtijevaju privilegirane portove zato je xinetd ne zahtijeva da usluge(services) u njegovoj konf. datoteci budu izlistani u /etc/services. XINETD nije kompatibilan s inetd-om zbog razliitih konfiguracijskih datoteka,njegova konf. datoteka je drukijeg formata od inetd-ove i razumiju razliite signale. Ali proces signal u akciju(signal-to-action) moe biti izmijenjen i dodan je program koji konvertira inetd.conf u xinetd.conf. Platforme na kojima radi su Solaris 2.6, Linux,BSDi i IRIX 5.3 I 6.2. Primjer konfiguracijske datoteke xinetd-a: defaults { instances log_type = 25 = FILE /var/log/servicelog

log_on_success = HOST PID log_on_failure = HOST RECORD # only_from # only_from disabled } service imap { socket_type = stream protocol wait user only_from = tcp = no = root = 198.72.5.0 localhost = 128.138.193.0 128.138.204.0 = localhost

= tftp

820/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima INETD i TCPD

banner server }

= /usr/local/etc/deny_banner = /usr/local/sbin/imapd

service telnet { flags wait user redirect bind } service telnet { flags wait user server bind } #service chargen #{ # type # id = INTERNAL = chargen-stream = tcp = root = REUSE = no = root = /usr/sbin/in.telnetd = 192.168.1.11 socket_type = stream = REUSE = no = root = 192.168.1.1 23 = 127.0.0.1 socket_type = stream

log_on_failure += USERID

log_on_failure += USERID

# socket_type = stream # protocol # user

821/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima INETD i TCPD

# wait #}

= no

service xadmin { type protocol user wait port } = INTERNAL = tcp = root = no = 7000 socket_type = stream

Prednosti xinetd-a u odnosu na inetd:


1) Moe dati kontrolni pristup svih service-a koji se temelje na: a) adresi udaljenog korisnika(remote host) b) vremenu pristupa c) imenu korisnika d) imenu domene udaljenog korisnika 2) Prua napredniju rekonfiguraciju: a) eliminira servere za usluge(service) koji vie nisu u konfiguracijskoj datoteci b) eliminira servere koji vie ne odgovaraju kriterijima pristupa kontrolama 3) Spreava zabranu pristupa(denial-of-access) tako da: a) limitira broj servera za svaku uslugu(service) b) postavlja gornju granicu na broj operacija koji se dijele c) limitira veliinu log datoteke koju kreira d) limitira broj veza koje jedan korisnik moe uputiti e) limitira broj nadolazeih veza f) ne nastavlja usluge(service) ako koliina prelazi odreeni limit

822/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima INETD i TCPD

4) Poveava mogunosti loggiranja: a) za svaki pokrenuti server moe ispisati: I ) vrijeme pokretanja servera II ) adresu udaljenog korisnika(remote host) III ) tko je korisnik IV ) koliko dugo server radi b) za neke usluge(service), ako doe do neuspjenog kontrolnog pristupa, moe zapisati informacije o pokuaju pristupa(npr. moe zapisati korisniko ime i komandu za rsh service) 5) Nema ogranienja broja argumenata servera 6) Korisnik moe povezati odreene usluge sa odreenim IP-ima na svojem raunalu

823/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima INETD i TCPD

TCPD

to je tcpd
TCPD predstavlja kontrolni pristup za internet service(usluge).TCPD (TCP Wrapper) radi kao omota programa pokrenutih od inetd-a, a poziva se iz /etc/inetd.conf linijom: telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

TCPD program moe biti podeen da nadgleda nadolazee zahtjeve za telnet, finger, ftp, exec, rsh, rlogin, tftp, talk i comsat. Program podrava oba 4.3BSD-style socket-a(ulaza) i System V.4-style TLI. Funkcionalnost e biti ograniena kada protocol pod TLI nije internet protocol.

Kako radi tcpd


Kad stigne zahtjev, inetd daemon pokree tcpd program umjesto eljenog servera. TCPD uita zahtjev i provede nekoliko dodatnih provjera. Provjerava kojem korisniku veza pripada i usporeuje tog korisnika s podacima u file-u /etc/hosts.allow i /etc/hosts.deny. Ako je sve u redu tcpd pokrene odgovarajui server program. S ovom metodom omoguujemo inetd-u da pokrene service pod komandom tcpd wrappera(omotaa).

Login
Veze koje tcpd nadgleda se prijavljuju preko syslog-a. Svaki zapis sadri zapis o vremenu,ime korisnika i zatraenu uslugu(service). Ta informacija moe biti korisna da bi se detektirale neeljene aktivnosti, posebno kad se informacije o loginu vie korisnika spoje. Ako elite saznati gdje idu informacije o vaem loginu pretraite syslog konfiguracijsku datoteku, koja je obino /etc/syslog.conf.

824/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima INETD i TCPD

Kontrolni pristup(Access control)


Opcionalno, tcpd podrava jednostavan oblik kontrolnog pristupa temeljenog na usporeivanju uzoraka. Software kontrolnog pristupa se zakai na izvravanje shell naredbi kad se pokrene uzorak. Software kontrolnog pristupa pretrauje dvije datoteke. Pretraga prestaje kod prvog pogodka: Pristup e biti odobren ako se korisnik nalazi u datoteci /etc/hosts.allow Pristup nee biti odobren ako se korisnik nalazi u datoteci /etc/hosts.deny Svaka datoteka kontrolnog pristupa sastoji se od praznih linija ili vie linija teksta. Potraga se prekida kada se traena linija pronae: nova linija se ignorira ako je prije nje znak /. prazne linije ili linije koje poinju sa znakom # se ignoriraju. Ovo omoguava ubacivanje komentara tako da je datoteka itljivija. -sve druge linije trebaju zadovoljavati sljedei oblik(stvari izmeu znakova [] su opcionalne): 1 HOSTS_ACCESS (5) HOSTS_ACCESS (5)

daemon_list : client_list [ :shell_command ] daemon_list lista jednog ili vie imena daemon procesa client_list lista jednog ili vie imena korisnika, adresa korisnika koji e se usporeivati Lista elemenata treba biti razdvojena razmacima ili zarezima. Jezik kontrolnog pristupa implementira sljedee uzorke: string koji poinje znakom .. Korisniko ime odgovara ako zadnji dio njegovog imena odgovara odreenom uzorku. Npr. uzorak .tue.nl odgovara korisnikom imenu wzv.win.tue.nl. string koji zavrava sa znakom . Korisnika adresa odgovara ako njeno prvo numeriko polje odgovara danom stringu. Npr. uzorak 131.155 odgovara adresi skoro svakog korisnika mree Eindhoven univerziteta (131.155.x.x) string koji poinje znakom @ se tretira kao ime NIS(nekada YP) netgrupe. Korisniko ime odgovara ako je korisnik lan odreene netgrupe.

825/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima INETD i TCPD

Provjera korisnikog imena(host name)


Izvorna shema nekih protokola(rlogin,rsh) poiva na korisnikim imenima. Neke izvedbe vjeruju korisnikim imenima koja dobiju od bilo kojeg servera, dok su neke izvedbe mnogo opreznije. Tcpd provjerava korisniko klient ime vraeno od adrese. Ako se otkrije neko nepodudaranje, tcpd zakljuuje da ima posla s korisnikom koji koristi tue korisniko ime.

Provjera korisnike adrese(host adress)


Opcionalno, tcpd onesposobljava opcije ulaza na izvor za svaku vezu s kojom radi. To znai da tcpd nee dopustiti ulaz na raunalo ako otkrije da neko koristi neispravnu, nevaeu IP adresu. Ovo e sprijeiti sve napade korisnika koji koriste adrese tuih mrea. UDP service nema koristi od ove zatite. Ova opcija mora biti ukljuena za vrijeme kompajliranja.

Greke(bugs)
Neki UDP I RPC daemon-i zadre se jo neko vrijeme nakon to su zavrili svoj posao, u sluaju da doe novi zahtjev. U inetd konfiguracijskoj datoteci ove usluge(services) ekaju,tj. registrirane su u stanju ekanja. Samo zahtjev koji je pokrenuo neki daemon e biti zapisan. Program ne radi s RPC service-ima preko TCP-a. Ove usluge su registrirane kao rpc / tcp u inetd konfiguracijskoj datoteci. Jedina jednostavnija usluga koja je zahvaena ovim limitiranjem je rexd, koju koristi komanda on 1. Ali to nije veliki gubitak zato jer je na veini sustava rexd manje siguran od wildcard-a u /etc/hosts.equiv.

826/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

Goran Vlahovi

INTERNET SERVICES

827/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

UVOD
Poetkom 1970-tih, ameriko ministarstvo obrane (United States Department of Defence), zapoelo je istraivaki program zvan DARPA (Defence Advanced Research Projects Administration). Jedan od ciljeva DARPA-e je bio da naprave Internet, skup meusobno povezanih mrea, koji bi omoguio interakciju istraivakih laboratorija preko cijele drave. Mrea je prozvana ARPAnet, a protokol koji bi kontrolirao vezu IP (Internet Protocol). Dani originalnog ARPAnet-a su davno proli, a mrea je toliko narasla i sada je to jedna nevjerojatna stvar zvana Internet, koja omoguuje meusobno spajanje raunala preko cijelog svijeta. Internet Protocol omoguuje slanje paketa izmeu bilo koja dva raunala spojena na Internet. IP je samo primitivan servis i potrebni su drugi nivoi protokola koji koriste IP u pozadini. Dva takva protokola su TCP/IP (Transmition Control Protocol) i UDP/IP User Datagram Protocol). TCP/IP spaja dva programa na slian nain kao i serijska linija izmeu dva raunala, dok UDP/IP omoguava jednostavan nain slanja poruka izmeu dva raunala. Najinteresantniji korisniki programi koriste TCP za kreiranje veze, tako da je TCP/IP esto definiran kao interkonekcijski protokol Interneta.

828/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

DNS (Domain Name System) Imena i adrese


Da bi mogli koristiti raunala i druge resurse na mrei, potrebno ih je locirati. Hostnames (imena raunala na mrei) koriste hijerarhijsku metodologiju imenovanja, tako da je svaki hostname jedinstven. Na primjer ftp.uu.net je ime nekog host-a na Internetu. Sam IP koristi internet adrese, tj. jedinstvene oznake za raunala na mrei koja se sastoje od 4 broja (svaki izmeu 0 i 255), odvojenih tokom. Npr. za navedeni primjer adresa je 192.48.96.9 Sustav imenovanja zove se Domain Naming System (DNS) i odvaja odgovornost za jedinstvena imena na domenu administriranja. Administrator svake domene je odgovoran je za dodjeljivanje i odravanje jedinstvenosti imena unutar pojedine domene. Nekada nije bilo tako. Kroz 1970-te, ARPAnet je bila mala prijateljska zajednica sa nekoliko stotina host-ova. Jedna datoteka, HOSTS.TXT, je sadravala sve potrebne informacije koje bi trebali znati o glavnim raunalima na mrei: bila su mapirana sva imena i adrese za svakog host-a spojenog na ARPAnet. HOSTS.TXT je odravao Network Information Center (tzv. NIC) Stanford Research Instituta (SRI) na jednom jedinom host-u: SRI-NIC. ARPAnet administratori bi poslali email s promjenama u NIC i povremeno ftp-om skinuli najnoviju verziju HOSTS.TXT. Kako je ARPAnet rastao, takav princip je postao nedjelotvoran. Kako se prikljuivao pojedini novi host, ne samo da je HOSTS.TXT dobio novu liniju, nego je i novi host skidao podatke s istog servera. Kada je ARPAnet preao na TCP/IP protokol, poelo je eksplozivno irenje mree i moralo se neto promijeniti. Tada je doao Paul Mockapetris lan Information Science Instituta, s University of Southern California, i dizajnirao arhitekturu novog sistema. 1984. je objavio RFC 882 i 883, koji opisuju Domain Name System. Kasnije su ih zamijenili RFC 1034 i 1035 te oni predstavljaju trenutnu specifikaciju DNS-a. Poslije je dodano i mnogo RFC-ova koji opisuju potencijalne sigurnosne DNS probleme, implementacijske probleme, mehanizme za dinamiko auriranje name servera, osiguravanje podataka o domenama i drugo. DNS je distribuirana baza podataka. To omoguava lokalnu kontrolu dijelova baze, a ipak su podaci svakog segmenta dostupni preko cijele mree putem klijent-server sheme. Robusnost i brzina su postignute preko replikacije i cache-iranja.

829/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

Programi zvani name serveri predstavljaju polovicu DNS-ovog klijent-server mehanizma. Name serveri sadre informaciju o nekom segmentu baze i omoguuju je klijentima zvanim resolveri. Resolveri su obino samo library rutine koje kreiraju upite i alju ih preko mree name serveru.

Struktura DNS-a
Struktura DNS baze podataka slina je strukturi UNIX datotenog sustava. Cijela baza se moe prikazati kao naopako stablo, s korijenskim vorom na vrhu. Za razliku od UNIX-a gdje je root direktorij oznaen sa slash ("/"), kod DNS-a se oznaava kao jedna toka (".").

Svaki vor tj. domena u DSN svijetu, je ujedno i korijen za novo podstablo ili poddomenu. Svaka poddomena predstavlja posebnu zonu i crtaju se kao djeca njihovih roditeljskih domena. Svaka domena ima jedinstveno ime, kao i direktorij u UNIX datotenom sistemu. Razlika je jedino da su domene odvojene tokom, dok su putanje datoteka odvojene kosom crtom. Svaka domena moe biti administrirana od razliite organizacije, a svaka organizacija moe tu domenu podijeliti u odreen broj poddomena i predati odgovornost nad njima drugim

830/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

organizacijama. Npr. InterNIC, koji dri domenu .edu, moe dodijeliti pravo domene berkeley.edu fakultetu U.C. Berkeley.

Kako je sve to poelo


U adresi koju mi upisujemo, najdesnija oznaka iza toke je tzv. top-level domena (TLD). 1980. kreirano ih je sedam. To su: .com, .edu, .gov, .int, .mil, .net i .org. U slijedeih 12 godina, odrane su mnoge rasprave i predloeno je da se uvedu novih sedam, to je uinjeno 2001. i 2002. To su: .biz, .info, .name, .pro, .aero, .coop i .museum. Ovdje ih moemo sve vidjeti: TLD Uvedena Sponzorirana Svrha Sponzor/ Operator Societe Internationale de .aero 2001 da Air-transport industry Telecommunications Aeronautiques SC, (SITA) .biz 2001 ne Businesses Unrestricted (but .com 1995 ne intended for commercial registrants) .coop 2001 da Cooperatives United States .edu 1995 da educational institutions .gov .info 1995 2001 da ne United States government Unrestricted use US General Services Administration Afilias Limited EDUCAUSE DotCooperation, LLC VeriSign, Inc. NeuLevel

831/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

Organizations .int 1998 ne established by international treaties between governments .mil 1995 da United States military US DoD Network Information Center Museum Domain Management Association, (MuseDoma) Global Name Registry, LTD Internet Assigned Numbers Authority

.museum 2001

da

Museums For registration by individuals Unrestricted (but

.name

2001

ne

.net

1995

ne

intended for network providers, etc.) Unrestricted (but

VeriSign, Inc.

Public Interest Registry. Until 31 December 2002, .org was operated by VeriSign Global Registry Services.

.org

1995

ne

intended for organizations that do not fit elsewhere) Accountants, lawyers,

.pro

2002

ne

physicians, and other professionals

RegistryPro, LTD

Osim tih "generikih", postoje i posebni TLD-i sa 2 slova, tzv. "country-code", koji su uspostavljeni za preko 240 drava i teritorija.

Zone
Poddomene koje zahtijevaju posebnu administraciju nazivamo zone. Jednom kada je odreen autoritet za neku zonu, osoba koja je za nju zaduena mora osigurati vie name servera za tu zonu. Kad god je instaliran novi sistem (host) unutar zone, DNS administrator

832/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

za zonu alocira ime i IP adresu za novi sistem, te ih unese u bazu podataka name servera. Osoba zaduena za zonu takoer mora osigurati i najmanje jedan redundantni sekundarni name server da bi name servis radio ak i u sluaju ispad jednog sustava. Podaci o novom sistemu se upisuju na disk primarnog name servera, a onda se ti podaci preko zone transfer-a prenose na sekundarne servere, koji redovito (uglavnom svaka 3 sata) auriraju svoju bazu podataka s primarnim serverom. to ako name server radi ako ne sadri informaciju koja se trai upitom? Mora kontaktirati drugi server (to je ta distribuirana priroda DNS-a). Svaki server ipak ne zna kako kontaktirati svaki drugi server. Zato, svaki name server mora znati kako kontaktirati root name server. Taj proces se zove resolution. Root name serveri su glavni DNS serveri za cijeli svijet i svaki ima imena i adrese autoriteta za sve top-level domene (http://www.rootservers.org). Trenutno su u funkciji slijedeih trinaest root name servera:

833/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

Root Name Serveri (A-M) na dan 29.01.2004. Host a.rootservers.net b.rootservers.net c.rootservers.net d.rootservers.net e.rootservers.net f.rootservers.net g.rootservers.net h.rootservers.net i.rootservers.net j.rootservers.net k.rootservers.net l.rootservers.net m.rootservers.net VeriSign Organizacija IP adresa 198.41.0.4 Mjesto Herndon, VA, USA Marina del Rey, CA, USA Herndon, VA, USA College Park, MD, USA

Information Sciences Institute

192.228.79.201

Cogent Communications

192.33.4.12

University of Maryland

128.8.10.90

NASA Ames Research Center

192.203.230.10 Mt View, CA, USA

Internet Systems Consortium, Inc U.S. DoD Network Information Center U.S. Army Research Lab

192.5.5.241

Palo Alto, CA, USA

192.112.36.4

Vienna, VA, USA

128.63.2.53

Aberdeen, MD, USA

Autonomica/NORDUnet

192.36.148.17 Stockholm, Sweden

VeriSign Reseaux IP Europeens - Network Coordination Centre Internet Corp. for Assigned Names and Numbers WIDE Project

192.58.128.30 Herndon, VA, USA London, United Kingdom Marina del Rey, CA, USA Tokyo, Japan

193.0.14.129

198.32.64.12

202.12.27.33

834/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

BIND
Najee koritena implementacija DNS-a, protokola, resolvera i name servera zove se BIND tj. Berkley Internet Name Domain. Sastoji se od: Domain Name System server Domain Name System resolver library razni alati za provjeru i ispravan rad DNS servera BIND se obino sa UNIX-om distribuira u paketu s standardnim TCP/IP mrenim software-om. Zadnja verzija se moe pronai na stranicama Internet Software Consortiuma kao Open Source: http://www.isc.org/products/BIND i http://www.bind9.net/

835/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

TELNET Na mrei smo


Sada kad znamo kako je organizirano adresiranje raunala, pokuajmo se spojiti. Sa servisima rlogin i telnet, moemo se spojiti na udaljeno raunalo preko mree. Mi emo se orijentirati na telnet. Naredba telnet je osnovni alat za prijavljivanje na daljinu pod UNIX-om i Linuxom. telnet vam omoguuje terminalski session na udaljenom raunalu. Premda neki sustavi pruaju mogunost prijave kao gosta, takva je mogunost rijetka zbog sigurnosnih pitanja. Zamisao koja stoji iza ta dva okruja za goste jest osigurati sigurnost raunala i zatiti sustav od zlonamjernih ili nepaljivih nepoznatih korisnika. Ograniena ljuska (shell) korisniku onemoguuje izvravanje odreenih naredbi, a sustav izbornika prua izbor samo s prethodno odreenog skupa izbornika, u potpunosti sprijeivi pristup ljuski. telnet korisnicima omoguuje i prijavljivanje na svoja vlastita raunala iz udaljenih lokacija, unoenjem svog korisnikog imena i lozinke. Na taj nain korisnici mogu provjeravati email, ureivati datoteke i pokretati programe na svojim uobiajenim raunalima kao da su na njih prijavljeni lokalno. To ete, meutim, trebati uiniti u okruju koje se temelji na terminalima jer za to ne moete koristiti sustav X Windowsa. telnet prua samo emulaciju terminala za uobiajene terminale poput DEC VT-100, koji ne podravaju grafika okruja poput X Windowsa.

836/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

Telnet naredbe
Ako u naem shell prompt-u napiemo telnet bez ikakvih argumenata, pokreemo telnet servis u naredbenom modu (command mode). Vidje emo poseban telnet prompt (telnet>). Tada moemo unijeti bilo koju telnet naredbu. Ovo su neke od najeih naredbi, a za kompletnu listu treba pogledati manual na naem sistemu.

Naredba open close quit set send display status ?

Opis Spaja se na navedeno raunalo (host) Prekida vezu i vraa se u naredbeni mod Prekida vezu (ako postoji) i zatvara telnet Mijenja vrijednost danog argumenta alje naredbu na remote (udaljeno raunalo) Pokazuje trenutno postavljenu konfiguraciju telnet-a Pokazuje trenutno stanje veze Daje pomo

Kako to sve radi? Naredba open prima 2 argumenta, host i port (opcionalno). Ime host-a je naravno obavezno i odreuje s kojim raunalom se spajamo. To raunalo mora biti dostupno i podravati telnet servis. Ako ne navedemo broj porta, tada se spaja na default-ni port 23. Kada doe do spajanja, remote raunalo preuzima vezu i pokree login proceduru. Nakon logiranja, sve je isto kao da smo se direktno logirali na to, sada udaljeno raunalo. Ukoliko nam je samo potrebno prenijeti datoteke izmeu udaljenih raunala, koristit emo FTP.

837/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

FTP PROTOKOL ZA PRIJENOS DATOTEKA Kratak pregled FTP-a


FTP (File Transfer Protokol) tj. protokol za prijenos datoteka je razvijen kao protokol koji e omoguiti prijenos datoteka izmeu dva raunala na mrei. Ta dva raunala (host-a) ne moraju biti slina; niti hardware niti operativni sustavi ne moraju biti slini. Windows FTP klijent moe bez problema (osim ako sigurnost ne dozvoljava) razmijeniti datoteke s UNIX raunalom na kojem se vrti FTP servis. Takoer, udaljeno raunalo moe putem FTP naredbi inicirati i razmjenu datoteka izmeu dva udaljena raunala (tzv. third-party transfer). Izmeu ostalih karakteristika, FTP podrava razmjenu i ASCII i EBCDIC (Extended Binary Coded Decimal Interchange Code) setova znakova. Takoer jako je vana podrka ASCII i binarnih prijenosa, koji se mogu obaviti bez ikakvog modificiranja (uuencode i uudecode) datoteka, kao to npr. zahtijeva UUCP protokol.

FTP veza
FTP radi na aplikacijskom nivou OSI (Open System Interconnection) modela i ovisi o TCP-u da bi mogao sigurno prenijeti podatke izmeu host-ova na mrei. Kao takav, ne brine se oko komunikacijske arhitekture i oslanja se na TCP za uspostavljanje veze i prijenos podataka bez pogreke. Kad god FTP klijent pokrene FTP session sa serverskim procesom (kontroliranim in.ftpd daemon-om), TCP uspostavlja dvije konekcije za oba entiteta. Te konekcije su poznate kao control connection i data connection. Konekcije se po default-u otvaraju preko portova 20 (data port) i 21 (control port), ali FTP server (ftpd daemon) moe biti namjeten da slua i na nekim drugim portovima. To se ak moe i vrlo lako napraviti tako da editiramo /etc/service file i zamijenimo broj porta koji je naveden za FTP servis.

838/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

Primjer FTP session-a


U najjednostavnijem obliku, ftp se moe iskoristiti za pokretanje session-a za prijenos datoteka s ciljnim host-om: # ftp targethost targethost moe biti IP adresa ili samo ime udaljenog host-a. Kako je FTP siguran servis, zatraiti e korisniko ime i lozinku. Ako nismo autentificirani, ftp e odustati od uspostavljanja session-a za prijenos datoteka. Postoji ipak i mogunost logiranja, tzv. anonymous FTP pristup, kada se za korisniko ime moe upotrijebiti rije anonymous, a email adresa kao lozinka. To je postalo jako popularno razvojem Interneta kada se na raznim serverima moglo pronai nebrojeno mnogo programa tipa freeware i shareware. U ovom primjeru imamo korisnika koji je logiran na host jade i koji koristi ftp za spajanje na host tenor. # ftp tenor Connected to tenor. 220 tenor FTP server (UNIX(r) System V Release 4.0) ready. Name (tenor:root): sam 331 Password required for sam. Password: 230 User sam logged in. ftp> Prompt ftp>, pokazuje spremnost za primanje naredbi. Da bi vidjeli koje su nam naredbe omoguene, otipkamo help:

839/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

ftp> help Dobijemo otprilike ovakav popis:

! $

debug dir

Mget Mkdir

pwd quit quote recv

status struct system sunique tenex

account disconnect Mls append form ascii bell get glob Mode

Modtime reget Mput Newer Nmap Nlist Ntrans Open Prompt Proxy

rstatus trace rhelp type

binary hash bye case cd cdup help idle image lcd

rename user reset umask

restart verbose rmdir runique send ?

chmod ls close cr delete macdef mdelete mdir

Sendport site Put size

Ipak, nisu sve naredbe implementirane na svim UNIX varijantama ftp-a. Evo jednog primjera gdje je naredba implementirana na lokalnom raunalu, a ne i na udaljenom: ftp> rstatus 502 STAT command not implemented. ftp> Ako naredba nije implementirana lokalno, odgovor e biti drukiji: ftp> rstatus ?Invalid command ftp>

840/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

Evo jo jednog primjera koritenja ftp-a. Pokreemo ftp, logiramo se, provjeravamo radni direktorij, mijenjamo radni direktorij, postavljamo tip prijenosa na ASCII, aljemo lokalnu datoteku na remote, prekidamo vezu: # ftp canopus Connected to canopus.austin.century.com. 220 canopus.austin.century.com FTP server (Version 4.1 Sat Nov 23 12:52:09 CST 1991) ready. Name (canopus:eric): dee 331 Password required for dee. Password: 230 User dee logged in. ftp> pwd 257 "/home/dee" is current directory. ftp> cd desktop 250 CWD command successful. ftp> type ascii 200 Type set to A. ftp> send typescript 200 PORT command successful. 150 Opening data connection for typescript (128.114.4.99,1412). 226 Transfer complete. ftp> bye 221 Goodbye. #

841/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

Ovo su neke vanije naredbe koje bi trebale sve varijante ftp-a na UNIX raunalima podravati:

Naredbe vezane za spajanje Open Close Quit Otvara vezu s navedenim host-om. Zatvara trenutno otvorenu vezu. Zatvara vezu i izlazi iz ftp-a. Naredbe vezane za prijenos datoteka binary ascii put mput get mget Mijenja reprezentaciju datoteke u binarni tip. Mijenja reprezentaciju datoteke u ASCII tip. Prenosi jednu datoteku s lokalnog na udaljeno raunalo (remote). Prenosi vie datoteka s lokalnog na udaljeno raunalo. Prenosi jednu datoteku s udaljenog na lokalno raunalo. Prenosi vie datoteka s udaljenog na lokalno raunalo. Naredbe vezane za upravljanje datotekama i direktorijima cd cd .. ls pwd mkdir rmdir mv rm rm Promijeni lokalni ili udaljeni radni direktorij. Promijeni da trenutni radni direktorij bude korijenski direktorij. Prikaz trenutnog radnog direktorija na udaljenom raunalu. Ispis trenutnog radnog direktorija udaljenog raunala. Kreiraj novi direktorij na udaljenom raunalu. Izbrii direktorij na udaljenom raunalu. Promijeni ime datoteke ili direktorija na udaljenom raunalu. Izbrii datoteku na udaljenom raunalu (rm, ime nove datoteke). Izbrii vie datoteka na udaljenom raunalu (rm, vie datoteka). Razne naredbe ? ! Prikaz pomoi za ftp. Izlazak u shell.

Osim prijenosa datoteka, vrlo vana Internet usluga je elektronika pota ili email.

842/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

EMAIL ELEKTRONIKA POTA MUA, MTA i MDA


Sustav elektronike pote moe biti podijeljen na tri elementa: Mail User Agent (MUA) Mail Transport Agent (MTA) Mail Delivery Agent (MDA) MUA je korisniki interface - software s kojim korisnik ita svoju potu, organizira je u direktorije i alje potu. Razliite osobe u svojim MUA-ovima ele razliite mogunosti, a nisu ni svi MUA-ovi raspoloivi na svim platformama. Mnogi MUA-ovi mogu istodobno zajedno s drugima postojati na istom stroju. Na primjer, UNIX radna stanica moe imati bilo koji ili sve sljedee MUA-ove raspoloive za uporabu: mailx, elm, pine, mutt, mailtool i dtmail. Korisnik moe koristiti bilo koji MUA prisutan na njegovom sistemu budui da su MUA-ovi naprosto lokalne aplikacije. Pored toga MUA mogunosti su esto ukljuene u vienamjenski software poput Lotus Notesa i Netscape Maila ili Outlook Expressa. MTA se ne koristi za pisanje potanske poruke, nego za usmjeravanje pote iz lokalnog MUA na drugi MTA na drugom sustavu. (sendmail je primjer MTA, koji se ne koristi za izravno itanje ili pisanje pote, ve je namijenjen samo za isporuivanje predformatiranih poruka.) Usmjeravanje se pote moe odvijati i lokalno (local) i udaljeno (remote). MTA je u lokalnom prijenosu pote, gdje i poiljatelj i odredite imaju raune na istom stroju, odgovoran za prijenos pote od sebe do lokalnog MDA. U tom je postupku mogue da MTA ureuje protokole, adrese i smjer potanske poruke. Poruka stvorena na UUCP mrei zahtijeva neke promjene prije nego ju moe primiti osoba na TCP/IP mrei. MTA djeluje kao prolaz za potu pri slanju poruke s jedne mree na drugu mreu koja koristi drukije protokole. U velikoj e veini sluajeva na jednom stroju biti samo jedan MTA. MDA je trei sastavni dio rutine baratanja potom. Dok sendmail izravno barata SMPT prijenosom pote izmeu MTA-ova, u baratanju se lokalnom isporukom iz sendmail-ovog reda ekanja u red ekanja koji koristi MUA oslanja na Mail Delivery Agente (MDA). Dva uobiajena MDA-ova za iju je uporabu sendmail esto podeen su /bin/mail i procmail. /bin/mail je gotovo sveprisutan na UNIX sustavima. procmail je nairoko raspoloiv i istovremeno je bri i mnogo sposobniji od uobiajenog /bin/mail-a, pruajui jake mogunosti predrazvrstavanja i predobrade pote. Za bolje razumijevanje MUA/MTA/MDA

843/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

odnosa razmotrite primjer iz stvarnog ivota kada neka osoba poalje pismo. MUA predstavlja osobu koja alje pismo. On pismo napie, stavi ga u omotnicu, napie adresu i zalijepi marku i zatim ga dostavi u potanski ured. MTA je poput osoblja potanskog ureda oni pismo zaprime, provjere adresu i ako je potrebno preformatiraju je i zatim pismo usmjere ili u potanski sandui u istom potanskom uredu (ako je pismo lokalno) ili u drugi potanski ured (za udaljena odredita). MDA odgovara potaru koji potu iz potanskog ureda isporuuje na namijenjenu lokaciju. Ako je koriten prolaz, ta se slinost moe proiriti MTA koji zaprimi pismo za odredite u drugoj dravi treba tu poruku prenijeti drugom MTAu koji zna kako pismo isporuiti u ciljnoj dravi.

Povijest sendmail-a
Eric Allman je u kasnim 1970-ima bio na University of California u Berkeleyu. Tamo je napisao prethodnika sendmail-a, nazvanog delivermail, koji je izdan 1979. radi rjeavanja problema prijenosa email-a izmeu triju mrea u krugu sveuilita u to vrijeme. Te su tri mree bile ARPANET (koja je koristila NCP - Network Control Protocol), UUCP email sustav i unutarnja mrea nazvana BerkNet. Sljedee je godine ARPANET zapoeo prijelaz s NCP-a na TCP (Transmission Control Protocol). Prije toga je email isporuivan upotrebom FTP-a (File Transfer Protocol), meutim, SMTP je razvijen zbog oekivanja mogueg porasta email prometa na mrei u rasponu od nekoliko puta. U odazivu na te promjene Allman je prihvatio sveobuhvatan pristup formatima poruka elektronike pote. Ako poruka nije odgovarala prihvaenom formatu, sendmail je umjesto odbacivanja poruka radije njen format pokuao prilagoditi. Allman se takoer odluio na ograniavanje namjenskog cilja sendmaila na usmjeravanje pote, umjesto da ukljui i mogunosti email aplikacije za krajnjeg korisnika. Inaica 4.1 BSD (Berkeley Software Distribution) UNIX-a je sadravala i prvo javno izdanje sendmail-a. Drugi su se u meuvremenu, odvojeno od Allmana, bavili proirivanjem mogunosti sendmail-a. Pored razliitih neslubenih nastojanja, bilo je i nekoliko komercijalnih proizvoaa, poput Suna i Hewlett-Packarda, koji su razvili svoje vlastite verzije sendmail-a kada su ustanovili potrebu za poboljanjima koja u trenutnim verzijama nisu bila ukljuena. Iz tih je usporednih razvoja proizalo nekoliko verzija sendmail-a s razliitih razinama kompatibilnosti. Allman je 1998. godine sendmail-u od verzije 8.9 dao komercijalan status, dok je verziju 8.8.x ostavio besplatnom kakva je uvijek i bila.
844/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

Email protokoli i osnovne SMTP naredbe Email Protokoli Protokol SMTP Opis Simple Mail Transport Protocol, protokol koriten za prijenos pote s jednog Internet host-a na drugi POP Post Office Protocol, definira metodu kako mali host moe dohvatiti potu s veeg host-a bez pokretanja MTA (kao to je sendmail). RFC 1725, 1734 IMAP Internet Message Access Protocol, dozvoljava klijent mail programima pristup i manipuliranje email-om na serveru. RFC 1730, 1731 MIME Multipurpose Internet Mail Extensions, definira metode slanja binarnih podataka kao to su slike, zvuk, datoteke i sl. preko email-a koji su distribuirani kao tekst. RFC 1521, 1522 i drugi PEM Privacy-Enhanced Mail, enkripcija poruke i procedure autentifikacije. RFC 1421, 1422 i 1423 Format of text Standardni forma za Internet email opisan u RFC 822 messages

Osnovne SMTP naredbe Naredba Hello From Recipient Data Reset Verify Expand Help Quit Sintaksa HELO <sending-host> MAIL FROM:<from-address> RCPT TO:<to-address> DATA RSET VRFY <string> EXPN <string> HELP [string] QUIT Funkcija Identificira host-a poiljaoca Adresa poiljaoca Adresa primaoca Poetak poruke Odustanak od poruke Provjera korisnikog imena Otvaranje mailing liste Traenje online pomoi Kraj SMTP session-a

845/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

Primjeri koritenja email-a


SMTP je toliko jednostavan protokol da moemo vidjeti kako se koristi najobinijim telnet pristupom: # telnet almond.nuts.com 25 Trying 172.16.12.1 ... Connected to almond.nuts.com. Escape character is '^]'. 220 almond Sendmail 4.1/1.41 ready at Tue, 29 Mar 94 17:21:26 EST helo peanut.nuts.com 250 almond Hello peanut.nuts.com, pleased to meet you mail from:<daniel@peanut.nuts.com> 250 <daniel@peanut.nuts.com>... Sender ok rcpt to:<tyler@almond.nuts.com> 250 <tyler@almond.nuts.com>... Recipient ok data 354 Enter mail, end with "." on a line by itself Hi Tyler! . 250 Mail accepted quit 221 almond delivering mail Connection closed by foreign host.

Osnovne POP3 naredbe Command USER username PASS password STAT RETR n Funkcija Korisnikovo korisniko ime Korisnikova lozinka Prikaz broja neproitanih poruka/bajtova Povrati poruku broj n

846/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

DELE n LAST LIST [n] RSET TOP n l NOOP QUIT

Izbrii poruku broj n Prikaz broja zadnje pristupanoj poruci Prikaz veliine poruke n ili svih poruka Povrati sve poruke; resetiraj broj na 1 Ispii zaglavlja i jednu liniju poruke n Ne radi nita Kraj POP3 session-a

Evo jednog primjera kako se, koristei POP3, logirati na server, proitati i izbrisati tri poruke, koristei telnet. # telnet almond 110 Trying 172.16.12.1 ... Connected to almond.nuts.com. Escape character is '^]'. +OK almond POP3 Server Process 3.3(1) at Mon 15-May-95 4:48PM-EDT user hunt +OK User name (hunt) ok. Password, please. pass Watts?Watt? +OK 3 messages in folder NEWMAIL (V3.3 Rev B04) stat +OK 3 459 retr 1 +OK 146 octets The full text of message 1 dele 1 +OK message # 1 deleted retr 2 +OK 155 octets The full text of message 2 dele 2 +OK message # 2 deleted

847/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

retr 3 +OK 158 octets The full text of message 3 dele 3 +OK message # 3 deleted quit +OK POP3 almond Server exiting (0 NEWMAIL messages left) Connection closed by foreign host.

848/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

USENET NEWS Uvod


Povijest USENET news servisa moe se pratiti sve do izvornog ARPAnet-a. Tadanja ARPA-Internet zajednica koristila je niz mailing lista za distribuiranje informacija, oglasa i nadogradnji svojim lanovima zajednice. Kako se ta zajednica irila, odravanje tih mailing lista postajalo je sve tee i tee. Liste su postale izuzetno dugake, a sve promjene i dodaci su postali teki. USENET predstavlja odrivu alternativu za prosljeivanje news-a. Ideja je da se informacije s novostima (eng. 'news') postave (post-aju) na centralni server i omogue korisnicima da ih prime kad oni to poele. USENET sistem omoguuje slinu funkcionalnost staroj mailing list operaciji; informacije su ureene kao pojedini lanci podijeljeni u posebne grupe i podjele. (na takav server se takoer odnosi naziv bulletin board system (BBS). Da bi pristup i pretraivanje bili to bri, ta centralna skladita "news" informacija distribuirana su na mnoge lokalne servere. USENET se razvio u najvei svjetski elektroniki BBS. To je sada konglomeracija raunala na kojima se vrte razliiti operativni sustavi, a informacije razmjenjuju preko UUCPa, Interneta i drugih mrea. USENET je vjerojatno i najvei eksperiment do sada, sa kreativnom anarhijom. Postoji samo mala centralna kontrola i autoritet i svatko tko ima zadovoljavajui software te vezu na Internet, moe se pridruiti. USENET news se prenosi preko TCP/IP mree koristei NNTP. To je protokol koji je ukljuen kao dio TCP/IP protokola na svim UNIX sistemima i ne zahtijeva posebnu konfiguraciju. Sve to trebate je ime najblieg news servera.

RFC-i
RFC-i (Request for Comments) su izdani od strane radne grupe Internet Engineering Task Force (IETF) i prilagoeni su Internet standardima. Moe ih se smatrati nunim za kompatibilnost. Njihova kompletna arhiva i novosti mogu se nai na: http://www.rfcarchive.org. Ako elite razmjenjivati news s drugim Internet NNTP serverom, morate potivati ono to je propisano standardima RFC 977 i RFC 1036. O emu se zapravo radi:

849/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

RFC 977 (Network News Transfer Protocol)


Da bi Internet news serveri mogli meusobno razmjenjivati poruke, razvijen je protokol koji definira naredbe izmeu servera. Takoer, njime su definirane i naredbe izmeu news readera i news programa za slanje. NNTP je protokol na aplikacijskoj razini, operativno i funkcionalno slian HTTP-u. Kao i HTTP, NNTP aplikacija koristi pouzdan komunikacijski servis koji je omoguen TCP protokolom. Ovako nekako izgleda arhitektura USENET-a:

USENET mrea ovisi o radu NNTP servera koji se koriste kao centralne jedinice za pohranu news informacija i podataka. Korisnicima se dozvoljava pristup informacijama preko klijentskih programa tzv. newsreader-ima. Informacije se prenose cijelim USENET-om procesom serverske replikacije, poznatim kao newsfeed. Pristup i klijenata i servera je uspostavljen TCP vezom preko dobro znanog porta 119. NNTP daemon je proces koji se konstantno vrti u pozadini news servera, sluajui na portu 119 ba kao to i SMTP server slua na portu za email konekcije. NNTP klijent programi se tada spajaju na NNTP server i alju komande za itanje i slanje lanaka (articles).

850/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

Kao i HTTP protokol, NNTP koristi sustav request i response poruka za razmjenu informacija izmeu klijenata i servera. Te poruke su kodirane standardnim setom ASCII znakova. Ovdje je saetak USENET request naredbi za poruke:

Request naredba article <message-id> body <message-id> group newsgroup head <message-id> Help ihave <message-id> last list listgroup newgroups date time newnews date time

Opis Prikazuje zaglavlje poruke, praznu liniju, te tijelo poruke. Prikazuje samo tijelo poruke. Selektira izabranu newsgrupu. Prikazuje zaglavlja selektirane poruke. Daje listu moguih naredbi. Obavjetava server da klijent ima izabranu poruku. Dekrementira trenutni pokaziva na poruku. Vraa listu postojeih news grupa. Izlista trenutne poruke selektirane grupe. Izlista nove grupe nakon navedenog datuma. Izlista nove poruke unutar selektirane grupe nakon navedenog datuma..

next post

Inkrementira trenutni pokaziva na poruku. Pokree postanje poruke s terminatorom tokom (.) na inae praznoj liniji.

Quit slave

Zatvara TCP vezu klijenta sa serverom. Pokazuje da je ovo veza na slave server koji osigurava news servis.

stat

Klijent izabire poruku za itanje.

Ovo je primjer operacija s jednom NNTP aplikacijom: klijent se spaja na izabrani news server: 200 usenetserver news server ready - posting ok klijent zahtijeva listu moguih newsgrupa

851/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

LIST 215 list of newsgroups follows alt.2600 alt.2600.aol ... ... comp.protocols.snmp comp.protocols.frame-relay comp.protocols.tcp-ip ... ... ... select a particular group GROUP comp.protocols.tcp-ip 211 86 1001 1087 comp.protocols.tcp-ip group selected ARTICLE 1002 220 1002 <13343@darkstar.com> Article retrieved, text follows Path: From: Newsgroup: comp.protocols.tcp-ip Subject: HTTP Request Formats Date: 8 March 1997 20:21:32 EST Organization: Deloitte Touche Consulting Group Ovdje dolazi tijelo poruke . kraj poruke je definiran jednom tokom klijent zavrava session koristei naredbu QUIT. QUIT

852/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

RFC 1036 (standard za Interchange USENET poruka)


News lanak (article) je kao email poruka ima tijelo (body), uz koje dolazi jedno ili vie zaglavlja (header) koja osiguravaju dodatne informacije koje se odnose na poruku. Standardni format za tijelo i zaglavlja poruke definirani su standardom RFC 1036. U tablici emo prikazati koja zaglavlja postoje te koja su obavezna a koja nisu:

Header approved control date distribution expires followup-to from keywords lines message-id newsgroups organization path references reply-to sender subject summary xref

Opis Za moderiranu newsgroup-u Kontrolna serverska, a ne korisnika poruka. Datum kad je poruka post-ana.. Doseg poruke. Datum kada istjee trajanje. Iza koje poruke dolazi. E-mail adresa poiljaoca. Kljune rijei koje se tiu teme. Broj linija tijela poruke. Jedinstveni ID poruke. Kojoj grupi pripada. Opis organizacije Path u trenutnom sustavu. Na koji se message-id odnosi. Odgovor autoru. Runo unijeto u polje. Tema poruke. Kratki saetak. Ime host-a

Obavezno Opcionalno X X X X X X X X X X X X X X X X X X X

853/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

Gdje News poruke ive


News poruke rasporeene unutar USENET hijerarhije su obino spremljene kao posebne datoteke na news serveru. File sistem je obino nazvan /var/spool/news ili /usr/spool/news. Datoteke koje sadre poruke dobivaju serijski broj kako su primljene, a toke unutar imena newsgrupe su zamijenjene kosom crtom (/). Na primjer, poruka broj 1047 newsgrupe comp.unix.solaris bi bila spremljena u datoteci var/spool/news/comp/unix/solaris/1047.

itanje i slanje news poruka


Newsreader-i su korisnikovi interface-i za itanje news-a. Teoretski je mogue koristiti programe kao to su cat ili more za itanje news-a s obzirom da su poruke spremljene kao obine datoteke. Ipak, time smo dosta ogranieni, pa su napisani programi (nn, trn, tin) koji nam pomau da se snaemo u nebrojenim porukama koje svakodnevno dolaze. Dobar newsreader moe prikazati poruke ograniene raznim filtrima. Isto tako, moe skinuti tzv. News Overview Database (NOV), koja sadri sve newsgrupe dotinog news servera. Newsreader-i s grafikim sueljem (Netscape) jo vie olakavaju snalaenje meu grupama i porukama. Veina newsreader-a ima integrirane programe za slanje poruka na news ili mogunost pozivanja takvog programa, a uglavnom dozvoljavaju i slanje poruka putem najobinijeg email-a. Pregledavanje i slanje news poruka mogue je i obinim internet preglednikom, na primjer preko web stranice http://www.google.com/grphp.

854/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

Hijerarhija i imena grupa


Imena grupa su podijeljena hijerarhijski s lijeva na desno. Najlijevije ime je tzv. toplevel grupa. Npr. comp.unix.misc spada u veliku grupu koja se tie raunala: hardware, software, programiranje itd. Drugo ime (unix) se odnosi na sve to se tie raunala s UNIX operativnim sustavom, dok se misc odnosi na razno unutar grupe unix. Povijesno je postojalo 7 velikih top-level grupa:

comp. Computer. Od programiranja do hardware-a i periferija i svega to se tie raunala. misc. news. Miscellaneous. Kad se jednostavno nije znalo kuda strpati grupu, dolazila je ovamo. News o USENET-u. Ovdje ljudi priaju o USENET administraciji, predlau nove grupe... Recreational. Ovdje dolaze razne slobodne aktivnosti, hobiji, a isto tako i umjetnost, muzika... Science. Sve to se tie znanosti, pa i medicine... Social. Razne kulturne grupe, religije, alternativni naini ivota... Talking. Najvie se pria o politici, ali i napada se ne sve i svata.

rec. sci. soc. talk.

Sada je to drastino proireno, a jedna od popularnijih je i svakako .alt grupa sa mnogim zanimljivostima. Takoer i skoro svaka drava ima svoju top-level grupu. Tako ljubitelji UNIX-a u Hrvatskoj imaju grupu hr.comp.os.unix.

855/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

WORLD WIDE WEB Uvod


Mail, FTP, Telnet i USENET news su s nama od ranih dana Interneta. Oni su zapravo proirenja usluga koje su smiljene i izvedene davno prije nego to je Internet postojao. WWW je novi, potpuno Internetski koncept, baziran djelomino na postojeim servisima, a djelomino na novom protokolu nazvanom HyperText Transfer Protocol (HTTP). Mnoge ljude zbunjuju funkcije i porijeklo WWW-a, Mosaic-a i HTTP-a, a terminologija koritena za odnose izmeu ta tri odvojena entiteta postaje prilino maglovita. Ta maglovitost je ponekad i namjerno proirena: Web preglednici pokuavaju osigurati neogranien interface irokoj raznolikosti informacija razliitim mehanizmima, pa zamuivanje razlika olakava njihovo koritenje, ali oteava njihovo razumijevanje. Zato emo odmah na poetku dati kratak pregled to su zapravo ta tri entiteta

WWW
WWW je velika skupina HTTP servera na Internetu i Web je ustvari najvie zasluan za eksploziju aktivnosti Interneta. WWW je baziran na konceptu koji je 1991. razvijen u European Particle Physics Laboratory (CERN) u Genevi u vicarskoj, od strane Tim BernersLee-a i njegovih suradnika. Velik dio temeljnog posla na Web klijentima, napravljen je u National Center for Supercomputing Applications (NCSA) u University of Illinois u UrbanaChampaign. Danas postoje mnoge organizacije i pojedinci koji razvijaju software za Web klijente i servere, a i mnogi drugi koji te tehnologije koriste za razne svrhe. Nitko ne kontrolira Web, kao to nitko ne kontrolira ni Internet. Ipak postoje ljudi koji se brinu o njemu, a poznati su kao W3 konzorcij: http://www.w3.org.

HTTP
HTTP je primarni aplikacijski protokol koji se nalazi u temelju WWW-a. Omoguuje korisnicima pristup datotekama koje ine Web. Te datoteke mogu biti u mnogo razliitih

856/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet services

formata (tekst, grafika, audio, video, ...), ali najei format na Web-u je HyperText Markup Language (HTML). HTML je standardizirani jezik za opis stranice, koji slui za kreiranje Web stranica. Omoguuje osnovne mogunosti za formatiranje dokumenata, ukljuujui i mogunost ukljuivanja grafikih elemenata, te dozvoljava specificiranje hypertext linkova na ostale servere i datoteke.

Preglednici
Mosaic, koji je razvio Marc Andreessen i drugi u NCSA-u, je HTTP klijent, koji se koristi kao preglednik za Web. NCSA Mosaic je besplatan i moe se pokrenuti na razliitim platformama: od raznih varijanti UNIX-a pa sve do Macintosh-a i Windows-a. Naravno, postoje i mnogi drugi preglednici kao to su Opera, Netscape i danas najpopularniji Internet Explorer. HTTP je samo jedan od protokola koji razumije Mosaic. Mosaic klijenti tipino razumiju i najmanje FTP, Gopher te WAIS protokole, dok neki drugi preglednici, npr. Netscape, podravaju i NNTP i SMTP protokole. Web preglednici su nevjerojatno popularni, to je i razumljivo. Omoguuju bogat grafiki interface ogromnom broju resursa na Internetu. Informacije i servisi koje su prije mogli koristiti samo strunjaci, postali su lagano dostupni. Tako se danas preko Interneta moe rezervirati mjesto u restoranu, kupiti karta za kazalite ili provjeriti stanje na cestama. Da bi krenuli na putovanje Internetom, dovoljno je pokrenuti najomiljeniji preglednik za Web i upisati ime stranice koju elimo ili pokrenuti jednu od brojnih trailica Interneta, npr. www.google.com te pronai eljenu stranicu. Samo ime koje upisujemo locira se pomou URL-a (Uniform Resource Locator), i izgleda uglavnom ovako protocol://hostname/path. "Protocol" kae na koji nain se pristupa podacima (uglavnom http). "Hostname" kae ime raunala domaina kojem pristupamo, a "path" je putanja do same datoteke, specifina za host raunalo. Naalost, sigurnost Web preglednika i servera predstavlja veliki problem. Iskoristivost Web-a je velikim djelom njegova fleksibilnost, a fleksibilnost ini kontrolu vrlo tekom. Ba kao to je lake prenijeti i pokrenuti neki program sa Web preglednika nego preko FTP-a, tako je i lake prenijeti i pokrenuti tetni program. Web preglednici ovise o vanjskim programima, tzv. plug-innovima, koji tada pokreu tipove podataka koje sami preglednici ne razumiju. Ponekad i takvi dodaci pregledniku mogu biti maliciozni i opasni, tako da je uvijek potrebno biti oprezan pri pokretanju instalacije takvih dodataka.
857/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Dario Dugi

RPC (remote procedure call)

858/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

to je RPC ?
RPC je mona tehnika za konstrukciju distribuiranih aplikacija koje rade na klijent-server principu.Baziran je na proirenju ideje o uobiajenom ili lokalnom pozivanju procedura tako da pozivana procedura nemora biti smjetena na istom adresnom prostoru na kojem je i procedura koja ju poziva.Dva procesa mogu biti na istom sustavu ili na razliitim sustavima koji su meusobno mreno povezani. Upotrebom RPC-a programeri distribuiranih aplikacija izbjegavaju detalje mrenog suelja.Prijenosna neovisnost RPC-a izolira aplikaciju od psihikih i fizikih elemenata mehanizama podatkovne komunikacije i dozvoljava joj da koristi raznoliki prijenos. RPC ini klijent-server model izraunavanja monijim i lakim za programiranje.U kombinaciji s ONC RPCGEN protokol kompajlerom klijenti vre pozive transparentno kroz lokalno suelje procedure.

Kako radi RPC i model


RPC je slian pozivanju funkcije.Kao i poziv funkcije,kada je uinjen RPC,argumenti poziva poslani su udaljenoj proceduri i poziva eka njezin povratni odgovor. Slika - pokazuje tok aktivnosti prilikom RPC poziva izmeu dva mrena sustava.

client program

MACHINE B (SERVER)

callrpc() function

execute request

call service

execute request

return reply

request completes

program continues

859/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

Klijent stvara proceduralni poziv koji alje zahtjev na server i zatim eka. Kada stigne zahtjev server poziva izvrnu rutinu koja izvodi uslugu zahtjeva i alje odgovor klijentu.Nakon izvravanja RPC poziva klijentov program se nastavlja. Napomena. RPC osobito podrava mrene aplikacije. ONC RPC protokol je zasnovan na modelu poziva udaljene procedure,to je slino s modelom pozivanja lokalne procedure.U sluaju lokalnog pozivanja.poziva postavlja argumente proceduri na nekoj tono specificiranoj lokaciji (kao npr. prozor registrija). On tada kontrolu prenosi poceduri i s vremenom ju opet dobije nazad.U tom trenutku, rezultat procedure je otpakiran s tono specificirane lokacije i poziva nastavlja s izvravanjem. RPC model je slian tome.Jedan djeli kontrole se logiki "vrti" izmeu dva procesa.To su proces pozivaa i serverski proces.Proces pozivaa prvo alje pozivnu poruku serverskom procesu i zatim eka (blokira se) poruku primitka.Pozivna poruka ukljuuje parametre procedure i pruka primitka ukljuuje rezultate procedura.Jednom kada poruka primitka pristigne rezultati procedure se odpakiravaju i ponovno se nastavlja izvravanje procesa pozivaa. Na strani servera proces miruje ekajui dolazak pozivne poruke.Kada pristigne pozivna poruka,serverski proces otpakirava parametre procedure,proraunava rezultat,alje poruku primitka i tada eka sljedeu pozivnu poruku.U ovom modelu samo je jedan od ta dva procesa aktivan u bilo kojem datom trenutku.Bilo kako bilo,ovaj model je dan samo kao primjer.ONC RPC protokol nema nikakva ogranienja na taj model. Npr. implementacija moe koristiti asinkrone RPC pozive tako da klijent moe raditi neto korisno dok eka potvrdu od servera.Sljedea mogunost je da server kreira odvojene zadatke za procesuiranje dolaznog poziva tako da izvorni server moe biti slobodan za primanje drugih zahtjeva. Postoji nekoliko vanih stvari u kojima se pozivanje udaljenih procedura razlikuje od pozivanja lokalnih: Kontrola pogrijeaka: kada se koristi pozivanje udaljenih procedura greke u radu udaljenih servera i mrea moraju biti uklonjene i pod kontrolom. Globalne varijable: pojedinani argumenti ne mogu biti poslani kao globalne varijable Performanse: udaljene procedure rade neto sporije od lokalnih procedura. Autentifikacija: zbog slanja kroz nesigurne sustave mrea autentifikacija je nuna. Zakljuak je da iako postoje alati za automatsko generiranje klijentskih i serverskih biblioteka za danu uslugu,protokoli svejedno moraju biti paljivo dizajnirani. Mehanizam udaljenog poziva procedure. Udaljena procedura je jednoznano odreena s tri stvari: programskim brojem,brojem verzije i brojem procedure. Programski broj identificira grupu povezanih udaljenih procedura od kojih svaka ima svoj poseban broj procedure.Program se moe sastojati od jedne ili vie verzija..Nadalje,svaka od tih verzija sastoji se od kolekcije procedura koje su dostupne za poziv iz udaljene lokacije.Brojevi verzije omoguuju da mnogobrojne verzije RPC protokola budu istovremeno dostupne.Svaka verzija sadri odreen broj procedura koje se mogu pozvati sa neke udaljene lokacije.Opet,svaka od tih procedura sadri i svoj identifikacijski broj.

860/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

Razvoj RPC aplikacije

Na primjeru: Klijent-serv er pogled na bazu podataka koja se nalazi na nekom udaljenom raunalu. Pretpostavimo da moemo pristupiti bazi podataka s neke lokalne stanice(putem NFS-a). Koristimo UNIX za pokretanje shell-a (ljuske) na udaljenom raunalu i preko njega izvravamo naredbu. U tom sluaju javljaju se neki problemi: Postoji mogunost da se naredba izvrava jako sporo Zahtjeva se korisniki raun na udaljenom raunalu Alternativa iz RPC-a je: Instalira se server na udaljenom raunalu koji moe odgovarati na upite Dobiva se povratna informacija pozivanjem upita to e biti puno bre nego u prethodnom pristupu. Za razvoj RPC aplikacije potrebne su sljedee stvari: Specificiranje protokola za klijent-server aplikaciju Razviti program na klijentu i Razviti program na serveru. Ti programi e biti kompajlirani odvojeno.Komunikacijski protokol je ostvaren generiranjem prijelaza i ti prijelazi i RPC (i druge biblioteke) moraju biti povezane. Definiranje protokola

Najlaki nain za definiranje i izvoenje protokola je koritenje npr kompajlera rpcgen. Napomena.Za protokol se mora identificirati ime uslunih procedura te tipovi parametara i povratnih argumenata. Kompajler ita definicije i automatski izvodi prijelaze za klijenta odnosno server. .rpcgen koristi vlastiti jezik (RPC ili RPCL) koji je slinog izgleda kao pretprocesorske direktive. .rpcgen postoji kao samostalni izvrni kompajler koji moe itati posebne datoteke s .x prefiksom. Stoga se za kompajliranje RPCL datoteke jednostavno upisuje: -rpcgen rpcprog.x To e po potrebi izvriti sljedee 4 datoteke: rpcprog_clnt.c klijent prijelaz rpcprog_svc.c server prijelaz rpcprog_xdr.c (ako je potrebno) XDR filteri rpcpro.h datoteka zaglavlja potrebna ako se koriste XDR filteri XDR je apstrakcija podataka za mogunost nezavisne raunalne komunikacije Napomena.Klijent i server ne moraju biti raunala istog tipa.

861/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

Definiranje klijentovog i serverskog koda aplikacije Sada je potrebno upisati kod klijenta i aplikacije.Oni meusobno moraju komunicirati putem procedura i tipova podataka specificiranih u protokolu. Usluna strana e morati registrirati procedure koje mogu biti pozvane od strane klijenta i morati e vratiti sve podatke potrebne za procesuiranje. Postoji nekoliko razina aplikacijskog suelja koje se mogu koristiti za razvoj RPC aplikacije. Kompajliranje i pokretanje aplikacije Razmorimo cjelokupni potrebni model za pokretanje jedne RPC aplikacije.Stvarane datoteke su korisne za manju optereenost kompajliranja RPC aplikacija,ali je vano prije razumjeti cjelokupni model da bi se mogla sastaviti prikladna takva stvarana datoteka. Pretpostavimo da je naziv klijentovog programa rpcprog.c,usluni program je rpcsvc.c, zatim da je protokol definiran u rpcprog.x te da je rpcgen upotrebljen za stvaranje prijelaza i filterskih datoteka: rpcprog_clnt.c, rpcprog_svc.c, rpcprog_xdr.c,rpcprog.h. Klijentski kao i serverov program moraju sadravati datoteku zaglavlja #include pcprog.h. Zatim je potrebno: kompajlirati kod klijenta cc c rpcprog.c kompajlirati prijelaz klijenta cc c rpcprog_clnt.c kompajlirati XDR filter cc c rpcprog_xdr.c bildati izvravanje klijentovog cc o rpcprog rpcprog.o rpcprog_clnt.o rpcprog_xdr.c kompajlirati uslune procedure cc c rpcsvc.c kompajlirati server prijelaz cc c rpcprog_svc.c bildati izvravanje serverovog cc o rpcsvc rpcsvc.o rpcprog_svc.o rpcprog_xdr.c Nakon toga jednostavno pokrenemo programe rpcprog i rpcsvc na klijentu odnosno serveru. Napomena.Serverske procedure moraju biti registrirane prije no to ih klijent moe pozvati.

Pregled rutina na suelju


RPC sadri vie razina suelja aplikacije za svoje usluge.Te razine proizvode razliite ocjene kontrola balansiranih s razliitom koda za izvravanje.Ovo poglavlje daje pregled rutina dostupnih na svakoj razini.

862/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

Pojednostavljene rutine suelja


Pojednostavljene rutine suelja upotrebljavaju se za pozivanje udaljenih procedura za rutine na drugim raunalima i specificiraju samo vrstu prijenosa koja se koristi.Rutine na ovoj razini koriste se za veinu aplikacija. Pojednostavljeno funkcioniranje razina rpc_reg() registrira proceduru kao RPC program za sve prijenose odreenog tipa. rpc_call() udaljeni poziv odreene procedure na odreenom udaljenom hostu. rpc_broadcast() rasprostranjuje poruku poziva kroz sve prijenose odreenog tipa.Standardno suelje je podjeljeno na gornji nivo,srednji nivo,struni nivo i donji nivo. Ova suelja daju programeru puno bolju kontrolu nad komunikacijskim parametrima kao to je prijenos koji se koristi,koliko ekati prije nego to se pone odgovarati na greke i zahtjeve retransmisije itd.

Gornji nivo
Na gornjem nivou suelje je i dalje jednostavno,ali program mora ostvariti kontrolu nad klijentom prije pozivanja i isto tako prije primanja poziva mora uspostaviti kontrolu nad serverom.Ako elite pokretati aplikaciju na svim prijenosima koristite ovo suelje.

clnt_create() opi nain stvaranja klijenta.Program kae clnt_create() gdje se nalazi server i koji tip prijenosa treba koristiti. clnt_create_timed () slino kao clnt_create() ali dozvoljava programeru da specificira maksimalno dozvoljeno vrijeme za svaki pokuaj neke vrste prijenosa u toku stvaranja.
svc_create() stvara kontrolu nad serverom za sve prijenose odreenog tipa.Program govori svc_create() koju izvrnu funkciju treba koristiti. clnt_call() klijent zahtjeva od procedure da poalje zahtjev na server.

Srednji nivo
Suelje srednjeg nivoa RPC-a omoguava kontrolu nad detaljima.Programi napisani na ovim niim razinama su kompliciraniji ali rade puno djelotvornije.Srednji nivo omoguuje specificiranje prijenosa koji e se koristiti. clnt_tp_create() stvara kontrolu nad klijentom za odreeni prijenos. clnt_tp_create_timed() slino kao i clnt_tp_create() ali dozvoljava programeru da specificira i maksimalno dozvoljeno vrijeme.

863/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

svc_tp_create() stvara kontrolu nad serverom za odreeni prijenos. clnt_call() klijent poziva proceduru za slanje zahtjeva na server.

Struni nivo
Struna nivo sadri vei broj rutina s kojima specificiramo parametre povezane s prijenosom. Upotreba tih rutina: clnt_tli_create() stvara kontrolu nad klijentom za odreeni prijenos. svc_tli_create() stvara kontolu nad serverom za odreeni prijenos. rpcb_set() poziva RPC obvezu za postavljanje puta izmeu RPC usluge i mrenih adresa. rpcb_unset() brie mapiranje postavljeno s rpcb_set(). rpcb_getaddr() poziva RPC obvezu za dobivanje adresa prijenosa od specificiranih RPC usluga. svc_reg() povezuje specificirani par programa i broj verzije s odreenom izvrnom rutinom. svc_unreg() brie povezivanje postavljeno s svc_reg(). clnt_call() -- klijent poziva proceduru za slanje zahtjeva na server.

Donji nivo
Donji nivo sadri rutine koje se koriste za potpunu kontrolu nad opcijama za prijenos. clnt_dg_create() stvara RPC kontrolu kljineta za odreeni udaljeni program koristei bezspojnu vezu. svc_dg_create() stvara RPC kontrolu servera koristei bezspojnu vezu. clnt_vc_create() stvara RPC kontrolu klijenta za odreeni udaljeni program,koristei normalni spojni prijenos. sc_vc_create() stvara RPC kontrolu nad serverom koristei spojni prijenos. clnt_call() klijent poziva proceduru za slanje zahtjeva na server.

864/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

Programsko suelje RPC-a

Ovaj dio objanjava kako je izvedeno C suelje prema RPC-u i opisuje kako napisati mrenu aplikaciju koristei RPC. Napomena.Za kompletnu specifikaciju rutina u RPC biblioteci pogledati u rpc i s njima povezane man dokumente.

Pojednostavljeno suelje
Pojednostavljeno suelje je najlaka razina,jer ne zahtjeva koritenje bilo kojih drugih rutina RPC-a.Razvoj programa na ovoj razini moe biti vrlo brz i direktno je podran od strane rpcgen kompajlera.Z veinu aplikacija,lakoa rukovanja rpcgen-om je dovoljna. Neke RPC usluge nisu dostupne kao funkcije C-a ali su stoga dostupne kao RPC programi.Pojednostavljeno suelje uskladitenih rutina omoguava lakou upravljanja RPCom za programe koji ne zahtjevaju veu razinu kontrole. Rutine poput rusers nalaze se u RPC biblioteci librpcsvc.rusers.c. Sljedi primjer programa koji ispisuje broj korisnika na udaljenom raunalu hostu. On poziva rusers RPC rutinu iz biblioteke.
---program.c ----

#include <rpc/rpc.h> #include <rpcsvc/rusers.h> #include <stdio.h>

/* program koji poziva rusers() uslugu */

main (int argc,char **argv) { int num; if (argc != 2) { fprintf (stderr, "usage: %s hostname\n",argv[0] ); exit(1); } if (( num = rnusers ( argv[1] )) <0 ) { fprintf (stderr, error: rusers\n"); exit(0); }

865/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

fprintf (stderr, "%d users on %s\n",num, argv[1] ); exit(0); }

Zatim program treba kompajlirati s lijnijom koda: cc program.c lrpcsvc lnsl Klijentska strana Pojednostavljeno rpc_call() suelje ima samo jednu funkciju na strani klijenta. Sadri 9 parametara: int rpc_call (char *host, u_long prognum, u_long versnum, xdrproc_t inproc, char *in, xdr_proc_t outproc, char *out, char *nettype ); Funkcija poziva funkciju koja je specificirana od prognum, versum i procnum-om na hostu.Argument koji se alje udaljenoj proceduri odreen je in parametrom i inproc je XDR filter za enkodiranje tog parametra.Izlazni parametar out je adresa gdje se rezultat (te udaljene procedure) treba staviti.outproc je XDR filter koji dekodira rezultat i postavlja ga na tu adresu. Klijent blokira rpc_call() dok ne dobije povratnu informaciju od servera.Ako server prihvaa,on vraa RPC_SUCCESS koji ima vrijednost 0.RPC_SUCCESS e vratiti vrijednost 1 ako je poziv neuspjean. Ta vrijednost moe biti pokaziva na tip clnt_stat, enumerirani tip definiran u datoteci zaglavlja <rpc/rpc.h> i interpretiran s clnt_sperrno() funkcijom.Ova funkcija vraa pokaziva na standardnu RPC poruku ogreci. U primjeru su pokuani svi "vidljivi" prijenosi nabrojeni u /etc/netconfig. Prilagoavanje broja pokuaja zahtjeva koritenje niih nivoa RPC biblioteke.Brojni Argumenti i rezultati su rjeeni sakupljanjem istih u strukture. Primjer izmjenjen tako da koristi pojednostavljeno suelje izgleda poput:
#include<stdio.h> #include<utmp.h> #include<rpc/rpc.h> #include <rpcsvc/rusers.h> /* program koji poziva rusersprog RPC program*/ main (int argc, char **argv) { unsigned long nusers; enum clnt_stst cs; if ( argc != 2 ) { fprintf (stderr, "usage: rusers hostname\n");

866/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb exit(1); }

Programski alati na Unix raunalima Rlogin rsh

if ( cs = rpc_call(argv[1], RUSERSPROG, RUSERSVERS, RUSERSPROC_NUM, xdr_void, (char *) 0 , xdr_u_long, (char *) &nusers, "visible" ) != RPC_SUCCESS ) { clnt_perrno (cs); exit(1); } fprintf(stderr, "%d users on %s\n", nusers,argv[1] ); exit(0); }

Budui da tipovi podataka mogu biti drugaije zastupljeni na razliitim raunalima rpc_call() treba i tip i pokaziva RPC argumenta(slini i za rezultat). Za RUSERSPROC_NUM povratna vrijednost je unsigned long stoga je prvi povratni parametar rpc_call() a xdr_u_long (koji je za unsigned long) i drugi je &nusers ( koji pokazuje na unsigned long skladite).Zbog toga to RUSERSPROC_NUM nema argumenata, xdr enkodirajua funkcija rpc_call()-a je xdr_void i njen argument je NULL vrijednost.

Serverska strana Serverski program je vrlo jednostavan jer korisi pojednostavljeno suelje. Jednostavno poziva rpc_reg() za registraciju procedure koja se treba pozvati i tada se poziva svc_run() (prosljeiva udaljenih procedura iz RPC biblioteke) da eka zahtjev za ulaskom. rpc_reg() ima sljedei prototip: rpc_reg ( u_long_prognum, u_long_versnum, u_long_procnum, char *procname, xdrproc_t inproc, xdrproc_t outproc, char *nettype ); svc_run() poziva servisne procedure kao odgovor na RPC pozivne poruke. Prosljeiva u rpc_reg()-u vodi brigu o dekodiranju argumenata udaljenih procedura i rezultata enkodiranja, koristei XDR filtere specificirane u toku registriranja udaljene procedure. Neke biljeke o programu servera: veina RPC aplikacija prati dogovoreno imenovanje dodajui _1 imenu funkcije. Sekvenca _n je dodana imenu procedure da pokae broj verzije n odreene usluge.

867/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

Argument i rezultat alju se kao adrese.To vrijedi za sve udaljeno pozivane funkcije.Ako se poalje NULL kao rezultat funkcije tada se klijentu ne alje potvrda.Pretpostavlja se da nema potvrde za slanje. Rezultat mora postojati u statinom prostoru podataka jer se njegovoj vrijednosti pristupa nakon to se izalo iz aktualne procedure.funkcija RPC biblioteke koja stvara RPC poruku potvrde pristupa rezultatu i alje vrijednost nazad klijentu. Dozvoljen je samo jedan argument.Ako postoji vei broj podataka oni trebaju biti povueni unutar procedure koja tada moe biti poslana kao jedna informacija. Procedura je registrirana za svaki prijenos odreenog tipa.Ako je tip parametra (char *) NULL ,procedura je registrirana za sve prijenose specificirane u NETPATH-u. Ponekad se moe implementirati puno bri ili kompaktniji kod od rpcgena a. Sljedei program je primjer runo programirane registracijske rutine.Ona registrira pojedinu proceduru i pristupa svc_run()-u na zahtjev usluge.
#include<stdio.h> #include<rpc/rpc.h> #include<rpcsvc/rusers.h> void *rusers ();

main() { if (rpc_reg(RUSERSPROG, RUSERSVERS,RUSERSPROC_NUM, rusers, xdr_void, xdr_u_long, "visible" ) = = -1 ) { fprintf (stderr, "Couldn't Register\n"); exit (1); }

svc_run () ; fprintf (stderr, "Error: svc_run returned! \n"); exit (1); }

rpc_reg() moe biti pozvan toliko puta koliko je potrebno registrirati razliite programe, verzije i procedure.

Prosljeivanje arbitranih tipova podataka


Tipovi podataka poslani ili primljeni od udaljenih procedura mogu biti bilo koji set predefiniranih tipova ili mogu biti definirani od strane programera.RPC se snalazi s arbitranim strukturama podataka,bez obzira na razliite rasporede bajtova na raunalima ili odgovarajuih rasporeda struktura i to tako da ih uvijek konvertira u standardni transferni format nazvan XDR prije no to ih alje na prijenos.Konvertiranje se naziva serializing a

868/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

obrnuti proces se naziva deserializing.Argumenti prijevoda rpc_call() i rpc_reg() mogu specificirati XDR primitivne procedure kao npr xdr_u_long(). Sljedee primitivne XDR rutine su dostupne: xdr_int() xdr_netobj() xdr_u_long() xdr_enum() xdr_long() xdr_float() xdr_u_int xdr_bool() xdr_short() xdr_double() xdr_u_short() xdr_wrapstring() xdr_char() xdr_quardruple() xdr_u_char() xdr_void() Takozvana, neprimitivna rutina xdr_string(), koja uzima vie od dva parametra,poziva se iz xdr_wrapstring(). Primjer programerske rutine,struktura:
struct simple { int a; short b; } simple;

sadri pozivajui argument procedure.XDR rutina xdr_simple() prevodi strukturu na sljedei nain:

#include <rpc/rpc.h> #include "simple.h" bool_t { if ( !xdr_int ( xdrsp, &simplep -> a )) return (FALSE); if ( !xdr_short (xdrsp, &simplep -> b )) return (FALSE); return (TRUE); } xdr_simple (XDR *xdrsp, struct simple *simplep)

Njoj ekvivalentna rutina moe se automatski generirati rpcgen-om. XDR rutina vraa nulu ako se izvri neuspjeno,u protivnom vraa broj razliit od nule.

869/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

Za jo kompleksnije podatkovne strukture koriste se XDR rutine; xdr_array() xdr_bytes() xdr_string() xdr_opaque() xdr_reference() xdr_vector() xdr_union() xdr_pointer()

Npr. Za slanje polja integera,sadrane su u strukture koje sadre polje i njegovu veliinu.

struct varintarr { int *data; int arrlnth; } arr;

Prijevod polja s xdr_array() :

bool_t xdr_varintarr(XDR *xdrsp, struct varintarr *arrp) { return(xdr_array(xdrsp, (caddr_t)&arrp -> data,(i_int *) &arrp ->arrlnth, MAXLEN, sizeof(int), xdr_int)); }

Argumenti XDR polja su XDR upravljana,pokaziva na polje,pokaziva na veliinu polja i pokaziva na XDR rutinu za prijevod svakog elementa polja. Ako je veliina polja unaprijed poznata,koristi se xdr_vector() jer je puno efikasnija.

int intarr[SIZE]; bool_t xdr_intarr(XDR *xdrsp,int intarr[]) { return (xdr_vector(xdrsp, intarr, SIZE, sizeof(int), xdr_int)); }

Za polje tipa char svaki znak zauzme 32 bita.xdr_bytes() pakira znakove.Ima 4 parametra koji su slini s prva 4 parametra xdr_array()-a.

870/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

Stringovi s null vrijednostima su prevedeni s xdr_string().Isto kao xdr_bytes() samo bez parametra za duljinu.Kod "serializing"-a uzima duljinu stringa od strlen(),a kod "deserializing"-a stvara string s null vrijednou. xdr_reference() poziva funkcije xdr_string() i xdr_reference(), koje prijevode pokazivae na nain da alju stringove.

Primjer koritenja xdr_reference() :

struct fileexample { char *string; struct simple *simplep; } finalexample; bool_t xdr_finalexample(XDR *xdrsp, struct finalexample *finalp) { if (! xdr_string(xdrsp, %finalp -> string, MAXSTRLEN)) return (FALSE); if (! xdr_reference(xdrsp, &finalp -> simplep, sizeof(struct simple), xdr_simple)) return(FALSE); return(TRUE); }

Napomena.Primjetite da ovdje moe biti pozvana xdr_simple() umjesto xdr_reference().

Razvoj RPC aplikacija na visokom nivou


Upoznajmo se sada s nekom daljnjim funkcijama i pogledajmo kako se stvaraju aplikacije koje koriste RPC rutine na visokoj razini.Uinimo to prouavajui jedan primjer:
#include<stdio.h> #include<strings.h> #include "rls.h" main ( int argc, char **argv) { char dir[DIR_SIZE];

871/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb strcpy (dir,argv[1]); read_dir(dir); printf("%s\n", dir); exit(0); }

Programski alati na Unix raunalima Rlogin rsh

read_dir.c datoteka sadri lokalnu rutinu


#include<stdio.h> #include<sys/types.h> #include<sys/dir.h> <xpg2include/sys/dirent.h> #include"rls.h" read_dir(char *dir) { DIR *dirp; struct direct *d; printf("beginning"); dirp=opendir(dir); if (dirp == NULL) return (NULL); dir[0]=NULL; while (d = readdir(dirp)) sprintf(dir,"%s%s\n",dir,d->d_name); printf("returning"); closedir(dirp); return((int)dir); }

Datoteka zaglavlja rls.h koja sadri samo sljedee(zasada)

#define DIR_SIZE 8192

zasigurno moramo djeliti veliinu meu datotekama.Kasnije kada razvijemo RPC verzije, vie informacija e biti potrebno unjeti u tu datoteku. Lokalni program se kompajlira sljedeom datotekom: cc lls.c read_dir.c o lls Sada elimo prilagoditi ovaj program da radi na cijeloj mrei; dozvoljavajui nam nadziranje direktorija udaljenog servera. Sljedei koraci su potrebni: Trebamo konvertirati read_dir.c da se pokree na serveru. - trebati emo registrirati server i rutinu read_dir() na tom serveru

872/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

Klijent lls.c e trebati pozvati rutinu kao udaljenu proceduru. Morati emo definirati protokol za komunikaciju izmeu klijentskih i serverskih programa.

Definiranje protokola
Moemo koristiti string s null vrijednou za slanje i primanje naziva direktorija i njegovog sadraja.tovie, moemo ugraditi slanje tih parametara direktno u kod klijenta i servera.Zbog toga moramo odrediti program,proceduru i brojeve verzija za klijenta i servera.To se moe uiniti automatski koristei rpcgen ili oslanjajui se na predefinirane makroe u pojednostavljenom suelju. Ovdje emo ih specificirati runo.Server i klijent se u toku izvoenja moraju sloiti koje e logike adresekoristiti. Brojevi programa su definirani na standardni nain: 0x00000000 0x1FFFFFFF: definirani od Sun-a 0x20000000 0x3FFFFFFF: runo definirani 0x40000000 0x5FFFFFFF: gost 0x60000000 0xFFFFFFFF: rezervirani

Jednostavno emo izabrati korisniki definirane vrijednosti za na broj programa. Verzija i brojevi procedura su postavljeni na temelju standardne prakse. I dalje imamo DIR_SIZE definiciju zahtjevanu od lokalne verzije. Naa nova datoteka rls.h sadri:
#define #define #define #define DIR_SIZE 8192 DIRPROG ((u_long) 0x20000001) DRIVERS ((u_long) 1) READDIR ((u_long) 1)

Djeljenje podataka
Ve smo prije napomenuli da podacima moemo prosljediti stringove. Moramo definirati XDR filtersku rutinu xdr_dir() koja djeli podatke. To je jednostavno i definirano je preko standardne xdr_string() rutine. XDR datoteka rls_xdr.c izgleda ovako:
#include<rpc/rpc.h> #include "rls.h" bool_t xdr_dir(XDR *xdrs, char *objp)

873/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb { return (xdr_string(xdrs, &objp, DIR_SIZE)); }

Programski alati na Unix raunalima Rlogin rsh

Serverska strana Moemo upotrijebiti orginalnu read_dir.c datoteku.Sve to trebamo uiniti je registrirati proceduru i pokrenuti server.Procedura je registrirana s registerrpc() funkcijom. To je prototip: registerrpc(u_long prognum, u_long versnum, u_long procnum, char *procname, xdrproc_t inproc, xdrproc_t outproc); Parametri jednostavno definirani kao i u rpc_reg pojednostavljenom suelju. Ve smo raspravljali o postavkama parametara s rls.h datotekama zaglavlja i rls_xdr.c XDR filterskom rutinom. svc_run() rutina je isto opisana ranije u tekstu. Kompletni kod datoteke rls_svc.c je sljedei:
#include<rpc/rpc.h> #include "rls.h" main() { extern bool_t xdr_dir(); extern char *read_dir(); registerrpc(DIRPROG, DRIVERS, READDIR, read_dir, xdr_dir, xdr_dir); svc_run(); }

Klijentska strana Na strani klijenta jednostavno moramo pozvati udaljenu proceduru.To radi funkcija callrpc(). Njezin prototip je sljedei: callrpc(char *host, u_long prognum, u_long versnum, char *in, xdr_proc_t inproc, char *out, xdr_proc_t outproc pozivamo lokalnu funkciju read_dir() koja koristi callrpc() za pozivanje udaljene procedure koja je registrirala READDIR na serveru.

874/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

Kompletan rls.c program izgleda ovako:

#include<stdio.h> #include<strings.h> #include<rpc/rpc.h> #include"rls.h" main (argc,argv) int argc;char *argv[]; { char dir[DIR_SIZE]; strcpy(dir,argv[2]); read_dir(argv[1], dir); printf("%s\n", dir); exit(0); } read_dir(host-dir) char *dir, *host; { extern bool_t xdr_dir(); enum clnt_stat clnt_stat; clnt_stat=callrpc( host, DIRPROG, DRIVERS, READDIR, xdr_dir, dir,xdr_dir,dir); if (clnt_stat !=0) clnt_perrno(clnt_stat); }

Savjet: Za vjebu kompajlirajte i pokrenite udaljenu datoteku rls.c. Pokrenite oboje,klijent i server program lokalno te ako imate mogunosti preko mree.

875/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

Zvonimir Jankovi

RLOGIN RSH

876/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

TELNET
Telnet je Internet servis koji omoguava spajanje na udaljeno raunalo (remote computer) preko Interneta. Telnet program spaja nae (lokalno) raunalo na drugo raunalo kao obini terminal. Prikaz je iskljuivo tekstualni. Za rad s telnetom potrebno je imati instalirani Telnet program (telnet, TeraTerm, Netterm...). Neke osnovne UNIX naredbe koje emo koristiti pri telnetu na neki UNIX server: - pwd - ispisuje apsolutni put do radnog direktorija - cd - mijenja radni direktorij - mkdir - stvara novi direktorij - ls - ispisuje sadraj direktorija (opcija -al za detalje) - cp - kopira datoteke i direktorije - mv - premjeta datoteke - rm - brie datoteke - chmod - mijenja prava pristupa direktoriju - logout - prekida vezu sa serverom - passwd - omoguuje mijenjanje passworda

telnet host Naredbe telnet koristi se za uspostavljanje virtualne terminalske sesije sa drugim raunalom u mrei. Parametar u pozivu ove naredbe host moe biti ime ili IP adresa ciljnog hosta. Nakon uspostavljanja veze sa remote hostom, pojavljuje se standardni login prompt i od korisnika se oekuje da proe uobiajenu proceduru logiranja. Telnet sesija se zavrava odjavljivanjem sa remote hosta takoer na standardni nain (logout komandom ili sa < Ctrl >D). Escape karakterom (< Ctrl > ]) telnet prelazi u lokalni mod i posjeduje izvjestan skup lokalnih naredbe i. Jedna od znaajnijih je close kojom se prekida sesija. Ovaj nain se obino koristi u neregularnim sluajevima kada je, recimo zbog loih veza, nemogue regularno prekinuti telnet sesiju.

877/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

primjer: venus 1% hostname venus venus 2% telnet ban.junis Traying 160.99.1.1... Connected to ban.junis.ni.ac.hr Escape character is '^]' IRIX 5.3 (ban.junis.ni.ac.hr) ban login: user_name passwd: ******* ban 1% logout Connection closed by foreign host. venus 3% % telnet afrodita.rcub.zg % telnet 160.99.1.72 % telnet zmaj.eecs.wsu.edu

878/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

Skup r (remote) naredbi (rlogin, rsh i rcp)


Skup r (remote) naredbi (rlogin, rsh i rcp) je jo jedan primjer (slabe) toke u mrenoj sigurnosti, proizale iz dobre namjere. Program rlogin prijavljuje korisnika na udaljeno raunalo, rsh (remote shell) se spaja na udaljeni sustav i izvrava specificiranu naredbu, a rcp kopira datoteke izmeu sustava. Tvorci su eljeli korisnicima olakati snalaenje u svijetu velikih domainskih raunala (hosts), omoguujui im da se s nekih raunala prijave rad na drugim, udaljenim raunalima (remote hosts) bez lozinke. Ta udaljena raunala nazvana su pouzdanim domainskim raunalima (trusted hosts). Bilo koje raunalo na kojem korisnik ima korisniki raun (account) s istim korisnikim imenom moe se proglasiti pouzdanim domainskim raunalom (trusted host) navoenjem u datoteci .rhosts. Korisnik moe imati takvu datoteku na bilo kojem raunalu na kojem ima korisniki raun. Na taj nain eljelo se olakati rad time to se lozinka trai samo kod prijave na neko od tih raunala i omoguuje automatska prijava za rad na bilo kojem pouzdanom domainu. Korisnik ne gubi vrijeme upisujui lozinke kad se poeli prijaviti na neko drugo raunalo. Dovoljno je znati lozinku na jednom od raunala, umjesto pamtiti sve lozinke. Logika kojom su se autori rukovodili bila je: ako zna lozinku, ti si autentificiran; raunala u .rhosts datoteci vjeruju jedno drugom polazei od principa da nitko od njih ne moe biti kompromitiran; ako te jedno raunalo autentificiralo, ostala mogu vjerovati njegovoj izjavi. Ako napada uspije prikriti svoj originalni identitet i predstaviti se kao netko drugi, omoguen mu je nesmetan i lak pristup sustavu jer mu ovaj vjeruje. No ovaj pristup ima i svojih (uvjetno reeno) pozitivnih strana: kako se ne zahtjeva lozinka za pristup, ona se ne moe saznati prislukivanjem. Ali taj princip upravo je i glavni problem: ne moe se vjerovati radnom raunalu (host) ni korisnicima na njemu. Programi rexec i rexecd omoguuju udaljeno izvravanje (remote execution). Za razliku od r komandi, ne koristi se mehanizam pouzdanih domainskih raunala (trusted hosts). Klijent alje poruku u jasnom (nekriptiranom) tekstu koja sadrava korisniko ime, lozinku i naredbu koja se treba izvriti. Zlonamjernik treba samo proitati nezatiene podatke iz paketa.

879/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

rlogin
rlogin -l login_name host Ovo je jo jedan nain startanja virtualne terminalske sesije. Program rlogin prijavljuje korisnika na udaljeno raunalo. Obino imate tako namjetena raunala u kojima hrpa raunala koristi isto korisniko imena. NIS (Network Information Service) je distribuirani sustav baza podataka koji dozvoljava sustavima dijeljenje datoteka s lozinkama i druge datoteka preko mree. Olakava odravanje mree jer se sve konfiguracijske informacije o korisnikim raunima spremaju na jedno raunalo, NIS glavni posluitelj. Zbog toga to dri tako osjetljive materijale poput lozinki, vrlo ga je vano ispravno konfigurirati. Nakon prijavka na jedan stroj, svi drugi mogu pretpostaviti da ete koristiti isto ime i lozinku , kada se prijavljuje na jedan od njih. rlogin takoer prebacuje i tip terminala koji koriste , pa cak i ako drugi sustav zatrai da unesete tip terminala. Ako udaljeni sustav ne prepoznaje vae korisniko ime pita vas za njega i lozinku.Dvije datoteke odreuju rlogino-ov zakljuak ako da elite koristiti isto korisniko ime tada se prijavite na drugo raunalo.Prva se zove/etc/hosts.eguiv. Na svakom stroju, ova datoteka daje popis svih strojeva koja imaju ista korisnika imena.Pojedinani korisnici mogu imati accounte (manipulacija korisnikim raunima, obraunavanje koritenja resursa dodijeljenih odreenom klijentu) na strojevima izvan lokalne grupe ili odjelu ima svoje. Datoteka rhosts. Korisnik moe imati takvu datoteku na bilo kojem raunalu na kojem ima korisniki raun. Na taj nain eljelo se olakati rad time to se lozinka trai samo kod prijave na neko od tih raunala i omoguuje automatska prijava za rad na bilo kojem pouzdanom domainu. Korisnik ne gubi vrijeme upisujui lozinke kad se poeli prijaviti na neko drugo raunalo. Dovoljno je znati lozinku na jednom od raunala, umjesto pamtiti sve lozinke. Logika kojom su se autori rukovodili bila je: ako zna lozinku, ti si autentificiran; raunala u .rhosts datoteci vjeruju jedno drugom polazei od principa da nitko od njih ne moe biti kompromitiran; ako te jedno raunalo autentificiralo, ostala mogu vjerovati njegovoj izjavi. login_name - login ime korisnika na remote hostu. Ako se ne zada koristi se ime korisnika sa lokalnog hosta. host - IP adresa ili ime remote hosta.

880/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

primjeri: % rlogin ban.junis % rlogin melmack % rlogin afrodita.rcub.zg.ac.hr % rlogin afrodita.rcub.zg % rlogin zmaj.eecs.wsu.edu

rsh (remote shell)


Izvrava jednu po jednu naredbu.Date naredbi ime sustava i naredbu koju elite izvriti.Naredba rsh koristi isti nain ili strategiju sto se tie korisnikog imena kao i rlogin za pristup nekom sustavu , a da on ne zatrai korisniko ime i lozinku tada to moete uiniti i rsh-om.Ali budui da rsh ne rukuje terminalom bas povezano (pametno) ne moete koristiti cijeli ekran poput vi-a ili emacs-a ali zato moete koristiti ed.

ftp(1)
ftp host FTP (File Transfer Protocol) sluzi za prijenos fajlova sa jednog raunala u mrei na drugi. Kao i do sada, host predstavlja adresu ili ime udaljenog hosta sa koga (ili na koji) se eli transfer fajlova. Po uspostavljanju veze sa udaljenim hostom, od korisnika se zahtjeva da obavi login proceduru koja je vrlo slina standardnoj pri uspostavljanju terminalske sesije. Dakle, korisnik navede login ime i password koji odgovaraju remote hostu. Ukoliko je procedura identifikacije uspjeno obavljena, ftp ulazi u interaktivni mod i korisnik moe poeti sa radom. U suprotnom se preporuuje izlazak iz programa i ponavljanje procedure.

881/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

U sljedeoj tabeli su date najznaajnije interaktivan naredbe programa ftp. pwd Daje potpuni put tekueg direktorijuma na remote hostu. Izvrava komandu command u lokalnom shell-u. Na primjer: !ls !command lista sadraj tekueg direktorijuma a !pwd ispisuje tekui direktorijum na lokalnom hostu. ls,dir cd path lcd dir prikazuju sadraj tekueg direktorijuma na remote hostu. Mijenja tekui direktorijum na remote hostu. Promjena tekueg direktorijuma na lokalnom hostu. Bez argumenata ispisuje tekui direktorijum na lokalnom hostu. Postoje dva reima prijenosa fajlova, zavisno od njihovog tipa. Tekstualni fajlovi ascii, bin se prenose u ascii a binarni u bin reimu. Tekstualni fajlovi se mogu prenositi i u bin modu, meutim prijenos binarnih fajlova u ascii modu dovodi do oteenja sadraja tako da o ovome treba voditi rauna. put file_name get file_name mget file_name mput file_name quit Transfer fajla file_name sa lokalnog na remote host.

Transfer fajla file_name sa remote na lokalni host. Slino kao i get samo sto file_name u ovom sluaju moe da sadri univerzalne znake (*, ?, []). Slino kao i put samo sto file_name moze da sadri univerzalne znake. Prekid ftp sesije.

882/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

primjer: % ftp venus.elfak.ni.ac.zg Connected to venus.elfak.ni.ac.zg. Name (venus:srle): mirko 331 Password required for mirko. Password: **** 230 User mirko loged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls ftp> ascii ftp> put paper.txt ftp> get config.txt ftp> bin ftp> mget *.Z ftp> quit % U veini raunalnih mrea velikih ustanova obino postoji po jedan javni ftp server (anonymous ftp) na kome se nalaze podaci dostupni korisnicima bez obzira da li oni posjeduju raun na serveru ili ne. Kod pristupa ovakvim serverima korisnik kao login ime navodi ftp ili anonymous a kao password bilo sta, obino e-mail adresu. primjer: % ftp ftp.elfak.ni.ac.zg Name (venus:srle): ftp Password: srle@elfak.ni.ac.zg

883/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

FINGER(1)
finger [user[@host]] Naredba finger se dobivaju podaci o korisniku user na hostu host. Ti podaci obuhvaaju njegovo login ime, puno ime, HOME direktorijum, shell koji koristi i slino. Ako se host parametar ne zada, podrazumijeva se da se radi o korisniku na lokalnom hostu. Ako se izostavi user, finger daje spisak korisnika koji su trenutno logovani na raunaru host. primjeri: % finger Daje spisak prijavljenih korisnika na lokalnom hostu. Slino kao who ili w. % finger srle Daje podatke o korisniku srle na lokalnom hostu. % finger @ban.junis.ni.ac.hr Daje spisak logovanih korisnika na hostu ban.junis.ni.ac.yu. %finger srle@ban.junis.ni.ac.hr Daje podatke o korisniku srle na hostu ban.junis.ni.ac.zg.

884/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Rlogin rsh

PING(1)
ping host Naredba ping moze biti od koristi pri provjeri veze ka nekom hostu. Parametar host moze biti ime ili IP adresa hosta ka kome se veza eli provjeriti. Ova naredba konstantno alje pakete specificiranom hostu i ako je veza u redu, spomenuti host vraa pakete iste sadrzine lokalnom hostu. Na korisnikom terminalu se ispisuju informacije o vraenim paketima. Naredba se prekida sa < Ctrl >C nakon ega se dobiva zbirna statistika koja govori o kvalitetu veze ka ciljnom hostu (broj poslanih, primljenih i izgubljenih paketa kao i srednja vremena kanjenja). Za sluaj da veza nije u redu svi poslati paketi ce biti izgubljeni i od ciljnog hosta ne treba oekivati nikakve mrene usluge. Principali su sustavi koji se koriste da se autentificira korisnik posluitelju ili usluzi. Svaki sustav definira neki skup principala. Neki od najeih su: korisniko ime (username) identitet korisnika ime domainskog raunala (hostname) identitet domainskog raunala (host) klijent (client) raunalo koje zahtjeva uslugu od nekog radnog (domainskog) raunala u ime korisnika posluitelj (server) domainsko raunalo koje prua usluge

885/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

Marija Bili

SAMBA I NFS

886/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

SAMBA POSLUITELJ
Samba programski paket je skup programskih modula, koji omoguuju dijeljenje raunalnih resursa izmeu meusobno umreenih raunala sa instaliranim razliitim operativnim sustavima. U dananje vrijeme se esto unutar iste lokalne raunalne mree koriste raunala sa instaliranim razliitim vrstama i inaicama operativnih sustava, gdje se tipino radi o koritenju razliitih inaica Windows operativnih sustava (Win98/NT/2000) u kombinaciji sa nekom od brojnih Linux distribucija (RedHat, Mandrake, Debian, SuSe). Samim time javlja se potreba za meusobnim dijeljenjem resursa izmeu spomenutih platformi, kako bi se to bolje iskoristili svi raspoloivi resursi unutar raunalne mree. Upravo Samba programski paket je taj koji omoguuje integraciju Linux raunala u Microsoft okolinu, u kojoj Windows raunala nee biti niti svjesna da komuniciraju i pristupaju raunalima sa nekim drugim operativnim sustavom. Na taj nain mogu je prikaz Linux raunala sa instaliranim Samba paketom unutar Network Neighbourhood ili Windows Explorer okruja. Osnovni razlog zbog kojeg je potrebno koritenje Samba paketa je taj to Microsoft koristi neto drugaije protokole i servise koji omoguuju mrenu komunikaciju meu raunalima u odnosu na ostale operativne sustave. Osnovni protokol koji omoguuje meusobno dijeljene resursa izmeu Windows raunala je SMB (Service Message Block) protokol. Taj protokol dalje koristi NetBIOS (Network Basic I/O System) i druge protokole nie razine, kako bi se omoguilo lociranje te meusobna komunikacija izmeu pojedinih raunala. Takav pristup bitno se razlikuje u odnosu na klasine mrene protokole (TCP, UDP, IP), koji su udomaeni kod veine drugih operativnih sustava, to je u osnovi izvor svih problema. Razlog tomu je taj to Microsoftovi protokoli bili prvenstveno namijenjeni za koritenje u LAN mreama.

887/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

NetBIOS protokol
Za meusobnu komunikaciju unutar Windows okruja, raunala koriste NetBIOS imena. NetBIOS imena vezana su iskljuivo za Windows platforme, i u osnovi nemaju nikakvih slinosti sa imenima strojeva kakva koristi DNS sustav imenovanja. NetBIOS imena za razliku od FQDN (Fully Qualified Domain Name) imena kakve koristi DNS sustav, sastoje se od 15 znakova, koji odreuju njegovo ime, plus esnaesti znak koji odreuje servise koje to raunalo nudi. Kako bi se rijeio problem spajanja lokalne mree koja koristi NetBIOS (LAN u Windows okruju) sa mreama koje koriste TCP/IP i UDP/IP protokole (Internet) razvijen je NBT (NetBIOS over TCP/IP) standard koji odreuje kako bi NetBIOS trebao raditi preko TCP/UDP mrea. Standard odreuje tri osnovne usluge: usluga za povezivanje NetBIOS imena sa IP adresom, datagrami, sesije. Usluga za povezivanje imena sa IP adresom omoguava svakom raunalu da koristi specifino ime na mrei koje e biti prevedeno u IP adresu (slino kao DNS usluga na Internetu). Datagrami i sesije su sekundarni komunikacijski protokoli koji se koriste za razmjenu podataka izmeu NetBIOS raunala preko mree.

Dodjeljivanje imena i njihovo povezivanje s IP adresama


Kad se neko NetBIOS raunalo spoji na mreu, prvo to mora napraviti je registrirati svoje ime (name registration). SMB protokol koristi koncept grupa (workgroup) na koje se nova raunala mogu prijaviti. Grupa je skupina raunala unutar iste mree. Problem je u tome to dva raunala unutar iste grupe ne mogu imati isto ime. Postoje dva naina da se to osigura: dozvoljavanje svim raunalima na mrei da uvaju svoje NetBIOS ime u sluaju da ga neko drugo raunalo pokua koristiti (Slika 1.1). koritenje NBNS-a (NetBIOS Name Server) koji vodi rauna o tome koja su raunala registrirala NetBIOS ime (Slika 1.2).

888/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

Slika 1.1 Registracija imena bez NBNS posluitelja

Slika 1.2. Registracija imena s NBNS posluiteljem

Osim toga, potrebno je osigurati pretvaranje NetBIOS imena u specifine IP adrese ( name resolution). I za ovo postoje dva razliita pristupa: svako raunalo moe vratiti svoju IP adresu kad se prozove njegovo NetBIOS ime (Slika 1.3). NBNS se moe koristiti za povezivanje NetBIOS imena sa IP adresama (Slika 1.4).

Slika 1.3 Povezivanje imena s IP adresom bez NBNS posluitelja

889/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

Slika 1.4 Povezivanje imena s IP adresom s NBNS posluiteljem

Prilikom ukljuivanja raunala na mreu koja ne koristi NBNS posluitelj, novo raunalo alje poruku, u kojoj specificira NetBIOS ime s kojim se eli prikljuiti na mreu, svim raunalima u mrei (broadcast). Ako to ime ne koristi niti jedno drugo raunalo tada e ga novo raunalo zadrati. U sluaju da to ime ve koristi neko raunalo u mrei, ono e javiti novom raunalu da je to ime zauzeto. Problem s broadcast-om, osim to zaguuje mreu, je i u tome to ima problema sa mreama koje imaju vie od jedne podmree zbog usmjerivaa koji su esto konfigurirani tako da blokiraju pakete koji su broadcast svim raunalima na podmrei. Ako se koristi NBNS posluitelj tada se deava ista stvar samo to se komunikacija odvija samo izmeu novog raunala i NBNS-a. Novo raunalo javlja NBNS-u koje ime eli koristiti a NBNS javlja novom raunalu je li to ime slobodno ili nije. Slino je i sa povezivanjem NetBIOS imena i IP adresa. Ako se ne koristi NBNS tada se svim raunalima u mrei alje NetBIOS ime, a raunalo kojem to ime pripada vraa svoju IP adresu. Ako se koristi NBNS tada se njemu alje NetBIOS ime a on vraa odgovarajuu IP adresu. Iz svega reenog lako se moe vidjeti da koritenje NBNS posluitelja uvelike rastereuje mreu i ubrzava komunikaciju zbog uklanjanja potrebe za slanjem poruka svim raunalima u mrei (broadcast).

890/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

WINS (Windows Internet Name Service) je Microsoft-ova implementacija NBNS-a. Kad se raunalo spoji na mreu, ono mora prijaviti svoje ime i IP adresu lokalnom WINS posluitelju. WINS posluitelj e zadrati tu informaciju sve dok novo raunalo periodiki osvjeava svoju registraciju, to pokazuje da je jo uvijek spojeno na mreu.

Kontrolor domene
Kontrolor domene je glavni dio Windows domene (slino kao NIS posluitelj u Linux/Unix svijetu). On ima vie zadataka. Jedan je briga oko pravilne provjere autentinosti korisnika. Provjera autentinosti je proces dodjele ili zabrane pristupa korisniku dijeljenim resursima na drugom raunalu spojenom na mreu (koritenjem korisnike zaporke). Svaki kontrolor domene koristi SAM (security account manager) za odravanje liste korisnikih imena i zaporki. Kontrolor stvara centralni repozitorij zaporki i korisnikih imena to je mnogo efikasnije nego da svako raunalo na mrei mora odravati stotine zaporki za svaki dijeljeni resurs koji je dostupan na mrei. U Windows domeni, kada neautentian klijent zatrai pristup dijeljenom resursu na nekom posluitelju, posluitelj e pitati kontrolor domene da li je taj korisnik autentian. Ako je, posluitelj e dati korisniku pristup resursu, a ako nije posluitelj e korisniku zabraniti pristup. Jednom kad je korisnik provjeren od strane kontrolora domene, on dobiva poseban identifikacijski token tako da se ne mora ponovo identificirati prilikom pristupa ostalim resursima u toj domeni. Moe se rei da je korisnik prijavljen na samu domenu.

Primjer identifikacije korisnika

Kontrolor domene koji je trenutno aktivan naziva se primarni (primary domain controller, PDC). Na domeni moe biti vie pomonih kontrolora (backup domain controller, BDC) koji e preuzeti ulogu primarnog ako ovaj postane nedostupan. Pomoni kontrolori

891/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

esto sinkroniziraju svoje SAM podatke (korisnika imena i zaporke) sa primarnim kontrolorom kako bi u sluaju potrebe mogli preuzeti kontrolu domene i imaju kopije SAM podataka samo za itanje i nove podatke mogu dobiti samo sinkronizacijom sa primarnim kontrolorom. Posluitelj u Windows domeni moe koristiti SAM podatke bilo kojeg kontrolora u domeni (primarnog ili pomonih) za autentikaciju korisnika koji se eli prijaviti na domenu, ali unos novih korisnika koji smiju pristupati domeni mora ii preko primarnog kontrolora domene. Samba moe preuzeti ulogu primarnog kontrolora domene dok funkcije pomonog kontrolora domene jo uvijek nisu podrane od strane Samba-e.

Samba programski moduli i instalacija Sambe


Samba programski paket sastoji se od niza programskih modula, od kojih svaki obavlja odreeni dio poslova. smbd je SMB program posluitelj (radi na TCP portu 137) koji razgovara SMB protokolom, te omoguava meusobnu komunikaciju i dijeljenje resursa izmeu raunala. On predstavlja jedan od dva najvanija modula koji dolaze kao dio Samba paketa, i koji omoguuju njezino funkcioniranje. nmbd je drugi modul, a uloga mu je da obavlja poslove vezane za rezoluciju NETBIOS imena. Radi na TCP portu 139, te stalno oslukuje mreni promet, odnosno NETBIOS zahtjeve. Ukoliko na mrei uje zahtjev za pristup sa svojim NETBIOS imenom, on odgovara svojom IP adresom, kako bi raunalo koje je uputilo zahtjev zna kome slati daljnje pakete. smbclient je klijentski program za pristupanje resursima drugog raunala, kojima je dozvoljen pristup. nmblookup je program koji nam omoguuje saznavanje IP adrese raunala kojemu se eli pristupiti, na temelju njegovog NETBIOS imena. smbstatus je programski modul koji omoguuje davanje informacija o trenutnim vezama prema Samba posluitelju. testparm je program za provjeru regularnosti napisane ili naknadno modificirane smb.conf datoteke.

892/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

Samba programski paket dolazi u distribuciji sa veinom Linux distribucija, te se instalira klasinim instalacijskim postupcima.

Konfiguracija Sambe
Osnovni element koji je kljuan u konfiguraciji Samba programskog paketa je smb.conf datoteka. Sama instalacija Samba paketa nee stvoriti spomenutu smb.conf datoteku. Sa Samba programskim paketom dolazi vrlo koristan alat (Swat), koji omoguuje konfiguraciju i administraciju Sambe putem grafikog suelja, ime se djelomino otklanjaju problemi za manje iskusne korisnike. Swat je programski paket koji administratorima omoguuje, da se putem bilo kojeg preglednika spoje lokalno na svoje raunalo preko TCP 901 porta (http://localhost:901), te da na taj nain upravljaju Samba programskim paketom. Smb.conf datoteka se u osnovi sastoji od sekcija (oznaene uglatim zagradama) i njihovih parametara. Parametri svake sekcije navode se u obliku

ime = vrijednost

Sekcije i njihovi parametri nisu osjetljivi na velika i mala slova. Svaka linija koja poinje sa znakovima # ili ; smatra se komentarom, te kao takva nee biti tumaena. Svaka sekcija u smb.conf datoteci opisuje jedan dijeljeni resurs, sa njegovim parametrima. Iznimka je sekcija [global], koja se odnosi na sve sekcije, te sadri neke openite postavke. Osim [global] sekcije postoje jo dvije sekcije, koje se neto razlikuju u odnosu na obinu sekciju koja predstavlja neki dijeljeni resurs, a to su sekcije [printers] i [homes]. Ostale obine sekcije sastoje se u osnovi od imena direktorija koji se eli dijeliti, plus dodatni parametri koji opisuju ovlasti, odnosno dozvole pristupa. Primjer:

[global] workgroup = Simple [test]

893/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

comment = Test path = /export/samba/test read only = no guest ok = yes

Ovdje je dan primjer jednostavne smb.conf datoteke u kojoj je stvorena sekcija [test], koja predstavlja dijeljene /export/samba/test direktorija bez dozvole pisanja (read only parametar). Naveden je i guest ok parametar koji dozvoljava pristup navedenom direktoriju bez davanja korisnike zaporke. Parametar workgroup u sekciji [global], svrstati e ovaj Samba posluitelj u Simple radnu grupu. Unutar [global] sekcije, osim gore spomenutih, moe se nai i velik broj drugih parametara, koji se mogu definirati, i koji e se kao takvi odnositi na sve sekcije. Tu se mogu nai razni parametri vezani za definiciju nekih opih sigurnosnih nivoa, enkripcija, korisnikih opcija i sl. Pored [global] sekcije potrebno je spomenuti [homes] sekciju, koja moe biti vrlo korisna u odreenim situacijama. Naime, u sluajevima kada valjani korisnik (korisnik koji ima korisniki raun na posluitelju) Samba posluitelju poalje zahtjev za pristup sekciji koja nije definirana u smb.conf datoteci, a ujedno u istoj datoteci postoji definirana [homes] sekcija, Samba posluitelj e takvom korisniku omoguiti pristup direktoriju koji je unutar [homes] sekcije naveden pod path parametrom. Ukoliko path parametar nije naveden unutar te sekcije, korisniku e biti dan pristup njegovom radnom direktoriju na tom raunalu. Upravo na opisani nain [homes] sekcija se moe iskoristiti za efikasnije rasporeivanje i dodjeljivanje resursa korisnicima. Sve ostale sekcije koje se definiraju unutar smb.conf datoteke mogu imati proizvoljno ime navedeno unutar uglatih zagrada, te e kao takve sa navedenim parametrima predstavljati resurs kojemu korisnici sa valjanim korisnikim imenom i zaporkom mogu pristupiti. Korisna opcija koja se moe navesti unutar pojedinih sekcija su parametri valid users i invalid users. Pomou ovih parametar moe se tono definirati za svaku sekciju, tko ima prava pristupa, a tko ne. Koristei opciju read only = yes, korisnicima je sekcija unutar koje se nalazi naveden ovaj atribut otvorena iskljuivo za itanje. Ukoliko posebnoj grupi korisnika elimo dozvoliti pisanje unutar te sekcije, koristan je parametar write list iza kojeg slijedi niz imena korisnika, kojima se eli iznimno dozvoliti i pisanje unutar te sekcije. Vrijedi i obrnuti sluaj, pri emu se onda koristi read list parametar.

894/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

Samba dozvoljava koritenje nekih varijabli unutar smb.conf datoteke. Varijable se mogu lako prepoznati po znaku % ispred svog imena. Sve varijable unutar smb.conf datoteke se zamjenjuju pravim vrijednostima tokom izvoenja programa. Neke od korisnijih varijabli su: %I - IP adresa klijenta, %m - NetBIOS ime klijenta, %M - DNS ime klijenta, %H - home direktorij korisnika, %u - korisniko ime korisnika, %U - korisniko ime traenog korisnika, %h - DNS ime Samba posluitelja, %L - NetBIOS ime Samba posluitelja, %v - verzija Samba posluitelja. Postoji jo niz opcija koje se mogu definirati za pojedine sekcije unutar smb.conf datoteke, a mogu se nai na adresi http://us1.samba.org/samba/docs/man/smb.conf.5.html. Nakon svake modifikacije smb.conf datoteke potrebno je ponovno pokrenuti Samba posluitelje (nmbd i smbd), kako bi se aktivirale nainjene izmjene. Bez ovog koraka promjene nainjene u smb.conf datoteci nee biti vaee. Komande kojima se obavlja ponovno pokretanje Samba posluitelja su slijedee:

# cd /etc/init.d # ./smb restart ili # /etc/init.d/smb restart

Nakon ovoga nainjene promjene trebale bi biti aktivirane.

895/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

Problemi sa enkripcijom korisnikih zaporki


Element koji moe unijeti najvie potekoa to se tie konfiguracije Sambe i meusobne suradnje izmeu Linux i Widows raunala su problemi s kriptiranjem korisnikih zaporki, koji su posljedica nekompatibilnosti izmeu te dvije platforme. Naime, ukoliko se eli omoguiti pristup nekom dijeljenom resursu s Win98/NT/2000 raunala koje koristi enkripciju zaporki, potrebno je u [global] sekciji navesti sljedei parametar

encrypt passwords = yes

koji e predstavljati prvi korak u omoguavanju takvog pristupa. Svaki korisnik koji se eli spojiti na Linux Samba posluitelj s nekog udaljenog raunala, mora na tom Linux stroju posjedovati svoj valjan korisniki raun. Postoji i vrlo korisna opcija mapiranja korisnika (username map), koja omoguuje dijeljene resursa izmeu korisnika koji imaju razliita korisnika imena na razliitim raunalima. Budui da Windowsi i Linux koriste drugaije algoritme za kriptiranje zaporki, na Linux raunalu potrebno je stvoriti posebnu smbpasswd datoteku, u kojoj e biti sadrana korisnika imena korisnika, s kriptiranim zaporkama koje odgovaraju Windows enkripciji. Ta datoteka se moe vrlo jednostavno popunjavati za svakog korisnika zasebno naredbom:

# smbpasswd a ime_korisnika

(korisnik mora imati otvoren korisniki raun na tom raunalu) nakon ega slijedi upit za unosom zaporke ili automatski koritenjem skripte koja dolazi u paketu sa Samba posluiteljem, na slijedei nain:

# cat /etc/passwd | ./mksmbpasswd.sh > /etc/smbpasswd

Ova linija e za svakog registriranog korisnika koji posjeduje korisniki raun na tom Linux stroju, stvoriti odgovarajue polje u smbpasswd datoteci, to e omoguiti valjanu identifikaciju korisnika koji pokuava pristupiti sa Windows raunala. Nakon ovoga ne bi trebalo biti problema sa pristupom Windows raunala koja koriste enkripciju. Postoji i

896/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

jednostavnije rjeenje tj. mogunost da se u Windowsima u njihovom registry-u iskljui kriptiranje zaporki, ali to se ne preporua iz sigurnosnih razloga, budui da se u tom sluaju korisnike zaporke mreom prenose u njihovom izvornom obliku.

Samba i WINS posluitelj


Prije nego se poeo koristiti NBNS, povezivanje imena radilo je u cijelosti preko broadcasta. Problem s broadcastom je to ne radi dobro ako mreama koje se sastoje od vie podmrea i nepotrebno zaguuje mreu. Kako bi se rijeio taj problem razvijen je WINS, NBNS koji radi sa viestrukim podmreama, koji Samba podrava. Na jednom raunalu u mrei se pokrene WINS posluitelj i sva raunala u mrei ga mogu koristiti za povezivanje imena sa IP adresama i za registraciju na mreu umjesto broadcasta. Postoje etiri mehanizma za povezivanje imena sa IP adresama raunala koja Samba podrava. To su: WINS broadcast parovi ime-IP adresa u /etc/hosts datoteci lmhosts datoteka Samba moe koristiti bilo koju ili sve od navedenih metoda i to redoslijedom koji se specificira u smb.conf datoteci pomou resolve order opcije.

Samba kao kontrolor Windows NT i Windows 2000 domene


Prije pokretanja Sambe kao primarnog kontrolora domene potrebno je osigurati: da je Samba jedini primarni kontrolor u domeni. da postoji WINS posluitelj na mrei.

Samba i dijeljenje pisaa


Pisa spojen na Samba posluitelj moe se dijeliti preko mree i mogu ga koristiti druga raunala u mrei. Klijent koji ima instaliran ispravan upravljaki program za taj pisa moe
897/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

preko mree na njemu ispisivati dokumente jednako kao da je pisa spojen direktno na njega. Windows klijenti e dijeljeni pisa vidjeti u svojem Network Neighbourhood okruju. Kod ispisa preko mree odvija se na sljedei nain: otvara se veza prema posluitelju, datoteka koja se eli poslati na pisa kopira se preko mree na posluitelj, veza sa posluiteljem se zatvara, posluitelj alje kopiju datoteke na pisa i nakon toga ju brie. Kad datoteka koju treba ispisati stigne na posluitelj, ona se privremeno sprema na lokalni disk u direktorij koji je odreen opcijom path. Nakon toga Samba pokree Linux naredbu kojom se ta datoteka alje na pisa.

Naredba za ispis na pisa


Kako bi dokument bio ispisan na pisa, potrebno je rei Sambi kojom se naredbom datoteka moe ispisati na pisa i nakon toga obrisati. Na Linux operativnom sustavu ta naredba je: # lpr r -Ppisa datoteka

Ova naredba kopira dokument u direktorij /var/spool, dohvaa ime pisaa iz konfiguracijske datoteke /etc/printcap (u ovoj su datoteci pohranjeni parametri svih pisaa spojenih na raunalo) i na temelju parametara proitanih u njoj odluuje kako e podaci biti obraeni prije slanja na pisa i na koji ureaj u /dev direktoriju ih treba poslati. Zbog opcije -r datoteka e biti obrisana nakon ispisa. Obrisana datoteka je samo kopija originalne datoteke, pohranjena na Samba posluitelju. Ovo nema utjecaja na originalnu datoteku na klijentu. Imena svih pisaa na raunalu mogu se nai u datoteci /etc/printcap. Dokumenti koji su predani Sambi ne alju se odmah na pisa, nego se stavljaju na listu ekanja. To osigurava da trenutna zauzetost pisaa ne smeta prilikom predaje dokumenata Samba posluitelju. Nakon to je neki dokument predan posluitelju on stoji na listi ekanja dok pisa ne zavri s poslom koji trenutno obavlja i nakon toga se alje na ispis. Samba omoguava klijentu da pogleda status dokumenata koji trenutno ekaju na ispis, klijent moe pauzirati ispis nekog dokumenta, ponovno ga pokrenuti ili ga maknuti s liste za ekanje. Koritenje jednog ili vie Samba raunala kao printer posluitelja daje fleksibilnost lokalnoj mrei. Pisae se vrlo lako moe rasporediti na razliite korisnike ili se moe dozvoliti

898/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

svima da ih koriste. Dodatno, pristup pisau moe se ograniiti samo na par korisnika koritenjem opcije valid user. Primjer: Koritenje opcije valid user. [printer1] printable = yes print command = /usr/bin/lpr -r %s printer = lp printing = BSD valid users = marko mirko

U ovom primjeru samo korisnici marko i mirko smiju koristiti pisa. U datoteci smb.conf moe se definirati posebna sekcija pod imenom [printers] koja slui za automatsko kreiranje sekcija za pisae. Ako se u datoteci smb.conf definira sekcija [printers] Samba e automatski napraviti sekcije za sve pisae koje nae u datoteci /etc/printcap. Ako klijent zatrai resurs s imenom koje nije eksplicitno definiranu u smb.conf datoteci: ako ime resursa odgovara nekom korisnikom imenu na posluitelju i postoji sekcija [homes] u datoteci smb.conf tada se stvara nova sekcija s imenom korisnika u kojoj su parametri podeeni na vrijednosti dane u [homes] i [global] sekcijama. inae, ako ime resursa odgovara imenu pisaa u datoteci /etc/printcap i postoji [printers] sekcija u datoteci smb.conf tada se stvara nova sekcija s imenom pisaa u kojoj su parametri podeeni na vrijednosti dane u [printers] sekciji. ako nita od to dvoje ne uspije, Samba trai resurs definiran opcijom default service. Ako ga ne nae, vraa se greka. Iz ovoga se moe vidjeti da ako se pisau i korisniku dodijeli isto ime moe doi do greke tj. umjesto da se dijeli pisa dijeliti e se direktorij. Ako je pisa spojen na raunalo sa Windows operativnim sustavom njemu je mogue pristupati preko Sambe koritenjem skripte smbprint koja dolazi sa Samba paketom. Da bi stvar funkcionirala, pisa na Windows raunalu mora biti postavljen kao dijeljeni resurs.

899/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

Kako bi Linux prepoznao udaljeni pisa potrebno je uiniti dvije stvari: potrebno je dodati pisa u datoteku /etc/printcap napraviti konfiguracijsku datoteku u direktoriju /var/spool za pisa

Pokretanja Samba posluitelja


Za uspjeno funkcioniranje Samba programskog paketa potrebno je pokrenuti dva demon procesa smbd i nmbd. Te je demone mogue pokrenuti runo ili automatski prilikom podizanja sustava. Za runo pokretanja potrebno je u konzoli (sa administratorskim ovlastima) napisati sljedee naredbe: # /usr/local/samba/bin/smbd -D # /usr/local/samba/bin/nmbd -D

Da bi se demoni pokrenuli automatski prilikom podizanja sustava potrebno je gore navedena dva reda upisati u neku od datoteka koje se izvravaju prilikom podizanja sustava. Koje su to datoteke to ovisi o operativnom sustavu koji se koristi.

900/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

NFS (NETWORK FILE SYSTEM)


Unix mreni datoteni sustav (Network File System) omoguava koritenje particija tvrdih diskova koje se nalaze na drugim raunalima u mrei kao da su na lokalnom tvrdom disku. Time dijeljenje datoteka putem mree postaje jednostavno, brzo i transparentno za korisnika. Kako neispravna konfiguracija NFS-a moe pruiti pristup neovlatenim korisnicima lokalnom tvrdom disku, putem mree, posebnu panju treba posvetiti pravilnoj konfiguraciji sustava. Iako postoje i drugi sustavi koji pruaju slinu funkcionalnost (npr. Samba, koja je prethodno opisana), prednosti NFS-a su standardiziranost, jednostavnost za koritenje, te podrka za veinu Unix platformi. Isto tako, postoje NFS klijenti i posluitelji za Windows operativni sustav tako da je putem NFS-a mogue dijeliti podatke i datoteke na mreama koje se sastoje i od Linux (Unix) i od MS Windows raunala. Verzije NFS-a koje se trenutno koriste su verzija 2 i verzija 3. Verzija 2 je dovoljna za uobiajenu upotrebu dok je verzija 3 pogodna za jako optereene i velike mrene disk posluitelje. Verzija 2 NFS-a postoji ve dugo vremena i podrana je jo od verzije 1.2 Linux jezgre (kernela) ali je minimalna potrebna verzija Linux jezgre 2.2.18 ako se eli koristiti bilo koja od sljedeih mogunosti NFS-a: mijeanje Linux NFS-a s NFS-om drugih operativnih sustava, pouzdano zakljuavanje datoteka preko NFS-a, koritenje verzije 3 NFS-a. Osnovni paketi za NFS su nfs-utils i mount. Paket nfs-utils dolazi standardno sa svim Linux distribucijama i to u obliku .rpm (RedHat i Mandrake distribucija) i .deb (Debian distribucija) paketa.

Postava NFS posluitelja


Postavljanje posluitelja sastoji se od dva dijela, editiranja konfiguracijskih datoteka potrebnih za ispravan rad NFS posluitelja i pokretanja NFS usluge. Postoje tri glavne konfiguracijske datoteke koje je potrebno ispravno podesiti prije pokretanja NFS posluitelja. To su: /etc/exports

901/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

/etc/hosts.allow /etc/hosts.deny Za rad posluitelja dovoljno je podesiti datoteku /etc/exports ali takva postava je, gledano s aspekta sigurnosti posluitelja, vrlo loa. Naime, iako je za samo pokretanje posluitelja i omoguavanje dijeljenja datoteka preko mree dovoljno u datoteci /etc/exports rei koji e direktoriji biti dijeljeni, u datotekama /etc/hosts.allow i /etc/hosts.deny se navodi koja raunala imaju pristup posluiteljskom raunalu.

Postava datoteke /etc/exports


Ova datoteka se sastoji od niza unosa od kojih svaki govori koji direktorij (particija) se dijeli i kako se dijeli. Detalji o svim opcijama koje se mogu koristiti u ovoj datoteci mogu se nai u man stranicama s pomoi (man exports). Tipian unos u /etc/exports datoteci izgleda ovako: dir raunalo1(opcija11,opcija12) raunalo2(opcija21,opcija22) gdje su: dir - ime direktorija koji se dijeli. To moe biti i cijela particija. Svi poddirektoriji dijeljenog direktorija koji se nalaze unutar istog datotenog sustava se takoer dijele. raunalo1, raunalo2 - klijenti koji e imati pristup dijeljenom direktoriju. Klijenti mogu biti imenovani ili preko svoje IP adrese ili preko svojeg opcijaxx - lista opcija navedena uz svakog klijenta opisuje nain na koji e taj klijent moi pristupati posluitelju. Najvanije opcije su: ro - direktorij je dijeljen samo za itanje. Klijent moe samo itati iz direktorija ali ne moe u njega pisati. Ova postavka se automatski pretpostavlja ako nije navedeno drugaije. rw - klijent ima moe i itati iz direktorija i pisati u direktorij. no_root_squash - uobiajeno ponaanje posluitelja je da se svaki zahtjev od root korisnika na klijentu tretira kao zahtjev korisnika nobody na posluitelju. Ako je odabrana opcija no_root_squash tada e root korisnik na klijentu imati istu razinu prava pristupa datotekama na posluitelju kao da je na posluitelj prijavljen kao root.

902/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

no_subtree_check - ako se dijeli samo dio particije a ne cijela, tada je potrebna provjera da li se datoteka koju je zatraio klijent nalazi na dijeljenom dijelu particije. Ako se dijeli cijela particija tada ova provjera nije potrebna i ukljuivanje ove opcije e ubrzati prijenos datoteka. sync - verzija 2 NFS posluitelja e obavijestiti klijenta da je proces zapisivanja datoteke na disk zavren kad posluitelj pozove write sistemski poziv i preda datoteku lokalnom datotenom sustavu na posluitelju. Ali to ne znai da je ta datoteka doista u tom trenutku zapisana na disk. Zbog toga moe doi do gubitka podataka i pokvarenih datoteka ako doe do pada posluitelja. Opcija sync osigurava da datoteni sustav na posluitelju datoteku doista snimi na disk onog trenutka kad od NFS-a dobije write sistemski poziv. NFS verzije 3 nema ovih problema i kod njega ukljuivanje ove opcije nije potrebno. Za velike lokalne mree moda e biti potrebno omoguiti pristup velikom broju klijenata. Kako bi se u takvim sluajevima izbjeglo navoenje imena svakog od raunala zasebno postoji par naina koji pojednostavljuju referenciranje velikog broja raunala. Ako se eli omoguiti pristup svim raunalima na lokalnoj mrei, to se moe postii specificiranjem IP adrese mree i mrene maske (eng. netmask). Primjer: Izgled unosa u /etc/exports datoteci koji svim raunalima u lokalnoj mrei omoguava pristup direktorijima /usr/local i /home. /usr/local /home 192.168.0.0/255.255.255.0(rw) 192.168.0.0/255.255.255.0(ro)

Druga je mogunost specificiranje NIS (Network Information Service) mrene grupe u unosu. Da bi se specificiralo ime mrene grupe u exports datoteci potrebno je ispred imena dodati simbol @. Primjer: Primjer omoguavanja pristupa mrenoj grupi. /usr/local /home @student(rw) Mrena grupa u ovom primjeru ima ime student. @student(ro)

903/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

Trea je mogunost koritenje asteriksa (*) (npr. *.apm.hr) umjesto cijelih imena raunala. Ista stvar se moe postii primjenom djelominih IP adresa tako da se navede samo dio IP adrese koji se odnosi na lokalnu mreu bez da se adresira neko odreeno Kod koritenja ovih pojednostavljenja treba biti oprezan, jer se moe desiti da se omogui pristup neeljenim raunalima. Sa stajalita sigurnosti, ak je i za velike lokalne mree najbolje navesti ime svakog raunala zasebno jer se time smanjuje opasnost od pogreke i omoguavanja neeljenog pristupa resursima. Napomena o tome to se ne moe (i ne smije) dijeliti: ako je neki direktorij dijeljen tada njegov naddirektorij i njegovi poddirektoriji ne mogu biti dijeljeni ako se nalaze u istom datotenom sustavu. Za tako neto nema niti potrebe jer se dijeljenjem jednog direktorija dijele i svi njegovi poddirektoriji, ali treba paziti kako se ne bi potkrala greka u /etc/exports datoteci. nije dobra ideja dijeliti FAT ili VFAT (MS DOS, MS Windows) datotene sustave. FAT nije predvien za rad s viekorisnikim raunalima i operacije koje ovise o datotenim dozvolama nee raditi. ureaji koji se nalaze u /dev direktoriju i ostale posebne datoteke ne mogu se pravilno dijeliti sa klijentima koji nisu pokrenuti na Linux operativnom sustavu.

Postava datoteka /etc/hosts.allow i /etc/hosts.deny


Datoteke /etc/hosts.allow i /etc/hosts.deny su standardne Linux datoteke koje odreuju koja raunala na mrei smiju pristupati uslugama pokrenutim na Linux raunalu. Ove dvije datoteke ne odnose se samo na NFS posluitelj nego i na neke druge posluitelje koji ih koriste (npr. inetd). Svaki unos u ovim datotekama sadri ime usluge pokrenute na raunalu i imena raunala koja smiju (ili ne smiju) pristupati toj usluzi. Kad posluitelj dobije zahtjev od klijenta on provjerava u datotekama hosts.allow i hosts.deny da li tom klijentu smije dati pristup. Provjera se odvija sljedeim redoslijedom: prvo se provjerava datoteka hosts.allow kako bi se vidjelo da li je u njoj navedeno ime klijenta. Ako je, tada je klijentu odobren pristup.

904/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

ako klijent nije naveden u datoteci hosts.allow tada se provjerava datoteka hosts.deny. Ako se ime klijenta nalazi u njoj, tada pristup klijentu nije odobren. ako se ime klijenta ne nalazi niti u jednoj od datoteka tada mu se dozvoljava pristup. Pomou ovih datoteka moe se uvesti kontrola pristupa NFS usluzi tako da se pristup demonima koji su za nju zadueni dozvoli samo nekim raunalima.

Portmapper demon
NFS ovisi o portmapper demonu koji se zove ili portmap ili rpc.portmap i nalazi se u direktoriju /sbin ili /usr/sbin. On mora biti pokrenut na NFS posluitelju i klijentu kako bi ovi ispravno radili.

NFS demoni
O NFS usluzi se brine pet demona: rpc.nfsd - radi veinu posla oko NFS usluge, rpc.lockd - brine se oko zakljuavanja datoteka, rpc.statd - zajedno s rpc.lockd se brine oko zakljuavanja datoteka, rpc.mountd - brine se oko inicijalnih zahtjeva za montiranjem datotenog sustava , rpc.rquotad - brine se oko korisnikih kvota (koliina diskovnog prostora koju korisnik smije zauzeti svojim podacima) na dijeljenim particijama. Prvi demon kojem treba ograniiti pristup je portmapper. Ovaj demon govori klijentima kako nai sve NFS usluge na posluitelju. Ogranienje pristupa portmapper demonu onemoguava neautorizirani pristup NFS-u jer neautorizirani korisnici nee znati gdje se nalaze NFS demoni. Ovaj pristup ima i svojih mana. Prvo, ograniavanje pristupa portmapper-u ne pomae ako potencijalni uljez unaprijed zna kako nai potrebne demone. Drugo, ako je pokrenuta NIS usluga, ograniavanje portmapper-a e takoer ograniiti pristup NIS usluzi. U pravilu to ne predstavlja vei problem jer je poeljno ograniiti NFS i NIS na slian nain. Pokretanje NIS usluge zajedno s NFS-om je poeljno zato to klijentu olakava odreivanje vlasnitva nad pojedinim datotekama i direktorijima dijeljene particije. Openito je dobra ideja kod NFS-a (kao i kod ostalih mrenih usluga) inicijalno zabraniti pristup svim raunalima u datoteci hosts.deny, a nakon toga omoguiti pristup eljenim raunalima u

905/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

datoteci hosts.allow. Tako e pristup posluitelju biti omoguen samo raunalima navedenim u datoteci hosts.allow dok e svim ostalim raunalima pristup biti zabranjen. Primjer: Zabrana pristupa portmapper demonu za sva raunala. U datoteku hosts.deny je potrebno dodati sljedeu liniju: portmapp:ALL

Primjer: Zabrana pristupa svim NFS demonima za sva raunala. U datoteku hosts.deny je potrebno dodati sljedee linije: lockd:ALL mountd:ALL rquotad:ALL statd:ALL

Mogue je u datoteku hosts.deny staviti samo liniju ALL:ALL koja uzrokuje zabranu pristupa svim uslugama koje koriste ovu datoteku osim ako nije drugaije naznaeno u datoteci hosts.allow. Sa stajalita sigurnosti, ovo je najbolje rjeenje premda moe predstavljati problem ako se potrebne dozvole za pristup zaborave dodati u datoteku hosts.allow. Sljedea stvar koju je potrebno napraviti je dodavanje potrebnih dozvola za pristup u datoteku hosts.allow. Unosi u toj datoteci imaju oblik: service: host [ili network/netmask] , host [ili network/netmask] gdje je service ime demona kojem elimo omoguiti pristup, a host IP adresa raunala kojem se eli omoguiti pristup. Isto kao i u sluaju datoteke exports moe se umjesto IP adrese pojedinog raunala koristiti kombinacija IP adrese mree i mrene maske kako bi se dozvolio pristup grupi raunala.

906/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

Pokretanje NFS usluge


Kod novijih Linux distribucija mogue je pokrenuti NFS ponovnim podizanjem raunala. Skripte koje se pokreu kod podizanja sustava e detektirati da je datoteka /etc/exports podeena i pravilno e pokrenuti NFS uslugu. Ako ovo ne radi potrebno je NFS demone pokrenuti runo. Za ispravan rad NFS-a potrebno je pokrenuti sve ranije navedene NFS demone. Veina novijih Linux distribucija ima skripte za automatsko pokretanje ovih demona. Svi NFS demoni su dio paketa nfs-utils i nalaze se u direktoriju /sbin ili /usr/sbin. Ako ih distribucija ne doda automatski u boot skripte tada ih je potrebno runo dodati i to sljedeim redoslijedom: rpc.portmap, rpc.mountd, rpc.nfsd, rpc.statd, rpc.lockd (po potrebi), rpc.rquotad. Kod nekih Linux distribucija nfs-utils paket dolazi s gotovim skriptama za automatsko pokretanje NFS-a prilikom podizanja sustava. U sluaju Mandrake i RedHat Linux distribucija te skripte se nalaze u /etc/init.d direktoriju i zovu se portmap, nfs, nfslock. Skripte se automatski pokreu prilikom podizanja sustava ali ih je mogue pokrenuti i runo. portmap skripta slui za manipulaciju portmapper demonom i moe je se pokrenuti s opcijama: start - pokretanje portmapper demona, stop - zaustavljanje demona, status - stanje demona, restart - ponovno pokretanje demona, reload - isto kao i restart. nfs skripta slui za pokretanje i zaustavljanje NFS usluge. Opcije s kojima se skripta moe pokrenuti su: start - pokretanje NFS usluge, stop - zaustavljanje NFS usluge, status - stanje nfs usluge, restart - ponovno pokretanje NFS usluge, reload - ponovno uitavanje datoteke /etc/exports. nfslock skripta se brine oko pokretanja i zaustavljanja NFS demona koji se brinu oko zakljuavanja datoteka. Opcije prilikom pokretanja su: start - pokretanje demona,
907/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

stop - zaustavljanje demona, status - stanje demona, restart - ponovno pokretanje demona. Kod Debian distribucije skripte postoje sline skripte koje se takoer nalaze u /etc/init.d direktoriju. Njihova imena su portmap, nfs-server i nfs-common. Skripta nfs-common slui za pokretanje programa potrebnih za NFS klijent dok skripta nfs-server pokree dodatne demone potrebne za NFS posluitelj (za NFS klijent dovoljno je pokrenuti skriptu nfs-common, dok za NFS posluitelj moraju biti pokrenute obije skripte). Skripta portmap ista je kao i kod Mandrake (RedHat) distribucije. Skripte se pokreu automatski prilikom podizanja sustava a koriste se na jednak nain kao i u Mandrake (RedHat) distribuciji.

Provjeravanje je li NFS pokrenut


Da bi se ovo provjerilo, mogue je traiti od portmapper demona da ispie koje sve usluge trenutno prua. To se moe postii naredbom rpcinfo -p u komandnoj liniji. Primjer: Ispis na ekran nakon pokretanja rpcinfo -p naredbe ako je NFS pokrenut. Program 100000 100000 100011 100011 100005 100005 100005 100005 100005 100005 100003 100003 300019 300019 100024 100024 vers 2 2 1 2 1 1 2 2 3 3 2 3 1 1 1 1 proto tcp udp udp udp udp tcp udp tcp udp tcp udp udp tcp udp udp tcp port 111 portmapper 111 portmapper 749 rquotad 749 rquotad 759 mountd 761 mountd 764 mountd 766 mountd 769 mountd 771 mountd 2049 nfs 2049 nfs 830 amd 831 amd 944 status 946 status

908/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

100021 100021 100021 100021 100021 100021

1 3 4 1 3 4

udp udp udp tcp tcp tcp

1042 nlockmgr 1042 nlockmgr 1042 nlockmgr 1629 nlockmgr 1629 nlockmgr 1629 nlockmgr

U ispisu moraju postojati barem linije u kojima se spominju portmapper, nfsd i mountd. Ako ih nema NFS nije ispravno pokrenut. Nakon to je NFS posluitelj pokrenut, potrebno je podesiti NFS klijente.

Naknadno mijenjanje /etc/exports datoteke


Ako je NFS posluitelj ve pokrenut, a eli se dodati neke promijene u /etc/exports datoteku te promijene nee odmah biti primijenjene. Da bi se unesene promijene poele primjenjivati potrebno je pokrenuti naredbu exportfs -ra kako bi nfsd ponovo proitao datoteku /etc/exports. Kod Mandrake i RedHat Linux distribucija ista stvar se moe postii pokretanjem skripte nfs (nalazi se u direktoriju /etc/init.d) sa opcijom reload.

Montiranje udaljenih direktorija


Prije poetka potrebno je provjeriti da li je verzija mount programa dovoljno nova (verzija 2.10m ako se eli koristiti verzija 3 NFS-a) i da li raunalo podrava NFS montiranje (veina novih distribucija ga podrava). Da bi se raunalo moglo koristiti kao NFS klijent potreban je portmapper. Da bi se koristilo NFS zakljuavanje datoteka potrebno je pokrenuti rcp.statd i rcp.lockd i na posluitelju i na klijentu. Veina novijih distribucija pokree ove programe prilikom podizanja sustava. Ako to nije sluaj, potrebno ih je pokrenuti runo. Uz pokrenute portmapper, lockd i statd mogue je montirati direktorije sa NFS posluitelja kao da se nalaze na lokalnom tvrdom disku koritenjem mount naredbe.

909/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

Primjer: Ako se NFS posluitelj zove maja.apm.hr a ime klijenta je ivana.apm.hr. Da bi na klijentu montirali /home direktorij s posluitelja u /mnt/home direktorij klijenta potrebno je upisati naredbu: # mount maja.apm.hr:/home /mnt/home

Da bi odmontirali montirani direktorij potrebno je upisati naredbu: # umount /mnt/home ba kao da se radi o lokalnom datotenom sustavu.

Montiranje NFS datotenog sustava prilikom podizanja sustava


NFS datoteni sustav moe biti dodan u /etc/fstab datoteku isto kao i lokalni datoteni sustav. Jedina razlika je to je tip datotenog sustava potrebno postaviti na nfs, a opcije dump i fsck (zadnje dvije opcije u datoteci fstab) na nulu. Primjer: Kao i u prolom primjeru ime posluitelja je maja.apm.hr a ime klijenta ivana.apm.hr. Kako bi se /home direktorij posluitelja montirao u /mnt/home direktorij klijenta prilikom svakog podizanja klijenta potrebno je u datoteku /etc/fstab dodati liniju: maja.apm.hr:/home /mnt/home nfs rw 0 0

Dodatne opcije kod montiranja


Ove opcije odreuju kako e se NFS klijent ponaati u sluajevima kad se posluitelj srui ili kad padne mrea. Postoje dva pristupa: soft - ako se zahtjev za datotekom prekine, NFS klijent e prijaviti greku procesu na klijentskom raunalu koji je zatraio datoteku. Neki programi mogu podnijeti takav pristup ali veina ne moe. Ovakav pristup se ne preporua jer vrlo esto uzrokuje gubitak podataka i pokvarene datoteke.

910/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

hard - program koji pristupa datoteci preko NFS datotenog sustava e stati ako se dogodi pad posluitelja ili mree. Proces ne moe bit prekinut ili ubijen (naredbom kill, osim ako se ne upotrijebi kill -9) ako se uz opciju hard ne upotrijebi i opcija intr. Kad se NFS posluitelj ponovno digne program e nastaviti tamo gdje je stao. Preporua se koritenje hard, intr kombinacije na svim NFS montiranim datotenim sustavima. Primjer: Isti primjer kao i proli ali su koritene opcije hard i intr. maja.apm.hr:/home /mnt/home nfs rw,hard,intr 0 0

Ako se direktorij eli montirati runo koritenjem mount naredbe tada u komandnoj liniji treba upisati: # mount -o hard,intr naomi.zesoi.fer.hr:/home /mnt/home

Napredne postavke - optimizacija NFS-a


Pravilno postavljanje mrenih postavki moe znaajno popraviti performanse NFS. Najbitnije je pravilno podesiti veliinu blokova podataka koje razmjenjuju NFS posluitelj i NFS klijent.

Podeavanje veliine blokova podataka


Opcije rsize i wsize programa mount odreuju veliinu blokova podataka koje meusobno razmjenjuju NFS klijent i posluitelj. Ako ove opcije nisu specificirane tada se koriste uobiajene vrijednosti koje iznose 4096 byte-ova. Uobiajene vrijednosti mogu biti ili prevelike ili premale. S jedne strane, neke kombinacije Linux jezgre (kernela) i mrenih kartica ne mogu podnijeti tako velike blokove (uglavnom na starim raunalima sa starim mrenim karticama). S druge strane, ako su podrani veliki blokovi, vea vrijednost od uobiajene moe ubrzati rad sustava. Budui da se

911/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

ovo uvelike razlikuje od sustava do sustava ne postoji pravilo kojim bi se moglo odrediti koja je veliina najbolja za dani sluaj ve se to mora eksperimentalno utvrditi. Primjer: Testiranje brzine prijenosa podataka putem NFS-a. Testiranje brzine NFS sustava moe se obaviti pomou par jednostavnih naredbi. Prva od tih naredbi kopira 16384 bloka podataka od kojih je svaki veliine 16Kbyte iz datoteke /dev/zero (/dev/zero nije prava datoteka ve program koji samo vraa nule kad ga se pozove) na montiranu particiju. Potrebno je jo izmjeriti vrijeme potrebno da se to obavi. Sve navedeno moe se obaviti upisivanjem naredbe na klijentu: # time dd if=/dev/zero of=/mnt/home/testfile bs=16k count=16384

Ovo stvara datoteku veliine 256Mbyte na montiranoj particiji. U pravilu trebalo bi napraviti datoteku koja je barem dvostruko vea od veliine RAM-a na posluitelju, ali treba paziti da za to ima dovoljno mjesta na tvrdom disku. Nakon toga je potrebno ponovno proitati stvorenu datoteku sa klijenta. To se moe postii naredbom: # time dd if=/mnt/home/testfile of=/dev/null bs=16k

Ova naredba datoteku s posluitelja ita u datoteku /dev/null (/dev/null nije obina datoteka ve program koji brie sve to se kopira u njega). Ovo je potrebno ponoviti vie puta kako bi se dobila srednja vremena potrebna za stavljanje datoteke na posluitelj i za dohvaanje datoteke natrag na klijent. Svaki put je potrebno datoteni sustav s posluitelja prvo odmontirati i nakon toga ga ponovno montirati kako bi se ispraznio meuspremnik. Cijeli postupak potrebno je ponoviti za razliite vrijednosti opcija rsize i wsize. Veliine bi trebale biti potencije broja 2 i ne smiju biti vee od 8192 byte-a budui da je to maksimalna dozvoljena veliina za NFS verziju 2 (ako se koristi NFS verzija 3 mogu se koristiti vrijednosti do 32768 byte-a). Odmah nakon montiranja datotenog sustava s novim vrijednostima za rsize/wsize potrebno je otii u taj direktorij naredbom cd i pokuati izlistati njegov sadraj naredbom ls kako bi se vidjelo da li NFS uope moe raditi s novim vrijednostima. Tipina greka kod prevelikih vrijednosti je nepotpuna lista datoteka kod ls naredbe. Nakon to se ustanovi da li nove vrijednosti za rsize/wsize rade moe se ponoviti test mjerenja brzine.

912/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

Nakon to su odreene optimalne vrijednosti za opcije rsize/wsize potrebno ih je unijeti u datoteku /etc/fstab. Primjer: Redak koji treba dodati u /etc/fstab datoteku kako bi se direktorij montirao uz odreene opcije rsize i wsize. maja.apm.hr:/home /mnt/home nfs rsize=8192,wsize=8192 0 0

Broj instanci NFSD demona


Veina skripti za pokretanje NFS-a (za Mandrake (RedHat) distribuciju to je skripta /etc/init.d/nfs dok je kod Debian distribucije ta skripta /etc/init.d/nfs-server) pokree osam instanci nfsd demona. Za jako optereene posluitelje moe biti potreban vei broj instanci to se moe postii pokretanjem nfsd demona iz komandne linije uz navoenje broja instanci kao opcije. Ista stvar moe se postii i modifikacijom skripata koje pokreu NFS demone prilikom podizanja sustava.

NFS posluitelj i klijent za MS Windows operativni sustav


Kako bi se NFS mogao koristiti i u MS Windows okruenju razvijeni su NFS posluitelji i klijenti i za taj operativni sustav. Za razliku od NFS-a za Linux, ovi programi su komercijalni i njihovo koritenje se plaa. Primjer je programski paket ProNFS tvrtke Labtam. U sklopu ProNFS paketa dolaze NFS posluitelj, NFS klijent i neki dodatni mreni klijenti kao to su telnet i FTP. Nakon instalacije paketa raunalo na kojem je instaliran MS Windows operativni sustav moe se koristiti kao i kao NFS posluitelj i kao NFS klijent. Postupak instalacije isti je kao i kod svih drugih Windows programa. NFS posluitelj se pokree u meniju Start->Programs->ProNFS odabirom opcije NFS-Server nakon ega se otvara glavni prozor NFS-Server programa.

913/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

Glavni prozor NFS-Server programa Odabirom opcije Exports otvara se prozor u kojem se mogu postaviti particije i direktoriji koji se ele dijeliti preko mree. Opcijom Add directory dodaju se direktoriji koji e biti dijeljeni preko NFS-a, dok opcija Add User Access slui za davanje pristupa dijeljenim direktorijima klijentima

Prozor za davanje pristupa klijentima

914/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

Ovdje je potrebno upisati IP adresu klijenta kojem se eli dati pristup, korisniki i grupni identifikacijski broj (UID i GID) za eljenog korisnika i nain na koji korisnik smije koristiti dijeljeni direktorij (samo za itanje ili i za pisanje). Nakon to je pristup odobren, klijenti mogu montirati dijeljene direktorije bez obzira da li su pokrenuti na Linux ili na Windows raunalu.

NFS klijent
Prije koritenja NSF klijenta potrebno je podesiti neke parametre potrebne za rad. Za to je potrebno odabrati opciju Settings. Tu se mogu podesiti korisniki i grupni identifikacijski broj, dodati IP adrese NFS posluitelja, odrediti nain konverzije Linux imena datoteka u Windows imena datoteka i sl. Nakon to su odabrane eljene postavke, klijent je spreman za rad. ProNFS klijent se integrira u suelje Windows Explorer programa tako da za njegovo koritenje nije potrebno otvarati dodatne prozore.

915/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Samba i nfs

ZAKLJUAK
NFS omoguava jednostavno, brzo i transparentno dijeljenje datoteka i podataka preko lokalne mree. Korisnici dijeljene podatke (datoteke) mogu drati na dijeljenoj particiji kojoj svi imaju pristup ime je razmjena podataka znatno olakana i ubrzana. Diskovni prostor na pojedinim raunalima primjenom NFS-a prestaje biti problem jer se otvaraju mogunosti postavljanja mrenih diskova (mrenih disk posluitelja) iji diskovni prostor mogu koristiti sva raunala spojena na lokalnu mreu. Na mrenim diskovima mogu se nalaziti i baze podataka, repozitoriji i slino. Dodatna prednost NFS-a je jednostavnost instalacije (standardno dolazi sa svim novijim Linux distribucijama) i koritenja koje se vrlo malo razlikuje od koritenja lokalnih datotenih sustava kao to su floppy disk ili CD-ROM. NFS se pokazao vrlo stabilnim, ak i u sluajevima pada mree ili posluitelja nije dolo do gubitka podataka i do pojave pokvarenih datoteka. Brzina prijenosa podataka ovisi o koritenoj Ethernet vezi. Iako se NFS pokazao upotrebljivim u manjim lokalnim mreama baziranim iskljuivo na Linux operativnom sustavu, u 'mijeanim' mreama koje se sastoje od Windows i Linux raunala puno bolje rjeenje je Samba. Samba u takvom okruenju radi bre od NFS-a i pouzdanija je. I sa stajalita sigurnosti Samba je bolja zbog sigurnosnih rupa koje u NFS-u jo uvijek nisu rijeene. Zbog toga se preporua koritenje Sambe i na mreama koje se sastoje samo od Linux raunala. Samba paketom omoguava se meusobno dijeljenje diskovnog prostora ( shares), zatim pisaa, pa ak i serijskih portova izmeu razliitih operativnih sustava. Velika prednost Samba paketa lei u injenici da Samba moe zamijeniti Windows posluitelje potrebne za uspostavu lokalne mree (WINS posluitelj i kontrolor domene). Iako Samba paket jo uvijek nema potpunu funkcionalnost NT posluitelja, on se bez problema moe koristiti u manjim lokalnim mreama (do 30 raunala) kod kojih nema potrebe za pomonim WINS posluiteljem i pomonim kontrolorom domene koje Samba jo uvijek ne podrava. Moe se zakljuiti da je Samba dobra (i jeftinija) zamjena za Windows NT posluitelje u malim lokalnim mreama kao to su SOHO mree.

916/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima X window system

Jakov Mihaljevi

X WINDOW SYSTEM

917/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima X window system

UVOD

X Window System (u daljnjem tekstu X) razvijen je 1984.g. na Massachusetts Institute of Technology (MIT) zbog potrebe za transparentnim mrenim protokolom primarno za Unix operacijske sustave. Nekoliko godina kasnije 1987. projekt X Window Systema se izdvaja sa IMT-a te brigu o njemu preuzima skupina nazvana X consortium. X consortium je bio zaduen za razvoj i standardizaciju X-a sve do 2004.g. Uslijed razmimoilaenja u pogledima na daljnji razvoj X originalni lanovi X consortiuma 22.sijenja. 2004.g. osnivaju X.org Foundation i preuzimaju brigu o razvoju X window Systema.

918/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima X window system

OSNOVNE ZNAAJKE X-A


X Widow System je podloga grafikih korisnikih suelja (GUI) na viekorisnikim i mrenim sustavima. X i pojedine njegove komponente su razvijene za gotove sve operativne sustave, a na Unix platformama je prihvaen kao osnovno grafiko suelje. Na ne Unix platformama je prihvaen uglavnom kao sredstvo za povezivanje sa Unix-om ili za prenoenje aplikacija sa Unix-a. X osigurava obradu i grafiki prikaz informacija. Prikaz informacija kod X je prilino slian prikazu kod MS Windows operacijskog sustava , no osnovna razlika je u strukturi X protokola.

Sastavni dijelovi X Window Systema:


X server X klijent X protokol Xlib Dok MS Windows-i prikazuju grafike aplikacije lokalno na PC-u, X distribuira procesiranje aplikacije specificirajui klijent-server odnos na razini aplikacije. Dio aplikacije koji se brine o obradi podataka naziva se X klijent i odvojen je od djela aplikacije koji se brine o prikazu, koji se naziva X server. Klijent-server dio X Window Systema esto na prvi pogled zna biti zbunjujui zbog svoje kontradiktornosti sa onim to u hardverskom smislu nazivamo klijent i server. Dakle, X dio aplikacije koju naziva klijent smjeta na udaljeno raunalo(to nije nuno, moe i lokalno), a serverski dio smjesta na lokalno raunalo. X Windows System takoer prua(svima nam poznat) sustav prozora. X specificira hardverski ovisan i hardverski neovisan sloj. Komunikacija izmeu klijenta i servera kod X protokola utemeljena je na asinkronom mrenom protokolu, a ostvaruje se X protokolom. Na nain na koji je utemeljen X skriva osobine operacijskog sustava i pripadajueg hardvera. Ovo sakrivanje arhitektualnih i konceptualnih razlika pojednostavljuje razvoj X klijenta i osigurava izvrsne temelje za portabilnost X Window Systema.
919/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima X window system

Slika 1. Prednosti ovakve arhitekture su mnogobrojne: ekvivalentnost rada sa lokalnim ili mrenim raunalima za krajnjeg korisnika i ili programera X Server je visoko portabilan to omoguava potporu za razliite jezike i operacijske sustave X klijenti su takoer visoko portabilni X moe podravati veinu mrenih protokola, lokalno ili na daljinu Na aplikacije se ne odraava nedostatak procesorske snage

Klijent-Server dizajn
Klijent-Server dizajn X Windows Sustava specificira odnos izmeu aplikacije i njezinog grafikog prikaza. Kod X protokola proces koji upravlja zaslonom, tipkovnicom i miem naziva se X server. Klijent je proces koji se prikazuje na i uobiajeno se naziva X klijent ili aplikacija. X klijent alje zahtjeve X serveru, na primjer zahtjev za prikaz zadanih informacija. X server prihvaa zahtjeve vie klijenata i vraa X klijentima odgovore na traene informacije, korisnike unose i greke. Komunikacija izmeu klijenta i servera odvija se X protokolom. X protokol se moe naslanjati na TCP/IP, lokalnu komunikaciju pod Unix-om preko socket-a ili DECneta. Tehniki, X protokol predstavlja definiciju X Windows systema. Naravno kad govorimo O X Windows system-u ne mislimo samo na protokol, ve i na raspoloive klijente, servere i biblioteke koje koristi ovaj protokol.

920/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima X window system

U komunikaciji izmeu klijenta i servera postoje etiri vrsti poruka: Zahtjev: X klijent trai od X servera odreenu akciju npr. Create Windov Da bi poboljao performanse, X klijent uobiajeno ne oekuje odgovor. Server se uobiajeno oslanja na pouzdanost mree kao garanciju isporuke . Duina zahtjeva je 4 bajta(ili umnoak 4 bajta) Odgovor: X server e odgovoriti na zahtjev ako isti zahtjeva odgovor. Svi zahtjevi ne zahtijevaju odgovor. X odgovor je svaki umnoak 4 bajta; minimum 32 bajta Dogaaji: X Server e proslijediti X klijentu svaki dogaaj koji aplikacija oekuje . Ovo ukljuuje ulaze od strane mia i tipkovnice. Da bi se minimalizirao mreni promet klijentu e se proslijediti samo dogaaji koje oekuje. X dogaaji su duine 32 bajta.

921/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima X window system

X Server
Osnovne znaajke: Pokree se lokalno Prihvaa i demultipleksira zahtjeve X klijenata te odgovara i djeluje na osnovu njih prikazuje zadane informacije na zaslonu odgovara na zatraene informacije prijavljuje greke u zahtjevu Upravlja sa tipkovnicom, miem i zaslonom Prosljeuje ulaze tipkovnice i mia do klijenata kreira, upravlja i unitava prozore pie i crta po prozorima

Dizajn:
Dizajn X servera ovisi o platformi(hardverskoj) i operacijskom sustavu na koji je implementiran. Stoga se poveavanjem mogunosti tehnologija na kojima je izgraen poveavaju mogunosti i X servera. Karakteristika je X servera je velika zavisnost od hardvera, razlikuje se nain pristupa hardveru kroz operativni sustav. Pored kompatibilnosti, za X server je vrlo bitna efikasnost, jer na njemu je da optimalno iskoristi grafike kartice. Kod X servera uobiajeno je da se za svaki tip adaptera(ili za nekoliko slinih) postoji poseban X server. Dakle, pod X-om traimo server za pojedini adapter kao to na npr. MS Windows sustavu traimo drajver. Uz X server idu konfiguracijske datoteke, softver za podeavanje tih datoteka, datoteka i sl. Prozori X servera su hijarajhijski organizirani. Na vrhu hijarajhije je korijeni prozor(odgovara pojmu desktopa na MS Windowsima). Klijent kada otvori prozor kontrolira samo sadraj unutar prozora, a ne i okvir, liniju sa naslovom i slino. Tako X server koji radi pod MS Windowsima postie da se X prozorima rukuje kao i sa ostalima. Nije tipino da server preuzme rukovanje prozorima, on tipino taj posao preputa posebnom klijentuWindow menager-u.(WM) WM daje prozorima , okvir, naslov, kontrolira promjenu veliine, pomicanje, svodi prozore na ikone i vraa u punu veliinu, dodjeljuje i oduzima fokus,

922/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima X window system

regulira koji je ispred, a koji je iza, hvata klikove mia na prozor i sl. Sa razliitim WM-ovima dobiju se razliito dekorirani prozori, ali i razliite politike manipuliranja. Za jedan server u jednom trenutku moe biti vezan jedan WM. Ukoliko nije tako prozori izgledaju ogoljeno(bez okvira), a korisnik moe raditi samo u prozoru koji trenutno ima fokus, ali i da ga mie ili mu mijenja veliinu.

X Klijent
X klijent je aplikacija koja se vrti na udaljenom raunalu(moe i lokalno). U cijeloj temi X Windows system-a ovo je dio koji je krajnjem korisniku najmanje vidljiv te, naravno uvjetno reeno, najmanje bitan. Naime u klijent server koncepciji X Window System-a kako, gdje i na koji nain X klijent radi(tj. obrauje zadane zadatke) za krajnjeg korisnika nije bitno. Sve stvari potrebne za rad X servera sa X klijentom su odreene X protokolom te X klijent moemo smatrati crnom kutijom. Npr. Klijenta moemo shvatiti ovako: Klijenta ne zanima gdje se neto prikazuje na zaslonu, on samo trai od X servera X, Y koordinate u kojim moe crtati te nakon toga trai da se pozovu eljene funkcije(npr. crtaj liniju od toke A do toke B) i sl.

X klijent u komunikaciji sa X serverom:


alje zahtjeve prema serveru prima dogaaje od strane servera prima pogreke od servera

923/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima X window system

Prednosti X Window systema


Prednost X window System-a proizlazi iz njegove jasne podjele posla i slojevitosti. Prvo je klijent jasno odvojen od servera i vezuje ih jedino meuprocesna komunikacija. Dalje je Window mwnager odvojen od klijenta koji je otvorio prozor. Nain na koji klijent radi sa datotekama, preuzima argumente iz komandne linije, kreira i kontrolira procese i na druge naine se odnosi prema okruenju, predstavljaju pitanja kojima se X Window Sytem nebavi. Drugim rijeima: u bilo koji program moemo, gdje god elimo, dodati pozive funkcija kojima se uspostavlja veza sa nekim X Serverom. U tom sluaju se: otvara prozor , odradi komunikacija sa korisnikom u tom prozoru, zatvori prozor, prekine veza sa serverom i nastavi rad isto kao da je taj dio posla obavljen bez X-a. Pri tome nije bitno dali program inae koristi X ili ne. Mnogi programeri komuniciraju sa korisnikom preko terminalskog prozora, dakle tekstualno, a samo kada trebaju neto uitati obraaju se X-u.

Xfree86
Xfree86 je organizacija koja razvija i besplatno distribuira open-source implementacije X Window System-a pod nazivom XFree86. Xfree86 je stvoren primarno za UNIX i UNIX-oidne operacijske sustave kao to su Linux, BSD(sve varijante), Sun Solaris(podrana je 32 i 64 bitna verzija), Solaris x86, Mac OS X i dr. Xfree86, sadri klijent/server suelje i desktop okolinu, te takoer i prozorsku infrastrukturu i standardizirano aplikacijsko suelje(API). Xfree86 je platformski neovisan, mreno-transparentan i proiriva implementacija X Windows Systema. Primarni cilj Xfree86 Projekta je razvijati XFree86 i stvoriti najbolji slobodno distribuirajui Open-source implementacija X Window Systema implementirajui ga na to vie razliitih hardverskih i softverskih platformi. Projekt tei ovim ciljevima na nain da daje najvie panje tehnikom integritetu ideja, implementaciji i individualnim sudjelovanjem . Xfree86 je sve do 2004g bio najzastupljeniji open-sorce paket koji je dolazio uz veinu Linux distribucija, no sa pojavom verzije Xfree86 4.4 stvari su se promijenile. Naime licenca Xfree86 4.4 je promijenjena u odnosu na verzije do 4.3, te je ona sada GPL (Genereal Public

924/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima X window system

Licence) nekompatibilna. Taj potez je podigao dosta praine te je i jo uvijek tema rasprava i previranja na temu dali je Xfree86 4.4. doista GPL nekompatibilan ili to nije tako. No kako god bile u ovom trenutku veliki Linux distributeri nisu sa odobravanjem prihvatili Xfree86 te su se priklonili X.org organizaciji. X.org je organizacija nastala od strane Xfree86 razvojnih organizacija nezadovoljnih odstupanjem od GPL licence.

925/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Adriana Mihinec Domagoj vagelj

KDE

926/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

UVOD
K Desktop Environment jest mono grafiko okruje za UNIX radne stanice. KDE suelje kombinira jednostavnost uporabe, funkcionalnost i izvanredan grafiki dizajn sa teholokom superiornou UNIX operacijskog sustava. KDE je zbirka programa, tehnologija i dokumentacije koji pokuavaju olakati rad raunalnim korisnicima. KDE je prilagoen za rad na UNIX radnim stanicama. Kombinira jednostavnu upotrebu mrenih tehnologija i contemorary radnu filozofiju. Tvoritelji KDE-a su grupa software programera iz cijelog svijeta. Cilj ove grupe u razvoju besplatnog software-a jest, pruiti visoko kvalitetni software koji korisnicima daje jednostavnu kontrolu nad resursima njihovog raunala. KDE zadovoljava zahtjeve korisnika za jednostavnom radnom okolinom. Ideje koje se koriste da bi se postigao taj cilj su: pojaana komunikacija izmeu aplikacija, viekratno koritenje objekata, poboljani drag and drop, jedinstveni izgled itd. Na taj nain KDE nudi mnogo vie nego tradicionalni UNIX window manageri. Stabilnost i otvorenost su neke od kvaliteta UNIX-a, koje su ga uinile nezamjenjivim izborom raunalnih profesionalaca. Tokom godina, UNIX je bio prva platforma za raunalne servere i znanstvene institucije, no nije bio atraktivan za obine korisnike. KDE sve to mijenja.

927/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KDE Povijest
Od poetka razvitka UNIX operacijskog sustava postojao je jedan velik problem. Postojala je stabilna jezgra, dobre i mone aplikacije. Na nesreu, samo mali broj ljudi je mogao koristiti UNIX jer je on bio napisan za studente i profesionalce koji su ga prouavali due vrijeme. Primjer: standardna metoda za itanje USENET vijesti bila je:
find /var/spool/news name '[0-9]*' exec cat {} \; | more

Iako je bio relativno efikasan, nije se mogao nazvati jednostavnim za upotrebu. Sve to vodi ka tomu da UNIX nije bio za iru publiku. Povedena tom misli grupa od stotinjak programera predvoena Matthias Etrichom poinje raditi na KDE-u. Prva objava rada na KDE-u je bila 14.10.1996. Ve idue godine 20.10.1997. objavljena je prva verzija KDE 1.0 Beta1 iroj javnosti, gdje se postavilo zanimljivo pitanje: to znai slovo K u nazivu K Desktop Environment? Odgovor je isto tako zanimljiv: Nita. Jednostavno je tako nazvan bez nekog posebnog razloga. Nakon jo nekoliko Beta verzija 12.7.1998. objavljena je konana verzija KDE 1.0. Slijede mnogobrojne poboljane verzije KDE 1.0 sve dok 23.10.2000. nije objavljena skoro u potpunosti izmjenjena verzija KDE 2.0. koja je zapamena po tome to je lansirala Konqueror, Koffice, Kparts, KIO... Zaredale su ponovno mnogobrojne verzije 2.0., a 3.4.2003. lansirana je trea generacija KDE-a 3.0. sa mnogobrojnim poboljanjima. Zadnje objavljena verzija je KDE 3.3.2 (08.12.2004.). Iako ne pokuava zamijeniti tradicionalnu UNIX ljusku, KDE je alat koji e uiniti koritenje UNIX-a lakim, privui vie ljudi UNIX okruju. Uz KDE, koritenje UNIX-a postaje jednostavno.

928/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

to je KDE?
KDE je desktop okruenje, tj. to je kolekcija programa, tehnologija, i dokumentacije, koji omoguavaju laki rad na UNIX radnim stanicama. Filozofija KDE-a je besplatan software kako bi se razvilo kvalitetno okruje koje prua korisniku kontrolu raunalnih resursa. KDE je jedan veliki projekt koji se neprestano poboljava i raste. Glavne misli vodilje i filozofija ovog projekta su: o uini to odmah!, o koncentriraj se!, o koristi dostupne alate radije nego da izmilja ve postojee!, o Kada neto predlae umjesto trebali bi... koristi ja u... jer su ogromni planovi beskorisni ako se ne primi posla, o neprekidno poboljavaj, o poni sa razumnom razinom funkcionalnosti i podesivosti i onda poboljavaj tijekom vremena! KDE je fokusiran na korisnikove potrebe, dajui mu najbolje alate. Napravljen je najboljim raunalnim tehnologijama modernog doba koje ponajprije ukljuuju DCOP (Desktop Communication Protocol) i Kparts (the component object model), KIO (I/O libraries), XML baziranu GUI class te KHTML(standards compliant HTML rendering engine). Zajedno sa itavim KDE library programerskim sueljem DCOP/Kparts je postao konkurencija slinim tehnologijama, u prvom redu Microsoft MFC/COM/ActiveX tehnologiji. Radi tako dobro iz tog razloga to otvoreni razvojni model potie zaprimanje izvjea o grekama i zakrpe te potie vjete programere. KDE 1.1. je proglaen inovacijom godine na CeBIT-u '99. svjetskom najveem raunalnom show-u, a iste godine je proglaen najboljim izborom u Desktop Environment kategoriji od LinuxWorld's-a. KDE libraries pruaju mogunosti koje pomau programerima da zadre razinu sofisticiranosti koja se oekuje od moderne desktop aplikacije. Klase pruaju mogunost pristupa mreama kroz HTTP, FTP i dr. Protokole, drag-and-drop meu aplikacijama, interprocesorsku komunikaciju te internacionalizaciju i lokalizaciju funkcija.

929/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Velika zbirka widgets-a u KDE i Qt libraries, implementiranih u C++ klasama, su vrlo dobro dizajnirani i funkcionalni. Budui su implementirani u C++ klasama, mogue je modificirati (poboljati) njihovo ponaanje. Qt signal/slot mehanizam koji je odlina alternativa C callback funkcijama, omoguuje brzo povezivanje widgets-a u svrhu kreiranja grafikog korisnikog suelja. Libraries takoer pruaju klase za rukovanje stringovima, linked liste i druge strukture podataka, socket programiranje, interprocesorsku komunikaciju kao i funkcijski kompleksne widgets (npr. Web pretraiva). KDE libraries isto tako ukljuuju framework za ugraivanje jedne aplikacije u drugu (application embedding) nazvan Kparts koji omoguuje lako dodavanje funkcionalnosti aplikacije u vlastiti program. KDE office program, nazvan Koffice koristi ugraivanje aplikacija kako bi se stvarali dokumenti koji sadre tekst, grafike elemente, tablice, koji se svi nalaze na istom dokumentu. Konano, KDE prua smisao kreiranju aplikacija koje su mreno transparentne, to znai da korisnik moe otvarati i spremati dokumente koristei poznate tehnike. Bit mrene transparentnosti se provlai kroz cijeli KDE. Idealan primjer za to jest file manager, Konqueror. U njegovu prozoru se mogu pretraivati datoteke i manipulirati lokalnim datotekama, FTP stranicama, i HTTP listama direktorija koristei dobro znanu dokument/direktorij metaforu. DCOP messaging DCOP je client-to-client komunikacijski protokol sa serverom kao posrednikom preko X11ICE library standarda. Protokol podrava prolaz poruka kao i pozive procedura koristei XML-RPC do DCOP prolaza. Izvedbe za C/C++ i Phyton te Javu su dostupne. KIO Network Tehnology KIO implementira aplikacijske I/O u odvojene procese kako bi se omoguilo grafiko korisniko suelje bez blokada i to bez koritenja thread-ova. Klasa je mreno transparentna i lako se moe koristiti za pristup HTTP, FTP, POP, IMAP, NFS, SMB, LDAP, i lokalnim dokumentima. Jo bolje, ova fleksibilna modularna tehnologija doputa programeru da ubaci dodatne protokole kao npr. WebDAV, koji e tada automatski biti dostupan u svim KDE aplikacijama. KIO ujedno ugrauje trader koji moe locirati handler za specifini mimetype. Ti handleri tada mogu biti ugraeni u odgovarajue aplikacije koristei Kparts tehnologiju. Kparts komponente
930/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Kparts je KDE-ov komponentni objektni model koji doputa aplikaciji da ugradi drugu u sebe. Tehnologija obrauje sve aspekte ugraivanja, kao to je pozicioniranje toolbars-a i unoenje pravih menia kada se ugraena komponenta aktivira odnosno deaktivira. Kparts moe takoer suraivati sa KIO traderom u pronalasku handlera za pojedini mimetype ili uslugu/protokol. Ovu tehnologiju koriste specifino Koffice i Konqueror. XML-GUI Builder XML grafiko korisniko suelje(GUI) trai od XML-a da kreira pozicijske menije , toolbarsove i druge aspekte grafikog korisnikog suelja. Ova tehnologija daje korisniku i programeru na raspolaganje mogunost pojednostavljivanja configurability elemanata korisnikog suelja kroz aplikaciju i automatski zadovoljava KDE standarde i Style Guide baz potrebe za modifikacijom standarda. KHTML Rendering Engine KHTML je HTML 4.0 compliant rendering and drawing engine. Klasa u potpunosti podrava trenutne internet tehnologije kao to su JavaScript, Java, HTML 4.0, CSS-2 (Cascading Style Sheet), SSL(Secure Socket Layer for secure communications) and Netscape communicatore plugins (za pregledavanje tehnologija kao to su: Flash, RealAudio, RealVideo i sl.). KHTML klasa moe lako biti upotrebljena sa strane aplikacije bilo kao widgets (koristei normalno window roditeljstvo-pareting) ili kao komponenta (koristee Kparts tehnologiju). KHTML ima mogunost ugraivanja komponenta u sebe koristei Kparts tehnologiju.

931/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

O izgledu KDE-a
Pri pokretanju KDE-a prvo to emo uoiti jesu radna povrina i panel. Velika prednost KDE-a jest mogunost koritenja viestrukih radnih povrina. Na taj nain organizacija rada se viestruko poboljava. Svoje programe moemo staviti na razliite radne povrine koje moemo nazvati prema vrsti posla tako da se u svakom trenutku moemo lako snai to poveava uinkovitost rada. Vrlo je dobro koristiti viestruke radne povrine kada surfamo internetom umjesto da radimo i ef nenadano uleti u sobu?! Radne povrine mjenjamo jednostavno klikom na jednu od njih, dok dvostrukim klikom moemo promjeniti imena radnih povrina. Meu radnim povrinama mogue je razmjenjivati i prozore tako to na title bar prozora kliknemo deni gumb mia i odaberemo opciju To Desktop. Kada se KDE pokrene panel je smjeten na dnu ekrana. Odavde se pokreu programi i prelazi se u virtualne radne povrine. K gumb je najvaniji dio radne povrine, preko njega se dolazi do veine instaliranih aplikacija. Na panelu se nalaze i gumbi nazvani One, Two, Three i Four koji predstavljaju virtualne radne povrine. Koritenje viestrukih radnih povrina je jedno od najmonijih orua KDE-a i X window sistema. Icon bar predstavlja preice do esto koritenih programa, nalazi se odmah do K gumba, a korisnik moe sam postavljati ili micati ikone sa iconbar-a.

Trenutni sadraj KDE-a: aRts: program za reprodukciju zvuka KDE-Libs: razne run time libraries KDE-Base: osnovni elementi (window manager, desktop, panel, Konqueror) KDE-Network: Knode, KNewsTicker, Kppp KDE-Pim: Kmail, KadressBook, Korganizer, KPilot KDE-Grafics: grafike aplikacije kao to su KDIV, KGhostview, Kpaint KDE-Multimedia: Noatun, Kmidi, KSCD KDE-Utilities: Kedit, Kcalc, KhexEdit, Knotes KDE-Edu: programi namijenjeni obrazovanju KDE-Games: Kasteroids, Kpat, Ktetris KDE-Toys: zanimljive stvari KDE-Addons: dodaci za Konqueror, Kate, Kicker i Noatun

932/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KDE-Artwork: Dodatne ikone, stilovi, podloge, uvari ekrana i window dekoracije KDE-Admin: raznoliki alati i pomo sistemskoj administraciji KDE-SDK: skripte i alati koji pojednostavljuju razvoj KDE aplikacija KOffice: integrirano office okruje KDevelop: C/C++ integrirano razvojno okruje Quanta: razvojni alat za web stranice

933/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KAKO KDE RADI?


KDE ima jednostavan IPC mehanizam nazvan KWMcom koji je (bio!) koriten za komunikaciju panela i window manager-a. Poruke su se proputale preko X Atoms-a. Zbog toga je proputanje ogranieno u veliini i kompleksnosti podataka koji mogu biti proputeni (X Atoms moraju biti maleni da bi sauvali svoju uinkovitost). CORBA se smatrala boljom idejom, uinkovitije IPC/RPC rjeenje. Meutim, kroz godine rada pokazalo se da je rad sa CORBA-om spor i memorijski naporan. Ono to je zaista bilo potrebno jest jednostavan protokol sa osnovnom autorizacijom, koji nee raditi niti upola onoliko koliko je radila CORBA ali e biti napredniji kada su u pitanju jednostavniji zadaci. Primjer takvog jednostavnog zadatka mogao bi biti aplikacija koja alje poruku panelu: Ja sam poela sa radom, prestani prikazivati 'Aplication starting' wait state ili na primjer kada neka aplikacija pita da li postoji koja pokrenuta aplikacija sa njenim imenom. Taj problem je naveo na stvaranje novog protokola nazvanog DCOP Desktop Communication Protocol. DCOP jest jednostavan IPC/RPC mehanizam namjenjen radu preko socket-a, bilo to Unix domain socket ili tcp/ip socket. DCOP je nainjen na vrhu Inter Client Exchange(ICE) protokola koji standardno dolazi kao dio X11R6 i nadalje. Ujedno ovisi i o Qt-u no povrh toga ne ovisi niti o jednom drugom library-u. Zbog toga je vrlo uinkovit i lako se povezuje sa svim KDE aplikacijama sa malim overhead-om. Model rada DCOP-a je vrlo jednostavan. Svaka aplikacija koja koristi DCOP je klijent. One meusobno komuniciraju putem DCOP servera koji radi poput prometnika prosljeujui poruke/pozive na prava odredita. Svi klijenti su peer jedan drugome. Kod DCOP protokola mogue su dvije vrste akcija: alji i zaboravi poruke koje ne blokiraju i pozivi koji blokiraju ekajui da se neki podatak vrati. Bilo koji podatak koji se alje je serijaliziran koristei QDataStream operatore dostupne u svim Qt klasama.

934/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Uspostava veze
KApplication je uspostavila metodu nazvanu KApplication::dcopClient() koja vraa pointer na DCOPClient instancu. Prvi puta kada se metoda pozove, kreirat e se klijentska klasa. DCOPClients imaju jedinstvene identifikatore koji nose sa sobom a koji ovise o tome to e KApplication::name() vratiti. Ustvari, ako postoji samo jedinstvena instanca programa koji je pokrenut, appId e biti jednak KApplication::name(). Kako bi se stvarno pokrenula DCOP komunikacija mora se koristiti DCOPClient::attach(). Ovo e rezultirati vezom sa DCOP serverom. Ako nema servera ili ako se pojavi bilo kakva greka attach e vratitit false. KApplication e primjetiti dcop signal i prikazati e se odgovarajui msgbox sa opisom greke. Nakon to je uspjela veza sa serverom, sljedei korak je registracija appId-a kako bi server znao o kome se radi, u protivnom komunikacija je anonimna. Kako bi se registracija izvrila potrebno je uiniti sljedee: DCOPClient::registerAs(const QCString &ime). U sluaju da se elimo prekinuti rad moramo napravitit detach, pozivajui funkciju DCOPClient::detach(). Ako nakon toga ponovno elimo napraviti attach moramo se i reregistrirati. Ako samo elimo promjeniti Id pod kojim smo registrirani pozivamo funkciju DCOPClient::registerAs() sa novim imenom. KUniqueApplication se automatski registrira na DCOP, pa ako koristimo KUniqueApplication ne moramo raditi attach niti register jer je to ve uinjeno.

935/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Slanje podataka na udaljenu aplikaciju


Da bi se komunikacija stvarno ostvarila moe se koristiti jedna od dvije mogunosti: ili pozvati na slanje ili koristiti zovi metodu. Obje metode zahtjevaju tri identifikacijska parametra: identifikator aplikacije, udaljeni objekat i udaljena funkcija. Slanje je asinkrono. Slanje zahtjeva jedan, a zovi dva podatkovna parametra. Udaljeni objekat mora biti specificiran prema hijerarhiji tj. ako se objekt koji traimo zove cObj i ako je on child objekt od aObj, onda e referenca na traeni objekat izgledati ovako: aObj/cObj. Funkcije se isto tako moraju opisati u potpunosti tj. ako traimo funkciju fja koja prima integer onda moramo to naglasiti: fja(int). U svrhu stvarnog dobivanja podataka od udaljenog klijenta moemo koristiti neto slino ovome:
QbyteArray data; QdataStream arg(data, IO_WriteOnly); arg << 5; if (!client->send(someAppId, fooObject/barObject, doIt(int), data)) qDebug(there was some error using DCOP.);

936/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Dobivanje podataka putem DCOP-a


Trenutno pravi put dobivanju podataka od DCOP-a jest umnoiti nasljee od klase koju smo nasljedili kao i DCOPObject klase. DCOPObject prua jednu vrlo vanu metodu: DCOPObject::process(). Ovo je ista virtualna metoda koju moramo implementirati kako bi procesuirali DCOP poruke koje primamo. Primjer implementacije:

bool BarObject::process(const QCString &fun, const QbyteArray &data, QCString &replyType, QbyteArray &replyData) { if (fun == doIt(int)) { QdataStream arg(data, IO_ReadOnly); int i; // parameter arg >> i; Qstring result = self->doIt (i); QdataStream reply(replyData, IO_WriteOnly); reply << result; replyType = Qstring; return true; } else { qDebug(unknown function call to BarObject::process()); return false; } }

937/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Procesuiranje dolaznih poruka sa transakcijom


Ako je aplikacija u mogunosti procesuirati pozive funkcija istog trena kada oni dou onda je kod sa prethodne stranice sve to je potrebno. No, ako elimo da naa aplikacija procesuira kompleksnije zadatke moemo eljeti da rezultate poaljemo nekada kasnije kada e nam to odgovarati. Da bi to uinili moramo upitati svog DCOPClient-a za transakcijski Id. Tada se moemo vratititi iz funkcije koja je u tijeku izvoenja i kada rezultati postanu dostupni vratiti se na izvoenje transakcije. U meuvremenu naa aplikacija moe dobivati pozive DCOP funkcija drugih klijenata. Primjer:
bool BarObject::process(const QCString &fun, const QbyteArray &data, QCString &, QbyteArray &) { if (fun == doIt(int)) { QdataStream arg(data, IO_ReadOnly); int i; // parameter arg >> i; Qstring result = self->doIt(i); DCOPClientTransaction *myTransaction; myTransaction = kapp->dcopClient()->beginTransaction(); // start processing... // Calls slotProcessingDone when finished. startProcessing( myTransaction, i); return true; } else { qDebug(unknown function call to BarObject::process()); return false; } } slotProcessingDone(DCOPClientTransaction *myTransaction, const Qstring &result) { QCString replyType = Qstring; QbyteArray replyData; QdataStream reply(replyData, IO_WriteOnly); reply << result; kapp->dcopClient()->endTransaction( myTransaction, replyType, replyData ); }

938/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

DCOP signali
Ponekad pojedina komponenta raunala eli poslati potvrdu putem DCOP-a drugoj komponenti ali ne zna zapravo koja komponenta e biti zainteresirana za te potvrde. Kako bi se to omoguilo smiljeni su DCOP signali. DCOP signali su vrlo slini Qt signalima. DCOP signal se moe spojiti na DCOP funkcije. Kada god se DCOP signal emitira, DCOP funkcija na koju je signal spojen je pozvana. DCOP signali su kao i Qt signali jednosmjerni, ne mogu vratiti vrijednost. DCOP signali potjeu iz DCOP Object/DCOP Cliant kombinacije. Mogu se spojiti na funkciju druge DCOP Object/DCOP Cliant kombinacije. Postoje dvije glavne razlike izmeu veza Qt signala i veza DCOP signala. U DCOP-u , za razliku od Qt-a, signalne veze mogu imati anonimnog poiljaoca, i te veze mogu biti nonvolatile. Sa DCOP-om moe se spojiti signal bez specifikacije DCOP objekta ili klijenta. U tom sluaju signali od bilo kojeg DCOP objekta i/ili DCOP klijenta e biti isporueni. Ovo doputa specifikaciju pojedinih dogaaja bez poznavanja objekta koji e prouzroiti dogaaj. Druga znaajka DCOP su tzv. Non-volatile veze. Sa Qt signalnim vezama, veze se briu u sluaju da se izbrie primaoc ili poiljaoc signala. Volatile DCOP veza e se ponaati isto tako, no non-volatile DCOP signalna veza nee biti izbrisana u sluaju da se izbriu poiljaoc ili primaoc. Jednom kada se objekt kreira sa isti imenom kao i originalni objekt poiljaoc, veza e se povratiti(restore). Nema razlike u sluaju da se objekt primaoc izbrie, u tom sluaju signalna veza e se uvijek izbrisati. Primaoc moe kreirati non-volatile vezu bez obzira da li poiljaoc uope kreiran, to su tzv. anonimne DCOP veze i one bi u pravilu uvijek trebale biti anonimne. Sljedei primjer pokazuje kako Klauncher emitira signal svaki puta kada dobije potvrdu da se zavrila aplikacija pokrenuta sa Klauncherom

QbyteArray params; QdataStream stream(params, IO_WriteOnly); stream << pid; kapp->dcopClient()->emitDCOPSignal(clientDied(pid_t), params);

Task manager KDE panela se spaja na signal, koristi anonimnu non-volatile vezu.
connectDCOPSignal(0, 0, clientDied(pid_t), clientDied(pid_t), false);

939/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Spaja clientDied(pid_t) signal na svoj clientDied(pid_t) DCOP funkcije. U tom sluaju signal i funkcija imaju isto ime. Funkcija koja prima moe ignorirati jedan ili vie argumenata signala.

940/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Koritenje DCOPidl kompajlera


DCOPidl ini podeavanje DCOP servera jednostavnim. Umjesto da se implementira proces() methoda i unmarshalling parameteri runo, taj posao za nas moe uiniti dcopidl, koji kreira potreban kod umjesto nas. To nam ujedno doputa opisivanje suelja za klase u jednom odvojenom header dokumentu. Pisanje u IDL dokument je vrlo slino pisanju C++ header dokumenta. Iznimka je kljuna rije 'ASYNC'. Ona indicira da e poziv na funkciju biti procesuiran asinkrono. Za C++ kompajler, to je 'void'.
#ifndef MY_INTERFACE_H #define MY_INTERFACE_H #include <dcopobject.h> class MyInterface : virtual public DCOPObject { K_DCOP k_dcop: virtual ASYNC myAsynchronousMethod(Qstring someParameter) = 0; virtual Qrect mySynchronousMethod() = 0; }; #endif

Kao to se vidi, kreirana je apstraktna bazna klasa, koja je virtualno nasljeena od DCOPObject. Ako koristimo standardne KDE building skripte, onda se ovaj dokument jednostavno dodaje u sources direktorij. Building skripte e koristiti dcopidl za parsiranje MyInterface.h, konvertirajui ga u XML pa dobijemo MyInterface.kidl. Nadalje, dokument nazvan MyInterface_skel.cpp e biti automatski kreiran, kompajliran i linkan. Sljedee to treba uiniti je izabrati koje klase e biti implementirane u suelje opisano u MyInterface.h. Suprotne nasljeu ovih klasa, a takve da virtualno nasljeuju od MyInterface. Zatim treba dodati deklaraciju u klasno suelje slino onome u MyInterface.h, ali virtualno.
Class MyClass: public Qobject, virtual public MyInterface

941/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb { Q_OBJECT public: MyClass(); ~MyClass();

Programski alati na Unix raunalima Unix desktop system

ASYNC myAsynchronousMethod(Qstring someParameter); Qrect mySynchronousMethod(); };

U implementaciji nae klase moramo moramo eksplicitno inicijalizirati one klase od kojih nasljeujemo. Ovo je naravno dobra praksa, ali moramo rei DCOPObject-u ime suelja koje implementirmo. Primjer:
MyClass::MyClass() : Qobject(), DCOPObject(MyInterface) { // biloto... }

Sada moemo jednostavno implementirati deklarirane metode u suelje, onako kako bi to i inae radili. Primjer:
void MyClass::myAsynchronousMethod(Qstring someParameter) { qDebug(myAsyncMethod called with param ` + someParameter + '); }

No mogli smo isto tako definirati k_dcop dio direktno u MyClass:


class MyClass: public Qobject, virtual public DCOPObject { Q_OBJECT K_DCOP public: MyClass(); ~MyClass(); k_dcop: ASYNC myAsynchronousMethod(Qstring someParameter); Qrect mySynchronousMethod(); };

942/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Meu korisnika komunikacija


Ponekad je zanimljivo koristiti DCOP za procese koji pripadaju razliitim korisnicima, Frontend proces koji radi sa korisnikim Id-om i backend proces koji radi kao root. Da bi radili ovako moramo uiniti sljedee: 1. oba procesa moraju raditi pod istim serverom 2. mora biti osigurana valjana autorizacija to se tie prvog koraka, serverovu adresu jednostavno moramo prosljediti drugom procesu. to se pak tie drugog koraka da bi autorizirali proces moemo koristiti ICEAUTHORITY varijablu kojim kaemo procesu gdje moe nai informacije o autorizaciji. Primjeujemo kako ovaj postupak implicira kako je drugi proces u mogunosti itati dokument o autorizaciji, pa e to raditi samo ako je drugi proces postavljen kao root. Ako elimo da radi kao drugi korisnik a ne kao root, moramo pristupiti na slian nain kao to kdesu ini sa xauth-om. Ustvari pokazuje se da je jako korisno dodati DCOP podrku u kdesu!! Primjer:
ICEAUTHORITY=~user/.ICEauthority kdesu root c kcmroot dcopserver `cat ~user/.DCOPserver

Nakon to je kdesu dobio root lozinku, pokree kcmroot kao root, i razgovara sa korisnikovim dcop serverom. Vano je napomenuti da DCOP komunikacija nije zatiena, pa nije zahvalno slati vane informacije na ovaj nain.

943/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KDE XmlRpc
KDE XmlRpc doputa da klijent implementiran na gotovo bilo kojem programskom jeziku (python, perl, java, itd) ili na bilo kojoj platformi (Unix, Windows, MacOS) pristupi KDE DCOP klijentu (serveru). Niti klijent, a niti server ne treba dodatne modifikacije. Budui su sve KDE aplikacije (ili e to postati) DCOP klijen/server, to efektivno znai da se sve KDE aplikacije mogu manipulirati (skriptati) od strane bilo kojeg jezika na bilo kojoj platformi. XmlRpc je standardni nain implementacije poziva udaljenih procedura (RPC) koristei XML i HTTP. Njegov cilj je koristiti ugodne alate za sve kako bi implementacija bila to jednostavnija. Kako bi se to ostvarilo koristi XML za oznaavanje svih poziva metoda (i parametara) kao i povratnih vrijednosti. Nakon toga koristi HTTP za transfer poziva metoda. Prednost ovog pristupa je ta, to skoro svaki pristojan jezik (bilo skriptni ili ne) ima jednostavan pristup koritenju XML parsera i HTTP klijentima. Ovo ini implementaciju za veinu XmlRpc dijelova relativno jednostavnom. Iako je XmlRpc stvarno jednostavan za koritenje, bilo bi besmisleno oekivati da e se ovaj pristup implementirati u sve aplikacije, kada ve postoji jednostavan za koritenje RPC/IPC protokol DCOP. Kao rjeenje na ovo KDE ima XmlRpc DCOP vrata. KDE XmlRpc Deamon kxmlrpcd je ustvari web server koji prevodi XmlRpc zahtjeve u DCOP pozive i obrnuto. Ovo rjeenje je mnogo bolje od drugog koje je takoer bilo opcija, a ija je ideja bila da je prevoenje transparentno izmeu dva protokola. Tako i XmlRpc klijent i DCOP server oboje misle kako komuniciraju pomou svog protokola sa deamonom. Kako bi se ostvarila ova vrsta komunikacije potrebno je sljedee: provjeriti da je port kxmlrpcd ukljuen auth token za autorizaciju ime DCOP servera kojem elimo pristupiti ime DCOP objekta kojem elimo pristupiti Posljednje dvije stvari moemo saznati na jednostavan nain, npr. ako elimo pristupiti KDesktop Execute Command dijalogu vidjeli bi smo kako je ime servera 'kdesktop', a ime objekta 'KDesktopIface'. Port i auth token se mogu nai u dokumentu $HOME/.kxmlrpcd. Ako je komunikacija lokalnog karaktera sve to treba uiniti jest parsirati file, no ako je komunikacija udaljena te informacije moramo dobaviti na neki drugi nain. Neke mogunosti su mountiranje home direktorija sa NFS ili SMB ili poslati sebi e-mail sa tim vrijednostima ili staviti te vrijednosti na FTP server ili kako god... Auth token je 16 bitni

944/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

string koji mora popratiti sve dolazne XmlRpc zahtjeve. Prvi parametar upozivu metode mora biti string i to auth token string. Osim ovog protokol je isti kao i standard. Kod KDE-a XmlRpc se ne koristi kao server, umjesto toga kreira se DCOP server. I to je u biti to! Ako je neka aplikacija postavljena kao DCOP server automatski ima mogunost komunicirati sa XmlRps klijentom. No, postoji jedno malo ogranienje. Mora se propustiti samo QCString kao tip stringa i koritenje <struct> i <array> je ogranieno.

#!/bin/sh port=`sed -e 's/,.*//' ~/.kxmlrpcd` auth=`sed -e 's/.*,//' ~/.kxmlrpcd` cat > cmd.xml <<EOF <?xml version="1.0"?> <methodCall> <methodName>KDesktopIface.popupExecuteCommand</methodName> <params> <param> <value>$auth</value> </param> </params> </methodCall> EOF length=`wc -c cmd.xml | sed -e 's/cmd.xml//;s/ //g'` cat > head.xml <<EOF POST /kdesktop HTTP/1.0 Content-Type: text/xml Content-length: $length EOF ( echo open localhost $port sleep 1 cat head.xml cmd.xml ) | telnet -8E

Primjer kako KDesktop podie Execute Command dijalog Ovo znai da se moe skriptati bilo koja KDE aplikacija koristei samo /bin/sh i telnet!

945/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KDE BASE KDE Base


Svrha KDE Base-a jest da specificira izgled i osjeaj KDE aplikacija, tj. stvorena su pravila, pomou kojih se programeru omoguava izrada suelja aplikacija koje e biti u skladu sa izgledom KDE-a. Ova pravila se ne nameu korisniku i on ih ne mora potivati ako ne eli, no dunost je svakog dizajnera-programera da njegova aplikacija ima pristojno suelje. Primjer: Knotes program se sastoji samo od radne povrine. On je dizajniran tako da izgledom podsjea na dobro poznati bloki: Post-it:

Iako Knotes nema menubar ili toolbar ostatak programa (pri tome se misli na dijaloge i upotrebu mia) bi trebao potivati dizajn KDE-a.

946/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Grafiko korisniko suelje


Veina modernih aplikacija ima vrlo slian layout od svog glavnog prozra. Ti prozori nude izgled dokumenta i kontrole potrebne za manipulaciju njima. Kontrole za pojedine akcije su dostupne kroz menie sa preicama kroz toolbars i tipkovnicu. Izvjea o tome to se dogaa sa dokumentom su obino postavljena na statusnu traku. Ovakav nain prikazivanja aplikacija je toliko uobiajen da se koristi i za prikazivanje aplikacija koje su dokumenti samo u irem smislu znaenja rijei dokument, npr. File manager. Da bi se neki software mogao nazvati user friendly mora zadovoljavati neke kriterije. Prema nekim izvorima, veina, tj. 80 90% dananjeg software-a ne zadovoljava te kriterije. Ti kriteriji su: Task suitable: Ne smije pruati previe funkcija jer e zbuniti korisnika ili e naruiti funkcionalnost samog software-a Razumljiv: Kada korisnik upotrebljava software po prvi puta morao bi razumjeti o emu se radi i kako ga koristiti Navigacija: Korisnik bi u svakom trenutku trebao znati gdje se nalazi. Sukladan oekivanjima: Aplikacija bi trebala biti konzistentna svakim svojim dijelom Tolerantan pogrekama: Aplikacija bi trebala omoguiti funkciju undo bez da se program srui. Feedback- rich: Aplikacija bi u svakom trenutku korisniku trebala davati povratne informacije o tome to se dogaa s obzirom na uinjene akcije. Kada govorimo o korisnikom suelju ne moemo zaobii MDI i SDI. MDI (Multi Document Interface) je usvojen prije nekoliko godina i uvelike ga je koristio Microsoft za svoje Windows proizvode. MDI koncept predstavlja jedan glavni prozor mother koji sadri cijelu aplikaciju pri emu mislimo na prozor dokumenta, prozor tool bara, prozor za pomo i sl. Zapravo sve to aplikacija radi biti e prikazano u glavnom mother prozoru. Najbolji primjer za to je File manager iz Windows 3.1. MDI olakava ivot programerima i dugo se smatrao najboljim nainom rada. No, tehnologija je uznapredovala i danas se smatra kako MDI ograniava rad korisnika. KDE aplikacije, ak tovie sve aplikacije bazirane na X-u, ne

947/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

koriste MDI, ve SDI Single Document Interface. SDI aplikacije nemaju glavni mother prozor koji sadri sve ostale prozore u sebi. Prozori aplikacija su svi odreda dijeca X root prozora to znai da su pod kontrolom window mamagera i mogu se pomicati po desktop okruenju prema eljama korisnika. Ako aplikacija mora otvoriti dodatni prozor on je takoer otvoren kao dijete root prozora. Postoji nekoliko nivoa SDI-a. Neki ljudi vjeruju da je prvi, poznat kao Pure SDI, jedini potreban, i da sve aplikacije mogu biti napisane koristei ovaj model. Ovo moe i ne mora biti istina, po ovom pitanju se vode debate. Vrijeme, i rad programera, e presuditi, no u meuvremenu, ovaj stil e opiasati ostale nivoe SDI, poznate kao Cooperating SDI i Controlled SDI. Kreatori aplikacija su ohrabreni koristiti Pure SDI model, te koriste ostale modele jedino kada se pojavi ozbiljan problem.

Suelje koje koristi KDE je bazirano na SDI the Single Document Interface. SDI pristup se koristi u svim KDE aplikacijama. isti SDI je preferirani model, i trebao bi se koristiti kada god je to mogue. Kada isti SDI model nije prihvatljiv programer bi trebao koristiti kooperacijski SDI model, za aplikacije koje moraju dijeliti konfiguracijske informacije izmeu instanca aplikacija, ili kontrolni SDI model za aplikacije koje zahtjevaju vie otvorenih dokumenata nego to ih je mogue prikazati na ekranu.

948/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

isto SDI suelje


Kod istog SDI suelja, jedan prozor sadri tono jedan dokument i taj jedan dokument jest cijela ta aplikacija. Ne postoji glavni mother prozor koji sve nadzire, a prozori koji su naizgled pod upravljanjem neke aplikacije nemaju veze sa drugim prozorima. Jedan prozor je jedna aplikacija gdje svaki ima svoj Quit gumb koji zatvara taj prozor. Zatvaranje jednog prozora nema nikakvog efekta na ostale otvorene prozore. Ispod povrine, mogue je da jedan proces upravlja svim virtualnim terminalima, no to je skriveno od korisnika i on ne moe znati. Postoji niz pravila koja moraju biti zadovoljena kako bi neki prozor (aplikacija) mogao biti nazvan istim SDI sueljem: Svaki prozor bi trebao imati potpuni meni aplikacije. Naredba New bi trebala otvoriti novi prozor sa praznim dokumentom u sebi ili sa kopijom trenutnog dokumenta u prozoru. Dokument u ovom kontekstu predstavlja novi shell, novi (bez title-a) tekst dokument, novu (bez title-a) sliku, itd. KDE aplikacije nebi trebale imati praznih prozora. Svaki prozor treba sadravati dokument koji moe biti prazan. Gledano ispod povrine aplikacija moe imati otvoren svoj drugi prozor ili taj prozor moe biti fork od drugog procesa koji kontrolira novi prozor ali to su implementacijski detalji koje korisnik ne zna i ne mora mariti za njih. Ako ista SDI aplikacija ima ikonu onda bi svi prozori koji se otvaraju kao npr. prozor za pomo, dijalozi toolbars i sl. Takoer trebali imati istu ikonu. Window manager bi trebao prezentirati samo jednu ikonu koja bi trebala vratiti sve prozore kada se aktivira. Kada god se ista SDI aplikacija otvara trebala bi provjeriti postoji li njena kopija koja je ve pokrenuta. Ako je takva kopija pronaena, to bi trebala biti kopija koja predstavlja novu akciju. Ovo je napravljeno zbog toga da veliki programi kao to je Wordprocessor nebi otvarali svoje kopije i tako iskoristili svu korisnikovu memoriju. Postoje aplikacije koje zbog tehnikih razloga moraju zaobii ovo pravilo, to je u redu no, u veini sluajeva trebalo bi ga potivati. Ako korisnik eli otvoriti isti dokument dvaput u naizgled razliitim aplikacijama, koje su zapravo ista aplikacija, to im mora biti omogueno. Ponekada korisnik eli initi stvari koje su zdravom razumu udne no, svejedno mu aplikacija to mora dopustiti. Trebala bi postojati jedna instanca dodatnog prozora kao to je toolbar po prozoru, po korisnikovom zahtjevu. Dva aplikacijska prozora ne mogu dijeliti istu traku s alatima iako je

949/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

to tehniki mogue, zbog naina na koji aplikacija treba biti implementirana. Drag and drop operacija nad prozorom treba pozvati otvaranje dokumenta koji se vue u tom prozoru.

950/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Kooperacijsko SDI suelje


Zagovornici istog SDI suelja tvrde kako je isto SDI suelje sve to je potrebno. No, postoje situacije koje govore o komplikacijama i ogranienjima istog SDI suelja prilikom rjeavanja nekih problema. Jedan od potencijalnih problema je kada jedna aplikacija eli promijeniti znaajke koje koristi neka druga instanca aplikacije. Npr. zamislimo web browser kao istu SDI aplikaciju, u kojoj svaki prozor moe sadravati jednu web stranicu. Svaki prozor radi u izolaciji od drguih, i on je kao takav aplikacija za sebe, neovisna od ostalih prozora. Ovaj model e dobro raditi, no to e se dogoditi kada e korisnik eljeti promijeniti neke parametre kao npr. bookmark ili font? Sada dolazi do izraaja programer koji je odluio da li e se parametri promijeniti u samo jednom prozoru ili u svima. No ako je odlueno kako bi promjena trebala zahvatiti sve prozore koji su pokrenuti od odreene aplkacije, isto SDI suelje e se sruiti. U prvi plan sada dolazi kooperacijsko SDI suelje koje je sagraeno na istom SDI modelu suelja ali su dodane neke znaajke s kojima se mogu dopustiti neke situacije koje isto SDI suelje zabranjuje. Kooperacijsko SDI suelje je preuzelo pravila istog SDI suelja sa sljedeim promjenama: Svaki prozor jo uvijek predstavlja jedan dokument, a svaki dokument jo uvijek predstavlja jednu instancu aplikacije. Na svakom prozoru je meni koji funkcionira kao kod istog SDI suelja. Razlika je u tome to je svaki prozor koji radi pod nekom aplikacijom svjestan drugih prozora koji rade pod tom istom aplikacijom, a tu svjesnost aplikacija moe iskoristiti. Aplikacija moe imati dodatni meni na menubar-u oznaen sa Windows. Ovaj meni e sadravati listu drugih dokumenata koji su otvoreni u drugim prozorima, a odabir jednog od njih e rezultirati podizanjem prozora u kojem je taj dokument. Windows meni moe ujedno sadravati i Close all opciju. Ova opcija bi trebala biti smjetena na dnu menia i trebala bi biti odvojena od ostalih opcija tog menia, a kao to sam naziv kae trebala bi zatvarati sve gore izlistane dokumente i njihove prozore.

951/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Kontrolirano SDI suelje


isto i kooperacijsko SDI suelje imaju jednu odliku koju mnogi smatraju problemom. Ako aplikacija eli otvoriti vie dokumenata nego to ima dostupnih prozora, mora se stvoriti neka vrsta kontrole mora preuzeti otvorene dokumente. Npr. zamislimo da je aplikacija lansirana nekom zapovjedi kao to je Kapp *.jpg a u radnom direktoriju postoji 2000 .jpg dokumenata. Pod istim ili kooperacijskim sueljem otvorilo bi se 2000 prozora to nije dobro. Rjeenje bi bilo da imamo neku vrstu kontrolnog prozora u kojem bi bili svi dokumenti koji su otvoreni i spremni na rad. U prethodnom primjeru to bi izgledalo tako to bi bilo izmeu 0 i 2000 otvorenih dokumenata i jedan otvoreni prozor koji nadrize te dokumente. Ovakvo suelje poznato je pod nazivom kontrolirano SDI suelje. Ovdje je vano shvatiti kako kontrolni prozor ne ograniava u nijednom smislu kretanja prozora koje kontrolira. Ovo nije MDI suelje, ovo je SDI suelje koje koristi kontrolni mehanizam. Kontrolni SDI mmodel je sagraen na kooperacijskom SDI modelu te podrava sve znaajke kooperacijskog modela, no ima i neke svoje: Kontrolni prozor bi trebao biti nazvan <App> - Control Kontrolni prozor bi trebao imati meni koji e biti specifian za njegovu namjenu tj. File meni bi trebao sadravati opciju New entry ali ne i opciju Open. Opcija Quit zatvara sve dokumente u kontrolnom prozoru (uz upite o spremanju promjena) i izlazi iz cjelokupne aplikacije. U instancama gdje je kontrolni SDI model prihvatljiviji aplikacijama nego kooperacijski SDI model, sadraj kontrolnog prozora bi trebao biti vie-manje oit. No, svejedno bi se trebala voditi briga o tome da se ne stavljaju kontrole koje su specifine za pojedini prozor u kontrolni prozor. Primjer za to mogao bi biti Gimp 1.1 koji ima menubar i toolbar prihvatljiv za sve dokumente u kontrolnom prozoru. Kada bi Gimp 1.1 bio KDE aplikacija svaki prozor/dokument bi imao svoj vlastiti meni i toolbar, a kontrolni prozor bi sadravao globalni konfiguracijski meni, listu trenutno otvorenih prozora ili moda jednostavan splash ekran u stilu Wordperfect 8. Prva opcija u prozorskom meniu svakog prozora bi trebala biti kontrolni prozor.

952/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Konqueror
Konqueror je file manager za K Desktop okruenje. Podrava osnovne file managenent na lokalnom UNIX file sistemu, poevi od jednostavnih izree/kopiraj naljepi operacija do naprednih kako udaljenih tako i lokalnih mrenih operacija. Na prvi pogled Konqueror izgleda kao normalni file manager, no njegove mogunosti ga ine tako zanimljivim. Prikazuje dokumente pomou ikona ili stabla, doputa kopiranje micanje i brisanje drag and drop tehnikom, prikazuje znaajke dokumenata, u njemu se mogu prikazivati tablice, prezentacije, web stranice, te svi dokumenti nainjeni u Koffice-u. Jako zanimljiva znaajka Konquerora je da on prua automatski update direktorija, tako naprimjer ako kreiramo novi dokument u direktoriju koji se trenutno gleda u Konqueroru nemoramo osvjevati ve e se novi dokument automatski pojaviti na ekranu. Isto se dogaa i sa izbrisanim dokumentima. Konqueror je osnova za sve novije KDE tehnologije, od KIO-a do komponenta ugraenih sa KPart sueljem, te predstavlja aplikaciju sa najveim stupnjem podesivosti, tako da ju svaki korisnk moe podesiti prema svojim potrebama. To omoguavaju XML konfiguracijski dokumenti za Konqueror. Kako se i cijelo Knqueror odijelo moe podesiti pomou XML-a, korisnik moe prikazati cijelu aplikaciju kako njemu odgovara (za korisnike prijenosnih raunala male ikone i sl.). Konqueror je Open Source web preglednik koji podrava HTML 4.0, Java aplete, Java Script, CSS1 i dijelom CSS2, kao i Netscape plugin-ove. Konqueror koristi khtml. Ovaj engine je implementiran u Kpart i kao takav se moe koristiti u drugim KDE programima. Konqueror je univerzalna view aplikacija, koja je u stanju ugraivati u sebe dokumente smo za itanje bez pokretanja drugih aplikacija. Moe prikazivati slike, KOffice dokumente, prezentacije, tablice i sl. Gledano sa tehnike strane zanimljivo je da ovi vieweri nisu dio Konquerora i nisu izraeni specifino za njega. Konqueror ugrauje komponente (dijelove) drugih aplikacija. Za svaki novi tip dokumenta koji elimo prikazivati u Konqueroru moramo samo napisati dio za view i ragistrirati ga sa desktop dokumentom, nema potrebe dirati Konqueror. Ugraene dijelove drugih aplikacija moemo pronai u library Kparts.

953/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KDE Network
KDE Network obuhvaa programe vezane uz mree, kako Internet tako i lokalne mree. U ovom poglavlju emo rei ukratko poneto o tim programima uz napomenu da neke neemo spominjati (koji nam se nisu inili toliko vani ili zastupljeni).

Kdict
Kdict je grafiki klijent za DICT protokol. Omoguava korisniku da pretrauje kroz bazu podataka kako bi naao pojedinu rije ili frazu, te mu tada prikazuje pogodnu definiciju.Kdict pojednostavljuje jednostavne ali isto tako i napredne upite. Lista odvojena separatorom predstavlja dobar nain za pretraivanje rijei koje imaju isto ili slino znaenje, a koje nam je napredan upit prikazao. Kdict svojim izgledom uvelike podsjea na web browser. U njega je implementirana naprijed/natrag tj back/forward tehnologija. Rijei koje su u listi a za koje elimo vidjeti znaenje moramo samo kliknuti i znaenje rijei e se prikazati analogno tome u web browseru je link. Kdict je u stanju raditi sa sadrajem clipboarda pa ga jednostavno moemo kombinirati sa web browserom ili text editorom. Ako je na raunalo postavljen firewall, ako raunalo nema pristup internetu ili ako je server koji se nalazi na dict.org prespor korisniku, korisnik moe postaviti svoj vlastiti lokalni server. Pri tome korisnik dobiva odreene prednosti kao to je mogunost dodavanja baza podataka.

KNewsTicker
KNewsTicker je dodatni programi za Kpanel, poznat jo i po nazivu Kicker, koji prua jednostavan pristup vijestima koje omoguuju stranice kao to su: SlashDot, Linux Weekly News, Frashmeat itd. Ovo je mogue na taj nain to KNewsTicker zatrai od stranice potreban RSS dokument koji sadri glavne vijesti kao i linkove na cijelokupne lanke. Takvi dokumenti su vrlo popularni u dananje vrijeme, a KNewsTicker sa sobom nosi popis stranica koje omoguavaju ovaku vrstu usluge. No, to su to RSS dokumenti? Ukratko moemo rei da su RSS dokumenti bazirani na XML-u kako bi se omoguio kontakt sa pojedinom stranicom. RSS se koristi kao simonim za Rich Site Summary, to nije ispravna definicija no daje nam ideju o emu se zapravo radi. RSS je kreiran od strane NetScape-a 1999 za potrebe njihove stranice my.netscape.com. Prva verzija putena u javnost je bila RSS 0.9. RSS je zamiljen kako bi na jednostavan nain
954/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

prosljeivao sadraj web stranica u obliku jednostavnih vijesti. Pojedina stranica prosljeduje svoje ime, adresu, naslovne vijesti te link koji vodi do cjelokupnog lanka. Te informacije zatim generira KNewsTicker. Do danas su izale brojne verzije RSS-a, zadnja je 2.0, no prve dvije verzije koriste se za ak 85% dokumenata koji se prosljeuju ovom tehnikom.

Kopete
Kopete je KDE-ov instant messaging (IM) klijent. Omoguava jednostavnu komunikaciju to prvenstveno znai da premouje zapreke koje stvaraju razliite IM sistemi.

kpf
KPF je alat koji prua jednostavno dijeljenje dokumenata koristei HTTP. Kpf je iskljuivo javni fileserver, to znai da nema ogranienja pristupa shared dokumentima. To u principu znai da dokumentu koji je postavljen za djeljenje moe pristupiti bilo tko. U samom poetku razvoja kpf-a njegova namjena je bila za dijeljnje dokumenata na IRC-a (Internet Relay Chat). Danas uvelike olakava dijeljenje dokumenata meu udaljenim korisnicima te u neku ruku zamjenjuje priloge kod slanja e-mail.

Kppp
Kppp je dialer i korisniko suelje prema shell programu pppd. Doputa interaktivno generiranje skripta i network podeavaja. Jednom kada se kppp spoji daje korisniku iroku lepezu statistika i biljei vrijeme provedeno online. Ugraeni terminal i skriptni generator olakava uspostavu veze i podeavanja. Uz kppp korisniku vie nije potreban dodatni terminal program kao to je seyon ili minicom. Ujedno prua stalno praenje telefonskog rauna.

KWiFiManager
KWiFiManager je skup alata koji omoguuju podeavanje wireless LAN PC-kartice na K desktop okruenje. Prua informacije o trenutnoj konekciji i doputa korisniku podeavanje ak do 4 razliite nezavisne konfiguracije koje mogu biti pokrenute prilikom pokretanja Kde-a. KWiFiManager podrava sve wireless LAN kartice koje koriste wireless extensions suelje, to ukljuuje i mnoge kartice koje podrava wlan-ng projekt.

955/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Pim KAddressBook
KAddressBook je glavna adresar-aplikacija za KDE. Budui je bazirana na kabc library, podrava resurse koji se mogu koristiti za podizanje i spremanje kontakata na mnogo razliitih lokacija, ne samo na local file sistem nego i LDAP server te SQL bazu podataka. Korisniko suelje izgledom podsjea na MS Outlook.

KAlarm
Kalarm je jedan koristan program pomou kojeg se mogu postavljati alarmi-poruke, slati e-mail poruke ili se moe narediti pokretanje programa u odreeno vrijeme.

KPilot
KPilot je aplikacija koja sinkronizira PlamPilot ili sline ureaje sa KDE desktopom kao to to ini HotSync za Windows. Moe sinkronizirati ugraene aplikacije.

Knode
Knode je jednostavan za koritenje ita vijesti. Omoguava itanje vijesti ak i poetnicima u KDE-u, no ujedno ima i naprednije funkcije za one upuenije. Knode je online ita ali uz pomo newsservera kao to je leafnode moe postati offline ita.

956/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KDE Grafics Kdiv


Kdiv je plugin za Kviewshell program koji doputa Kviewshall-u da prikazuje div dokumente (.div) koji su produkt TeX typesetting sistema. Kdiv podrava brojne ekstenzije DIV standarda npr PostScript grafike hiperlinkova.

KGhostView
GhostView prikazuje i printa PostScript (.ps, .eps) i Portable Document Format (.pdf) dokumente. PostScript je glavni jezik za opis strnica za printanje na UNIX sistemima i ova aplikacija se moe koristiti za prikazivanje materijala za printanje ili za itanje dokumenata online.

KView
KView je preglednik slika na KDE desktopu. U ovom programu mogue je gledati grafike razliitih formata kao to su PostScript, TIFF i sl. Spremanjem slike sa drugom ekstenzijom mogue je na jednostavna nain konvertirati slike u bilo kakve druge grafike formate. KView ujedno omoguuje jednostavne procese nad slikama kao to su suavanje/razvlaenje rotacija i filtriranje. Pomou KView programa mogue je postaviti sliku kao pozadinu ekrana ili kreirati svoj slideshow.

957/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KDE Utilities KdiscFree


KdiscFree prikazuje dostupne file devices ( hard disc particije, floppy i CD drives..), zajedno sa informacijama o njihovom kapacitetu, slobodnom prostoru, tip i mount pointu. Doputa i mountiranji ili unmontiranje drives-a i gledanje istih u file manageru. KdiscFree je slian Kcontrol Disk-Free modulu, no zauzima manje prostora na ekranu. Jako je koristan ako elimo imati KdiscFree dostupan na ekranu u svakom trenutku.

KEdit
Kedit je malen, jednostavan editor kao to je to dobro poznati Notepad na Windows sistemima. Pogodan je za upotrebu kod jednostavnijih zadataka ili kao jednostavan preglednik tekstualnih datoteka.

Kgpg
Kgpg je jednostavno suelje za GNUpg (poznat kao i gpg), snaan alat za enkripciju. Sa Kgpg alatom jednostavno je enkriptati i dekriptati dokumente i e-mail, to prua mnogo sigurniju komunikaciju. Kgpg je olakao ivot mnogim korisnicima UNIX operativnih sistema utoliko to se vie ne mora pamtiti sve gpg komande ve se enkripcija i dekripcija mogu izvriti sa nekoliko klikova miem.

958/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KDE Admin
KDE Admin je sveobuhvatni naziv za alate namjenjene administratorima.

Kcron
Kcron je aplikacija za raspored programa koji rade u pozadini. To je zapravo grafiko suelje napravljeno za cron, alat na UNIX radnim stanicama za raspored programa.

KDat
KDat je alat za arhiviranje na traku baziran na tar-u. Dizajniran je kako bi radio sa vie arhiva na jednoj traci. KDat je kreiran sa ciljem da se stvori grafiko korisniko suelje za tar koje podrava brze selektivne ekstrakcijske odlike programa dds2tar. Mogunosti koje prua KDat su: jednostavno grafiko suelje do lokalnog filesistem-a i sadraja traka, mnogobrojne arhive na jednoj (fiziki jednoj) traci, kompleksan zbir arhiva i dokumenata je pohranjen na lokalnom hard disk-u, selektivan povratak dokumenata iz arhive i backup profili za esto koritene backup-ove.

Kpackage
KPackage je grafiko korisniko suelje do RPM, Debian, Slackware i BSD managera. KPackage je dio K Desktop Environment i kao rezultat toga, dizajniran je kako bi se integrirao sa KDE file managerom.

959/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KOffice
KOffice je integrirano office okruenje za K Desktop Environment. Sastoji se od sljedeih dijelova: KWord, KSpread, KPresenter, Kivio, KArbon 14, Krita, Kugar, KChart, KFormula, Kexi, Filters.

KWord
KWord je sposoban kreirati zahtjevne dokumente profesionalnog izgleda. KWord je wordprocessor baziran na okvirima. Odlike Kworda su: stil za pojedini paragraf ( granice, poravnanja, font, boje...), okvirna orjentacija pogodna za DTP (Desktop Publishing), numeriranje, viestruke kolone na stranici, zaglavlja i podnoja, tablice, ugraivanje teksta slika i sl. I jo mnoge druge.

KSpread
KSpread je program namjenjen izradi tablinih dokumenata, no koristan je i kada su nam potrebne matematike formule ili statistiki izrauni. Mogunosti KSpread programa su: izrada viestrukih tablica u istom dokumentu, zaglavlja i podnoja, uzorci, koritenje vie od 100 matematikih formula ukljuujui devijacije varijance i sl, sortiranje, komentari, nizovi (dani u tjednu i sl), odabir boje za pojedinu eliju, hiperlinkovi itd.

KPresenter
KPresenter je program namjenjen izradi prezentacija. Ovaj program moe: ugraivati clike i clipart u dokument, unositi auto- forme, podeavati znaajke objekata kao to su boja rotacija sjena i sl, grupirati ili od grupirati objekte, podeavati pozadinu, napredno ponitavati/ponavljati, prezentirati uz efekte. Uz sve to moe printati kao PostScript, kreirati HTML slideshow sa samo nekoliko klikova miem i koristiti XML kao format dokumenta.

Kivio
Kivio je program za izradu dijagrama. Ima slino suelje kao Visio. U potpunosti je integriran u KOffice i moe se npr. ugrditi u KWord. Karakteristike ovog programa su skriptne matrice (stencile) koje korist Python, podrka za Dia matrice, plugin strukture za dodavanje funkcionalnosti.

960/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Karbon
Karbon je aplikacija KOffice-a za crtanje vektora.

Krita
Krita je program za crtanje i editiranje slika u KOffice. Jo je uvijek u izradi, a trenutno su u potpunosti funkcionalne sljedee mogunost programa: crtanje sa bojama i kistovima, kreiranje vlastitih kistova pomou krugova i kvadrata, ispunjavanje objekata bojama i uzorcima, brisanje, airbrush, jednostavni geometrijski oblici, ponitavanje/ponavljanje, podizanje i spremanje dokumenata, unoenje i izvlaenje slika u sve formate podrane od ImageMagick, dodavanje pomicanje i promjene redosljeda slojeva, zumiranje, odabir boja, podrka za Wacom tablets i jo mnogo toga. Krita ovisi o sljedeim library: ImageMagick X11, Little CMS (besplatan sistem za management boja).

Kugar
Kugar je program za izradu poslovnih izvjea koja se mogu pregledavati i ispisivati. Izvjea se mogu pregledavati Konqueror programom, a isto tako moguse ugraivati i u bilo koju KDE aplikaciju. Kugar radi na principu spajanja aplikacijski generiranih podataka sa template-ima kako bi se stvorio zavrni izvjetaj. Podaci i template su specificirani XML-om, to znai da se aplikacija treba brinuti samo za podatke, dok se template moe referencirati preko URL-a to doputa da se stvori centralni template library. Ima podrku za direktan pristup bazama podataka.

KChart
KChart je program za kreiranje dijagrama(chart). Dokumenti stvoreni KChart programom se mogu ugraivati u KOffice dokumente npr KWord.

KFormula
KFormula je program koji nam olakava ivot pri pisanju matematikih ili slinih formula. Znaajke ovog programa su: jednostavnounoenje slova grke abecede, inteligentno pomicanje pokazivaa, napredno oznaavanje sintakse, ogunost izlaza dokumenta u LaTeX program. Ovaj program se nastoji unaprijediti tako to e podravati unos dokumenata iz LaTeX i MathML programa.

961/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Kexi
Kexi je program koji trenutno ne dolazi sa KOffice ali sljedea KOffice verzija programa e sadravati Kexi. To je program za manipulaciju podacima. Pomou njega mogu se kreirati baze podataka te kreirati upiti. Ideja za ovakav program dola je iz nedostataka postojeih programa kao to su MSAccess, FoxPro, Oracle Forms i File Maker. Trenutno Kexi podrava sljedee sisteme baza podataka: SQLite, PostgreSQL, MySQL i FireBird/Interbase. Planirano je da podrava i druge sisteme baza podataka, ponajprija ODBC suelje.

962/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KDevelop
KDevelop je projekt koji je pokrenut 1998. godine sa ciljem stvaranje jednostavnog za koritenje IDE-a (Integrated Development Environment) za KDE. Od tada pa do danas KDevelop IDE podrava brojne programske jezike, a dostupan je i pod GPL-om. 8.12.2004. izdana je zadnja promjenjena verzija tj. KDevelop 3.1.2. Znaajke KDevelop-a su: rukuje sa svim razvojnim alatima za programiranje pod C++ programskim jezikom to prvenstveno znai complier-om, linker-om, debugger-om i build sistemom; dri dostupnim aplikacijski arobnjak koji generira kompletne, spremne za rad, pokazne aplikacije; doputa korisniku da odabere integrirani editor baziran na KDE-ovom programskom editoru Kwrite, Trolltec-ovom Qeditoru ili drugim; posjeduje klasni generator za kreiranje novih klasa i integriranje istih u postojei projekt; posjeduje File management za izvore, zaglavlja, dokumentaciju itd; prua pomo pri kreiranje aplikacijskog korisnikog prirunika napisanim sa KDE tools; posjeduje automatsku HTML baziranu API dokumentaciju za klase projekta sa cross referencama koritenih library-a; prua internacionalnu podrku koja doputa prevodiocima da dodaju eljeni jezik u projekt s lakoom, to ukljuuje podrku za Kbabel; prua podrku za manipulaciju projektom kroz CVS na taj nain to posjeduje jednostavan za upotrebu frontend za veinu potrebnih funkcija; posjeduje frontend za debugger; posjeduje integrirani shell console emulator; oznaava sintaksu koda kako bi se izbjegle sintaksne pogreke (npr. naglaava zagrade); prua korisniku automatsko zavravanje koda za varijable klasa, metode klasa, argumente funkcija i sl; posjeduje template za kreiranje razliitih projekata (KControl module, Kicker applete, KIOSlaves, Konqueror plugins i desktop stilove); posjeduje 4 pogleda na navigacijska stabla za lake prebacivanje izmeu dokumenata; ima podrku za cross kompajler sa mogunou odabira razliitih kompajlera, zastavica kompajlera, ciljane arhitekture itd.; sadrava podrku za Qt-ugraene projekte kao to su Zaurus i iPAQ i na kraju ima mogunost za dodavanje bilo kojeg programa koji korisnik treba za razvoj jednostavnim dodavanjem tog programa u Tools meni.

963/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KDE libraries
Libraries: Kdecore Kdecore je osnovni programski framework za svaki kde program. Prua prisup konfiguracijskom sistemu, rukovanje komandnim linijama, podizanje i manipulaciju ikona, neke posebne vrste interprocesorske komunikacije, rukovanje dokumentima i raznim drugim programima. Kdeui Kdeui librarie prua mnoge widgets-e i standardne dijaloge koje Qt nema, ili imaju vie znaajki nego njihov Qt suparnik. Prua ujedno i nekoliko widgets-a koji su subclassed od Qt-ovih i bolje su integrirane u kde desktop potivajui korisnikove postavke. Kio i ksycoca Kio i ksycoca libraries sadre postrojenja za asinkroni mreno transparentni ulaz/izlaz i pristup rukovanju mimetype-om. Kfile Kfile libraries sadri kde dokument dijalog i njegove pomone klase. Kjs Kjs libraries prua implementaciju JavaScript jezika. Khtml Khtml libraries sadri KHTML dio, HTML widget, DOM API i parser, ukljuujui suelje prema Java i JavaScript jezicima.

Grupne klase Core application skeleton klase koje su potrebne u skoro svakoj aplikaciji KApplication inicijalizira i kontrolira KDE aplikacije KUniqueApplication brine se da se samo instance aplikacija mogu vrtiti simultano KaboutData dri informacije za about box KcmdLinesArgs procesuiranje argumenata s komandne linije

964/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Configuration settings pristup KDE-ovoj hijerarhijskoj konfiguracijskoj bazi podataka, globalnom podeavanju i aplikacijskim resursima Kconfig prua pristup KDE ovoj konfiguracijskoj bazi podataka KsimpleConfig pristup jednostavnim, ne hijerarhijskim konfiguracijskim dokumentima KdesktopFile pristup .desktop dokumentima KglobalSettings jednostavan pristupne ne specificiranim aplikacijskim podeavanjima File and URL handling dekodiranje URLa, privremenih dokumenata itd KURL predstavlja i parsira URLe KtempFile kreira jedinstveni dokument za privremene podatke KsaveFile doputa automatsko spremanje dokumenata Interprocesorska komunikacija DCOP help klase i podprocesno pozivanje Kprocess poziva i kontrolira child procesima KshellProcess poziva child procese putem shell-a PtxProcess komunikacija sa child procesima preko pseudo terminala KIPC jednostavan IPC mehanizam koji koristi X11 ClientMessages DCOPClient DCOP razmjena poruka KDCOPPropertyProxy proxy klasa koja predsravlja Qt znaajke kroz DCOP KDCOPActionProxy proxy klasa koja predstavlja DCOP suelje za akcije Utility classes raspodjela memorije, regularni izrazi, manipulacije stringovima, sluajni brojevi KregExp POSIX mehanizam za regularne izraze KstringHandler ekstravagantno sueljeza manipulaciju stringovima

965/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KzoneAllocator efikasno alociranje memorije za velike grupe malih objekata KrandomSequence generator sluajnih brojeva Keyboard accelerators klase koje pomau uspostavi konzistentnih preica koristei tipkovnicu koji rade bilo gdje na desktopu Kaccel kolekcija preica na tipkovnici KstdAccel jednostavan pristup uobiajenim tipkama preica na tipkovnici KglobalAccel kolekcija preica na tipkovnici koje su dostupne na cijelom sistemu Procesuiranje slika podizanje i manipulacija ikonama KiconLoader uitava ikonu iz teme KiconTheme pomone klase za KiconLoader Kpixmap pixmap klasa sa irokim spektrom mogunosti KpixmapEffect pixmap efekti kao to su uzorci KpixmapIO zadnji Qimage -> Qpixmap pretvorba Drag and Drop . odvuci i pusti KURLDrag vuni objekt za URL-ove KcolorDrag vuni objekt za boje KmultipleDrag dopute kreiranje vunog objekta iz nekoliko drugih Auto-Completion Kcompletion generiko automatsko dovravanje stringova KURLcompletion automatsko dovravanje URLova KshellCompletion automatsko dovravanje izvrnih datoteka

966/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Widgets widget klase za pregled lista, doputenja, odabir boja itd. KlistView varijanta QlistView koja potuje KDE-ove sistemske postavke KlistBox varijanta QlistBox koja potuje KDE-ove sistemske postavke KiconView varijanta QiconView koja potuje KDE-ove sistemske postavke KlineEdit varijanta QlineEdit sa potpunom podrkom KcomboBox varijanta QcomboBox sa potpunom podrkom KfontCombo combo box za odabir font-ova KcolorCombo combo box za odabir boja KcolorButton gumb za odabir boja KURLCombo combo box za odabir imena datoteka i URLa KURLRequest line edit za odabir imana datoteka i URLa Krulerwidget za ravnalo KanimWidget animacije KnumInput widget za unos brojeva KpasswordEdit widget za unos lozinke Dijalozi dijalozi za izbor dokumenata, boja i font-ova KfileDialog dijalog za izabir dokumenata KcolorDialog dijalog za izbor boja KfontDialog dijalog za izbor font-ova KiconDialog dijalog za izbor ikona KkeyDialog dijalog za editiranje bindings sa tipkovnice KeditToolBar dijalog za dodavanje toolbars-a KtipDialog dijalog za natuknicu dana KaboutDialog dijalog about KlineEditDlg jednostavan dijalog za unos teksta KURLRequestDlg jednostavan dijalog za unos URL-a KmessageBox dijalog za signalizaciju greaka i upozorenja

967/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KpassworeDialog dijalog za unos lozinke Akcije i XML GUI Kaction apstrakcija za akciju koja moe biti dodana u traku s menuima i alatnu traku KactionCollection set akcija KXMLGUICliant GUI dio koji se sastoji od kolekcija akcija i DOM stablinog prezentiranja njihove lokacije u GUIu KpartManager upravlja aktivacijom XMLGUI klijenata Plugins i komponente Klibrary predstavlja dinamiki uitani library KlibLoader uitavanje dijeljenih library KlibFactory object factory u plugin-ovima KserviceType predstavlja tipove servisa Kservice predstavlja servise KmimeType predstavlja MIME type KserviceTypeProfile korisnike postsvke za MIME type mapiranja Ktrader pitanja za servise

968/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KDE vs. GNOME, ili moda ZAKLJUAK


Kao to svi znaju GNOME je kao i KDE, desktop okruenje za UNIX radne stanice. Ova injenica je sama po sebi uzrokovala mnoge polemike oko toga koje desktop okruenje je bolje. Na ovo pitanje nije lako odgovoriti, tj. na ovo pitanje je nemogue odgovoriti, jer su ljudi po svojoj prirodi subjektivni, pa tako ovisno koji desktop korisnik ima, toga automatski smatra najboljim. No, usprkos svemu jedan vaan dogaaj pokrenuo je lavinu debata oko tog pitanja, a to je injenica da je nedavno Sun/Hewlett Packard odluio koristiti GNOME kao svoj standardni desktop. Kako je to utjecalo na KDE, najbolje pokazuje njihov odgovor na to pitaje, a koji je bio: Ne utjee ni malo! Ovo nas vraa ponovno na poetak gdje se govorilo o KDE filozofiji. KDE projekt je osnovan i radi u nadi kako e stvoriti najbolji desktop na svijetu. Kako se tehnologija neprekidno poboljava, tako i programeri koji rade na KDE-u imaju neprekidno pune ruke posla, ali usprkos tome mogli bismo rei da su poprilino up-todate. KDE nikada nije bio orjentiran oko podjele trita, podjele mozgova, koorporacijske naklonosti ili bilo kakvog vanjskog utjecaja. Usprkos tome KDE dobiva nagrade kao korisnikov izbor i kao programerov izbor. Zato? Zato to su kreatori KDE-a unijeli u svoj posao svu svoju ljubav prema programiranju i pretoili ju u ovaj software, ili moda zato to je GNOME kontroliran od strane GNOME Foundation, a KDE je oduvijek bio i prema njihovim rijeima zauvijek e biti kontroliran od strane KDE stvaraoca. Gledano sa druge strane, KDE projekt je jedini Open Source projekt koji nema dobronamjernog diktatora ili upravljaki odbor. Prema njihovim rijeima nemaju namjeru mijenjati ovu dobitnu formulu.

969/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Marina Petrovska

UNIX DESKTOP SYSTEM

970/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

UVOD
UNIX je vieprogramski, viekorisniki operativni sistem ope namjene. Razvili su ga Ken Thompson i Dennis Ritchie (firma Bell Laboratories) i prvi puta predstavili javnosti u asopisu Communications of the ACM, July 1974. UNIX je vieprocesni multiuser operativni sistem i za sada se veinom koristi za jednoprocesorskim kompjuterima. Kako je procesor (CPU) samo jedan, on je, u cijelosti, u svakom trenutku posveen samo jednom procesu. Drugim rijeima, svi aktivni procesi dijele vrijeme jednog istog procesora. Ova pojava se naziva time-sharing. Vrijeme kontinuiranog rada svakog procesa veoma je kratko, to daje utisak da su svi procesi aktivni u isto vrijeme. UNIX omoguava aktiviranje interaktivnih i pozadinskih procesa. Interaktivni zahtijevaju ulazne podatke sa tipkovnice tijekom svojeg rada i time i direktno sudjelovanje korisnika. Za razliku od njih, procesi aktivirani u pozadini od poetka imaju sve potrebne podatke i ne zahtijevaju direktno sudjelovanje korisnika. Vrijeme je pokazalo da se rad s komandnim linijama, kao svojevrstan stereotip "nerd" drutva, sve vie odbacuje (ali nikad u potpunosti zbog nekih svojih prednosti) i da je stvorena potreba za komunikacijom s raunalom, tj. operativnim sustavom pomoi grafikog suelja. Ne samo zbog toga to obini korisnik nije "nerd" i trai user friendly suelje nego i zbog same ljudske prirode i percepcije: ljudi bre rade sa slikama nego tekstom. Danas najpopularniji i najee koriteni komercijalni operativni sustavi Windows i MacOSX svoju popularnost (i monopol na softverskom tritu) dobivaju zbog vrlo jednostavne uporabe i integracije raznih aplikacija u sam sustav, to korisnika poteuje stvari koje on ne mora raditi. S druge strane, prednost sustava baziranih na Unixu (kao i sama filozofija Unixa) je upravo suprotna - potpuna fleksibilnost i mogunost da korisnik u potpunosti prilagodi rad na raunalu svojim potrebama. Kao alternativa Windowsima, Linux nudi svoje GUI-e (Graphical User Interface).

971/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

POVIJEST
1973. Xerox proizvodi prvo raunalo (Alto) s grafikim sueljem da bi 1981. napravili The Star, iji sustav je imao veinu obiljeja koje imaju dananji GUI-i: prozore koji se mogu preklapati i prikaz datoteka kao ikona. 1983. Apple predstavlja sustav Lisa, koji prvi predstavlja trake s menijima (menu bars) i padajue izbornike, a 1984. izbacuje prvog Macintosha na trite. Iste godine na MIT sveuilitu je predstavljen "Window System X" - prvi Unixov GUI.

1985. izlazi Geos za Commodore 64 i kasnije Apple II, Commodore proizvodi raunalo Amiga 1000 s Workbench 1.0 sustavom, a Microsoft izbacuje prvu verziju Windowsa, najavljenu 1983.

1987. Apple izbacuje Macintosha II, prvo Apple raunalo s prikazom u boji, izlaze Ms Windows 2.03 s prozorima koji se mogu preklapati i mijenjati veliinu. 1988. Apple predstavlja 16-bitni GS/OS a IBM OS/2 1.10 SE kojeg je napravio Microsoft. 1990. Izlazi Amiga Workbench 2 za Amiga 3000 raunala, Microsoft izbacuje Windows 3.0 (koji u sebi ima Program Manager).

972/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

1992. Se pojavljuju prvi IBM-ov 32-bitni sustav OS/2 v2.0, Microsoft Windows 3.11 i Amiga Workbench 3. 1993. Microsoft predstavlja Windows NT, prve 32-bitne Windowse. 1994. pojavljuje se Photon microGUI za Unix-based sustave.

1995. Izlazi Windows 95. 1997. Mac OS 8 izlazi i prodaje se u 1.25 milijuna primjeraka u manje od dva tjedna i postaje tada najprodavaniji software.

1998. Izlazi Windows 98 u kojem je Windows Internet Explorer, koji je sada integriran u sustav, preuzima ulogu shella, da bi za 5 mjeseci Shane Brooks napravio 98Lite, koji omoguava odvajanje IE od Windowsa, smanjuje vrijeme potrebno za boot i ima bolji shell. 1999. Mac predstavlja Mac OS X Server baziran na Unixu. 2000. Microsoft izbacuje Windows 2000 - novu verziju Windowsa NT koja ima u potpunosti integriran Internet Explorer. 2001. Pojavljuje se Windows XP, naprednija i uminkana verzija Windowsa 2000.

973/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Polovicom osamdesetih mala skupina programera smjetena u jednoj zgradi u maloj uliici grada Cupertina u Kaliforniji i predvoena Steveom Jobsom promijenila je svijet. Napravili su prvo grafiko suelje, proizvod koji je narodne mase upoznao s do tada opskurnim digitalnim pojavama kao to su mi, prozor, ikona, izbornik (menu) i "dijaloke" kuice, od kojih je u sjeanju mnogih ostala ona zastraujua "bomba" koja je upozoravala na poinjenu pogreku. Macintosh je tako obine smrtnike oslobodio dotad sveprisutne tzv. "komandne linije" i operativni sustav uinio "korisniku naklonjen". No, Bill Gates, ovjek koji je kao svoju ivotnu misiju odabrao reenicu koja kae "da e na svaki radni stol postaviti jedno osobno raunalo", nije dugo ekao. Obukao je svoj, na komandnoj liniji utemeljeni, DOS u ruho koje je nazvao Windows. Tako smo dobili konkurenciju Macintosh grafikom suelju. Nakon par godina vie nikom nije bilo jasno kako smo uope mogli koristiti kompjutore bez ikona, prozora, mia i dijalokih kuica. A onda je glavna fora postao internet. Tu je glavno suelje postao web preglednik, pretraitelj, ili na dobrom amerikom - "browser". Mac OS i Windows vie nisu bili dovoljni. Ne samo da su "odjednom" zastarjeli ve su se morali suoiti i s Linuxom, Unixom novoga digitalnog doba. Sva trojica, unato tome to je Linux dijete interneta, teko su se hrvali s poplavom informacija koje je pred znatieljne korisnike prosipala svijetom protegnuta mrea. Steve Jobs je opet odluio biti prvi. Okupio je tim vrsnih programera i godinama u potaji eksperimentirao te napokon svijetu objavio novi Macintosh operativni sustav - OS X, poznatiji kao Aqua, meu poznavateljima oznaen kao "Unix za Macove". Beta inaicom ve se "igraju" tisue korisnika, i to ne samo Mac "fanatika", ve i svi oni koji u informatikom svijetu dre da uvijek moraju biti "in". Mac OS X teko je jednostavno opisati jer pravi se dojam stjee tek
974/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

kad ga vidite na djelu. areno je to suelje s mnogo boja, prozirnih dijalokih kuica i prozora, te mnotvom inovativnih funkcija.Gatesov novi borbeni pokli glasi ".NET" (itaj: dot-net). E sad, to nije samo grafiko suelje, niti operativni sustav, to je, jednom rijeju, filozofija. Microsoftovi programeri koncept svog novog suelja opisuju sintagmom "univerzalno platno". Prostor je to gdje se internet, "radni stol" (desktop) osobnog raunala i operativni sustav saimaju u jedan (i jedinstven) alat koji korisniku omoguuje da istim tehnikama pretrauje poruke e-pote, web stranice i sadraj tvrdog diska. No, kako e kompjuter znati kada mu treba procesor rijei, kada program za obradu slike, a kada neto sasvim tree, Bill Gates jo nije potpuno objasnio. Odgovor je, ini se, u "univerzalnoj liniji za tipkanje" - uvijek aktivnom praznom prostoru u koji korisnik moe upisati web adresu, upit za pretraivanje ili naslov poruke e-pote to kompjutoru odmah daje dovoljno podataka za "podizanje" upravo potrebne aplikacije. Naravno, sve opisano tek je prototip. Ipak, najblie tome to nas oekuje u vrlo bliskoj budunosti ve moemo vidjeti u najnovijoj inaici MSN Explorera (radno nazvanog "Mars") to je Microsoft javno obznanio kao test platformu za neke ideje koje e biti primijenjene u .NET paketu softverskih usluga. To je naporan i dugotrajan posao kojim se dobro organizirani timovi programera u Microsoftu i Appleu bave desetljeima. No, to nije sluaj s Linuxom. Taj internet "unixoid" bio je iskljuivo dvorite za egzibicije turbo softveraa i nije ba sklon svakome. Jo do juer Linuxai su se ponosili time to imaju komandnu liniju i to u njihov klub teko moe prodrijeti netko bez diplome iz informatikih znanosti ili bar matematike. Osim toga, to je operativni sustav graen po "open source" naelu - to znai da je svima dostupan nacrt temelja ("kernela"), ega se treba pridravati, a dalje svi grade iz donesenog materijala. Rezultat? Mnotvo "distribucija" (vrsta) Linuxa, kojima je danas, uz to to korisnika doista tjeraju na uenje, gotovo jedina prednost to to su uglavnom besplatne (ali ne i podrka). Linuxai su dugo vremena odbacivali i samu pomisao na grafiko suelje, no danas su se stvari promijenile. Nekoliko skupina programera poelo je raditi i na tome, a posebno se istaknula tvrtka Eazel - sastavljena od, a od koga bi drugog, par Macintosh veterana. Njihovo grafiko suelje zove se Nautilus, lako se "lijepi" na Linux, doputa instalaciju s vie stupnjeva sloenosti - od poetnika do "power usera", ima navigaciju slinu onoj kako se pretrauje internet. No, ono to je najzanimljivije nain je na koji se prezentiraju datoteke koje su prikazane tako da odmah upuuju na svoj sadraj. Mapa s glazbom izgleda kao CD album, a datoteke su prikazane na isti nain kao i na ovitku ploa. Drugi izum omoguava korisniku
975/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

posebno oznaavanje datoteka pridajui im razne atribute - glavno, tajna, posao, u-radu i slino. To omoguuje preciznije pretraivanje tvrdog diska. No, kako e se mala tvrtka boriti protiv "pirata silicijske doline"? Kako bilo, ukljuili su se. Prvi im je uspjeh to to e Dell, drugi svjetski proizvoa osobnih raunala, svojim poslovnim korisnicima instalirati Linux s Eazel sueljem. Maraton za grafiko suelje i operativni sustav budunosti je poeo. Tko e pobijediti sad je teko procijeniti, a korisnici od ustre konkurencije mogu samo profitirati.

976/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

STRUKTURA
Jo od vremena Windows 3.1 grafike nadogradnje za MS DOS operativni sustav i MacOS operativnog sustava koritenje raunala sve vie prelazi iz pisanja naredbi u naredbenoj liniji u point-and-click nain rada u grafikom suelju. Grafika suelja i pointand-click tehnologija pribliili su koritenje raunala irem krugu ljudi pojednostavljivanjem rada na i danas je moderan operativni sistem bez njih nezamisliv. Sustav koji omoguava grafiko okruenje za Linux zove se X Window. X Window je samo podloga za grafika suelja koja se mogu koristiti u Linux operativnom sustavu i kojih, za razliku od MS Windows operativnog sustava, ima nekoliko. X Windows sustav mora biti instaliran na raunalu na kojem se eli koristiti Linux grafiko suelje. Osim X Windows-a, na raunalu mora biti instalirano i samo grafiko suelje koje e se koristiti. Odabir grafikog suelja ovisi iskljuivo o afinitetima korisnika. Opisat u tri grafika suelja: GNOME KDE Ximian Izgledom i nainom koritenja vrlo su slina MS Windows operativnom sustavu (korisnici MS Windows-a vrlo se brzo mogu naviknuti na bilo koje od ova tri suelja), besplatna su i mogu se skinuti s Interneta. KDE grafiko suelje samo je dio KDE paketa u koji su ukljueni i programi za konfiguraciju raunala u grafikom okruenju kao i paket uredskih aplikacija (KOffice) slinih MS Office paketu. Kao i u sluaju KDE paketa, s GNOME paketom uz samo grafiko suelje takoer dolazi i mnogo korisnikih programa, programa za grafiku konfiguraciju raunala i set uredskih aplikacija pod imenom GNOME Office. Ximian GNOME je samo nadogradnja GNOME grafikog suelja. Za razliku od GNOME paketa u koji su ukljuene i aplikacije koje su jo uvijek u ranoj fazi razvoja (jo uvijek nisu dovoljno stabilne za normalan rad), s Ximian paketom dolaze samo testirane i stabilne aplikacije. Za razliku od vjeto upakiranih Windowsa ili MacOS-a, grafika suelja za Linux se sastoje od potpuno odvojena 3 sloja/komponente, ime se korisniku ostavlja mogunost izbora svakog od njih.

977/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

1) Prvi sloj je X Server ija je svrha komunikacija izmeu grafikog suelja i operacijskog sustava, a moe povezati ak i grafiko suelje jednog raunala i programa koji se izvrava na drugom. X Server dolazi s instalacijom Linuxa. Najee distribucije su XFree 86, Metro-X i Accelerated-X. Postoji mogunost zabrane daljinskog spajanja na X server koristei nolisten tcp opcije na x serveru. Ovo e sprijeiti bilo kakva mrena spajanja na server preko tcp socket-a. SERVER obezbjeuje funkcije na niem nivou za interakciju sa vaim video hardverom. XFree86 XFree86 je zatieno ime proizvoda tvrtke XFree86 Project, INC. Prvobitni programeri koji su X Windowse prilagodili platformi 80386 odluili su projekt osnovati radi stjecanja lanstva u X Consortiumu. Postavi lanicom X Consortiuma, XFree86 Project dobio je pristup trenutno razvijenim poslovima i tako je u XFree86 mogao prebacivati nove mogunosti istovremeno s njihovom primjenom u X Windowsima, umjesto da eka njihov slubeni izlazak da bi ih mogao iskoristiti. X Consortium je od 1. sijenja 1997. X prepustio skupini Open Group. XFree86 ukljuuje i programske biblioteke i datoteke za programere koji ele razviti svoje vlastite aplikacije pod XFree86. XFree86 prua preklapajue prozore, trenutno iscrtavanje grafike, bitmapirane grafike i slike visoke razluivosti i visoko-kvalitetni prikaz teksta. Opis X servera koje moete instalirati: x3dl X server za kartice koje koriste 3DLabs chipovi (XF86_3DLabs) x8514 X server za kartice koje koriste IBM8514 chipovi (XF86_8514) xagx X server za kartice koje koriste AGX chipovi (XF86_AGX) xi128 X server za #9 Imagine 128 (XF86_I128) xma8 X server za kartice koje koriste Mach8 chipovi (XF86_Mach8) xma32 X server za kartice koje koriste Mach32 chipovi (XF86_Mach32) xma64 X server za kartice koje koriste Mach64 chipovi (XF86_Mach64) xmono A Monochrome X server (XF86_Mono) xp9k X server za kartice koje koriste P9000 chipove (XF86_P9000) xs3 X server za kartice koje koriste S3 chipove (XF86_S3) xs3v X server za S3 ViRGE chipove (XF86_S3V; obsolete, use SVGA) xsvga X server za veinu SVGA kartica (XF86_SVGA) xvg16 A 16color generic X server (XF86_VGA16) xw32 X server za kartice koje koriste ET4000/W32 chipset (XF86_W32) xxfb Generic framebuffer server za veinu VESA kartica (XF86_FBDev)
978/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

2) Drugi sloj je Window Manager koji vodi rauna o samom prozoru i ponaanju prozora (otvaranje, zatvaranje, mijenjanje veliine, minimiziranje, maksimiziranje...). Najee dolazi u paketu s Desktop Environmentom, ali ne mora biti tako - recimo, Gnome je dolazio sa Enlightenement window managerom dok se uz novije verzije isporuuje Sawfish. Kao i UNIX, X-i su prilino fleksibilni. Izgled prozora, rad menija i ostale mogunosti su kontrolirane od strane WINDOW MANAGER-a. Najei WINDOW MANAGER-i su mwm, fvwm, i twm. Postoji gomila drugih window managera ukljuujui i fvwm95, koji simulira Windows-e na UNIX PLATFORMI . Neki od window managera raspoloivih za Linux: twm Tomov window manager fvwm virtualni window manager za X11 fvwm95 - virtualni window manager za X11 koji poprilino nalikuje Microsoftovim Windowsima 95 mwm Motif window manager olwm Openlookov window manager, temeljen na Sunovom Open Looku olvwm Openlookov virtualni window manager Enlightenment omiljen i elegantan prozorski manager CDE Common Desktop Environment, X GUI koji je prilagoen mnogim UNIX-ima KDE K Desktop Environment, besplatna varijacija CDE-a Twm program twm za upravljanje prozorima u sustavu X Windows prua naslovne trake, oblikovane prozore, nekoliko obrazaca upravljanja ikonama, korisniki definirane makro funkcije, klik za upisivanje i pokazivaem upravljano arite tipkovnice, korisniki odreene tipke i povezivanja tipkom mia. Fwm program za upravljanje prozorima fwm za X11 jest izvedenica twm-a. Program je preoblikovan za smanjenje potronje memorije, pruanje trodimenzionalnog izgleda okvirima i pruanje jednostavne virtualne radne povrine Fwm95 program za upravljanje prozorima fwm95 za X11 je hakerska preinaka temeljena na fvwm2.x. Cilj je razvijatelja bio oponaanje glavnih znaajki GUI-ja dobro poznatog operativnog sustava da bi se korisnici ugodnije osjeali u UNIX okruju i radi izbjegavanja napuhavanja jednostavnog i istog GUI koda fvwm-a. Olwm program za upravljanje prozorima olwm za X Windows sustav primjenjuje dijelove grafikog korisnikog suelja Openlook. To je standardni program za upravljanje

979/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

prozorima za Sunov proizvod Open Windows, ali ispravno radi sa svakim X11 sustavom, ukljuujui Xfree86. Enlightenment Enlightenment je omiljen i sjajno napisan program za upravljanje prozorima. Stabilan je i brz. Premda je ispoetka temeljen na rvwm radu, njegove su novije inaice u potpunosti napisane od nule. CDE Common Desktop Environment (CDE) je komercijalni pokuaj prilagodbe uobiajene radne povrine na veinu inaica UNIX-a. Detaljnije sam ga opisala kasnije u seminaru. KDE K Desktop Environment (KDE) je veliki freeware projekt zamiljen za stvaranje integriranog radnog okruja slinog CDE-u, ali razvijen i izdan u potpunosti pod GNU Public License (GPL). Detaljnije sam ga opisala kasnije u seminaru.

3) Trei sloj je sam Desktop Environment koji brine o svemu ostalom. Poto se radi o viekorisnikom sustavu mogue je da svaki korisnik ima svoje okruenje potpuno prilagoeno njegovom ukusu i potrebama. Najpopularniji su KDU i Gnome.

980/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

GRAFIKA SUELJA

GNOME
GNOME je grafiko okruenje za Linux i Unix operativne sustave koje korisnicima omoguava jednostavnu primjenu i konfiguraciju raunala. Izgledom i nainom koritenja vrlo je slino grafikom okruenju iz MS Windows operativnog sustava. S grafikim okruenjem dolaze i alati za konfiguraciju samog grafikog suelja, alati za konfiguraciju raunala i paket aplikacija koje se nalaze u rasponu od malih korisnikih programa pa sve do monih uredskih aplikacija. Zajednike znaajke tih aplikacija su besplatnost, jednostavnost koritenja, brzi razvoj i dostupnost su preko Interneta. Cijeli GNOME paket sadri: GNOME desktop - grafika radna okolina, GNOME razvojni alati - kolekcija alata i komponenti za razvoj aplikacija, GNOME Office - paket uredskih aplikacija. Uredske aplikacije koje su ukljuene u GNOME paket pod zajednikim imenom GNOME Office su: Gnumeric - spreadsheet aplikacija, AbiWord - program za obradu teksta, Gfax - program za slanje i primanje faksimila, Galeon - web preglednik, Gimp - moan program za obradu slika, Eye Of GNOME - preglednik slika, Evolution - program za elektroniku potu u koji je ukljuen i osobni organizer, MrProject - program za voenje projekata, GnuCash - program za praenje financijskog poslovanja, Achtung - program za izradu prezentacija, Dia - program za crtanje dijagrama, Sketch - program za vektorsko crtanje. GNOME je djelomino lokaliziran na Hrvatski jezik. Trenutna verzija GNOME paketa je 1.4 ali uskoro bi trebala izai i verzija 2.0. Cijeli GNOME paket je besplatan i podrava sve Linux i Unix operativne sustave.

981/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Opa svojstva
S GNOME paketom dolazi program pod imenom Kontrolni centar i namijenjen je za konfiguriranje grafikog suelja potrebama i ukusu pojedinih korisnika. Slika 2.1.prikazuje osnovni prozor GNOME Kontrolnog centra. S lijeve strane se nalaze grupe parametara dok se u desnom dijelu prozora nalaze opcije koje je mogue mijenjati.

Slika 2.1 GNOME Kontrolni Centar

U kontrolnom centru se mogu podeavati svi parametri grafikog suelja. Budui da tih parametara ima mnogo i veina njih prosjenom korisniku uope nije potrebna, ovdje se spominju samo osnovne postavke. Opcije vezane uz izgled ekrana nalaze se u sekciji Desktop. Ovdje se moe podesiti pozadina ekrana (Background), prilagoditi GNOME panel (Panel), odabrati eljeni screensaver (Screensaver), windows tema (Theme Selector) i window manager (Window Manager). Ove opcije odnose se uglavnom na vizualni dojam samog grafikog suelja i ne utjeu na rad raunala. U sekciji Document Handlers nalaze se opcije za rad s razliitim vrstama datoteka i dokumenata. Ovdje se moe podesiti tekstualni editor koji e se koristiti (Default Editor), u sekciji FILE Types and Programs mogue je povezati datoteke odreenih ekstenzija sa programima u kojima se te datoteke mogu pregledavati (npr. datoteke s ekstenzijom .mp3

982/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

moe se povezati s programom Xmms koji je namijenjen za sluanje muzike u mp3 formatu. Nakon toga, svaki put kad se miem dvaput klikne na datoteku s ekstenzijom .mp3 ona e se automatski otvoriti u Xmms-u). HTML Viewer i URL Handlers se odnose na podeavanje parametara za pregledavanje Web stranica. Look and Feel sekcija sadri opcije za podeavanje izgleda aplikacija i menija u GNOME okruenju. U sekciji Multimedia nalaze se opcije za zvune efekte (npr. zvukovi koji se uju prilikom otvaranja ili zatvaranja prozora, pokretanja ili zatvaranja X Windows okruenja i sl.). U sekciji Peripherials nalaze se opcije za podeavanje rada mia i tastature. Ovdje se moe podesiti brzina strelice mia, dvostrukog klika mia, neke postavke vezane uz rad s tastaturom i slino. Sekcija Sawfish window manager sadri opcije koje se odnose na Sawfish, upravitelj prozorima (eng. window manager) koji dolazi standardno sa GNOME grafikim okruenjem. Slika 2.2 prikazuje opcije za podeavanje pozadine ekrana. U pozadinu se moe staviti slika s lokalnog tvrdog diska ili se moe odabrati boja za pozadinu (boja moe biti jednolika ili se moe podesiti pretapanje jedne boje u drugu). Na slabijim raunalima (sve konfiguracije slabije od PI na 166MHz sa 128MB RAM-a) nije poeljno stavljati sliku kao pozadinu zato jer to moe dosta usporiti rad raunala.

Slika 2.2 Podeavanje pozadine

983/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

GNOME grafiko okruenje dolazi sa mnogo gotovih tema za prozore. Tema za prozore odreuje izgled prozora u grafikom suelju. Slika 2.3 prikazuje prozor za izbor neke od dostupnih tema. U gornjem dijelu prozora moe se odabrati neka od ponuenih tema dok je u donjem dijelu prozora prikazano kako ta tema izgleda. Izbor teme za prozore ne utjee na brzinu rada raunala tako da je svejedno koja e tema biti odabrana.

Slika 2.3 Odabir windows teme

984/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Vrlo korisna stvar u GNOME grafikom okruenju je virtualna radna povrina. Za razliku od MS Windows grafikog okruenja gdje se svi prozori programa nalaze na istoj radnoj povrini u GNOME-u je mogue istovremeno koristiti nekoliko radnih povrina. Tako se dobiva na preglednosti u sluajevima kada je istovremeno otvoreno vie prozora. Broj radnih povrina moe se podeavati u sekciji Sawfish window manager->Workspaces (Slika 2.4).

Slika 2.4 Podeavanje virtualnih radnih povrina

985/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Svaka virtualna radna povrina moe biti podijeljena u nekoliko virtualnih ekrana. Ovo moe biti korisno kod niskih rezolucija kada je prozor vei od ekrana. Tada se drugi dio prozora moe vidjeti na drugom virtualnom ekranu. Promjena radne povrine (ili virtualnog ekrana) obavlja se preko GNOME panela ili se moe podesiti da se radna povrina promijeni kada se miem izae izvan ruba ekrana (Slika 2.5).

Slika 2.5 Podeavanje promjene radne povrine

986/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Izgled GNOME grafikog suelja vrlo je slian MS Windows operativnom sustavu (Slika 2.6).

Slika 2.6 GNOME grafiko okruenje GNOME panel se standardno nalazi u donjem dijelu ekrana. U njemu se nalazi Start meni iz kojeg se mogu pokretati aplikacije. Kako bi se ubrzao rad, pokraj Start menija nalaze se ikone za direktno pokretanje programa. Tu je i traka s trenutno otvorenim prozorima. U desnom dijelu panela nalazi se program za promjenu trenutne radne povrine pokraj kojeg je sat. Ovako GNOME panel izgleda nakon instalacije GNOME paketa. Odabirom opcije Panel u Start meniju moe se promijeniti izgled panela. Na traku za brzo pokretanje programa mogu se dodati novi programi ili maknuti stari (Start meni->Panel->Add to panel). Na panel se mogu dodati i GNOME applet-i (Start meni->Panel->Add to panel->Applet). GNOME applet-i su mali programi koji mogu raditi unutar panela tj. za svoj rad ne trebaju poseban prozor. Primjeri GNOME applet-a su sat u desnom dijelu panela i program za promjenu radne povrine. Standardno s GNOME paketom dolazi dvadesetak applet-a razliitih namjena (npr. sat, razliiti sistemski monitori, mikser za zvuk itd.). GNOME podrava koritenje i vie

987/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

panela. Dodatne panele moe se dodati odabirom opcije Start meni->Panel->Create Panel. Izgled novog panela i programi i applet-i koji e se na njemu nalaziti mogu se podesiti desnim klikom mia na panel i odabirom opcije Panel->Add to panel. Desnim klikom mia na bilo koji od panela i odabirom opcije Panel->Properties moe se podeavati ponaanje panela prilikom rada (npr. hoe li panel uvijek biti iznad prozora ili nee i sl.). Na ostatku ekrana nalaze se ikone i trenutno otvoreni prozori. Nova ikona se moe dodati na desktop desnim klikom mia bilo gdje na desktop-u i odabirom opcije Novi->Launcher. Nakon toga se otvara prozor u kojem je potrebno upisati ime programa (i put do njega) koji e se pokretati tom ikonom. Rad u GNOME grafikom okruenju vrlo je slian radu u MS Windows operativnom sustavu. Programi se pokreu dvostrukim klikom mia na neku od ikona. Desni klik mia na ikonu daje meni s opcijama kao to su kopiranje, brisanje i sl. Desnim klikom mia na prazni dio radne povrine dobiva se meni u kojem se moe dodati nova ikona na radnu povrinu, promijeniti pozadina, poravnati ikone na ekranu i slino. Korisnicima koji su ve imaju iskustva u radu s MS Windows operativnim sustavom vrlo se lako prilagoditi GNOME grafikom suelju zato jer su razlike u nainu rada i koritenju male.

Zakljuak
GNOME je grafiko okruenje za Linux i Unix operativne sustave koje korisnicima omoguava jednostavnu primjenu i konfiguraciju raunala. Izgledom i nainom koritenja vrlo je slino grafikom okruenju iz MS Windows operativnog sustava tako da e ga korisnici koji imaju iskustva s MS Windows grafikim okruenjem vrlo brzo nauiti koristiti. U GNOME paket ukljueni su i programi za konfiguraciju raunala iz grafikog okruenja to uvelike olakava rad neiskusnim Linux korisnicima. GNOME Office set uredskih aplikacija koji dolazi s paketom sadri sve potrebne aplikacije za SOHO okruenje. Problem s GNOME Office aplikacijama je to to se nalaze u razliitim fazama razvoja. Neke od tih aplikacija su jo uvijek u ranoj fazi razvoja tako da su jo uvijek dosta nestabilne i malih mogunosti. S izlaskom verzije 2.0 GNOME paketa oekuju se doraenije verzije tih aplikacija kao i dodavanje novih aplikacija u GNOME Office paket.

988/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

KDE GRAFIKO SUELJE Konfiguracija


KDE Control Center je mjesto gdje se podeavaju postavke KDE grafikog okruenja. Program se moe pokrenuti iz Start izbornika odabirom Start -> Control Center, to e otvoriti glavni prozor (Slika 3.1) sa grupama postavki za podeavanje. Mogue je pristupiti i svakoj od postavki izravno, bez pokretanja KDE Control Center-a, jednostavnim odabirom u Start -> Configuration -> KDE izborniku.

Slika 3.1 KDE Control Center

989/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Postavke za podeavanje podijeljene su u grupe: FileBrowsing, Information, LookNFeel, Network, Peripherials, Personalization, PowerControl, Sound, System, WebBrowsing, u kojima se nalaze brojni parametri kojima se podeava izgledi i funkcionalnost KDE grafikog okruenja. Pojedine grupe sadravaju sljedee postavke: Filebrowsing grupa sadri postavke za podeavanje Konqueror upravitelja datotekama (File Manager), a ovdje se takoer podeava koja aplikacija otvara koji tip datoteke (File Associations), Information - ovdje se nalaze korisne informacije o stanju sustava i ureaja, LookNFeel je najzanimljivija grupa za veinu korisnika. U ovoj grupi parametara mogue je u potpunosti podesiti izgled i neke funkcije KDE suelja. Izmeu ostalog, ovdje se podeavaju boje, podloga, izgled prozora, screensaver, zvukovi, teme itd., Network grupa sadri najosnovnije postavke vezane uz mreu. Veina mrenih KDE aplikacija koristi ovdje unesene parametre, Peripherials grupa slui za podeavanje mia, tipkovnice i podrke za digitalne kamere. Ovdje se odabire podrka za Hrvatsku tipkovnicu, koja je neophodna za pravilan prikaz naih () i nekih specifinih znakova kao npr. @, |, na ekranu. Na istom mjestu podeavaju se postavke tipkovnice i mia vezane uz osjetljivost i brzinu, Personalization grupa sadri postavke vezane uz jezik, set znakova (charachter set) provjeru pravopisa, kao i neke parametre vane za pojedine drave (valuta, format datuma i vremena itd.). Uz pravilno podeenu tipkovnicu u grupi Peripherials, za prikaz naih znakova potrebno je podesiti i set znakova na iso-8859-2,
990/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

PowerControl sadri postavke za kontrolu tednje energije, kao npr. iskljuivanje monitora i standby mod. U ovoj grupi nalaze se i parametri za praenje statusa baterije, koji su vrlo korisni kod prijenosnih raunala, Sound grupa sadri parametre vezane uz reprodukciju zvuka u KDE grafikom okruenju. Sve KDE audio aplikacije uzimaju ove parametre kod reprodukcije zvuka, System grupa slui za konfiguraciju printera, login menadera, datuma, izgleda konzole i jo nekih parametara vezanih uz sustav. Za promjenu veine parametara u ovoj grupi korisnik mora imati root ovlasti, WebBrowsing grupa definira parametre vane za web preglednike.

Opa svojstva
KDE suelje je svojim izgledom i rasporedom elemenata vrlo slino MS Windows grafikom suelju. Ikone se na radnu povrinu postavljaju pritiskom na desni gumb mia, a sve aplikacije se pokreu iz Start izbornika koji se nalazi u donjem lijevom uglu i oznaen je velikim slovom K. Ikone za pokretanje aplikacija u Start izborniku razvrstane su (ovisno o njihovoj funkciji) u odgovarajue grupe: Amusement - igre i ostali programi namijenjeni za zabavu, Applications - vanije aplikacije za upravljanje datotekama, tekst editori, alati za kompresiju, komunikaciju itd., Configuration - sve aplikacije za konfiguraciju sustava, Documentation - pomo i upute za rad s programima, Multimedia - multimedijalne aplikacije (slika, zvuk i video), Networking - mreni klijenti (web, mail, news grupe), Office - uredski alati, Terminals - terminali. Prilikom instalacije aplikacija iz distribucije i ostalih aplikacija napisanih za KDE grafiko okruenje, ikone tih aplikacija automatski e se pojaviti u odgovarajuoj grupi u Start izborniku. Ukoliko se ikona nakon instalacije ne pojavi u Start izborniku potrebno je izdati naredbu update-menus koja e osvjeiti izbornike.

991/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Slika 3.2 KDE grafiko suelje Najvanije ikone koje se postavljaju automatski prilikom instalacije su linkovi na aplikacije Trash, Xkill, Control Center, Home i Internet. Aplikacije Trash i Internet vrlo su sline aplikacijama Recycle Bin i Internet iz MS Windows operativnog sustava, tj. slue za povratak obrisanih datoteka i spajanje na Internet. Ukoliko prije prvog pokretanja aplikacije Internet nije podeen nain spajanja na Internet, otvoriti e se arobnjak za konfiguraciju veze koji e nakon ispravnog podeavanja nekoliko opcija pokrenuti vezu. Aplikacija Xkill slui za uklanjanje programa koji su se "zamrznuli", a Control Center slui za podeavanje operativnog sistema. U samom dnu ekrana nalazi se traka s pokrenutim aplikacijama i ikonama za najvanije aplikacije (KDE Panel), a tu su takoer sat i ikone za odabir virtualnih radnih povrina. Ikone za pokretanje aplikacije mogu se dodavati u traku pomou Start ->Configure Panel->Add>Button, a u Configure Panel izborniku nalaze se i ostale opcije za podeavanje izgleda i funkcionalnosti KDE trake s aplikacijama. Detaljne upute za rad u KDE suelju i svim prateim aplikacijama nalaze se u Start -> Documentation -> Help.

992/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Zakljuak
KDE grafiko suelje je vrlo stabilan i dobar proizvod, s kojim dolazi mnotvo kvalitetnih aplikacija koje su veini korisnika dovoljne za svakodnevan rad na raunalu. Za razliku od nekadanjih grafikih suelja za Linux operativni sustav, KDE kao i Gnome suelje slijedi filozofiju MS Windowsa, pa je korisnicima naviknutima na rad u MS Windows-ima prijelaz na KDE prilino bezbolan. Testirana grafika suelja za Linux operativni sustav pokazala su se vrlo kvalitetnim. Po svojim mogunostima konfiguracije i prilagoavanja korisniku nadmauju MS Windows grafiko suelje. Jednostavna su za koritenje i pruaju sve prednosti point-and-click tehnologije. Gledano sa strane korisnika, razlike izmeu ta tri suelja vrlo su male (izmeu GNOME i Ximian GNOME paketa gotovo da ih i nema) i po mogunostima i po nainu koritenja. Razlike se uglavnom svode na set popratnih aplikacija koje s njima dolaze tako da se odabir uglavnom svodi na osobni ukus pojedinog korisnika. Hardverski zahtjevi su priblino jednaki za sva tri suelja. Minimalna preporuena konfiguracija za sva tri suelja je PI na 166MHz sa 128MB RAM memorije. Na slabijim konfiguracijama pokretanje grafikog suelja previe usporava rad za normalno koritenje raunala. Testiranja su pokazala da na slabijim konfiguracijama raunala GNOME i Ximian GNOME rade bre od KDE grafikog suelja. Na jaim konfiguracijama (PII na 400MHz sa 256MB RAM memorije) razlika u brzini rada je neprimjetna.

993/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

XIMIAN
Ximian je grafiko okruenje za Linux i Unix operativne sustave koje korisnicima omoguava jednostavnu primjenu i konfiguraciju raunala. Izgledom i nainom koritenja vrlo je slino grafikom okruenju iz MS Windows operativnog sustava. Ximian okruenje samo je nadogradnja GNOME paketa tako da su ta dva okruenja izgledom i nainom koritenja jednaka. Razlikuju se samo u aplikacijama koje dolaze s tim paketima. Aplikacijski softver koji dolazi s Ximian paketom je malo doraen u odnosu na aplikacije koje dolaze s GNOME paketom. Za razliku od GNOME paketa, u Ximian su ukljuene samo provjerene i stabilne aplikacije. S grafikim okruenjem dolaze i alati za konfiguraciju samog grafikog suelja, alati za konfiguraciju raunala i paket aplikacija koje se nalaze u rasponu od malih korisnikih programa pa sve do monih uredskih aplikacija. Zajednike znaajke tih aplikacija su besplatnost, jednostavnost za koritenje, brzi razvoj i dostupnost su preko Interneta. Uredske aplikacije koje su ukljuene u Ximian Desktop paket pod zajednikim imenom su: Gnumeric - spreadsheet aplikacija, AbiWord - program za obradu teksta, Mozilla - Web preglednik, GIMP - program za obradu slike, GNUCash - program za praenje osobnih financija, Evolution - program za elektroniku potu u koji je ukljuen i osobni organizator, StarOffice - skup uredskih programa slian MS Office paketu iz MS Windows okruenja, Red Carpet - program za manipulaciju softverom (instaliranje novog softvera, nadogradnja ili uklanjanje starog).

Opa svojstva
Budui da je Ximian grafiko okruenje samo nadogradnja GNOME paketa s njim dolazi isti softver za konfiguraciju. Program Kontrolni Centar za podeavanje grafikog suelja je isti kao i u GNOME paketu. Slika 4.1 prikazuje tipian izgled Ximian grafikog okruenja.

994/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Unix desktop system

Slika 4.1 Ximian grafiko okruenje

Grafiko suelje i rad s njim isti su kao u sluaju GNOME grafikog okruenja. Jedina razlika izmeu Ximian i GNOME paketa je u aplikacijskom softveru koji s njima dolazi. Ximian distribuira samo stabilne verzije softvera koje su u poodmakloj fazi razvoja za razliku od GNOME paketa s kojim dolazi i softver koji je jo uvijek u nestabilan i u ranoj fazi razvoja.

Zakljuak
Ximian je grafiko okruenje za Linux i Unix operativne sustave koje korisnicima omoguava jednostavnu primjenu i konfiguraciju raunala. Izgledom i nainom koritenja vrlo je slino grafikom okruenju iz MS Windows operativnog sustava tako da e ga korisnici koji imaju iskustva s MS Windows grafikim okruenjem vrlo brzo nauiti koristiti. Ximian je samo nadogradnja GNOME paketa tako da su ta dva grafika okruenja vrlo slina izgledom i nainom koritenja. Razlika izmeu GNOME i Ximian Desktop paketa je u popratnim aplikacijama koje s njima dolaze. Kao i u GNOME paketu, u Ximian Desktop paket ukljueni su i programi za konfiguraciju raunala iz grafikog okruenja to uvelike olakava rad neiskusnim Linux korisnicima.

995/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

Daniel Van Schepdael

DNS I DHCP

996/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

DNS

Server imena domena (Domain name server, krae DNS) je internetska direktorijska sluba. Pomou DNS se imena domene prevode u IP adrese, DNS takoer upravlja prijenosom e-mail-a. Ukoliko raunalo ne bi moglo pristupiti DNS-u, ne bi mogla pronai internet stranice, i slati i primati e-mail.

DNS sistem sastoji od tri komponente: DNS podaci (resource records) serveri (name servers) internet protokoli koji pribavljaju podatke od servera. Svih resource records u DNS-u su podjeljeni u milijune datoteke koje se nazivaju zone

(zones). Zone se uvaju u autoritativne (authoritative) serverima, koji su rasporeeni po cijelom internetu, koji odgovaraju na upite bazirane na resource records pohranjene u zonama od kojih imaju kopije. Cashing serveri trae podatke od drugih servera i cashiraju odgovore. Veina servera imena su autoritativne za neke zone i obavljaju funkciju cashiranja za sve ostale DNS podatke. Veliki serveri imena su esto autoritativni serveri za desetak tisua zona, ali veina servera imena su autoritativni serveri za samo nekoliko zona. Paul Mockapetris osmislio je DNS 1984. godine da rijei sve vee probleme sa starijim sustavom mapiranje ime-adresa. Stari sustav se sastojao od jedne datoteke pod nazivom tablica-domaina (host-table), koja je odravala Stanford Research Institute's Network Information Center (SRI-NIC). Kad bi se pojavile nove host names SRI-NIC bi ih dodavale tablici nekoliko puta tjedno. Sistemski administratori bi pribavljali najnoviju verziju (preko FTP) i prilagodili bi svoje serveri imena domena (Domain name servers). Ali kako se internet irio, tako je tablica-domaina postala sve nepraktinija. Iako je dobro funkcijonirala za mapiranje ime-adrese, nije bila praktina ni efikasna za prilagoavanje i distribuiranje podatake. Poto je stabilnost interneta u pitanju Mockapetris i jo par ljudi su odluili pronai bolji nain. Tako je nastao DNS. Dobra stvar je to to nijedna organizacija nije sama odgovorna za prilagoavanje. DNS je vrsta distribuirana baza podataka; podijeljena je preko puno servera u

997

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

cijelom svijetu. Nijedan server ne pohranjuje sve podatke. Zbog toga DNS praktiki dozvoljava neogranien rast. Da bi se shvatilo kako funkcionira DNS server treba biti upozat sa prostorom ime domene (domain name space). Ona se predstavlja sa obrnutim stablom.
(.root) .com .edu .org .net .gov .mil .arpa

.hr dvs

Svaki vor predstavlja jednu domenu. Sve sto je ispod vora pripada njezinoj domeni. Jedna domena moe biti dio jedne druge domene, npr. raunalo dvs pripada i .hr domeni i .com domeni. Popis 7 glavnih domena: .com .edu .gov .mil .net .org .int Komericijalne organizacije Obrazovne institucije Dravne institucije Vojne institucije Veliki mreni centri za podrku Organizacije koja ne spadaju meu prijanjih Meunarodne organizacije

.arpa je posebna domena koja se koristi za adresa-ime mapiranje. DNS server je raunalo koje koristi DNS software. Poto veina servera koriste Unix operativne sustave, najpopularniji DNS program je BIND (Berkeley Internet Name Domain), ali postoji i software za PC i Mac. DNS software uglavnom se sastoji od dva djela: server imena i resolver. Server odgovara na upite internet browsera dabavljanjem ime-adresa konverzije. Ukoliko server ne zna odgovor na upit, onda resolver tri podatke od drugog servera. Kad se upie URL u internet browser, ona alje upit najbliem serveru. Ako je taj server ve odgovorio na neki upit za isti host name (unutar nekog vremenskog roka, koji je postavio administrator da se izbjegne da se poalju stari podaci), onda e nai podatke u svom cashe-u i odgovoriti.

998

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

Ukoliko server ne zna za to ime domena, onda resolver pokuava ''rijeiti'' problem slanjem upita drugom serveru koji se nalazi vilje na stablu. Ukoliko to ne rijei problem, onda e taj drugi server isto poslati upit dalje sve dok se ne nae neki server koji zna (ukoliko server zna odgovor na upit bez da mora poslati upit drugam serveru, to zovemo autorativni server) odgovor na upit. Kad su podaci pronaeni, alju se natrag browser-u, i browsera se upuuje se na traenu internet stranicu. Obino se taj proces brzo odvija , ali moe se dogoditi da potraje i dulje (15ak sekundi). U najgorim sluajevima se moe dogoditi da se pojavi poruka da domena ne postoji, iako postoji. To se dogaa jer autoritativnom serveru treba dosta vremena da odgovori na upit, a raunalo istie vrijeme ekanja. Nakon isteka vremena raunalo odbaci spoj. Kasnijim pokuajem postoji velika mogunost da e proraditi, jer je autoritativnom serveru prolo dovoljno vremena da odgovori i prvi sever je pohranio podatke u svom cash-u.

DNS konfiguracija
DNS omoguava sustavima da pretrauju host name-ove u lokalnoj mrei i na internetu. Ovdje je koriten BIND 8.2 za primjer.

DNS server konfiguracija


Za konfiguraciju DNS posluitelja treba se napraviti nekoliko tekstualnih datoteka. Daemon DNS (nazvan named) posluitelja prvo provjerava boot datoteku. Ta boot datoteka odreuje daemonu koja daljnje datoteke treba provjeriti za prikupljanje podataka potrebnih za posluivanje imena domene. Biranje Domene Treba se izabrati ime domene prije nego to se konfigurira DNS posluitelj. Ovdje se koristi primjer dvs.net.hr. Boot Datoteka Named provjerava boot datoteku pri pokretanju tako da se poetne postavke i podaci mogu uitati. Primjer named.conf datoteke :

999

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

# # Boot file for server solaris, primary server # for dvs.net.hr. #

options { directory "/var/named"; forwarders { 299.18.99.151; 299.8.183.1; }; forward first; dialup yes; heartbeat-interval 1440; };

zone "." { type hint; file "named.ca"; };

zone " dvs.net.hr." { type master; file "private.hosts"; };

zone "3.5.10.in-addr.arpa." { type master; file "private.rev"; };

zone "0.0.127.in-addr.arpa." { type master; file "private.local"; };

Named.conf datoteka za BIND

1000

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

Znaenje ovih linija su: directory Direktorij pod kojeg se mogu pronai datoteke. /var/named direktorij je tradicijonalan iako se konfiguracijske datoteke najee nalaze u direktoriju pathname/etc. forwarders Popis IP adresa kojima se alju upiti. forward Nain na kojem se alju upiti. Upiti se alju prvo adresama navedenima u forwarders. Samo ako nijedan posluitelj ne odgovori ovaj e posluitelj sam obaviti posao. Ako se ova postavka postavi na only, onda ovaj posluitelj nikada ne obavlja pretrage sam. dialup Oznaava da ovo raunalo koristi Dial-up. heartbeat-interval Interval u kojem se obavlja odravanje, izraeno u minutama. Ova postavka je inicijalno postavljna na 60min. zone Podaci o odreenoj domeni. Linija pod navodnicima daje ime domene. type Vrsta podataka domene. hint znai da podaci slue za pronalaenje glavnih posluitelja domena (root domain server). master znai da je ovaj posluitelj glavni za ovu domenu. file Datoteka iz koje se uitavaju podaci posluitelja imena.

/var/named/named.ca Datoteka:
Kad posluitelj obavlja svoj posao (ali ne kada alje upite), treba mu poetna toka za pretraivanje domena. Ova datoteka sadri IP adrese posluitelja za glavnu domenu. Prvi dio ove datoteke pokazuje da su posluitelji imena za glavne domene ovi koji su navedeni. Drugi dio pokazuje IP adresu svakog posluitelja imena. Brojevi (518400 i 3600000) odreuju time-out za ove unose. Ovi brojevi moraju biti dovaljno veliki da time-out ne bi bio problem.

1001

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

. . . . . . . . . ; ; ;

518400 518400 518400 518400 518400 518400 518400 518400 518400

IN IN IN IN IN IN IN IN IN

NS NS NS NS NS NS NS NS NS

D.ROOT-SERVERS.NET. E.ROOT-SERVERS.NET. I.ROOT-SERVERS.NET. F.ROOT-SERVERS.NET. G.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. H.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. C.ROOT-SERVERS.NET.

Addresses

D.ROOT-SERVERS.NET. E.ROOT-SERVERS.NET. I.ROOT-SERVERS.NET. F.ROOT-SERVERS.NET. G.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. H.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. C.ROOT-SERVERS.NET.

3600000 3600000 3600000 3600000 3600000 3600000 3600000 3600000 3600000

IN IN IN IN IN IN IN IN IN

A A A A A A A A A

128.8.10.90 192.203.230.10 192.36.148.17 192.5.5.241 192.112.36.4 198.41.0.4 128.63.2.53 128.9.0.107 102.33.4.12

Inicijalna named.ca Cache datoteka za BIND

/var/named/private.hosts datoteka:
Ova datoteka sadri IP adrese privatne mree. Primjer private.hosts datoteke:

IN

SOA

solaris.dvs.net.hr.

root.solaris.dvs.net.hr. ( 2000050201 ; Serial

1002

Sveuilite u Splitu Struni studij Raunarstva Zagreb 10800 3600 432000 86400) IN NS ; Refresh - 3 hours ; Retry - 1 hour ; Expire - 1 week ; Minimum - 1 day solaris.dvs.net.hr.

Programski alati na Unix raunalima Dns i dhcp

name

ttl

class IN IN IN IN

type A A A A

data 127.0.0.1 10.5.3.1 10.5.3.21 10.5.3.22

localhost solaris win95 linux

mail www

IN IN

CNAME CNAME

solaris solaris

dvs.net.hr. dvs.net.hr.

IN IN

MX A

10

solaris.dvs.net.hr.

10.5.3.1

private.hosts datoteka za BIND

Objanjenje koda: @ Domena. Ovo je skraenica za domenu koja je navedena u named.conf datoteci (dvs.net.hr u ovom sluaju). IN Internet. Upuuje da se radi o zapisu za internet. SOA Source of Authority. Ovaj unas sadri podatke o tome koje je raunalo glavni posluitelj imena za ovu domenu (solaris.dvs.net.hr u ovom sluaju) i komu se treba obratiti u sluaju problema (root.solaris.dvs.net.hr). Serijski broj se koristi da se oznai gdje su se dogodile promjene. Ostali brojevi daju vrijeme isteka za podatke koji ovaj posluitelj nudi. Serijski broj se treba poveavati sa svakom verzijom datoteke.

1003

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

NS Name Server. Ova linija upuuje na to da je solaris.dvs.net.hr posluitelj imena za ovu domenu. A Address. Ova linija daje IP adrese raznih host-a. CNAME Canonical Name. Ove linije daju alijasi za razna imena. Ovo nije nuno, ali upuuju upite za www.dvs.net.hr prema solaris.dvs.net.hr MX Mail Exchange. Ova linija upuuje sustavu gdje se mail za korisnik@dvs.net.hr treba poslati (solaris u ovom sluaju).

The /var/named/private.rev file


Ova datoteka doputa obrnutu pretragu. S ovom datotekom sustav moe dobiti ime host-a na temelju IP adrese. Primjer private.rev datoteke: ;name
; ; @ Source of authority IN SOA solaris.dvs.net.hr.

ttl

class

type

data

root.solaris.dvs.net.hr. ( 2000050201 10800 3600 432000 86400) IN ; ; ; ;name 1 21 22 ttl IN IN IN class PTR PTR PTR type data Machines names NS ; Serial

; Refresh - 3 hours ; Retry - 1 hour ; Expire - 1 week ; Minimum - 1 day solaris.dvs.net.hr.

solaris.dvs.net.hr. win95.dvs.net.hr. linux.dvs.net.hr.

private.rev datoteka za DNS

1004

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

/var/named/private.local datoteka:
Ova datoteka doputa obrnutu pretragu za localhost adresu. Ova datoteka nije nuna. Primjer private.local datoteke:

; ; ; ;name ; ; @ Source of authority IN SOA solaris.flibble.orac.net.au. ttl class type data Reverse address file for localhost

root.solaris.flibble.orac.net.au. ( 2000050201 10800 3600 432000 86400) IN ; ; ; ;name 1 ttl IN class PTR type localhost. data Machines names NS ; Serial

; Refresh - 3 hours ; Retry - 1 hour ; Expire - 1 week ; Minimum - 1 day solaris.flibble.orac.net.au.

private.local datoteka za DNS

Pokretanje named Daemon Kad se imaju datoteke potrebne da se konfigurira named moe se pokrenuti /usr/local/sbin/named daemon. Ovaj daemon e uitati /usr/local/etc/named.conf datoteku za svoju konfiguraciju.

1005

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

DHCP

DHCP (Dynamic Host Configuration Protocol), je protokol za dodjeljivanje dinamine IP adrese ureajima na mrei. Sa dinaminim dodjeljivanjem adrese, ureaj moe imati razliitu adresu svaki put kad se spoji na mreu. U nekim sustavima moe se ak i promijeniti adresa dok je ureaj jo spojen na mreu. DHCP podrava i mjeanje dinamine i statine adrese. Dinamino adresiranje olakava posao administriranje mree, jer software sam prati IP adrese, tako da nema potebe za administratora da obavlja taj posao. Ovo znai da se moe dodati novo raunalo na mreu bez potrebe za runo postavljanje IP adrese. Puno ISP-a (Internet Service Providers) koriste dinamine adrese za dial-up korisnike. Raunala koja su namjetena da koriste DHCP nemaju potrebu da se runo postave mrene postavke, umjesto toga oni zatrae te postavke od DHCPD servera. Raunala se ne trebaju namjestiti da koriste odreeni DHCP server, jer routeri se namjeteni da prosljeuju DHCP zahtjeve tonim DHCPD serverima. Od dvije vrste IP adrese koje postoje, statine se dodjeljuju serverima, routerima i kabelskim modemima, a dinamine se dodjeljuju dial-up korisnicima. DHCP je nastavak BOOTP-a, koji je prijanji nain dodjeljivanje IP adrese. Postojei BOOTP ureaji mogu komunicirati sa DHCP serverima i mogu dopustiti DHCP zahtjevima da prou kroz BOOTP servere. Zbog toga to su kompatibilni u natrag, administratorima je jednostavno da nadograde ureaje sa BOOTP na DHCP po potrebi, bez da moraju zamjeniti sve client-e ili da moraju nadograsiti sve routere. Nekoliko velikih napredaka DHCP-a u odnosu na BOOTP su npr. DHCP koristi sustav posuivanja, sa kojim server moe dodjeliti adresu na odreeno vrijeme. Ukoliko ima vie ureaja nego adresa, onda se koriste adrese sa kraim vremenima trajanja da ne doe do manjka adrese. Ukoliko ima vie adresa nego ureaja onda se dodjeljuju stalne adrese sline onima u BOOTP sustavu. Kad se DHCP ureaj po prvi put spoji na mreu, ona poalje DHCPDISCOVER paket. DHCP server e na lokalnom segmentu vidjeti poruku i vratiti e DHCPOFFER paket, koji sadri IP adresu i drugih podataka. Server moe, ali ne mora prvo obaviti jedno testiranje prije nego to ponudi adresu, kao to je generiranje ARP ili ICMP jeka da vidi dali tu adresu koristi ve neki drugi vor.

1006

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

Client moe dobiti vie DHCPOFFER paketa od vie servera, pa mora birati jedan od njih. Tako poalje DHCPREQUEST paket, koji identificira odreeni server i ponudi posudbi koja najbolje odgovara. Odluka se moe zasnivati na tome koji server daje najdulju posudbu, ili koji nudi najvie podataka koji su odreenom clientu potrebni za najbolji rad. Serveri koji nisu izabrani e primiti DHCPREQUEST paket i nastaviti svoj rad. Ukoliko ponuda jos vrijedi, izabrani server e vratiti DHCPACK po kojemu client zna da je posudba obavljena. Ukoliko ponuda vie ne vrijedi (mogue zbog isteka vremena, ili zbog toga to je neki drugi client dobio tu ponudu), server treba odgovoriti sa DHCPNAK paketom. Zbog toga bi client morao ponovno poslati DHCPDISCOVER paket, i proces bi poeo iz poetka. Kad client dobije DHCPACK paket, vlasnitvo i odravanje posudbe postaju odgovornost clienta. Client-i bi trebali testirati adresu koja im je ponuena slanjem ARP upita, pa ako neki drugi vor odgovori na upit client e pretpostaviti da je ponuena adresa ve u uporabi. Tada bi client trebao odbaciti ponudu slanjem DHCPDECLINE poruke serveru koji je bio ponudio. Isto e poslati novi DHCPREQUEST paket, pokrenui ponovno cijeli proces. Jednom kad je client dobio posudbu, mora se obnavljati prije isteka trajanje posudbe slanjem nove DHCPREQUEST poruke. Ukoliko client prestaje koristiti posudbu prije isteka vrijeme trajanja, mora poslati DHCPRELEASE paket serveru, tako da se posudba moe osloboditi i ponuditi drugim korisnicima. Ukoliko server ne dobije potvrdu od clienta za nastavak koritenja, oznaava posudbu kao ne-obnovljenu i uini je dostupnom za druge client-e. Podatke koje DHCP server nudi: DHCP server normalno nudi slijedee podatke client-u: * Client IP number * Router/gateway adresa * Subnet maska * Broadcast adresa * DNS adrese * DNS domene

1007

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

DHCP server moe takoer nuditi slijedee podatke client-u: * BOOTP * TFTP server * Netbios name server * Novell server * Wins serveri * Hostname * vrijeme posudbe (za dinamino dodijeljene IP adrese)

DHCP jezik:
DHCP server i DHCP client se sporazumiju sljedeim porukama:

DHCPDISCOVER Ove molbe se alju kad client trai DHCP uslugu DHCPOFFER Ove odgovore alje server kao odgovor na DHCPDISCOVER poruku. Sadre ponudu IP adresa Ove molbe se alju kao odgovor serveru na DHCPREQUEST DHCPOFFER poruku, traei adresu koju je server ponudio; ili kad DHCP posudba doe do polovice trajanja, traei produenje roka adrese. Odgovor servera na DHCPREQUEST poruku. Sadre DHCPACK potvrdu da je posudba zatraena, da moe koristiti tu IP adresu. Ove odgovore alje server kao odgovor na DHCPREQUEST poruku. Sadre potvrdu da je DHCPNAK posudba zatraena, da NE moe koristiti tu IP adresu. Client-u se uglavno odbije zatrai posudbu IP adrese koju koristi ve drugi client. DHCPDECLINE Ove odgovore alje client kad se ponuena adresa ve koristi.

1008

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

Ovu molbu alje client kad je konfiguriran na neki DHCPINFORM drugi nain. Ove molbe se alju kao upit za postavke za mreu na koju su spojeni. BOOTREQUEST Molba koju client alje kad trai BOOTP adresu. BOOTREPLY Odgovor koji se alje client-u kao odgovor na BOOTREQUEST sa BOOTP adresu. Ovo su poruke koji DHCP server iz nekog razloga Discarded odbaci. Najee je to zbog loe konfiguriranog Windows NT raunala.

Konfiguriranje DHCP servera


DHCP.conf datoteka je vrlo jednostavna. Poinje sa uvodom, koji sadri globalne parametre postavke samog servera. Ovaj uvod, osim ako je drugae navedeno, vrijedi za sve subnet-e. Nakon toga slijede deklaracijske postavke za sve subnet-e koji su dostupni sa servera, bez obzira da li oni koriste DHCP usluge ili ne. U najjednostavnijem obliku, unos konfiguracije DHCP-a se sastoji od subnet adrese, mrene maske (netmask) i dosega IP adrese, pa se moe imati neto kao npr.: subnet 10.2.0.0 netmask 255.255.0.0 range 10.2.3.0 10.2.3.200; ovaj unos se odnosi na klasu A mree 10.2.0.0.. Meutim, samo adrese na manjoj mrei (10.2.3.0.) su dostupne. ak ni sve adrese u toj mrei nisu dostupne, jer je najvea adresa 10.2.3.200. Opcije u dhcp.conf datoteci imaju uglavom slijedeu sintaksu: opcija opcija-ime opcije-podaci Neke opcije su IP adrese ili imena domaina (hostnames), neke su brojevi ili tekst, dok su neke Boolean vrijednosti (true/false, on/off). Treba navesti rije option tako da bi DHCP server znao da je ono to slijdi opcija, a ne deklaracija subnet-a ili neto drugo.

1009

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

Slijedea tablica nudi pregled najeih DHCP opcija. Postojih jo, ali veina njih se odnose na specifine protokole ili servere

Parametar default-lease-time domain-name domain-nameservers fixed-address group hardware Host host-name max-lease-time netbios-nameservers range routers shared-network subnet subnet-mask

Opis Standarna duina trajanje posudbe Ime domene za spcifian subnet Lista servera imena za specifian subnet. Statina adresa koja se dodjeljuje host-u (podrava vie mrea) Poinje skupnu deklaraciju Vrsta mrene opreme (trenutno su samo Ethernet i token ring podrani) Poinje deklaraciju host-a Ime koje se dodjeljuje host-u Maksimalni rok izraeno u sekundima koji server daje posudbe Ime WINS servera Doseg IP adresa koja se dodjeljuje specifinoj mrei Popis routera koje se mogu upotrijebiti Zapone shared-network deklaracije Zapone subnet deklaracije Subnet-maska od ove mree

Vrsta podataka Numerini Tekst Lista IP adresa

Lista IP adresa N/A Tekst,adrese: oktete N/A Tekst Numerini

Lista IP adresa

niska i visoka IP adresa Lista IP adresa N/A N/A IP adresa

1010

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

Jedna od najspecifinijih definicija je hardware, koja opisuje specifian hardware. Trenutno su samo ethernet i token-ring podrani. Sintaksa koja se koristi za ovo je takva da se napie vrsta hardware, pa fizika adresa mrene kartice (npr. MAC adresa). Dobije neto kao to je ovo: host dvs hardware ethernet 00:50:04:53:F8:D2; fixed-address 192.168.42.3: Ovaj primjer pokazuje da raunalo dvs ima Ethernet mrenu karticu sa MAC adresom 00:50:04:53:F8:D2, i da mu se dodjeljuje fiksna adresa 192.168.42.3. Ponekad treba specificirati opcije za odreeni broj raunala na mrei bez da ih se odvoji u poseban subnet, npr.: mogao bi se definirati subnet za skupinu raunala i odrediti specifine opcije za samo taj subnet. Meutim, to znai da se trebaju odrediti sve potrebne opcije za konfiguraciju, a i znailo bi da specijalni vori ne mogu imati IP adresu u istom subnetu kao druge. Da se prevladaju ova ogranienja, mogu se spojiti raunala u jednu skupinu koristei kjunu rije group. Na ovaj nain sve opcije definirane za skupinu, odnose se na cijelu tu skupinu. Npr.: group default-lease-time 300000; option routers 192.168.42.1; host jupiter hardware ethernet 00:50:04:53:D5:57; default-lease-time 500000; host saturn hardware ethernet 00:50:04:53:F8:D2; host uran hardware ethernet 00:50:04:53:32:8F;

1011

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

U ovom primjeru, je postavljeno standardno vrijeme posudbe za skupinu da je 300000 sekundi (skoro etiri dana) i da je router ureaj sa adresom 192.168.42.1. ova definicija vrijedi za sva tri domaina koja su navedena (jupiter, saturn i uran). Meutim, kod jupitera je standardno vrijeme posudbe postavljeno na veu vrijdnost 500000 (skoro est dana), ali definicija routera (192.168.42.1.) i dalje vrijedi. Ponekad se moe pojaviti potreba za konfiguriranje nekoliko mrea na istom fizikom segmentu mree. Postoji vie razloga zato bi se to uinilo, kao to je ograniivanje odreenih ureaja na odreene segmente mree. DHCP doputa konfiguriranje sistema na taj nain odreivanjem shared-network. Shared-network je u biti spremite za skupinu raunala. Drugaije je od skupne deklaracije u tome to moe sadravati subnet-e i skupine. Ima sljiedeu sintaksu: shared-network network-name shared-network-specific parameters subnet subnet-specific parameters group group-specific parameters Treba primjetiti da se subnet deklaracije i deklaracije skupine mogu odrediti odreene parametre za odvojene host-e, kao da nisu dio shared network.

Rijeavanje moguih problema servera


Sa kompleksnim DHCP konfiguracijama, esto je teko rei koje parametri se odnose na koji host, ali treba upamtiti dvije stvari: prvo, host ili skupne deklaracije mogu premostiti globalne deklaracije i host deklaracije mogu premostiti skupne deklaracije. Drugo, definicije se ne primjenjuju nuno redosljedom kojim su zapisane u dhcpd.conf datoteci. Vrijednosti se primjenjuju u odrenom redosljedu poevi od specifinijih od openitijih tj. server prvo trai odreene konfiguracije host-a, pa skupne konfiguracije, pa subnet konfiguracije, pa konfiguracije shared-network, pa globalne konfiguracije. Konfiguracijske opcije se ne briu, nego se dodavaju. Konfiguracije za manje, specifinije jedinice (npr. Host) premoste

1012

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

konfiguracije za openitije jedinice (globalne parametre). Kad se rijeavaju problemi, uvijek se poinje na dnu pa se ide prema gore. Najosnovniji nain rjeavanja problema je promatranje posudbe koju je server dodijelio. To se gleda u datoteci za posudbe (/var/state/dhcp/dhcp.leases), koja odrava trenutna stanja svih aktivnih posudba. Ta datoteka se ponovno zapisuje da bi se izbjeglo da datoteka postaje prevelika. Prvo se napravi jedna privremena kopija i stara datoteka se primenuje u dhcp.leases~. Iako je rijetko, moe se dogoditi da server tad prestane raditi. Ako se to dogodi, dhcp.leases datoteka vie ne postoji vie postoji i server se ne moe ponovno pokrenuti. Poto ne moe jednostavno stvoriti novu dhcp.leases datoteku, treba staru dhcp.leases~ datoteku preimenovati u dhcp.leases. Sadraj dhcp.leases datoteke je jednostavan. Svaka deklaracija posudbe se identificira sa klunom rijei posudbe nakon koje slijedi IP adresa i blok konfiguracijske podatke, pa se dobije neto kao:
lease 192.168.42.1 starts 0 2000/01/30 08:02:54; ends 5 2000/02/04 08:02:54; hardware ethernet 00:50:04:53:D5:57; uid 01:00:50:04:53:D5:57; client-hostname "PC0097"; :

Start i end oznaavaju razdoblje u kojemu posudba vrijedi, svaki unos je oblika:
weekday yyyy/mm/dd hh:mm:ss;

Weekday je brojana vrijednost za dan (0 za nedjelju, kao to je ovdje sluaj), datum i vrijeme se raunaju po Greenwich Mean Time, a ne po lokalnom vremenu. Unos hardware-a je isti kao to je u dhcp.conf datoteci i daje adresu mrene kartice. Uid unos je jednoznaan identifikator za client, koristei ASCII-string identifikator koji daje client ili vrsta hardware-a sa adresom hardware-a (u ovom primjeru 01).

Konfiguracija client-a

1013

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

Kako se konfigurira client ovisi o distribuciji. Ako se izabere DHCP, /etc/rc.config datoteka e biti promjenjena postavljanjem konfiguracijske parametre za mrenu karticu na "dhcpclient". Npr. bez DHCP imalo bi se neto kao to je: IFCONFIG_0 = " 192.168.42.1 broadcast 192.168.42.255 netmask 255.255.255.0 up" Jednom kad je DHCP konfiguriran, unos bi bio ovakav: IFCONFIG_0 = " dhcpclient" Moe se konfigurirati tako da neki ureaji koriste DHCP, a drugi statine adrese. Kad se sustav pokrene, poziva se /etc/rc.d/network scripta. Ako je IPCONFIG linija jednaka Kasnije, za vrijeme boot procesa, scripta DHCP client-a, client e zatraiti konfiguraciju od DHCP servera. U veini sluajeva je standardna koniguracija client-a dovoljna. Ukoliko ne bi bila, client ima svoju konfiguracijsku datoteku: /etc/dhcclient.conf. Ukoliko postoji vie ureaja na mrei sa raziitim postavkama, onda se postavke trebaju staviti u skupinama po ureajima, pa se moe dobit ovako neto: interface eth0 send dhcp-lease-time 3600; request subnet-mask, broadcastaddress,time-offset, routers, domain-name, domain-name-servers, host-name; require subnet-mask, domain-name-servers; Naredba send kae client-u da alje pojedine postavke sa odreenim vrijednostima. To mogu biti bilo koje postavke koji server razumije. Request naredba je lista konfiguracijskih postavki (ne i vrijednosti) koje client zatrai od servera da mu poalje. Kluna rije "request," znai da server mora odreenu konfiguracijsku postavku poslati da bi client mogao prihvatiti serverov odgovor. " dhcpclient" za odgovarajuu mrenu karticu, onda se preskae konfiguracija za tu karticu.

1014

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Dns i dhcp

Sigurnost
Na prvi pogled moe se initi da nema puno potrebe za osiguravanjem DHCP sustava. Meutim, s obzirom koliko je DHCP vaan, valjalo bi postaviti neke sigurnosne mjere. Prva stvar je sam ureaj. Iako nestanak struje od nekoliko sati ne moe stvoriti puno problema , dui nestanak struje bi mogla znaiti da neka raunala ne bi imale valjane konfiguracije, ili ak valjanu IP adresu. Zbog toga treba uzeti u obzir koje usluge DHCP server jo nudi. Zbog toga to je potebno malo struje da bi DHCP mogao raditi, mogu se koristiti manji ureaji, na kojima DHCP radi pored jo drugih ureaja. Druga stvar koja se mora uzeti u obzir je denial-of-service napad. Ako bi DHCP server bio dostupan sa interneta, bilo bi mogue za nekoga da zauzme sve IP adrese, pa ne bi ostale adrese za druga raunala. Treba osigurati DHCP promet kroz firewall.

1015

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

Dario Benko

INTERNET HISTORY

1016/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

UVOD

Internet je iz temelja promijenio raunalni i telekomunikacijski svijet kao nita prije. Postao je sastavni dio mnogih ivota i jedno od najrairenijih sredstava komunikacije meu ljudima koje svakim danom proiruje svoje mogunosti. Ovoj nezapamenoj integraciji sposobnosti, prvenstveno prikupljanju, pohranjivanju i dohvatu informacija, te razmjeni podataka i programa sa svih podruja ljudskog djelovanja, te nizu drugih sve naprednijih i nekad nezamislivih stvari prethodili su telegraf, telefon, radio, prva raunala Internet je odjednom postao rasprostranjen irom svijeta, pruajui svakome tko ima tehnike mogunosti da se koristi njime, bilo gdje na zemlji. Komunikacija meu ljudima postala je sve manji problem bez obzira na udaljenost. On je jedan od najboljih primjera uspjenog ulaganja u istraivanja i razvoj informatike infrastrukture. Ovo je prikaz samo malog dijela dogaaja koji su prethodili ovoj velikoj mrei bez koje bi na dananji svijet bio nezamisliv.

NAPOMENA: dogaaji koji su prethodili nastanku i razvoju Interneta poredani su kronoloki. Meutim neki dogaaji dogodili su se na prijelazima izmeu godina ili je jo uvijek upitno kad su se tono dogodili, tako da podatke o godinama ne treba uzimati 100% sigurnim.

1017/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

Internet history (kronologija)

1836.god. Cook i Wheatstone izumili Telegraf i time pokrenuli revoluciju (tele)komunikacija. kao sredstvo takve komunikacije koristilo se Morseovo pismo (abeceda), serija tokica i crtica. To je opet vrlo slino dananjem, naravno vrlo brem, komuniciranju raunala, pomou binarnog koda (0/1). preko oceana postavljen je Transatlantski kabel koji je po prvi put trebao omoguiti trenutanu komunikaciju izmeu SAD-a i Europe. Naalost, zbog kvara, u funkciji je bio tek nekoliko dana. 1866.god. pothvat je uspjeno ponovljen i originalni Atlantski kabel postavljen te godine ostao je u upotrebi skoro 100 godina. Danas kablovi spajaju sve kontinente i jo su glavno arite telekomunikacija. (Godinja stopa rasta prometa podataka podvodnim telefonskim kabelima 1997.g. bila je 90%, a ukupno je bilo postavljeno 186,000 milja tih kabela). 1876.god. izumljen Telefon (Alexander Graham Bell Exhibits). telefonske centrale danas su osnovni oslonac Internet veza. modemi omoguavaju konverziju signala iz digitalnog u audio i time spajanje raunala preko telefonske mree. 1957.god. (4. listopada) SSSR lansira prvi umjetni zemaljski satelit, Sputnik. ovo je poetak globalnih telekomunikacija. Sateliti danas igraju vrlo vanu ulogu u prijenosu podataka. 1958.god. (7. veljae) kao odgovor na lansiranje Sputnika i na openite Sovjetske istraivake napore, Ministarstvo Obrane SAD-a (Department of Defense - DoD) objavljuje direktivu 5105.15 kojom formira agenciju za napredna istraivanja (ARPA - Advanced Research Projects Agency) u nadi da e u vojnom dijelu preuzeti vodstvo u znanosti i tehnologiji. Agencija je ujedinila neke od amerikih najnadarenijih ljudi i napravila veliki uspjeh lansiravi prvi ameriki satelit unutar 18 mjeseci od osmiljavanja agencije. Nekoliko

1018/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

godina kasnije agencija se fokusira na raunalno umreavanje i komunikacijsku tehnologiju te joj je povjeren zadatak razvijanja pouzdane komunikacijske mree, naroito za raunalnu upotrebu. Glavna motivacija za ovo je bila imati mreu decentraliziranih vojnih raunala spojenih na takav nain da u moguem ratu moe "preivjeti" unitenje jednog ili nekoliko vorita (nodes), oslanjajui se na komunikaciju izmeu preostalih vorita (nodes). 1961.god. Leonard Kleinrock, MIT: "Information Flow in Large Communication Nets". prvi put izloena packet-switching (PS) teorija. 1962.god. Dr. J.C.R. Licklider je dobio zadatak voenja glavnih ARPA-inih istraivakih zadataka u unapreivanju raunalne tehnologije za vojsku. Svojim utjecajem je takoer trebao maknuti ARPA-ina istraivanja od privatnih sektora prema sveuilitima diljem SAD-a. Time je poloio temelje za stvaranje ARPANET-a. razvijene su mree s prospajanjem paketa - Packet-switching (PS) networks. Paul Baran (RAND Corporation) objavljuje rad "On Distributed Communications Networks" u kojem predstavlja mree s prospajanjem paketa, Packet-switching (PS) networks. Ovo je bio presudan trenutak prema realizaciji raunalne mree iz niza razloga: Internet se oslanja na paketima za prijenos podataka. podaci su rastavljeni u sitne pakete koji mogu imati razliite puteve do odredita (i svaki u svom zaglavlju mora nositi globalnu adresu odredita). teko prislukivanje poruka. mogue vie od jednog puta, ako se jedan put "srui", slijedi drugi. ako kod bilo koje toke doe do gubitka paketa, poruka moe ponovno biti poslana (retransmisija). mree se mogu oduprijeti velikom stupnju unitenja (npr.nuklearnom napadu ovo je bilo razdoblje hladnog rata). 1965.god. ARPA financira studiju "cooperative network of time-sharing computers". 1966.god. Lawrence G. Roberts, MIT: "Towards a Cooperative Network of TimeShared Computers" (listopad). izloen prvi ARPANET plan.

1019/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

1967.god. na ACM simpoziju operacijskih principa (ACM Symposium on Operating Systems Principles in Gatlinburg, Tennessee, u kolovozu) - predstavljen je plan za mreu s prospajanjem paketa (packet-switching network). simpozij je pridonio i prvom susretu triju neovisnih "packet network" ekipa: RAND, NPL, ARPA. 1968.god. PS-network predstavljen ARPA-i. na National Physical Laboratories u Engleskoj dokazano je da je prva mrea s prespajanjem paketa operativna. Paralelni napori u Francuskoj takoer su rezultirali ranom packet-switching mreom na Societe Internationale de Telecommunications Aeronautiques. ARPA je ugovorno dodijelila ARPANET BBN-u. BBN je izabraio Honeywell DDP 516 miniraunalo kao bazu na kojoj e izgraditi prekretnicu (switch). 1969.god. roenje Interneta. BBN (Bolt Beranek and Newman, Inc.) dostavlja Interface Message Processor (IMP) Sveuilitu Kalifornija (UCLA) i ubrzo je izgraena fizika mrea spajajui 4 vorita (nodes): (redom) University of California (Los Angeles), SRI ( Stanford), University of California (Santa Barbara) i University of Utah (Salt Lake City). Brzina prijenosa - 50 Kbps. (vidi -> Slika 1.)

Slika 1.

1020/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

1970.god. Norman Abrahamson razvija ALOHAnet na University of Hawaii. ALOHAnet je pruao background za djelatnost koja kasnije postaje ethernet. 1972.god. - spojen s ARPANET-om. ARPANET "hostovi" poinju koristiti Network Control Protocol (NCP), prvi hostto-host protokol. Ovaj protokol je koriten do 1982, kada ga zamjenjuje TCP/IP. AT&T postavlja (instalira) prvu "cros-county" vezu izmeu UCLA i BBN (56kbps). Linija je kasnije zamjenjena drugom izmeu BBN-a i RAND-a. Druga linija je dodana izmeu MIT i Utah-a. 1971.god. Ray Tomlinson, BBN izumio prvi E-mail - program za slanje poruka preko mree. E-mail je jo uvijek glavni nain komunikacije ljudi preko Interneta. ARPANET narastao na 15 vorita (nodes) (23 hosts): UCLA, SRI, UCSB, University of Utah, BBN, MIT, RAND, SDC, Harvard, Lincoln Lab, Stanford, UIUC, CWRU, CMU, and NASA(Ames). (vidi -> Slika 2.)

Slika 2. 1972.god. sve je lake spajanje raunala (u mreu). prva javna demonstracija ARPANET-a (Bob Kahn, BBN) meu 40 maina (strojeva). (Demonstracija "packet switch"-a, i TIP-a (Terminal Interface Processor).

1021/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

ARPA (Advanced Research Projects Agency) mijenja ime u DARPA (Defense Advanced Research Projects Agency). Ray Tomlinson (BBN) modificira email program za ARPANET i postaje veliki hit. Znak @ izabran je za "at" znaenje. 1973.god. globalna mrea postaje stvarnost (ARPANET postaje internacionalan). prva meunarodna veza prema ARPANET-u: University College of London (Engleska) i Royal Radar Establishment (Norveka). po prvi puta objavljen obris za ideju Ethernet-a: Bob Metcalfe's Harvard PhD Thesis. specificiran File Transfer Protocol (FTP). Cerf and Kahn prezentiraju osnovne Internet ideje. 1974.god. paketi postaju nain prijenosa. specificiran Transmission Control Program (TCP), (Vinton Cerf i Bob Kahn) BBN predstavlja Telnet (komercijalnu verziju ARPANET-a) - prvi "public packet data service". 1975.god. prva ARPANET mailing lista, MsgGroup. (stvorio je Steve Walker). 1976.god. umreavanje se sve vie iri svijetom te i kraljica Elizabeta alje e-mail. UUCP (Unix-to-Unix CoPy) razvijen u AT&T Bell Labs i distribuiran sa UNIXom sljedee godine. UNIX je bio i jo je uvijek glavni operativni sustav koriten od strane sveuilita i istraivakih struktura. Dr. Robert M. Metcalfe razvija Ethernet, presudni element prema razvoju LAN-a. - roen SATNET (Atlantic packet Satellite network) koji je povezivao Ameriku i Europu. Koriteni su INTELSAT sateliti koje je posjedovao konzorcij zemalja, a ne iskljuivo amerika vlada. Department of Defense poinje eksperimentirati sa TCP/IP protokolom i uskoro ga odluuje upotrijebiti za ARPANET. 1977.god. E-mail sve vie kree uzlaznom putanjom i Internet postaje stvarnost.

1022/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

Larry Landweber sa Univ of Wisconsin stvara THEORYNET, UUCP temeljen email sistem, prua elektronsku potu prema preko 100 znanstvenika u raunarstvu (pomou lokalno razvijenog E-mail sistema i TELENET-a za pristup prema serveru). prva demonstracija ARPANET/Packet Radio. 1978.god. TCP podijeljen na TCP i IP (u oujku). 1979.god. roene News Grupe (News Groups). u SAD-u utemeljen Computer Science Department (research computer network). Tom Truscott i Steve Bellovin kreirali USENET. Bio je temeljen na UUCP-u. ARPA utemeljuje Internet Configuration Control board (ICCB). utemeljen Packet Radio Network (PRNET) prve MUD (Multiuser Dungeon)- interaktivne viekorisnike stranice. Interaktivne avanturistike igre, "board games", bogate i detaljne baze podataka. 1980.god. (27.10) ARPANET potpuno stao zbog nehotinog irenja "status-message " virusa. 1981.god. BITNET, "Because It's Time NETwork" je kao suraivaka mrea zapoela svoj rad kod gradskog Sveuilita New York, sa prvom vezom prema Yaleu. utemeljen je CSNET (Computer Science NETwork) kao pruatelj mrenih servisa, pogotovo E-maila. CSNET kasnije postaje poznat kao Computer and Science Network. 1982.god. TCP/IP definira budunost komunikacija. DCA i ARPA utemeljili Transmission control protokol (TCP) i Internet Protokol (IP), kao niz protokola za ARPANET, esto znan kao TCP/IP. TCP/IP odabran od DoD (Department of Defense) kao standard ovo dovodi do jedne od prvih definicija Interneta kao povezanog seta mrea, naroito onih koje koriste TCP/IP, i Internet kao spojene TCP/IP Internet. specificiran External Gateway Protocol (EGP). 1983.god. Internet se sve vie iri i dobiva na vanosti
1023/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

na Sveuilitu u Wisconsinu razvijen je Domain Name System (DNS). Nestala je potreba za pamenjem IP brojeva jer su se paketi bili usmjeravani prema nazivu domene, a zatim bi baza podataka na serveru taj "domain name" prevela u IP broj. uspostavljen Gateway izmeu CSNET-a i ARPANET-a. ARPANET podijeljen na ARPANET i MILNET. UNIX "maine" s ugraenim TCP/IP-om postaju popularne. ICCB zamjenjen sa Internet Activities Board (IAB). Berkeley objavljuje novu verziju UNIX-a 4.2BSD ujedinjujui TCP/IP. utemeljena EARN (European Academic and Research Network). 1984.god. rast Interneta se nastavlja. Preko 1000 "hostova". predstavljen DNS Domain Name Server (umjesto 123.456.789.10 lake je upamtiti neto poput: www.myuniversity.mydept.mynetwork.mycountry) (npr. www.cs.cf.ac.uk) u Engleskoj utemeljena JANET (Joint Academic Network). u Japanu uspostavljen JUNET (Japan Unix Network). 1985.god. The National Science Foundation poeo s postavljanjem novih T1 linija(1.544Mbps), koje e biti zavreno do 1988. 1986.god. shvaena mo Interneta. 5, 000 Hosts. 241 News groups. osmiljen je NSFNET (osnovna brzina od 56 Kbps) originalno sastavljen od 5 super-raunalnih centara spojenih s 56Kbps lines. Druga sveuilita se ukljuuju. NSF osniva 5 super-raunalnih (super-computing) centara za pruanje visokoraunalne snage za sve (high-computing power for all). Ovo omoguuje eksploziju veza, osobito od izmeu sveuilita. stvoren Network News Transfer Protocol (NNTP). Craig Partridge razvio Mail Exchanger (MX) records. 1987.god. zapoela je komercijalizacija Interneta. preko 10,000 "hostova". UUNET temeljen s Usenix-om osigurava sredstva da prui komercijalni UUCR i Usenet pristup.
1024/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

NSF i Merit Network, Inc pristaju na upravljanje NSFNET backbone. e-mail link uspostavljen izmeu Njemake i Kine. 1988.god. NSFNET backbone nadograen (poboljan) prema T1 (1.544 Mbs), promet vrlo brzo raste te odmah poinju planovi za nadogradnju novu mree. razvijen Internet Relay Chat (IRC). Kanada, Danska, Finska, Francuska, Island, Norveka, vedska si na NSFNET-u. DARPA formira CERT (Computer Emergency Response Team). razvijen Internet Relay Chat (IRC) (Jarkko Oikarinen). 1989.god. veliki rast Interneta. prvi prijenosi preko komercijalnog mail nosaa (commercial electronic mail carrier) i Interneta. stvoreni Internet Engineering Task Force (IETF) i Internet Research Task Force (IRTF). CSNET se spaja (stapa, pripaja) s BITNET-om i formira Corporation for Research and Education Networking (CREN). Australija, Njemaka, Izrael, Italija, Japan, Meksiko, Nizozemska, Novi Zeland, Puerto Rico, Engleska na NSFNET-u. 1990.god. irenje Interneta se nastavlja. ARPANET nestaje i zamjenjuje ga NSFNET. Archie released files can be searched and retrieved (FTP) by name. svijet postaje on-line (world.std.com), postaje prvi komercijalni pruatelj Internet dial-up pristupa. Argentina, Austrija, Belgija, Brazil, ile, Grka, Indija, Irska, juna Koreja, panjolska, vicarska na NSFNET-u. 1991.god. modernizacija poinje. Brewster Kahle izumio (osmislio) Wide Area Information Servers (WAIS). Prua mehanizam za indeksiranje i pristupanje informacijama na Internetu. Paul Lindner i Mark P. McCahill sa sveuilita u Minnesoti objavili Gopher. Worl-Wide Web (WWW) objavljen od strane CERN-a, razvio ga Tim BernersLee. NSFNET backbone nadograen na T3 (44.736Mbps).
1025/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

NSFNET promet prelazi 1 trilijun bajtova/mjesec i 10 bilijuna paketa/mjesec. Hrvatska, Republika eka, Hong Kong, Maarska, Poljska, Portugal, Singapur, Juna Afrika, Tajvan, Tunis na NSFNET-u. 1992.god. Multimedija mijenja lice Interneta. broj hostova prelazi 1 milijun. News groups 4,000. osnovan Internet Society (ISOC). Jean Armour Polly smislio izraz "Surfing the Internet" (surfanje Internetom). Kameruna, Cipar, Ekvador, Estonija, Kuvajt, Latvija, Luksemburg, Malezija, Slovaka, Slovenija, Tajland, Venecuela na NSFNET-u. 1993.god. WWW revolucija stvarno zapoinje. broj hostova 2 milijuna, 600 WWW stranica. InterNIC stvoren od strane NSF-a, za pruanje specifinih Internet usluga. poslovni i medijski svijet zapaa Internet. Bijela Kua i Ujedinjeni Narodi postaju on-line. razvijeno grafiko korisniko suelje Mosaic. Kasnije prerasta u Netscape. WWW se iri sa godinjom stopom od 341,634 %, a Gopher-ov rast je 997%. Bugarska, Kostarika, Egipat, Fidi, Gana, Guam, Indonezija, Kazahstan, Kenija, Lihtentajn, Peru, Rumunjska, Ruska Federacija, Turska, Ukrayne, UAE, Djevianski Otoci na NSFNET-u. 1994.god. komercijalizacija zapoinje. broj hostova 3 milijuna. 10,000 WWW stranica. 10,000 News grupa. ARPANET/Internet slavi 25 obljetnicu. trgovaki centri i banke stiu na Internet. NSFNET promet premauje 10 trilijuna bajtova/mjesec. Alir, Armenija, Bermudi, Burkina Faso, Kina, Kolumbija, francuska Polinezija, Jamajka, Libanon, Litva, Macau, Maroko, Nova Kaledonija, Nikaragva, Niger, Panama, Filipini, Senegal, ri Lanka, Svazi, Urugvaj, Uzbekistan na NSFNET-u. 1995.god. komercijalizacija se nastavlja. 6.5 Million Hosts, 100,000 WWW Sites.

1026/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

NSFNET se vraa nazad prema istraivakoj mrei. Glavni dio SAD backbone prometa sada usmjeren kroz meusobno povezane mrene dobavljae (network providers). WWW premauje ftp-data (u oujku) kao servis s najveim prometom na NSFNet temeljen na broju paketa, i u travnju temeljen na broju bajta. tradicionalni on-line dial-up sistemi (Compuserve, America Online, Prodigy) poinju pruati pristup Internetu. registracija naziva domene nije vie besplatna. pojavljuju se nove WWW tehnologije: Mobile code (JAVA, JAVAscript, ActiveX), "Virtual environments" (VRLM), "Collaborative tools" (CU-SeeMe). 1996.god. Microsoft ulazi u igru. 12.8 Million Hosts, 0.5 Million WWW Sites. Internet telefoni hvataju panju amerikih telekomunikacijskih poduzea koja trae od Kongresa SAD-a da zabrani tu tehnologiju (koja je ve nekoliko godina bila uokolo u upotrebi). zapoinje WWW rat, primarno borbe izmeu Netscape-a i Microsoft-a, i pouruje u novo doba softverskog razvoja, pomou ega su nova putanja raena tromesjeno uz pomo Internet korisnika eljnih testiranja predstojeih (beta) verzija. 1997.god. 19.5 Million Hosts, 1 Million WWW sites, 71,618 Newsgroups. pretraivai i Web preglednik tehnologije sve popularniji. 17. srpnja ljudskom grekom u Network Solutions-u .com i .net domene postaju nedostupne. American Registry for Internet Numbers (ARIN) osnovan sa zadatkom da upravlja administriranjem i prijavom IP brojeva prema geografskim podrujima s im je do sada rukovao Network Solutions (InterNIC). 1998.god pretraivaima i Web preglednik tehnologijama popularnost sve vie raste. Ameriko ministarstvo trgovine (US Depart of Commerce - DoC) u glavnim crtama iznijelo svoj plan privatiziranja DNS-a. uzlet elektronike trgovine i portala. Amazon.com pokazuje cijelom svijetu kako trgovati on-line.
1027/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

e-Bay online aukcije takoer kreu uzlaznom putanjom. milijuna Web starnica. 1999.god. MCI nadograuje vBNS prema 2.5 Gbits/sec. razvijaju se Internet2. nove optike mrene tehnologije poinju preoblikovati Internet "backbone". prie o stapanju Interneta i javnog telefona ("public telephone system"). prvi "large-scale Cyberwar" istovremeno sa ratom u Srbiji (Kosovo). virusi godine: Melissa(oujak) i ExploreZip (lipanj). 2000.god. uzlet XML-a. maleni mobilni beini raunalni ureaji. kako se informacije o ljudima ire Internetom, privatnosti je sve manje. US timekeeper i nekoliko drugih "time servisa" 1. sijenja biljee godinu kao 19100. masivni napad na velike web sajtove, ukljuujui Yahoo, Amazon i eBay u oujku, onemoguio im pruanje usluga. virus godine: Love Letter (svibanj). tehnologije godine: ASP, Napster. sudski procesi godine: Napster, DeCSS. 2001.god. virusi godine: Code Red, Nimda, SirCam, BadTrans. novonastale tehnologije: Grid Computing, P2P. GANT, "the pan-European Gigabit Research and Education Network" stavljena u funkciju zamjenjujui tako "TEN-155 network". radio stanice poinju emitiranje preko Web-a. visoke kole u pet amerikih drava (Michigan, Missouri, Oregon, Virginia i Washington) meu prvima dobivaju Internet2 pristup. Napster prisiljen obustaviti svoje usluge, ali e se ponovno javiti kasnije kao "subscription service". Europsko vijee dovrilo je meunarodni "cybercrime" ugovor i usvojilo ga 9. studenog. Ovo je prvi ugovor koji obrauje kaznena djela poinjena preko Interneta.
1028/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

2002.god. oformljena Global Terabit Research Network (GTRN), spaja Internet2 Abiline, CANARIE CA*net3 i GANT. blog-ovi postaju hit. ameriki zakon osmiljava i sprovodi kids-safe domenu, "dot-kids" (kids.us). 2003.god. crv SQL Slammer prouzroio jedan od nejveih i najbre ireih DDoS napada ikada. Za otprilke 10 minuta rairio se po cijelom svijetu, sruio je 5 od 13 DNS root servera kao i desetine tisua drugih servera, djelujui i na mnotvo drugih sistema. nakon ovog, u kolovozu su uslijedili drugi, Sobig.F virus, najbre rasprostirui virus i Blaster (MSBlast), jedan od najdestruktivnijih crva. Little GLORIAD (Global Ring Network for Advanced Application Development) poinje djelovati. Sastoji se od umreenog prstena preko sjeverne polutke sa vezama prema Chicagu, Amsterdamu, Moskvi, Novosibirsku, Zabajkal'sku, Manzhouliu, pekingu i Hong Kongu. Ovo je prva mrena povezanost preko Rusko-Kineske granice. 2004.god. 2005.god. - ???

1029/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

PRILOG:
Rast Interneta: Datum 12/69 06/70 10/70 12/70 04/71 10/72 01/73 06/74 03/77 12/79 08/81 05/82 08/83 10/84 10/85 02/86 11/86 12/87 07/88 10/88 01/89 Hosts 4 9 11 13 23 31 35 62 111 188 213 235 562 1,024 1,961 2,308 5,089 28,174 33,000 56,000 80,000 Datum Hosts 07/89 10/89 10/90 01/91 07/91 10/91 01/92 04/92 07/92 10/92 01/93 04/93 07/93 10/93 01/94 07/94 10/94 01/95 07/95 01/96 07/96 01/97 07/97 01/98 07/98 01/99 130,000 159,000 313,000 376,000 535,000 617,000 727,000 890,000 992,000 1,136,000 1,313,000 1,486,000 1,776,000 2,056,000 2,217,000 3,212,000 3,864,000 5,846,000 8,200,000 14,352,000 16,729,000 21,819,000 26,053,000 29,670,000 36,739,000 43,230,000 Network Domains 650 837 2,063 2,338 3,086 3,556 4,526 5,291 6,569 7,505 8,258 9,772 13,767 16,533 20,539 25,210 37,022 39,410 61,538 93,671 134,365 20,000 16,300 18,100 21,000 22,000 26,000 28,000 30,000 46,000 56,000 71,000 120,000 240,000 488,000 828,000 1,301,000 16,000 18,000 9,300 3,900

1030/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

07/99 01/00 07/00 01/01 07/01 01/02 07/02 01/03

56,218,000 72,398,092 93,047,785 109,574,429 125,888,197 147,344,723 162,128,493 171,638,297

Hosts - kompjutorski sistem s registriranom IP adresom Networks - registrirana klasa A/B/C adresa Domains - registriran naziv domene (sa "name server" zapisom)

1031/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Internet history

ZAKLJUAK :

Put do ovog to danas zovemo Internetom nije bio nimalo lagan i nitko tko je sudjelovao u njegovom stvaranju nije imao konanu viziju o tome to e se iz svega toga izroditi. Tako je i danas. Internet svakim danom nezaustavljivo raste i nemogue je predvidjeti to e se dogoditi u budunosti. Koliko e opstati? Dali ga ita moe zamjeniti? Kako e izgledati i kojim e smijerom napredovati? Sve to su pitanja kojima nitko ne zna odgovor. Mi imamo priliku biti svjedoci tog napretka pa ak i svojim malim doprinosima sudjelovati u njegovom razvoju.

1032/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Amir Kos

Uvod u Perl

1033/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

SKALARI
Skalari su najjednostavniji oblik podataka s kojim Perl manipulira,skalar je recimo broj(npr. 5 ili 3.27e20) ili string koji se sastoji od karaktera(npr. hello),iako se moda ini da su brojevi i stringovi razliite stvari,Perl ih tretira kao jednake. Skalarne vrijednosti se spremaju u skalarne varijable.

Brojevi
U Perlu moete koristiti i integere isto kao i floating-point brojeve,Perl u stvari sve brojeve interno interpretira kao double-precision floating point values(u C ekvivalent double varijablama),to znai da za perl ne postoje Integer vrijednost oni se jednostavno interno tretiraju kao double floatovi(ukoliko ne koristite integer mode ali to nije po defaultu)

Float karakteri
Karakter je nain na koji perl interpretira vrijednost u programu,perl prihvaa cjeli set floating point karaktera dostupnih u C: Npr.:
1.25 # 5/4 7.25e45 # 7.25 * 10 potencirano na 45 -6.5e24 # -6.5 * 10 na 24 -12e-24 # - 12 * 10 na -24 -1.2E-23 # isto kao i iznad

1034/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Integer karakteri
npr.:
12 15 -2004 3485

Nikada ne poinjite broj s 0 zato sto perl podrava i oktalne i hexadecimalne vrijednosti okatalne poinju s 0 a hexadecimalne sa 0x Npr.:
0377 # 377 octal, isto kao 255 decimalno -0xff # - FF hex, isto kao -255 decimalno

Stringovi
Stringovi su naprosto niz karaktera kao npr. hello svaki karakter je 8-bitna vrijednost sto e rei da perl raspolae sa 256 razliitih karaktera(nema nita posebno oko NUL karaktera '/0' kao npr. u C). Najkrai mogui string nema karaktera,najdui string moe ispuniti svu vau raspoloivu memoriju jer perl slijedi filozofiju tzv. no-built in limits,to daje perlu mogunost manipulacijom stringovima kao sirovim binarnim podacima zadatak koji bi nekim drugim alatima predstavljao veliku tekounpr. moete patc-ati svoj OS jednostavno itajui string u Perl string,napraviti izmjenu i ponovno zapisati rezultat na izlaz! Kao i brojevi stringovi se prezentiraju karakterima!

Stringovi s jednostrukim navodnicima


Jednostruki navodnici slue perlu kako bi znao gdje string poinje a gdje zavrava i nisu dio samoga stringa,bilo koji karakter koji se nae unutar '' je dio samoga stringa. Postoje dvije iznimke ako elite unutar stringa upisati jednostruki navodnik morate ga prethoditi s \ a ukoliko elite unutar stringa ugurati backslash morate ga prethoditi s \
'hello' '' # pet karaktera: h, e, l, l, o # prazan string

'don\'t' pet karaktera: d, o, n, jednostruki navodnik ' pa t 'silly\\me' # silly\me 'hello\n' # hello +backslash + n

1035/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb 'hello there' # hello, novi red, there (11 karaktera ukupno)

Programski alati na Unix raunalima

treba primijetit da \n unutar jednostrukih navodnika nije interpretiran kao novi red,nego jednostavno kao dva karaktera \n(jedino u sluajevima kada je na \ dodan jo jedan \ ili ' tek tada ima posebno znaenje.

Stringovi s dvostrukim navodnicima


Stringovi s dvostrukim navodnicima se ponaaju vrlo slino C-stringovima,to je opet samo niz karaktera,samo ovaj puta u s dvostrukim navodnicima,ali u ovom sluaju backslash ima svoje puno znaenje da specificira kontrolne karaktere.
"hello world\n"# hello world, and a newline "new \007" # new, space, and the bell character (octal 007) "coke\tsprite" # a coke, a tab, and a sprite

"c:\\temp"

# c:, backslash, and temp

Backslash moe prethoditi mnogim razliitim karakterima a da znae razliite stvari U tablici se nalaze izrazi i njihova znaenja:

Izraz \n \r \t \f \b \v \a \e \007 \x7f \cC

Znaenje Nova linija Return Tab Formfeed Mjesto unazad(Bckspace) vertikalni tab Bell Escape Bilo koja octal ASCII vrjed (ovdje, 007 = bell) Bilo koja hex ASCII vrjed (ovdje, 7f = delete) Bilo koji "control" character (ovdje, control C)

1036/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb


Izraz \\ \" \l \L \u \U \Q \E Znaenje Backslash Dvostruki navodnici Malo slijedee slovo Sve malo do \E Veliko slijede slovo Velika slova sev do \E Backslash quote all nonalphanumerics Terminira \L , \U or \Q

Programski alati na Unix raunalima

Jo jedna uloga dvostrukih navodnika je da interpoliranju varijable,tj ukoliko se unutar dvostrukih navodnika nae varijabla vrijednost varijable e biti zamijenjena njenom vrijednou,jo jedna napomena ukoliko koristite Pathnameove pod Unix-om ili Win32 perl prihvaa ili \ ili / sa razlikom da \ mora slijediti esape sekvenca
"c:\\temp" # koristi escaped backslash "c:/temp" # koristi a Unix-style forward slash "c:\temp" # GREKA string sadri c:, a TAB, and emp

Skalarni Operatori
Operatori na neki nain proizvode novu vrijednost iz jedne lili vie vrijednosti,operatori oekuju ili string ili broj,ukoliko proslijedite string gdje se oekuje broj,perl automatski pretvara po svojim intuitivnim pravilima. Ukoliko koristite string operand na numerikom operatoru npr. +,perl automatski pretvara string u ekvivalentan broj,kao da ste unijeli njegovu reprezentaciju u double floating point vrijednosti,razmaci i nenumerici se ignoriraju npr.: 1234.567car se pretvara u 1234.567 sa malim warningom(ukoliko ne stavite w iz komandne linije to bi svakako trebali zlu netrebalo). S druge strane ukoliko pokuate proslijediti string kada se oekuje broj,numerika vrijednost se proiruje u ekvivalentan string recimo:
"X" . (4 * 5) # isto kao "X" . 20, ili "X20"

drugim rijeima ne morate se brinuti jer perl radi umjesto vas!

1037/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Operator za brojeve
Perl podrava tipian set operatora kao i drugim jezicima:
2+3 3 * 12 10 / 3 2**3 # 2 plus 3, ili 5 # 3 puta 12 = 36 # uvijek floating point djeljenje, priblino 3.333333... #Fortran 2*2*2=8 5.1 - 2.4 # 5.1 minus 2.4, priblino 2.7 10.2 / 0.3 # 10.2 podijeljeno 0.3, priblino 34

10.5 % 3.2 # 10 mod 3=1

3 > 2 # vraa true 5 != 5 # vraa false

Logiki operatori su
Usporedba jednako Ne jednako Manje od Vee od numeriki String == != < > eq ne lt gt le ge

Manje ili jednako <= Vee ili jednako >=

Operator za stringove Stringovi se mogu konkatenirati sa . operatorom


"hello" . "world" 'hello world' . "\n" # "helloworld" # isto kao "hello world\n"

"fred" . " " . "barney" # isto kao "fred barney"

1038/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb Jo jedan set operator su string komparacijiski operatori:

Programski alati na Unix raunalima

Comparison jednako Ne jednako Manje od Vee od Manje ili jednako Vee ili jednako

Numeric == != < > <= >=

String eq Ne Lt gt le ge

Operatori usporedjuju stringove na uobiajen nain po ASCII vrijednostima karaktera.Vjerojatno se pitate zato postoje razliiti operatori za brojeve i stringove npr. usporedimo li 7 i 30 ako ih usporedimo kao brojeve 7<30 ali ako ih usporedimo kao strinove onda je 7>30 (ASCII vrijednost 3 je manja od 7 i rezultat je pogrean,stoga perl zahtijeva da explicitno odredite kakvu usporedbu radite. Jo jedan string operator je string repetition operator malo slovo x,ovaj operator uzima lijevi operand i radi onoliko konkateniranih kopija koliki je operand s desne strane

"fred" x 3

# rezultat "fredfredfred" # is 5 x 4, ili "5" x 4, sto je "5555"

"barney" x (4+1) # rezultat "barney" x 5, or # "barneybarneybarneybarneybarney" (3+2) x 4

# zadnji primjer je posebno zanimljiv zagrade imaju prioritet pa se 3+2=5 ali operator x eli string kao lijevi operand pa se vrijednost 5 pretvara u string 5 pa je rezultat string 5555,da smo izraz okrenuli naopake dobili bi 44444 ovaj primjer pokazuje da x nije komutativan #

1039/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Prioriteti operatora i asocijativnost


Perl koristi matematiku pri odreivanju prioriteta operatora
2+3*4 # 3*4=12+2= 14 (2+3)*4 #2+3=5*4=20

Ukoliko elimo explicitno odrediti redoslijed izvravanja koristimo zagrade,ukoliko ne koristimo zagrade perl rauna po svojoj (matematikoj) logici:

Tablica Asocijativnosti i redoslijeda izvravanja operatora

Asocijativnost Left Left Nonassociative Right Right

Operator "list" operatori (ljevo) -> (poziv metode, derefernciranje) ++ -- (autoincrement, autodecrement) ** (potenciranje) ! ~ \ + - (logiki not, bit not, operator reference, unarni plus, unarni minus)

Left Left Left Left Nonassociative Nonassociative Nonassociative Left Left Left Left Nonassociative

=~ !~ (matches, doesn't match) * / % x (mnoenje,djeljenje,mod,string repetition) + - . (plus,minus,konkateniranje) << >> (shift operatori) imenovani unarni operators (npr chomp) < > <= >= lt gt le ge (relacijski operatori) == != <=> eq ne cmp (operatori jednakosti) & (bitovni and) | ^ (bitovni or, bitovni xor) && (logiki and) || (logiki or) .. ... (noninclusive and inclusive range)

1040/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb Asocijativnost Right Right Left Nonassociative Right Left Left Operator ?: (if then else) = += -= *=, etc. (dodjeljivanje i binarno dodjeljivanje) , => (comma and comma arrow) List operatori (rightward) not (logiki not) and (logiki and) or xor (logiki or, logiki xor)

Programski alati na Unix raunalima

Operatori jednakoga prioriteta se rjeavaju po pravilu asocijativnosti npr.:


2 ** 3 ** 4 # 2 ** (3 ** 4), ili 2 ** 81, priblino 2.41e24 72 / 12 / 3 # (72 / 12) / 3, ili 6/3, ili 2 30 / 6 * 3 # (30/6)*3, ili 15

Skalarne Varijable
Varijabla je mjesto u memoriji koja sadri jednu ili vie vrijednosti,ime varijable je konstantno kroz cijeli program ali se vrijednost koju sadrava varijabla tipino mijenja. Skalarna varijabla dri jednu skalarnu vrijednost(bio to broj ,string ili referenca),ime varijable poinje s $ te sadri slova ,brojeve ili _,(max 255 znakova )imena varijabli su osjetljiva na velika i mala slova tako da $A nije isto to i $a.

Skalarni operatori i funkcije


Najjednostavniji nain je pridjeljivanje razmotrimo slijedee primjere $a = 17; # dodaj na $a vrijednost 17 $b = $a + 3; # dodaj na $b vrijednost $a plus 3 (20)

$b = $b * 2; # dodaj na $b vrijednost $b puta 2 (40)


$b = 4 + ($a = 3); $d = ($c = 5); $d = $c = 5; # dodaj 3 u $a, potom dodaj 4 na sve to i spremi u $b # kopiraj 5 u $c, a potom i u $d # isto ali bez zagrada radi zbog asocijativnosti

1041/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Binarni operatori pridjeljivanja


Izrazi kao to su $a=$a+5 je ekvivalentno izrazu $a+=5 svaki izraz u kojem se varijabla pojavljuje na obje strane jednakosti moemo skraeno pisati ,tj. dodjeljivati im vrijednost koristei binarne operatore pridjeljivanja,skoro svi binarni operatori koji raunaju neku vrijednost imaju odgovarjui binarni dodjeljiva vrijednosti. $a = $a + 5; # bez binary assignment operatora $a += 5; $b = $b * 3; $b *= 3; $a **= 3 # potenciraj $a na 3 i spremi u $a U svakom sluaju operator izaziva da se vrijednost varijable na neki nain promjeni ,a ne da se jednostavno prepie rezultat nekog novog izraza. Jo jedan uobiajeni perator dodjeljivanja je string konkatenator $str = $str . " "; # dodaj na $str space $str .= " "; # isto stavr ali sa assignment operator Kao i jednostavni operatori pridjeljivanja,svaki od tih operatora ima i vrijednost;novu vrijednost varijable $a = 3; $b = ($a += 4); # $a i $b su sada = 7 # sa binary assignment operatora

Autoinkrement i Autodekrement
$a += 1; # s operatorom pridjeljivanja ++$a; $d = 17; $e = ++$d; # $e i $d su sad= 18 ovdje je operator ++ koriten kao prefix tj. operator je lijevo od operanda,operator se moe koristiti i sa desne strane izraza,u tom sluaju rezultat je ostao isti $c = 17; $d = $c++; .# $d = 17, ali $c = 18 # sa autoinkrementom

Auto dekrement se ponaa na slian nain samo to on ne dodaje ve oduzima vrijednost .


$x = 12; --$x; # $x sada iznosi 11 $y = $x--; # $y =11, ali sada je $x = 10

Treba napomenuti da autoinkrement i autodekrement rade i na floating point vrijednostima npr.


$a=4.3; ++$a;

1042/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb $a=5.3;

Programski alati na Unix raunalima

Chop() i chomp funkcije


Chop funkcija uzima jedan argument sa zagradama(ime skalarne varijable a ne skalarne vrijednosti) i skida zadnji karakter iz stringa koji se nalazi u varijabli,povratna vrijednost funkcije je odsjeeni karakter $name=amirko\n; chop($name) # $name=amirko $name=car the one chop($name); $name=car the on; $name=car the one $name=chop($name) # GREKA $name=e; chop($name) # OK odsijeca zadnji karakter; Ukoliko funkciji proslijedimo prazan string ona ne radi nita i ne vraa nita,treba napomenuti da e funkcija pri svakom pozivu na skalarnoj varijabli odsijecati po jedan znak.

$a=amir;
chop($a) chop($a) # $a=ami; # $a=am

ukoliko niste sigurni da li string sadrava \n moete koristiti funkciju chomp() ona odsijeca samo newline karakter ukoliko postoji ,ukoliko ne postoji nikom nita
$a = "hello world\n"; chomp ($a); # $a je sada "hello world" chomp ($a); # aha! Nema promjene u $a=hello world

Interpolacija skalara u stringove


Kada je string pod dvostrukim navodnicima onda je on subjekt interpolacije,to znai da se string skenira na mogue pojavljivanje skalarne varijable,i ukoliko se pronae referenca na varijablu tada se referenca zamjenjuje sa vrijednosti pohranjenom u navedenoj varijabli.
$a = "fred"; $b = "some text $a"; # $b = "some text fred" $c = "no such variable $what"; # $c i= "no such varijable " tekst koji zamjenjuje varijablu se ne skenira,ak i ukoliko se u varijabli nalazi $ $x = '$fred'; # $x="$fred"

1043/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb $y = "hey $x"; # vrijednost je sad 'hey $fred': nema ponovne

Programski alati na Unix raunalima

zamijene

da bi sprijeili supstituciju ili varijablu stavite u jednostruke navodnike ili prije $ stavite \ koji ponitava specijalno znaenje $
$fred = 'hi'; $barney = "a test of " . '$fred';#$barney = 'a test of $fred' $barney2 = "a test of \$fred"; # ista stvar Ime varijable e biti najdue mogue ime varijable koje ima smisla kao dio stringa,to moe biti problem ukoliko elite poslije zamijenjene vrijednosti nastaviti sa nekim konstantnim tekstom,perl skenira imena varijabli,te bi mogao protumaiti te karaktere kao ime a to ne elite u tu svrhu vam prua delimiter za imena varijabli,jednostavno zatvorite ime varijable u {} ili koristite operator konkatenacije. $fred = "pay"; $fredday = "wrong!"; $barney = "It's $fredday"; $barney = "It's ${fred}day"; $barney2 = "It's $fred"."day"; # nije payday, nego "It's wrong!" # sad, $barney dobiva "It's payday" # jo jedan nain konkatenacijom

$barney3 = "It's " . $fred . "day"; # i jo jedan nain konkatenacijom takodjer vam je omogueno da manipulirate veliinom slova $bigfred = "\Ufred"; $capfred = "\u$fred"; $barney = "\LBARNEY"; $capbarney = "\u\LBARNEY"; # $bigfred je sada "FRED" # $capfred je sada "Fred" # $barney je sada "barney" # $capbarney je sada "Barney" $fred = "fred"; $bigfred = "\U$fred"; # ista stvar

$bigbarney = "BARNEY"; $capbarney = "\u\L$bigbarney"; # same

Kao to se vidi case shifting string escape su zapameni unutar stringa,sve dok se ne iskoriste,tako da iako prvo slovo BARNEY ne slijedi \u,ve ostaje veliko slovo zbog \u.

1044/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

<STDIN> kao skalarna vrijednost


Kako unijeti text u skalarnu varijablu e pa jednostavno,svaki put kada koristite <STDIN> gdje se oekuje skalarna vrijednost,perl ita tekst sa standardnog ulaza sve do i ukljuujui newline karaktera(\n).
$a = <STDIN>; # upii tekst chomp($a); # rijei se \n ili skraeno: chomp ($a =<STDIN>); # bez \n

Ispis
Ispis se vri jednostavno pozivajui print funkciju,funkcija kao argument uzima niz koji bez provjere ispisuje na standardni izlaz.
print("hello world\n"); # hello world, + novi red print "hello world\n"; # ista stvar bez zagrada

Nedefinirane vrijednosti
to se deava ako koristite skalarnu varijablu prije nego to ste ju definirali,nita posebno,i svakako nita fatalno,sve varijable imaju undef vrijednost prije nego to im je ita dodijeljeno,ta vrijednost je najslinija 0 kada se koristi kao broj ili kao prazan string kad se koristi kao string.<STDIN> naprimjer vraa undef vrijednost kada vie nema to proitati

Nizovi i Liste
Lista je ureeni skup skalarnih podataka,a niz je varijabla koja dri listu,svaki element niza je zaseban skalarna varijabla sa svojom skalarnom vrjednosti,te vrijednosti su ureene to znai da imaju ureen slijed od najmanje pa do najvee vrijednosti. Niz moe biti prazan ali isto tako moe biti velik da napuni svu raspoloivu memoriju sve u duhu perlove filozofije bez ogranienja

Literarna reprezentacija
Lista se sastoji od zarezom odvojenih vrijednosti zatvorenih u zagrade.
(1,2,3) # niz od 3 vrijednosti 1, 2, and 3

("fred",4.5) # dvije vrijednosti, "fred" and 4.5 ne nuno konstantnih:


1045/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb ($a, 17) () #dvije vrijednosti: vrijednost $a, i 17 # prazna lista

Programski alati na Unix raunalima

($b+$c,$d+$e) # dvije vrijednosti Lista se takoer moe deklarirati koristei list konstruktor koji ukljuuje dvije skalarne vrijednosti izmeu kojih se nalaze dvije toke on tada konstruira listu Poevi od lijevog skalara te inkrementirajui za jedan sve do desnog skalara. (1..5) # isto kao i (1, 2, 3, 4, 5) (1.2..5.2) # isto kao i (1.2, 2.2, 3.2, 4.2, 5.2) (2..6,10,12) # isto kao i (2,3,4,5,6,10,12) ($a..$b) opsega (1.3..6.1) # isto kao i (1.3,2.3,3.3,4.3,5.3) # opseg definiraju dvije skalarne vrijednosti $a i $b ukoliko bi inkrementiranjem zadnje vrijednosti izaao iz opsega on staje na zadnjoj vrijednosti koja je manja od

Liste koje sadre stringove deklariramo kao


@a = ("fred","barney","betty","wilma"); # runo

bolje:
@a = qw(fred barney betty wilma); # bolje @a = qw( fred barney betty wilma

);

# ista stvar

qw= 'qoute word ' koji kreira listu stringova razmake tretirajui kao granicu gdje zavrava jedan a poinje drugi string Deklaracija liste se sastoji od @ pa imena varijable: @somelist;#dekalracija liste @amirko(); #deklaracija neinicijalizirane liste

1046/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Funkcije i operatori na nizovima


Funkcije i operatori na nizovima operiraju na cijelim nizovima neki vraaju nizove koji se onda dalje mogu koristiti i spremati u druge nizove itd..

Dodjeljivanje
Najvaniji je operator dodjeljivanja,koji daje vrijednost varijabli u nizu,= ,perl potom odluuje da li je skalarno dodjeljivanje ili nizovno dodjeljivanje:
@fred = (1,2,3); # niz fred se sada sastoji od 3 elementa @barney = @fred; # u nizu barney se sada nalaze elementi liste fre @huh = 1; # 1 je dodjeljen u listu (1) automatski @huh=(1); mogue je takodjer dodjeljivati iz liste u listu @fred = qw(one two); # @fred=(2); @barney = (4,5,@fred,6,7); # @barney = (4,5,"one","two",6,7) @barney = (8,@barney); # stavlja 8 ispred @barney @barney = (@barney,"last"); # dodaje "lastna kraj liste @barney=(8,4,5,"one","two",6,7,"last") Vano je napomenuti da lista ne moe sadravati drugu listu ve samo elemente koji se nalaze u drugoj listi.Ukoliko se lista sastoji od referenci na varijable(ne izraza),tada se element liste moe tretirati kao varijabla,svaka skalarna vrijednost se pridruuje odgovarajuoj skalarnoj vrijednosti druge liste

($a,$b,$c) = (1,2,3); ($a,$b) = ($b,$a);

# dodaj 1 na $a, 2 na $b, 3 na $c # zamjeni $a i $b # zamijeni prvi element @fred sa $e

($d,@fred) = ($a,$b,$c); # dodaj $a na $d, @fred=($b,$c) ($e,@fred) = @fred; isto kao ($e,@fred)=($b,$c)

# @fred = ($c) a u varijabli se nalazi $e = $b Ukoliko broj elemenata koji dodijelimo ne odgovara broju varijabli koje uvaju vrijednost,desna strana se odbacuje a lijeva strana dobiva vrijednost undef. List varijabla ukoliko se pojavljuje unutar postojee liste mora biti zadnja,zbog toga to je pohlepna i pregazi sve ostale vrijednosti. Pri dodjeljivanju varijable niza skalarnoj varijabli dobivamo broj elementa u datom nizu
@fred = (4,5,6); # inicijalizirani @fred $a = @fred; # $a = 3, broj elementata u listi @fred

1047/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

duljina se takoer vraa kada dodjeljujemo listu skalarnoj varijabli,to se zove skalarini kontekst ili list kontekst ovisno s koje strane jednakosti se nalazi koji operand. Npr.:
@fred = (4,5,6); # inicijaliziraj @fred ($a) = @fred; # $a=@fred[0]; u $a se nalazi prvi element liste @fred

u prvom primjeru fred je inicijaliziran na (1,2,3) u drugom primjeru se je napravljeno dodjeljivanje listi ($a) stoga se dodjeljuje prvi element @freda igoririajui sve ostalo sto slijedi.Dodojeljivanje listi je ve samo po sebi vrijednost liste te se moe kombinirati sa drugim dodjeljivanjima @fred = (@barney = (2,3,4)); # @fred= (2,3,4) @barney= (2,3,4) @fred = @barney = (2,3,4); # isto samo krae

Pristup elementima niza


Pristup listi se vri ili preko indexa i operatora []. @fred = (7,8,9); $b = $fred[0]; # $b=7; $fred[0] = 5; # @fred = (5,8,9) $c = $fred[1]; $fred[2]++; $fred[1] += 6; # $c=8 # increment the third element of @fred=(5,9,9) # @fred=(11,9,9)

($fred[0],$fred[1]) = ($fred[1],$fred[0]);# @fred=(9,11,9); Pristup elementima liste iz iste liste se naziva i slice,i pojavljuje se dovoljno esto Da i postoji posebna reprezentacija za te izraze:
@fred[0,1] # isto to i ($fred[0],$fred[1]) # zamijeni prva dva el @fred[0,1] = @fred[1,0]

@fred[0,1,2] = @fred[1,1,1] # sva tri el pretvori u drugi el @fred=(1,1,1);

@fred[1,2] = (9,10);

postavi zadnja dva el na 9 i 10 @fred=(1,9, 10);

@fred je zbog toga to kreiramo list varijablu selektirajui dio liste a ne skalarnu vrijednost npr. $a za dohvaanje jednog elementa.
@who = (qw(fred barney betty wilma))[2,3]; # like @x = qw(fred barney betty wilma); @who = @x[2,3]; # @who=betty wilma; @fred = (7,8,9); $a = 2; $b = $fred[$a]; # $b=2

1048/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb $c = $fred[$a-1]; ili @fred = (7,8,9); @barney = (2,1,0); @backfred = @fred[@barney]; # $c = 8

Programski alati na Unix raunalima

($c) = (7,8,9)[$a-1]; # splice $c=8;

# same as @fred[2,1,0] ili ($fred[2],$fred[1],$fred[0]), ili @backfred =(9,8,7) pokuamo li dohvatiti izvan granica @fred = (1,2,3); $barney = $fred[7]; # $barney = undef indeksirajui izvan dosega automatski proirujemo listu,dajui nerefrenciranim elementima undef vrijednosti @fred = (1,2,3); $fred[3] = "hi"; # @fred = (1,2,3,"hi") $fred[6] = "ho"; # @fred =(1,2,3,"hi",undef,undef,"ho") @fred = ("fred", "wilma", "barney", "dino"); print $fred[-1]; print $#fred; # prints "dino" # prints 3

print $fred[$#fred]; # prints "dino"

$#fred vraa zadnji indeks u nizu ili @fred-1

Push i Pop funkcije


Jedna od najeih upotreba liste je stack,kada se nove vrijednosti dodaju i uzimaju s vrha stacka,te operacije su toliko este da imaju svoje specijalne funkcije.
push(@mylist,$newvalue); # @mylist = (@mylist,$newvalue)

$oldvalue = pop(@mylist); uklanja zadnji el iz @mylist Pop funkcija vraa undef ukoliko joj se proslijedi prazna lista i ne izaziva nikakav warning ili compile error. Push funkcija prihavaa i listu vrijednosti koje stavlja na vrh zadane liste
@mylist = (1,2,3);

push(@mylist,4,5,6); # @mylist = (1,2,3,4,5,6) prvi argument mora biti lista .

Shift i Unshift funkcije


Kako push i pop stavljaju i skidaju sa vrha liste funkcije shift i unshift rade identino ali sa kraja liste.

1049/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb unshift(@fred,$a); $x = shift(@fred); @fred = (5,6,7); unshift(@fred,2,3,4); # @fred is now (2,3,4,5,6,7) $x = shift(@fred); # $x gets 2, @fred is now (3,4,5,6,7) # l @fred = ($a,@fred); # ($x,@fred) = @fred;

Programski alati na Unix raunalima

unshift(@fred,$a,$b,$c); # @fred = ($a,$b,$c,@fred);

Ukoliko im se proslijedi prazna lista vraaju undef vrijednost:

1050/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Reverse funkcija
Reverse funkcija obre listu argumenata koja joj je proslijeena,vraajui listu kao rezultat
@a = (7,8,9); @b = reverse(@a); #@b = (9,8,7) @b = reverse(7,8,9); # ista stvar

ili
@b = reverse(@b); # @b =(9,8,7)

1051/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Sort funkcija
Sort funkcija uzima argumente i sortira ih kao da su jednostruki stringovi u ASCII tablici,povratna vrijednost je sortirana lista ali bez mijenjanja originalne liste.
@x = sort("small","medium","large"); # @x = "large","medium","small" @y = (1,2,4,8,16,32,64); @y = sort(@y); # @y =(1,16,2,32,4,64,8)

primjeujemo da je lista brojeva sortirana pogreno,ukoliko elimo sortirati listu numerika moramo uiniti slijedee,moramo napisati proceduru koja definira kako se dva susjedna elementa sortiraju
sub by_number { if ($a < $b) { return -1; #vrati 1 ako je prvi manji od drugog } elsif ($a == $b) { return 0; # vrati 0 ako su jednaki } elsif ($a > $b) { return 1; # vrati 1 ako je prvi veci od drugog } }

@list=sort by_number @y # @list=(1,2,4,8,16,32,64); tono funkcija by_ moe biti napisana da radi sa bilo kojom vrstom podataka,ovaj nain sortiranja je u perlu est stoga perl je predvidio poseban operator spaceship operator space ship operator vraa identine vrijednosti kao i by_number procedura tako da sada moemo pisati.
sub by_number { $a <=> $b; }

ili jo krae @list = sort { $a <=> $b } @y Spaceship operator za brojeve ima takoer operator za stringove cmp pa ca u ovom sluaju izraz izgledati. @list=sort{$a cmp $b}@listopad

1052/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Vjerojatno se pitate kako napraviti kombinaciju ili to ako moram sortirati po brojevima i po karakterima evo jedan od naina,ili sve omogue kombinacije ova dva izraza.
sub by_mostly_numeric { ($a <=> $b) || ($a cmp $b); }

ukoliko je rezultat spaceshipa 1 ili 1 ostatak se preskae i povratna vrijednost je 1 ili 1 ali ukoliko prvi dio izraza vrati 0 drugi dio izraza se potom izraunava.

Inerpolacija varijabli u listama


Radi na identian nain kao i za skalarne varijable
@fred = ("hello","dolly"); $y = 2; $x = "This is $fred[1]'s place"; # "This is dolly's place"

$x = "This is $fred[$y-1]'s place"; # ista stvar prvo se rauna indeks a interpolacija tek potom,ukoliko elite skalarnu vrijednost referencirati s lijevom { morat ete ju zatvoriti da se ne bi smatrala dijelom liste
@fred = ("hello","dolly"); # give value to @fred for testing $fred = "right"; # pokuavamo rei "this is right[1]" $x = "this is $fred[1]"; # OK, gives "this is dolly" $x = "this is ${fred}[1]"; # OK ({}) $x = "this is $fred"."[1]"; # OK (konkatenacijom)

$x = "this is $fred\[1]"; # OK (backslash skriva)


ili moemo interpolirati cijelu listu @fred = ("a","bb","ccc",1,2,3); $all = "Now for @fred here!";

# $all ="Now for a bb ccc 1 2 3 here!" ili moemo koristiti slice:


@fred = ("a","bb","ccc",1,2,3); $all = "Now for @fred[2,3] here!"; # $all =s "Now for ccc 1 here!"

$all = "Now for @fred[@fred[4,5]] here!"; # ista stvar

<STDIN> kao Lista

1053/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

@a = <STDIN>; # uitava standard input u listu (list context)

Ukoliko osoba koja pokrene gornji program unese tri linije zavravajui CTRL+Z U listi se nalaze tri linije koje zavravaju s \n.

1054/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

KONTROLNE STRUKTURE
Izraz koji prelazi jednu liniju moe se staviti u {} inei tako blok izraz
{ prvi_izraz; drugi_izraz; treci_izraz; last_statement; } Blok izraz se prihvaa i kada se u izrazu nalazi samo jedna naredba,ali ne vrijedi obrnuto.Zadnji ; u blok naredbi je opcionalan.

If / unless izraz
if (some_expression) {

true_statement_1; true_statement_2; true_statement_3;


} else {

false_statement_1; false_statement_2; false_statement_3; } Perl izraunava izraz u zagradi i ukoliko je to istina(kontroni izraz se pretvara u string i ukoliko je njegova vrijednost 0 ili prazan string onda je false bilo sto drugo je automatski istina) izvrava se prvi blok naredbi,ako je pak la slijedi dio koji se nalazi iza else,evo nekoliko primjera:
0 1-1 1 "" "1" # pretvara u "0", false # = 0, pretvara se u "0", = false # pretvara u "1", true # prazan string = false # = true

"00" # nije "" ili "0", = true (ova je udna stoga paziii) "0.000" # =true (isto ko i gore);

undef # se izraunava u "", = false

1055/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

evo jednog primjera kompletne If else izraza


print "koliko ima godina "; $a = <STDIN>; chomp($a); if ($a < 18) { print " Ne dovoljno star da glasa !!\n"; } else { print "Dovoljno star idi glasati!\n"; }

ili
print " koliko ima godina\n "; $a = <STDIN>; chomp($a); unless ($a < 18) { print " Dovoljno star idi glasati!\n "; }

ukoliko imate vie od jednog izraza:


print "koliko ima godina\n "; $a = <STDIN>; chomp($a);

if( $a<18) print jo si mali\n; elseif($a>18 && $a<20) print ti si ok\n; elseif($a>40) printpenzioner\n; elseif($a>60){ printpenzioner\n;
$a = <STDIN>; chomp($a); } else{ printko si bre ti?n}

While\untill izraz
while (some_expression) {

statement_1; statement_2; statement_3;


1056/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb } evo jednog primjera maltertiranja korisnika:

Programski alati na Unix raunalima

printkoja je tajna rijec; chomp($a=<STDIN>); while($a neq car){ printkoja je tajna rijec\n; chomp($a=<STDIN>); }

ili printkoja je tajna rije; chomp($a=<STDIN>); until($a eq ''car''){ printkoja je tajna rijec\n; chomp($a=<STDIN>); } Oba izraza su ekvivalentna s time da je nekada lake napisati until(izraz=false ili izraz=true).Ponekad kontrolni izraz ne doputa izlaz iz petlje,takve situacije su prilino este npr. elite izvravati petlju dokle god nemate pogreaka a kod iza petlje bi tada mogao biti neka error handling procedura!!

1057/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

do {} while/until izraz
Razlika od prethodnih je da e se tijelo petlje uvijek izvriti barem jednom
do { statement_1; statement_2; statement_3;

} while (some_expression); ili recimo primjer:


$stops = 0; do { $stops++; print "Slijedea stanica\n "; chomp($lokacija = <STDIN>);

} until ($stops > 5 || $location eq 'home');

for izraz
for ( initial_exp; test_exp; re-init_exp ) {

statement_1; statement_2; statement_3;


} for ($i = 1; $i <= 10; $i++) { print "$i "; }

Ispisuje brojeve od 1-10 Inicijalizacija se izvodi samo na poetku,tada u svakoj slijedeoj iteraciji se provjerava uvijet,i ukoliko je istinit ide se na slijedeu iteraciju opcionalno poveavajui inicijalnu vrijednost za neki broj ili izraz.

foreach izraz

1058/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Ovaj izraz za argument prima listu vrijednosti,i dodjeljuje ih jednu po jednu skalarnoj vrijednosti,izvravajui tijelo za svako uspjeno dodjeljivanje. Npr.:
@a = (1,2,3,4,5); foreach $b (reverse @a) { print $b; }

rezultat je 54321,moete ak i izostaviti $b perl e to tada interpretirati kao da ste specificirali $_ tako da bi to skraeno mogli pisati.
@a = (1,2,3,4,5); foreach (reverse @a) { print; }

i jo jedan primjer
$x = 17; @a = (3,5,7,9); @b = (10,20,30); foreach $one (@a, @b, $x) { $one *= 3; } # @a=(9,15,21,27) ;@b=30,60,90);$x=51

Last,Next,Redo,Labele,&&,||,?:
Ovi izrazi se mogu kombinirati sa svim kontrolnim strukturama Last oznaava zadnji izraz u kontrolnoj strukturi te izlazi iz nje ekvivalent break u C
while (<STDIN>) { # read the input lines if (/^From: /) { # does it begin with From:? If yes... if (/eriko/) { # it's from Erik! print "Email from Erik! It's about time!\n"; } last; } if (/^$/) { last; } } # end while # no need to keep looking for From:, so exit # end "if from:" # blank line? # if so, don't check any more lines

1059/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Next oznaava da se ide na slijedeu iteraciju(izrazi iza next nee se izvriti) i izlazi iz unutarnjih {}
while (something) {

firstpart; firstpart; firstpart;


if (somecondition) {

somepart; somepart;
next; }

otherpart; otherpart;
# next comes here }

ukoliko je somecondition=true izvrit e se somepart te potom krenuti na novu iteraciju,otherpart se nee izvriti. Redo izaziva novu iteraciju za dani uvijet.
while (somecondition) { # redo comes here

something; something; something;


if (somecondition) {

somestuff;
last; }

morething; morething; morething;


redo; } Labele su mjesta u kodu koja oznaavamo sa IME LABELE:slue za izlaze iz ugnijeenih petlji moete koristiti next,last redo u kombinaciji s labelama. OUTER: for ($i = 1; $i <= 10; $i++) {

1060/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb INNER: for ($j = 1; $j <= 10; $j++) { if ($i * $j == 63) { print "$i times $j is 63!\n"; last OUTER; } if ($j >= $i) { next OUTER; } } }

Programski alati na Unix raunalima

Ako smo pronali to smo traili u ovom sluaju umnoak brojeva koji daju 63 nema smisla vie traiti i izlazi se iz OUTER: petlje. Deklaraciju labela radi lake itljivosti uvijek deklarirajte sa velikim slovima.

Expresion Modifiers. If this == then that, perl vam omoguava da radi vee itljivosti koda dodate if na izraz koji je ve Sam po sebi statement.
LINE: while (<STDIN>) { last LINE if /^From: /; }

druge paralelne forme su: exp2 unless exp1;# like: unless (exp1) { exp2; } exp2 while exp1; # like: while (exp1) { exp2; }
exp2 until exp1; # like: until (exp1) { exp2; }

vano je napomenuti da se te forme ne mogu ugnjeivati ne moete rei exp1 while exp2 if (some_cond); ova restrikcija je zato sto je exp1 while exp2 vie nije izraz ve izjava i ne moete ih vie appendati. && operator ili logiki AND u zavisnosti od oba izraza koja moraju bit true
if (this) { that; } # one way

that if this;

# another way

ili this && that;

|| operatore ili logiki OR izraunava u true ukoliko je ikoji od uvjeta istinit. unless (this) { that; } this || that; ?: operator je samo pokrata za if

1061/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

($a eq konjino)?printamire $a\n:printcare; ukoliko je uvjet najljeviji istinit izvrava se dio iza ? ukoliko ne dio iza : kao u C ternarni operator.

1062/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

HASHEVI
Hash(Asocijativna lista) je slian listi sa jednom razlikom da elementi hasha su u stvari kolekcija skalarnih podataka,tj kljua i vrijednosti.Kljucevi se tada koriste kako bi se preko njih pristupalo vrijednostima na koje su pridrueni.Elementi hasha nemaju neki odreeni red,svaki put kada stavite neku vrijednost u hash on jednostavno preko kljua mapira vrijednost.

Literarna reprezentacija Hasha


Perl u stvari nema naina za literarnu reprezentaciju hasha on ju jednostavno tretira kao listu,
@fred_list = %fred; # @fred_list =("aaa","bbb","234.5",456.7) %smooth = ("aaa","bbb","234.5",456.7); #ista stvar iz literarnih vrijednosti %copy = %original; # copy from %original to %copy %backwards = reverse %normal; Ukoliko postoje dvije vrijednosti s istim kljuem,perl jednostavno izbacuje viak,tj u %backwards Se nalaze jedinstveni kljueviduplikati se automatski izbacuju!!

Hash Funkcije Keys Funkcija


Keys(%hash) jednostavno iz hasha izdvaja vrijednosti kljueva
$fred{"aaa"} = "bbb"; $fred{234.5} = 456.7; @list = keys(%fred); # @list = ("aaa",234.5) foreach $key (keys %fred) { # za svaki klju u %fred print "na $key imamo $fred{$key}\n"; # ispisi key i vrijednost }

1063/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Values Funkcija
Values funkcija ispisuje vrijednosti u hashu,na isti nain kao i funkcija keys
%lastname = (); # force %lastname empty $lastname{"fred"} = "flintstone"; $lastname{"barney"} = "rubble"; @lastnames = values(%lastname); # @lastnames=(flinstone,rubble) ili (rubble,flinstone); foreach $val (values %fred) { # za svaki klju u %fred print "na $val imamo klju $fred{$val}\n"; # ispisi vrjednost i klju }

Each Funkcija
Ukoliko elite iterirati po hashu moete koristiti keys,ali je each puno efikasnija,ona vraa par koji se sastoji od kljua i vrijednosti

%a=('amir' => 'kos', 'petar'=>'pan' ,'ivan'=>'grozni'); while (($first,$last) = each(%a)) { print "Prezime od $first je $last\n";} Funkcija vraa parove dokle ih god ima kada dodje do kraja hasha vraa praznu listu,prilikom dodjeljivanja novih vrijednosti hashu,funkcija each se resetira i kree od poetka.

Delete Funkcija
Delete funkcija se poziva sa hash referencom. %a=('amir' => 'kos', 'petar'=>'pan' ,'ivan'=>'grozni'); delete $a{amir};# %a sada ima samo dva elementa

1064/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Hash slice
Kao i liste,u hashevima moemo pristupati vie elemenata istovremenotzv. slice. Promotrimo slijedei primjer: @score{"fred","barney","dino"} = (205,195,30); #hash scores (fred=>205 barney=>195 dino=>30) @players = qw(fred barney dino); #players=('fred' 'barney' 'dino'); print"rezultati su @score{@players}\n"; #prints 205 195 30 Slice se takodjer koristi kada elimo mergati male hasheve u vee.
@league{keys %score} = values %score; #mergamo kljueve s vrijednostima

%league = (%league, %score);#isto samo sporije

1065/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

OSNOVNE I/O OPERACIJE


Perl daje STDIN STDOUT,STDERR kao tri glavna ulazno izlazna streama

itanje sa standardnog ulaza


Perl omoguava file handle <STDIN> preko kojeg je mogue itati sa standardnog ulaza, <STDIN> ita liniju do \n,moe se koristiti u skalarnom ili list contextu.

$a=<STDIN> #skalrni kontekst @a=<STDIN> #list kontext elite li uitiavati liniju po liniju sa STDIN a ,jedan od naina je
while (defined($line_ = <STDIN>)) { # process $line here } Posto Perl omoguava tzv. podrazumijevanu vrijednost(_$) moete jednostavno pisati while (<STDIN>) { # == "while(defined($_ = <STDIN>_)" chomp; # =="chomp($_)" # other operations with $_ here }

<> Operator
Ovaj operator se ponaa na slian nain i kao <STDIN> uz jednu razliku to on prima argumente Iz komandne linije While(<>) Print _$; Recimo da skriptu nazovemo car.plx. Kada ju pokrenemo perl car.plx prvi.txt drugi.txt <> operator e prvo proitati sve linije u prvi.txt Potom sve linije u drugom.txt ispisivajui ih na ekran,te e vratiti undef tek poto je proitao sve linije,ukoliko mune proslijedimo argumente ita automatski sa STDIN.

1066/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Ispis na STDOUT
Perl koristi normalni i formatirani izlaz. Print car; # ispisuje car Ili $a=232434.224324 printf %10.2f $a; # ispisuje a u formatu 10 karaktera sa dva dec mjesta 23243400.22 prvi dio izraza je format specifikator koji sluzi pravilnom formatiranju argumenta s desne strane tablica format specifikatora

%% %c %s %d %u %o %x %e %f %g

Percent sign Character with the given number String Signed integer, in decimal Unsigned integer, in decimal Unsigned integer, in octal Unsigned integer, in hexadecimal Floating-point number, in scientific notation Floating-point number, in fixed decimal notation Floating-point number, in %e or %f notation

Izmedju % i format karaktera moete opcionalno ubaciti slijedee flagove

1067/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

REGULARNI IZRAZI
Regularni izraz je nita drugo nego pattern ili uzorak koji e se testirati na odreeni string,to testiranje moe biti uspjeno ili neuspjeno,ponekad ete eljeti neto pronai ili neto zamijeniti. Regularni izrazi se koriste u mnogim programima,te svaki program ima svoj set template karaktera. U Perlu se ti izrazi esto koriste.,te on prua set karaktera za manipulaciju. Jednostavni regularni izrazi Ukoliko traimo linije u fileu koje sadre string abc na win 32 mogli bi napisati >findstr abc nekifajl.txt>rezultati.txt u ovom sluaju svaka linija se testira na abc koji je regularni izraz,linije koje zadovoljavaju redirekcijom preusmjeravano u rezultat.txt u perlu o stringu govorimo kao o regularnom izrazu zatvarjui ga u /abc/ perl takodjer ima tzv. wild karakter set
elimo li pronai linije u fileu koje poinju s a a zavrava s bc a izmedju moe biti bilo to mogli bi napisati u win 32 >findstr ab*c somefile >results

u perlu:
while (<>) { if (/ab*c/) { print $_; space + 0 Prefix positive number with a space Prefix positive number with a plus sign Left justify within the field Use zeros, not spaces, to right justify

number Minimum field width .number Precision: digits after decimal point for floating-point number, maximum length for string, minimum length for integer } } Jo jedan jednostavan regularni izraz je operator supstitucije

1068/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb s/ab*c/def/; # trai abc te zamijeni sa def Construct \d (a digit)

Programski alati na Unix raunalima

Equivalent Class Negated Construct Equivalent Negated Class [0-9] \D (digits, not!) \W (words, not!) \S (space, not!) [^0-9] [^a-zA-Z0-9_] [^ \r\t\n\f]

\w (word char) [a-zA-Z0-9_] \s (space char) [ \r\t\n\f]

Sloeni regularni izrazi


Prava mo regularnih izraza dolazi do izraaja tek kada ih se grupira

Sekvenca
ukoliko traimo sekvencu karaktera moemo pisati /[abcd]/ # trai sekvencu koja se sastoji od abcd; /[a.*bcd]/ #trai sekvencu koja poinje s a slijedi bilo to osim \n i zavrava sa bcd;

Multypliers
operator + elimo li nai sekvencu koja se sastoji od 1 ili vie znakova koristimo + operator operator ? koristimo kada elimo opcionalno pretraivanje general multiplier sastoji se od para {} sa jednim ili dva broja unutra /[ab+cde]/# a pa jedan ili vie b zavrava sa cde /[ab+c.*d?e]/ #a pa jedan ili vie b slijedi c pa bilo to osim \n potom opcionalno d i na kraju e /[ab{5,10}c.*d?e]/# a pa {5-10} b slijedi c pa bilo to osim \n potom opcionalno d i na kraju e ukoliko u jednom izrazu imamo vie multypliera primjenjuje se pravilo pohlepnosti tj. izvrit e se prvo najljeviji,moemo ga ulijeniti sa ? $_ = "a xxx c xxxxxxxx c xxx d"; /a.*c.*d/; # ide do zadnjeg c $_ = "a xxx c xxxxxxxx c xxx d"; /a.*?c.*d/; # ide do prvog pojavljivanja c

Jo jedna grupa operator su zagrade ,uz koju morate escapirati s \ i dodat mu odgovarajui int
/fred(.)barney\1/; # matches fred barney tj bilo koji znak u duljini 1 osim \n #no match fred barney

tj. int iz backslasha na govori koliko karaktera se odnosi izraz.


/a(.)b(.)c\2d\1/;# matches axbycz /a(.)b(.)c\2d\1/; #matches axbycydx

1069/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb /a(.*)b\1c/;# matches aXXbXXc #no match aXXXbXXc moemo grupirati izraze i sa alternacijom /[a|b|c]/# matches jedino ukoliko string ima ili a ili b ili c

Programski alati na Unix raunalima

ili tzv. usidravanje, oni vam omoguuju da od malih djelia uvjetno slaete vee dijelova stringa \b trai granicu u rijei na datoj toci da bi matchao,granica rijei ili word boundary je mjesto izmedju karaktera koji odredjuju string /fred\b/; # matches fred, but not Frederick /\bmo/; # matches moe and mole, but not Elmo /\bFred\b/; # matches Fred but not Frederick or alFred /\b\+\b/; # matches "x+y" but not "++" or " + " /abc\bdef/; # never matches (impossible for a boundary there)

analogno tome \B zahtijeva da ne bude razmak izmedju rijei


/\bFred\B/; # matches "Frederick" but not "Fred Flintstone"

prioriteti
Name Parentheses Multipliers Representation ( ) (?: ) ? + * {m,n} ?? +? *? {m,n}

Sequence and anchoring abc ^ $ \A \Z (?= ) (?! ) Alternation |

Evo nekih primjera regularnih izraza i utjecaj zagrada


abc* (abc)* ^x|y ^(x|y) a|bc|d (a|b)(c|d) # matches ab, abc, abcc, abccc, abcccc, itd.. # matches "", abc, abcabc, abcabcabc, itd.. # matches x na pocetku linije, ili y bilo gdje # matches x ili y na poetku linije # a, or bc, or d # ac, ad, bc, or bd

(song|blue)bird # songbird or bluebird

PERL Practical Extraction and Report Language koristi regularne izraze kao svoje jako mono oruje Modifiers:
Modifier Meaning i Do case-insensitive pattern matching.

1070/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb Modifier Meaning m s x Treat string as multiple lines (^ and $ match internal \n). Treat string as single line (^ and $ ignore \n, but . matches \n). Extend your pattern's legibility with whitespace and comments.

Programski alati na Unix raunalima

Quatifiers Maximal Minimal Allowed Range {n,m} {n,} {n} * + ? Asertiranje Assertion Meaning ^ $ \b \B \A \Z \G Matches at the beginning of the string (or line, if /m used) Matches at the end of the string (or line, if /m used) Matches at word boundary (between \w and \W) Matches except at word boundary Matches at the beginning of the string Matches at the end of the string Matches where previous m//g left off {n,m}? {n,}? {n}? *? +? ?? Must occur at least n times but no more than m times Must occur at least n times Must match exactly n times 0 or more times (same as {0,}) 1 or more times (same as {1,}) 0 or 1 time (same as {0,1})

(?=...) Matches if engine would match ... next (?!...) Matches if engine wouldn't match ... next

=~ Operator
Target ovog operator moe biti bilo koji izraz koji se izraunava u skalarnu vrijednost.
$a = "hello world";

1071/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb $a =~ /^he/; $a =~ /(.)\l/; # true # also true (matches the double l) # some stuff }

Programski alati na Unix raunalima

if ($a =~ /(.)\1/) { # true, so yes...

ulaz sa <STDIN> se takoer izraunava u skalarnu vrijednost stoga elimo li testirati ulaz na neki
print "any last request? "; if (<STDIN> =~ /^[yY]/) { # does the input begin with a y? print "And just what might that request be? "; <STDIN>; # discard a line of standard input print "Sorry, I'm unable to do that.\n"; }

primijetite da se rezultat izraza ne sprema u varijablu /stringtocmp/i tzv ignoring case testira izraz na datu vrijednost ignorirajui case $a=AMIR; if($a=~/amir/i) # true sada bi prijanji primjer izgledao
print "any last request? "; if (<STDIN> =~ /^y/i) { # does the input begin with a y? # yes! deal with it ... }

Ukoliko traite string koji poinje s \ morate ga delimitirati s /


$path = <STDIN>; # read a pathname (from "find" perhaps?) if ($path =~ /^\/wwwroot\/docs/) { # begins with /wwwroot/docs... }

takav nain pisanja koda moe kod malo sloenijih izraza nalikovati na smetnje u vezi stoga perl omoguava definiranje vlastitog delimitera uz opciju m
/^\/wwwroot\/docs/ # using standard slash delimiter m@^/wwwroot/docs@ # using @ for a delimiter

m#^/wwwroot/docs# # using # for a delimiter (my favorite)

1072/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Interpolacija varijabli
Regularni izraz je samo varijabla interpolirana prije nego se testira na specijalne karaktere,kao rezultata moete slagati regularne izraze od izraunatih stringova umjesto konstanti $sentence = "Every good bird does fly."; print "What should I look for? "; $what = <STDIN>; chomp($what); if ($sentence =~ /$what/) { # found it! print "I saw $what in $sentence.\n"; } else { print "nope... didn't find it.\n"; }

\Q delimiter za [] zagrade stoga ih tretira kao literar a ne kao operator []


$what = "[box]"; foreach (qw(in[box] out[box] white[sox])) { if (/\Q$what\E/) { #konstruira [box] ali kao literarni string ne kao karakter klasu print "$_ matched!\n"; } }

Specijalne Read only Variable


Prilikom matchiranja moete koristiti specijalne read-only varijable namely:$1,$2,$3itd
$_ = "this is a test"; /(\w+)\W+(\w+)/; # match first two words # $1 is now "this" and $2 is now "is"

moete postii istu stvar stavljajui matchirane varijable u list context


$_ = "this is a test"; ($first, $second) = /(\w+)\W+(\w+)/; # match first two words

# $first is now "this" and $second is now "is" druge read-only varijable su $&,$',$` na primjeru:
$_ = "this is a sample string"; /sa.*le/; # matches "sample" within the string # $` is now "this is a "

1073/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb # $& is now "sample" # $' is now " string"

Programski alati na Unix raunalima

Substitucija
Ve smo spomenuli substituciju,razmotrimo sada naine kako ju moemo malo modificirati. Ukolko elite da zamjena operira na sve mogue matcheve,a ne na samo prvi na koji naie dodajte g.
$_ = "foot fool buffoon"; s/foo/bar/g; # $_ is now "bart barl bufbarn"

string koji se mijenja je nita drugo nego interpolirana varijabla,doputajui vam da specificirate zamjenu u runtimeu,takoer moete specificirati vlastiti delimiter s#fred#barney#; # replace fred with barney, like s/fred/barney/

moete takoer koristiti =~,u ovom sluaju odabrana vrijednost mora biti neto emu moete dodijeliti skalarnu vrijednost,npr varijabla ili element liste.
$which = "this is a test"; $which =~ s/test/quiz/; # $which is now "this is a quiz" $someplace[$here] =~ s/left/right/; # change an array element

$d{"t"} =~ s/^/x /; # prepend "x " to hash element

Split I Join Funkcije


Split funkcija razdvaja izraz prema danom matchu.
$line = "c:\\;;c:\\windows\\;c:\\windows\\system;"; @fields = split(/;/,$line); # split $line, using ; as delimiter # now @fields is ("c:\", "", "c:\windows","c:\windows\system")

primijetite da je druga vrijednost prazan string,elite li to eliminirati koristite + @fields = split(/;+/, $line); # delimiter je ; ili ;;;;; u list kontekstu
1074/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb $line = "c:/;c:/windows;c:/windows/system;"; ($first, $second, $third, $fourth) =

Programski alati na Unix raunalima

split(/;/,$line); # split $line, using ; as delimiter # $fourth=undef; Join Funkcija uzima listu vrijednosti i lijepi ih zajedno sa naljepnicom za svaki element liste na kraj,elite li lijepiti na poetak jednostavan trik je dovoljan $result = join("+", "", @fields); # $fields[1]= neki_string+ analogno radi za ljepljenje na kraj
$output = join ("\n", @data, ""); #$dana[1]=\n neki_string

1075/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

FUNKCIJE
Funkciju ili proceduru moete definirati bilo gdje u programu ali ju je preporuljivo staviti na kraj,definicije procedura su globalne,ne postoje lokalne procedure $what=Perl;
sub say_hello { print "hello, world!\n"; } ili sub say_hello { print "hello, $what!\n"; }

U ovom sluaju je say_heloo rutina ,primijetite da je mogu pristup globalnim varijablama izvan tijela funkcije.Funkciju pozivate jednostavno navodei njezino ime i specificirajui potrebne argumente ukoliko ih prima.
say_hello(); # a simple expression $a = 3 + say_hello() # part of a larger expression

Procedura je uvijek dio nekog izraza,vrijednost koju vraa se zove povratna vrijednost i nalazi se iza rijei return.
sub sum_of_a_and_b { return $a + $b; }

povratna vrijednost moe biti bilo to lista,skalar ,hash,broj itd.


sub gimme_a_or_b { if ($a > 0) { print "choosing a ($a)\n"; return $a; } else { print "choosing b ($b)\n"; return $b; } }

Argumenti

1076/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

U Perlu poziv procedure slijedi lista,izazivajui uinak da se vrijednost liste automatski dodjeli specialonoj varijabli @_ u izvravanju.Procedura ima pristup tima varijablama. Pogledajmo slijedei primjer.
sub say { print "$_[0], $_[1]!\n"; } say("hello","world"); # hello world, once again say("goodbye","cruel world"); # silent movie lament

Ukoliko promaite vrijednost parametara ne brinite perl ih zanemaruje dodajui im undef vrijednosti.
sub add { $sum = 0; # initialize the sum foreach $_ (@_) { $sum += $_; # add each element} return $sum; } $a = add(4,5,6); # adds 4+5+6 = 15, and assigns to $a print add(1,2,3,4,5); # prints 15 # the sum of all elements

print add(1..5);

# also prints 15, because 1..5 is expanded

@_ je privatna danoj proceduri,ukoliko postoji globalni @_ on se sprema na stek i vraa se tek poto se procedura izvrila,to ujedno znai da procedura moe prosljeivati vrijednosti drugoj proceduri bez bojazni da e izgubiti svoj @_,jer nova procedura uvijek ima svoju kopiju @_ my ,local i use strict my operatorom deklariramo privatnu kopiju varijable ili instanciramo,prilikom izvravanja procedure stvara se uvijek nova kopija my.
sub bigger_than { my($n,@values); ($n,@values) = @_; # create some local variables # split args into limit and values

my(@result); # temporary for holding the return value foreach $_ (@values) { # step through the arg list if ($_ > $n) { } } @result; # return the final list # is it eligible? push(@result,$_); # add it

1077/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb } # some invocations: @new = bigger_than(100,@list); # @new gets all @list > 100

Programski alati na Unix raunalima

@this = bigger_than(5,1,5,15,30); # @this gets (15,30) Perl vam takoer omoguuje da kreirate privatne varijable koristei local,no bitnije je razumjeti razliku izmeu my i local
$value = "original"; tellme(); spoof(); tellme(); sub spoof { local ($value) = "temporary"; tellme(); } sub tellme { print "Current value is $value\n"; }

This prints out:


Current value is original Current value is temporary Current value is original

Da smo koristili my umjesto local ,privatno itanje $value bilo bi mogue jedino unutar spoof(),ali sa local privatna vrijednost i nije vie tako privatna.Pravilo:Local variables su vidljive procedurama koje se zovu unutar bloka u kojem su local varijable definirane.Vrijednost globalne varijable se sprema na stek i privremeno se zamjenjuje (unutar funkcije) sa novom vrijednou. Local varijable su u stvari preruene globalne vaijable,stoga koristite radije my nego local ne samo da je bre ve je i sigurnije. Use strict kompajlerska direktiva tjera vas da deklarirate varijable prije nego ih ponete koristiti.
use strict; my $a; ... push @b, qw(wilma); # cannot leave her out # starts as undef my @b = qw(fred barney betty); # give initial value

@c = sort @b;

# WILL NOT COMPILE

Use strict je preporuljivo,jer radi bre(varijable deklarirane s my imaju neto bri pristup nego obine varijable,jer ete lake uoiti tipfelere.

1078/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

1079/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

FILE HANDLES
Filehandle je u perlu je ime I/O konekcije izmeu Perl procesa i svijeta,Perl omoguava tri filehandle STDIN,STDOUT,STDERR ukoliko elite otvoriti neki drugi file napisat ete neto ovako
open(FILEHANDLE,"somename"); open(OUT, ">outfile"); # otvara file za pisanje open(LOGFILE, ">>mylogfile");# otvara file za appedanje close(LOGFILE); # nije obavezna jer perl automatski zatvara filehandle kada ga se vie ne referncira. Ali to ako file nije mogao biti otvoren ili ne postoji. unless (open (DATAPLACE,">c:/temp/dataplace")) { print "Sorry, I couldn't create c:/temp/dataplace\n"; } ili krae unless (open DATAPLACE,">c:/temp/dataplace") { die "Sorry, I couldn't create c:/temp/dataplace\n"; } ili najkrae open(DATAPLACE,">c:/temp/dataplace") || die "Sorry, I couldn't create c:/temp/dataplace\n"; die se izvrava samo ukoliko open operacija nije uspjela OTVORI ILI UMRI die takodjer prima skalarnu vrijednost koju ispisuje ukoliko se izvri automatika ispisuje file i liniju,ukoliko to n elite appendajte \n na kraju. Die prima i tzv. predefiniranu varijablu $_ koja u sebi nosi sistemsku poruku o greci open(LOG, ">>logfile") || die "cannot append: $!"; $_ sadri Premission Denied warn radi isto to i die osim to ne umire i daje izlaz na STDERR

open(LOG,">>log") || warn "discarding logfile output\n"; primjer koritenja file handlova. $a=c:/\documents/\amir.txt
open(IN,$a) || die "cannot open $a for reading: $!"; open(OUT,">$b") || die "cannot create $b: $!"; while (<IN>) { # read a line from file $a into $_ print OUT $_; # print that line to file $b } close(IN) || die "can't close $a:$!";

1080/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb close(OUT) || die "can't close $b:$!";

Programski alati na Unix raunalima

Recimo da elite provijeriti da li neki file postoji u datom direktoriju koristite e amir.txt
if (-e "amir.txt" && -e "car.cgi") { print "You have both styles of index files here.\n"; } Tablica File testova i njena znaenja File Test Meaning -r -w -e -x -z -s -f -d -t -T -B -M -A -C File or directory is readable File or directory is writable File or directory exists File is executable File exists and has zero size (directories are never empty) File or directory exists and has nonzero size (the value is the size in bytes) Entry is a plain file Entry is a directory isatty on the filehandle is true (that is, the filehandle is a character device) File is text File is binary Modification age in days (C lang. time_t value) Access age in days (C lang. time_t value) Inode-modification age in days (C lang. time_t value)

Recimo da ste uitali u neku listu fileove u nekom direktoriju i elite ispisati koji su za itanje: Use strict; My(@files); @files=(chomp(<STDIN>);
foreach (@files) { print "$_ is readable\n" if -r; # same as -r $_ }

Stat funkcija vam daje sve atribute odabranog filea ili direktorija
file_owner = stat($filename)->uid;# $file_owner=amir;

1081/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Stat povratne vrijednosti.


Field dev ino mode nlink Description Device number (drive number) Inode number: 0 (zero) in Perl for Win32 File permission mode: read/write/execute Number of links to file (usually one for Win32 systems - NTFS filesystems may have a value greater than one) uid gid rdev size atime mtime ctime User ID - zero for Win32 Group ID - zero for Win32 Device Identifier (drive number) File size in bytes Last access time (C lang. time_t value) Last modification time (C lang. time_t value) File creation time (C lang. time_t value)

blksize Disk block size (cluster size): zero for Win32 blocks Number of blocks for file: zero for Win32

1082/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

OTVARANJE I ZATVARANJE DIREKTORIJA


Funkcija opendir otvara eljeni direktorij
opendir(NT,"c:/winnt") || die "Cannot opendir c:/winnt: $!"; closedir(NT);# neobavezno

retraivanje direktorija Globing


Perl podrava traenje kroz jednostavan mehanizam, samo postavite uvjet za traenje unutar<> I pobudite ga sa glob funkcijom @a = <*.plx>; @a = glob("*.plx"); # @a=sadri listu svih fileova koji zadovoljavaju uvijet. Ili while (defined($nextname = <c:/scripts/*.plx>)) { print "one of the files is $nextname\n"; } elite li pak samo ime while ($nextname = <c:/scripts/*.plx>) { $nextname =~ s#.*/##; # remove part before last slash print "one of the files is $nextname\n"; } Viestruki patterni su legalni unutar<> liste se konstruiraju zasebno tek se potom konkateniraju kao da su bili na velikoj listi @fred_barney_files = <fred* barney*>; Iako globing i regularni izrazi funkcioniraju na istom principu, znaenje njihovog spec. karaktera je razliito potreban je panja da se ne bi pitali zato <\.c$> ne pronalazi fileove koji zavravaju na.c Argument glob-a se interpolira prije expanzije ,stoga moete koristiti varijable za selektiranje odgovarajueg wildchara za string koji se rauna u run-timeu. if (-d "c:/tmp") { $where = "c:/tmp"; } else { $where = "c:/temp"; } @files = <$where/*>; $where smo postavili na jedno od imena direktorija u zavisnosti od uvjeta da li postoji c:\tmp ili c:\temp tek potom $where se expandira u to znai da e wildchar djelovati na c:\tmp\* ili c:\temp\* a u @files e se nai svi fileovi zadanog direktorija.

1083/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

FORMATI
PERL Practical Extraction and Report Language ==FORMATI

Definiranje formata i pozivi Formata


format ADDRESSLABEL = =============================== | @<<<<<<<<<<<<<<<<<<<<<<<<<< | # u $name dolazi < karaktera poravnanih u ljevo $name | @<<<<<<<<<<<<<<<<<<<<<<<<<< | # u $address dolazi < karaktera poravnanih takodjer u ljevo $address | @<<<<<<<<<<<<<<<<, @< @<<<< | # $city dolazi < karaktera poravnanih,u $state< karakter, u $zip 4 $city, . open(ADDRESSLABEL,">labels-to-print") || die "can't create"; file handle adresslabel -> file labels-to-print open(ADDRESSES,"addresses") || die "cannot open addresses"; #otvori addrese za itanje while (<ADDRESSES>) { # itaj chomp; # makni \n ($name,$address,$city,$state,$zip) = split(/:/); razdvoji ih : # load up the global variables write (ADDRESSLABEL); # upisi u file labels-to -print } $state, $zip ===============================

($name,$address,$city,$state,$zip)== imenima definiranim u formatu primjer ispisa u datoteku labels-to-print


=============================== | Stonehenge | 4470 SW Hall Suite 107 | Beaverton , OR 97005 | | |

=============================== =============================== | Fred Flintstone | 3737 Hard Rock Lane | Bedrock , OZ 999bc | | |

===============================

1084/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Text polja
@<<<<< # pet karaktera poravnanih u lijevo @>>>>> # pet karaktera poravnanih u desno @||||| # pet karaktera poravnanih u centar

Brojevna polja
format MONEY = Assets: @#####.## Liabilities: @#####.## Net: @#####.## $assets, $liabilities, $assets-$liabilities .umijesto < koristimo # toka je opcionalna i oznaava na koliko e se decimala formatirati

Vielinijska Polja
Doputa formatiranje vrijednosti koje imaju vie od jedne linije informacija, taj fileholder se oznaava @*
format STDOUT = Text Before. @* $long_string Text After. . $long_string = "Fred\nBarney\nBetty\nWilma\n"; write;

# izlaz
Text Before. Fred Barney Betty Wilma Text After.

Ispunjena polja. elimo li tekst nekako formatirati da bude vizualno dopadljiv perl nam daje ^ kojeg stavljamo na mjesto @ uz jednu restrikciju odgovarajua vrijednost mora biti skalarna varijabla ,a ne izraz koji vraa skalarnu varijablu, razlog tome je to e Perl promijeniti varijablu dok puni polje. Prilkom punjenja polja Perl e otrgnuti onoliko rijei koliko stane u polje ,vrijednost te varijable ostaje sve ono to nije uspio strpati u polje.

1085/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

format PEOPLE = Name: @<<<<<<<<<<<<< Comment: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $name, $comment ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $comment ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $comment ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $comment . Perl ugrabi onoliko rijei koliko stane u $comment,ostatak stavlja u drugi $comment do kraja. ta se deava ukoliko nema linija za popuniti sva polja,dobijete prazne linije,za popraviti to koristite ~ on forsira ne ispisivanje linije ukoliko ne postoji sada bi to izgledalo. format PEOPLE = Name: @<<<<<<<<<<<<< Comment: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $name, ~ ~ ~ . ukoliko comment pokrije samo prve dvije linije zadnje dvije se odbacuju $comment ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $comment ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $comment ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $comment

ali to ukoliko ne zanmo koliko linija moe zauzeti $comment, mogli bi napraviti 20 kopija zadnje linije ali perl pretpostavlja da ste lijeni. Koristei operator ~~,svaka linija koja sadri ~~ e biti ponavljana uzastopno sve dok ne vrati "" finalno primjer bi izgledao.
format PEOPLE = Name: @<<<<<<<<<<<<< Comment: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $name, ~~ . $comment ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< $comment

Perl vam omoguava i definiranje tzv Top-of Page-Format koji sprjeava da vam se u toku ispisa desi prelom stranice
format PEOPLE_TOP = My people -- Page @< $% # broj pozivanja TOP-of page formata use za broj stranica

1086/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb .

Programski alati na Unix raunalima

Default duina stranice je 60 linija ali je i to mogue promijeniti. Koritenje select za promjenu file handle. Povratna vrijednost selecta je string koji sadri ime prethodno odabranog handlea.
print "hello world\n"; select (LOGFILE); print "howdy, world\n"; select (STDOUT); # like print STDOUT "hello world\n"; # select a new filehandle # like print LOGFILE "howdy, world\n"; # re-select STDOUT

print "more for the log\n"; # more for LOGFILE

print "back to stdout\n"; # this goes to standard output primijetite da filehandle poslije selecta ostaje sve dok ga ne pregazimo novim selectom.

Mijenjanje imena formata


Defaultno ime formata za odreeni filehandle je isti kao i file handle, ali ga moete i mijenjati Perl izlae specijalnu varijablu $~ u koju spremate novo ime formata
$oldhandle = select REPORT; $~ = "SUMMARY"; select ($oldhandle); write (REPORT); #ispisuje report u sumary formatu

Mjenjanje Duljine stranice


Ponekad nam 60 linija ne odgovara nema problema $= je varijabla koja uva duljinu stranice u linijama
$old = select LOGFILE; # select LOGFILE and save old handle $= = 30; select $old;

ovo nee imati uinka sve do prvog poziva top-of page formata,stoga je postavite prije ispisa texta u filehandle, radit e jer se top-of page format poziva kod prvog writea.

1087/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Zakljuak:
PERL je jezik namijenjen ljudima koji ele brzo obaviti neke stvari ,za koje bi u drugim jezicima morali rjeavati puno tee i due, PERL je ne samo lagan za upotrebu ve on ujedno koristi i postojee alate i solucije. PERL je takoer bogat jezik nudei mnoge funkcionalnosti koje su ugraene u sam Jezik ,ljudi ostanu iznenaeni kada vide da samo nekoliko linija PERL-a zamjenjuje nekoliko stotina linija koda napisanog u C,mnogim ovisnicima PERL nije samo jezik ve kultura, korisnicima UNIX-a i srodnih Operacijskih Sistema PERL je bio neizostavan alat, koji se polagano rasprostirao i na druge platforme, jer je visoko portabilan, PERL na Win32 je doao kada ga je Microsoft ukljuio(Active State Tool) na Windows NT Resource KIT. PERL na Win32 koristi neke od coll tehnologija kao to su OLE automation, ODBC database konekcije,Active X skripting i jo mnogo toga!! PERL je interpreterski jezik sto znai da se ne kompajlira ve se koristi PERL interpreter(slino kao JAVA VIRTUAL MACHINE),ali ima i neke razlike on je u stvari i kompajler i interpreter,kada pokrenete PERL interpreter na nekom PERL skript filu on se prvo compajlira i optimizira,tek potom efikasno izvrava ,ne samo to omoguava brzo runtime izvravanje ,nego i ubrzava razvojni ciklus ,jer promjene u kodu se mogu raditi bez da se ponovo kompajliraju i linkaju. PERL (Practical Extraction and Report Language). Usprkos njegovoj relativno jednostavnoj sintaksi ,moete jednostavno razvijati PERL programe, ne samo sto postoji debugger ,ve je samo kompajler dostatan da ukae na poruku o greci,. Interpreter ne izvrava program ako se program ne iskompajlira ,ovo vas spaava od interpreterskih nonih mora gdje se prva polovica programa izvrava a druga polovica ne! PERL se danas iroko koristi za WWW ,CGI Active X skripte i jo mnogo toga, izbor je mnogih sistemaca , ne samo to e vam dati da manipulirate registryem , Event Logom,i User -accountom ,nego je i najbolji alat za procesiranje fileova skoro bilo kojeg formata. Sa PERLOM moete: -moete pristupati vaoj bazi podataka(Win32::ODBC)ili da radi s vaim Word procesorom ili spreedshetom koristei OLE automation. -za filtriranje e-maila ,sa slanje e-maila, komunikaciju s FTP i HTTP serverima

1088/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

-procesirati tekstualne i numerike podatke i jo mnogo, mnogo toga. Kao i mnogi drugo jezici PERL moe biti 'write-only' tj mogue je pisati programe koji su jako teko itljivi, ali uz malo brige i truda moete izbjei ovakve situacije.

1089/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Tamara Krutman Ante Penava

PERL Practical Extraction And Report Language

1090/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

UVOD to je Perl?
Perl je engleska skraenica za Practical Extraction and Report Language. To je interpretorski programski jezik ope namjene prenosiv za sve OS (UNIX, Linux, Windows, Mac,...). Perl je besplatan, "open-source" jezik. Proiriv je novim funkcijama i mogunostima koje korisnici sami proizvedu (modularan je). Podrava proceduralno i objektno programiranje. Perl se sastoji od programa, interpretera i compiler-a. Program je ono to korisnik pie, interpreter je prevodilac tog programa, a compiler je izvritelj programa. Perl je jednostavan za razumijevanje i ve se sa malo znanja moe raditi puno stvari.

Povijest Perl-a
Prvu inaicu Perl-a napisao je Larry Wall davne 1987. godine. Wall je tada radio sustav izvjeivanja pogreaka prilikom kompajliranja programa. Sustav izvjeivanja pogreaka trebao je biti po strukturi jednak Usenet-u. Kako je u to vrijeme awk bio neprimjeren za takve zadatke, a C jezik presloen, Larry Wall se odluio na stvaranje posebnog alata koji bi bio moan s obradom teksta i stvaranjem izvjea. S vremenom je taj alat prerastao u programski jezik koje je Wall podijelio s ostalima putem Usenet-a. Tako je zaivio Perl - interpretorski jezik pisan u C-u i namijenjen samo UNIX platformama. Jednostavnost, vea brzina izvoenja i fleksibilnost koju je Perl nudio naspram ostalih jezika u to vrijeme za tu primjenu, uinile su ga vrlo popularnim. Zahvaljujui tome Perl se brzo razvijao obuhvaajui sve vie novih mogunosti (koje su bile vezane i s razvojem UNIX kernela). Do danas, Perl je dogurao do stabilne verzije 5.8.6. i eksperimentalne verzije 5.9.1. te postao jedan od ope prihvaenih skriptnih programskih jezika ope namjene. Nije vie ogranien samo na UNIX platforme, ve postoji i podrka za druge OS (Windows, Mac,...). Posebnost Perl-a je u tome to u sebi objedinjuje mogunosti C, sed i awk programskih jezika, te UNIX-ovih ljuski.

1091/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

U novije vrijeme Perl se zbog svoje opsenosti poinje sve vie izbjegavati kod mlaih webmastera, te polagano, unato mogunostima koje se preklapaju sa drugim serverskim jezicima, gubi utrku na webu.

Namjena Perl-a
Kako se s vremenom razvijao, Perl se nije zadrao samo na procesiranju teksta. Danas je Perl nairoko primjenjivan za zadatke kao to su: administracija sustava, razvoj interaktivnih web stranica, merno programiranje, grafiko programiranje, izrada sistemskih i obinih aplikacija. Perl se primjenjuje kada je potrebno brzo, jednostavno i efikasno razvijanje ispitnih okruenja programa ili njihovih prototipova te kada se zahtijeva iroka prenosivost. Perl podrava proceduralno i objektno programiranje. Poput C i C++, Perl nema striktnu granicu izmeu procedura ili objekata. Perl je izveden kao modulator, tj. interpreter (prevodi raunalu ono to korisnik napie na poznat jezik jedinica i nula) Perl-a moe se dopunjavati bibliotekama koje mu proiruju funkcionalnost (vrlo velika baza modula). Baza modula je okupljena oko CPAN mree (eng. Comprehensive Perl Archive Network). Perl interpreter nije ogranien samo na odreenu primjenu. U argonu se za Perl kae da je "otvoren prema svima, ali nije poseban prema nekome". Perl je od samog poetka besplatan i open-source projekt. Oko Perl projekta je okupljena iroka zajednica programera koji dobrovoljno sudjeluju u njegovu razvoju na elu sa njegovim tvorcem Larry Wall-om. U novije vrijeme Perl se zbog svoje opsenosti poinje sve vie izbjegavati kod mlaih webmastera, te polagano, unato mogunostima koje se preklapaju sa drugim serverskim jezicima, gubi utrku na webu.

1092/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

INSTALACIJA PERL-A I PERL MODULA Instalacija Perl-a i Perl modula na Linuxu Instalacija izvornog koda Perl-a na Unix/Linux OS
Perl je od samog poetka razvijen kao jezik na UNIX operativnim sustavima jer koristi njegove osnovne pozive kernela. Kako je njegova rairenost rasla, tako je s vremenom postao sastavni dio distibucija UNIX i Linux operativnih sustava. Ipak, distribucije obino ne sadre najnovije verzije Perla pa ga je potrebno skinuti s Interneta. S Interneta se moe skinuti kompajlirana verzija Perla (eng. ports, binary distributions), no to nije preporuljivo zbog ve podeenih postavki prije kompajliranja koje ne moraju odgovarati onima koje elimo. Najbolje je skinuti izvorni kod s Interneta, te ga kompajlirati na vlastitiom raunalu. Najnoviji izvorni kod mogue je dohvatiti sa www.cpan.org/src/stable.tar.gz. Nakon to smo skinuli izvorni kod, koji dolazi u obliku .tar. archive komprimirane gzip alatom, kopiramo ga u direktorij po elji I otpakiramo arhivu. Otpakiravanje arhive izvodi se slijedeom naredbom u ljusci:
$ tar xvzf stable.tar.gz

Nakon toga slijedi proces kompajliranja koji se najee izvodi slijedeim naredbama u ljusci:
$ cd stable $ ./configure $ make

Gornjim naredbama postavlja se tekui direktorij stable (koji je nastao otpakiravanjem arhive stable.tar.gz), uitavaju se postavke za proces kompajliranja i na kraju se pokree samo kompajliranje. Preporuljivo je prije procesa kompajliranja proitati datoteku Readme koja dolazi sa izvornim kodom, a u kojoj je detaljno opisana procedura kompajliranja.

1093/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Instalacija ActivState Linux Package-a

Traei po internetu potrebni materijal za pisanje naeg seminara o Perlu pronali smo komentare kako je pomou ActiveState Linux Package-a najlake instalirati Perl na Linux platformu, te smo napisali kako se instalira Perl na Linux pomou ActiveState Linux Package-a. ActiveState Linux Perl Package se moe skinuti na stranicama

http://www.php.co.ba/index.php?action=sw_details&main_id=12. File ima oko 9.2. MB. Za instalaciju je potrebno oko 35 MB slobodnog prostora diska. Nakon download-a .tar.gz file kopiramo u direktorij /tmp -> cp ActivePerl-5.6.0.623i686-linux-thread-multi.tar.gz/tmp, te ga otpakiramo. To moemo napraviti na dva naina.: 1.-tar xzf ActivePerl-5.6.0.623-i686-linux-thread-multi.tar.gz 2.-gunzip c ActivePerl-5.6.0.623-i686-linux-thread-multi.tar.gz | tar xfMi emo koristiti drugi nain. Uemo u direktorij komandom cd ActivePerl-5.6.0.623 i upiemo ./install.sh za instalaciju Perl-a. Postavimo Environment varijable tako da upiemo setenv PATH /usr/local/ActivePerl-5.6/bin:$PATH. Time je instalacija Perl-a na Linux-u zavrena

1094/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Instalacija Perl modula na Linux-u


U ovom dijelu smo opisali tipinu instalaciju za sve *NIX sisteme. Perl module prvo moramo skinuti sa Interneta. Nakon to smo to uinili kopiramo ga u odreeni direktorij, npr. cp DBD-Mysql.tar.gz /tmp i otpakiramo ga. To moemo napraviti na dva naina: 1. tar -xzf DBD-Mysql.tar.gz 2. gunzip -c DBD-Mysql.tar.gz | tar -xf Zatim uemo u direktorij komandom cd DBD-Mysql i zaponemo instalaciju upisivanjem: perl Makefile.PL make make test make install Make test nije obavezan korak, ali nam pomae da vidimo da li ima pogreaka prije nego to instalacija bude zavrena. Ako koristimo neki drugi compiler, npr. Gnu CC, onda moramo umjesto make napisati make CC=gcc. Time prisiljavamo program make da koristi gcc compiler. Ukoliko koristimo gmake umjesto make, gmake moramo upotrebljavati cijelo vrijeme. Primjer: - perl Makefile.PL - gmake CC=gcc - gmake test - gmake install Time je modul instaliran i ako nisu prikazane nikakve greke moemo ga koristiti u naim skriptama. Da bi instalirali Perl i module moramo biti root. Vie informacija o modulima moemo nai na stranicama http://www.cpan.org.

1095/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Instalacija Perl-a i Perl modula na Windows OS-u Instalacija Perl-a na Windows OS-u
Verziju Perl-a koju emo opisivati dolazi od firme ActiveState. Veliina file-a je oko 8.6 MB. Za instalaciju nam treba oko 35 MB slobodnog prostora diska. Opisati emo instalaciju Perl-a na Windows 2000 Service Pack 3. Prvo skinemo .msi file. Klikom na .msi file nudi nam se da Perl instaliramo u direktorij C:\Perl (to je standardni Perl direktorij). Perl instalira standardne komponente: perl program, PerlIS - ISAMI interpreter, PerlSE - Perl ActiveX Scripting Engine, Primjere i Dokumentaciju. Tijek instalacije je automatski osim par standardnih klikova. Perl e promjeniti, odnosno dodati svoje Environment Varijable koje nam olakavaju koritenje. Zatim resetiramo kompjuter. Environment varijable moemo nai klikom desne tipke mia na Computer -> Preferences -> Advanced -> Environment Variables I pod opcijom PATH pronalazimo traene Perl varijable. U sluaju da neka varijabla fail treba ih unijeti runo jer bi morali pisati puni PATH za Perl skripte. Sve Perl skripte poinju sa #!Perl Dir. Environment varijble nam skrauju pisanje Perl Dir-a. Umjesto Perl Dir-a piemo #!perl. Za provjeru da li je instalacija uspjeno prola napravimo kratku Perl skrupitu tako da napravimo novi file na npr. desktopu i imenujemo ga perl.pl. Otvorimo ga u editoru I napiemo sljedei kod u file perl.pl: #!perl print "Perl je instaliran"; <>; Prva linija ovog kratkog programa nam govori gdje je Perl direktorij, druga linija ispisuje recenicu Perl je instaliran, a trea linija mu govori da MS-DOS prozor dri otvorenim dok ne pritisnemo ENTER na kompjuteru. Ako se nakon duplog klika mia na file, prozor otvori i u njemu se pojavi ovaj tekst, Perl je uspjesno instaliran. U Perl-u se nalazi par najosnovnijih modula, ostale module koji e nam trebati moramo nai i instalirati.

1096/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Za instalaciju Windows XP-ea instaliranje se pokree aktiviranjem skinute .exe arhive i slijedom niza jednostavnih uputa. Nije potrebno prije instalacije Perl-a instalirati MSI Installer kao za Windows 2000/ NT/ Me/ 9x.

Instalacija Perl modula na Windows OS-u

ActiveState je izmislio jednostavan nain instaliranja modula na Windows sistemima PPM. PPM (Programmer_Package Manager) je program koji pomae da se instalacija Perl modula odvija jako brzo. PPM funkcionira na nain: - Otvorimo MS-DOS prozor klikom na ikonu u Start menu-iju ili klikom na Start Run , upiemo cmd i kliknemo ENTER. - U MS-DOS prozoru upiemo ppm3 za pokretanje PPM. Ako se pojavi greka tipa Could not find..., upiemo C:\perl\bin\ppm3 za pokretaje PPM-a. - Upiemo search ime_modula (npr. search DBI) za pronalazak eljenog modula (DBI - moduli za rad sa bazama), i PPM e izlistati naene module zajedno sa kratkim opisom svakog od njih. Za rad sa search (i u ovom slucaju install) naredbom moramo biti online spojeni. - Nakon pretraivanja upiemo install ime_modula (npr. install DBIx-Easy) za instaliranje tog modula. Ukoliko je modul ve instaliran, pojiviti e se obavijest. MS-DOS prozor trebao bi ovako izgledati (ako je instaliran DBIx-Easy):

ppm> install DBIx-Easy ==================== Install 'DBIx-Easy' version 0.10 in ActivePerl 5.6.1.631. ==================== Downloaded 28947 bytes. Extracting package. This may take a few seconds. Extracting 33/33: blib/html/site/lib/DBIx/Easy.html Installing C:\perl\html\site\lib\DBIx\Easy.html Installing C:\perl\site\lib\DBIx\Easy.pm Installing C:\perl\bin\dbs_dumptabdata Installing C:\perl\bin\dbs_dumptabdata.bat

1097/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb Installing C:\perl\bin\dbs_dumptabstruct Installing C:\perl\bin\dbs_dumptabstruct.bat Installing C:\perl\bin\dbs_empty Installing C:\perl\bin\dbs_empty.bat Installing C:\perl\bin\dbs_printtab Installing C:\perl\bin\dbs_printtab.bat Installing C:\perl\bin\dbs_update Installing C:\perl\bin\dbs_update.bat

Programski alati na Unix raunalima

Writing C:\perl\site\lib\auto\DBIx\Easy\.packlist ppm>

- PPM skida modul sa Interneta i instalira ga u odgovarajui direktorij (C:\Perl\lib). - Modul je instaliran i moemo poeti sa koritenjem. module u Perl-u koristimo naredbom use ime_modula. - Za sve daljnje PPM komande treba upisati help.

1098/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

STRUKTURA PERL PROGRAMA Konvencije Perl-a


Kada se kae "Perl", pod time se misli na elemente, pravila i definicije koje objedinjuje taj programski jezik, dok "perl" predstavlja njegovu izvedbu (interpreter). U smislu Perl kodiranja moemo koristiti termine program i skripta s jednakim smislom. I jedno i drugo je ispravno. Perl program je obian tekstualni dokument koji se moe pisati klasinim editorom teksta (npr. joe na Linux OS, ili Notepad na Windows OS).

Struktura Perl-a

Prvi red Perl programa obino poinje posebnim komentarom koji poinje sa #!. On slui kao uputa UNIX ili Linux ljusci (npr. bash) da se radi o Perl skripti koju Perl interpreter treba izvesti. Jednostavan Perl program moe izgledati ovako:
#!/usr/bin/perl print "Ovo je seminar o temi Perl."; # ovo je komentar

Iz primjera vidimo da uputa ljusci u prvom redu govori kojim se programom izvodi skripta i gdje se njen interpreter nalazi. U naem sluaju, Perl interpreter se nalazi u direktoriju /usr/bin. Kod Windows OS prva linija ne mora biti komentar. Vano je samo da skripta ima sufiks .pl i da za takav tip datoteke OS poziva Perl interpreter. Drugi red primjera je izraz koji sadri poziv Perlove predefinirane funkcije operatora. To je print operator koji proslijeuje tekst unutar navodnika na standardni izlaz STDOUT, ispisuje ga na monitoru. Svaki Perl izraz mora zavravati sa ;.

1099/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

U treem redu napisan je komentar. Obini komentari u Perlu poinju znakom # iza kojeg slijedi tekst koji interpreter preskae pri izvoenju. Ti komentari slue za umetanje teksta koji programeru slue za jednostavnije snalaenje u kodu. Nakon pokretanja programa, Perl interpreter u potpunosti provjerava kod pozvanog programa, te ga kompajlira. Poslije kompajliranja poinje njegovo izvravanje izraz po izraz. Nakon uspjenog izvoenja programa, Perl proces zavrava vraajui ljusci iz koje je pozvan vrijednost o uspjenom kraju programa. Iz takvog slijeda izvrenja Perl skripte, dolazi se do zakljuka da Perl nije efikasan za male skripte i njihova viestruka pokretanja. Razlog je taj to samo kompajliranje uzima neto vremena i resursa prije izvoenja, pa trajanje izvrenja samog programa moe biti manje od trajanja kompajliranja. U tom sluaju je korisnost (omjer izmeu korisnog i ukupno utroenog vremena) procesorskog vremena mala.

VARIJABLE I NJIHOVI OPERATORI


Kod Perla razlikujemo tri ugraene vrste podatkovnih struktura: skalari (eng. scalars), polja skalara (eng. arrays), te asocijativna, zdruena polja skalara (eng. associative arrays).

1100/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Imena varijabli razlikujemo po poetnom znaku koji definira tip varijable i imena varijable. Njihova veliina je jedino ograniena sistemskom memorijom. Za razliku od ostalih jezika, Perl ne zahtijeva prethodno deklariranje varijabli, ve se one automatski definiraju prilikom postavljanja vrijednosti varijable. Spomenuti emo i neke od najee koritenih operatora. Njihova namjena je promjena vrijednosti varijabli. Operatori se dijele s obzirom na tip verijable. Na perlop man stranicama moe se nai vie o samim operatorima.

Skalarne varijable
Skalarne varijable su najednostavnije vrste podatkovnih struktura. Slue za pohranu cijelih i realnih brojeva, za pohranu niza znakova (stringova) i reference. Oznaavaju se kao: $ime_varijable Pridjeljivanje vrijednosti skalarima prikazat emo u slijedeih nekoliko primjera: $broj = 7; $dec_broj = 6.5; $float_broj = 3.14e10; $pozdrav = "Pozdrav iz Zagreba!"; $vrijeme = 'vedro i vjetrovito'; Svi brojevi u Perlu interno se pohranjuju double deklaracijom u C-u. Tek se s verzijom 5 uvela mogunost interne pohrane brojeva kao cjelobrojnih (intdeklaracija u C-u) s ciljem optimizacije programa. Najei operatori nad brojevima su: + plus - minus * mnoenje / dijeljenje ** eksponent % modulo == jednako != razlicito < manji od
1101/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

> veci od <= manji od ili jednako >= veci od ili jednako += # $i=$i+$a je isto kao $i+=$a -= # $i=$i-$a je isto kao $i-=$a *= # $i=$i*$a je isto kao $i*=$a Znakovni nizovi mogu biti definirani unutar dvostrukih i jednostrukih navodnika. Dvostruki navodnici oznaavaju da se unutar znakovnog niza prepoznaju nazivi varijabli, te da vrijednost toga niza ovisi o vrijednosti te varijable. Npr.: $ime = "Tamara" $obrazac = "$ime pohadja Sveuilite u Splitu." # $obrazac postaje " Tamara pohadja Sveuilite u Splitu." Jednostruki navodnici oznaavaju da znakovni niz ima fiksnu vrijednost. Najznaajniji operator znakovnih nizova je chop($ime_varijable) koji brie zadnji znak niza.

1102/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Polja skalara

Polja skalara su spremnici niza skalara ijim vrijednostima se pristupa putem index-a (prvi element $array [0], drugi $array [1], ). Oznaavaju se kao: @ime_polja Pridjeljivanje vrijednosti poljima prikazat emo kroz primjere: @trio = ("Ante", "Tamara", "Jana", "4401"); @trio_gusti = @trio; Pristup odreenom elementu polja izvodi se na slijedei nain: $trio[3] = "1044"; Time smo promijenili zadnji element polja "4401" u "1044". Indeksiranje elemenata polja poinje od 0. Najei operatori polja prikazani su kroz primjere: push (@trio, "Antonija"); # na kraj polja @trio dodaje se "Antonija" $ime = pop (@trio); # "Antonija" s kraja polja sprema se u $ime unshift (@trio, "Antonija"); # "Antonija" se dodaje na poetak polja $ime = shift (@trio); # uzima se prvi element polja @trio = reverse (@trio); # obrce se redoslijed elemenata @aList = sort (@aList); # abecedno sortiranje elemenata chop (@aList); # svakom elementu polja brie se zadnji znak @linija = ; # jedna linija sa standardnog ulaza pohranjuje se u @linija

Zdruena polja skalara

1103/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Zdruena polja skalara, poznata jos kao hashes su spremnik koji predstavlja dvodimenzionalno polje skalara. Svakom elementu polja pristupa se putem jedinstvenih kljueva prema kojem se razlikuje od ostalih elemenata. Kljuevi su takoer skalari i njihova bitna karakteristika je u tome da Perl ne garantira njihov redoslijed pri njihvom isitavanju iz zdruenog polja skalara. Zdruena polja se oznaavaju kao: %ime_zdruzenog_polja Primjeri pridjeljivanja vrijednosti poljima prikazati emo kroz primjere: $a{"Ante"} = 23; $kljuc = Tamara; $a{$kljuc} = 25; %b = %a; Primjeri operatora za zdruena polja su: @kljucevi = keys(%a); # vraca polje s vrijednostima kljuceva @elementi = values (%a); # vraca polje vrijednosti elemenata delete $a{"Ante"}; # brie element s kljucem "Ante"

1104/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

KONTROLA TIJEKA PROGRAMA (PETLJE)


Tijek izvoenja programa u Perlu je od prvog izraza prema zadnjem izrazu. On se moe promijeniti uvjetnim petljama ili grananjem. I u Perlu, kao u svim programskim jezicima, postoje izrazi za kontrolu tijeka programa. Mi smo naveli samo njihovu osnovnu sintaksu. Detaljniji opis moe se nai u perlsyn man stranicama. if izraz slui za ispitivanje uvjetnog izraza. Ukoliko je on toan (TRUE) izvode se izrazi unutar vitiastih zagrada odmah iza if-a. U suprotnom, izvode se izrazi unutar vitiastih zagrada odmah iza else. Uvjetni izraz daje vrijednost FALSE ako je rezultat tog izraza NULL string "" ili znamenka "0". if (uvjetni_izraz_A) { A_tocan_izraz_1; A_tocan_izraz_2; A_tocan_izraz_3; } elsif (uvjetni_izraz_B) { B_tocan_izraz_1; B_tocan_izraz_2; B_tocan_izraz_3; } else { netocan_izraz_1; netocan_izraz_1; netocan_izraz_1; } While je petlja koja ispituje uvjet, te ako je istinit izvri blok i ponovno testira uvjet. Akooznacimo petlje s tzv. labelima, mozemo sa next, last i redo kontrolirati i vanjske petlje.

1105/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

LABELA: while (uvjetni_izraz) { izraz_1; izraz_2; izraz_3; } for petlja izvodi blok izraza u vitiastim zagradama sve dok je uvjetni izraz koji ispituje toan (TRUE). for (pocetni_izraz; uvjetni_izraz; inkremetalni_izraz) { # npr. for ($i=1; $i<5; $i++) izraz_1; izraz_2; izraz_3; } foreach petlja izvodi blok izraza u vitiastim zagradama za svaki element polja @polje, pri emu je vrijednost tekueg elementa polja sadrana u varijabli $i. LABELA: foreach $i (@polje) { izraz_1; izraz_2; izraz_3; }

1106/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

FUNKCIJE (PODRUTINE)
Kao i mnogi drugi programski jezici i Perl prua svojim korisnicima definirane funkcije koje se jo nazivaju i podrutine jer se pod pojmom funkcija misli na predefinirane funkcije operatore (eng. subroutines). Podrutine se mogu locirati bilo gdje u main-u programa, uitati iz nekih drugih file-ova, moemo pozvati funkciju indirektno koristei varijablu koja sadri ime funkcije ili CODE reference. Funkcije su osnovni element svakog programskog jezika. Najee se ponaaju poput obinih operatora inei promjenu vrijednosti neke varijable ili vraajui neku vrijednost koja se moe pridjeliti nekoj drugoj varijabli. Osim toga, u odreenom kontekstu funkcije izvode i kontrolu tijeka izvoenja programa (mijenjajui tijek programa od poziva fukcije, preko izraza kojima je definirana, pa nazad do toke od kuda je pozvana). U perlsub man stranicama se nalaze detalji vezani uz podrutine.

Definicija podrutine (perlsub)


Definicija podrutine oznaava se oznakom sub iza ega slijedi ime funkcije i blok izraza unutar vitiastih zagrada. Pozivom funkcije izvest e se taj blok izraza. Npr. :
sub ime_funkcije { izraz_1; izraz_2; izraz_3; }

1107/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Poziv podrutine
Podrutine se pozivaju unutar nekog izraza ili zasebno. Njihov poziv se sastoji od znaka & iza kojeg slijedi ime podrutine: &ime_funkcije Ako u podrutinu prenosimo argumente, oni se unose unutar zagrada: &ime_funkcije("Ante", 23)

Vraanje vrijednosti
Podrutina uvijek vraa vrijednost zadnjeg izraza koji je izveden unutar podrutine. Npr.: sub aFunction { izraz_1; izraz_2; $a = $b + $c; } U primjeru podrutina vraa vrijednost varijable $a. Nakon povratka iz podrutine, vraena vrijednost nalazi se u posebnoj varijabli $_.

Argumenti podrutine
Argumenti podrutine prenose se u podrutinu putem posebne varijable @_ koja predstavlja polje argumenata. Npr. : sub zbroji { $_[0]+$_[1] } Podrutina vraa vrijednost zbroja dvaju brojeva koji se u nju prenose putem argumenata. Poziv te podrutine bi izgledao ovako: &zbroji(2, 5)

1108/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Lokalne i globalne varijable


S obzirom na raspon dohvatljivosti odreene varijable postoje globalne i lokalne (u daljnjem tekstu leksike) varijable. Slino nekim drugim jezicima, globalnim varijablama se moe direktno pristupiti iz bilo kojeg dijela programa, a leksikim samo iz blokova gdje su definirani, ili ako nisu u bloku, onda od mjesta gdje su definirani pa do kraja datoteke. Program se moe sastojati od vie datoteka. Blok se odnosi na funkciju, foreach, while, ili neku drugu konstrukciju sa vitiastim zagradama. Globalne varijable se definiraju sa "our", a leksike sa "my" oznakom. Novu vrijednost GLOBALNE varijable odreuje oznaka "local" koja privremeno vrijedi do kraja bloka, a protee se takoer i na funkcije koje su pozivane iz tog bloka. Primjer: sub neka_rutina { local ($A, $B); $A = $_[0]; $B = $_[1]; } &neka_rutina ($a, $b); U primjeru varijable unutar podrutine $A i $B e imati jednake vrijednosti kao i globalne varijable $a i $b. Bilo kakve promjene nad lokalnim varijablama nee utjecati na vrijednosti varijabli $a i $b. Leksike varijable takoer mogu "pregaziti" svoju staru vrijednost s tom razlikom da se novo dodjeljena vrijednost ne protee i na pozivane funkcije.

Sve varijable uvijek moraju biti definirane prije nego im se pristupa, a obrnuti redoslijed oznaava pogreku u logici, i u veini sluajeva zavrava prijavom greke kod pokretanja.

1109/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Funkcije map i grep


Map je funkcija koja za svaki element liste s desne strane, obavlja transformaciju i prosljedjuje takvu transformiranu listu prema lijevoj strani. Unutar map bloka globalna varijabla $_ poprima redom vrijednosti liste. my @arr = map { $_*2 } 0..3; Tako @arr nakon ovakvog mapiranja sadrzi (0, 2, 4, 6). Kako Perlu veini sluajeva omoguuje alternativni nain, I ovdje se radi o jednostavnom ozrazu koji ne zahtjeva blok, moemo napisati: my @arr = map($_*2, 03); Ili jednostavnije bez zagrada: my @arr = map $_*2, 03; Grep je funkcija koja za svaki element liste s desne strane, obavlja provjeru I sukladno tome prosljeuje filtriranu listu prema lijevoj strani. $_ opet redom poprima vrijednosti liste. my @arr = grep { $_%2 } 0...3; my @arr = grep $_%2, 0...3; # isto @arr nakon ovakvog filtriranja sadrzi (1, 3). 0 % 2 je 0, te 0 ne prolazi 1 % 2 je 1, te 1 prolazi 2 % 2 je 0, te 2 ne prolazi 3 % 2 je 1, te 3 prolazi

1110/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

REGULARNI IZRAZI (regex-i)


Regularni izrazi su Perl-ov pojam za znakove ili posebne znakovne (pod) nizove koji se ele pronai unutar drugih znakovnih nizova. Regularni izrazi predstavljaju tono definirane uzorke znakovnih nizova (eng. patterns). Ti uzorci ne slue samo za pronalaenje tih uzoraka u drugim nizovima, ve i za ostale operacije kao to je na primjer zamjena pronaenog uzorka u nizu nekim drugim znakovnim nizom. Tip operacije ovisi o primjenjenom operatoru. Detaljnije i kompletnije o regularnim izrazima moe se vidjeti u perlretut i perlre man stranicama. Regularni izrazi u Perlu se definiraju na tono odreen nain. Najuobiajeniji nain definiranja je postavljanjem znakovnog niza (uzorka) unutar znakova /: /neki_niz_znakova/ /Tamara_98/ Osim znaka / moe se koristiti neki drugi ne-alfanumeriki znak, samo je potrebno naglasiti znakom m: m#uzorak# m@Tamara_98@ Definirani regularni izraz se pretrauje u preodreenoj varijabli $_. eli li se regularni izraz pretraivati unutar neke prethodno definirane varijable, tada se koristi operator =~: $imena =~ /marko/; Ukoliko se u varijabli $imena nalazi uzorak "marko", cijeli izraz vraa TRUE (u suprotnom FALSE). Budui da regularni izrazi vraaju logiki rezultat (TRUE/FALSE)te se oni veinom koriste kod kontrolnih struktura. if (/Ante/) { print "Ante postoji u $_\n"; }

1111/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Oblici uzoraka
Regularni izrazi su uzorci koji openito opisuju niz ili nizove znakova. Primjeri jednoznakovnih uzoraka: /.oki/ # odgovara nizu "coki," "moki", ali ne i "oki" /[0123456789]/ # zamjenjuje bilo koji znak unutar uglatih zagrada /[0-9]/ # zamjenjuje bilo koji znak unutar uglatih zagrada /[^0-9] # bilo koji znak osim brojeva /[0-9a-zA-Z]/ # bilo koji alfanumeriki znak Predefinirane kategorije znakova su: \d # brojevi, [0-9] \w # slova, [a-zA-Z0-9_] \s # praznine, [ \r\t\n\f] \D # sve osim brojeva, [^0-9] \W # sve osim slova, [^a-zA-Z0-9_] \S # sve osim praznina, [^ \r\t\n\f] Vieznakovni uzorci mogu u sebi sadravati sekvencu znakova koji se ponavljaju odreen broj puta. Zato u Perlu postoje specijalni znakovi kojima se definira toan broj ponavljanja u uzorku. Primjeri vieznakovnih uzoraka koji u sebi sadre sekvencu znakova koji se ponavljaju odreen broj puta: /a*t/ # bilo koji broj znakova "a" iza kojeg slijedi "t" /a+t/ # jedan ili vie znaka "a" iza kojeg slijedi "t" /a?t/
1112/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

# nula ili jedan znak "a" iza kojeg slijedi "t" /a{2,4}t/ # od 2 do 4 znaka "a" iza kojeg slijedi "t" /a{2,}t/ # 2 ili vie znaka "a" iza kojeg slijedi "t" /a{2}t/ # tocno 2 znaka "a" iza kojeg slijedi "t" Za uzorke se moe definirati i poloaj na kojem mora biti unutar znakovnog niza koji se pretrauje. Primjeri toga: /\bdr/ # \b == granica (prazninu, poetak ili kraj niza) # uzorak odgovara za "drvo" ali ne za "odrzavanje" /ti\b/ # uzorak odgovara za "cuti" ali ne za "tisak" /ti\B/ # \B == ne smije biti granica na tom mjestu # uzorak odgovara za "tisak" ali ne za "cuti" /^tr/ # ^ == pocetak niza # uzorak odgovara za "trag" ali ne za "otrovan" /ca$/ # $ == kraj niza # uzorak odgovara za "kuca" ali ne za "cavao"

1113/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Operatori regularnih izraza


Najee koriten operator je zamjena koja je formulirana na slijedei nain: $niz =~ s/uzorak/zamjena_za_uzorak/ Uzorak se pretrauje unutar varijable (skalara) $niz, te se svaki uzorak koji se podudara s njime zamjenjuje definiranim znakovnim nizom. Primjeri: s/ante/tamara/ # zamjenjuje se "ante" s "tamara" (unutar $_) s/ante/tamara/gi # isto kao i prethodni samo operator sada # nije osjetljiv na velika i mala slova $a =~ s/ante/tamara/ # ista operacija se izvodi nad $a Operator split() vraa polje skalara (znakovnih nizova) koji se nalaze izmeu pronaenih uzoraka. Primjeri: @var = split(/pattern/, $znak_niz); @var = split(/pattern/); Ukoliko nije definiran znakovni niz, uzima se sadraj varijable $_. Jo jedan vaan operator je join(). On uzima polje skalara (znakovnih nizova), te ih spaja dodajui izmeu njih definirani znakovni niz. Primjer: @imena = ("ante", "tamara", "jana"); $a = join(" + ", @imena); # kao rezultat skalar $a e sadravati # niz "ante + tamara + jana"

RUKOVANJE ULAZIMA/IZLAZIMA (I/O)


1114/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Perl omoguuje osnovne ulazne/izlazne operacije koje obuhvaaju prihvat podataka sa standardnog ulaza (tipkovnica), proslijeivanje podataka na standardni izlaz (monitor), te pisanje i itanje datoteka.

Standardni ulazi/izlazi (I/O)


Standardni I/O su STDIN, STDOUT i STDERR. Pristup standardnom ulazu STDIN izvodi se preko <> operatora (eng. diamond operator). U skalarnom obliku, operator vraa jednu liniju s ulaza, dok u kontekstu polja operator vraa cijelu datoteku s time da svaki element polja predstavlja jednu liniju. Primjer: $a = ; # vraa liniju @a = ; # vraa datoteku Standardni izlaz STDOUT u najeem broju sluajeva nije potrebno posebno pozivati. Na primjer, operator print uvijek radi sa STDOUT proslijeujui mu tekst koji mora ispisati. Standardni izlaz za prijavljivanje pogreki STDERR je obino preusmjeren na monitor (STDOUT).

1115/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Rad sa datotekama
Datotekama se pristupa putem posebnih pokazivaa (eng. filehandles). Pokazivai su zapravo spona izmeu datoteke i Perl procesa. Ti pokazivai se moraju povezati s datotekom koju e oni predstavljati u programu. Tome slui operator open(). Primjer pokazivaa INPUT-a koji je povezan s datotekom index.html na slijedei nain: open (INDEX, "index.html"); U primjeru je datoteka otvorena samo za itanje. Ukoliko se u nju eli pisati to se radi na slijedei nain: open (INDEX, ">index.html"); U ovom sluaju e se prebrisati stari sadraj datoteke. Ukoliko se eli sadraj datoteke nadopunjavati (eng. Update), tj. dodavati podatke na njen kraj, potrebno je datoteku otvoriti na slijedei nain: open (INDEX, ">>index.html"); Operator open() vraa vrijednost TRUE/FALSE s obzirom na to da li je operacija uspjeno izvrena (TRUE za uspjeno izvedenu operaciju). Provjera uspjeno izvedene operacije open() moe se ispitati na slijedei nain: open (INDEX, ">index.html") || die "Poruka za SDTERR"; Funkcija die() proslijeuje tekst unutar zagrada na STDERR i gasi Perl proces. U ovom primjeru ona e se izvoditi ukoliko je lijevi dio operatora || jednak FALSE (neuspjeno otvorena datoteka). Zatvaranje datoteke nije nuno izvriti jer se obavlja automatski prilikom zavrenja Perl procesa. No, ukoliko ga je potrebno uiniti prije, za to slui operator close(). Ako u gornjem primjeru elimo zatvoriti datoteku index.html s pokazivaem INDEX, uiniti emo to ovako: close(INDEX); itanje datotete je isto kao i kod SDTIN. Operatorom <> pristupamo datoteci u skalarnom kontekstu ili u kontekstu polja. $a = ; # vraa liniju @a = ; # vraa cijelu datoteku Pisanje u datoteku izvodi se operatorom print, samo to se mora prije definirati izlaz na koji se tekst proslijeuje. Na primjer:
1116/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

print INDEX "neki tekst $odlomak \n"; Ispitavanje statusa i atributa datoteka je u mnogo sluajeva korisno i poeljno. Time se mogu na vrijeme utvrditi nepravilnosti koje bi mogle nastati u programu. Ispitivanje datoteka izvodi se operatorom - iza kojeg slijedi oznaka atributa koji se ospituje. Neki od ispitnih operatora su: -r # readable -w # datoteka za pisanje? -x # izvrna datoteka? -e # datoteka postoji? -z # prazna datoteka? -d # direktorij? -l # simboliki link? -T # tekstualna datoteka? -B # binarna datoteka? Svaki od operatora vraa TRUE/FALSE vrijednost. Primjer: if (-e INDEX) { print "Datoteka postoji!"; } else { die("Datoteka ne postoji!"); } U primjeru se ispituje postojanje datoteke. Ukoliko ona ne postoji, uvjetni izraz vratiti e vrijednost FALSE ime e se pokrenuti die() operator koji e ugasiti Perl program.

1117/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

SISTEMSKI POZIVI
Sistemski pozivi u Perl-u usko su povezani s terminologijom UNIX operativnog sustava. Svi operatori omoguuju pozivanje odreenih procesa iz ljuske. Operatori se dijele na dvije glavne skupine: operatori datotenog sustava i operatori procesa. Mi smo operatore samo ukratko naveli operatore, a njihova objanjenja mogu se proitati na perlfaq8 i perlfunc man stranicama.

Operatori datotenog sustava


Operatori za upravljanje datotekama i direktorijima pozivima su vrlo slini onima koji se pozivaju u ljusci. Najei operatori su: chdir ("/put/ . . . /direktorij"); # promjena aktivnog sirektorija opendir (POKAZIVAC, "/path/ . . . /directory"); # postavljanje pokazivaa za direktorij closedir(POKAZIVAC); # zatvarenje direktorija readdir(POKAZIVAC); # vraa imena datoteka iz direktorija symlink("put", "IME_VEZE"); # stvaranje simbolike veze link("path/file", "IME_VEZE"); # stvaranje vrste veze (eng. hard link) unlink("IME_VEZE"); # brisanje veza na datoteku mkdir("ime_direktorija", mod); # stvaranje novog direktorija rmdir("ime_direktorija"); # brisanje direktorija chmod(mode, "ime_datoteke"); # promjena moda datoteka

1118/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Operatori procesa
Operatori procesa su vrlo moni po svojim mogunostima. Oni omoguuju izvedbe poput jednostavnih poziva drugih programa, te izvedbe vrlo sloenih procesa kao to je klijent/server mreni model. Mi smo spomenuli neke od najeih operatora procesa. Najjednostavniji sistemski operator je system(). On pokree novi proces, dijete Perl procesa. Ime novog procesa je sadrano unutar zagrada: system("pwd") Vrijednost koju vraa proces dijete na STDOUT, mogue je dobiti ako se poziv procesa izvede pomou unazadnih navodnika: $a = `pwd`; Pokretanje novog procesa moe se uiniti operatorom exec samo to se u tom sluaju automatsk gasi Perl proces: exec "pwd"; Najznaajniji operator kod baratanja procesima je zasigurno fork. On stvara klon Perl procesa koji ga je pozvao. Tako dva duplicirana procesa dijele jednake varijable (memoriju) i otvorene datoteke. Procesi se jedino razlikuju po vrijednosti varijable koju vraa fork. Proces vraa 0 za dijete i 1 za roditelja.

1119/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

ZAKLJUAK
Perl ( eng. Practical Extraction and Report Language ) je interpretorski programski jezik ope namjene prenosiv za sve OS (UNIX, Linux, Windows, Mac,...). Perl je besplatan, "open-source" jezik, proiriv sa novim funkcijama i mogunostima koje njegovi korisnici sami naprave (modularan je). Podrava proceduralno i objektno programiranje. Posebnost Perl-a je u tome to u sebi objedinjuje mogunosti C, sed i awk programskih jezika, te UNIX-ovih ljuski. Perl nudi aplikacije za programiranje i administraciju, datoteno programiranje, znanstvene programe, grafiko programiranje, GUI alate. U novije vrijeme Perl se zbog svoje opsenosti poinje sve vie izbjegavati kod mlaih webmastera, te polagano, unato mogunostima koje se preklapaju sa drugim serverskim jezicima, gubi utrku na webu. Perl je jezik bogat mnogim mogunostima. Mi smo obradili samo neke od tih njegovih mogunosti i samo neka njegova svojstva. Za dublje spoznaje i vea znanja o Perlu treba posvetiti puno vie vremena, kojeg mi u toj mjeri nismo imali. Sve o Perlu moe se nai u knjigama koje obrauju tu temu ili na WEB stranicama dostupnima na Internetu ( najlake je utipkati rije Perl u jedna od serach engine-a ) koje sadre mnoge primjere, ilustracije i literaturu. Moto Perl-a je "there's more than one way to do it" -"uvijek postoji vie naina" (ili skraeno TMTOWTDI popularno zvano "tim toady").

1120/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

DODACI
U dodacima smo priloili izgled instalacije i primjere nekih od mnogobrojnih skripti.

Dodatak A: Izgled instalacije Perl-a

1121/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

1122/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

1123/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

1124/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Dodatak B: Izgled Perl Package Mnager-a

1125/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Dodatak C: Skripta naeg pozdrava

1126/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Dodatak D: Primjer povezivanja Perl-a i PostgreSQL-a


#!/usr/bin/perl use Pg; # niz izraza: opcija=vrijednost opcija1=vrijednost1 .... # opcije: host, port, options, tty, dbname, user, password $conn = Pg::connectdb("dbname=fakultet"); # Postavljanje upita $sql = "SELECT ime,prezime FROM student WHERE indeks=F-15973"; $result = $conn->exec($sql); while (@row = $result->fetchrow) { $ime = $row[0]; $prezime = $row[1]; print "ime: $ime, prezime: $prezime\n"; } Izvoenje: racunalo> ./primjer.pl ime: Tamara, prezime: Krutman

1127/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Dodatak E: Instalacija Link it skripte


Link it skripta dozvoljava posjetiocima neke Web stranice da dodaju svoju Web stranicu na tu stranicu koju posjeuju. Za instalaciju skripte potrebno je editirati linkit.cgi i varijable koje odgovoraraju potrebama servera. Zatim upload-ati linkit.cgi, links.htm, header.htm i footer.htm na server upotrebljavajui ASCII prijenos i chmod-ati file-ove ovim redom: linkit.cgi 755 links.htm - 777 header.htm 644 footer.htm - 644 Nakon toga treba pokrenuti skriptu za dodavanje linka da budemo sigurni da li radi. Ukoliko ne radi treba provjeriti da li su varijable tone, da li smo upload-ali pomou ASCII transfera i da li smo chmod-ali file-ove kako treba. #!/usr/bin/perl # Variables # # Url location of the script (http://www.yourserver.com/cgi-bin/linkit.cgi) $me = "http://www.free-scripts.net/cgi-local/linkit.cgi"; # Absolute location of the html file (/home/yourname/public_html/links.htm $ab_html = "/www/docs/free-scripts/links/links.htm"; # Absolute location of the header file (/home/yourname/public_html/header.htm $header = "/www/docs/free-scripts/links/header.htm"; # Absolute location of the footer file (/home/yourname/public_html/footer.htm $footer = "/www/docs/free-scripts/links/footer.htm"; # DO NOT EDIT BEYOND THIS POINT # print "Content-type: text/html\n\n"; read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/<([^>]|\n)*>//g;
1128/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

$value =~ s/<//g; $value =~ s/>//g; $FORM{$name} = $value; } if ($ENV{'QUERY_STRING'} =~ /Add/) { &Add; } elsif ($ENV{'QUERY_STRING'} =~ /Display/) { &Display; } elsif ($ENV{'QUERY_STRING'} =~ /Main/) { &Main; } else { &Display; } # These are the Header and Footer subs # sub Header { open FILE, "$header" or print "[ERROR: Cannot open file]"; while (<FILE>) { print "$_"; } close(FILE); } sub Footer { &Sig; open FILE, "$footer" or print "[ERROR: Cannot open file]"; while (<FILE>) { print "$_"; } close(FILE); } # End of Header and Footer subs # # This is the main part of the program that lets the user enter a link # sub Main { &Header; print " Please feel free to add your own link. Just fill out the following form or <a href=\"$me\">click here</a> to view the links currently in the database.<br><br> <form action=\"$me?Add\" method=\"post\">

1129/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Site Name: <input type=\"text\" name=\"site_name\" size=\"25\"><br> URL: <input type=\"text\" name=\"site_url\" value=\"http://\" size=\"25\"><br> Description:<br><textarea wrap=\"physical\"></textarea><br> <input type=\"submit\" value=\"Send\"><br> </form>\n"; &Footer; } # End of Main Sub # # This is the part of the script that adds the link to the database # sub Add { &Header; if($FORM{'site_name'} eq "" || $FORM{'site_url'} eq "http://" || $FORM{'site_url'} eq "" || $FORM{'site_desc'} eq "") { print "The following were left blank:"; print "<ul>\n"; if($FORM{'site_name'} eq "") { print "<li>Site Name\n"; } if($FORM{'site_url'} eq "http://") { print "<li>URL\n"; } if($FORM{'site_url'} eq "") { print "<li>URL\n"; } if($FORM{'site_desc'} eq "") { print "<li>Description\n"; } print "</ul>\n"; print "Please use your browsers back button and fill out the rest of the forms.\n"; print "<br><br>\n"; name=\"site_desc\" rows=\"5\" cols=\"50\"

1130/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

} else { open FILE, ">>$ab_html" or print "[ERROR: Cannot open file]"; print FILE "<center>\n"; print FILE "<table border=\"0\" width=\"450\" cellspacing=\"0\" cellpadding=\"0\">\n"; print FILE "<td width=\"450\" bgcolor=\"#CCCCCC\"><font face=\"Arial,Helvetica\" size=\"2\"><b><a href=\"$FORM{'site_url'}\">$FORM{'site_name'}</a></b></td><tr>\n"; print FILE "<td width=\"450\" bgcolor=\"#EEEEEE\"><font face=\"Arial,Helvetica\" size=\"2\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$FORM{'site_desc'}</td>\n"; print FILE "</table>\n"; print FILE "</center><br>\n"; print FILE "<!-- $ENV{'REMOTE_HOST'} -->\n\n"; close(FILE); print "Your entry has been added to the database. <a href=\"$me\">Click here</a> to view the links page.\n"; } &Footer; } # End of Add Sub # # This is the sub that displays the links # sub Display { &Header; print "<a href=\"$me?Main\">Click here</a> to add your own link.<br><br>\n"; open FILE, "$ab_html" or print "[ERROR: Cannot open file]"; while (<FILE>) { print "$_"; } close(FILE); &Footer; } # End of Display sub #

1131/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

# This is the sub that displays the signature trademark # sub Sig { print " <br> <center> <table border=\"0\" cellspacing=\"1\" cellpadding=\"3\"> <td bgcolor=\"E4E4E4\"><center><font face=\"Arial,Helvetica\" It</a> v1.3<br>Free size=\"1\"><a from <a href=\"http://www.free-scripts.net/scripts\">Link </table> </center>\n"; } # End of Sig sub #

href=\"http://www.free-scripts.net/scripts\">Free-Scripts.Net</a></font></center></td>

1132/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Dodatak F: Instalacija skripte brojaa


Skripta brojaa rauna broj korisnika koji su pristupili stranicu. #!/usr/local/bin/perl #Change Variables $count = '/mnt/web/guide/aestheticsurgerycenter/test/count.dat'; $base_url = 'http://www.aestheticsurgerycenter.com/test/'; $your_ip = "0.0.0.0"; $gif = '.gif'; if ($ENV{'REMOTE_ADDR'} eq $your_ip) { } else { print "Content-type: text/html\n\n"; open (COUNT, "$count"); $counter = <COUNT>; close (COUNT); open (COUNT, ">$count"); $counter += 1; print COUNT "$counter"; @indivual = split(//, $counter); foreach $number (@indivual) { $output = "<img src=\"$base_url$number$gif\" alt=\"$CNum\">"; print $output; } close (COUNT); }

1133/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Dodatak G: Instalacije cgi skripte koja pamti svoje stanje kad je pozvana
Ova skripta kreira obrazac koji pamti svoje stanje svaki put kad je pozvana.
#!/usr/local/bin/perl use CGI qw(:standard); print header; print start_html('A Simple Example'), h1('A Simple Example'), start_form, "What's your name? ",textfield('name'), p, "What's the combination?", p, checkbox_group(-name=>'words', -values=>['eenie','meenie','minie','moe'], -defaults=>['eenie','minie']), p, "What's your favorite color? ", popup_menu(-name=>'color', -values=>['red','green','blue','chartreuse']), p, submit, end_form, hr; if (param()) { print "Your name is",em(param('name')), p, "The keywords are: ",em(join(", ",param('words'))), p, "Your favorite color is ",em(param('color')), hr; }

1134/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb print end_html;

Programski alati na Unix raunalima

Dotatak H: Skripta koja izbacuje odgovor u novom prozoru


#!/usr/local/bin/perl use CGI; $query = new CGI; print $query->header; print $query->start_html('Popup Window'); if (!$query->param) {

1135/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb print "<H1>Ask your Question</H1>\n"; print $query->startform(-target=>'_new'); print "What's your name? ",$query->textfield('name'); print "<P>What's the combination?<P>", $query->checkbox_group(-name=>'words', -values=>['eenie','meenie','minie','moe'], -defaults=>['eenie','moe']); print "<P>What's your favorite color? ", $query->popup_menu(-name=>'color', -values=>['red','green','blue','chartreuse']), "<P>"; print $query->submit; print $query->endform; } else { print "<H1>And the Answer is...</H1>\n"; print "Your name is <EM>",$query->param(name),"</EM>\n";

Programski alati na Unix raunalima

print "<P>The keywords are: <EM>",join(", ",$query->param(words)),"</EM>\n"; print "<P>Your favorite color is <EM>",$query->param(color),"</EM>\n"; } print qq{<P><A HREF="cgi_docs.html">Go to the documentation</A>}; print $query->end_html;

Dodatak I: Primjer Gd skripta


Gd nam omoguuje kreiranje crtea koritenjem brojinim grafikim mogunostima.
use GD; # create a new image $im = new GD::Image(100,100); # allocate some colors $white = $im->colorAllocate(255,255,255); $black = $im->colorAllocate(0,0,0); $red = $im->colorAllocate(255,0,0); $blue = $im->colorAllocate(0,0,255); # make the background transparent and interlaced

1136/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb $im->transparent($white); $im->interlaced('true'); # Put a black frame around the picture $im->rectangle(0,0,99,99,$black); # Draw a blue oval $im->arc(50,50,95,75,0,360,$blue); # And fill it with red $im->fill(50,50,$red); # make sure we are writing to a binary stream binmode STDOUT; # Convert the image to PNG and print it on standard output print $im->png;

Programski alati na Unix raunalima

Ovako je rezultat skripte:

1137/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Ana Babi

PYTHON

1138/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

UVOD Povijest
Oko 1972. godine pojavio se jezik C, prvi jezk ope namjene. Sedamnaest godina kasnije Guido van Rossum, istraiva na CWI (Stichting Mathematisch Centrum) u Nizozemskoj, radi na projektima vezanima uz interpreterskim jezik ABC. Nezadovoljan nefleksibilnou tog i slinih programskih jezika i nedostatkom alata za automatiziranje dosadnih sistemskih problema, odluuje se razviti novi programski jezik. elio je programski jezik koji bi mu omoguio rjeavanje generalnih administratorskih zadaa brzo i fleksibilno, ali je istovremeno elio iskoristiti snagu sistemskih poziva Amoeba distribuiranog OS-a. I tako je, krajem 1989. godine, poeo razvijati programski jezik Python, koji je nazvao prema kultnoj BBC seriji Monty Python's letei cirkus. 1996. godine Van Rossum je napisao o nastanku Python-a: "Over six years ago, in December 1989, I was looking for a "hobby" programming project that would keep me occupied during the week around Christmas. My office ... would be closed, but I had a home computer, and not much else on my hands. I decided to write an interpreter for the new scripting language I had been thinking about lately: a descendant of ABC that would appeal to Unix/C hackers. I chose Python as a working title for the project, being in a slightly irreverent mood (and a big fan of Monty Python's Flying Circus)." (Introduction to Programming Python, by Mark Lutz, published by O'Reilly) Iako je u poetku zamislio jezik koji bi bio specifian samo za Amoeba OS, brzo je shvatio da mu je potreban jezik koji bi se mogao pokretati na svakoj platformi. 1991. godine u open source zajednicu je puten interpreter za novi programski jezik, Python, napisan u C-u. Zbog injenice da je Python open source aplikacija, danas se uspjeno moe vrtiti na gotovo svakoj platformi (Linux, Windows, Macintosh, Solaris, OS/2, Amiga, AROS, AS/400, BeOS, Palm OS, Acorn RISC OS, PlayStation, Sharp Zaurus, Pocket PC, ) Release Derived from Year Owner GPL compatible? 0.9.0 thru 1.2 n/a 1991-1995 CWI yes 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes 1.6 1.5.2 2000 CNRI no 2.0 1.6 2000 BeOpen.com no

1139/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Release 1.6.1 2.1 2.0.1 2.1.1 2.2 2.1.2 2.1.3 2.2.1 2.2.2 2.2.3 2.3 2.3.1 2.3.2 2.3.3 2.3.4

Derived from Year 1.6 2001 2.0+1.6.1 2001 2.0+1.6.1 2001 2.1+2.0.1 2001 2.1.1 2001 2.1.1 2002 2.1.2 2002 2.2 2002 2.2.1 2002 2.2.2 2002-2003 2.2.2 2002-2003 2.3 2002-2003 2.3.1 2003 2.3.2 2003 2.3.3 2004

Owner CNRI PSF PSF PSF PSF PSF PSF PSF PSF PSF PSF PSF PSF PSF PSF

GPL compatible? no no yes yes yes yes yes yes yes yes yes yes yes yes yes

Osnovna svojstva jezika Python


Python je interpreterski jezik, to znai da se program ne kompajlira tj. ne prevodi se u strojni kod procesora nego u poseban, tzv. Python binarni kod. (Python bytecode) kojeg pokree Python virtualna maina. Zato se programi vrlo jednostavno mogu prenositi sa stroja na stroj, dovoljno je da se kod kopira i pokrene. Naravno, pod uvjetom da na tom stroju postoji odgovarajui virtualni stroj. Zbog injenice da se Python kod interpretira, a ne izvodi izravno u strojnom jeziku optimiziranom za odgovarajui procesor, Python programi su sporiji od ekvivalentnih programa pisanih u drugim jezicima. Ali, kao i Java, i Python virtualni strojevi pruaju mogunost prevoena Python binarnog koda u matini izvedbeni kod koji je puno blii strojnom kodu i kao takav omoguava i bre izvoenje. Tako Python omoguava dobre perfomanse svojim programima, a u isto vrijeme zadrava snagu interpreterskih jezika. Python podrava proceduralno i objektno orijentirano programiranje. Kod proceduralnog programiranja program se rastavlja na niz manjih zadataka procedura koje su dovoljno jednostavne da bi se mogle izraziti pomou naredbi programskog jezika. U takvom nainu programiranja procedure se odvajaju od podataka koje obrauju. Za razliku od toga, u objektno orijentiranom programiranju, cilj je spajanje podataka i operacija nad njima u

1140/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

objekte. Programer koji e koristiti taj objekt jednostavno od objekta zatrai odreenu uslugu i ne zamara se razmiljajui o nainu na koji objekt funkcionira. Modularnost. Python je mogue koristiti na vie naina. Najee se kod rastavlja na vie manjih modula koji meusobno mogu "komunicirati". Moe se vrlo jednostavno iz jednog modula pozivati procedure ili koji koristiti objekte drugog modula.. to je jo vanije, pristup modulima je uvijek isti, bez obzira da li se radi o ve ugraenim modulima iz Pythonove standardne biblioteke ili o modulu koji ste napravili trenutak prije. Python-ova standardna biblioteka podrava regularne izraze, generiranje dokumentacije, threadove, baze podataka, web pretraivae, CGI, ftp, elektroniku potu, XML, HTML, WAV datoteke, kriptografiju, GUI (grafiko suelje) upotrebom Tk i jo mnogo toga. Isto tako, moduli se mogu pisati i u drugim jezicima, pa se mogu napisati u C-u, kompajlirati i preko Python suelja, koje je potpuno isto kao i kod Python modula, jednostavno koristiti. To omoguuje da se dijelovi koda koji predstavljaju usko grlo (vremenski su zahtjevni) ubrzaju i time znatno poboljaju cjelokupno izvravanje programa. Takav nain programiranja se podrazumijeva u jezicima kao to su C i C++, ali je iznimka meu skriptnim jezicima. U python-u je vrlo jednostavno otkriti pogreku u izvravanju programa. U sluaju pogreke u izvoenju programa, mogue je pristupiti stogu programa, "stack trace" e tono odrediti vrstu i mjesto greke (exception) to omoguuje vrlo lagano lociranje i ispravljanje pogreke u programu. Automatsko skupljanje smea. Curenje memorije ili prerano unitenje objekata u tradicionalnim jezicima je vrlo est uzrok "blokiranja" rada programa ili cijelog raunala. Python interpreter sam se brine da se oslobodi memorija koja vie nije potrebna mehanizam za sakupljanje smea (garbage collection) je ugraen u sustav i automatski se pokree po potrebi. Programeri tako ne moraju imati pod kontrolom gdje su rezervirali prostor za neki objekt i gdje e se taj prostor osloboditi, ve se mogu fokusirati na samo rjeavanje problema. S druge strane, kod automatskog skupljanja smea, sustav sam procjenjuje kada treba to sakupljanje zapoeti i nerijetko se to dogaa upravo onda ka program obavlja neku zahtjevnu operaciju. Zato se i kod ugraenog automatskog sustava za skupljanje smea treba esto paziti da ne novi objekti ne stvaraju neracionalno.

1141/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Usporedba s drugim programskim jezicima


Python se vrlo esto usporeuje s drugim programskim jezicima zbog injenice da podrava vie programskih paradigmi, sam Python je nastao kao kombinacija mnogih drugih programskih jezika, ukljuujui ABC, Modula-3, C, C++, Algol-68, SmallTalk, razne skriptne jezike. Ali, poto je Python interpreterski jezik, najvie je usporedbi sa Perl-om, Javom, Tcl-om i JavaScript-om. Perl, kao i Python, nudi snagu potpunog programskog jezika kao i pristup sistemskim pozivima. Najvea snaga Perl-a je u radu sa stringovima, Perl je najmoniji upravo u radu sa regularnim izrazima, filtriranju teksta i jo uvijek se najee koristi za pisanje CGI skripti. Problem Perl-a je u kompliciranoj sintaksi koju je ponekad vrlo teko itati, to dovodi do frustrirajue tekog uenja jezika i nerazumljivih programa. Python se vrlo esto, zbog podravanja objektno orijentiranog programiranja i sline sintakse, usporeuje sa Javom. Java, iako puno jednostavnija od C++-a, jo uvijek je kruta, posebno ako se eli napisati mali, brzi program. Python-ova jednostavnost omoguuje puno bre pisanje malih programa nego upotreba iste Jave. Veliki korak u odnosu Python-a i Jave je razvoj JPython-a, Python interpretera napisanog iskljuivo u Javi. Sada je mogue pokretati Python programe na strojevima na kojima se vrti samo Java virtualni stroj. Vrlo je jednostavno u JPython-u raditi s Java objektima, komunicirati s njima, koristiti Java biblioteke klasa, kao da je Java u Python bila integrirana od poetka razvoja jezika. Od jezika koji je najee usporeuju s Python-om najsliniji je JavaScript po svojoj sintaksi i po injenici da je objektno orijentiran. Programeri JavaScript-e vrlo brzo i bez problema prihvaaju Python. Python se, za razliku od JavaScripte, pokree izvan Web pretraivaa, a omoguava sistemske pozive i podrava vrlo jednostavno rjeavanje problema koji se tradicionalno obavljaju pomou shell skripta.

1142/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

POKRETANJE PYTHON PROGRAM-A Tri su naina pokretanja Python programa


Najjednostavniji je nain startanjem interpretera interaktivno. Pokree se iz komandne linije a kod se unosi liniju po liniju i izvrava. Dodatne opcije kada se interpreter pokree iz komande linije. -d -O -S -v -X -c cmd file provide debug output generate optimized bytecode (resulting in .pyo files) do not run import site to look for Python paths on startup verbose output (detailed trace on import statements) disable class-based built-in exceptions (just use strings); obsolete starting with version 1.6 run Python script sent in as cmd string run Python script from given file (see below)

Primjer (interaktivni interpreter iz komandne linije): $ python Python 2.4 (#4, Dec 10 2004, 19:19:57) [GCC 2.95.2 20000220 (Debian GNU/Linux)] on linux2 Type "copyright", "credits" or "license" for more information. IDLE 1.1 -- press F1 for help >>> print 'hello world' hello world >>> Drugi nain je pokretanje skripte napisane u Python-u. Interpreter se poziva zajedno sa skriptom. Veina skripta zavrava sa ekstenzijom .py. Vrlo je vano da se dobro izabere editor u kojem e se pisati program. Vie editora koji podravaju python sintaksu, meu njima su najpopularniji i najmoniji Vim i Emacs. Primjer (hello world skripta) #!/usr/bin/pyhon # Filename : hello_world.py print 'hello world' /usr/bin/pyhon oznaava puni put prema python interpreteru. Pokretanje interpretera sa skriptom: $ python hello_world.py

1143/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

hello world U Unix-u je mogue automatski pokrenuti interpreter bez da ga pokrenemo iz komadne linije. Jednostavno postavimo modove tako da skripta postane executable. $ chmod a+x hello_world.py $ ./hello_world.py hello world Trei nain pokretanja Python programa je koritenje grafikom suelja iz IDE (integrated development environment) okoline. IDLE je prvi Unix IDE za Python. Razvio ga je Guido van Rossum, prvi put za Python 1.5.2. IDLE je baziran na Tk-u, to zahtijeva da ima Tcl/Tk instaliran na stroju. Veine IDE suelja sadri i editor i interpreter.

Ispis/unos
Unos korisnika je vrlo jednostavno dobiti pomou raw_input() funkcije Primjer Unoenje teksta >>> ime = raw_input('Unesi ime: ') Unesi ime: ana >>> print 'Tvoje ime je:', ime Tvoje ime je: ana Primjer je samo za unos teksta. Kada elimo raditi s cijelim brojevima, unoeni tekst se mora konvertirati u integer pomou funkcije int() Primjer Ispis broja >>> broj = raw_input('unesi broj: ') unesi broj: 45 >>> print 'kvadrat unesenog broja je: %d' %int(broj)**2 kvadrat unesenog broja je: 2025 Isto kao i C, Python u naredbi print ima format specifikatore, koji poinju sa %, ima %d za integere, %s za stringove i %f za realne brojeve.

Komentari
Komentar zapoinje direktno iza znaka # i nastavlja se do kraja linije.

1144/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

TIPOVI PODATAKA
Postoje dva naina provjere tipa varijabli u programi. Za vrijeme kompajliranja programa (static typing) ili za vrijeme rada programa (dynamic typing). Python prodrava dynamic type to znai da nema deklaracija tipa varijabli ve da sam program za vrijeme rada odluuje koji e tip pridruiti kojoj varijabli. Takav nain koritenja varijabli je Dave Thomas (razvojna zajednica Ruby jezika) nazvao duck typing ("(referring to a value) if it walks like a duck, and quacks like a duck, then it is a duck."). U praksi, dinamiko deklariranje funkcionira tako da svaki program za vrijeme svog rada pridjeljuje varijablama tipove ovisno o tome koje su im vrijednosti pridruene (operator pridruivana u Python-u je =). Valjanost tih tipova se provjerava tek kada se te varijable koriste u operacijama u tom trenutku se i generiraju greke u sluaju upotrebe operatora koji nisu dozvoljeni nad tipovima varijabli koje su u izrazu. Meu jezicima koji podrava dinamiko deklariranje, Python je umjereno type-checked. Impilicitno pretvaranje je definirano za numerike tipove, npr. dozvoljeno je mnoiti complex broj i long integer bez eksplicitnog pretvaranja. Ali nema implicitnog pretvaranja izmeu numerikih tipova i stringova (za razliku od Perl-a, u Python se ne moe operaciji sa stringom pridruiti broj.) Ono to Python ima je ugraena funkcija eval() koja ita string kao moguu operaciju: >>> eval('5+6') 11 >>> eval('7*8') 56 Vrlo je vano je zapamtiti da je Python osjetljiv na velika i mala slova pa varijabla brojac nije jednaka varijabli Brojac.

1145/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Brojevi
Python podrava etiri tipa brojeva: integer, long integer (mogu biti prezentirani i oktalno i heksadecimalno), float (realni) i complex (kompleksni). Primjeri unosa: Int Long Float complex 0101 29979062458L 3.14159 6.23+1.5j 84 -84140l 4.2E-10 -1.23-875J -237 0x80 -0X92 0xDECADEDEADBEEFBADFEEDDEAL -90. 6.022e23 -1.609E-19 0+1j 9.80665-8.31441J -.0224+0j

Stringovi
String je u Python-u neprekidni niz karaktera izmeu navodnika (jednostrukih ili duplih). Evo nekoliko primjera koritenja operacija sa stringovima. >>> pystr = 'Python' >>> iscool = 'is cool!' >>> pystr[0] 'P' >>> pystr[2:5] 'tho' >>> iscool[:2] 'is' >>> iscool[3:] 'cool!' >>> iscool[-1] '!' >>> pystr + iscool 'Pythonis cool!' >>> pystr + ' ' + iscool 'Python is cool!' >>> pystr * 2 'PythonPython' U Python-u se uvijek moe doi do brze pomoi za koritenje neke funkcije ili naredbe. Jednostavno se u interpreter prompt-u napie help(naredba). Npr. za pomo u radu sa stringom: >>> help(str)

1146/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Operatori
Standardni operatori funkcioniraju u Python-u kao i u bilo kojem drugom programskom jeziku. + * / % ** Uz standardno zbrajanje, oduzimanje, mnoenje, cjelobrojno dijeljenje/ostatak cjelobrojnog dijeljenja Python nudi i operator za potenciranje **. Python podrava operatore poput *=, +=, -=, /=, ali ne podrava C-ovsko predinkrementiranje i postinkrementiranje. Isto tako, Python ima i standardne operator za usporeivanje. < <= > >= == != <> Za razliito postoje dva operatora != i <>. Preporua se koritenje operatora !=. Isto tako podrani su logiki operatori and, or i not. Upotrebljavajui logike operatore moemo stvarati izraze poput: >>> (2 False >>> (2 > 4) or (2 < 4) True >>> not (6.2 <= 6) True >>> 3 < 4 < 5 True < 4) and (2 == 4)

Zadnji izraz je u Python-u legalan, i zapravo je krai zapis ovoga. >>> (3 < 4) and (4 < 5) True

1147/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

KONTROLA TOKA PROGRAMA Naredba


Python implicitno pretpostavlja da fizika linija koda odgovara logikoj naredbi. Ako se eli staviti vie logikih naredbi u fiziku liniju odvaja ih se s toka-zarez. U praksi se takav nain pisanja koda izbjegava jer dovodi do nepreglednosti i neitljivosti t je u suprotnosti sa Python ideologijom.

Blokovi naredba
Blokovi naredba grupe naredbi koje se uvjetno izvode ili ije se izvoenje ponavlja (a ponaaju se poput jedne naredbe) grupiraju se pomou uvlaka, za razliku od C-a i C++ gdje se blokovi grupiraju pomou vitiastih zagrada. Vrlo je vano paziti na sva prazna mjesta jer Python-u je svako prazno mjesto ispred naredbe uvlaka. Prazni blok naredbi definira se kljunom rijeju pass.

If-elif-else
If naredba omoguuje grananje toka programa ovisno o tome da li je logiki izraz istinit ili laan. Ako je vrijednost izraza iza rijei if logika istina, izvodi se if_blok_naredbi, u protivnom se ispituje izraz iza elif, ako ni on nije toan izvodi se else_blok_naredbi. if logiki_izraz1: if_blok_naredbi elif logiki_izraz2: elif_blok_naredbi else: else_blok_naredbi Python nema switch-case naredbu. Svi mnogostruki izbori se rade pomou if-elif-else naredbe. Za razliku od C/C++-a to u Python-u nije mukutrpno upravo zbog njegove iste sintakse. Primjer Upotreba if-elif-else naredbe #!usr/bin/python # if_iga_pogadanja.py
1148/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

broj = 23 pogodi = int(raw_input('Unesi cijeli broj: ')) if pogodi == broj: #pocetak bloka print 'Pogodak!!!!' #kraj bloka elif pogodi < broj: print 'broj je veci.' else: print 'broj je manji.' print 'Kraj.'

While petlja
Prva od petlja kojom raspolae Python je while petlja. Ona se koristi za ponavljanje bloka naredbi. While_blok_naredbi e se izvravati dok god je logiki uvjet iza while naredbe istinit. Blok naredbi iza else e se izvriti na kraju petlje. while logiki_izraz: while_blok_naredbi else: else_blok_naredbi else u while petlji redundantan jer zapravo se bilo koja naredba koja dolazi iza while petlje izvrava nakon to while petlja zavri. Primjer . Upotreba while petlje #!usr/bin/python # while_igra_pogadanja.py broj = 23 stop = False while not stop: pogodi = int(raw_input('Unesi cijeli broj: ')) if pogodi == broj: #pocetak bloka print 'Pogodak!!!!' stop = True #kraj bloka elif pogodi < broj: print 'broj je veci.' else: print 'broj je manji.'
1149/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

else: print 'While je gotov.' print 'Kraj.'

For petlja
Druga petlja kojom raspolae Python, for petlja je vie slina foreach petlji u shell skriptama nego tradicionalnoj for petlji u veini programskih jezika koja funkcionira kao broja. Petlja uzima kao ulaz niz elemenata i obraduje svaki element u bloku naredbi. Niz elemenata moe biti lista, tuple ili string, isto tako to moe biti i niz stringova ili brojeva. Primjer Upotreba for petlje s nizom brojeva
#!usr/bin/python #for.py for i in range(1,5): print i

1 2 3 4 Primjer Upotreba for petlje s nizom stringova #!usr/bin/python #for_string.py print 'moji predmeti pasa su:' for predmet in ['pin','unix','nwp','mat 2'] print predmet, print $ python for_string.py moji predmeti su: pin unix nwp mat 2 Predmeti su ispisani svi u istom redu zbor zareza u printu koji oznaava da se sljedei ispis nastavlja u istom redu.

break i continue
1150/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Break naredbom se prekida izvoenje petlje, bez obzira na logiki izraz u petlji koji jo uvijek moe biti istinit. Continue naredba uzrokuje skok programa na kraj petlje, ali se petlja nastavlja na sljedeu iteraciju. Primjer Upotreba break i continue naredbe #!/usr/bin/python #break_continue.py while True: s = raw_input('Unesi neto(izlaz): ') if s == 'izlaz': break if len(s) < 3: continue print 'dovoljna duzina' print 'Kraj' $ python break_continue.py Unesi neto(izlaz): a Unesi neto(izlaz): 45 Unesi neto(izlaz): 123 dovoljna duzina Unesi neto(izlaz): izaz dovoljna duzina Unesi neto(izlaz): izlaz Kraj

1151/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

FUNKCIJE Deklaracija i koritenje funkcija


Ponavljani postupak, blok naredbi koji se esto koristi, stavlja se u jednu zasebnu cjelinu, funkciju i svaki put kad zatreba pokree pozivom te funkcije. Onom tko poziva funkciju nije vano to u njoj pie, jedino je vano ono to funkcija prima (argumenti) i ono to funkcija vraa. Primjer Prva funkcija #!usr/bin/python #prva_funkcija.py #definiranje funkcije nadiMax sa dva argumenta a i b def nadiMax(a,b): if a > b: return a else: return b #poziv funkcije print nadiMax(4,7), 'je najveci' x=-3 y=-6 print nadiMax(x,y),'je_najveci' $ python prva_funkcija.py 7 je najveci -3 je najveci Odmah nakon return naredbe vraa se tamo od kud je funkcija pozvana. Svaka funkcija implicitno sadri return naredbu. Ako uz return naredbu nita nije navedeno funkcija e vratiti None. None je specijalna vrijednost koja predstavlja ne postojanje vrijednosti. Kada varijabla nema vrijednosti, ima vrijednost None.

1152/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Lokalne i globalne varijable


Pojedina funkcija u svojem radu moe za realizaciju eljenog algoritma trebati niz pomonih varijabli (objekata) #!usr/bin/python #funkcija_lokalna.py def funkcija(x): print 'Lokalna varijabla x je',x x=2 print 'Lokalna varijabla x je',x x=50 funkcija(x) print 'x je',x $ python funkcija_lokalna.py Lokalna varijabla x je 50 Lokalna varijabla x je 2 x je 50 Python podrava i globalne objekte. Ako se eli u funkciji koristi varijabla definirana izvan nje koristi se global. #!usr/bin/python #funkcija_globalna.py def funkcija(): global x print 'x prije promjene je',x x=2 print 'x poslije promjene je',x x=50 funkcija() print 'x je',x $ python funkcija_globalna.py x prije promjene je 50 x poslije promjene je 2 x je 2

1153/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Podrazumijevani argumenti
U sluaju da se neke funkcije pozivaju vrlo esto sa istim vrijednostima mogu se definirati podrazumijevane vrijednosti argumenata funkcije. Argumenti s podrazumjevanom vrijednou moraju se nalaziti na kraju liste argumenata. Isto tako umjesto pozicije u pozivu funkcije vrijednosti se mogu vezati uz neku odreenu varijablu. #!usr/bin/python #default_argumenti.py def funkcija(a,b=5,c=10): print 'a je',a,',b je',b,', c je',c #dozvoljeni pozivi funkcija(3,7) funkcija(25,c=24) funkcija(c=50,a=100) $ python default_argumenti.py a je 3 ,b je 7 , c je 10 a je 25 ,b je 5 , c je 24 a je 100 ,b je 5 , c je 50

1154/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

PYTHON MODULI
Osnovna namjera modula je omoguiti efikasnije programiranje. Moduli su dokumenti koji sadre definicije i implementacije funkcija. Tako se onda mogu grupirati funkcije u module i koristiti iz svakog python programa. Te funkcije se mogu pozivati iz bilo koje programa tako da se moduli "importaju". Modul je zapravo python program koji sadri funkcije i varijable koje je pisac modula definirao. Python nudi svoju standardnu biblioteku, koja dolazi sa svakom instalacijom interpretera, u obliku modula. Sadri vrlo veliku koliinu korisnih modula za rad sa gotovo svime to se moe zamisliti. Veina funkcija za rad sa sistemom dolazi u dva modula: sys (koji podrava rad sa Python interpreterom) i os (koji podrava rad sa operacijskim sustavom na kojem se Python interpreter vrti).

sys
Primjer Upotreba sys.argv liste (sadri argumente komandne linije) #!/usr/bin/python # argv.py import sys # Funkcija koja ispisuje fajl na standardni izlaz def readfile(filename): f = file(filename) while True: line = f.readline() if len(line) == 0: break print line, f.close() #glavni program if len(sys.argv) < 2: print 'nema argumenta' sys.exit() if sys.argv[1].startswith('--'): option = sys.argv[1][2:] #dohvaca prvi argument i kopira string osim prva dva znaka if option == 'verzija': print 'Verzija 1.00' elif option == 'help': print 'Ovo je help. Ovaj program ispisuje dokument na standardni izlaz' print 'opcije programa ukljucuju' print '--verzija - ispisuje verziju' print '--help - ispisuje pomoc i izlazi'

1155/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

else: for filename in sys.argv[1:]: readfile(filename) Model se ukljuuje koristei import naredbu. U ovom primjeru importali smo sys modul. U trenutku kad Python interpreter doe do linije u kojoj pie import sys trai dokument sys.py u nekom od direktorija koji su u path-u. Ako nae dokument, naredbe u glavnom bloku tog modula se izvravaju i funkcije modula se nakon toga mogu pozivati iz programa.

os
Primjer Izlistavanje sadraja direktorija
>>> for line in os.popen('ls /B').readlines( print line[:-1] ):

Primjer (backup dokumenata i direktorija) #!/usr/bin/python # backup_version.py import os, time # dokumenti i direktoriji za koje se radi backup izvor = ['/home/g2swaroop/all', '/home/g2swaroop/bin'] # odredisni direktorij odr_dir = '/mnt/d/backup/' # datum stvara poddirektorij u glavnom odredisnom direktorju danas = odr_dir + time.strftime('%Y%m%d') # The time - the name of the zip archive sad = time.strftime('%H%M%S') # komenat korisnika komentar = raw_input('Enter a comment --> ') if len(komentar) == 0: # da li je komentar unesen # ime zip dokumenta odr = danas + os.sep + sad + '.zip' else: odr = danas + os.sep + sad + '_' + \ komentar.replace(' ', '_') + '.zip' # ako nema poddirektorija, kreiraj ga if not os.path.exists(danas): os.mkdir(danas) print 'Uspjesno je kreiran direktorij ', danas # zip koji se pokrece zip_naredba = 'zip -qr %s %s' % (odr, ' '.join(izvor)) # pokreni backup if os.system(zip_naredba) == 0:

1156/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

print 'Uspjesni backup u', odr else: print 'Stvaranje backupa je propalo.'

socket
Da se stvori veza izmeu maina, Python programi importaju socket modul, kreiraju socket objekt, i pozivaju metode tog objekta da otvore vezu i alju i primaju podatke. Metode socketa se direktno mapiraju na socket pozive u C biblioteci. Sljedeci primjer eka vezu na socketu, i kroz socket vraa ono to je primio, dodajui 'Echo=>' ispred stringa. Primjer Socket na server from socket import * myHost = '' myPort = 50007 # ukljuci modul socket # server, '' znaci localni host # slusaj na slobodnom portu

sockobj = socket(AF_INET, SOCK_STREAM) # napravi TCP socket objekt sockobj.bind((myHost, myPort)) # postavi ga na port sockobj.listen(5) # slusaj, dozvoli 5 konekcija # cekanju while 1: # slusaj dok traje proces connection, address = sockobj.accept() # cekaj na sljedecu konekciju print 'Server connected by', address # konekcija je novi socket while 1: data = connection.recv(1024) # citaj sljedecu liniju na klijentu if not data: break connection.send('Echo=>' + data) # posalji odgovor klijentu connection.close() Na klijentskoj strani, upotrebljavaju se socketi pomou kojih se alju podaci na server, i ispisuje odgovor servera; 'localhost' znai da se klijent i server vrte na istoj maini to nam omoguava da testiramo skriptu. Za testiranje preko interneta: pokreni server na drugoj maini, i postavi serverHost ili argv[1] na IP adresu te maine. Primjer socket na klijentu import sys from socket import * serverHost = 'localhost' serverPort = 50007

# server ime # slobodni port koji koristi server # tekst koji se salje na server

message = ['Hello network world']

1157/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

if len(sys.argv) > 1: serverHost = sys.argv[1] if len(sys.argv) > 2: message = sys.argv[2:]

# ili server iz prvog argumenta # ili iz drugog argumenta komandne linije # poruka za svaki argument

sockobj = socket(AF_INET, SOCK_STREAM) # napravi TCP/IP socket objekt # spoji se na server i port servera sockobj.connect((serverHost, serverPort)) for line in message: sockobj.send(line) # posalji preko socketa liniju data = sockobj.recv(1024) # primi liniju od servera preko socketa print 'Client received:', `data` sockobj.close() # zatvori socket, server prima eof

Poto je importanje modula vremenski zahtjevno Python optimizira modul i stvara Python binarni kod sa ekstenzijom pyc. Taj optimizirani Python-ov binarni kod ne ovisi o platformi na kojoj se vrti i moe se koristiti i iz drugih programa. Svaki modul ima ime koje se moe dobiti sa naredbom __name__ , koje je postavljen na __main__ kada se modul poziva samostalno, to se moe iskoristit ako se eli izbjegnuti pokretanje nekog dijela glavnog programa u sluaju da je pozvan kao modul. if __name__=='__main__': print 'samo ako se sam pokrecem' print 'a ne kao modul iz drugog programa'

math i random
>>> import math >>> math.cos(math.pi / 4.0) 0.70710678118654757 >>> math.log(1024, 2) 10.0 >>> import random >>> random.choice(['apple', 'pear', 'banana']) 'apple' >>> random.sample(xrange(100), 10) # sampling without replacement [30, 83, 16, 4, 8, 81, 41, 50, 18, 33] >>> random.random() # random float 0.17970987693706186 >>> random.randrange(6) # random integer chosen from range(6) 4

1158/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Korisniki moduli
Svaki Python program je ujedno i modul. Tako da su svi primjeri u seminaru do sada moduli. Primjer Moj prvi modul #name.py if __name__=='__main__': print 'samo ako se sam pokrecem' verzija='1.01' def funkcija(a,b): return (a*b) #moj_modul_primjer.py import name print name.verzija print name.funkcija(4,7) $ python moj_modul_primjer.py 1.01 28 ili se moe eksplicitno navesti koje se funkcije importaju. Primjer Moj drugi modul #moj_modul_primjer1.py from name import funkcija print funkcija(4,7) $ python moj_modul_primjer1.py 28 Funkcija dir() lista sve funkcije i varijable ukljuene u modul. >>> import name >>> dir(name) ['__builtins__', '__doc__', '__file__', '__name__', 'funkcija', 'verzija']

1159/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Python

Kada u programu postoje dijelovi koda koji predugo traju i usporavaju rad programa python omoguava koritenje modula napisani i kompajliranih u C-u, to uvelike moe ubrzati kritine dijelove koda. Primjer Hello.c /* Jednostavan C modul za Python, "hello" */ #include <Python.h> #include <string.h> /* module funkcija */ static PyObject * /* vraa objekt */ message(PyObject *self, PyObject *args) /* self neiskoriten u modulu */ { /* args poziva iz Pythona */ char *fromPython, result[64]; /* pretvori Python -> C */ if (! PyArg_Parse(args, "(s)", &fromPython)) /* null=exception */ return NULL; else { strcpy(result, "Hello, "); /* dodaje string poslan iz Python-a */ strcat(result, fromPython); /* pretvaranje Python -> c */ return Py_BuildValue("s", result); } } /* registracijska tablica */ static struct PyMethodDef hello_methods[] = { /* ime metode, pointer na funkciju, uvijek-tuple */ {"message", message, 1}, {NULL, NULL} }; , /* inicijalizacija modula */ /* poziva se na prvi import */ void inithello( ) { /* ime je vano jedino ako se dinamino uitava u Python */ (void) Py_InitModule("hello", hello_methods); }

1160/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Napravite makefile #makefile.hello PY = $(DIR_PYTHON_HEADER) hello.so: hello.c gcc hello.c -g -I$(PY)/Include -I$(PY) -fpic -shared -o hello.so clean: rm -f hello.so core $ make f makefile.hello $ Python >>> import hello >>> hello.message('svijet') 'Hello, svijet' >>> hello.message('Ana') 'Hello, Ana'

# import C modula # poziv C funkcije

C funkcije izgledaju i koriste se iz Python-a kao da su napisane u njemu. Vrlo je malo razlika izmeu C modula hello i Python modula osim po imenu (ne zavrava na .py ili .pyc). C moduli ak i odgovaraju na dir() funkciju.
>>> dir(hello) ['__doc__', '__file__', '__name__', 'message'] >>> hello.__name__, hello.__file__ ('hello', './hello.so') >>> hello.message # C funkcijski objekt # C modul atributi

1161/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

STRUKTURE PODATAKA
Strukture podataka slue spremanju povezanih podataka u kolekciju. Tri su ugraene strukture podataka u Python-u lista, tuple i rjenik.

Lista
Lista je struktura podataka koja sadri ureenu kolekciju, tj. u listu moe dodavati niz objekata koji su meusobno povezani. U listu moe dodavati, iz nje brisati ili ju pretraivati. #!usr/bin/python # lista.py #Ovo je moja lista imena imena=['tomas','marko','mario','gorancic','tanja'] print 'U list je',len(imena),'imena' print 'imena:', for ime in imena: print ime, print '\ndodavanje amelie' imena.append('amelia') print 'moja imena su sada',imena imena.sort() print 'sortirana imena su,',imena print 'prvo ime je',imena[0] brisano=imena[0] del imena[0] print 'obrisano je',brisano print 'moja imena su sada',imena $ python lista.py U list je 5 imena imena: tomas marko mario gorancic tanja dodavanje amelie moja imena su sada ['tomas', 'marko', 'mario', 'gorancic', 'tanja', 'amelia'] sortirana imena su, ['amelia', 'gorancic', 'mario', 'marko', 'tanja', 'tomas'] prvo ime je amelia obrisano je amelia moja imena su sada ['gorancic', 'mario', 'marko', 'tanja', 'tomas'] Jo nekoliko metoda liste: append(x) dodaje na kraj liste insert(i,x) dodaje element x na poziciju i
1162/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

remove(x) brie prvi element iz liste pop(i) - brie element na poziciji i, i vraa ga index(x) vraa indeks prvog elementa u listi s vrijednou x count(x) brojac pojavljivanja elementa x u listi sort() sortira elemente u listi reverse() okrece redosljed elemenata u listi

Tuple
Tuple ima istu strukturu kao i lista, s tom razlikom da se elementi u tuple ne mogu mijenjati. Koriste se kada je sigurno da se lista objekata u programu nee mijenjati. #!/usr/bin/python # tuple.py zoo = ('vuk','slon','lisica') print 'Broj zivotinja je',len(zoo) novi_zoo = ('zebra','zeba',zoo) print novi_zoo print novi_zoo[2] print novi_zoo[2][2] $ python tuple.py Broj zivotinja je 3 ('zebra', 'zeba', ('vuk', 'slon', 'lisica')) ('vuk', 'slon', 'lisica') lisica

Rjenik
Rjenik je kao telefonski imenik gdje se moe nai broj osoba znajui njihovo ime. Svakom objektu u rjeniku pridruuje se klju sa vrijednostima. Klju mora biti jedinstven ne moe se nai prava osoba ako ih ima vie sa istim kljuem. Za kljueve se moe koristiti samo nepromjenjive objekte poput stringova, dok se za vrijednosti moe koristiti sve. #!/usr/bin/python # dict.py tel={'mario':'3245-543', 'Tomas':'4324-323', 'Zoki':'4324-432' } print 'telefon Tomas-a je %s' % tel['Tomas'] tel['Hrvoje']='4323-112'

1163/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

del tel['Tomas'] print '%d je ljudi u imeniku.' % len(tel) for ime,telefon in tel.items(): print 'ime %s - tel %s' %(ime,telefon) if tel.has_key('Hrvoje'): print 'Hrvojev telefon je %s' %tel['Hrvoje'] $ python dict.py telefon Tomas-a je 4324-323 3 je ljudi u imeniku. ime mario - tel 3245-543 ime Zoki - tel 4324-432 ime Hrvoje - tel 4323-112 Hrvojev telefon je 4323-112

1164/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

OBJEKTNO ORIJENTIRANO PROGRAMIRANJE


Za razliku od proceduralnog programiranja koje je orijentirano na funkcije, objektno orijentirano programiranje je orijentirano na objekte, strukture koje kombiniraju podatke sa funkcionalnou. U Python programskom jeziku sve je objekt. To ukljuuje i funkcije i sve ugraene tipove podataka pa ak i integer. Metode klada se razlikuju od obinih funkcija jedino po tome da imaju posebnu varijablu imena self ta varijabla odnosi se upravo na objekt koji sadri te metode. Self varijabla je ekvivalenta this pokazivau u C++-u. U klasi se moe definirati specijalna metoda imena __init__ koja e se pokrenuti odmah nakon to se objekt stvori. Koristi se za inicijaliziranje poetnih vrijednosti ako je potrebno. Odgovara konstruktoru u C++-u. Postoji jo specijalnih metoda: __del__ (self) __str__(self) __lt__(self,other) __getitem__(self,key) __len__(self) poziva se u prije nego to se objekt uniti (destruktor) poziva se kada koristimo print sa objektom ili kada se upotrebljava str() Poziva se kada se koristi operator <. Postoje metode za sve operatore (+,>,) Poziva se kada se koristi operator [] x[key] Poziva se kada se built-in funkcija len() koristi za objekt

Unutar objekata postoje dva tipa varijabli varijable klase i varijable objekta. Razlika izmeu tih dviju vrsta je u vlasnitvu pitanje je tko je vlasnik tih varijabli objekt ili klasa? Varijable klase se dijele izmeu svih objekata (instanci) klase. Varijable objekta su specifine za pojedinani objekt i ne dijele se izmeu objekata. #!/usr/bin/python # objvar.py class Osoba: populacija=0 def __init__(self,ime): 'Inicijalizacija osobe.' self.ime = ime print('inicijalizacija %s') %self.ime

1165/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

'kada je osoba kreirana populacija se poveca' Osoba.populacija += 1 def ispisImena(self): print 'moje ime je %s' %self.ime def kolikoIma(self): #uvijek je barem jedna if Osoba.populacija ==1: print 'jedina sam osoba ovdje' else: print 'ima %s ljudi.' %Osoba.populacija zagor = Osoba('Zagor') zagor.ispisImena() zagor.kolikoIma() petro = Osoba('Petro') petro.ispisImena() petro.kolikoIma() marija = Osoba('Marija') marija.ispisImena() marija.kolikoIma() $ python objvar.py inicijalizacija Zagor moje ime je Zagor jedina sam osoba ovdje inicijalizacija Petro moje ime je Petro ima 2 ljudi. inicijalizacija Marija moje ime je Marija ima 3 ljudi. U python objektnom programiranju svi lanovi klase (ukljuujui i podatke) su public, i sve metode su virtualne. Postoji iznimka: ako se na poetku imena varijabla koristi __privatevar Python takvu varijablu pretvara u privatnu.

Python podrava nasljeivanje.


#!/usr/bin/python # nasljedivanje.py class ClanSkole: 'Bilo koji clan skole' def __init__(self, ime,godine): self.ime = ime

1166/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

self.godine = godine print 'inicijalizirani clan je %s' %self.ime def ispis(self): print 'Ime: %s, Godine:%s' %(self.ime,self.godine) class Ucitelj(ClanSkole): 'Svi ucitelji' def __init__(self,ime,godine,placa): ClanSkole.__init__(self,ime,godine) self.placa = placa print 'inicijaliziran ucitelj %s' %self.ime def ispis(self): ClanSkole.ispis(self) print 'Placa je %s' %self.placa class Ucenik(ClanSkole): 'svi studenti' def __init__(self,ime,godine,ocjene): ClanSkole.__init__(self,ime,godine) self.ocjene = ocjene print 'inicijaliziran ucenik %s' %self.ime def ispis(self): ClanSkole.ispis(self) print 'Ocjene su %s' %self.ocjene u = Ucitelj('Gosp. Grahorac',56,232321) uc = Ucenik('Mario',19,84) print clanovi=[u,uc] for clan in clanovi: clan.ispis() #radi i za ucenike i za ucitelje $ python nasljedivanje.py inicijalizirani clan je Gosp. Grahorac inicijaliziran ucitelj Gosp. Grahorac inicijalizirani clan je Mario inicijaliziran ucenik Mario Ime: Gosp. Grahorac, Godine:56 Placa je 232321 Ime: Mario, Godine:19 Ocjene su 84

1167/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

RAD S TEKSTUALNIM DATOTEKAMA


Mogunost kreiranja, itanja i ispisivanja tekstualnih datoteka je vrlo vaan dio mnogih programa.

Datoteke
Datoteke se mogu otvarati za itanje ili pisanje tako da se prvo kreira objekt tipa file. Tada se koriste read, readline, ili write metode file objekta da se ita ili pie u datoteku ovisno o tome u kojem je modu otvorena datoteka. Nakon zavretka rada s datotekom metodom close se ona zatvara. Primjer Tekstualna datoteka #!/usr/bin/python # fileobj.py tekst='''\ Ovo je prva linija tekst. ovo je druga linija teksta. Ovo je treca linija teksta. ''' f = file('tekst.txt','w') f.write(tekst) f.close f=file('tekst.txt') #datoteka se otvara u read modu while True: linija=f.readline() if len(linija) == 0: #duzina 0 indicira kraj fajla break print linija f.close() $ python fileobj.py Ovo je prva linija tekst. ovo je druga linija teksta. Ovo je treca linija teksta.

1168/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Pickle
Standardni modul koji omoguava da se bilo koji Python objekt sprema u dokument i dobavlja kasnije (trajno spremanje objekata). Postoji jo jedan modul cPikle koji se ponaa kao i pickle modul osim to je napisan u C-u pa time puno bri. Koritenje i jednog i drugog modula je potpuno identino. Primjer Pickling i unpickling #!/usr/bin/python # pickle.py import cPickle listaDok = 'podaci.data' #ime dokumenta koji koristimo za spremanje lista=['hrast','bukva','lipa'] #pisanje, spremanje podataka f = file(listaDok,'w') cPickle.dump(lista,f) f.close() del lista #citanje podataka f = file(listaDok) spremljena = cPickle.load(f) print spremljena $ python pickle.py ['hrast', 'bukva', 'lipa']

1169/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

RUKOVANJE IZNIMKAMA
>>> 10 * (1/0) Traceback (most recent call last): File "<stdin>", line 1, in ? ZeroDivisionError: integer division or modulo by zero >>> 4 + spam*3 Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name 'spam' is not defined >>> '2' + 2 Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: cannot concatenate 'str' and 'int' objects Iznimke su pogreke tj. odstupanja u radu programa. Mogu biti uzrokovane raznim dogaajima (pad sistema, nedozvoljeno pisanje po memoriji, dijeljenje s nulom,...) Kada se detektira takva situacija u python programu podie se iznimka. Iznimka se zatim prosljeuje pozivatelju funkcije koji ju obrauje. U sluaju da nema koda za obradu iznimke program se rui. try: # blok naredbi koji se pokusa izvrsiti except greska: # blok naredbi koji obraduje iznimku greska else: # blok naredbi koji se izvrsava ako nije podignuta niti jedna iznimka Primjer try-except #!/usr/bin/python # exception.py import sys class maliExcept(Exception): 'korisnicki definirana exception klasa' def __init__(self,duzina,barem): self.duzina = duzina self.barem = barem try: s = raw_input('Unesi nesto > ') if len(s)<3: raise maliExcept(len(s),3) except EOFError:

1170/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

print 'Zasto EOF?' except maliExcept,x: print 'Unos je bio duzine %d, najmanje je trebao biti %d' %(x.duzina,x.barem) else: print 'nije dignuta nije jedna exception' EOFError kada korisnik pritisne ctrl+d Ako elimo izvriti neki dio koda bez obzira je li dolo do greke ili nije koristimo TryFinally

Primjer Try-Finally #!/usr/bin/python # try_finally.py try: f = file('tekst.txt') while True: linija = f.readline() if len(linija) == 0: break print linija, finally: print 'Ciscenje...' f.close() $ python try_finally.py Ovo je prva linija tekst. ovo je druga linija teksta. Ovo je treca linija teksta. Ciscenje...

1171/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

ZAKLJUAK
Python je jednostavan programski jezik koji istovremeno ima snagu i sloenost tradicionalnih programskih jezika (C, C++, ) i jednostavnost skriptnih i interpreterskih jezika (Java, Perl, ) . Iako je ponekad identificiran kao isto skriptni jezik, upotrebljavan je u mnogim velikim projektima kao to je Zope aplikacijski server, Google i Mnet. itanje dobrog Python programa izgleda gotovo kao itanje engleskog. Vrlo je lako zapoeti u njemu programirati, a dovoljno je kompleksan da se u njemu mogu programirati i najtei problemi. Za razliku od veine drugih programskih jezika, ne prisiljava programera da prihvaa jednu programsku paradigmu i razmilja o samoj metodi programiranja, ve da razmilja o rjeavanju problema i onog to zapravo eli uiniti s programom. Programiranje u Python-u treba biti zabava...

1172/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Marijan Poljak

INTERPRETERI TCL/TK

1173/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

UVOD Openito o interpreterima


Programi prevodioci imaju zadatak da programe koji su napisani u viem programskom jeziku prevedu na strojni jezik, a to je uvjet njihovog izvoenja (realizacije) u raunalu. Oni su dio sistemskog softvera bez kojeg racunalo ne bi shvatilo niti bi moglo izvesti bilo koju instrukciju programa. Program napisan u nekom viem programskom jeziku zove se izvorni program (source program) i prije njegovog prevoenja kaemo da je on napisan u izvornom kodu. Nakon njegovog prevoenja od strane programa prevodioca, tj. kompajlera ili interpretera, dobijamo program u strojnom jeziku tj. objektnom kodu. Osim prevoenja kao osnovnog zadatka i kompajlera i interpretera, interpreteri osiguravaju i izvravanje, tj. izvoenje svake istrukcije. Naime, interpreteri prevode i izvravaju jednu po jednu instrukciju nasuprot kompajlerima koji prevode itav program prije nego to ga prenesu na izvrenje. Proces prevoenja programa stoga se i zove kompajliranje - kada koristimo kompajler, ili interpretacija - kada koristimo interpreter. Neki programski jezici koriste iskljuivo interpreter pa se i zovu interpreterski jezici.

Slika -Shematski prikaz prevoenja programa

1174/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

Uvod u Tcl/Tk
Tcl/Tk dizajnirao je prof. John Osterhont sa Berkley sveuilita. Tcl, kratica od Tool Command Language, predstavlja dvije stvari: skriptni jezik i interpreter tj. prevodilac za taj jezik koji je dizajniran da se lako uklopi u neku aplikaciju. Za izvoenje Tcl programa (skripte), script file prenosi se Tcl interpreteru wish (npr. wish hello.tcl). Wish se moe koristiti i interaktivno na nain da se naredbe unose u command line. Postoji i drugi standardni Tcl interpreter, tclsh, koji razumije iskljuivo Tcl jezik. On ne sadri nikakve naredbe za Tk korisniko suelje. Tcl-u je pridruen Tk koji predstavlja Windows toolkit, jednostavan i efikasan nain razvijanja windows aplikacija. Tcl C biblioteka ima jasno i jednostavno suelje, sadri osnovni interpreter i set naredbi koje definiraju varijable, tijek programa tj. control flow, I/O fileove i procedure. eljena aplikacija moe definirati i nove Tcl naredbe. Ove naredbe su povezane sa C ili C++ procedurama. Skriptni dio ima pristup shell-u, npr. sposobnost da pokree druge programe i pristupa file sistemu. Takoer se moe pozivati direktno u aplikaciju, koritenjem specifinih Tcl naredbi, koje se definiraju. Sa razine C programiranja, mogue je pozivati ovakve Tcl skripte. Postoji mnogo besplatnih Tcl proirenja tj. ekstenzija. Veina ekstenzija ukljuuje C biblioteku, koja prua neke nove funkcionalnosti i Tcl suelje prema samoj biblioteci. Ipak, proirenje od najveeg znaaja predstavlja Tk. Tk definira Tcl naredbe kako bi kreirali i manipulirali widget korisnikim sueljem. Skriptno orijentirani pristup programiranju korisnikog suelja ima tri prednosti. Prvo, razvijanje je brzo jer nema ekanja na duga povezivanja. Drugo, Tcl naredbe pruaju suelje vieg nivoa od veine standardnih alata C biblioteke. Jednostavnija suelja zahtjevaju manje naredbi kako bi se definirala. Trea prednost je u injenici da se korisniko suelje moe jasno izdvojiti od ostatka aplikacije. Na taj nain moe se razvijati jezgra aplikacije da bi se naposljetku izgradilo suelje. Osnovni set Tk widgeta esto je dovoljan za veinu UI potreba, no mogue ih je razvijati pomou jezika C, a postoji i mnogo ve razvijenih Tk widgeta dostupnih na webu.

1175/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

TCL OSNOVE
Tcl ima jednostavnu strukturu. Svaka linija zapoinje naredbom, svaka naredba je implementirana kao C funkcija. Jezik ima nekoliko osnovnih konstrukcija i relativno malo sintakse, to ga ini lakim za uenje. Osnovni mehanizmi vezani su uz stringove i supstitucije stringova, pa je lako vizualizirati to se zapravo dogaa u interpreteru. Svakim instaliranjem Tcl-a obino dolaze dva Tcl shell programa koji nam stoje na raspolaganju: tclsh i wish. Prvi je osnovni Tcl shell koji se koristi poput C shella ili Bourne shella. Wish predstavlja Tcl interpreter koji je proiren Tk naredbama koje se koriste pri kreiranju i manipuliranju Tk widgeta. Mogue su varijacije ovih programa ovisno o ekstenziji koja je dodana shellu.

Tcl naredbe
Zadaci aplikacije podjeljeni su u module. Specifini zadaci svake nove aplikacije su pisani i kompajlirani kao C ili C++ program i zatim predstavljeni kao nova Tcl naredba. Potom nastaje Tcl skripta od postojeih i novih naredbi inei tzv. overall aplikaciju. Tcl se sastoji od nekoliko sintaksnih pravila i skupa naredbi, inei jezgru. Tcl naredbe sastoje se od jedne ili vie rijei, od kojih je prva ime C funkcije koja e biti pozvana od strane interpretera. Ostale rijei u naredbi prenose se kao argumenti C procedure. Osnovna sintaksa Tcl naredbe :

naredba arg1 arg2 arg3 ...

Razmakom se odvaja ime naredbe od argumenata, a prelaskom u novi red ili znakom tokazarez , ; , naredba zavrava. Argumenti naredbe imaju vrijednost stringa. Tcl interpreter ne prevodi vrijednosti argumenata u naredbi, osim u sluaju supstitucije. Kod Tcl-a sve se predstavlja stringom, i mora se jasno traiti evaluacija varijabli i naredbi koje su ugnjeene. Osnovni model naredbe moe biti proiren sintaksom za grupiranje, ime se omoguava upotreba vie rijei u jednom argumentu, te supstitucijom koja se koristi pri programskim varijablama i pozivanju ugnjeenih varijabli. Grupiranje i supstitucija su jedini mehanizmi ukljueni u Tcl interpreter prije nego to on izvri naredbu.

1176/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

Primjer Hello, world! : puts stdout {Hello, World!} => Hello, World! U ovom primjeru naredba puts uzima dva argumenta: I/O stream i string. Argumenti se prevode ovisno o naredbi. Vitiaste zagrade, {}, grupiraju rijei u jedinstveni argument. Interpreter ih odbacuje prilikom prevoenja pa tako puts naredba prima Hello, world! kao drugi argument. Tablica Ugraene Tcl naredbe

array break catch cd close concat continue error eof eval exec exit expr file for foreach format gets glob global history if incr

ispituje stanje polja, pretraivanje po elementima izlaz iz petlje hvatanje greki promjena radnog direktorija zatvara i otvara I/O stream spaja argumente zajedno s razmacima nastavlja sa sljedeom iteracijom prijavljuje greku provjerava end-of-file. spaja argumente te ih evaluira kao naredbu Fork i execute UNIX program. terminira proces evaluira matematiki izraz query file system stvaranje petlje stvaranje petlje preko niza vrijednosti formira string, slino kao C sprintf ita input line s I/O proiruje pattern prema odgovarajuim file imenima deklariranje global varijabli command-line history control naredba uvjeta inkrementira varijablu za integer vrijednost

1177/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

info join lappend lindex linsert list llength lrange lreplace lsearch lsort open pid proc puts pwd read regexp regsub rename return scan set source split string switch time trace unknown unset uplevel upvar

query o stanju Tcl interpretera spajanje niza elemenata sa zadanim string separatorom dodaje elemente na kraj niza dohvaanje elementa niza umetanje elemenata u niz stvaranje niza van argumenata vraa broj elemenata u nizu vraa udaljenost izmeu elemenata niza zamjena elemenata u nizu trai element u nizu koji odgovara uzorku sortiranje niza otvara file ili process pipeline za I/O vraa process ID definira Tcl proceduru alje string na I/O stream. vraa trenutni radni direktorij ita blokove znakova sa I/O sreama Regular expression matching supstitucija bazirana na regularnim izrazima promjena imena Tcl naredbe povratna vrijednost procedure slino kao C sscanf funkcija dodjela vrijednosti varijablama evaluira Tcl naredbe u file-u dijeli string kao niz elemenata operira nad stringovima grananje u programu mjeri vrijeme izvravanja naredbe nadzire varijable rad sa nepoznatim naredbama brisanje varijabli izvrava naredbu u razliitom opsegu vidljivosti (scope) referenca na varijablu iz drugog opsega vidljivosti

1178/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

while

konstrukcija petlje

Tcl Varijable
Naredba set koristi se za pridjeljivanje vrijednosti varijablama. Naredba uzima dva argumenta: prvi je ime varijable a drugi je vrijednost varijable. Varijable mogu biti bilo koje duine, razlikuju se velika i mala slova. Nije potrebno deklarirati Tcl varijable prije njihove upotrebe. Interpreter kreira varijablu kada joj se prvi puta dodijeli vrijednost. Vrijednost varijable dohvaa se kasnije sintaksnim znakom $ . Primjer:
set var 5 => 5 set b $var => 5

Druga set naredba u primjeru pridjeljuje varijabli b, vrijednost varijable var. Upotreba znaka $ ujedno je i prvi primjer supstitucije. Varijabla se moe obrisati koritenjem naredbe unset: unset imevar imevar2... Bilo koji broj imena varijabli moe se prenesti unset naredbi. Unset e prijaviti greku ako varijabla nije definirana. Varijable se dijele u tri kategorije: local, global, visible. Postojanje varijable moe se testirati naredbom info exists.

Pravila supstitucije i grupiranja


Sljedea pravila opisuju osnovne mehanizme supstitucija i grupiranja koje Tcl interpreter izvodi prije pozivanja naredbi: 1. Znakom dolara, $, izvodi se supstitucija varijable. Ako su pozivi varijabli ukljueni u razliite stringove, mogu se razlikovati sljedeom sintaksom: ${ime_var} 2. Uglatim zagradama, [ ], izvodi se supstitucija naredbe. Sve to se nalazi izmeu zagrada, tretira se kao naredba. Sve, ukljuujui i zagrade, zamjenjuje se rezultatom naredbe. Ugnjeivanje je dozvoljeno.
1179/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

3. Znak kose crte tj. backslash, \ , koristi se za definiranje posebnih znakova. Ovo se moe smatrati supstitucijom jer se kombinacija kose crte i znaka koji sljedi, zamjenjuje novim znakom. 4. Supstitucije se mogu pojaviti bilo gdje, osim ako to nije dozvoljeno grupiranjem vitiastim zagradama. Supstitucija se moe pojaviti usred rijei, tj. dio rijei moe biti string dok ostatak mogu biti neke od supstitucija. Supstitucije mogu djelovati ak i na ime naredbe. 5. Grupiranje vitiastim zagradama, {}, spreava supstituciju. Interpreter ukljuuje sve znakove izmeu odgovarajue lijeve i desne zagrade u grupi. Krajnje vitiaste zagrade nisu ukljuene u grupu. 6. Grupiranjem dvostrukim navodnicima, , doputa se supstitucija. Interpreter grupira sve dok ne naie na drugi znak dvostrukog navodnika. Sam znak navodnika moe biti ukljuen u grupu u kombinaciji sa znakom kose crte. 7. Grupiranje se mora izvriti prije izvrenja supstitucije. Ovo znai da vrijednost varijabli i rezultati naredbi ne utjeu na grupiranje. 8. Supstitucija koja se izvede jednom, izvrava se prije poziva naredbe. Rezultat supstitucije ne prevodi se drugi put. Ovo pravilo je vano ako vrijednosti varijabli ili rezultati naredbe sadre specijalne znakove poput: $, {}, [ ]...

1180/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

Matematiki izrazi
Naredba expr koristi se za evaluaciju matematikih izraza. Tcl interpreter tretira naredbu expr kao svaku drugu naredbu. Sintaksa koju podrava naredba expr slina je sintaksi u C jeziku. Expr primarno barata vrijednostima: integer, floating point i boolean. Vrijednost integer se po potrebi moe pretvoriti u floating point zapis. Logike operacije vraaju 0 (la) ili 1(istina). Naredba expr podrava komparaciju stringova, ali pouzdanijom metodom za usporeivanje stringova smatra se upoteba naredbe stringcompare.

Primjer jednostavne aritmetike:

expr 7.2 / 3 => 2.4

Naredba expr uzima sve argumente, spaja ih u jedan string, zatim predstavlja string kao matematiki izraz. Nakon to izrauna rjeenje, ono se formatira u string i vraa. U matematike izraze mogue je ukljuiti i varijable kao i ugnjeene naredbe. Expr, naravno, podrava i velik broj ugraenih matematikih funkcija.

Tablica acos(x) asin(x) atan(x) cos(x) exp(x) floor(x) log(x) log10(x) pow(x,y) sin(x)

Neke od ugraenih matematikih funkcija arc-cosinus od x arc-sinus od x arc-tangent od x cosinus od x exponential, e x najvea vrijednost integrala manja ili jednaka x fmod(x,y) prirodni logaritam od x log od x uz bazu 10 x na y potenciju sinus od x

1181/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

sqrt(x) tan(x) abs(x) double(x) int(x)

drugi korijen od x tangens od x apsolutna vrijednost od x stavlja x kao floating point pretvara x u integer vrijednost

Tablica

Aritmetiki operatori sortirani od vieg prema niem prioritetu

-~! */ +<< >> < > <= >= == != & ^ | && || x?y:z

unarni minus, bitovno NOT, logiko NOT mnoenje, djeljenje zbrajanje, oduzimanje left shift, right shift operatori usporeivanja jednako, razliito od bitovno AND bitovno NOT bitovno OR logiko AND logiko OR If x then y else z

1182/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

Tcl Procedure
Tcl koristi naredbu proc za definiranje procedura. Osnovna sintaksa kojom se definira procedura je:

proc ime lista_arg tijelo

Prvi argument predstavlja ime procedure koja se definira. Ime procedure moe sadravati bilo koje znakove, bitno je razlikovati velika i mala slova. Imena varijabli i imena procedura nisu u meusobnom konfliktu. Sljedei argument u sintaksi predstavlja listu parametara procedure. Trei argument je naredba ili obino grupa naredbi koje formiraju tijelo (body) procedure. Jednom definirana, Tcl procedura koristi se kao bilo koja ugraena naredba. Rezultat procedure je rezultat kojeg vraa zadnja naredba u tijelu procedure. Primjer definiranja procedure:

proc diag {a b} { set c [expr sqrt($a * $a + $b * $b)] return $c }

Procedura imena diag izraunava duljinu dijagonale pravokutnog trokuta ako su zadane ostale stranice. sqrt funkcija je jedna od mnogobrojnih matematikih funkcija i podrana je naredbom expr. Vitiaste zagrade grupiraju argumente a i b u jedinstveni argument, koji sada predstavlja drugi argument naredbe proc. Otvorenom vitiastom zagradom na kraju drugog argumenta zapoinje trei argument a ujedno i grupiranje, sve dok se zagrada ne zatvori. Kao rezultat grupiranja dobiva se sljed naredbi, u obliku treeg argumenta. Sljedei vaan uinak vitiastih zagrada oko tijela procedure je da odgaa bilo koji oblik supstitucije u tijelu procedure, sve do vremena kada se procedura poziva. U navedenom primjeru varijable a, b, c nisu definirane sve dok se procedura ne pozove, dakle nepoeljna je supstitucija varijabli tijekom samog definiranja procedure diag. Naredba proc podrava i dodatne oblike poput definiranja broja varijabli argumenata defniranjem

1183/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

kljune rijei args kao zadnji parametar. Mogue je definirati argumente.

defaultne vrijednosti za

U Tcl-u postoji jedinstveni, globalni opseg (scope) za imena procedura. (za razliku od jezika C koji doputa privatne static procedure). Mogue je definirati proceduru unutar druge procedure, ali e ona biti vidljiva svugdje. Svaka procedura ima lokalni scope za varijable. Varijable definirane unutar procedure imaju ivotni vijek za vrijeme trajanja poziva procedure, nakon toga su nedefinirane. Varijable definirane izvan procedure nee biti vidljive unutar te procedure osim ako se ne upotrijebe naredbe upvar ili global. global naredbom definira se tzv. global scope, koji se nalazi izvan svake procedure. Vano je ipak naglasiti da je varijable definirane na ovom podruju potrebno uiniti dostupnim naredbama unutar procedure. Ista imena varijabli izvan opsega i unutar procedure ne dovode do konflikta.

Komentari
Tcl koristi znak # za komentiranje. Za razliku od mnogih jezika, znak # sa

pripadajuim komentarom u veini sluajeva pojavljuje se prije same naredbe. Dobar nain kako prikljuiti komentar na kraju naredbe je dodavanje znaka #, neposredno iza znaka koji oznaava kraj naredbe tj. znaka ;.

# ovo su primjeri komentara set rata 7.0;# Komentar na kraju naredbe set mjeseci 60;# Komentar na kraju naredbe

Znakom kose crte, \ , nastavljamo s komentarom u sljedei red skripte. Znak ; unutar komentara nema znaaja, komentar se prekida samo prelaskom u novi red.

# Ovo je pocetak Tcl komentara\ a ovo je nastavak ; kao to je i ovo

1184/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

STRINGOVI
String predstavlja osnovni tip Tcl podataka, pa ne iznenauje injenica da postoji velik broj naredbi za manipulaciju stringovima. Uz podruje stringova je usko vezan pojam usporedbe prema uzorku tj. pattern matching. Tcl podrava dvije vrste ovakvog usporeivanja prema uzorku. Tzv. Glob matching predstavlja jednostavno usporeivanje kakvo se koristi u mnogim shell jezicima. Regular expresion matching je vie sloeno ali zato i monije. Osnovna sintaksa Tcl string naredbe:

string

operacija

vrijednost_stringa

drugi_argumenti

Prvi argument naredbe string definira to string radi tj. operaciju. Drugi argument je nekakav string, a mogu postojati i drugi argumenti ovisno o operaciji. Veina string naredbi obino je vezana uz string funkcije u standardnoj C biblioteci. Tablica Oblici string naredbe usporeuje stringove leksikom analizom pokazuje na mjesto u stringu gdje se prvi puta pojavljuje neki zadani string ili vraa 1 u suprotnom string index string index string last str1 str2 string length string string match pattern str string range str i j string tolower string string toupper string string trim string ?chars? string trimleft string ?chars? ureuje znakove na poetku stringa vraa znak na specificiranom indexu obrnuta logika od first vraa duljinu stringa vraa vrijednost 1ako string odgovara patternu vraa razmak izmeu zadanih znakova vraa string malim slovima vraa string velikim slovima ureuje znakove na poetku i kraju stringa

string compare str1 str2 string first str1 str2

1185/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

string trimright string ?chars? string wordend str ix string wordstart str ix

ureuje znakove na kraju stringa vraa index znaka u stringu nakon rijei koja sadri taj znak na ix indexu vraa index u stringu prvog znaka u rijei koja sadri znak na ix indexu

Osim naredbe string postoji itavi niz drugih naredbi kojima je mogue manipulirati stringovima. Naredba append je dobar nain da se neto doda na kraj nekog stringa. Radi na principu pretraivanja sheme alocirane memorije. Tcl alocira dodatni prostor kako bi omoguio irenje stringa. Naredba append uzima ime varijable kao prvi argument, zatim spaja preostale argumente na trenutnu vrijednost imenovane varijable. Varijabla e biti kreirana ukoliko ve ne postoji. Format naredba je slina C printf funkciji. Naredba formira string prema sljedeoj specifikaciji: format spec vrijednost1 vrijednost2.

Argumenti specifikacije mogu sadravati i kljune rijei ali u tom sluaju ispred kljune rijei mora stajati znak postotak, %. Oznakom zastavice, flag, definiraju se u naredbi format razna umetanja znakova i slino. Scan naredba je neto poput C sscanf procedure. Scan analizira string prema format specifikaciji i dodjeljuje vrijednosti varijablama te vraa broj pretvorbi koje su uspjeno obavljene. Naredba ima sljedeu formu:

scan string format var ?var? ?var? ...

Specifikacija za naredbu scan je gotovo jednaka kao za naredbu format. Uz naredbu scan moe biti ukljuena set notacija. Uporabom uglatih zagrada odreuje se set znakova. Set odgovara jednom ili vie znakova koji su upisani u varijablu. String match naredba je primjer tzv. glob-style usporeivanja. Postoje tri osnovne konstrukcije koritene u ovakvom glob uzorku: 1. usporeivanje bilo kojeg broja, bilo kojih znakova (*) 2. usporeivanje pojedinog znaka (?) 3. usporeivanje jednog u setu znakova ([abc])
1186/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

Ako se eli ukljuiti znakove *, ?, [ ], potrebno ih je koristiti u kombinaciji sa backslashom, \ . Regularni izraz predstavlja najefikasniji nain kako uobliiti uzorak (pattern). Postoji osnovna sintaksa koja ukljuuje sposobnost izdvajanja podstringova iz stringa koji se usporeuje i predstavlja uzorak. Ono moe biti korisno kod prikupljanja razdvojenih podataka. Uzorak predstavlja slijed literalnih znakova, znak usporeivanja (matching character) s dodacima poput ponavljanja, alternacije te poduzoraka koji su grupirani u zagrade. Znak toke, . , predstavlja wild-card znak koji odgovara bilo kojem pojedinanom znaku. Sintaksom [xyz] bilo kojem znaku unutar zagrada je dozvoljeno usporeivanje. Tako npr. izraz [Hh]ello odgovara izrazu Hello i izrazu hello. Ponavljanje se oznaava znakom * za 0 ili vie ponavljanja, znakom + za 1 ili vie ponavljanja i znakom ? za 0 ili jedno ponavljanje. Sljedei izraz npr. usporeuje string koji sadri znak b iza kojeg slijedi 0 ili vie znakova a : ba* . Alternacija je specificirana znakom | . U pricipu, uzorak ne mora u potpunosti odgovarati itavom stringu. Ako je uzorak pronaen u vie dijelova stringa, uzima se onaj dio koji se najranije pojavljuje u zadanom stringu. Ukoliko ima vie pronaenih uzima se onaj najdui. Regexp naredba omoguava direktan pristup regularnom izrazu koji se uporeuje. Povratna vrijednost je 1 ako neki dijelovi stringa odgovaraju uzorku ili 0 obrnuto. Oznake zastavica (flags) su opcionalne. Ako string odgovara uzorku rezultati se spremaju u varijable imenovane u naredbi. Regsub naredba se upotrebljava za string supstituciju koja se temelji na usporedbi prema uzorku. Naredba vraa broj pogaanja i zamjena ili 0 ako ne postoji odgovarajua usporedba. Regsub kopira string u ime varijable zamjenjujui dogaaje uzorka supstitucijom definiranom izrazom subspec. Opcionalno se moe dodati izraz all, ime se zamjenjuju svi dogaaji uzorka, inae se zamjenjuje samo prvi. Sintaksa naredbe regsub je sljedea:

regsub ?switches? pattern string subspec varname

1187/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

STRUKTURE PODATAKA
Osnovnu strukturu podataka u Tcl-u ine stringovi. Dodatno, postoje dva tipa struktura podataka vieg nivoa, nizovi i polja. Nizovi su implementirani kao stringovi. Njihova struktura je definirana sintaksom stringova. Sintaksa pravila su ista kao iza naredbe. Polja su varijable koje posjeduju index (string vrijednost). Polja se mogu zamiljati kao put od jednog stringa (indexa) do nekog drugog stringa (odreene vrijednosti elementa polja). Pravilo je sljedee: nizovi su funkcionalni ako su kratki ili ako se izgrauje naredba koja e se kasnije evaluirati. Polja su efikasnija i primjerenija za vee koliine podataka.

Nizovi
Nizovi u Tcl-u su , za razliku od drugih jezika, stringovi sa posebnim znaenjem. Po definiciji, Tcl nizovi imaju istu strukturu kao i Tcl naredbe. To znai da je niz jednostavno string sa nizovima elemenata odvojenih razmakom. Zagrade ili navodnici mogu biti koriteni za grupiranje rijei sa razmacima u jedinstveni element niza. Naredbe vezane uz nizove esto se koriste pri konstruiranju Tcl naredbi. Ovo su neke od naredbi vezane uz stringove:

1.

Naredbe kojima se konstruiraju nizovi: list, lappend i concat.

Naredbom list konstruira se niz iz argumenata, tako da postoji jedan element niza za svaki argument. To je vana naredba budui osigurava da rezultirajui niz ima odgovarajuu sintaksu. Ukoliko neki od argumenata sadri specijalne znakove, list naredba dodaje navodnike kako bi bili sigurni da se radi o jedinstvenom elementu. Naredbom lappend dodaju se elementi na kraj niza. Koristi se ekstra alocirani prostor na kraju niza. Naredba se moe pozvati sa imenom nedefinirane varijable, koja e u tom sluaju biti definirana. Naredba concat spaja viestruke nizove u jedinstveni niz. 2. Naredbe kojima se pristupa elementima niza: llenght, lindex i lrange.

Naredba llenght vraa broj elemenata niza, lindex vraa pojedini element iz niza, lrange vraa razmak izmeu elemenata niza. 3. Naredbe za modifikaciju nizova: linsert, lreplace

1188/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

Naredba linsert umee elemente na mjesto u nizu koje je oznaeno indexom, lreplace zamjenjuje elemente u nizu novim elementima. 4. Ostale neredbe su lsearch, lsort, split, join.

Naredba lsearch vraa index traene vrijednosti u nizu ili vrijednost 1 ako vrijednost nije pronaena. Naredbom lsort nizovi se sortiraju. Tri osnovne vrste sortiranja definirane su opcijama: ascii, integer ili real. Redosljed je odreen opcijama increasing i decreasing. Naredba split uzima string i pretvara ga u niz djelei ga na oznaenim mjestima. Naredba join je inverzna split naredbi, ona spaja elemente nizova. Poeljno je izbjegavati velike nizove i nizove kojima se freventno pristupa. U tom sluaju bolje je primjeniti prednosti polja.

Polja

Druga primarna struktura podataka kojom se barata u Tcl-u su polja. Polje je varijabla koja kao index uzima vrijednost stringa. Index polja nalazi se unutar zagrada, moe imati bilo koju vrijednost stringa i moe biti rezultat supstitucije neke varijable ili naredbe. Elementi polja definiraju se naredbom set: set arr (index) value Vrijednost (value) elementa polja dohvaa se $ supstitucijom. Uporaba varijable definirane i kao polje i kao obina varijabla izaziva greku. Index, ako je kompleksan, moe biti rastavljen upotrebom zareza; pri tome ju nuno izbjegavati razmak poslije zareza. Iako je dozvoljen, razmak u indexu moe izazvati probleme budui se zagrade u ovom sluaju ne koriste kao mehanizam grupiranja. Razmak se koristi u kombinaciji s backslashom. Ako je index polja pohranjen u varijabli, onda nema problema sa razmacima u vrijednosti varijable. Ime polja moe biti rezultat supstitucije. Naredba array vraa informacije o varijablama polja i moe se koristiti za iteraciju kroz elemente polja. Naredba array names omoguava iteraciju kroz polje upotrebom foreach petlje. Redosljed imena vraenih ovom naredbom je neodreen. Mogue je ograniiti vraanje imena specificiranjem uzorka argumenta. Uzorak se definira string match naredbom. Mogua je iteracija kroz elemente polja pojedinano, koritenjem search naredbi. Redosljed je opet neodreen. Ako polje ima ogroman broj

1189/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

elemenata ili ako se vri iteracija kroz dulji period vremena tada su search operacije praktinije od array names naredbe. Operacije array get i array set koriste se za pretvaranja izmeu polja i niza. Naredba trace doputa registriranje naredbe koja e biti pozvana svaki put kada se pristupa varijabli, kad se modificira ili brie. Druga esta uporaba trace naredbe je osvjeavanje korisnikog widget suelja kao odgovor na promjenu varijable. Ako postoji vie trace naredbi koje su pridruene odreenoj varijabli, one e se pozivati u obrnutom redosljedu; prvo e se izvriti naredba koja je zadnja pridruena. Ako postoji trace naredba pridruena polju i elementu tog polja, prvo se izvrava ona pridruena polju. Informacije o trace naredbama nad varijablama vraaju se opcijom vinfo. Naredba trace moe biti obrisana opcijom delete.

1190/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

NAREDBE TIJEKA PROGRAMA

Naredbe ponavljanja u Tcl-u su naredbe: while, foreach i for. Uvjetna grananja vre se naredbama if i switch. Dodatne naredbe za kontrolu tijeka programa su break, continue, return i error. Naredba za manipuliranje grekama je catch. Naredba tijeka programa esto ima tijelo naredbe koje se izvrava kasnije, uvjetno ili u petlji. U tom sluaju vano je grupirati tijelo naredbe vitiastim zagradama kako bi se izbjegle supstitucije u vrijeme poziva naredbe. Drugu ugodno svojstvo vitiastih zagrada je da grupiraju stvari ukljuujui i prelaske u novi red, irei naredbe kroz vie redova. Naredba tijeka programa vraa vrijednost zadnje naredbe koju je odluila izvriti. Naredbe poput if, for i while mogu sadravati boolean izraze. If Then Else naredba je naredba grananja. Naredba if je osnovna i bazirana je na uvjetu. Ako je uvjet istinit izvrava se jedno tijelo naredbe, u suprotnom se izvrava drugo tijelo naredbe. Kljune rijei then i else su opcionalne. Switch naredbom mogue je grananje vie tijela naredbi ovisno o vrijednosti izraza. Kao dodatak, izbor je mogu na temelju uporeivanja prema uzorku, isto kao i jednostavnom usporedbom. Ukoliko odgovaraju viestruki uzorci, evaluira se samo jedan odgovarajui uzorak. Foreach naredba vri loop nad tijelom naredbe dodjeljujui varijable svakoj vrijednosti u nizu. Tijelo naredbe se izvrava jednom za svaki element u petlji. While naredba uzastopce testira boolean izraze, a zatim izvrava tijelo naredbe ako je rezultat razliit od 0. Iz razloga to se testni izraz evaluira ponovno, prije svake iteracije petlje vana je zatita izraza od bilo kakve supstitucije prije pozivanja while naredbe. For naredba slina je izrazu for iz jezika C. Naredba uzima etiri argumenta. Prvim se inicijalizira petlja, drugi definira da li e se tijelo petlje izvriti, trei argument je naredba koja e se izvriti poslije tijela petlje i etvrti argument predstavlja tijelo petlje. Break i continue naredbe kontroliraju izvravanje petlje. Break naredbom odmah se izlazi iz petlje, continue naredbom petlja nastavlja sa sljedeom iteracijom. Tcl ne podrava goto izraz.

1191/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

Catch naredba slui za hvatanje greaka. U praksi, bilo koja naredba e prijaviti greku ako je pozvana sa pogrenim brojem argumenata ili ako detektira neke posebne greke vezane uz njezinu implementaciju. Ako se greka ne uhvati ona prekida izvravanje itave skripte; zato je potrebno sluiti se catch naredbom. Catch uzima dva argumenta: prvi je tijelo naredbe, drugi je ime varijable koja e sadravati rezultat ili poruku greke ako naredba prijavi greku. Error naredba prijavljuje stanje greke koje terminira skriptu ukoliko greka nije uhvaena catch naredbom. Return naredbom vraamo se iz procedure. Potrebna je ako je povratak nuan prije kraja tijela procedure ili ako je potrebno vratiti konstantnu vrijednost. Return naredba na kraju procedure je pitanje stila. Naredba return moe biti specificirana opcionalnim argumentima tipa code, code error, error info... Ove opcije su rijetko u upotrebi, iako omoguuju izgradnju novih naredbi tijeka programa u Tcl-u.

1192/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

RAD S UNIXOM
Tcl naredbe exec, open, close, read, write, seek, tell, glob,

pwd i cd koriste se u Unix okruenju. Iako su ove naredbe dizajnirane za Unix, one su takoer ukljuene (s nekim modifikacijama) u Tcl portove prema ostalim sustavima poput DOS-a. Ovakve sposobnosti omoguavaju da se Tcl skriptom spajaju razliiti programi u jedinstveni alat prilagoen razliitim potrebama.

Naredba exec

Naredba exec koristi se za pokretanje drugih Unix programa iz nae Tcl skripte. primjer: set d [exec date] Standardni output programa vraen vraa se kao vrijednost exec naredbe. Za razliku od C-shell exec naredbe, tcl exec naredba ne zamjenjuje trenutni proces sa novim. Exec naredba podrava potpuni set I/O redirekcije te pipeline sintaksu. Svaki Unix proces ima tri I/O streama: standard input, standard output, standard error. Sa I/O redirekcijom mogue je uputiti I/O streamove u fileove ili u I/O streamove koji su otvoreni open naredbom. Pipeline (cjevovod) predstavlja lanac Unix procesa koji ima standardni output jedne naredbe prikljuen na standardni input sljedee naredbe u cjevovodu. Bilo koji broj programa moe biti linkan zajedno u cjevovod. Uz naredbu exec dolazi podrazumjevana sintaksa za I/O redirekciju.

Tablica | < fileName <@ fileId << value > fileName

Pregled osnovne exec sintakse za I/O redirekciju pipeline uzima input uzima input sa I/O streama identificiranog sa field uzima input sa zadane vrijednosti uzima output

1193/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

2> fileName >> fileName 2>> fileName >>& fileName >@ fileId 2>@ fileId >&@ fileId &

uzima standard error output dodaje standard output imenovanoj datoteci dodaje standard error imenovanoj datoteci dodaje zajedno standard error i s. output datoteci direct standard output na I/O stream identificiran sa fileId direct standard output na I/O stream identificiran sa fileId direct standard error i standard output na I/O stream. izvravanje cjevovoda u pozadini

Promatrajui sintaksu redirekcije vano je uoiti da se ona izgrauje na temelju nekoliko osnovnih graevnih blokova. Osnovna ideja je da znak | predstavlja cjevovod, znak > predstavlja output, znak < predstavlja input, znakom & pridruuje se standardni error standardnom outputu, znakom @ mogue je koristiti vlastite I/O streamove.

Naredba file
Naredba file prua nekoliko naina za provjeru statusa datoteke u Unix datotenom sustavu. Npr. moemo saznati dali datoteka uope postoji i kojoj vrsti datoteka pripada. Naredba file moe biti u razliitim formama. Tablica file atime name file dirname name file executable name file exists name file isdirectory name file owned name file readable name file rootname name file size name file tail name file type name Pregled osnovnih formi Tcl file naredbe vraa vrijeme pristupa datoteci vraa glavni direktorij imena datoteke vraa 1 ako ime ima execute dozvolu, inae 0 vraa 1 ako ime postoji, inae 0 vraa 1 ako je ime direktorij, inae 0 vraa 1 ako je trenutni korisnik vlasnik imena datoteke, inae 0 vraa 1 ako ime ima dozvolu itanja, inae 0 vraa sve osim ekstenzije imena vraa broj byteova u imenu vraa sve znakove nakon zadnjeg '/ ' u imenu vraa type identifier (moe biti: file, directory, characterSpecial, blockSpecial, fifo, link, ili socket)

1194/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

file writable name file lstat name var file stat name var

vraa 1 ako ime ima dozvolu pisanja, inae 0 stavlja stat rezultate linka name u var stavlja stat rezultate od imena u polje var

Nake od formi operiraju nad imenom staze datoteke (pathname); one ne vraaju informacije o samoj datoteci. Takve naredbe mogu biti primjenjene nad bilo kojim stringom, nema zahtjeva da se pathname mora odnositi na postojeu datoteku. Najopenitije opcije koje dolaze uz naredbu file su stat i lstat. One uzimaju trei argument koji je ime varijable polja a zatim inicijaliziraju to polje sa elementima i vrijednostima ovisno o rezultatima koje daje stat system call. Elementi polja koji su definirani: atime, ctime, dev, gid, ino, mode, mtime, nlink, size, type i uid. Primjer Kreiranje direktorija rekurzivno

proc makedir { pathname } { if {[file isdirectory $pathname]} { return $pathname } elseif {[file exists $pathname]} { error Non-directory $pathname already exists. } else { # Recurse to create intermediate directories makedir [file dirname $pathname] exec mkdir $pathname return $pathname } } Primjer koristi file naredbu kako bi odredio ima li potrebe kreirati dodatne direktorije u pathname-u. Poziva se rekurzivno koristei file dirname rekurzivno kako bi kreirao glavni direktorij.. Taj posao obavlja mkdir program. Greke mogu biti prijavljene na dva mjesta: ako procedura makedir pronae tzv. non-directory u pathname-u ili u programu makedir ako korisnik nema npr. dozvolu za kreiranje direktorija.

1195/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

Otvaranje datoteka za I/O


Naredba open postavlja I/O stream bilo za file ili pipeline procesiranje. Osnovna sintaksa je:

open what ?access? ?permissions?

Argument what predstavlja ime datoteke ili pipeline specifikaciju slinu onoj koja se koristi kod naredbe exec. Argument access moe biti u dvije forme; kratkoj sekvenci znakova ili nizu tzv. POSSIX pristupnih zastavica (POSSIX acess flags). Ako argument access nije specificiran, po defaultu je read. permisions argument je vrijednost koja se koristi za tzv. permission bitove nad novo kreiranom datotekom. Defaultne vrijednosti ovih bitova su 0666. Dodatna pojanjenja mogue je pronai na man stranici vezano uz chmod naredbu. Povratna vrijednost naredbe open je identifikator za I/O stream; vrijednost je potrebno pohraniti u varijablu. Tablica r r+ w w+ a a+ Tablica RDONLY WRONLY RDWR APPEND CREAT NONBLOCK TRUNC Primjer: Pregled open acess argumenata otvoren za itanje, file mora postojati otvoren za itanje i pisanje, file mora postojati otvoren za pisanje otvoren za itanje i pisanje otvoren za pisanje, dodavanje podataka u file otvoren za itanje i pisanje, dodavanje podataka u file Pregled osnovnih POSSIX zastavica za access argumente otvoren za itanje otvoren za pisanje otvoren za itanje i pisanje otvoren za dodavanje kreira file ako ne postoji spreava blokiranje prilikom otvaranja skrauje file ako postoji Otvaranje dokumenta koritenjem POSSIX access zastavica

1196/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

set fileId [open /tmp/bar {RDWR CREAT}]

File se u ovom sluaju otvara za itanje i pisanje ili stvara ako je potrebno.

itanje i pisanje
Standardni I/O streamovi identificirani sa stdin, stdout i stderror ve su otvoreni. Drugi su identificirani povratnom vrjednou naredbe open. Postoji nekoliko naredbi koritenih sa identifikatorima datoteka. puts - pie string i newline na output. Naki detalji u vezi puts naredbe ipak su drugaiji. Naredba puts uzima argument nonewline koji spreava newline znak koji bi se inae normalno prenio na izlaz. Stream identifikator je opcionalan; ako nije specificiran po defaultu je postavljen na stdout. gets -ita sa ulaza. Ako je dosegnut EOF (end of file), vraa se prazan string. Naredba eof mora se koristiti kako bi se razlikovala prazna linija od kraja file-a. eof naredba vraa 1 ako je dosegnut kraj. Naredba gets moe pohraniti liniju u imenovanu varijablu i vratiti broj proitanih byteova. read -ita blokove podataka, to je esto efikasno. Sa naredbom read mogu se specificirati argumenti nonewline ili argument numBytes, ali ne oba zajedno. Bez argumenta numBytes cijeli file (ili ono to se nalazi u I/O streamu) je proitan i vraen kao koliina byteova koju zauzima. -naredbe koje se koriste za pristup I/O streamu sluajnim odabirom

seek, tell

(random access to I/O stream) -naredba koja je vana kao i ostale jer oslobaa operativni sustav resursa

close

vezanih uz I/O stream. Ako se zaboravi zatvoriti stream, on e biti zatvoren pri izlasku iz

1197/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

procesa. Meutim, ako se radi o dugakom programu poput Tk skripte to moe dovesti do problema. Naredba close moe prijaviti i greke.

Refleksija
Refleksija (reflection) omoguava feedback skripte u vezi s unutarnjim stanjem interpretera. To moe biti korisno u mnogo sluajeva, od testiranja kako bi se uvjerili da neka varijabla postoji do odbacivanja stanja interpretera. Naredba info prua mnogo razliitih informacija u vezi interpretera.

Tablica info args procedure info body procedure info cmdcount

Pregled osnovnih formi info naredbe lista argumenata procedure naredbe u tijelu procedure broj naredbi koje su dosad izvrene lista svih naredbi ili onih koje odgovaraju pattern-u istina ako je definirana varijabla lista svih glob varijabli ili onih koje odgovaraju patternu stack level trenutne procedure, ili 0 za global scope pathname direktorija Tcl biblioteke lista svih local varijabli ili one koje odgovaraju patternu lista svih procedura ili one koje odgovaraju patternu ime datoteke koja se procesira ili NULL broj Tcl verzije lista svih vidljivih varijabli ili onih koje odgovaraju p.

info commands ?pattern? info exists variable info globals ?pattern? info level info library info locals ?pattern? info procs ?pattern? info script info tclversion info vars ?pattern?

Operacija koja se najee koristi je info exist. Ako se skripta eli pokretati na razliitim Tcl verzijama potrebno je testirati broj verzije i poduzeti razliite akcije u vezi nekompatibilnosti izmeu verzija. Tcl shell programi sadre dnevnik naredbi koje su koritene. Dnevniku se pristupa i on se kontrolira naredbom history. Uz naredbu history dolazi termin event ID, to predstavlja index u dnevniku. Mogue je specificirati dogaaj sa negativnim indexom koji e

1198/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

se izraunavati od kraja dnevnika. Npr. event 1 predstavlja proli dogaaj. Mnoge forme imaju event specifikator postavljen na 1 po defaultu. Tablica history history add command ?exec? history change new ?event? history event ?event? history nextid history redo ?event? Pregled osnovnih formi history naredbe skraeno za history info dodaj naredbu u history list, ako je exec specificirano izvri naredbu mijenja naredbu specificiranu sa event sa novom u naredbi history vraa naredbu specificiranu sa event vraa broj sljedeeg eventa ponavlja specificiranu naredbu

U praksi poeljno je iskoristiti mogunost skraivanja opcija koje dolaze uz naredbu history, pa ak i samu naredbu history. Za sve opcije postoje definirane jednoznane skraenice, a za naredbu je potrebno koristiti jedinstveni prefix. Neke od history operacija mogu mijenjati history listu. One zamjenjuju trenutnu history naredbu sa naredbom koja je vraena kao rezultat history operacije. Na ovakav nain ponaaju se operacije event, redo, substitute i words. Ovo ima smisla jer je poeljnije imati aktualnu naredbu u history, umjesto koritenja naredbe history da bi se dobila eljena naredba. Radi to efikasnijeg koritenja mogunosti koju prua history, ona je podrana dodatnom posebnom sintaksom (nisu sve history operacije podrane ovakvom sintaksom): !! !n !prefix !pattern ^old^new ponavljanje prole naredbe ponavljanje naredbe s brojem n ponavljanje zadnje naredbe koja poinje zadanim prefixom ponavlja zadnju naredbu koja odgovara pattern-u zamjenjuje old sa new u zadnjoj naredbi

Primjer

6.2.

Koritenje history naredbe

1199/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

% set a 5 5 % set a [expr $a+7] 12 % history 1 set a 5 2 set a [expr $a+7] 3 history % !2 19 % !! 26 % ^7^13 39 % !h 1 set a 5 2 set a [expr $a+7] 3 history 4 set a [expr $a+7] 5 set a [expr $a+7] 6 set a [expr $a+13] 7 history

1200/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

Debugger
Koritenjem debug procedure u skripti mogua je kontrola output-a. Don Libes je izgradio Tcl debugger koji doputa definiranje tzv. breakpoints i prolaz kroz skripte interaktivno. Ovaj debugger zahtjeva modificirani Tcl shell jer koristi neto vie ugraenih naredbi koje ga podravaju, pa se podrazumjeva da su one ugraene ako se eli koristiti. Breakpoint se postavlja definiranjem patterna koji odgovaraju naredbama (pattern matching). Debugger definira nekoliko imena naredbi koje se sastoje od samo jednog znaka. Naredbe se definiraju samo kada je debugger aktivan, nije poeljno koristiti vlastite jednoznane naredbe zbog mogueg konflikta. Nain na koji se ukljuuje debugger odluuje aplikacija. Expect shell uvodi debugger kada se generira prekid s tipkovnice. Kada se nalazimo u promtu debuggera, komuniciramo s Tcl interpreterom i moemo iskoristiti bilo koju Tcl naredbu. Nema potrebe za definiranjem novih naredbi, upotrebljavamo kljunu rije set. Tablica s ?n? , n ?n? Naredbe debuggera naredbe koje se koriste za prolaz kroz skriptu, uzimaju opcionalni parametar koji odreuje koliko koraka se prolazi prije ponovnog zaustavljanja r w u ?level?, d ?level? b h izvrava trenutnu proceduru i zaustavlja se nakon to procedura vrati rezultat ispisuje call stack mijenjaju trenutni scope, uzimaju opcionalni parametar manipulacija nad breakpointom (set, clear, show) help

Uobiajna forma naredbe kojom se postavlja breakpoint je sljedea:

b ?-re regexp? ?if condition? ?then action? b ?-glob pattern? ?if condition? ?then action?

1201/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

Breakpoint e se pojaviti ako je postavljen uvjet. Breakpoint moe sadravati neku akciju, nezavisno o uvjetu. Sam pattern je takoer opcionalan, pa je mogue defimirati breakpoint koji sadri samo uvjet ili samo akciju. Ako sadri samo akciju on e se okidati na svaku naredbu. Breakpoint se poziva prije nego se naredba izvri. Naredba bez ikakvih argumenata vraa listu definiranih breakpointa. Svaki breakpoint ima svoj ID. Brisanje se vri naredbom b N , gdje je N broj breakpointa. Tkinspect program je Tk aplikacija koja prua uvid u stanje ostalih Tk aplikacija. Prikazuje hijerarhiju procedura, varijabli, Tk widgeta. Program se koristi za debugiranje Tk aplikacija.

1202/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

BIBLIOTEKE SKRIPTI
Biblioteke skripti sadre zajedniku kolekciju korisnih Tcl procedura kako bi bile koritene u vie od jedne aplikacije. Jedan od naina kako izgraditi veliku aplikaciju je koritenjem jedne kratke glavne skripte i biblioteke dodatnih skripti. Prednost ovakvog pristupa je u injenici da se nee uitavati itavi Tcl kod. Tcl kod dizajniran za upotrebu u biblioteci iziskuje odreena pravila kodiranja. Pravila se moraju potivati radi izbjegavanja konflikta izmeu imena u razliitim bibliotekama i u glavnoj aplikaciji, osim toga na taj nain je biblioteka laka za koritenje drugim korisnicima. Dva su osnovna pravila: 1. odrediti identificirajui prefiks za procedure u vlastitom pakiranju biblioteke. Ako se npr. definira prefiks Pref, tada e sve procedure koje sadri naa biblioteka poinjati sa Pref. Pravilo je dalje proireno na razlikovanje privatnih i izlaznih (exported) procedura. Izlazna procedura ima znak underscore nakon zadanog prefiksa (npr. Pref_init). Ovakve procedure je mogue pozivati iz glavne aplikacije ili drugih pakiranja biblioteka. Privatne procedure ne sadre underscore znak, a namjenjene su koritenju drugim procedurama u istom pakiranju. 2. Koritenje istog prefiksa nad globalnim varijablama koje se koriste u vlastitom pakiranju. Istim prefiksom odreujemo koje varijable pripadaju pakiranju i time izbjegavamo konflikt s drugim pakiranjima. Ako postoji potreba za exportom nekih kljunih varijabli iz vlastitog modula, za njihovo razlikovanje je takoer potrebno koristiti znak underscore. Ako postoji potreba za vie od jedne glob varijable, potrebno je i dalje potivati pravilo prefiksa. Vana naredba vezana uz Tcl biblioteku je naredba unknown. Svaki put kad interpreter naie na naredbu koju ne prepoznaje, poziva naredbu unknown zajedno sa naredbom koja nedostaje. Naredba unknown ve je implementirana u Tcl, programer ima slobodu da osmisli vlastiti mehanizam koji e rukovati unknown naredbama. Defaultna implementacija naredbe unknown moe se pronai u init.tcl datoteci Tcl biblioteke. Kako bi se ubrzalo pretraivanje naredbi koje nedostaju , unknown naredba koristi se indeksom. Prilikom stvaranja biblioteke skripte mora se generirati index koji e biljeiti koje su procedure definirane u biblioteci. Procedura auto_mkindex kreira index koji se pohranjuje u datoteci tclIndex koja se nalazi

1203/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

u istom direktoriju kao i datoteke koje ine biblioteku skripte. Dodavanjem procedura ili mijenjanjem njihovih imena mora se izvriti i update nad datotekom tclIndex. Jedan od naina je ponovno stvaranje indexa ako se bilo to u biblioteci promijenilo od zadnjeg generiranja datoteke tclIndex. Za koritenje biblioteke skripte potrebno je informirati naredbu unknown gdje da trai. Ona koristi varijablu auto_path kako bi biljeila listu direktorija za pronalaenje nepoznate naredbe. Naknadno dodavanje u biblioteku zahtijeva update indexa (naredba Library_UpdateIndex). Ova metoda ne funkcionira ako ne postoji tclIndex datoteka zato to tada nepoznata procedura nije u mogunosti pronai implementaciju naredbe Library_UpdataIndex. Jednom kad se tclIndex kreira po prvi put to osigurava da svaka nova procedura koja se doda biblioteci bude ukljuena i u tclIndex datoteku. U praksi, ako se eli automatska promjena, korisno je ukljuiti datoteku Library_UpdateIndex direktno u aplikaciju kako bi izbjegli uitavanje iz biblioteke. Naredba unknown prua neke dodatne pogodnosti (automatsko izvravanje programa, naredba history, koritenje skraenih naredbi) koje se koriste u sluaju kada se naredbe unose direktno; one su onemoguene ako se Tcl shell ne koristi interaktivno.

1204/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

TK OSNOVE
Tk predstavlja alat za windows programiranje. Prvotno je bio dizajniran za Xwindow sustav. Tk dijeli neke zajednike koncepte s ostalim windows alatima. Tk omoguuje da setom Tcl naredbi kreiramo widget-e, tj. njima manipuliramo. Widget predstavlja prozor u posebno oblikovanom grafikom suelju (GUI). Termin widget i window esto se meusobno isprepliu. Tip widget podrava naredbene gumbe, scrollbars, menu i okvire za tekst. U Tk je ugraen i widget za ope namjene ucrtanja drawing widget. Takav widget naziva se canvas i podrava lake oblike crtanja poput linije, okvira i bitmapa. X window sustav podrava hijerarhiju prozora i to se takoer odraava na Tk naredbe. Hijerarhija prozora za aplikaciju znai da postoji primarni prozor, a unutar tog prozora moe postojati odreeni broj djece prozora. (children windows). Prozori djeca mogu sadravati nove prozore itd. Widgeti se nalaze pod kontrolom geometry manager-a, koji kontrolira njihovu veliinu i poloaj na ekranu. Njih postoji nekoliko vrsta. Zajedniko svima njima je da koriste frame widget okvirni widget kao spremnik za sve ostale. Dakle, kreira se jedan ili vie widgeta, a zatim se smjetaju unutar okvira pomou geometry managera. Aplikacija koja se bazira na Tk ima tijek programa kojeg pokreu dogaaji (event). Tcl naredbe se pridruuju dogaajima koritenjem naredbe bind. Tk widgeti se meusobno povezuju po defaultu (default binding), pa nije potrebno dodatno programiranje. Veze izmeu dogaaja dijele se na: global bindings, class bindings i instance bindings. Hijerarhija u povezivanju kontrolira se naredbom bindtags. Naredbom after mogue je urediti da se dogaaji pojavljuju nakon definiranog perioda vremena. Koncept koji se vee uz povezivanje je focus. U bilo koje vrijeme, jedan od widgeta ima input focus i dogaaji tipkovnice se upuuju na njega. Postoje dva openita pristupa fokusiranju: fokusiranje widgeta na kojeg pokazuje mi ili eksplicitno postavljanje fokusa na odreeni widget. Tk omoguuje naredbama da mijenjaju fokus. Osnovna struktura Tk skripte zapoinje stvaranjem widgeta i njihovim rasporeivanjem pomou geometry managera, zatim vezivanjem akcija uz widgete. Nakon to interpreter procesira naredbe koje inicijaliziraju korisniko suelje, event loop se ubacuje i aplikacija moe zapoeti.

1205/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

Ako se wish koristi interaktivno to e rezultirati kreiranjem i prikazom praznog glavnog prozora koji predstavlja prompt komandnu liniju. Iz ovakvog suelja mogue je postupno izgraditi Tk suelje.

Hello world u Tk
Primjer 8.1. Hello world u Tk

#!/usr/local/bin/wish -f button .hello -text Hello \ -command {puts stdout Hello, World!} pack .hello -padx 20 -pady 10

Ovaj kod od nekoliko linija kreira naredbeni gumb koji ispisuje poruku, nakon to se klikne na njega. Iznad widgeta naredbenog gumba nalazi se naslovna traka koju kreira window manager. Prva linija koda identificira interpreter za skriptu. Ova specijalna linija je neophodna ako se skripta nalazi u datoteci koja e se koristiti kao ostale datoteke unix naredbi. Zastavica f je zahtijevana u verzijama Tk prije 4.0. U mnogim Unix sustavima itava prva linija je ograniena na 32 znaka. Naredba button kreira naredbeni gumb ije ime je .hello. Natpis na gumbu je Hello a naredba vezana za gumb je puts. Naredba pack definira gdje e se gumb nalaziti na ekranu. Uz nju su navedeni dodatni parametri padx i pady koji odreuju veliinu slobodnog prostora oko gumba. Posljedica je prikaz glavnog prozora koji je smanjen do te mjere da sadri samo gumb i definirano mu proirenje.

slika 8.1. Izgled widgeta

1206/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

Imenovanje Tk widgeta
Tk koristi sustav imenovanja za widgete, koji reflektira njihovu poziciju u hijerarhiji widgeta. Root hijerarhije je glavni prozor aplikacije i njegovo ime je jednostavno .. Slino pravilima imenovanja za direktorije u Unixu gdje je root direktorij nazvan / a zatim se taj znak koristi za daljnja razdvajanja. Tk koristi . na isti nain. Svaki widget koji je dijete glavnom prozoru je imenovan na nain slian ovom: .foo. Dijete widgwet od .foo bio bi recimo .foo.bar itd. Postoji i jedan dodatak uz sustav imenovanja. Naime, ako se suelje mijenja to moe rezultirati promjenom pozicije u widget hijerarhiji pojedinih widgeta kojima se tada mora mijenjati ime. Ovo se moe izbjei koritenjem varijabli u koje se spremaju imena vanih widgeta.

Konfiguriranje Tk widgeta
Za specifikaciju atributa widgeta koriste se parovi argumenata. Imena atributa zapoinju crticom -, npr. text (sljedei argument je vrijednost tog atributa). ak i najjednostavniji Tk widget moe imati desetak ili vie atributa, dok oni sloeniji mogu imati i vie od dvadeset atributa. Prednost kod Tk-a je potreba za specificiranjem samo onih atributa koji ne zadovoljavaju defaultne vrijednosti. Svaki primjerak widgeta podrava operaciju configure (skraeno config) koja je u stanju mijenjati atribute ili vriti query nad njima. Sintaksa operacije config koristi iste parove argumenata koritene prilikom kreiranja widgeta. Tako je npr. mogue promijeniti boju pozadine naredbenog gumba nakon to je on ve kreiran i postavljen na ekran:

.hello config -background red

Ako se eli izvriti query nad trenutnom vrijednou atributa, izostavlja se vrijednost na kraju:

.hello config -background => -background background Background #ffe4c4 red

Atributi widgeta mogu se redefinirati bilo kada, ak i tekst i naredba koji su postavljeni u vrijeme kada je gumb kreiran:

1207/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

.hello config -text Goodbye! -command exit

Tk naredbe
Naredbe koje se koriste u Tk mogu se podijeliti u dvije grupe: 1. Naredbe koje kreiraraju widgete 2. Naredbe koje manipuliraju widgetima i pruaju odgovarajue funkcije (input focus, event binding, geometry managment) Tablica button checkbutton radiobutton menu canvas label entry message listbox text scrollbar frame toplevel Pregled osnovnihTk naredbi za kreiranje wdgeta kreira naredbeni gumb kreira toggle gumb koji je linkan na Tcl varijablu kreira radio gumb kreira menu kreira canvas (podrava linije , bitmape...) kreira jednolinijski tekst label (read only) kreira widget za jednolinijski unos teksta kreira vielinijsku tekstualnu poruku kreira scrolling text widget kreira text widget openite namjene kreira scrollbar koji je linkan u drugi widget kreira widget koji je spremnik za widgete kreira okvir koji predstavlja novi top level X window

Tablica after bell bind bindtags clipboard destroy fileevent

Pregled osnovnihTk naredbi za manipulaciju widgeta izvrava naredbu nakon odreenog perioda vremena zvuni signal vezanje Tcl naredbe na X event kreiranje binding klasa, kontrola manipulira sa X clipboard brie widget povezuje Tcl naredbe sa file deskriptorima

1208/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

focus grab option pack place send tk tkerror winfo wm

kontrolira input focus uzima input focus od drugih widgeta pristup Xresources bazi packer geometry manager placer geometry manager alje Tcl naredbu u drugu Tk aplikaciju query internal Tk state background errors query window state poziva window manager

1209/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

8.5. Primjer Tk aplikacije

Slika Tk suelje za output prikaz unix programa

Ovo suelje sastoji se od dva gumba, Run It i Quit, entry widgeta u koji se unosi naredba i text widgeta za prikaz rezultata izvravanja unix programa. Skripta izvrava program kroz pipeline.

Primjer

Tk program za output prikaz izvravanja unix programa

#!/usr/local/bin/wish -f # execlog - run a UNIX program and log the output

# Set window title wm title . ExecLog # Create a frame for buttons and entry.

frame .top -borderwidth 10 pack .top -side top -fill x

# Create the command buttons.


1210/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

button .top.quit -text Quit -command exit set but [button .top.run -text "Run it" -command Run] pack .top.quit .top.run -side right

# Create a labeled entry for the command label .top.l -text Command: -padx 0 entry .top.cmd -width 20 -relief sunken \ -textvariable command pack .top.l -side left pack .top.cmd -side left -fill x -expand true

# Set up key binding equivalents to the buttons bind .top.cmd <Return> Run bind .top.cmd <Control-c> Stop focus .top.cmd

# Create a text widget to log the output frame .t set log [text .t.log -width 80 -height 10 \ -borderwidth 2 -relief raised -setgrid true \ -yscrollcommand {.t.scroll set}] scrollbar .t.scroll -command {.t.log yview} pack .t.scroll -side right -fill y pack .t.log -side left -fill both -expand true pack .t -side top -fill both -expand true

# Run the program and arrange to read its input proc Run {} { global command input log but if [catch {open "|$command"} input] { $log insert end $input\n } else { fileevent $input readable Log $log insert end $command\n

1211/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

$but config -text Stop -command Stop } } # Read and log output from the program proc Log {} { global input log if [eof $input] { Stop } else { gets $input line $log insert end $line\n $log see end } } # Stop the program and fix up the button proc Stop {} { global input but catch {close $input} $but config -text "Run it" -command Run }

1212/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

ZAKLJUAK
Tcl ima ulogu jezika kojim se konfiguriraju i izgrauju aplikacije. Tcl je kao skriptni jezik pogodan za automatiziranje rutinskih poslova. Koritenjem Tcl interpretera mogue je izgraivanje aplikacija kao niz jednostavnih operacija sastavljenih skriptom na nain kako to najvie odgovara odreenim potrebama. Doputena je kontrola nad aplikacijom od strane drugih programa, inei aplikacije jo funkcionalnijim. Ono ime se Tcl interpreter razlikuje od drugih shell-ova je sposobnost njegovog ugraivanja u aplikacije. Tcl se pokree na vie platformi pa tako postoje verzije za UNIX, Windows i Macintosh. Povrh svega Tcl je besplatan.

1213/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

Elizabeta Velkavrh Alja Pavli-Raver Eliot Karlo Pavlet

DISTRIBUCIJA LINUXA/UNIXA
(Verzije linuxa/ unixa danas u upotrebi)

1214/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Distribucija Linuxa/Unixa

UVOD
Distribucije su zapravo gotovi paketi programa koji ine cjeloviti operativni sustav. Dakle, kada govorimo o distribucijama, mislimo na odreeni skup programa i koncepata koji ine operativni sustav. Ovaj dio teksta namijenjen je poetnicima Linuxa, tj. savjet kako odabrati Linux distribuciju. Za poetak najbolje je odabrati distribuciju po openitoj potrebi korisnika. Svaka distribucija je kompletni operacijski sistem, ukljuujui Linux kernel i sve utilitie te razne programe koji su potrebni te spremni za instalaciju i upotrebu. Veina distribucija ukljuuje na tisue programskih paketa, jednostavnih grafikih suelja, office programa i igrica. Postoje razliite Linux distribucije, od jednostavnih do punerukeposla distribucija. Sa aspekta novopeenih korisnika, najsigurnije je krenuti od jednostavnih koje emo nekoliko naknadno obraditi, a dodatne informacije o instalaciji, vidjeti na stranici Linux Documentation Project te listu ostalih distribucija koja se tjedno osvjeava na http://lwn.net. Prije samog odabira distribucije, dobro je paljivo proitati opis same distribucije te je usporediti s vlastitim potrebama. Svaka distribucija je namijenjena posebnom tipu korisnika. Znai, neke su optimalne za funkciju kao serveri, neke optimalne za igrice te neke su optimalne za desktop i office upotrebu.

1215/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

MALO O LINUXU
Linux je slobodan i besplatan operativni sustav slian Unixu. Linux je stvoren i razvijan ujedinjenim snagama tisua hakera entuzijasta irom svijeta povezanih putem Interneta. Linux je objavljen pod GNU GPL licencom, to znai da je njegov izvorni kod dostupan svima. Svi GNU programi koji su takoer potrebni da bi cijeli sustav radio su takoer pod slobodnom licencom, a tako i mnogi drugi programi. Zahvaljujui ovome, razliiti programeri razvijaju puno razliitih "distribucija" Linuxa, od kojih svaka ima neke posebnosti, iako su sve jednako funkcionalne. Najpoznatije su Red Hat, Debian, Slackware, SuSE i Mandrake. Linux se moe instalirati i koristiti na mnogim platformama, raunalima baziranim na Intelovim i slinim ( x386 ) procesorima, na Alphama, Motorola 68K procesorima, PowerPCu, Macu, Atariu, Amigi i ostalima. Prvi sustav koji bi se, u retrospektivi, s pravom mogao nazvati Unixom, nastao je 1969. u Laboratorijima AT&T-a, to je i bilo razlogom zato je AT&T drao licencu na samo ime Unix dugo vremena, pa su drugi proizvoai iz razloga copyrighta "izmiljali" svakakva imena, ili bi se Unix pisalo kao Un*x... AT&T danas za pria nije osobito bitan, ali zbog sveg ovog se Unix, pisan u jednini, vie smatra kao neka "opa imenica", dok govorei o konkretnim operativnim sustavima treba govoriti o Unixima, u mnoini. Linux je jedan od Unixa, besplatan i zadnjih godina jedan od najpopularnijih. Komercijalne Unixe proizvode mnoge informatike tvrtke - HP (HP-UX), IBM (AIX), Sun (Solaris), Novell (UnixWare), SCO, Digital... Linux nije jedini besplatan Unix - prije njega to je bio takozvani FreeBSD - koji se nastavio razvijati i usporedo s Linuxom, ali nikad nije zadobio niti djeli njegove popularnosti, a u zadnje vrijeme i neki proizvoai komercijalnih Unixa poinju nuditi besplatne licence odreenim skupinama korisnika, oito potaknuti Linuxovim uspjesima. Linux je nastao 1991. - u slobodno vrijeme, iz hobija, rad na Linuxu zapoeo je Linus Torvalds, tada student na sveuilitu u Helsinkiju. Linus je u meuvremenu postao guru i

1216/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

boanstvo za prilian broj sljedbenika Linuxa koji u njemu vide protuteu ulozi kakvu ima Bill Gates. Linus se pravda kako je po njegovom izvorno ime daleke 1991. trebalo biti "Freax" (Free kao besplatno + X, po grafikom suelju Unixa), ali je administrator FTP sitea sveuilita u Helsinkiju, preko kojega su se prve beta verzije distribuirale zakljuio da je to nakazno ime - to i jest - i vratio ga u Linux, to je bila radna verzija imena za osobnu uporabu (dotad, a otad i javnu). Torvalds je 1991. na Internet, preko maloprije spomenutog FTP sitea, izbacio prvu javnu verziju (0.02 - malo kada smo uli za nii broj verzije), i rad se, uz regrutiranje sve veeg broja pristalica, ali stalno pod Torvaldsovim vodstvom i nadzorom, nastavio do 1994., kad je konano izbaena verzija 1.0 Linuxova kernela. Danas je Linuxov kernel ve "zagazio" u 2.x verziju, no neka vas nizak broj ne zavara da je Linux komercijalan sustav, poput Windowsa NT ili NetWarea, brojana oznaka verzije bez problema bi bila "napuhana" na 4.0, 5.0, 8.0 ili koliko bi ve bilo potrebno.

1217/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

GNU POKRET
GNU projekt je jedan projekt koji je poeo jo 1984. Pokreta mu je Richard M. Stallman, poznatiji kao autor popularnog editora Emacs. Cilj projekta je stvoriti potpuno slobodan, kvalitetan Unix-like operativni sustav. Ovdje rije slobodan znai da je sustav otvoren i dostupan svima, zajedno s izvornim kodom. GNU projekt je do sada dosta napredovao jer u njemu sudjeluje nekoliko tisua programera koji bez novane naknade ( volonterski ) rade programe koji su potrebni njihovom operativnom sustavu. Jedina komponenta koja nedostaje je kernel (postoji GNU kernel koji se zove Hurd, ali njegov razvoj je dosta usporen, posebno u zadnje vrijeme) i tu uskae Linux. Kada je student Linus Torvalds na Sveuilitu u Helsinkiju 1992. napravio vlastiti kernel, to je radio iz istog hobija. Prikljuili su mu se mnogi programeri i ve 1993. izala je nova, radna verzija Linux kernela. Tada su ljudi iz GNU projekta uvidjeli kako bi bilo dobro uzeti Linux kernel i uklopiti ga s GNU programima jer njihov se kernel Hurd razvijao sporo. Nakon nekoliko godina rada i razvoja nastao je sustav kakvog danas poznajemo pod (pogrenim) imenom Linux.

1218/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

LINUX DISTRIBUCIJE Najpoznatije Linux distribucije Linux distribucije


Mandrake Linux
Mandrake Linux zapoeo je Gal Duval, to je distribucija koja je stekla ogromnu popularnost od svoje prve pojave u srpnju 1998. Developeri su od Red Hat distribucije promijenili grafiko radno suelje u KDE i Gnome, te dodali easy-to-use instaler, prekidajui tako mit da je Linux teko instalirati. Mandrake pri hardware detekciji automatsko vri particioniranje diska koje je u prednosti, te se od mnogih smatra najboljim u industriji i mnogi su se nali u Mandrake-u tamo gdje su ostale distribucije zakazale u odreenim potrebama. No, s obzirom na ipak neto veu sloenost Mandrake-a, hardware-ski zahtjevi ove distribucije su vei. Iz tog razloga preporua se da raunalo na koje se instalira Mandrake distribucija ima najmanje Pentium procesor, sa barem 32 MB RAM-a , te oko 800 MB (ili vie) slobodnog prostora na disku (nije fiksan zahtjev ovisno o broju paketa npr. moe se prilikom instalacije odabrati samo jedno grafiko suelje KDE, a ne i GNOME. ). Poeljno je da nakon instalacije ostane slobodnog prostora na disku (ako je mogue 200 MB). Kako bi se naknadno mogle dodavati aplikacije koje ne dolaze na instalacijskim CDima (npr. Open Office). Paketi koji nisu odabrani prilikom instalacije, a kasnije zatrebaju, lako se mogu naknadno dodati koritenjem Software Manager programa. Mandrake Linux je postala popularna distribucija meu novim korisnicima Linuxa, te meu onima koji trae alternativni operacijski sistem. Razvoj ove distribucije je u potpunosti otvoren i transparentan sa novim paketima koji se nalaze u cooker direktoriju na internetu u svako doba. Kada se objavi nova verzija, te ulazi kao prikladan za betu, cooker snapshot je prihvaa kao first beta. Beta proces testiranja je kratak i intenzivan. Poinjui sa verzijom 9.0, taj proces je postao dui i temeljitiji. Beta mailing lista je jako zauzeta, ali se moe ubrzo dobiti odgovor na bilo koji problem koji se prijavi. Rezultati ovakvog razvijanja su pogled unaprijed u prenoenju prava na drugoga, kao moderna i suvremena Linux distribucija. S obzirom na uestalo mijenjanje korisnici e uoiti vie greaka i manju stabilnost nego kod drugih distribucija.

1219/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Red Hat i Fedora Core


Za mnoge, ime Red Hat je distribucija koja predstavlja Linux, kao to i je sigurno najpoznatija Linux kompanija na svijetu. Osnovana 1995. od Boba Younga i Marca Ewinga. Red Hat, Inc. je tek nedavno pokazala znakove profitabilnosti, odreen kao linija proizvoda - Red Hat Enterprise Linux product line. Ipak, Red Hat Linux 9.0 je bila posljednja verzija u liniji Red Hat Enterprise Linux, koju je zamijenila Fedora Core distribucija krajem 2003. Kako je Red Hat slubeni sponzor Fedore, razvija se u zajednikom okruenju, sa malim razmacima, te sudjeluje uglavnom kao test baza za Red Hat Enterprise Linux. Vana osobina ove distribucije je RPM, Red Hat Package Manager. Taj program predstavlja ogroman napredak; omoguava isto instaliranje i deinstaliranje aplikacija i komponenti operacijskog sustava, kao i kernel tj. samu osnovu OS-a. RPM sada u biti koriste i sve ostale distribucije osim Debiana. to je toliko specijalno u vezi Red Hat Linux i Fedore Core? To je ne uobiajena mjeavina suzdranih i vodeih paketa (aplikacija) stavljenih zajedno na vrh ispred mnogih znanjem jakih utilitie-a razvijenih kod kue. Kad se objave novi paketi, objavi se nova beta verzija, paket verzija se zamrzne, osim sigurnosnih update-ova. Rezultat je dobro testirana i stabilna distribucija, te beta program i prijavljene greke su otvorene za javnost, te imaju nekoliko mailing lista. Red Hat Linux postala je dominantna distribucija u itavom svijetu. Drugi razlozi za uspjeh Red Hat distribucije su veliki izbor servisa koje kompanija nudi. Software paketi su jednostavni za osvjeavanje putem Red Hat Network-a, skup besplatnih software-a i vrijednih informacija. Visoki rang servisa podrke i poduzetnosti Linux produkta su dostupni od kompanije i iako ne uvijek jeftini, moemo rei da je pozitivni razlog i struno osoblje koje nam stoji na raspolaganju. Izmeu ostalog kompanija je razvila i certificirani program za daljnje irenje ideje distribucije RHCE (Red Hat Certified Engineer) obrazovanje, te pregled je dostupan u velikoj veini dijelova svijeta. Svi ovi faktori su doprinijeli injenici da je Red Hat distribucija sada prepoznatljivo ime u IT industriji.

1220/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Debian GNU/Linux
Debian GNU/Linux, zapoeo je Ian Murdock 1993., te je ishod napora developera da stvore nekomercijalnu distribuciju visoke kvalitete, moda ak i najiu formu od idealista koji su zapoeli free software movement. Debian Linux je lako nadogradiva distribucija, uglavnom sastavljena od softvera slobodne distribucije iz vie razliitih izvora i sustava. Jedina distribucija koju zajedno razvijaju na stotine developera iz itavog svijeta, u istom duhu kao i Linux i druge operacijske sustave otvorenog izvornog koda. Vie od 400 odravatelja radi na vie od 1500 paketa i poboljava Debian Linux. Prednosti Debian Linuxa su njegova nadogradivost, dobro definirane meuzavisnosti paketa i otvoren razvoj. Profinjeni sustav za pronalaenje greaka omoguava korisnicima lako prijavljivanje greaka i sigurnosnih propusta s kojim se zatim Debian zajednica brzo obraunava. U bilo koje vrijeme procesa razvitka, tri su osnovna djela u glavnom direktoriju stabilno, testiranje i nestabilno (takoer poznat kao sid). Kada se pojavi nova verzija paketa, smjetena je u djelu nestabilnoi eka prvo testiranje. Ako proe dalje, paket se pomie u sljedei dio testiranja, gdje opet prolazi rigorozno testiranje koje moe potrajati mjesecima, nakon toga se proglaava stabilno stanje. Kao rezultat gore navedenog, ova distribucija je moda ak i najstabilnija i najpouzdanija, a sigurno dinamina, jer izdanja se zamrzavaju svaka tri mjeseca, a FTP arhive dnevno osvjeuju.

Gentoo Linux
Gentoo Linux je stvoren od Daniela Robbinsa, prijanjeg Stampede Linux i FreeBSD developera. Gentoo Linux je izvorno-bazirana distribucija. Za razliku od uobiajenih distribucija, Gentoo ne isporuuje ve kompajlirane pakete, nego samo izvorne kodove aplikacija, koje se onda izravno na korisnikom sustavu prilagoavaju i kompiliraju. Gentoo je prvi put u stabilnoj verziji puten u oujku 2002.

1221/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Prednost ove distribucije je naime to to raspolae vlastitim upraviteljem programskih paketa, koji nadilazi osnovno upravljanje s RPM i DEB-paketima. Pod nazivom "Portage" objavljen je sustav za upravljanje paketima, osmiljen kao port-sustav u najboljoj tradiciji BSD-ovih portova. Sama distribucija pretpostavlja tono odreeno suelje, te zahtijeva i stanoviti stupanj predznanja i iskustva u radu s GNU/Linuxom. Isto tako, updating nove verzije se svode na jednostavne komande, te programski paketi se dre u centralnom spremitu koji su obino najnovije verzije. S druge strane, instalacija Gentoo-a itave distribucije sa posljednjim grafikim desktopima, multimedijom i razvijakim alatima je dosadan i dug proces (nekoliko dana i na najbrim raunalima).

SuSE
SuSE je jo jedna kompanija fokusirana na desktop, korisnicima svih razina, od poetnika do strunjaka, nudi brz i lagan ulaz u svijet Linuxa i Unixa. Mogunosti kao to je instalacija s CD-ROM-a pomou izbornika, modularna disketa za dizanje sustava, prirunik od 400 stranica i S.u.S.E-ov alat za administraciju sustava, YaST (alat za instaliranje i administriranje koji konfigurira mreu), omoguavaju brzo instaliranje i poetak rada u Linuxu, te nastavak rada bez problema. S.u.S.E. takoer nudi niz podranih X servera koji podravaju najnovije grafike kartice. Dokumentacija koja dolazi sa produktima, je ubrzo oznaena kao najkompletnija, najtemeljitija i najupotrebljiva na daleko. Distribucija je postigla vano trite u Europi i Srednjoj Americi, no ne i u Aziji i u drugim dijelovima svijeta. Razvoj SUSE-a je nastavio Novell krajem 2003. SUSE svoju distribuciju razvija iza zatvorenih vrata, tako da javne bete nisu osigurane. Za testiranje imaju policu (pravilo) da software nije slobodan za skidanje jo dugo poslije verzija u prodaji. tovie, SUSE ne osigurava ni jednostavnu instalaciju ISO images, no profesionalno izdanje je dostupno za instalaciju putem FTP-a, inae oko 1-2 mjeseca poslije slubene verzije.

1222/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Slackware Linux
Slackware Linux, stvoren od Patricka Volkerdinga 1992., jest najstarija ivua Linux distribucija. Ova distribucija ne nudi grafike konfigurirane alate, nego vie mogunosti sa tekst-baziranim instajlerom. Gdje ostale distribucije se trude razviti easy-to-use suelje za mnoge uobiajene utilitie-e, Slackware ne nudi odravanje i sve se jo radi kroz konfiguracijske fajlove. Ba zbog toga, Slackware je jedina preporuljiva distribucija za one koji ele nauiti vie o Linuxima. Nita manje zbog toga, Slackware ipak ima magini utjecaj na mnoge. Ova distribucija je uvelike stabilna i sigurna vrlo povoljna za razvijanje posluitelja. Iskusni Linux administratori smatraju da ova distribucija ima manje bagova, jer koristi pakete prijanjih formi, bez previe in-house unapreivanja, to uzrokuje vee anse za nove bagove. Putanje novih verzija je dosta rijetko (jedanput na godinu), iako noviji paketi su uvijek dostupni za skidanje poslije slubenog putanja. Slackware distribucija je idealna za one koji su zainteresirani za unutarnje osobine Linuxa. Moda najbolja karakteristika ove distribucije je ako se naie na bilo kakav problem, treba pronai Slackware korisnika. Slackware korisnik e sigurno puno prije pomoi neko korisnici drugih distribucija.

Lycoris Desktop/LX
Lycoris je mala, vrlo komercijalna i poprilino ambiciozna distribucija. Osnovana je od Josepha Cheeka, koji je navodno uz jo etvoricu pokrenuo Redmond Linux, 2000., Redmond, savezna drava Washington, SAD. Dananji Lycoris si je uzeo za cilj sastavljanje jedne distribucije, koja e na kunim raunalima slijediti aktualne koncepcijske XP-trendove, te prema tome stvoriti easy-to-use distribuciju, koja bi olakala prelazak sa Windowsa u Linux i to omoguavala na to bezbolniji nain. Lycoris distribuciju prema tome korisnik moe koristiti slino kao i neko Windows-raunalu, koja nunost dodira korisnika sa samim operacijskim sustavom svodi na najmanju moguu mjeru, klonirajui tako My Computer i Network Neighborhood, kao i atraktivno grafiko suelje (boje koje korespondiraju s XP-predlokom), koje jako lii na Windows XP. Isto tako s druge strane ono to nedostaje su brojni alati i

1223/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

programski paketi za razvoj programa na koje su korisnici naviknuti kod gotovo svih drugih Linux distribucija. Ova distribucija koja djelomice sadri elemente zasnovane na Calderinom OpenLinuxu, podrava Red Hat Packet Manager, tako da do stanovite mjere nema problema s integracijom ostalih paketa kojih Lycoris nema u svojoj ponudi. Treba jo napomenuti da samo godinudvije unazad trite jo nije bilo dovoljno zrelo za jedan Desktop-Linux, no ipak jednostavna funkcionalnost ne mogu prikriti injenicu, da distribucija zahtjeva jo podosta rada na njenom konanom oblikovanju. Tako da Lycorisov Desktop/LX je ocijenjen za poetnike vrlo dobar, pogotovo za prijelaze s MS Windowsa, no za naprednije korisnike ne zadovoljava.

Xandros Desktop
Xandros je kreiran od ostataka Corel Linuxa, sasvim uspjenog pokuaja pribliavanja Linuxa mnotvu 1999., ali naputen od kompanije kada je naila na financijske probleme. Xandros je kupio distribuciju u kolovozu 2001., te pustio prvu i jedinu verziju u listopadu 2002. Xandros Desktop je bez sumnje najpristupanija distribucija na tritu, te najbolja preporuka za one first-time Linux korisnike. Dok je broj aplikacija ukljuenih u distribuciju ogranien, developeri su ipak osigurali da taj broj radi savreno. Xandros se takoer pobrinuo za samo njihov fajl manager i ostale odgovarajue komponente. Dostupna su dva izdanja: Deluxe ($99) i Standard ($40), jedine razlike izmeu ova dva izdanja su nedostajanje CrossOver Offica i Plugin-a (kompaktni sloj koji omoguava pokretanje Microsoft Offica i ostalih Windows produkata na Linux) i NFTS particijskog alata (za Windows XP korisnike) kod jeftinijeg izdanja.

1224/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

LindowsOS
Lindows.com je zapoeo Michael Robertson, u listopadu 2001., inae osniva i prijanji CEO od MP3.com - sitea koji je omoguavao (legalnu) kupovinu glazbe u MP3 formatu, te promovirao neovisne bandove, koji su preko njegovih stranica traili svoju publiku bez posredovanja izdavakih kua.. LindowsOS predstavlja najnoviji pokuaj dovoenja Linuxa na desktop scenu i njegovog pretvaranja u "pravu" alternativu Microsoftovim operativnim sustavima, emu bi trebala pomoi i njegova mogunost da pokree aplikacije pisane za Windowse. Prvo javno putanje LindowsOS je objavljeno u studenom 2002. pod imenom LindowsOS 3.0. Ova distribucija je zasnovana na distribuciji Linuxa pod imenom Xandros koja je, opet, zasnovana na uvenom Debianu. Osim osnovne distribucije, druga glavna komponenta sustava je WINE (Wine Is Not an Emulator) - emulator Windowsa ve koriten u slinim projektima, koji LindowsOS-u omoguuje pokretanje aplikacija pisanih za Windowse. Dodana je takoer i nova osobina nazvana Click'n'Run - mogunost instalacije softvera izravno s Lindows.com web-stranica, kao i pretraivanje, usporeivanje i kupovinu softverskih naslova koje nas zanimaju, poboljana instalacijska procedura - brzina i jednostavnost instalacije. Testne verzije (sneak previews, u terminologiji tvrtke) dostupne su, naime, tek odabranim lanovima Lindows Insider zajednice, formirane za pruanje podrke ovom projektu, iji lanovi za "upad" moraju platiti 99 USD. Ta svota im, meutim, ne osigurava i dobivanje testnih verzija LindowsOS-a, koje se nude tek nekolicini testera iz Insider programa, koje u tvrtki odabiru prema neobjavljenim kriterijima Malobrojni testeri koju su imali priliku vidjeti LindowsOS na djelu potvruju ono to se i do sada znalo o Wineu: Windows aplikacije i pod ovim sustavom rade sporo, loe i esto se rue. Kompanijina ogromna marketinka propaganda (glavni razlog tome jest Microsoftova tuba protiv tvrtke, zbog navodne "krae" registriranog naziva Windows), no to je rezultiralo da LindowsOS (i Linux) ubace meu glavne medije instalirane na novim raunalima prodanim diljem US-a i UK-a.

1225/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Caldera OpenLinux
Caldera isporuuje OpenLinux 1.2 kao tri proizvoda: OpenLinux Lite, OpenLinux Base i OpenLinux Standard. OpenLinux Lite besplatan je proizvod za iskuavanje (Calderin integrirani Desktop radi samo 90 dana -- potpuno licencirana verzija desktopa ukljuena je u proizvode Base i Standard). OpenLinux Lite moe se skinuti s Calderinog FTP servera ili za cijenu isporuke dobiti na CD-u. Napravljena je i za izdavae knjiga ili softvera koji tako mogu ponuditi stabilnu komercijalnu distribuciju uz svoje knjige ili programe. OpenLinux Base sadri sve to i Lite i potpun je Linux operacijski sustav, s jednostavnom instalacijom, integriranim Desktopom, Internet klijent i server komponentama i povezivou na Internet. OpenLinux Base ukljuuje i Netscape Navigator te potpunu dokumentaciju. OpenLinux Standard ukljuuje ono to je u Base, kao i vie vrhunskih, poznatih, komercijalnih programa (kao to je Netscape FastTrack Web Server, Netscape Navigator Gold Web browser i autorski alati, baza podataka ADABAS D, StarOffice za uredske poslove, Caldera OpenDOS te NetWare klijent i administracijski alati). Sada su dostupne sve tri verzije OpenLinuxa 1.2. Pomou Caldere OpenLinux vidjet ete cijeli novi svijet monog raunalstva, ak i mo Unix radne stanice na svom PC-u. Koritenjem Linux kernela, OpenLinux vam prua brzinu i stabilnost usporedivu sa sustavima koji kotaju tisue dolara. OpenLinux takoer nudi: Prava viezadanost zbog koje mnogo tekstualnih ili grafikih aplikacija radi istovremeno; nijedna aplikacija ne moe uzrokovati ruenje druge, kao kod manje robusnih sustava. Linux 2.0 kernel prua iznimno brz TCP/IP pristup Internetu, uz montane drivere za ureaje za najdjelotvornije koritenje mogunosti vaeg sustava. Jednostavna, brza instalacija s izbornicima i automatskim pronalaenjem vaeg hardvera ini instaliranje lakim na veini raunala. Ukljueni Vodi u zapoinjanju rada postupke opisuje korak po korak, uz upute ako naiete na probleme. Nijedan drugi Linux sustav nema tako potpuno, integrirano grafiko suelje s konfiguracijskim alatima i grafikim editorom. Njegove mone drag & drop sposobnosti dolaze podeene s tisuama ikona i opcija aplikacija. Desktop vam nudi prikladno mjesto za pohranu omiljenih programa i podataka kojima odmah moete pristupiti. Desktop vam prua:

1226/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Drag & drop pokretanje programa s podacima. Integrirani grafiki editor teksta. Lak pristup nizu monih alata za konfiguriranje sustava. Prilagodljivu plou s ikonama, promjenjiv izgled i mijenjanje drugih opcija. Moan pristup datotekama pomou drag & dropa ili grafikih dijaloga. Caldera je jedan od rijetkih distributera Linuxa koji nude podrku e-mailom i telefonom. Podrka korisnicima OpenLinux Base (samo e-mail) i Standard (telefon i e-mail) potpuna je (Standard korisnici imaju pravo na 5 poziva tokom prvih 30 dana). Za Lite nema tehnike podrke. OpenLinux Base i Standard isporuuju se s potpuno licenciranim verzijama Caldera Desktopa bez roka uporabe. OpenLinux Lite isporuuje se s verzijom Desktopa iji rok uporabe istie nakon 90 dana.

Faq
Potreban prostor na disku
Openito je za Linuxe potrebno oko 10Mb za minimalnu instalaciju, koja odgovara samo za isprobavanje Linuxa, te nita drugo. Tipina server instalacija, koja ukljuuje X Window System GUI, otprilike zauzima 80Mb. Za instaliranje manje Debian GNU/Linux platforme potrebno je od 500Mb do 1GB, koja ukljuuje kernel izvor koda, neto prostora za korisnike mape i swap particije. Za instaliranje komercijalne distribucije koja sadri desktop GUI okruenje, komercijalni word procesor i front-office, priblino potrebuje 15.1 GB prostora na disku, dok za full instalaciju Debian GNU/Linux distribuciju potrebno je i do nekoliko gigabajta prostora na disku.

Minimalna i maksimalna potrebna memorija


Linuxu je potrebno najmanje 4Mb, no onda je potrebna instalacijska procedura dok se instalira disk swap prostor. Linux e raditi komforno sa 4MB RAM-a, iako pokretanje GUI okruenja je sasvim nepraktino, radi sporo radi potrebe za swap diskovnim prostorom. Neke aplikacije, npr. StarOffice, potrebuju 32MB radne memorije, te kompilacija C++ koda lagano kombinira radne i virtualne memorije preko100MB. Postoji distribucija naziva Small Linux, koja e raditi sa 2MB RAM-a.

1227/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Adresiranje vie od 64MB memorije, koja je kod veine standardnih kernela postavljena kao gornja granica. Vie o tome na: http://FAQ/Linux-FAQ/linux

Najbolja distribucija
Najbolje od bilo ega zavisi o potrebama korisnika. No meutim, diskusija na ovu temu esto se odvija na Usenet-u. esto ova tema je vatreni mamac, no govoriti openito gubitak je vremena. Licenca za besplatni software nije dovoljno ograniavajua, pa uz malo vie iskustva, mogu se obavljati vlastita testiranja.

Kako nabaviti distribuciju


Linux distribucije su ekstremno jeftine uobiajeno oko $30 za kompletnu distribuciju, te svugdje od $70 do $150 za podebljane sisteme sa vie server programa ili razvijakih alata. ak i $30 osnovni sistemi sadre ekvivalentno na tisue dolara prikladnih alata. U ovom sluaju potroen novac ulae se daljnje razvijanje, te veliku veinu se moe pronai kao open source project. Komercijalne distribucije su dostupne iz specijaliziranih trgovina ili naruivanjem preko web stranica. Svaka distribucija omoguava skidanje sistema na njihovoj slubenoj stranici. Na taj nain se zadovoljava uvjet za licencu samog softwera, pa ako odreeni iznos za distribuciju predstavlja problem, na ovaj nain se moe to izbjei. Nije neuobiajeno to korisnici znaju napraviti kompromis izmeu plaanja i skidanja, za primjer kupnja verzije 6.0, a skidanje nadopune verzija 6.1, 6.2.

BSD Unix
Poetak BSD-a
Pria o BSD-u, kao i danas najpoznatijim, besplatnim, verzijama istog, FreeBSD, NetBSD i OpenBSD-u poinje jo u studenom davne 1973-te godine, kada su Ken Thompson i Dennis Ritchie na 'Symposium on Operating Systems Principles' odranom na Purdue sveuilitu predstavili svoj rad o UNIX operativnom sistemu. Profesor Bob Fabry, sa

1228/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Berkeley sveuilita, jedan od prisutnih na konferenciji, bio je izrazito zainteresiran za kopiju UNIX operacijskog sistema radi eksperimenata na Berkeley sveuilitu. Dolaskom UNIX-a na Berkeley poeo je i rad na INGRES bazi podataka, koja je bila pretea jedne od najboljih baza podataka dananjice, Postgres-a. Prvu zvaninu distribuciju UNIX-a napravio je Bill Joy, autor vi-a (to je impliciralo i termcap), ovjek koji je znaajno unaprijedio tadanji Pascal interpreter, jedan od osnivaa Sun Microsystems-a i jedan od najveih UNIX hakera svih vremena. Od tog trenutka postoji ime BSD-Berkeley System Distribution. Ubrzo je slijedio i razvoj DARPA mree sa osnovom na Berkeley sveuilitu, ime je uslijedio i release 3BSD i 4BSD distribucija. Poslije izlaska BSD4.1 (koji se u prvom trenutku trebao zvati 5BSD, ali zbog problema vezanih sa imenom komercijalnog izdanja SystemV UNIX-a, Berkeley je opet morao uiniti odreene ustupke) uslijedila je pojava revolucionarnog BSD4.2 operacijskog sistema sa implementacijom TCP/IP protokola. Uskoro je, logino, poslije mnogih komplikacija, uslijedila BSD4.3 distribucija kao i MACH derivat, nakon ega je 1991. uslijedila i pojava 386/BSD operativnog sistema iji je razvoj predvodio Bill Jolitz, ali on nije bio u stanju sam ispratiti sve popravke bug-ova kao i sve promjene koje su vrene u originalnom BSD-u. Njegov rad bio je oivljen sa pojavom NetBSD-a, koji je u svojoj osnovi derivat 4.4BSD i 386/BSD-a. Ubrzo (1992. godine) su uslijedili i pravni problemi sa AT&T-om sa pojavom BSDi-a, prvog komercijalnog BSD operacijskog sistema, kao i gubitak prava na koritenje imena UNIX. Od tada su BSD i UNIX, kontradikcijsko, postali dvije razliite stvari. Tokom 90-tih godina polako je poela kristalizacija situacije vezana za BSD operacijske sisteme i na ovom mjestu bi spomenuli i razdvojili 3 glavne BSD distribucije koje su poele odvajati od glavnog stabla i koje su aktualne danas.

Distribucije BSD-a
NetBSD BSD operativni sistem baziran na BSD4.4 i 386/BSD operacijskom sistemu. Ime je dobio zato to je do 1998. godine rad na njemu bio vezan iskljuivo za Net, a komunikacija meu developerima je bila bazirana na chatu i mailu. Njegova glavna odlika je izuzetna portabilnost (pogledati www.netbsd.org), kompaktan sistem sa odlinim packaging sistemom, kao i velika pouzdanost. Njegova velika mana je nedostatak SMP podrke (ako ne raunamo nezvanine patcheve kao to je podrka za dvoprocesorske VAX maine), ali je to u neku ruku i logino, poto

1229/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

je glavni cilj ove distribucije portabilnost, a ne striktna orijentacija ka malom broju hardverskih platformi (za razliku od FreeBSD-a). FreeBSD Drugi potomak 386/BSD-a, nastao 1993.godine razdvajanjem na dva projekta NetBSD i FreeBSD. Za razliku od NetBSD-a, FreeBSD se razvija za samo 2 arhitekture: i386 i alpha arhitekture. Pored dobrog security-a, odlikuje se i fantastinim performansama, kao i najboljom implementacijom TCP/IP stack-a to ga ini jednim od omiljenih izbora za web servere. U principu, FreeBSD je najpopularnija BSD distribucija i to, osim gore spomenutog razloga, i zbog toga to ima sjajno odraen ports sistem za update i odravanje sistema, kao i jako logino organiziran sistem u cijelosti (to je generalno odlika svih BSD baziranih operacijskih sistema). OpenBSD Najmlai BSD izdanak, nastao 1996. godine zahvaljujui loem karakteru Theo De Raadt-a jednog od originalnih developera NetBSD, koji je uslijed neslaganja sa ostatkom NetBSD developera odluio napustiti NetBSD projekt i zapoeti svoj, koji je nazvao OpenBSD. Zahvaljujui tome to ivi u Kanadi, bio je u prilici zaobii demokratsku 'USA crypto policies' i napraviti operacijski sistem sa izrazito jakim security-em, kao i sa kriptografijom integriranom u sam sistem, kao i neim to se zove proactive auditing, koji se bazira na konstantom 'eljanju' koda samog kernela i traenjem moguih exploit-a, pa se esto dogaa da mogui sigurnosni problem je ve otklonjen, prije nego to se on uope i otkrije. Svakako najimpresivniji operacijski sistem dananjice sa aspekta security-a.

1230/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Razlike BSD-a i Linuxa


Bitno je naglasiti razliku u terminima 'BSD distribucija' i 'Linux distribucija', poto se kod BSD distribucija radi o iako velikim dijelom potpuno kompatibilnim, a ipak razliitim operacijskim sistemima (itaj kernelima), dok kod distribucija Linuxa govorimo o istom operacijskom sistemu u drugom pakiranju, iako je u posljednjih 2 godine fork-ovanje kernela postala omiljena disciplina velikih distributera Linux operacijskih sistema. Ono to ini BSD operacijske sisteme, jest slian nain organizacije, zajednika osnova, kao i slina filozofija. Zato BSD bazirani operacijski sistemi nisu nikada postali jako popularni? Odgovor je jednostavan, BSD nikada nije ciljao na popularnost, on je jednostavno alat.

Live CD distribucije
4.5.1 Knoppix
Razvijen od Klausa Knoppera, slobodno se moe rei da je Knoppix baziran na Debian distribuciji podigao standarde na novu razinu, pogotovo s automatskim hardware detekcijom tako da je mnoge komercijalne Linux distribucije posramljeno ostavio iza sebe.To je u cijelosti funkcionalna distribucija ve samim pokretanjem izravno s kompaktnog diska, ogromnog izbora software-a, dekompresija on-the-fly (900 paketa s nekih 2000 programa), mogunost koritenja i za spaavanje ve instaliranih sustava ili provjeru omreja, moe posluiti za demonstraciju Linuxa za one, koji ih jo nisu vidjeli kao test prije nabave. S druge strane, moe se u potpunosti koristiti kao Linux distribucija. Kojim se dobiva potpuno kompatibilan Debianov sustav s vrlo aktualnim paketima, bez zahtjevnosti i sloenosti uobiajeno originalne Debianove instalacije. Sustav je opremljen vrlo dobrim automatskim prepoznavanjem hardwarea i solidnom podrkom za mnoge grafike, zvune i mrene kartice, SCSI ureaje i ostalu periferiju, no i bez grafikih suelja ima to za ponuditi. Uinci i brzina sustava dakako mjerodavno ovise o koliini raspoloive radne memorije, brzini CD-pogona i radnim sposobnostima glavnog procesora.

1231/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Mandrake move
Nakon uspjeha Knoppixa danas najomiljenije ive distribucije Linuxa slijedio je niz drugih proizvoda koji su se zasnivali na istoj filozofiji: dati korisnicima potpunu distribuciju na samo jednom CD-u koju nije potrebno instalirati na disk, nego se moe pokrenuti izravno iz CD-ROM-a. U takav projekt upustio se nedavno i francuski Mandrake, s vrlo dobrim rezultatima... Mandrake Move je nastao jo prole godine i zasnovan je na prethodnoj generaciji Mandrakeove stolne distribucije Mandrake Linuxu 9.2 te mu stoga nedostaju neke od mogunosti i neki od programskih paketa koje e donijeti desetka - na prvi pogled najoitiji je nedostatak novog kernela (generacije 2.6). No ovo e malo kome zasmetati Move se ne koristi za serverske namjene ili kao distribuciju za radna mjesta zahtjevnih korisnika. Ono to je za korisnike daleko bitnije od najnovijeg kernela jesu jednostavnost upotrebe i pouzdana detekcija hardvera za to se Mandrake pobrinuo vie nego dobro. Usmjerenost krajnjem korisniku vidljiva je iz injenice da je Mandrake u ovu distribuciju uvrstio samo jedan program za svaku namjenu: jedno grafiko suelje (KDE 3.2), jedan uredski paket (OpenOffice.org 1.1), jedan web-browser (Konqueror) i tako dalje. Iz raznih testiranja (lanaka) saznali smo da detekcija osnovnih hardverskih komponenti (mi, tipkovnica, grafika kartica, zvuna kartica) je bila gotovo stopostotna. Problemi koje smo uoili veinom su se svodili na postavljanje previsoke ili preniske rezolucije grafikog suelja, to se moe izmijeniti davanjem odgovarajueg parametra pri pokretanju. Pokretanje traje nekoliko minuta i odvija se u dvije faze: prva je tekstualna koja podsjea na pokretanje nekog instalacijskog programa i koja traje vrlo kratko. Druga faza odvija se u grafikom suelju i traje due, prije svega zato to je interaktivna.

1232/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

TABLICA KARAKTERISTIKA DISTRIBUCIJA DISTRIBUCIJA PREDNOSTI User-friendly, Prednosti graf. Mandrake konfiguracije, Velika tehnika podrka, NTFS particija Ogranieni produkti Na iroko se koristi, RedHat Fedora Core Odlina teh. potpora, Puno inovacija obuhvaaju free izdanje, Siromana multimedijska podrka 100% besplatan, lako nadogradiva distribucija, otvoren Debian razvoj, lako Nema puno inovacija kod instalacije, novih verzija Bezbolna instalacija Gentoo individualnih prog. paketa, esto putanje novih verzija Nudi brz i lagan ulazak u svijet Linuxa, izuzetna SuSE posveenost detaljima (dokumentacija), Dostupan samo u prodaji ili putem FTP instalacije, ukljuujui komponente s pravom RPM Nije besplatan, samo putem FTPa Duga i gnjavatorska sistem instalacija, povremena nestabilnost SRC Besplatan je DEB Besplatan je RPM Besplatan je MANE Nove verzije imaju greaka te su inicijalno dostupne samo za lanove MandrakeClub-a RPM Besplatno, sa zakanjenjem SPM DOWNLOAD

prijavljivanje greaka Dugo testiranje

1233/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

YaSTkonfiguracijski alati Stabilna distribucija, malo greaka, Slackware privren Unix principima (iriti i prilagoavati)

vlasnitva

Sva konfiguracija se podeava Text File editorom, limitirana hardverska detekcija TGZ Besplatan je

Idealan za poetnike, Windowsima Lycoris

Neki zastarjeli zahtjeva licencu po mjestu za komercijalnu upotrebu RPM

Nije besplatno, samo 45dnevno probno izdanje

dizajniran da nalikuje programski paketi,

Dizajniran za poetnike, dobar File Xandros Manager i drugi korisni utiliti-i Brza i jednostavna instalacija, oneLindowsOS click instalacija programa Jednostavna Caldera OpenLinux instalacija, nijedna aplikacija ne moe uzrokovati ruenje druge Izuzetna portabilnost, kompaktan sistem, NetBSD velika pouzdanost Dobar security,

Ukljuuje vlasnike komponente, nema free download DEB Nije besplatan

Skup, nedostupne testne verzije, osim ako se plaa pruanje podrke Za Lite nema tehnike podrke, jer rok upotrebe istjee za 90 dana RPM Nije besplatan DEB Nije besplatan

Nedostatak SMP podrke Razvija se za samo

Nije besplatan

1234/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

fantastini FreeBSD performansi, najbolja implementacija TCP/IP stack-a Najimpresivniji OS OpenBSD dananjice sa aspekta security-a Hardverska autodetekcija, pokree se Knoppix direktno s CD-a, bez potrebe za hard disk instalacijom Pokree se direktno s CD-a, jednostavna upotreba, pouzdana Mandrake Move detekcija hardvera

dvije arhitekture: i386 i alpha TBZ Besplatan je

TGZ

Samo putem FTPa

Ako se pokree sa CD-a, mala brzina i izvedba DEB Besplatan je

Zasnovan na prethodnoj generaciji te mu stoga nedostaju neke od mogunosti i prog. paketa RPM Besplatan je

1235/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

LOKALIZACIJA LINUXA I PRIMJENA U HRVATSKOJ

lanovi HULK-a zasluni su i za pokretanje te (ne uvijek redovno) odravanje domaeg linuksakog portala smjetenog na adresi http: //www.linux.hr/ te za nekoliko zanimljivih projekata predstavljenih u zadnje vrijeme. Od tih projekata izdvojili bismo HRID, prvu "pravu" hrvatsku distribuciju Linuxa (jo prije nekoliko godina postojao je MicroLinux - minidistribucija koju je takoer napisao domai autor). Distribucija je zasnovana na Mandrakeu, a sadri lokaliziranu verziju instalacijskog programa te dijela softvera. Na osnovi HRID-a nastale su jo dvije distribucije: HRID.school, predstavljen prije neto manje od godinu dana i namijenjen edukacijskim ustanovama, te HRID.office - uredska distribucija predstavljena u proljee ove godine, nastala u suradnji s tvrtkom Operacijski sustavi.

HRID
HRID je prva hrvatska distribucija. Distribucija je bazirana na Mandrake-u (8.1, cooker), te je gotovo cijeli rad koji je bio uloen u nju poslan upstream developerima. Za razliku od Mandrakea u HRIDu su izbaene razne kineske podrke i nehrvatski prijevodi, te dodani hrvatski korisni sadraj (howto-i, prijevodi, ...). Takoer je bilo u cilju da to sve stane na jedan CD. Dakle, office (u obliku Koffice-a), prevodnici (gcc, prolog, free pascal, ...), alat za net (browseri, icq, ftp, mail...), baze (PostgreSQL, MySQL), web razvoj (apache, php/perl sa podrkom za Psql/mysql...) i sve ostale aplikacije koje se nalaze samo na jednom CD-u. Iako trenutno postoji 1.0 verzija HRID-a, na FTP serveru se nalazi verzija 0.9. Razlike izmeu 0.9 i 1.0 nisu velike (samo malo noviji paketi + kozmetike promjene). Distribucija je namijenjena za one kojima je potreban office, te za one koji imaju programiranje u svom obrazovanju (c/c++, pascal, prolog, ...) - ukljuene su i razne imitacije poznatih Borlandovih suelja (xwpe) kao i druga inovativna suelja (motor) i za one koji ele raditi web programiranje (php/perl/python... sa posgtresql/mysql-om).... Ustvari, iskoristiti ju

1236/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

moe svatko kome to odgovara. U distribuciju su takoer ukljuene mnoge nepravedno zapostavljene aplikacije. Kako autor naglaava u budunosti je planiran i dodatni CD od distribucije koja bi trebala sadravati dodatne killer aplikacije (OpenOffice, XINE (DivX/DVD player), Real Player, Kylix OE, Opera, Quake). Na umu treba imati ipak da je distribucija produkt gotovo samo jednog ovjeka, ali i to je poetak

CULC / Hrvatska konvencija Linux korisnika 2004.


Od 21. do 23. travnja 2004. po jedanaesti put odrana je sredinja godinja Open Source i Linux manifestacija u Hrvatskoj. Mjesto radnje odvijala se kao i do sada na Fakultetu elektrotehnike i raunarstva u Zagrebu, a organizatori su Hrvatska udruga za otvorene sustave i Internet (HrOpen) i Hrvatska udruga Linux korisnika (HULK). Ove godine predavanja su obuhvaala zanimljive aktualne teme: od poslovne uporabe Linuxa u tvrtkama i dravnim institucijama, preko lokalizacije, optimalnog koritenja Open Source baza, SAMBA-e, SNORT-a, uporabe uredskog programskog paketa OpenOffice, razvoja programske podrke pod GNU licencom, do sigurnih beinih mrea pogonjenih Linuxom, te VoIP rjeenja. Sredinja osoba i predava-uvodniar oba konferencijska dana ovogodinje manifestacije bio je g. Ken Coar, dopredsjednik Apache Software Foundation i lan izvornog tima programera Apache Web posluitelja, iji je trenutni internetski trini udio vie od 67%. Open Software: Opportunities Abound predavanje koje je pokualo odgovoriti na dva postavljena pitanja prisutna kod pokretanja tvrtke odnosno posla temeljenog na otvorenoj programskoj podrci: kako se moe zaraditi na neemu to je besplatno i da li su sve dobre nie ve zauzete. Advenced httpd Topics tema koja se bavi unutarnjom logikom rada Web posluitelja pri obradi nadolazeih zahtjeva za isporukom Web stranica. Ovo je jednoipolsatno predavanje je bilo namijenjeno prvenstveno programerima koji bi voljeli zapoeti pisanje vanjskih (extension) modula za Apache posluitelj.

1237/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Jednostavno... Linux
26./27.10.2004. na zagrebakom se Fakultetu elektrotehnike i raunarstva odrala strukovna konferencija Jednostavno... Linux. Taj dvodnevni dogaaj okupio je poprilian broj sudionika te pobudio veliko zanimanje u domaim IT krugovima. Prvi dan konferencije bio je rezerviran za predavanja, podijeljena u dvije grupe, jednu namijenjenu sadanjim, ali i buduim Linux korisnicima, a drugu administratorima Linux raunala. Svoja predavanja na konferenciji odrali su neki od najeminentnijih domaih, ali i stranih Linux strunjaka poput Davida McIntosha iz IBM-a, Marcella Marsa iz Multimedijalnog instituta, Matije Nalisa iz tvrtke Opus, Dobrice Pavlinuia iz Plive i drugih. Sudionici su mogli nazoiti praktinim radionicama poput seminara Roberta Sedaka s naslovom Abeceda otvorenog koda, kao i radionicu Ivana Gutina o administraciji Linux raunala. U isto vrijeme Linux administratori imali su prilike upoznati se s mogunostima povezivanja Sambe i LDAP baze u jedinstveni AAI te nauiti poneto o VLAN tehnologijama i L3 routingu u radionici koju su zajedniki odrali Dorian Ivani i Denis Lackovi.

1238/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

POVIJEST LINUXA I UNIXA


Linux se na raunarskoj sceni pojavio kao izdanak Unixa. Kao operativni sistem (zapravo niz razliitih operativnih sistema slinih osobina), Unix je mnogo stariji od stolnih raunara. Unix je i dalje u irokoj upotrebi iako se danas esto koristi i na klijent-server intranet mreama. Povijesno gledano, problem sa Unixom je bila njegova nedostupnost programerima koji su htjeli da rade sa neim van raunarskih centara velikih poduzea i univerziteta. Iako su neke verzije Unixa za PC odavno na raspolaganju, one nikada nisu pruale eleganciju i snagu operativnih sistema koji stoje na raspolaganju mini i mainframe raunarima i dananjim serverima. Uz to, rane komercijalne verzije Unixa bile su skupe, ponekad skuplje od PC hardvera za koji su bile namijenjene. Ta nepristupanost je na kraju dovela do Linuxa, kao da operativni sistem slian Unixu postane iroko dostupan. ivot Linuxa je zapoeo u rukama Linusa Torvaldsa, sa helsinkog univerziteta u Finskoj. Iako je Linux razvijen uz pomo tisua programera irom svijeta, Linus Torvalds jo uvijek upravlja razvojem sreditem operativnog sistema njegovom jezgrom (engl. kernel). Mnogi danas misle kako je Linux operativni sustav poput MS Windows 9x, 2000 ili NT. Meutim, to nije istina. Linux je kernel odnosno jezgra operativnog sustava. Potrebno je jo neto osim kernela (jezgre), a to su programi. Nijedan kernel ne moe nita pametno raditi bez programa. Danas se uz Linux kernel koriste i GNU programi i tada imamo cjeloviti operativni sustav. Zato je ispravnije koristiti izraz GNU/Linux sustav ili skraeno GNU/Linux. Lako je tijekom proteklih desetak godina postao Ljubimcem akademske zajednice, raznih raunalnih geekova i rebela te administratora manjih i srednjih mrea, Linux se jo uvijek teko probija u dva najisplativija trina segmenta - enterprise segment velikih servera i raunalnih sustava (koji jo uvijek vrsto dre klasini Unixi i serverske verzije Windowsa) te segment stolnih raunala, pogotovo onih u tvrtkama (na kojima je gotovo nemogue zatei bilo to drugo osim Microsoftovih operativnih sustava). Sreom po linuksae, ova situacija se u zadnje vrijeme lagano mijenja i sve je vie tvrtki spremno razmotriti koritenje Linuxa na mjestima na kojima ovaj operativni sustav sve donedavno nije imao to traiti. ak i najvei konkurenti priznat e da se Linux sve donedavno nije mogao ravnopravno nositi s konkurencijom i da su mu jedine prednosti bile cijena i otvorenost izvornog koda.

1239/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Danas je situacija drugaija - zahvaljujui ubrzanom razvoju Linuxa i pripadajuih aplikacija unatrag nekoliko godina, veina strunjaka se danas slae da je Linux tehnoloki i te kako konkurentan, pogotovo na serverskom segmentu. Izvrsna interoperabilnost s desktop verzijama Windowsa o je jedna prednost koja serverskim verzijama ovog OS-a omoguuje zauzimanje to veeg trinog udjela. Na desktop sceni situacija je neto nepovoljnija, mada je napredak koji je na njoj postignut iznenadio mnoge. Aktualna verzija KDE-a je po mnogoemu funkcionalno ekvivalentna Windowsima, a izdanak StarOfficea, OpenOffice.org, je skup aplikacija koji oduevljava i recenzente navikle na daleko moniji Microsoftov uredski paket. Novije verzije distribucija sve se jednostavnije instaliraju i koriste - moda i dalje ne dovoljno jednostavno za kune korisnike, no dovoljno jednostavno za informatike odjele u tvrtkama. Osim nabrojanih faktora, sve veem profiliranju Linuxa pridonosi i polako odumiranje klasinih Unixa i sve vea dominacija Intelovog i Intelu kompatibilnog hardvera u serverskom segmentu.

1240/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

KRONOLOGIJA LINUXA
1991. Linus Torvalds izdaje prvu javnu verziju (0.02) Linux kernela nastalog kao "projekt iz hobija", bez ikakvih pretenzija za imalo ozbiljnije koritenje. 1992. U razvoj Linuxa ukljuuju se neovisni programeri, a godinu dana kasnije pojavljuju se prve distribucije. 1994. Izlazi Linux 1.0, prva "finalna" verzija, koja donosi napredni TCP/IP stack i stvara podlogu uspjenom serverskom OS-u. 1996. Izlazi Linux 2.0. Pojavljuju se prva grafika okruenja i prve naprednije aplikacije za Linux. 1998. Pojavljuju se KDE i GNOME. Linux igra ulogu u internetskom boomu kao jedan od najkoritenijih serverskih OS-ova i kao mamac za neovisne investitore. Kanadski Corel, tada jo uvijek jako ime u softverskom svijetu, objavljuje kako e prenijeti sve svoje aplikacije na Linux i izdati vlastitu distribuciju. Svatko tko je netko (osim Microsofta...) najavljuje svoju podrku Linuxu u nekom obliku. 1999. Red Hat Linux i VA Linux izlaze na burzu, uetverostruujui, odnosno uosmerostruujui svoju trinu vrijednost u prvom danu trgovanja. Na burzu izlaze i drugi, a investitori se otimaju za tvrtke koje imaju bilo kakve veze s Linuxom, troei novac na sve strane. Pojavljuje se OpenOffice.org, a kernel 2.4 blii se svojoj finalizaciji. Oracle ulae znaajna sredstva u razvoj svojih aplikacija za Linux. 2000. VA Linux za 800 milijuna dolara kupuje mreu siteova posveenih Linuxu. Caldera za 91 milijun USD kupuje starosjedioca na Unix sceni - posrnuli SCO. Pojavljuju se prvi znakovi recesije i sloma dot-com ekonomije, a do kraja godine sa scene iezavaju mnoge tvrtke koje su se bavile Linuxom. 2001. Recesija je u punom zamahu. Propadaju mnoge tvrtke koje se bave Linuxom, preivjeli smanjuju obim poslovanja i otputaju radnike. Corel prodaje svoj odjel za razvoj

1241/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Linuxa Xandrosu. Unato svemu tome, Linux biljei uspjehe - sredinom godine se kratko vrijeme isporuuje na gotovo treini novih servera. Michael Robertson pokree Lindows.com - tvrtku iji je cilj dovesti Linux na raunala kunih korisnika. Pojavljuje se OpenOffice.org besplatni uredski paket zasnovan na Linuxu. 2002. Red Hat Linux biljei prvi profit. Caldera, SuSE, Connectiva i TurboLinux pokreu inicijativu UnitedLinux, iji je cilj stvoriti unificiranu distribuciju za serverske primjene. Krajem godine Caldera mijenja ime u The SC0 Group. AMD demonstrira snagu svojih 64-bitnih procesora koristei Linux. Europska komisija naruuje studiju o isplativosti prelaska IT infrastrukture dravne uprave na Linux. Hewlett-Packard ostvaruje 2 milijarde dolara prometa na proizvodima i uslugama vezanim uz Linux, IBM 1,5 milijardu (od toga oko pola milijarde ini isti profit). Microsoft mijenja licencne uvjete i cijene za svoj serverski i uredski softver, to mnoge potie da razmisle o prelasku na Linux. 2003. The SCO Group podie tubu protiv IBM-a, optuujui ga za neovlateno koritenje SCO-ovog intelektualnog vlasnitva i njegovo prenoenje u Linux kernel, traei milijarde dolara odtete. Red Hat Linux nastavlja s profitabilnim kvartalima. Gartner predvia da e Linux do kraja godine biti instaliran na desetak posto novoisporuenih servera, to ini najvei udio u ovom trinom segmentu na godinjoj razini do sad. Gradske uprave nekoliko njemakih gradova, ukljuujui Munchen, objavljuju kako e u potpunosti migrirati na Linux. Nekoliko velikih korporativnih korisnika, ukljuujui australsku Telstru, razmilja o prelasku na Linux i StarOffice na desktopu zbog visokih cijena Microsoftovih proizvoda. Ford i Audi poinju s koritenjem Linuxa. Reuters se prebacuje na Linux u poslu vrijednom navodno 200 milijuna USD kroz pet godina. Linux nalazi svoju primjenu u clusterima, superraunalima i radnim stanicama. Izlaze nove verzije KDE-a, OpenOffice.orga i Sambe. lzlazi kernel 2.6. Izlaze HRID.office, uredska distribucija Linuxa za hrvatsko trite, s prevedenim programima i spellcheckerom na hrvatskom, te Knoppix - inovativna distribucija koja korisnicima omoguuje isprobavanje Linuxa bez instaliranja na raunalo.

1242/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Vani linkovi:
www.distrowatch.com www.bsd.org www.openbsd.org www.netbsd.org www.debian.org www.slackware.com www.linux-mandrake.com www.redhat.com www.fedora.redhat.com www.gentoo.org www.suse.com www.lycoris.com www.xandros.com www.linspire.com www.knoppix.org www.mandrakesoft.com/products/mandrakemove www.linux.hr www.openlinux.org

1243/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Saa Protulipac

Kompajliranje kernela

1244/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

UVOD

Linux
Linux je operativni sustav nastao kao inicijativa g. Linusa Torvaldsa zapoeta 1991. godine. On je prvobitno zamislio projekat kao skroman izdanak Minixa, operativnog sistema kojeg je napisao Andrew S. Tanebaum. Budui da Linux duguje mnogo svom prethodniku UNIX-u, moglo bi se rei da je Linux zapoet davno prije, nekoliko desetljea ranje, tonije 1969. godine kada je UNIX kao istraivaki projekt zapoet u labaratorijima Bell kompanije AT&T. Linus Torvalds je napravio revolucionaran korak kada je izvorni kod svog projekta stavio na Internet i omoguio svakome tko eli da se pridrui razvoju. Danas Linux predstavlja jezgra, tj. kernel operativnog sustava koja korespondira sa mnogobrojnim uslunim programima bez kojih bi rad bio nemogu. Svi ti programi su veinom kompatibilni sa svim inaicama UNIX-a, pa iz svega navedenog gotovo bi se moglo rei da je Linux jedna od inaica UNIX-a.

Kernel
Kao to sam ve napomenuo, temeljn dio Linuxa je kernel tj. jezgra operativnog sustava koja je uitana u memoriju raunala i predstavlja kariku koja povezuje hardverske komponente (procesor, diskove itd.) sa mnogobrojnim uslunim programima na ijoj strani se nalaze korisnici. Iako nije jedini, vrlo je vaan dio Linuxa operativnog sustava (OS) i zato mora biti ispravno podeen i prilagoen, jer o njemu ovisi ispravnost i stabilnost rada svih hardverskih i softverskih komponenti raunala. Danas je izvorni kod Linux-ovog kernela dostupan svakome preko interneta to nam omoguava da ga preuzmemo, maksimalno prilagodimo i ugradimo u na Linux operativni sustav.

1245/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

KADA I ZATO KOMPAJLIRATI KERNEL


Kompajliranje kernela je postupak u kojem uz pomo gcc kompajlera prevodimo izvorni kod (souce) u izvrni, tj. binarni kod. Kao krajnji rezutat kompajliranja dobivamo kernel i njegove module u obliku izvrnog koda. Izvorni kod kernela je gotovo u cijelosti pisan u progamskom jeziku C, samo neki djelovi ija je brzina izvravanja kljuna za brzinu rada operativnog sustava pisani su u asembleru.

Razlozi za donoenje odluke o izradi novog kernela


Konfiguracija izvornog koda kernela zahtjeva podosta veliku kolinu predznanja i upoznavanja sa hardverskim komponentama raunala. Sam proces kompajliranja i na snanijim raunalima ponekad traje sat ili vie. Konkreto na raunalu Pentium 100, sa 64 MB rama i 1,2 GB hard diskom kompajliranje itavog kernela 2.6.0test9 traje oko etiri sati. Ako jo uzmete u obzir da e svaka pogrijeka prilikom konfiguracije kernela vjerovatno rezultirati ponovnim kompajliranjem kernela, moe se desiti da kod poetnika navedeni proces potraje po nekoliko sati, a ponekad i nekoliko dana. Zato prije nego to pristupite izradi novog kernela razmislite da li Vam to zaista treba? Neki od razloga zbog kojih bi trebalo pristupiti kompajliranju kernela su: podrka za noviji hardver koji u prethodnoj inaici nije bio podran ili je bio podran u eksperimentalnom obliku (vrlo esto su takvi sluajevi sa grafikim karticama, raznim multimedijalnim dodacim, mrenom opremom i sl.) podrka za noviji protokol ili datoteni sustav (najee se javlja kod raunala koja rade u mrenom okruju) sigurnosni propusti koji su popravljeni u novijoj inaici kernela potreba za promjenom strukture kernela (npr. ako elimo umjesto modularnog imati monolitan kernel ili sl.) Samo injenica da je izila nova verzija kernela koja je mjesec dana svjeija od postojee nikako ne bi trebala biti razlog za nadogranju kernela.

1246/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

Kada treba izbjegavati najnovije inaice kernela


Najnovije inaice kernela nisu uvijek najbolje rjeenje, jer osim najnovijih mogunosti mogu donijeti sa sobom jo neotkrivene sigurnosne propuste. Ako raunalo radi u okruju u kojem je sigurnost i stabilnost vaan imbenik njega ne bi trebalo stavljati kernel koji je objavljen tek prije nekoliko dana. Svakako treba prethodno provjeriti kakvi su problemi vezani uz verziju na koju mislite nadograditi kernel bez obzira koliko je ona stara.

1247/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

INSTALACIJA IZVORNOG KODA KERNELA


Prilikom instlacije Linux-a gotovo se nikad ne instalira izvorni kod kernela iako on dolazi sa svakom distirbucijom. Svaka distribucija dolazi sa nekoliko gotovih kernela i velikim brojem gotovih modula. Sam kernel je obino prilagoen tako da podrava veinu osnovnih komponenti koje se nalaze na pripadajuoj platformi (PC, Mac), sve ostalo se nalazi u modulima koji se po potrebi pozivaju. Neke openite stvari o kernelu kao i nain na koji se kernel instalira saznat ete iz nekoliko narednih poglavlja.

Openito o izvornom kodu kernela


Izvorni kod kernela je skup datoteka pisanih pisanih u C-u i assembler. Uz navedene datoteke pronai emo jo podosta konfiguracijskih i textualnih dokumentacjskih datoteka. Kompletan kernel (kao i veina ostalih stvari na Linux-u) objavljena je pod GNU licencom. Izvorni kod kernela dolazi u dvije verzije, stabilnoj (namjenjena korisnicima) i nestabilnoj (namjenjena za testiranje i razvoj). Prva stabilna verzija kernela (1.0) je objavljena 1994.g. Verzije kernela se oznaavaju sa tri broja meusobno odvojenih tokama, u obliku major.minor.release. Po drugom broju (minor) moemo vidjeti da li se radi o stabilnoj ili nestabilnoj verziji kernela, tj. sa neparnim brojevima se oznaavaju nestabilne, a s parnim stabilne verzije kernela, npr: 2.4.27 2.5.1 - oznaava stabilnu verziju kernela - oznaava nestabilnu verziju kernela

Kad verzija kernela 2.5.x postane dovoljno stabilna za upotrebu, ona se preimenuje u prvu slijedeu stabilnu verziju, u ovom sluaju to bi bila 2.6.0 koja nastavlja dalje sa razvojem. Nestabilne verzija kernela je experimentalna i slui za testiranje nekih novih programskih rjeenja, podrka za hardver, posjeduju vie noviteta, no nije preporuljiva za koritenje jer moe uzrokovati nenadana ruenja operativnog sustava, gubitke podataka ili neoekivana ponaanja raunala. Nasuprot tome stabilne verzije kernela dobro su testirane, posjeduju minimalan broj bug-ova i kao takve preporuljive su za upotrebu. Mada bi sve stabilne verzije kernela trebale biti jednako kvalitetne, praksa pokae da su neke od njih "stabilnije" od drugih. Upravo takve verzije kernela esto koriste poznatije distribucije Linuxa unato tome to je u vrijeme njihovog izlaska posojala novija verzija.

1248/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

Gdje pronai izvorni kod kernela


Izvorni kodovi kernela bi se trebli na svim distribucijama uvijek nalaziti u direktoriju /usr/src/linux-x.x.xx gdje su sa x oznaeni brojevi koji pripadaju verziji kernela i to je prvo mjesto gdje bi ga trebali potraiti (neke verzije kernela mogu imati jo nekoliko dodatnih oznaka u nastavku). Ako nismo nit apronali u navedenom direktoriju, a elimo ostaviti postojeu verziju kernela i u njoj samo napraviti neke promjene ili dograditi podrku za neki novi ureaj, ne moramo ii daleko, vjerovatno ve imamo izvorni kod u obliku paketa na nekom od CD-ova na kojima smo dobili distribuciju linuxa. Nain instalacije takvih paketa biti e obraen u jednom od slijedeih poglavlja. Da bi smo doznali koja je verzija kernela kojeg koristimo na raunalu treba u konzoli upisati slijedeu naredbu: # uname r U veini sluajeva ipak emo htjeti nadograditi raunalo sa novijom verzijom kernela (ili starijom), tad emo ga morati potraiti na Internetu. Najbolje bi bilo ako uspijemo pronai verziju izvornog koda kernela u obliku paketa za distribuciju koju koristimo jer je takav izvorni kod u veini sluajeva dodatno prilagoen samoj distribuciji. Najbolje ga je potraiti na internet stranicama od distribucije koju koristimo: Red Hat Debian Mandrake http://www.redhat.org http://www.debian.org http://www.mandrake.org

Ili na stranicam namjenjenim za pretraivanje programskih paketa, npr: http://www.rpmfind.org U veini sluajeva neemo biti zadovoljni ponudom (obino nema novijih inaica kernela), pa je onda najbolje otii na stranicu http://www.kernel.org gdje emo pronai sve do sada izdane verzije kernela. Tu emo pronai izvorni kod arhiviran i komprimiran u obliku *.tar.gz ili *.tar.bz2 datoteka. Navedena stranica sadri i dosta linkova vezanih uz razvoj i koritenje kernela.

1249/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

Instalacija izvornog koda kernela oblika .tar.gz (.tar.bz2) datoteke


Kernel je u takvom obliku je arhiviran i komprimiran u datoteku izgleda linuxx.xx.xx.tar.gz ili linux-x.xx.xx.tar.bz2 gdje su sa x zamjenjeni brojevi verzije kernela, veliine 30-tak MB. U stvari radi se o izvornom kodu koji je arhiviran sa programom tar i zatim komprimiran sa programom gzip ili bzip2. Jedino to trebamo napraviti je raspakirati navedenu datoteku u direktorij /usr/src i to na slijedei nain: 1. kopiramo datoteku kernela iz direktorija /root/source u direktorij /usr/src # cp /root/source/linux-2.4.27.tar.bz2 /usr/src umjesto /root/source stavljamo putanju do mjesta gdje nam je datoteka kernela 2. poziconiramo se u direktorij /usr/src # cd /usr/src 3. raspakiramo datoteku kernela # bzip2 dc linux-2.4.27.tar.bz2 | tar xvf ako se radi o *.tar.bz2 formatu datoteke ili # bzip2 cd linux-2.4.27.tar.gz | tar xvf ako se radi o *.tar.gz formatu datoteke. 4. provjerimo sa # ls al postoji li simboliki link /usr/src/linux , ako postoji obriemo ga sa # rm linux 5. napravimo simboliki link /src/linux na /src/linux /kernel-2.4.27 # ln s /usr/src/linux-2.4.27 /usr/src/linux Uvijek mora postojati simboliki link /usr/src/linux prema direktoriju kernela kojeg kompajliramo, ako elimo raditi sa nekim drugim kernelom, dovoljno je simboliki link preusmjeriti na njega.

1250/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

Instalacija izvornog koda kernela oblika .rpm datoteke


Datoteke, tj. pakete oblika kernel_source-2.4.27.i386.rpm koristi Red Hat Linux i distribucije temeljene na njemu (Mandrake, Fedora, White Box). Njihova instalacija je jednostavnija jer u sebi sadri izmeu ostalog i podatak gdje se izvorni kod kernela treba nalaziti. Bez obzira gdje se nalazimo u sistemu dovoljno je upisati # rpm i /putanja/kernel_source-2.4.27.i386.rpm Ako ne postoji trebamo jo dodati simboliki link /usr/src/linux.

4.1. Instalacija izvornog koda kernela oblika .deb datoteke


Izvorni kod Debian distribucije Linux-a dolazi u obliku .deb paketa, tj. datoteke oblika kernel-soruce-2.4.17-1_all.deb gdje su oznake iza verzije kernela vezane za izmjene koje su raene na orginalnoj verziji kernela. Instalaciju moemo napraviti sa naredbom u konzoli: # apt-get install kernel-source-2.4.17 nakon toga dobit emo poruku da ubacimo potrebne CD-ROM-ove na kojima se nalazi distribucija. Nakon instalacije izvorni kod kernela emo pronai u direktoriju /usr/src u obliku kernel-source-2.4.17.tar.bz2 datoteke. Za zavretak instalacije trebati emo proi proceduru opisanu u poglavlju 3.3. Uklanjanje prethodno navedene datoteke moemo napraviti sa naredbom: # apt-get remove kernel-source-2.4.17

Patchiranje (krpanje) kernela


Patchiranje kernela je postupak u kojem izvorni kod kernela nadograujemo datotekom koja u sebi sadrava samo promjene izmeu starije i novije verzije kernela. Same datoteke za patchiranje su puno manje (0.1 4 MB) od kompletnog izvornog koda kernela. Zato je puno praktinije sa interneta preuzeti patcheve. Nadograditi moemo samo release kernela, tj. moemo nadograditi verziju 2.4.19 na 2.4.22, ali ne moemo nadograditi 2.2.18 na 2.4.0. Oblik datoteke za patchiranje je patch-x.x.xx.bz2 ili patch-x.x.xx.gz gdje se umjesto x nalaze brojevi koji odreuju verziju kernela. Program patch ita datoteku za patchiranje i radi

1251/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

izmjene direktno na datotekama izvornog koda. Za nadogranju izvornog koda kernela verzije 2.4.25 na verziju 2.4.28 trebamo imati sve patcheve koji su u meuvremenu izali, konkretno: patch-2.4.26.bz2 patch-2.4.27.bz2 patch-2.4.28.bz2 Naravno umjesto ovih moemo koristiti i patcheve sa .gz ekstezijom. Prilikom patchiranja uvijek patchiramo redom na prvu slijedeu verziju kernela (verzije se ne smiju preskakati). Postupak patchiranja izvornog koda kernela sa verzije 2.4.27 na verziju 2.4.28 bi izgledao ovako: 1. U direktorij iznad direktorija u kojem je izvorni kod kernela (tj. u direktorij /usr/src ako se kernel nalazi u direktoriju /usr/src/linux-2.4.27) treba kopirati patch datoteku, patch se nalazi u direktoriju npr. /root/source: # cp /root/source patch-2.4.27.bz2 /usr/src Naravno, umjesto /root/source treba staviti putanju do mjesta gdje nam je datoteka za patchiranje. 2. Pozicioniramo se u direktorij u kojem je izvorni kod kernela: # cd /usr/source/kernel-2.4.27 3. Ako je patch datoteka sa .bz2 ekstenzijom u konzoli izvravamo slijedeu naredbu: # bzip2 dc ../patch-2.4.28.bz2 | patch p1 ili # gzip cd ../patch-2.4.28.gz | patch p1 ako se radi o patch datoteci sa .gz ekstenzijom. Osim ovakvih standardnih patcheva za nadogradnju postojee verzije kernela, esto puta moemo nai patcheve u nekom drugom obliku. Takvi patchevi gotovo su uvijek potrebni za podrku nekog ureaja iju specifikaciju proizvoa dri u tajnosti. Uz takve patcheve uvijek dolazi detaljno uputstvo kako ih primjeniti, esto puta su to skripte koje emo trebati izvriti slijedei upute proizvoaa, a ponekad emo trebati sve napraviti runo. Uglavnom su postupci specifini za svaki sluaj i ovdje nee biti obraeni.

1252/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

KONFIGURIRANJE KERNELA
Konfiguriranje kernela je jedan od najbitnijih koraka u procesu izrade novog kernela. Zbog mnogobrojnih mogunosti dananji kerneli imju mnogo opcija za podeavanje to zahtjeva dobro poznavanje hardvera i softvera. Prije poetka konfiguriranja kernela trebamo dobro prouiti koji hardver ima raunalo za kojeg radimo kernel, u kakvom okruju radi, koje protokole i datotene sustave treba podravati itd. Neke od vanijih stavki su: tip platforme ( Intel 3086, Intel 4086, Intel Pentium III, AMD Athlon ...) broj procesora (radi li se o jednoprocesorskoj ili vieprocesorsko platformi) tipovi ipseta na matinoj ploi, grafikoj kartici, mrenoj kartici, zvunoj kartici ... tipovi sabirnica koje imamo na sistemu (ISA, PCI, AGP ...) koje datotene sustave koristimo (ext2, ext3, reiserfs, FAT32, NTFS ...) koje tipove diskova, odnosno koje kontrolere diskova imamo (IDE, ATA, RAID, SATA, SCSI, DAT ...) koje protokole koristimo (TCP/IP, PPP, SLIP ...) ... # /sbin/lspci detalje o tipu procesora kojeg koristimo moemo dobiti naredbom # cat /proc/cpuinfo Svi podaci o konfiguraciji izvorog koda kernela trebaju se nalaziti datoteci .config u osnovnom direktoriju naeg kernela. Navedena datoteka je najobinija tekstualna datoteka koja u sebi sadri podatke o ukljuivanju ili iskljuivanju pojedinih opcija kernela, a generierana je od strane programa config, menuconfig ili xconfig. Ti programi su okruja koja nam pomau u snalaenju meu mnogobrojnim opcijama. Datoteku .config nakon to je generirana moemo pogledati sa nekim textualnim editorom, no nije preporuljivo na taj nain raditi izmjene u njoj. Pojedini koraci u konfiguriranju kerenela su: 1. Provjerimo da li simboliki link /usr/src/linux pokazuje na pravu verziju kernela koju elimo konfigurirati
1253/1275

Takoer puno informacija o naem hardveru moemo dobiti naredbom

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

2. Pozicioniramo se u direktorij /usr/src/linux # cd /usr/src/linux 3. Slijedea naredba e obristati sve nepotrebne datoteke prijanjeg kernela koje su nastale prilikom kompajliranja # make mrproper 4. Sada pokreemo neko od okruja u kojem emo konfigurirati kernel # make xconfig ili # make menuconfig ili # make menucofig - radi u konzoli, koristiti samo u nudi ako niti jedan od prethodnih naina ne radi - radi u konzoli, koristiti ako nemamo X-e - radi pod X-ima, preferirani nain

Konfiguriranje sa make xconfig


Da bi ste mogli pokrenuti xconfig, trebamo biti u nekom od grafikih okruja (KDE, GNOME, Afterstep) koji rade pod X Windows-ima. Najprije trebamo pokrenuti konzolu (u X Windows-ima) i pozicionirati se u direkotrij /usr/src/linux, zatim upisati naredbu: # make xconfig koje e pokrenuti suelje kao to je prikazano na slici 1. Preko tog suelja pristupamo pojedinim sekcijama u kojima se nalaze opcije kernela. S obzirom da sada aktualna verzija kernela 2.6.10 jo nije ula u iru upotrebu, okvirno e biti opisane vanije opcije kernlea 2.4.27.

1254/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

Odabirom bilo koje sekcije otvara se novi izbornik, slian onome na slici .

Sa y odnosno n ukljuujemo i iskljuujemo pojedinu opciju, a odaberemo li

navedena opcija e biti modularna, to znai da e biti uitana u kernel samo onda kad se za to pojavi potreba. Gotovo sve moe biti modularno, osim podrke za datoteni sustav,

1255/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

upravljaki ureaj (kontroler) na kojem se nalazi osnovni sistem datoteka i PS/2 mia. Ako nismo sigurni to pojedina opcija znai, moemo si pomoi odabirom dugemta Help. Neke od opcija su posivljene i one su nedostupne, da bi smo ju omoguili moramo promjeniti neku od prethodnih opcija o kojoj ona ovisi. Najbolje je krenuti od prve opcije i odabirom dugmeta Next prelaziti na slijedee opcije sve do kraja, tako emo biti sigurni da nismo nita preskoili. U nastavku redom e biti opisana veina vanijih sekcija i vanije opcije u njima: Code maturity level options U ovoj sekciji odreujemo elimo li da nam prilikom odabira opcija budu prikazane i one koje su u razvoju. Sve opcije koje su u razvoju dodatno su oznaene sa EXPERIMENTAL, mada ih nije poeljno odabirati jer nam mogu uzrokovati nestabilnost sistema, ponekad je nuno jer je ba u njima veinom podran najnoviji hardver. Loadable module support Enable loadable module support - Ovdje moemo izabrati elimo li monolitan ili modularan kernel. Monolitan kernel zani da e kernel u potpunosti biti u jednom komadu i prilikom podizanja OS-a itav se uitava u memoriju, naknadna izmjena kernela ili dodavanje bilo kakvih modula nije mogue bez ponovnog pokretanja raunala. Veinom se koristi za strogo namjenska raunala kad je potrebna velika sigurnost i stabilnost sustava bez estih izmjena funkcionalnosti. Najee emo ipak trabati modularan kernel gdje se samo jedan osnovni dio uitava prilikom podizanja OS-a, a ostali dijelovi kernela su u obliku modula koje jednostavno moemo uitavati (pripajati) tijekom rada OS-a sa naredbama: # insmod ime_modula # rmmod ime_modula - ubacuje modul - brie modul

Time tedimo na memorijskom prostoru jer koristimo samo one dijelove kernela (module) koji su nam neophodni, ostali (svi) moduli se nalaze na hard disku u obliku datoteka sa ekstenzijom .o u direktoriju /lib/modules/verzija_kernela/.... Priliko dinamikog uitavanja modula koji prethodno nisu testirani moe doi do ruenja OS-a. Set version inforation on all module symbols selektiranjem ove opcije odabiremo mogunost uitavanja modula iz starije verzije kernela, poeljno je odabrati N Kernel module loader omoguava kernelu da prilikom uitavanja nekog modula koji ovisi o drugom modulu automatski uita potreban modul, poeljno je staviti Y

1256/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

Procesor type and features U ovoj sekciji se nalaze sve opcije vezane za prilagodbu kernela procesoru (CPUcentral processor unit) s kojim e raditi, neke vanije su: Procesor family izabir vrste procesora, ostim standardnih Intel-ovih i AMD-ovih procesora podrana je i AMD-ova 64-bitna arhitektura (u vrijeme pisanja ovog seminara to je najnovija generacija procesora) kao i neki manje poznati kao Elan, Crusoe i Winchip. Pravilnim izborom procesora (ako izaberemo podrku za Intelove 386 procesore kernel e raditi i na Pentium MMX procesorima no sporije jer nee koristiti naprednije mogunosti set instrukcija novijih procesora) ubrzat emo rad OS-a. /dev/cpu/*/msr Model-specific register support - poeljno ukljuiti za Intel-ove procesore Pentium Pro, Pentium II i novije. MTTR (Memory Type Range Register) support generacije poevi od Pentium Pro i Pentium II. Symetric multi-processing support - Podrka za vieprocesorske sustave (2 32 procesora, na kernelu 2.6.8 generacije do 255 procesora), veinom serverske platforme, snanije grafike radne stanice i sl. Prilikom odabira ove opcije dodatno treba podesiti opciju Maximum number of CPU(2-32) - gdje odreujemo za koliko procesora trebamo podrku, podrkom za svaki dodatni procesor kernel zauzima okvirno dodatnih oko 8 K RAM-a. High Memory Support ukljuiti 4 GB ako raunalo ima 1 4 GB RAM memorije, za vie ukljuiti opcjiu 64 GB General setup Zbog iskljuivanja nekih opcija iz ove sekcije neke naredne sekcje mogu postati nedostupne. Networking support bez obzira da li je nae raunalo spojeno na mreu ili ne, ovu opciju je dobro ukljuiti zbog pravilnog rada nekih aplikacija koje to zahtjevaju. PCI support podrka za PCI sabirnicu, ukljuiti ako imamo PCI sabirnicu (veina raunala 386 i 486 generacije i starija nisu imala PCI sabirnicu) MCA support ukljuiti za za MicroChannel arhitekturu PCMCIA/CardBus support - sekcija iza koje se krije obavezno ukljuiti ako imamo slotove za prikljuenje PCMCIA kartica, gotovo na svakom prijenosnom raunalo. IBM PS/2 raunala i laptope koji podravaju - ukljuiti za procesore novije

1257/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

System V IPC - obavezno ukljuiti Kernel core (/proc/kcore) format - podrka za ELF programe, obavezno ukljuiti Kernel support for MISC binaries ukljuiti ako namjeravamo koristiti interpretere poput Jave, Python-a ili Lisp-a Power managment support korisno ukluiti ako elimo kosrititi mogunosti Power managmetn-a (Stand by, Sleep), tj. da raunalo samo prelazi u mod smanjene potronje elektrine energije ako ga dok je ukljueno dulje vrijeme ne koristimo. Vrlo korisna opcija za prijenosna raunala. Advanced Power Mangment BIOS support - ukljuiti ako imamo u BIOS-u podran Advanced Power Managment (APM) i podesiti dostupne opcije. Memory Technology Devices(MTD) Podrka za memorijske ureaje, treba ukljuiti ako koristitimo razne vanjske jedinice za pohranu koje koriste FLASH, ROM, RAM ili sl. memoriju, konkretno Compact Flash kartice. Parallel port support Ukljuivanje podrke za paralelni port, danas gotovo sva PC i IBM kompatibilna raunala imalju paralerlni port (osim nekih novijih prijenosnih raunala), slui za povezivanje raznih periferija kao to je printer ili umreavanje dvaju raunala. Parralel port support obavezno ukljuiti PC-style hardware podravaju sva PC i IBM kompatibilna raunala i poneka raunala tipa Alpha, takoer treba ukljuiti. Plug and Play configuration Podrka za Plug and Play (PNP) ureaje. Plug and Play support ukljuiti ako elimo podrku za PNP ISA Plug and Play support podrka za ISA PNP ureaje Block devices Tu se nalaze opcije vezane uz IDE, Floppy disk, RAID, CD-ROM ureaje i sl. Normal floppy disk support ukljuiti ako imamo floppy disk na raunalo (danas ga imaju gotovo sva raunala osim nekih novijih laptopa)

1258/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

Parallel port IDE device support podrka za IDE ureaje koji se prikljuuju preko paralelnog porta (hard diskovi, CD-ROM-ovi itd.). Prilikom odabira ove opcije od nekoliko nanovo ponuenih treba specificirati tip ureaja. Lopback device support ova opcija omoguava montiranje datoteke (disk image-a) kao file sitema koju na taj nain moemo pregledati prije nego to ju snimimo na CD RAM disk support omoguava nam da jedan dio RAM memorije odvojimo i proglasimo kao file sistem (jasnije reeno od dijela memorije napravimo brzi hard disk), nije preporuljivo ukljuitvati jer usporuje rad raunala osim ako nam je nuno Initial RAM disk support - Podrka za Inital RAM, tj. za RAM disk uitan od strane boot loader-a i montiran kao osnovni file sistem prjie normalne boot procedure. Tipino se koristi za uitavanje modula koji su nuni za montiranje stvarnog osnovnog (root) file sistema, inae je praksa da se takva podrka ne ugrauje u obliku modula nego u osnovni dio kernela. Multi-device support (RAID and LVM) Ovjde se nalaze vane opcije za serverske sustave, pogotovo ako nemamo hadverski RAID kontroler, jer omoguava organizaciju postojeih diskova u RAID polja. Logical volume manager (LVM) je takoer vana opcija koja izmeu ostalog omoguava dinamku promjenu veliine file sistema. Networking options Ovo je jedna od najveih sekcija kernela i slobodno bih mogao rei "ponos" Linux OS-a, upravo zbog mogunosti koje su dostupne u ovoj sekciji Linux je postao jako rairen i prihvaen u mrenom okruju. Packet socket Ukljuivanjem ove opcije omoguavamo nekim aplikacijama direktnu komunikaciju sa mrenim ureajima (mrenim karticama itd.) Unix domain sockets Omoguava podrku za Unix domain sockets, koji su standardni mehanizmi za mrene konekcije. Mnogi progami koriste ove mogunosti iako moda nismo spojeni na mreu, stoga ovu opciju obavezno ukljuiti. TCP/IP networking podrka za TCP/IP protokol, ako namjeravamo koristiti Internet ili mree temeljene na TCP/IP protokolu (veina LAN-ova) ovu opciju obavezno ukljuiti.

1259/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

Ovo su neke vanije od mnogobrojnih postojeih opcija za ije je podeavanja potrebno temeljito poznavanje mrenog okruja te veina njih nee biti opisano, samo u spomenuti jo neke: Network packet filtering filtriranje mrenih paketa, ukljuivanje ove opcije e omoguiti pristupu nizu drugih opcija za podeavanje firewall-a (iptables firewall 2.4 tipa kernela, ipchains firewall 2.2 tipa kernela, ipfwadm - firewall 2.0 tipa kernela), podrku za ARP itd. Socket filtering filtriranje socket-a, tj. zabrana pristupa servisima IP: TCP synoockie support ako je ukljuen onemoguava SYN napade, poeljno ukljuiti na serverskim raunalima ako imaju bilo kakvih doticaja sa Internet-om IP: advanced router omoguava konfigurianje sistema kao router-a ATA/IDE/MFM/RLL support Podrka za ATA/IDE ureaje (tj. za kontrolere na matinoj ploi koji su zadueni za upravljanje hard diskovima, CD-ROM ovima itd.) Enhanced IDE/MFM/RLL disk/cdrom/tape/flopy support ovo obavezno ukljuiti osim ako imamo sistem baziran na SCSI diskovima ili ako imamo sistem koji nema hard diskova. Boot off-board chipsets first support neke matine ploe dodatni kontroler uz ve postojei na matinoj ploi, ova opcija omoguava da se sistem najprije pokuava podignuti sa dodatng kontrolera na matinoj ploi, a tek onda sa osnovnog kontrolera. Ova opcija ponekad rjeava problem koji se desi kada kernel prilikom boot-anja ne uspije pronai root particiju (npr. ako nam je root particija na disku koji je spojen na dodatni kontroler na matinoj ploi). Include IDE/ATAPI CDROM support podrka za CD ROM-ove SCSI emulation support omoguava SCSI emulaciju za IDE ATAPI ureaje, a time koritenje SCSI drajvere za ATAPI ureaje umjeto orginalnih ATAPI drajvera. Korisno ukljuiti ako imamo CD snimalicu, USB FLASH stick i sl. Osim navedenog tu se jo nalazi podrka za mnoge tipove kontrolera, odabrati onaj tip koji odgovara tipu na naem sistemu, ova opcija znaajno ubrzava rad diskovlja. SCSI support

1260/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

Podrka za SCSI ureaje. Danas veina servera ima SCSI kontrolere za rad sa diskovima. SCSI support obavezno ukljuiti ako nam treba podrka za SCSI SCSI generic support korisno ukljuiti ako imamo CD sinmalicu ili CD-ROM jer time omoguavamo pristup u "raw" modu (nuno za ripanje audio CD-ova i sl.) SCSI low-level drivers podrka za SCSI kontrolere, treba tono znati koji tip kontrolera posjedujemo i izabrati jedan od ponuenih.

IEEE 1394 (FireWire) support (EXPERIMENTAL) Tipian primjer podrke za novije ureaje koja je jo u testnoj fazi razvoja. IEEE 1394 standard se jo naziva i FireWire ili i.Link, omoguava prijeos podataka do 400 Mb/s, esto se koristi za povezivanje DV kamera i externih diskova. Uz odabir ove opcije treba jo odabrati i odgovarajui tip kontrolera koji se nalazi u sistemu.

Network device support Podrka za mrene ureaje (mrene kartice i sl.) i za neke protokole. Neke vanije opcije su: Network device support ukljuuje podrku, ako nam je sistem umreen ili se spajama na Internet, obavezno ukljuiti. Ethernet (10 pr 100Mbit) iza ovog se krije sekcija sa opcijama za podrku raznih 10 i 100 Mbit-nih mrenih kartica, ako imamo mrenu karticu ovdje trebamo ukljuiti podrku za nju. Ethernet (1000 Mbit) podrka za 1Gbit (1000 Mbit) mrene kartice. PLIP (parallel port) support omoguava umreavanje dvaju (rijetko vie) raunala preko paralelnog porta (RS 232, 25 pinski prikljuak). Maksimalna duljina prikljunog kabla je 15 m. Koristiti ju samo u nudi zbog male brzine prijenosa podataka. PPP (point-to-point protocol) support ako se spajamo na internet preko telefonskog prikljuka obavezno ukljuiti ovu opciju PPP support for async serial ports - ukljuiti ako je veza sa modemomo (V.90 ili V.92) preko asinhronog serijskog porta, tj. preko ttyS0 (COM 1) ili ttyS1 (COM2), ako koristimo ISDN ili ADSL, ovo ne treba ukljuivati.

1261/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

PPP support for sync tty ports treba ukljuiti ako koristimo PPP preko sinhronizirane linije (ADSL, visoko propusne iznajmljene linije T1/E1 i sl.). SLIP (serial line) support podrka za Serial Line Internet Protokol, slino kao i PPP, no PPP se danas vie koristi. Wireless LAN (non-hamradio) iza ovoga se krije podrka ureaja za Wireless LAN. Token Ring devices sekcija za podrku Token Ring-a PCMCIA network device support sekcija sa podrkom za PCMCIA mrene kartice (veina externih mrenih kartica za prijenosna raunala) Amateur Radio support Podrka za vezu putem amaterskih radio ureaja preko prilagoenog X25 protokola. Kod nas postoji jedna ovakava mrea brzine 2400 bps mada su ostvarive brzine preko 56 Kbps, ne podrava TCP/IP to joj je veliko ogranienje. IrDA (infrared) support Podrka za Infrared Data Associations (IrDA) protokol. Koristi se za komunikaciju preko IC porta, esto se koristi za uvezivanje raunala sa PDA ureajem ili mobilnim telefonom. ISDN subsystem support Podrka za ISDN, ako trebate pristup Internetu preko ISDN usluge onda obavezno ukljuitit ISDN support. Support synchronus PPP - podrka za PPP protokol preko sinhrone ISDN linije, obavezno ukljuiti. Support generic MP (RFC 1717) - omoguava poveanje propusnosti veze grupiranjem nekoliko ISDN konekcija, preporuljivo je ukljuiti. Passive ISDN cards u ovoj sekciji treba odabrati tip ISDN kartice koju koristimo za ISDN uslugu: HiSax Siemens ChipSet driver support podrka za Simensov ipset (nalazi se na veini ISDN kartica), obavezno ukljuiti HiSax Support for EURO/DSS1 podrka za pozivni protokol E-DSS1, kao i u Hrvatskoj podran je u veini Europskih zemalja, obavezno ukljuiti.

1262/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

HiSax supported cards u ovom popisu treba pronai tip kartice koju posjedujemo i selektirati (ukljuiti) ju.

Old CD-ROM drivers (not SCSI, not IDE) Ovdje se nalzi podrka za stare CD-ROM pogone koji su se prikljuivali preko zvune kartice (ISA slot). Na takve CD-ROM-ove moe se naii na raunalima 486 generacije, u veini sluajeva ova podrka nam nee trebati. Input core support Podrka za neke periferije koje se prikljuuju preko USB porta kao npr. pordka za tastaturu, mia, joystick, grafike tablete i sl. Ako nemamo neto od navedenog nije potrebno ukljuivati navedenu podrku. Character devices Virtual terminal podrka za virtualne terminale, ona nam omoguava da imamo nekoliko virtualnih terminala u konzoli (prebacujemo se tipkama Alt + F1 ...F6) ili u X Windows sistemu (Ctrl + Alt + F1 ... F6, izlaz Ctrl + Alt + F7) koji mogu sluiti za razliite funkcije, obavezno ukljuiti. Support for console on virtual terminal omoguava praenje poruka kernela na nekom od virtualnih terminala. Support for sharing serial interrupts omoguava dijeljenje IRQ-a, korisno ako imamo puno raznih ureaja (kartica) prikljueno u naem sistemu, preporuljivo ukljuiti (da bi ova opcjia bila dostupna treba ukljuiti Extended dumb serial driver options) Unix98 PTY support podrka za pseudo terminale, novi nain kreiranja virtualnih terminala na Linuxu, obavezno ukljuiti. Mice sekcija u kojoj su dostupne podrke za razne vrste mieva. Mouse support podrka za mieve, ali ne serijske (DB-9 ili DB-25 konektor) i ne USB mieve, ukljuiti da bi nam bila dostupna opcja PS/2 mouse. PS/2 mouse podrka za PS/2 tipove mia (imaju mali okrugli konektor sa 9 pinova, veina novijih mieva je tog tipa). Joystick sekcija sa podrkom za igrae dodatke, podrano je puno toga pa treba samo odabrati model, ako imamo neto to nije podrano postoje i generike opcije. Moe se

1263/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

desiti da je ova sekcija nedostupna (posivljena), to je vjerovatno zbog toga to u sekciji Input core support nije napravljen pravilni izbor. Multimedia devices Podrka za razne video i audio multimedijalne dodatke kao to su video kartice, TV kartice, radio kartice itd. File systems Podrka za razliite file sisteme (nain na koji su podaci zapisani na medij za pohranu hard disk, CD-ROM, floppy disk itd.). Veina OS je vezana za jedan ili nekoliko za njega specifinih file sistema, za razliku od toga Linux ima podrku za gotovo sve file sisteme (neki su jo u razvojnoj fazi). Quota support omoguava ogranienje diskovnog prostora na kojem pojedini korisnik moe raditi, za sada radi samo sa ext2 datotenim sustavom. Kernel automonter support uobiajeno je da se svi ureaji ("device" - diskovi, particije, mreni diskovi) moniraju prilikom podizanja OS preko datoteke fstab ili naknadno runo sa naredbom mount, ukljuivanje ove opcije prua nam mogunost da se to montiranje vri atuomatski kad pokuamo pristupiti direktoriju na kojem bi se trebao nalaziti pripadni ureaj. esto se primjenjuje za pristup CD-ROM pogonima i dijeljenim diskovima na mrei. Resiserfs support napredni datoteni sustav novije generacije, jedan od najbrih datotenih sustava na Linux-u koji podrava journalling, zbog tih svojstava koriste ga neke Linux distribucjie namjenjene za servere. Ext3 journaling file system support journaling verzija ext2 datotenog sustava (koji je standardni datoteni sustav za Linux), zbog navedene je mogunosti sporiji ali zato puno sigurniji od ext2. DOS FAT fs support podrka za FAT (MS DOS) i VFAT (Windows 95), ukljuivanje ove opcije omoguit e jonekoliko opcija. MSDOS fs support Podrka za MS DOS datoteni sustav, omoguava montiranje i prisutp MS DOS particijama. VFAT (Windows-95) fs support Podrka za VFAT datoteni sustav, omoguava montiranje i pristup particijama koje koste Windows 95, 98 i NT operativni sistemi. ISO 9660 CDROM file system support standardni datoteni sustav za CD-ROM medije.

1264/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

Microsoft Joliet CDROM extensions verzija ISO 9660 datotenog sustava koja omoguava koritenje 16-bitnog unicode formata. NTFS file system support (read only) podrka za MS NTFS datoteni sustava (Windows NT, 2K i XP), no samo za itanje, podrka za pisanje je jo uvjek u fazi testiranja. Second extended support - Podrka za ext2 datoteni sustav, koji je standard na Linux-u. UDF file system support (read only) - datoteni sustav novije generacije koriten na CD-ROM i DVD medijima. Omoguava paketni nain zapisivanja (korisnik moe sa njime upisivati i brisati podatke kao na hard disku). Za sada je podrka za upisivanje jo uvjek u razvojnoj fazi. Network File Systems Iza ovoga se krije sekcija sa podrkom za mrene datotene sustave: NFS file system support omoguava pristup klijentima preko mree dijeljenim resursima (particije, direktoriji, diskovi) koji se nalaze na NFS serveru. Provide NFSv3 client support novija verzija NFS-a, puno otpornija na greke nastale uslijed pada mree, prestanka rada NFS servera itd. NFS server support omoguava pruanje NFS usluge, tj. dijeljenje resursa (particija, direktorija, diskova) na mrei, koristi se na serverskoj strani. Provide NFSv3 server suport novija verzija NFS-a, puno otpornija na greke nastale uslijed pada mree, prestanka rada NFS servera itd., koristi se na serverskoj strani. SMB file system support (to mount Windows shares etc.) podrka za SMB (Server Message Block), protokol koji omoguava platformama baziranim na Windows operativnim sustavima dijeljenje datoteka i printera. Da bi se mogla koristiti navedena mogunost na Linux-u, osim podrke od strane kernela moramo imati instaliranu aplikaciju koja e to realizirati (programski paket SAMBA). Nije podran Microsof-ov NetBEUI mreni protokol tako da je dijeljenje mogue samo u mreama zasnovanim na TCP/IP protokolu. Partiton Types U ovoj sekciji se nalazi podrka za pristup diskovima i particijama koje su formatirane na arhitekturama razliitim od one na kojoj se nalazi na OS. Native language support to je sekcija u kojoj moemo podesiti regionalne postavke, nabrojit u samo one koje bi trebalo ukljuiti jer su interesantne za nae podruje.

1265/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

Codepage 437 (United States, Canada) Codepage 852 (Central/Eastern Europe) Windows CP1250 (Slavic/Central European Languages) NLS ISO 8859-1 (Latin 1, Westeren European Languages) NLS ISO 8859-2 (Latin 2, Slavic/Central European Languages) NLS UTF8 podrka za unicode Console drivers VGA text console omoguava naprednije prikaze u terminalu (standardni je 25 redova X 80 zankova), tj. vie znakova i redova, text u boji itd., obavezno ukljuiti. Video mode selection support omoguava da se prilikom podizanja raunala prije nego to boot loader uita kernel inicijalizacijom vga parametra kernela prebacimo u neki drugi text mod razliit od standardnog. Navedeni parametar moemo inicijalizirati u konfiguracijskim datotekama grub-a, lilo-a ili u konzoli. Frame-buffer support podrka za naprednije mogunosti nekih grafikih kartica, veina ih je u razvojnoj fazi. Sound U ovoj sekciji se nalazi podrka za zvune kartice. Veina kartica je podrana, trebamo pronai tip ipseta na temelju kojeg je graena naa zvuna kartica i ukljuiti ga. Sound card support - obavezno ukljuiti ako nam treba podrka za zvunu karticu. USB support Podrka za Universal Serial Bus (USB), navedeno je samo nekoliko znaajnijih opcija. U odjeljku USB Host Contrloller Drivers treba odabrati treba odabrati driver koji podrava na USB kontroler na sistemu. Suport for USB ako elimo na sistemu podrku za USB, ovo obavezno ukljuiti. USB Mass Storage support ukljuiti ako nam treba podrka za masovnu pohranu podataka preko USB-a (npr. vrlo popularan FLASH stick) USB Printer support podrka za printere koji su na sistem spojeni preko USB-a. Cryptographic options

1266/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

U ovoj sekciji se nalazi podrka za razne kriptografske algoritme, da bi bili dostupni treba ukljuiti opciju Crypthographic API, sve algoritme osim HMAC je najbolje ukljuiti kao module, pa e tako biti automaski uitani kad se za to ukae potreba. Save and Exit Kad smo gotovi sa konfiguriranjem izvornog koda kernela sa ovom opcijom snimamo odabrane postavke u .config datoteku i izlazimo iz suelja za konfiguraciju. Quit Without Saving Izlazak iz suelja za konfiguraciju bez snimanja postavki u .config datoteku. Load Configuration from File Pomou ove opcije moemo uitati postavke koje smo prethodno spremili sa Store Configuration to File. Store Configuraton to File Sa ovom opcijom moemo spremiti trenutnu konfiguraciju izvornog koda kernela u datoteku proizvoljnog naziva.

Konfiguriranje sa make menuconfig


Zadavanjem naredbe iz direktorija /usr/src/linux # make menuconfig pokreemo suelje za konfiguriranje izvornog koda kernela za koje nije nuno imati pokrenut X Window sustav, no ipak zahtjeva da na raunalu imamo instalirane course library-je (kod Debiana je ncourse). Opcije su istovjetne kao i kod xconfig-a pa za konfiguraciju izvornog koda moemo koristi prethodno opisan primjer. Izgled glavnog izbornika sekcija prikazan je na slici 3. Kroz sekcije i opcije se kreemo sa strelicama, sa tipkom ENTER ulazimo u pojedine sekcije, prikaz jedne takve sekcije se vid na slici 4. Modularno ukljuivanje pojedinih selektiranih opcija vrimo sa tipkom M, sa tipkom Y selektirana opcija e biti integrirana u osnovi dio kernela, a sa tipkom N vrimo iskljuivanje selektirane opcjie. Opcije koje poinju sa znakovima [ ] ne mogu biti ukljuene u obliku modula.

1267/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

1268/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

Konfiguriranje sa make config


Konfiguriranje kernela poinjemo kao i u prethodnim primjerima iz direktorija /isr/src/linux izdavanjem naredbe: # make config Ovaj tip konfigurianja takoer se radi iz konzole i za njega nam nisu potrebne nikakvi grafiki library-ji, no sa njim je vrlo teko raditi jer ne dozvoljava snimanje postojee konfiguracije niti vraanje na opcije koje smo proli, ako negdje pogrijeimo moramo krenuti od poetka. Kako to izgleda mo se vidjeti na slici.

Na postavljena pitanja odgovaram sa y opcija e biti integrirana u kernel, m opcija e biti u obliku modula ili N-opcija nee biti ukljuena. Zbog neprilagoenosti suelja ovaj nain koristite samo u nudi kad su prethoda dva nedostupna.

1269/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

KOMPAJLIRANJE KERNELA Priprema izvornog koda za kompajliranje


Ovo je faza koja slijedi nakon konfiguriranja izvornog koda kernela. I dalje trebamo ostati u direktoriju /usr/src/linux. Ako radimo sa kernelom verzije 2.4.x ili starijim trebamo u konzoli zadati slijedeu naredbu (za kernele 2.6.x ili mlae ovaj korak moemo preskoiti): # make dep Nakon toga slijedi naredba koja je obavezna za sve verzije kernela. # make clean Tijekom izvravanja ovih koraka kao i nekoliko slijedeih na konzoli e biti ispisana hrpa poruka, treba priekati neko vrijeme (nekad i po nekoliko desetaka minuta) da zadati proces zavri do kraja.

Izrada osnovne jezgre kernela


Linux OS moemo pokretati na nekoliko naina, osnovna dva su pokretanje sa

sistemske diskete (1.44' floppy diskete) i pokretanje sa sistemskog diska (tj. diska na kojem se nalazi na OS) Za izradu kernela koji emo koristiti za podizanje OS-a sa sistemskog diska (hard diska) trebamo se pozicionirati u direktorij /usr/src/linux i zadati naredbu # make bzImage Kad kompajliranje zavri kernel bi se trebao nalaziti u direktoriju /usr/src/linux/arch/i386 u obliku datoteke bzImage veliine nekoliko stotina kilobajta do nekoliko megabajta, to zavisi o tome da li je kernel modularan ili monolitan, te koliko je opcija bilo ukljueno prilikm konfiguracije. Ako elimo da nam se OS podie sa sistemske diskete, to je preporuljivo prilikom iskuavanja novih kernela trebamo umetnuti disketu u floppy pogon na naem sistemu i umjesto naredbe iz prethodnog koraka (# make bzImage) trebamo zadati naredbu # make bzdisk

1270/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

ili # make zdisk Kernel e automatski biti snimljen na disketu koja e nam sluiti za podizanje OS-a (obavezno u BIOS-u podesiti boot-anje sistema sa diskete). Moe se desiti da nam kompajler javi da je kernel prevelik za floppy disk, u tom sluaju trebamo rekonfigurirati .config datoteku i pokuati opcije koje su integrirane u kernel staviti kao module. Ve u ovoj fazi trebalo bi biti mogue podignuti OS sa novim kernelom (jo nismo napravili module pa e neke funkcionalnosti biti nedostupne), kako se to radi pogledajte u poglavlju 6.

Izrada modula kernela


Za monolitne kernele ovaj korak moemo preskoiti. Ako prvi puta kompajliramo module za verziju izvornog koda kernela koju smo konfigurirali dovoljno je redom upisati naredbe (naravno iz direktorija /usr/src/linux) # make modules # make modules_install U prvom koraku e biti u procesu kompajliranja izraeni moduli, a u drugom koraku e ti moduli biti instalirani u direktorij /lib/modules/x.x.xx gdje je umjesto x oznake verzije kernela, npr. u naem sluaju e se moduli iskopirati u direktorij /lib/modles/2.4.27. U navedenom direktoriju moduli e biti organizirani prema funkcionalnosti u poddirektorije. Osim navedenih direktorija tu se nalazi i simboliki link build na direktorij u kojem se nalzi na izvorni kod kernela. Upravo direktorij /lib/modules/x.x.xx pravi probleme prilikom ponovnog kompajliranja iste verzije kernela jer se novi moduli pokuavaju prepisati preko starih. Jedan naina je da prije izdavanja naredbe # make modules_install preimenujemo direkotrij /lib/modules/x.x.xx u npr. /lib/modules/x.x.xx-old sa naredbom mv. # mv /lib/modules/2.4.27 /lib/modules/2.4.27-old Nakon instalacije i testiranja kernela kad se uvjerimo da je sve u redu taj direktorij moemo obrisati (kao i prethodnu verzija kernela). Kod ovog naina moe se pojaviti problem da nam upravo prilikom kompajliranja OS zatrai neki modul koji se sada nalazi u preimenovanom direktoriju i zbog toga nije dostupan.

1271/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

Drugi nain rjeava ovaj problem. Ovdje emo se posluiti malim trikom, uvijek trebamo na raunalu imati drugaiju verziju kernela od postojee sa kojom emo podignuti OS (naravno i za taj kernel moraju postojati pripadajui moduli u direktoriju /lib/etc/modules/y.y.yy, y su oznake drugaije verzije). Ostatak postupka je isti, tj. prije izdavanja naredbe # make modules_install treba preimenovati direktorij /lib/modules/x.x.xx u /lib/modules/x.x.xx-old, kojeg takoer moemo obrisati kad se uvjerimo da je sa novim kernelom sve u redu. Instalacija jezgre kernela se svodi na kopiranje jezgre, tj. datoteke bzImage iz direktorija /usr/src/linux/arch/i386/boot u direkotrij /boot (inae u ovom direktoriju su uvijek smjeteni kerneli). Datoteku bzImage pri tom treba preimenovati u vmlinuz-x.x.xx, gdje je sa x oznaena pripadajua verzija kernela. U naem sluaju datoteka kernela treba imati oblik vmlinuz-2.4.27. Na tu datoteku trebamo napraviti simboliki link vmlinuz iz korijenskog direktorija ln s /vmlinuz /boot/vmlinuz-x.x.xx Prethodni link vmlinuz koji je bio vezan na stariju verziju kernela najbolje je preimenovati u npr. vmlinuz.old. Osim navedene datoteke kernela trebamo kopirati jo dvije datoteke iz direktorija /usr/src/linx u direktorij /boot, a to su System.map i .config. Kad ih kopiramo takoer ih treba preimenovati u oblik System.map-x.x.xx i config-x.x.xx, u naem sluaju u System.map-2.4.27 i config-2.4.27. Ako u diretkoriju /boot imamo simboliki link config trebamo ga preusmjeriti na nau config-... datoteku, kao i System.map koji trebamo preusmjeriti na nau System.map-... datoteku.

1272/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

POKRETANJE OPERATIVNOG SUSTAVA SA NOVIM KERNELOM


Uitavanje kernela u radnu memoriju radimo pomou dodatnih programa prilikom bootanja sistema, ovdje e biti opisana konfiguracija dva najpopularnija te namjene,a jedan od njih je vjerovatno ve doao sa instalacijom OS-a.

Podeavanje progaram lilo za uitavanje kerenla


Program lilo (Linux loader) je smjeten na nekom od boot sektora hard diska (najee na Master Boot Record-u (MBR). Konfiguracijska datoteka za lilo je lilo.conf i nalazi se u direktoriju /etc. Primjer datoteke lilo.conf: # /etc/lilo.conf boot=/dev/hda root=/dev/hda2 install=/boot/boot-menu.b default=linux map=/boot/map delay=20 image=/vmlinuz label=linux read-only image=/vmlinuz.old label=linux-old read-only Sve parametre iza znaka jednakosti moemo izmjeniti sukladno naim potrebama. Prilikom bilo kakvih izmjena u toj datoteci ili promjena linkova na kernele moramo zadati naredbu # lilo v # Link na stari kernel # Vrijeme odabira sistema, u ovom sluaju 2 sekunde # Kernel (u naem sluaju link na kernel) # Ovo e biti ispisano u izborniku za izbor kernela vmlinuz # Program za uitavanje (lilo) se instalira u MBR # Osnovan particija gdje se nalazi na Linux OS # Prikazuje izbornik za odabir kernela # Defaultni kernel ako nismo nita izabrali

1273/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

da bi promjene bile aurirane. Ako smo napravili neku greku prilikm izmjena lilo.conf datoeke bit e nam prijavljeno prilikom izvenja ove naredbe. Svaki put kad izvrimo # lilo v parametri se nanovo upisuju u MBR, to ba nije poeljno. Grub to rjeava na elegantniji nain.

Podeavanje programa grub za uitavanje kernela


Grub je program neto mlae generacije, takoer je kao i lilo smjeten na boot sektor hard diska, ali ne zahtjeva aurianje boot sektora prilikom izmjena konfiguracijske datoteke ili verzije kernela. Njegova konfiguracijska datoteka je /etc/grub.conf, iji primjer moemo vidjeti ovjde: # /etc/grub.conf default=0 timeout=10 # Vrijeme odabira sistema u sekundama splashimage=(hd0,0) /boot/grub/splash.xpm.gz # Prikaz uvodnog ekrana iz Splash.xpm.gz title Linux root(hd0,2) # Ovo e biti ispisano u izborniku za izbor kerenla vmlinuz # Particija gdje se nalazi na Linux OS

kernel /vmlinuz ro root=/dev/hda2 # Mjesto odakle se uitava jezgra title Linux-old root(hd0,2) kernel /vmlinux.old ro root=/dev/hda2 Grub oznaava particije i diskove na drugaiji nain od Linux-a, prvi parametar u zagradama je redni broj diska, a drugi parametar je redni broj particjie na pripadjuem disku, tako bi npr, disk hda1 na grub-u imao oznaku (hd0, 1). Ovu datoteku grub ita prilikom podizanaja OS-a i nije potrebna nikakva radnja za njeno auriranje.

1274/1275

Sveuilite u Splitu Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima Kompajliranje kernela

ZAKLJUAK
Kao to se vidi, proces kompajliranja kernela je dosta sloen, mada je ovdje obuhvaen samo mali broj mogunosti suvremenih kernela na Linux-u. Vjerovatno e prvi pokuaji biti bezuspjeni i zadati e mnogo glavobolje, no nemojte odustati. Kada uspijete nekoliko puta uspjeno proi navedeni proces i malo bolje istraite podruje, vidjet ete koliko prednosti i mogunosti prua free software. injenica da u rukama imate oko 250 MB source-a i da ga moete prilagoditi svojim potrebama povlai za sobom pitanje gdje je svemu tome kraj. Upravo se zbog te injenice Linux danas vrti na ureajima kao to su mobilni telefoni, priruna raunala, komunikacijski sateliti, NASA-ina raunala. Ako se malo potrudite ve danas moete stavit novi kernel na raunalo koje ima jedan, dva ili moda ak 255 procesora.

1275/1275

You might also like