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.

GNU FILOZOFIJA I GNU LICENCA (Draen Hudoletnjak)

2.

STRUKTURA UNIXA (Marijela Napast)

3.

SHELL (Andrija Martinovi)

4.

SH I BASH (Sinia Julijan)

5.

C SHELL, T C-SHELL (Marijana Ladan-Pelivanovi)

6.

SHELL PROGRAMIRANJE (SHELL I BASH) (Predrag Jovanovi)

7.

BASH ADVANCED SHELL PROGRAMIRANJE (Marko Vukovi)

8.

REGEX (Manuel Vidonis, Zoran Zorii)

9.

VI EDITOR (Mario Strini)

6
30
42
72
111
138
160
179
213

10. EMACS (Matko Peji)

230

11. LOGIN I ID (Maja Mehinagi)

263

12. TELNET I SSH (Nina ugaj)

273

13. ARHIVIRANJE NA UNIX RAUNALIMA (Frane Gjeldum)

305

14. UNIX DEVICES, MOUNTING DEVICES (Davorin ajnovi)

322

15. AWK I SED (Branimir ivkovi)

343

16. SED (Tomislav Grgec)

370

17. GCC COMPILER (Kreimir Heimovi)

396

18. GDB, THE GNU SOURCE LEVEL DEBUGGER (Janko Rade)

419

19. GNU MAKE (Marko Ferk)

435

20. CVS SUSTAV ZA VERZIONIRANJE (Damir Jajeti, Tomislav Domanovac)


21. IDE (Ivan Podhraki)

469
509

22. ECLIPSE (Maja ugaj, eljko afar, Damir uric)


23. PIPE I FIFO (Goran Jurii)

527
556

4/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


Sadraj

24. FORK (Krasnodar Krajnik)

578

25. PROCESI I UPRAVLJANJE PROCESIMA (Vedran Dedu, Vanja Harambua)


26. SIGNALI (Krunoslav Zeman)

610
638

27. FORK PROCESI (Igor opec)

662

28. SOCKETS, UNIX DOMAIN, NETWORK (Matija upen)

672

29. TCP/IP (Saa Dragi)

691

30. TCP/IP API (Ivan Bri, Neven Kmeti)

718

31. UDP-USER DATAGRAM PROTOKOL (Majk Jednakovi)

776

32. FILE, DIRECTORY AND INODE PROGRAMMING (Boris Ivanievi)

796

33. INETD I TCPD (Jurica Boikovi)

815

34. INTERNET SERVICES (Goran Vlahovi)

827

35. RPC REMOTE PROCEDURE CALL (Dario Dugi)

858

36. RLOGIN RSH (Zvonimir Jankovi)

876

37. SAMBA I NFS (Marija Bili)

886

38. X WINDOW SYSTEM (Jakov Mihaljevi)

917

39. KDE (Adriana Mihalinec, Domagoj vegelj)

926

40. UNIX DESKTOP SYSTEM (Marina Petrovska)

970

41. DNS I DHCP (Daniel Van Schepdael)

996

42. INTERNET HISTORY (Dario Benko)

1016

43. UVOD U PERL (Amir Kos)

1033

44. PERL Practical Extraction and Report Language (Tamara Krutman,Ante Penava)
45. PYTHON (Ana Babi)

1090
1138

46. INTERPRETERI TCL/TK (Marijan Poljak)

1173

DISTRIBUCIJE LINUXA/UNIX
47. (Elizabeta Velkavrh, Alja Pavli-Raver, Eliot Karlo Pavleti)

1214

48. KOMPAJLIRANJE KERNELA (Saa Protulipac)

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 General Public Licence (GNU GPL)

GNU Lesser General Public License (GNU LGPL)

GNU Free Documentation Licence (GNU FDL)

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.

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

long time(timep)
long *timep;

Programski alati na Unix raunalima


Struktura Unixa

/* 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:

Shell:

/.../sh

Bourne shell

/.../csh

C shell

/.../tcsh

TC shell

/.../ksh

Korn shell

/.../bash

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

OPIS
Postavlja editor koji e biti koriten od strane drugih programa,
npr. mail programa

PAGER

Postavlja pager koji e biti koriten od drugih programa, npr.


mana za ispisivanje man stranica

PATH

Odreuje direktorije kroz koje e shell traiti da bi pronaao


odreenu naredbu. Direktoriji se pretrauju redom kojim se pojavljuju

PRINTER

Odreuje printer koji e sluiti za ispis svih dokumenata koji e


mu biti poslani lpr naredbom

b)

SHELL

Postavlja glavni shell

TERM

Odreuje tip terminala za programe kao to su editor i pager

TZ

Postavlja vremensku zonu u kojoj se nalazimo


manipulira povijeu naredbi

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)

pie shell skripte

e)

definira naredbene aliase

f)

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)

w ((Write) - Pii)
korisnik koji ima dozvolu pisanja nad datotekom moe mijenjati sadraj te

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

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

C Shell

Korn Shell

Turbo C 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.

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

ispisuje linije skripte koje se izvravaju

-x

ispisuje komande koje se izvravaju

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.

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

-izlaz na ekranu se privremeno zaustavlja.

< Ctrl > Q

-izlaz na ekranu se nastavlja.

< Ctrl > D

-najjednostavniji nain odjavljivanja sa sistema.

< Ctrl > C

-prekid procesa.

< Ctrl > Z

-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

text da bi stao u \

liniju

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

prevelikim

razmacima

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.

$*

Sadri sve argumente proslijeene programu.


Gdje je n neki integer sadri odreen argument po redoslijedu. Tako je $0 sama

$n

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

Putanja do defoultnog editora

GROUP

Login grupa

HOME

Putanja do HOME direktorija

HOST

Hostname operativnog sistema

IFS

Interni separator polja, uglavnom white space

LOGNAME

Login usera

PATH

Putanja gdje se nalaze naredbe

PS1

Primarni prompt string

PS2

Sekundarni prompt string

SHELL

Login shell koji se koristi

TERM

Tip terminala koji se koristi

USER

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

>

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

$var

Upotrijebi vrijednost za varijablu

$$

Process id.

$0

Command name.

$n

n-ti argument (0<n<9).

$*

Svi argumenti kao jedna rije

Poetak komentara

bg

Pozadinsko izvravanje

break

Prekid loop izraza

cd

Promjena direktorija

continue

Nastavak loop programa

69/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


Shell

Simbol/ comanda

Znaenje/akcija

echo

Prikai na izlazu (npr. ekran)

eval

Evaluiraj argument

exec

Izvri

fg

Foreground izvravanje

jobs

Prikai aktivne procese

kill

Terminiraj proces

newgrp

Promijeni u novu grupu

shift

Shift-aj poziciju parametara

stop

Suspendiraj proces u pozadini

suspend

Suspendiraj proces u foreground-u

time

Vrijeme naredbe

umask

Postavi dozvole nad fileom

unset

Obrii varijablu ili funkciju

wait

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

Praenje signala

Opis
Omoguuje kontrolu izvravanja scripti pomou
konstrukcija kao sto su petlje uslovne naredbe i sl.
Mogunost praenja interrupt i drugih signala koje
alje UNIX.

Bourne Korn C
Da

Da

Da

Da

Da

Da

Da

Da

Ne

Ne

Da

Da

Ne

Da

Da

Ne

Da

Da

Ne

Da

Da

Ne

Da

Da

Ne

Da

Da

Ne

Da

Ne

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

historija komandi

Mogunost da se vie podataka identificira istim


imenom.
Mogunost da se komande smjetaju u buffer,
kasnije modificiraju i ponovo izvravaju.

Kompletiranje

Mogunost da se u komandnoj liniji automatski

imena fajlova

dovri ime zapoetog fajla.

Integer aritmetika

Kontrola posla

Mogunost obavljanja aritmetikih operacija nad


varijablama u scriptama bez UNIX komandi.
Mogunost praenja i pristupa poslovima koji se
odvijaju u pozadini.

Editovanje

Mogunost da se prethodna ili tekua komandna

komandne linije

linija modificira tekst editorom.

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

binarni podaci (programi - komande)

/dev

ureaji (devices)

/dev/null

nul-device

/dev/tty

terminal ureaji

/lib

lib datoteke

/include

include header datoteke

/home

korisniki home direktoriji

/usr

korisnike datoteke

/usr/bin

korisnike binarne datoteke (programi)

/usr/bin/openwin

X windows datoteke

/usr/lib

korisnike lib datoteke

/usr/include
/usr/local

lokalne host datoteke

/tmp
/sbin

temp direktorij
administratorski alati

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

Relativni

Programski alati na Unix raunalima


Sh i bash

dir1/dir2/

../
~/

gleda se od sadanjeg direktorija


nadreeni direktorij (parent)

home direktorij

~user

user-ov home direktorij

Nekoliko naredbi za prikaz i manipulaciju datotekama

ls [options] [dir dir ...]

daje listu datoteka u direktoriju

opcije a l F R ....
pwd
cd[dir]

ispisuje radni direktorij


mijenja radni direktorij

df

trai disk

du

ispisuje iskoritenost prostora na disku

mkdir dir

stvara novi direktorij

rm file....

brie file ili ak cijelo stablo direktorija

cp file1 file2..... target kopira datoteke


mv file1 file2..... target

premjeta datoteke

cat [file1 file2...]

prikaz datoteka

more file1 file2....

prikaz datoteka stranu po stranu

file file...

doznaje tip datoteke

tail file ...

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:

ls aF

koritenje vie argumenata:

cat file1 file2 file3

Koritenje regularnih izraza:


?

zamjenjuje jedan znak (character)

zamjenjuje nula ili vie znakova

[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


....

expandira samo znakove $ ' !

Primjer:
echo \\
ispisuje

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

prikaz svih aliasa

unalias ime

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

proces ID jedinstveni cijeli broj

TT

procesu pridruen terminal

STAT

status procesa R runnable, T stopped, I idle, W swapped out, ...

TIME

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

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

Opis

varijable
HOME

Uobiajena vrijednost

apsolutno ime korisnikovog home-direktorija

ita se iz etc/passwd

npr. /student/ivica
LOGNAME korisniko ime (npr. ivica) kojim se prijavljuje
MAIL

ivica

apsolutno ime direktorija gdje se nalazi inbox /usr/mail/ivica


za e-mail

PATH

popis apstraktnih imena direktorija koje sustav /bin


pretrauje da bi naao i izvrio naredbe

SHELL

/usr/bin

apsolutno ime shell-a koju treba startati kao


login shell (npr. /bin/bash)

TERM

zadaje tip terminala na kojem korisnik radi

TZ

zadaje

vremensku

zonu

razliku

od

Greenwich Mean time

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

-csh i tcsh

export name=value

- sh i bash

Primjer:
setenv EDITOR emacs

- csh i tcsh

export EDITOR=emacs

- 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

(csh, tcsh)

set name=(value1 value2 value3)


name=value

(sh, bash)

argv

vrlo su vani shell programerima (komandni argumenti)

cwd

trenutni radni direktorij

home

Staza do home direktorija (ime home direktorija)

path

lista direktorija koji sadravaju komandne programe

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


shell
status

Va login shell
kod koji pokazuje stupanj uspjenosti prijanjih komandi

term

tip terminala koji koristite

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

- trai string user u datoteci /etc/passwd

find .-print | grep Unix

- trai sve datoteke koje sadre string Unix

find .-print | grep '^Unix' - trai sve datoteke koje zapoinju sa Unix
grep v Unix datoteka

- prikai sve linije koje ne match-aju Unix

Neke korisne opcije:


-C

broji linije

-h

ne prikazuj ime datoteke

-l

izlistaj samo datoteke koje sadravaju linije sa zadanim uvjetom

-v

prikai linije koje ne zadovoljavaju uvjet

-x

prikai one linije koje u potpunosti zadovoljavaju uvjet

99/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


Sh i bash

Regularni izrazi za grep:


c

bilo koji ne specijalni znak

\c

iskljui svako specijalno interpretiranje znaka c

poetak linije

kraj linije

[....]

bilo koji znak u rasponu

[^....]

bilo koji znak van raspona

bilo koji znak

r*

nula ili vie ponavljanja r

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,"

Telefon: ",$3}

adresar.txt
Ime: John Doe

Telefon: 021-336699

Ime: Jane Doe

Telefon: 021-332211

Ime: John Smith

Telefon: 021-112233

*(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

ili

vi ime_datoteke
Kad ste zavrili sa radom u editoru dodajte dozvolu za izvravanje:
chmod u=rwx ime_datoteke

ili

chmod +x ime_datoteke
Pokrenite skriptu:
./ime_datoteke
Prva linija u skripti mora definirati shell:
#!/bin/sh

Bourne shell

#!/bin/csh

C shell

#!/bin/tcsh

TC-shell

#!/bin/bash

BASH shell

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

- argumenti

$0

- 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

$var

Opis

Expandira vrijednost varijable var

$(var)

isto osim to zagrade zatvaraju ime varijabli koja e biti zamijenjena

$(var-nesto)

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

$(var=nesto)

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

nesto.

nesto.
$(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

# ulazni parametar

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


then
echo "$user je logiran"
else
echo "$user nije logiran"
fi

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

istina ako datoteka postoji

-d datoteka

istina ako je datoteka direktorij

-f datoteka

istina ako je datoteka obina datoteka

-L datoteka

istina ako je datoteka simboliki link

-r[wx] datoteka

istina ako datoteka ima dozvolu za itanje [pisanje, pokretanje]

-z string

istina ako je string nul-string

-n string

istina ako string nije null-string

str1=str2

istina ako su str1 i str2 isti

str1!=str2

istina ako su str1 i str2 razliiti

n1 eq n2

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

pokretanje novog programa u istom procesu preko memorijskog prostora

starog
procesa prepisuje se novi
fork

kreiranje novog procesa fork vraa status 0 child procesu i ostale

vrijednosti parent
procesu
Kao najei primjer za exec i fork uzima se slijedee:

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

argumenti iz komandne linije

cwd

trenutni direktorij

home

HOME direktorij

ignoreeof

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

Ako je setovana nije dozvoljeno prepisivanje datoteka redirekcijom

path

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

korisniko ime, startamo sa $USER

term

tip terminala koji koristimo, startamo sa $TERM

shell

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

Naredbena linija broj n. Broj n se moe otkriti sa history

!-n

Naredbena linija sa brojem za n manji od trenutnog

!string

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^

Prvi argument n-te naredbene linije

!n$

Zadnji argument n-te naredbene linije

!i:j

j-ti argument i-te naredbene linije

^str1^str2

U zadnjoj naredbi zamijeni str1 sa str2

!n:s/str1/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

Privremeno zaustavljanje procesa

bg [%job]

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 *

Ispisuje sve datoteke trenutnog direktorija

% ls *ing

Ispisuje sve datoteke trenutnog direktorija koji zavravaju sa "ing"

[lista]

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

{ string..}

Programski alati na Unix raunalima


C shell, T C-shell

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

~home

Trenutni direktorij korisnika

~user

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

if (izraz) then
naredba

else if (izraz) then

naredba

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 strl1:

case -p:

naredba
breaksw
...

breaksw

case -c:

case strn:

cc -c $2

naredba
breaksw

lp $2

breaksw

case -l:

128/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

default:

Programski alati na Unix raunalima


C shell, T C-shell

cc $2

naredba
breaksw

breaksw
endsw

endsw

FOREACH (izvrava niz naredbi odreeni broj puta)


foreach var name (wordlist)
naredba
end

foreach arg ($*)


echo $arg

end

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

Logike operacije

+ zbrajanje

<< pomicanje u lijevo

- oduzimanje

>> pomicanje u desno

* mnoenje

| ili operacija

/ dijeljenje

^ ekskluzivno ili

% dijeljenje po modulu & I operacija


++ inkrementiranje
-- dekrementiranje

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

univerzalni znaci dozvoljeni ($file =~ *.c).


!~

Istinito ako lijevi string ne odgovara stringu s desne strane. Univerzalni znaci

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 strane vei od desnog


>=

Istinito ako je broj s lijeve str. vei ili jednak desnom

|| Logiko ili
&&

Logiko i

{command}

Istinito ako je naredba uspjeno zavrena

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

alias
[name[expression]]
bg [%job]
cd [name], chdir
[name]
echo [-n[words...]]

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

exit [status]

Izlazak iz shell-a sa statusnom linijom

fg [%job]

Vraanje procesa iz pozadine

history
jobs [ l ]

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

kill
nohup [command

Izvrava naredbu ignorirajui signale. Naredba se ne moe prekinuti ni

[args...]]

kada se korisnik koji je startovao odjavi sa sistema.

rehash
repeat count
command [args...]

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]

Pomjera rijei u varijable u lijevo. Prva rije se gubi. Anko nije definirano
ime varijable, korist se argv.

source [-h]

Izvrava drugi script. Sa -h opcijom naredbe iz scripta se ne izvravaju

filename

nego samo umeu history u listu.

stop [%job]
unalias pattern

Brie postavljene aliase ija imena odgovaraju patternu.


Npr. unalias * brie sve.

131/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

unset pattern
unsetenv pattern

Programski alati na Unix raunalima


C shell, T C-shell

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

Login

Neinteraktivan

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/

lost+found/

>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

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:
+

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
*

mnoenje

dijeljenje

zbrajanje

oduzimanje

ostatak cjelobrojnog dijeljenja

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

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:

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:

Funkcija

-gt

vee od

-lt

manje od

-ge

vee ili jednako

-le

manje ili jednako

-eq

jednako

-ne

razliito

Usporedba nizova znakova


-z

testiranje za prazan niz znak

-n

testiranje za vrijednost

jednakost

!=

nejednakost

Str

da li je vrijednost stringa null

147/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


Shell programiranje (shell i bash)

Logike operacije
-a

logiki AND

-o

logiki OR

logika negacija

Testovi za datoteke
-f

datoteka postoji,obina je

-s

datoteka nije prazna

-r

moe se itati

-w

mogue pisanje u datoteku

-x

mogue izvravanje datoteke

-d

ime datoteke je direktorij

-h

ime je simboliki link

-c

ime je oznaka ureaja

-b

ime je blok datoteka

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:

if naredba then

naredba
fi
ifthenelse

148/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Sintaksa:

Programski alati na Unix raunalima


Shell programiranje (shell i bash)

if naredba then

naredbe
else
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

Sintaksa while: while naredba do

lista-vrijednosti
do

naredbe
done

naredbe
done
Sintaksa until:

until naredba do

Sintaksa for: for varijabla do

naredbe
done

naredbe
done

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:

bash numarg jedan dva tri etiri

Unijeli ste 3 argumenta

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

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:

bash numarg jedan dva tri etiri

Unijeli ste 3 argumenta

jedan
dva tri
etiri

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

(omoguava itanje i izvravanje)

chmod +rx scriptname

(omoguava itanje i izvravanje

ili:
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.

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

#identicno kao i: echo ${hello}

echo "$hello"
echo "${hello}"
echo
hello="A B

D"

echo $hello

# ispis: A B C D

echo "$hello"

# ispis: A B

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

#vanjska petlja

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

for b in 1 2 3 4 5

#resetiraj inner

#unutarnja petlja

do
echo "stavi $inner u unutarnju petlju."
let "inner +=1"

#povecaj brojac inner za 1

done

#kraj unutarnje petlje

let "outer +=1"

#povecaj brojac outer za 1

echo
done

#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))

#povecaj n za 1

echo "n = $n"

# 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

ulazni podaci

w1..n

teinski koeficijenti

f( )

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

()

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,

ili kod specijalnih nizova


|

koristi se kad elimo postaviti alternativni odabir

( ) 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

Objanjenje

Zahvaa 'a'

abcbd

Zahvaa [bcd]*, ide daleko koliko moe, a to je do kraja stringa

Promaaj

abcb

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

abc

abcb

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

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:

nezahvaeni stringovi:

AA

A A

AbA

AbbA

ABA

A__A

AzA

AokoA

A.A

A.LA

^ oznaava poetak reda


^Koliko je sati zahvaa liniju koja poinje stringom "Koliko je sati"
^\d

zahvaa liniju koja poinje brojem

PRIMJER:
^Koliko je sati zahvaeni stringovi:
"koliko je sati .. .."
^\d

nezahvaeni stringovi:

"Koliko je sada sati"

zahvaeni stringovi:

nezahvaeni stringovi:

1ds

_987h

0ABD

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:

\.$

nezahvaeni stringovi:

An52

dkkd

Bell1

bell

_5

6_

zahvaeni stringovi:

nezahvaeni stringovi:

eto.

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:

nezahvaeni stringovi:

DA

DBA

D0123A

D1CA

D01A-KT

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

nezahvaeni stringovi:
DA

D0123A

D1CA

D01A-KT

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:

nezahvaeni stringovi:

256

2556

26

236

256adf

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:

nezahvaeni stringovi:

2559

259

255559

255555555559

255596

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:

^[A-Z]

ako je

zakon

bGet

Bget

cuker

Car

zahvaeni stringovi:

nezahvaeni stringovi:

nezahvaeni stringovi:

aS

Guru

luk

Pas

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:

nezahvaeni stringovi:

.*asdasd\

.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)

(c|C) $

zahvaeni stringovi:

nezahvaeni stringovi:

zaribati

ribolov

ribe

stribor

zahvaeni stringovi:

nezahvaeni stringovi:

Tko je u dv.C

tko je u dv.C ?

Gdje je Wc

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:

nezahvaeni stringovi:

_.d5

Dd5

A.D4

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:

nezahvaeni stringovi:

22.05

D22g056

g22.0

22.988

22.088A

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:

nezahvaeni stringovi:

_22dlf

555fhdj

g33_.c

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:

nezahvaeni stringovi:

5556as

s5aff

d99d456

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:

nezahvaeni stringovi:

26

2a5

2.6

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:

nezahvaeni stringovi:

0fshdf0

ad9

1g9

_99s

987

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:

nezahvaeni stringovi:

adf

123

pl89pp

1vf.

'\s' zahvaa bilo koji white space

Znak

Opis

\f

Form-feed (poetak reda)

\n

Linefeed (novi red na poetak)


\r+\f

\r

Carriage return (novi red)

\t

Tab

\v

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:

nezahvaeni stringovi:

Ides u ducan..

.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:

nezahvaeni stringovi:

9idem

a9cd

945

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:

nezahvaeni stringovi:

1233A

1233

DA

Da

'\A' poetak stringa


PRIMJER:
\A... zahvaa prva tri slova nekog stringa
\A...

zahvaeni stringovi:

nezahvaeni stringovi:

Tada se zbilo...

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:

nezahvaeni stringovi:

Tada se zbilo...\n

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

MATEMATIKA 2

TALIJANSKI ...

Pogodak na matematici 2.
(?!regEx)

da li se ispred NE nalazi ...

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

3398-000

Alex, France

5598-999

Indi, Car

8895-977

Elvis, Potrag

9989-771

Marko, Zeus

1189-001

Zoran, Yevs

9987-573

*/
egrep "^A" tel_imenik

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

5598-999

egrep ' ( Indi|Elvis) ' tel_imenik


Indi, Car

8895-977

Elvis, Potrag

9989-771

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
GNO

MANU

LOGIN

01.01.2004. 12:00

LOGIN

01.01.2004. 12:38

MANU LOGOUT

01.01.2004. 23:58

GNO

LOGOUT

02.01.2004. 23:59

EXI

LOGIN

03.01.2004. 23:15

EXI

LOGOUT

03.01.2004. 23:29

ZORAK LOGIN

03.01.2004. 23:29

MANU LOGIN

03.01.2004. 23:30

ENA

04.01.2004. 09:00

LOGIN

ZORAK LOGOUT

04.01.2004. 09:05

SETER LOGIN

04.01.2004. 10:01

MANEK

LOGIN

04.01.2004. 10:03

SEKOviN

LOGIN

04.01.2004. 10:05

MARA LOGIN

04.01.2004. 11:59

MANU LOGOUT

04.01.2004. 12:47

ZORAK LOGIN

04.01.2004. 23:00

SEKOviN

LOGOUT

04.01.2004. 12:59

MARA LOGOUT

04.01.2004. 13:59

INED

LOGIN

04.01.2004. 15:08

ENA

LOGOUT

04.01.2004. 16:00

SETER LOGOUT

04.01.2004. 16:07

MANEK
INED

LOGOUT

LOGOUT

04.01.2004. 16:26

05.01.2004. 00:05

BREZ LOGIN

05.01.2004. 06:01

EXI

LOGIN

05.01.2004. 08:02

MANU LOGIN

05.02.2004. 09:08

203/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


RegEx

ZORAK LOGOUT

05.02.2004. 09:09

MANU LOGOUT

05.02.2004. 10:59

ZORAK LOGIN

06.02.2004. 11:55

ZORAK LOGOUT

06.02.2004. 12:59

EXI

LOGIN

06.02.2004. 13:05

EXI

LOGOUT

06.02.2004. 13:00

SETER LOGIN

10.02.2004. 08:00

EXI

10.02.2004. 08:01

LOGIN

SETER LOGOUT

12.02.2004. 09:05

EXI

12.02.2004. 09:58

LOGOUT

SETER LOGIN

13.02.2004. 08:08

SETER

LOGOUT

14.02.2004. 09:05

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

LOGOUT 02.01.2004. 23:59

EXI

LOGIN 03.01.2004. 23:15

EXI

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

prezime

kolicina

marko puzla 5

naziv

kocke

placeno
0

darko

puh

kugla

darko

on

kocke

marin

draget 4

eston

sret

narav

tezak 4

buli
7

1
plast

marke

1
0

*/
awk_/*
$5 ~/[0]/ {print $0} $5 ~ /[0]/ {lines++}
END{print "Broj duznika:",lines}
*/

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

5
7

narav tezak

kocke 0
kocke 0

marke 0

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

5
7
4

kocke 0
kocke 0
marke 0

Broj duznika: 3
zo@linux:~>
vi supstitucija u vi ex modu

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,

Parduk, HR,

Melten Bukrest, SmartNet,


Jadranka Muzic

,APL

Gonar Tenser, Siemens,HR


Drago Mio,Endor-Soft

10000 Zagreb
SLO,21100 Ljubljana

,HR,

21000 Split

,42000 Varazdin

,BIH, 50000 Sarajevo

zo@linux:~> ex sub2
"sub2" 6L, 212C
Entering Ex mode. Type "visual" to go to Normal mode.
:%s/\([^,]*\),\([^,]*\),\([^,]*\),\(.*\)/\1,\3,\4,\2/
:wq
zo@linux:~> cat sub2
Marko Blazevic, HR,

10000 Zagreb,

Parduk

Melten Bukrest,

SLO,21100 Ljubljana,

Jadranka Muzic

,HR,

SmartNet

21000 Split,APL

Gonar Tenser,HR ,42000 Varazdin ,

Siemens

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

MAT II

DV.F101
19:00-21:20

DV.F101
-

EKONOMIKA
DV.F101

16:30-18:00

18:10-21:20
UNIX
DV.F101

16:30-18:00
NWP

8:00-9:35

TALIJANSKI

DV.F101
18:10-21:20

DV.F02
9:45-13:05

NWP(labosi?)
DV.F112

PIN

DV.F02

13:15-14:50

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

MATEMATIKA II NWP

TALIJANSKI

16:30-19:00

16:30-18:00

16:30-18:00

8:00-9:35

MATEMATIKA II

MATEMATIKA II

NWP

TALIJANSKI

DV.F101

DV.F101

DV.F101

DV.F02

19:00-21:20

18:10-21:20

18:10-21:20

9:45-13:05

EKONOMIKA

UNIX

NWP(labosi?)

PIN

DV.F101

DV.F101

DV.F112

DV.F02

:wq
zo@linux:~> cat txt

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

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

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

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

brie znak pod kursorom (count za obrisati count znakova)

naputanje VI editora (ukoliko je dokument mijenjan dobit emo

upozorenje)
q!

naputanje bez snimanja (nema upozorenja)

snimanje (moe se navesti iza w ime file-a)

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

magic

noshowmatch

autoprint

mesg

noshowmode

noautowrite

nmodelines

noslowopen

nobeautify

nonumber

tabstop=8

directory=/tmp nonovice

taglength=0

nodoubleescape

nooptimize

tags=tags

noedcompatible

paragraphs=IPLPPPQPP

LIpplpipnpbp term=xterm

noerrorbells

prompt

noterse

/usr/lib/tags

noexrc

noreadonly

timeout

flash

redraw

timeoutlen=500

hardtabs=8

remap

ttytype=xterm

noignorecase

report=5

warn

keyboardedit

scroll=11

window=23

keyboardedit!

sections=NHSHH

HUuhsh+c wrapscan

nolisp

shell=/bin/csh

wrapmargin=0

nolist

shiftwidth=8

nowriteany

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

Za bilo koji x, znak je Control-x

M-x

Za bilo koji x, znak je Meta-x (vie o Meta znakovima u

nastavku teksta).
C-M-x

Za svaki x, znak je Control-Meta-x.

RET

Tipka povratka (zapravo C-m).

SPC

Razmaknica

ESC

Tipka izlaza, odgovara joj C-[

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

Vidite cijelu datoteku

Top

Vidite vrh datoteke

Bot

Vidite dno datoteke

Percentage

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

Izvri zamjenu

DEL

Nemoj izvriti zamjenu

256/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

RET

Zaustavi query-replace, ne izvrivi zamjenu

ESC

isto kao i RET

Programski alati na Unix raunalima


Emacs

. 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

OPIS
Ime pod kojim se korisnik prijavljuje na sistem
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
Redni broj glavne grupe (Group IDentitiy) kojoj pripada dani korisnik

GID

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

Inicijalni shell

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)

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

passwd x 7 n 10 korisnik

passwd f 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.

passwd x 1 korisnik

Iskljuuje vremensku kontrolu trajanja lozinke.

passwd -w 14 korisnik

Prikazuje upozorenje da lozinka istie za 14 dana.

passwd -1 korisnik

Privremena zabrana prijavljivanja danog korisnika.

passwd -u korisnik

Ukida privremenu zabranu prijavljivanja danog


korisnika.

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

kriptirani protokol to znai da su svi podaci koji se alju i

primaju kodirani, tj. sigurni od presretanja i itanja.

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

23 / tcp

SSH

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

se

program

instalira

zasebno,

instalacija

programa

zahtjeva

Zlib

(http://www.gzip.org/zlib/) biblioteku te OpenSSL (http://www.openssl.org/) programski


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.

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

potrebno

je

kopirati

klju

id_rsa.pub

ili

id_dsa.pub

$HOME/.ssh/authorized_keys2 datoteku udaljenog raunala.


Nakon

to

je

stvorena

odgovarajua

$HOME/.ssh/authorized_keys

ili

$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

/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,

/etc/ssh_host_dsa_key.pub,

/etc/ssh_host_rsa_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

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

tar na

engleskom znai tape arhiver. Modernije verzije tara danas pristupaju raznim dostupnim
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

Postupak kopiranja kolekcije dokumenata na disk ili

traku kao zatita od moguih oteenja ili gubitaka.


-Za transport

Arhivu kreiranu na jednom sistemu lako prenesemo na

drugi sistem i tamo ekstrahiramo njen sadraj


Obino arhive dolaze s ekstenzijom .tar! Nije potrebno navoditi ekstenziju, ali dobro
je radi preglednosti.

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

listamo sadraj arhive

ili

--exstract
-x

ekstrahiramo lanove arhive.

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

se da se nalazimo u direktoriju practice koji je poddirektorij home

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

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

Primjeuje se da arhiva nije

Programski alati na Unix raunalima


Arhiviranje na Unix raunalima

u poddirektoriju practice ,ve u naem home

direktoriju iz kojeg je tar i bio pozvan..


Listanje arhiva
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

ekstrahiranog

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.)

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

aurira tar arhivu

usporeujui datum kreiranja ili modificiranja lana arhive s datumom kreiranja ili
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.

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

Opis

-w

Stvaranje sustava dat. Sa dozvolom za itanje i pisanje

-r

Stvaranje sustava dat. Sa dozvolom samo za itanje

-n

Stvaranje sustava bez zapisivanja u datoteku /etc/mtab

-t type

Odreivanje vrste sustava datoteke(ext2,msdos,nfs itd)


Stvaranje svih sustava dat. Koji se nalaze u /etc/fstab

-a

Osim ovih opcija moete koristiti i dodatne!Vidi

-o popis_opcija

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

swap swap pri=1

/dev/hda6

/ext2 defaults

/dev/hda5

/boot ext2 defaults

326 /1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


Awk & sed

none

/dev/pts

devpts gid = 5, mode = 620 0

none

/proc proc

defaults

Potrebno je ubaciti tekst za win particije , neto ovako:


/dev/hda7

swap swap pri=1

/dev/hda6

/ext2 defaults

/dev/hda5

/boot ext2 defaults

/dev/hda1

/win/c vfat

defaults

/dev/hda8

/win/d vfat

defaults

none

/dev/pts

devpts gid = 5, mode = 620 0

none

/proc proc

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:

Type: Direct-Access

ANSI SCSI revision: 02

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

/boot

ext2

defaults

/dev/sda5

/home

ext2

defaults

/dev/cdrom

/mnt/cdrom

iso9660

noauto,owner,ro

/dev/fd0

/mnt/floppy

auto

noauto,owner

/dev/sdb7

swap

swap

defaults

LABEL=/usr /usr

ext2

defaults

LABEL=/var /var

ext2

defaults

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

odlomka paratetri se odreuju pomou parova ime =

vrijednost, primjerice

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

Parametri

Opis

? or help

[command]

Nudi pomo za pojedinu naredbu ili openito pomo

[SHELL COMMAND]

cd

[directory]

lcd

[directory]

Del

[files]

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.

mkdir

[directory]

Stvaranje direktorija na udaljenom raunalu

print

[file]

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.

Direktno na naredbenom retku. U tom sluaju, program je argument jednog

naredbenog retka, obino ograen apostrofima (') kako bi sprijeili shell u nastojanju da ga
proiri.
b.

Koristei f prog opciju.

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

Character

\a

audible bell

\b

backspace

\f

formfeed

\n

newline

\r

carriage return

\t

horizontal tab

\v

vertical tab

\ooo

octal value ooo

\xdd

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 !~

kao dinamiki

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.

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)

grouping

$i V[a]

field, array element

V++ V

increment, decrement

++V --V
A^B

exponentiation

+A -A !A

unary plus, unary minus, logical NOT

A*B A/B A%B

multiplication, division, remainder

A+B A-B

addition, subtraction

AB

string concatenation

A<B A>B A<=B

comparisons

A>=B A!=B A==B


A~B A!~B

regular expression matching

A in V

array membership

A && B

logical AND

A || B

logical OR

A?B:C

conditional expression

V=B V+=B V-=B

assignment

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

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

broj polja u tekuem zapisu

NR

broj ukupno proitanih zapisa

FILENAME ime datoteke koja sadri tekui zapis


FNR

broj zapisa proitanih iz tekue datoteke

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
-

poravna polje po lijevoj strani; default je poravnavanje polja po desnoj

strani
0

nula na poetku ispisuje broj sa nulom na poetku

je minimalna irina polja

je preciznost

je znak za pretvorbu

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

decimal integer

decimal integer

unsigned octal integer

x,X unsigned hexadecimal integer


u

unsigned decimal 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

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

Usage

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.

368 /1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

\n

Programski alati na Unix raunalima


Awk & sed

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 '\

\' ima identian uinak kao i obian izraz bez te

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

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

GNU zajednici. Tako e izmjene uvelike koristiti cjelokupnoj software

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).

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

i offset u tekstualnom/podatkovnom

segmentu)
tablica vanjskih referenci (koje se varijable koriste no u stvari su u drugim
modulima)

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

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

Info bre (hTABi)

Programski alati na Unix raunalima


GDB

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

-- Aliases of other commands

breakpoints

-- Making program stop at certain points

data

-- Examining data

files

-- Specifying and examining files

internals

-- Maintenance commands

obscure

-- Obscure features

running

-- Running the program

stack

-- Examining the stack

status

-- Status inquiries

support

-- Support facilities

tracepoints

-- Tracing of program execution without stopping the program

user-defined

-- 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

Pokazuje informacije o ulaznim i izlaznim opcijama koje koristi

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.

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

Postavljanje toke prekida

break function

na funkciju function

break +offset

Na broj(offset) linije

break offset

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

Na adresu address

break ... if cond

Sa uvjetom cond

tbreak args

Samo za jedno zaustavljanje

hbreak args

Hardware toke prekida

thbreak args

Hardware toke prekida za jedno zaustavljanje

rbreak regex

Na svim funkcijama koje odgovaraju na izraz


regex

info watchpoints [n]


info breakpoints [n]

Ispisuje tablicu svih toaka prekida, toaka

info break [n]

pregleda i toaka zahvata koje nisu izbrisane

Stupci tablice info


Breakpoint Numbers

Type

Breakpoint, watchpoint, ili catchpoint.

Disposition
Enabled or Disabled

y/n

Address

memorijska adresa

What

mjesto u kodu

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

Za izraz .

rwatch expr

Koja e se zaustaviti kada se expr proita iz programa.

425/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

awatch expr

Programski alati na Unix raunalima


GDB

Koja e se zaustaviti kada se expr proita ili upie u program.

info watchpoints

ispisuje popis preglednih toaka , isto kao i info break

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

Zaustavlja kada se desi dogaaj event


event:
throw

Bacanje C++ exception-a.

catch

Hvatanje C++ exception-a.

exec

Poziv komande exec.

fork

Poziv komande fork.

vfork

Poziv komande vfork.

load
load

Dinamino uitavanje shared library-a ili uitavanje

libname

library-a:libname.

unload

tcatch event

unload

Dinamino zatvaranje shared library-a ili zatvaranje

libname

library-a:libname.

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

brie svaku toku koja postoji u slijedeoj instrukciji


function

brie svaku toku koja postoji u slijedeoj funkciji

clear filename:function
clear linenum
clear filename:linenum

brie svaku toku koja postoji u odreenom redu koda

linenum
delete [breakpoints] [range...] brie svaku toku u opsegu range. Ako se ne navedu
argumenti, obriu se sve toke

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...]

iskljuivanje toaka prekida

enable [breakpoints] [range...]

ukljuivanje toaka prekida

enable [breakpoints] once range...

poslije zaustavljanja programa postaju iskljuene

enable [breakpoints] delete range...

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]

ignore-count odreuje koliko break-ova da ignorira.

c [ignore-count]
fg [ignore-count]
step

nastavljanje do slijedeeg reda koda

step count

Nastavljanje, ali onoliko puta koliko je zadano count-om

next [count]
set step-mode
set step-mode on
set step-mode off

preskae sve linije koje nemaju ispravljake informacije

until

Dok se izlazi iz frame-a until komande u drugi frame

stepi arg
nexti arg
ni

Izvravanje jedne strojne instrukcije

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

koristimo za prebacivanje iz jednog okvira u drugi i ispisivanje

vrijednosti.
select-frame

samo prebacivanje bez ispisivanja

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

ispisuje samo podatke o unutarnjem okviru (frame-u) specificiranom s n

backtrace -n
bt - n

ispisuje samo podatke o vanjskom okviru (frame-u) specificiranom s n.

Backtrace ispisuje i ime datoteke, argumente i broj linije u kodu.


bt 3

pokazuje unutarnja tri okvira(frame).

#0 m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)


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...)

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

odabir okvira n

frame addr
f addr
up n
down n

odabir okvira na adresi address


pomicanje okvira n po stogu prema gore
pomicanje okvira n po stogu prema dolje

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.

Informacije o okvirima
frame
f

ispisuje informacije o okviru koji je trenutno odabran

info frame
info f
Ispisuje detaljnije informacije o trenutno odabranom okviru u obliku:

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

ispisuje informacije o okviru na adresi addr

info args

ispisuje argumente iz okvira

info locals

ispisuje lokalne varijable okvira

Pretraivanje podataka
Uobiajeni nain pregleda podataka je komandom print (p).
print expr
print /f expr

Ispisuje vrijednost izraza expr

print
print /f

Ispisuje vrijednost zadnjeg izraza ako se ne napie koji izraz.

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

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

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

dodaje izraz expr u listu automatskog prikaza.

display/fmt expr

dodaje izraz expr u odreenom formatu fmt u listu

automatskog prikaza.
undisplay dnums...
delete display dnums...

brie izraz odreen identifikacijskim brojem dnum

disable display dnums...

iskljuuje ispisivanje, ali ga je kasnije mogue opet ukljuiti

enable display dnums...

ukljuuje ispisivanje automatskog prikaza

display

ispisuje trenutne vrijednosti isto kao i kada stane program

info display

ispisuje popis varijabli koje se ispisuju

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

#module for t widdling the forbs

foo.c

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

WILDCARD

OZNAKA

NAZIVIMA

FILEOVA
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,

.DELETE_ON_ERROR,

.PRECIOUS,

.IGNORE,

.INTERMEDIATE,

.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

svaki razmak sa zarezom, kroz vrijednost fooa i

zamjenjuje rezultat.

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

email2

1 udrin@zg.tel.hr

1 udrin@zg.tel.hr

2 udrin@zg.htnet.hr

2 udrin@zg.htnet.hr

3 aleksandra@zg.hinet.hr

3 ADSL_ZA_DZABE@zg.t-com.hr

4 oksi@zg.htnet.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

config,v

checkoutlist,v cvswrappers

history

notify

taginfo,v

loginfo

notify,v

verifymsg
verifymsg,v

commitinfo

cvswrappers,v loginfo,v

rcsinfo

commitinfo,v

editinfo

modules

rcsinfo,v

config

editinfo,v

modules,v

taginfo

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

1.2;

access;
symbols
c:1.1.1.1 b:1.1.1;
locks; strict;
comment @# @;

1.2
date 2004.12.19.21.22.06; author cvsuser4;

state Exp;

branches;
next

1.1;

1.1
date 2004.12.12.18.37.53; author cvsuser4;

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;

state Exp;

branches;
next

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

U usporedbi sa Anjutom, KDevelop je idealan za stvaranje

Programski alati na Unix raunalima

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

http:/register.borland.com .

Ako je

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

C ++. Prua podrku za mnoge

jezike te meu ostalim i FTP.


Koristi se za otkrivanje pogreaka u Javi.

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.

dependencies section - sadri sve plug-inove potrebne plug-inu da se

kompajlira i sve extension points kojima se koristi


2.

an extension section - deklarira sve funkcionalnosti koje plug-in prua

platformi
3.

a runtime section - deklarira biblioteke gdje su plug-in kodovi upakirani.

4.

an extension points section - deklarira nove function points definirane od

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:

podrka konstruiranju razliitih alata za razvoj aplikacija

podrka irokom spektru proizvoaa programskih alata, ukljuujui nezavisne

softverske prodavae

podrka alatima za manipulaciju raznih tipova sadraja (npr. HTML, Java, C,

JSP, EJB, XML i GIF)

omoguavanje savrene integracije alata u razliite sadrajne tipove i preko

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

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
Help

Workbench

NewTool

JFace
SWT
NewTool
Team
Workspace
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 OS-

neovisnim API-jem.

JFace UI toolkit implementiran upotrebom SWT koji pojednostavnjuje

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

TM

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.

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>

/*definira fork() i pid_t*/

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.

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)

/*sta je tocno napravio child process?*/

{
/*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:

/*fork() je uspio, sad smo unutar PARENT procesa*/

wait (&child_status); /*cekaj dok ne zavrsi child process*/


}
/* 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.

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 razmjenu
podataka

Za procese na
odvojenim hostovima

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( )

read( )
p[0]

p[0]

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.

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;

/*podaci primljeni od parent-a*/

int rc;

/*povratna vrijednost od read()*/

close(data_pipe[1]);

/*prvo zatvaramo write dio

pipea*/

/*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)

/*u slucaju neuspjeha obavijesti o gresci I izai*/

{
perror(Parent);
close(data_pip[1]);
exit(1);
}
}

/*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;

/*pid child procesa*/

int rc;

/*za spremanje povratnih vrijednosti*/

/*prvo stvorimo pipe*/


rc = pipe(data_pipe);
if (rc == -1)
{
perror(pipe);
exit(1);

569/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


PIPE i FIFO

}
pid = fork();
switch (pid)
{
case -1:

/*fork nije uspio*/

perror(fork);
exit(1);
case 0:

/*unutar child procesa*/


do_child(data_pipe);

default:

/*unutar parent procesa*/

do parent(data_pipe);
}
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

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

pclose(FILE

*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)

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.

sa mknod naredbom iz shell-a.

2.

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

Opis

Pid_t getpid(void)

Process ID

Pid_t getppid(void)

Parent process ID

Pid_t getuid(void)

Effective user ID

Pid_t geteuid(void)

Real group ID

Pid_t getgid(void)

Effective group ID

Pid_t getegid(void)

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

file status flags


current file offset

f d 0:
f d 1:
f d 2:

v-node ptr

...

file status flags


current file offset
v-node ptr

f d 0:
f d 1:
f d 2:

file status flags


current file offset

...

i-node information
current file size
v-node information
i-node information
current file size

Child proc.table entry

fd flags ptr

v-node table
v-node information

v-node ptr

v-node information
i-node information
current file size

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

User mode

/etc/init

kojemu je u korijenu init


proces. Servisi (procesi) koje
pokree init definirani su u
konfiguracijskoj

Proces 0: Kernel bootstrap

Proces 1: pokree predefinirane servise, kreira


procese za login
fork
exec
login terminal
/etc/getty
/etc/getty
exec

datoteci

/bin/login

/bin/login

provjera passworda

exec

/etc/init

(starije

UNIX-a)

verzije

/sbin/init

user2

shell

shell

shell

user1

ili

/etc/inittab. (novije verzije).


Init je korisniki proces sa
superuser privilegijama koji

Slika1. hijerarhija procesa u UNIX-u

nikada ne umire.

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

PPID
0
1

C
0
0

STIME TTY
12:19
12:19

TIME
?
?

00:00:03
00:00:00

init [5]
[ksoftirqd/0]

12:19

00:00:00

[kapmd]

1
5687
5840

0
5686
5687

12:20
0
0

13:35
13:58

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

CMD

00:00:00
/usr/sbin/atd
pts1
00:00:00
/bin/bash
pts1
00:00:00
ps -A -f

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>

// sadri deklaraciju pid_t tipa podataka

#include <unistd.h>

// sadri deklaraciju forka i ostalih funkcija za rad s procesima

pid_t fork(void);
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()

2 -alocate

kernel

proces structure

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

Data
Text

5 - shared
...
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

- je ime programa kojeg pokreemo

argv []

- predstavlja listu argumenata prilikom pokretanja; lista argumenata je niz


stringova koji mora biti zakljuen nul pokazivaem

envp[]

- 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

- eka na bilo koji child proces ( waitpid (-1, &status, 0) = ekvivalent obinom
wait pozivu)

pid > 0

- eka na child iji PID = pid

pid == 0

- 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

pid <= -1

Programski alati na Unix raunalima


Procesi i upravljanje procesima

- 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

TIME COMMAND
0:00 /bin/sh -c ./primjer4_waitpid ; echo "Press

R
S
S
S
R
S
STAT
S

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

S
Z
Z
Z
R
S
child 0
child 1
child 2
STAT
S

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

- podrazumijevani odgovor na signal

act.sa_handler = SIG_IGN

- signal se ignorira

act.sa_flags is SA_NOCLDSTOP - kada se child

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

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

Programski alati na Unix raunalima


Procesi i upravljanje procesima

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);

// 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

Programski alati na Unix raunalima


Procesi i upravljanje procesima
=
=
=
=
=

5873,
5869,
5870,
5872,
5871,

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)

- brie deskriptor pipefd i zatvara file na koji se deskriptor


odnosi ako je to posljedni deskriptor koji upuuje na file

newpipefd = dup(pipefd)

- duplicira pipefd na najnie slobodno mjesto: newpipefd.

dup2(pipefd,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

Programski alati na Unix raunalima


Procesi i upravljanje procesima

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
}
}

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.

Normalni zavretak (dobrovoljno)

2.

Zavretak zbog greke (Error exit) (dobrovoljno)

3.

Nepopravljiva greka (Fatal error) (prisilno)

4.

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];

/* first, define an array to store the two file descriptors */

int rc = pipe(pipes);

/* now, create the pipe */

if (rc = = -1) {

/* pipe() failed */

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.

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

mknod prog_pipe p

Programski alati na Unix raunalima

-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 uid; /* owner effective user ID and effective group ID */


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.

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

UID

PID

PPID

4 S

C PRI
0

75

NI ADDR
0

342 schedu ?

SZ WCHAN

TTY

1 S

75

0 contex ?

00:00:00 keventd

1 S

75

0 schedu ?

00:00:00 kapmd

1 S

94

19

0 ksofti ?

00:00:00 ksoftirqd_C

1 S

85

0 bdflus ?

00:00:00 bdflush

1 S

75

0 schedu ?

00:00:00 kswapd

1 S

75

0 schedu ?

00:00:00 kscand/DMA

1 S

75

0 schedu ?

00:00:00 kscand/Norm

1 S

75

0 schedu ?

00:00:00 kscand/High

1 S

10

75

0 schedu ?

00:00:00 kupdated

1 S

11

85

0 md_thr ?

00:00:00 mdrecoveryd

1 S

15

75

0 end

00:00:00 kjournald

1 S

73

75

0 end

00:00:00 khubd

1 S

3056

75

360 schedu ?

00:00:00 syslogd

5 S

3060

75

342 do_sys ?

00:00:00 klogd

5 S

32

3078

75

385 schedu ?

00:00:00 portmap

5 S

29

3097

85

381 schedu ?

00:00:00 rpc.statd

5 S

3164

84

341 schedu ?

00:00:00 apmd

5 S

3202

85

876 schedu ?

00:00:00 sshd

5 S

3216

75

506 schedu ?

00:00:00 xinetd

5 S

3236

75

1477 schedu ?

00:00:00 sendmail

1 S

51

3245

85

1428 pause

00:00:00 sendmail

1 S

3264

75

354 schedu ?

00:00:00 crond

5 S

3275

75

1875 schedu ?

00:00:00 cupsd

5 S

43

3335

75

1290 schedu ?

00:00:00 xfs

1 S

3344

99

19

350 rt_sig ?

00:00:00 anacron

1 S

3353

75

352 schedu ?

00:00:00 atd

4 S

3361

82

338 schedu tty1

00:00:00 mingetty

4 S

3362

82

338 schedu tty2

00:00:00 mingetty

4 S

3363

82

338 schedu tty3

00:00:00 mingetty

4 S

3364

82

338 schedu tty4

00:00:00 mingetty

4 S

3365

82

338 schedu tty5

00:00:00 mingetty

4 S

3366

82

338 schedu tty6

00:00:00 mingetty

4 S

3367

75

3528 schedu ?

TIME CMD
00:00:04 init

00:00:00 gdm-binary

634/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

5 S

3410

3367

75

3811 wait4

5 S

3744

75

4 S

4270

3410

75

- 16038 schedu ?

00:01:10 X

4 S

4279

3410

75

4623 schedu ?

00:00:00 gnome-sessi

1 S

4337

4279

75

783 schedu ?

00:00:00 ssh-agent

0 S

4348

75

2806 schedu ?

00:00:00 gconfd-2

0 S

4350

75

1533 schedu ?

00:00:00 bonobo-acti

0 S

4352

75

3209 schedu ?

00:00:01 metacity

4 S

4355

75

4288 schedu ?

00:00:00 gnome-setti

4 R

4361

3216

75

4 S

4368

75

4 S

4370

75

- 19369 schedu ?

00:00:04 nautilus

0 S

4372

75

4057 schedu ?

00:00:00 magicdev

0 S

4374

75

4156 schedu ?

00:00:00 eggcups

0 S

4376

75

2899 schedu ?

00:00:00 pam-panel-i

0 S

4378

75

6061 schedu ?

00:00:00 rhn-applet-

0 S

4379

4376

75

352 schedu ?

00:00:00 pam_timesta

0 S

4381

75

4209 schedu ?

00:00:00 notificatio

0 S

4726

75

5003 schedu ?

00:00:00 gnome-termi

4 S

4727

4726

83

463 schedu ?

00:00:00 gnome-pty-h

0 S

4728

4726

75

0 R

5294

4728

81

352 schedu ?

663 -

5535 schedu ?

1078 wait4
790 -

00:00:00 gdm-binary
00:00:00 gpm

00:00:00 fam
00:00:03 gnome-panel

pts/0

00:00:00 bash

pts/0

00:00:00 ps

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

find / -name .login &

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.

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

10

#define SIGSEGV

11

#define SIGUSR2

12

#define SIGPIPE

13

#define SIGALRM

14

#define SIGTERM

15

#define SIGSTKFLT

16

#define SIGCHLD

17

#define SIGCONT

18

#define SIGSTOP

19

#define SIGTSTP

20

#define SIGTTIN

21

#define SIGTTOU

22

#define SIGURG

23
644/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

#define SIGXCPU

24

#define SIGXFSZ

25

#define SIGVTALRM

26

#define SIGPROF

27

#define SIGWINCH

28

#define SIGIO

29

#define SIGPOLL

Programski alati na Unix raunalima


Fork procesi

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

Value

Action

Coment

SIGINT

TERM

Prekid s tipkovnice

SIGQUIT

CORE

Quit s tipkovnice

SIGILL

CORE

Ilegalna instrukcija

SIGABRT

CORE

Prekid

SIGFPE

CORE

Iznimka pominog
zareza

SIGKILL

TERM

Kill signal

SIGSEGV

11

CORE

Pogrena referenca
memorije

SIGPIPE

13

TERM

Pisanje

SIGALRM

14

TERM

Vremenski signal za
alarm

SIGTERM

15

TERM

Signal prekida

SIGUSR1

30,10,16

TERM

Samodefinirajui 1

SIGUSR2

31,12,17

TERM

Samodefinirajui 2

SIGCHLD

20,17,18

IGN

Zaustavljanje ili
prekidanje djeteta

SIGCON

19,18,25

Nastavi ako
zaustavljeno

SIGSTOP

17,19,23

STOP

SIGTSTP

18,20,24

STOP

SIGTTIN

21,21,26

STOP

Zaustavi prces
tty unos za
pozadinske procese

SIGTTOU

22,22,27

STOP

Tty izlaz za
pozadinske procese

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

Value

Action

Coment

SIGPROF

27,27,29

TERM

Profiling timer
expired

SIGSYS

12,-,12

CORE

Loi argument u
rutinu

SIGTRAP

CORE

Breakpoint zamka

SIGURG

16,23,21

ING

Urgent condition on
socket

SIGVTALRM

26,26,28

TERM

Virtual alarm sat

SIGXCPU

24,24,30

CORE

CPU time limit


exceeded

SIGXZSZ

25,25,31

CORE

File size limit


exceeded

SIGEMT

7,-,7

TERM

Stack greka na
coprocesoru

SIGIO

23,29,22

TERM

I/O omoguen

SIGCLD

-,-,18

IGN

Sinonim za
SIGCHLD

SIGPWR

29,30,19

SIGINFO

29,-,-

TERM

Power failure
Sinonim za
SIGPWR

SIGLOST

-,-,-

TERM

File lock lost

SIGWINCH

28,28,20

IGN

Window resize
signal

SIGUNUSED

-,31,-

TERM

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

majinskom procesu, i

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.

663/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Init proces (PID=1)

Programski alati na Unix raunalima


Fork procesi

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

0:01 -csh[rich] (csh)

6823 co IW

0:00 /bin/sh /usr/bin/X11/startx

6829 co IW 0:00 xinit /usr/lib/X11/xinit/xinitrc -6830 co S

0:12 X :0

6836 co I

0:01 twm

6837 co I

0:01 xclock -geometry 50x50-1+1

6841 p0 I

0:01 -sh[rich on xterm] (csh)

6840 p1 I

0:01 -sh[rich on xterm] (csh)

6842 p2 S

0:01 -sh[rich on login] (csh)

6847 p2 R

0:00 ps -x

666/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


Fork procesi

PID

procesov identifikacijski broj

TT

kontrolni terminal procesa

STAT

procesovo radno stanje

TIME

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

mrena arhitektura i/ili protokol

PF_APPLETALK

Appletalk

PF_BLUETOOTH

Bluetooth

PF_BRIDGE

Multiprotocol bridge

PF_DECnet

DECnet

PF_INET

IPSs IPv4 protocol

676/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


Sockets, unix domain, network

PF_INET6

IPSs IPv6 protocol

PF_IPX

Novell IPX

PF_LOCAL, PF_UNIX
PF_PACKET
PF_X.25

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

opis

release

zatvara socket

bind

dodjeljuje lokalnu adresu (ime)

connect

uspostavlja vezu (TCP) ili dodjeljuje remote adress (UDP)

socketpair

kreira par socketa za dvosmjernu razmjenu podataka

accept

eka zahtjev za spajanje

getname

vraa lokalnu adresu

ioctl

implementira ioctl()komande

listen

inicijalizira socket da prihvati zahtjev za spajanjem

shutdown

zatvara pola ili obje polovice full-duplex veze

setsockopt

postavlja vrijednosti socket flagovima

getsockopt

uzima vrijednosti socket flagova

sendmsg

alje paket socketu

recvmsg

prima podatak od socketa

mmap

file memory-mapping (ne koriste mreni socketi)

sendpage

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

opis

close

close the socket

connect

uspostavlja vezu ili dodjeljuje remote adress

disconnect

prekida uspostavljenu vezu

accept

eka zahtjev za spajanje

ioct1

implementira ioctl()komande

init

INET socket objekt konstruktor

destroy

INET socket objekt destruktor

shutdown

zatvara pola ili obje polovice full-duplex veze

setsockopt

postavlja vrijednosti socket flagovima

getsockopt

uzima vrijednosti socket flagova

sendmsg

alje paket socketu

recvmsg

prima podatak od socketa

bind

dodjeljuje lokalnu adresu (ime)

backlog_rcv

funkcija pozvana kada prima paket

hash

doda INET socket per-protocol hash tablici

unhash

makne INET socket iz per-protocol hash tablice

get_port

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

ICMP

IGMP

IP in IP encapsulation

TCP

697/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

17

UDP

41

IPv6

47

Generic Routing Encapsulation (GRE)

50

IP Security Encapsulating Security Payload (ESP)

51

IP Security Authentication Header (AH)

89

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

Network News Transfer Protocol (NNTP)

20

FTP Server (data channel)

21

FTP Server (control channel)

23

Telnet Server

25

Simple Mail Transfer Protocol (SMTP)

69

Trivial File Transfer Protocol (TFTP)

80

Hypertext Transfer Protocol (HTTP; Web server)

139

NetBIOS Session Service

700/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

339

Lightweight Directory Access Protocol (LDAP)

445

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

DNS

67

BOOTP client (Dynamic Host Configuration Protocol [DHCP])

68

BOOTP server (DHCP)

69

TFTP

137

NetBIOS Name Service

138

NetBIOS Datagram Service

161

Simple Network Management Protocol (SNMP)

445

Direct hosting of Server Message Block (SMB) datagrams over TCP/IP

520

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

Gateway

192.168.0.0

255.255.255.0 U

169.254.0.0

255.255.0.0

127.0.0.0
default

Genmask

255.0.0.0

192.168.0.1

0.0.0.0

Flags Metric Ref Use Iface


U

0
0

UG

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

0.0.0.0
127.0.0.0
141.29.127.0

Programski alati na Unix raunalima

0.0.0.0 141.29.127.254 141.29.127.160


255.0.0.0

127.0.0.1

127.0.0.1

20
1

255.255.255.0 141.29.127.160 141.29.127.160

141.29.127.160 255.255.255.255

127.0.0.1

20

127.0.0.1

20

141.29.255.255 255.255.255.255 141.29.127.160 141.29.127.160


192.168.0.0

255.255.255.0

192.168.0.1

192.168.0.1 255.255.255.255

127.0.0.1

192.168.0.255 255.255.255.255
192.168.61.0

255.255.255.0

20

192.168.0.1

20

192.168.61.1

20

192.168.61.1
127.0.0.1

192.168.61.255 255.255.255.255

20

127.0.0.1

192.168.0.1

192.168.61.1 255.255.255.255
192.168.132.0

192.168.0.1

20

20

192.168.61.1

20

192.168.132.1 192.168.132.1

20

255.255.255.0

192.168.61.1

127.0.0.1

192.168.132.1 255.255.255.255
192.168.132.255 255.255.255.255

127.0.0.1

127.0.0.1

20

192.168.132.1 192.168.132.1

224.0.0.0

240.0.0.0 141.29.127.160 141.29.127.160

224.0.0.0

240.0.0.0

192.168.0.1

192.168.0.1

224.0.0.0

240.0.0.0

192.168.61.1

192.168.61.1

224.0.0.0

240.0.0.0

192.168.132.1 192.168.132.1

20

20
20
20
20

255.255.255.255 255.255.255.255 141.29.127.160 141.29.127.160


255.255.255.255 255.255.255.255

192.168.0.1

192.168.0.1

255.255.255.255 255.255.255.255

192.168.61.1

192.168.61.1

255.255.255.255 255.255.255.255

192.168.132.1 192.168.132.1

Default Gateway:

1
1
1
1

141.29.127.254

==============================================================
=============
Persistent Routes:
None

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

accept(sock_descriptor,

(struct

sockaddr

*)&pin,

&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.

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

((struct

in_addr

*)(server_host_name->h_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);

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

TCP/IP Model

Transport

Application

Network

Transport

Data link

Internet

Physical

Network interface

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

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

mrena arhitektura i/ili protokol

PF_APPLETALK

Appletalk

PF_BLUETOOTH

Bluetooth

PF_BRIDGE

Multiprotocol bridge

PF_DECnet

DECnet

PF_INET

IPSs IPv4 protocol

PF_INET6

IPSs IPv6 protocol

PF_IPX

Novell IPX

PF_LOCAL, PF_UNIX

Unix domain socket (local communication)

PF_PACKET

IPSs IPv4/IPv6 protocol low-level access

PF_X.25

X25

Tablica - Podrane arhitekture pod Linux-om


IPS (Internet Protocol Suite) je mrena arhitektura Interneta, ponekad

nazvana TCP/IP

mrena arhitektura zbog glavnih protokola.

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

MAC sublayer

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).

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

IP header

Network
interface
trailer

IP payload

IP datagram
Network-level packet

Slika - IP datagram
Bit:

16

Version

IHL

Type of service

Total length

Identification

Flags

20 byte

Time to live

Protocol

19

31

Fragment offset

Header checksum

Source address
Destination address
Options + Padding

Slika - IPv4 header


Version

4 bit

Verzija ip headera, trenutno se koristi verzija 4. Slijedea


verzija je Ipv6, koja se za sada koristi samo eksperimentalno

IP Header length

4 bit

Duina IP headera (broj 32-bitnih rijei)

Type of service

8 bit

Kvaliteta veze

Total length

2 byte

Ukupna duljina IP paketa

Identification

2 byte

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

Fragment offset

13 bit

Programski alati na Unix raunalima


UDP

Mjesto gdje se fragment nalazi u cijeloj poruci (potrebno za


sastavljanje poruke)

Time to live

1 byte

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

1 byte

Koji protokol se nalazi iznad, tj. iji paket IP paket sadri

Header checksum

2 byte

Osigurava integritet headera

Source address

4 byte

Adresa poiljatelja poruke

Destination address

4 byte

Adresa primatelja poruke

Options

and

Dodatne opcije i dopuna paketa da bi njegova veliina bila

Padding

djeljiva sa 32

Tablica - Opis IPv4 header-a


IPv6 header:
Bit:

Version

Priority

Flow label

Payload length

16

24

Next header

Hop limit

31

Source address

40 byte

Destination address

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

IP header

TCP header

Segment

Network
interface
trailer

TCP segment
IP datagram
Network-level packet

Slika - TCP segment


Bit:

10

Source port

16

31

Destination port

Sequence number

20 byte

Acknowledgment number
Header lenght

Unused

Checksum

Flags

Window
Urgent pointer

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

4 byte

Redni broj poetnog okteta segmenta

Acknowledgment

4 byte

Broj slijedeeg okteta korisnikove poruke, ujedno i kumulativna potvrda

Data offset

4 byte

Poetak podataka u paketu, ujedno oznaava veliinu TCP headera

Reserved

6 bit

Rezervirano za buduu uporabu (postavljeno na 0)

Flags

6 bit

URG, ACK, PSH, RST, SYN, FIN flagovi

Window

2 byte

Veliina buffera poiljatelja poruke koji slui za primanje poruka.

number

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

2 byte

Lokacija hitnih podataka u segmentu


Proizvoljne opcije koje se dodaju TCP headeru u paketima od 4 bytea

Options

Tablica - Opis TCP header-a


20

FTP-data

21

FTP File Transfer Protocol

22

SSH Secure Shell

23

Telnet

25

SMTP Simple Mail Transfer Protocol

80

HTTP Hypertext Transfer Protocol

110

POP3 Post Office Protocol version 3

119

NNTP Network News Transfer Protocol

143

IMAP Internet Message Access Protocol

194

IRC Internet Relay Chat

389

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

IP header

UDP header

Message

Network
interface
trailer

UDP message
IP datagram
Network-level packet

Slika - UDP datagram

8 byte

Bit:

16

Source port

Destination port

Segment length

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

DNS Domain Name System

67

BOOTP client

68

BOOTP server (DHCP) Dynamic Host Configuration Protocol

728/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


UDP

69

TFTP Trivial File Transfer Protocol

137

NetBIOS Name Service

138

NetBIOS Datagram Service

161

SNMP Simple Network Management Protocol

119

NNTP Network News Transfer Protocol

520

RIP Routing Information Protocol

1812, 1813

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

Hosts

Broadcast address

192.168.1.0

192.168.1.1 192.168.1.30

192.168.1.31

192.168.1.32

192.168.1.33 192.168.1.62

192.168.1.63

192.168.1.64

192.168.1.65 192.168.1.94

192.168.1.95

192.168.1.96

192.168.1.97 192.168.1.126

192.168.1.127

192.168.1.128

192.168.1.129 192.168.1.158

192.168.1.159

192.168.1.160

192.168.1.161 192.168.1.190

192.168.1.191

192.168.1.192

192.168.1.193 192.168.1.222

192.168.1.223

192.168.1.224

192.168.1.225 192.168.1.254

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

Gateway

Genmask

Flags Metric Ref

192.168.0.0

255.255.255.0

Use Iface
0 eth0

169.254.0.0

255.255.0.0

0 eth0

127.0.0.0

255.0.0.0

0 lo

0.0.0.0

192.168.0.1

0.0.0.0

UG

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

Netmask

Gateway

Interface

0.0.0.0

10.0.0.1

10.0.0.11

Metric
20

10.0.0.0

255.255.255.0

10.0.0.11

10.0.0.11

20

10.0.0.11

255.255.255.255

127.0.0.1

127.0.0.1

20

10.255.255.255

255.255.255.255

10.0.0.11

10.0.0.11

20

127.0.0.0

255.0.0.0

127.0.0.1

127.0.0.1

224.0.0.0

240.0.0.0

10.0.0.11

10.0.0.11

20

255.255.255.255

255.255.255.255

10.0.0.11

10.0.0.11

Default Gateway:

10.0.0.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

network layer

Ethernet
driver

datalink layer

IP protocol

IP

Ethernet
driver

Ethernet protocol

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

router

WAN
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

server
SYN J

socket
connect (blocks)
(active open)

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

server
FIN M

close
(active close)

(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

opis

release

zatvara socket

bind

dodjeljuje lokalnu adresu (ime)

connect

uspostavlja vezu (TCP) ili dodjeljuje remote adress (UDP)

socketpair

kreira par socketa za dvosmjernu razmjenu podataka

accept

eka zahtjev za spajanje

getname

vraa lokalnu adresu

ioctl

implementira ioctl()komande

listen

inicijalizira socket da prihvati zahtjev za spajanjem

shutdown

zatvara pola ili obje polovice full-duplex veze

setsockopt

postavlja vrijednosti socket flagovima

getsockopt

uzima vrijednosti socket flagova

sendmsg

alje paket socketu

recvmsg

prima podatak od socketa

mmap

file memory-mapping (ne koriste mreni socketi)

sendpage

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

opis

close

zatvara socket

connect

uspostavlja vezu ili dodjeljuje remote adress

disconnect

prekida uspostavljenu vezu

accept

eka zahtjev za spajanje

ioct1

implementira ioctl()komande

init

INET socket objekt konstruktor

destroy

INET socket objekt destruktor

shutdown

zatvara pola ili obje polovice full-duplex veze

setsockopt

postavlja vrijednosti socket flagovima

getsockopt

uzima vrijednosti socket flagova

sendmsg

alje paket socketu

recvmsg

prima podatak od socketa

bind

dodjeljuje lokalnu adresu (ime)

backlog_rcv

funkcija pozvana kada prima paket

hash

doda INET socket per-protocol hash tablici

unhash

makne INET socket iz per-protocol hash tablice

get_port

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

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)

deskriptor zaglavlja transportnog sloja

deskriptor zaglavlja mrenog sloja

deskriptor data link layer zaglavlja

the destination cache entry (dest_entry object)

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;

struct sockaddr_in {
uint8_t
sa_family_t
in_port_t

sin_len;
sin_family;
sin_port;

struct in_addr

sin_addr;

char

sin_zero[8];

/* 32 - bit IPv4 adress */


/* network byte ordered */

/*
/*
/*
/*
/*
/*
/*

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

16-bit port#

16-bit port#

32-bit
IPv4 address

32-bit
flow label

Unix
sockaddr_un()
lenght

AF INET6

fixed lenght (16 bytes)

lenght

AF LINK

interface index

(unused)
128-bit
IPv6 adress

Datalink
sockaddr_dl()

pathname
(up to 104 bytes)

type

name len

addr len

sel len

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

- kreiranje socket-a

close

- unitavanje socket-a

connect

- uspostavljanje veze izmeu dva socket-a

bind

- oznaavanje server socket-a sa adresom

listen

- konfigurira socket za prihvaanje uvjeta

accept

- 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

- odreuje vrstu protokola

type

- tip podataka koji se prenose socket-om (tip socket-a)

protocol

- protokol

Za family argument koristimo jednu od ponuenih konstanti:


family

Description

AF_INET

IPv4 protocols

AF_INET6

IPv6 protocols

AF_LOCAL

Unix domain protocols

749/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


UDP

AF_ROUTE

Routing sockets

AF_KEY

Key sockets

Tablica - Protokol family konstante za socket funkciju

Za type argument koristimo slijedee konstante:


family

Description

SOCK_STREAM

stream socket

SOCK_DGRAM

datagram socket

SOCK_RAW

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

AF_INET6

AF_LOCAL

SOCK_STREAM

TCP

TCP

Yes

SOCK_DGRAM

UDP

UDP

Yes

SOCK_RAW

IPv4

IPv6

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

completed connection queue


(ESTABLISHED state)

3WHS
complete

TCP

incompleted connection queue


(SYN_RCVD state)

arriving
SYN

Slika - Dva reda podrana od TCP-a za listening socket

klijent
connect called

server
SYN J
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
AIX

4.2,

Dunix

4.0,

Linux

2.0.27,

backlog

BSD/OS 3.0

Uware 2.1.2

HP-UX 10.30

SunOS 4.1.4

Solaris 2.5.1

Solaris 2.6

10

10

11

10

12

13

12

13

14

13

10

15

10

16

10

15

11

16

11

17

11

16

12

18

12

19

12

18

13

19

13

20

13

18

14

21

14

22

14

19

15

22

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

Programski alati na Unix raunalima


UDP

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;
}

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

Programski alati na Unix raunalima


UDP

{
printf("bind() error!\n");
return 2;
}
/* oslukivanje konekcije */
if (listen(sockfd, 2) == -1)
{
printf("listen() error!\n");
return 3;
}
/* 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

Programski alati na Unix raunalima


UDP

return 2;
}
/* osluskivanje konekcije */
if (listen(sockfd, 2) == -1)
{
printf("listen() error!\n");
return 3;
}
/* 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

#include
#include
#include
#include
#include
#include
#include

*/

<stdio.h>
<stdlib.h>
<string.h>
<sys/types.h>
<netinet/in.h>
<netdb.h>
<sys/socket.h>

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

Programski alati na Unix raunalima


UDP

printf("Error in recvfrom\n");
return EXIT_FAILURE;
}

printf("%s Celsius = %s Fahrenheight\n",argv[1],

data);

shutdown(sockfd,2);
return EXIT_SUCCESS;
}

Server:
/*

uss.c - UNIX UDP Server Code

#include
#include
#include
#include
#include
#include
#include
#include
#include

*/

<stdio.h>
<stdlib.h>
<signal.h>
<string.h>
<sys/types.h>
<sys/time.h>
<sys/select.h>
<sys/socket.h>
<netinet/in.h>

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

Programski alati na Unix raunalima


UDP

signal(SIGTERM, inthandler);
}
my_addr.sin_family = AF_INET;
my_addr.sin_addr.s_addr = INADDR_ANY;
my_addr.sin_port = htons(1092);

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

Programski alati na Unix raunalima


UDP

close (socket_fd);
unlink (socket_name);
return 0;
}

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:

Transportni:

Talnet-udaljeni terminal

TCP-Transportni protokol

FTP-prijenos podataka (File Transfer Protocol)

(Transmission Control Pro)

SMTP-elektronika posta(Simple Email Pro)

UDP-brzi datagramski protokol

rcp-udaljeno kopiranje datoteka (remonte

(User Datagram Protocol)

file copy)
rsh-udaljeno procesiranje(remonte shell)

Mreni:

rlogin-udaljeno logiranje(remonte login)

IP-Internet Protokol

TFTP-trivijalni prijenos datoteka(Trivial

ICMP-protokol za kontrolu

Internet File Protocol)

poruka(Internet Control Massage


Pro)

HTTP-web protokol(Hipertext Transfer

IGMP-(Internet Grup Mgmnt Pro)

Protocol)
ARP-adresni protokol(Addres
RTP-prijenos u realnom vremenu(Real time

Rezolution Protocol)

Transfer Protocol)

RARP-Rezervni adresni protokol

DHCP-protokol za dinamiku konfiguraciju

(Reverse Rezolution Pro)

raunala(Dinamic Host Configuration Pro)

RIP-usmjerivaki protokol

NTP-imenik mrenih domena(Domain

(Routing Information Pro)

Name System)

BGP-Protokol rubnog mosta

SNMP-protokol za upravljanje mrenim

(Border Getway Protocol)

ureajima(Simple Network Mangement Pro)

SLIP/CSLIP-serijski protokoli
(Serial line IP/Compresed SLIP)

Podatkovni i Fiziki:
Ethernet, TokenRing, FDDI, ATM, ISDN....

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

char

Programski alati na Unix raunalima


UDP

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)

unsigned short int sin_port; // Port number


struct in_addr

sin_addr;

// Internet address

unsigned char

sin_zero[8]; // postaviti na 0 sa memset

};
---------------------------------------------------------------------------------------------------------(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.

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

h_addrtype;

int

h_length;

char **h_addr_list;
};
#define h_addr h_addr_list[0]

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

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

$server = IO::Socket::INET->new( Proto

=> 'tcp',

LocalPort => $PORT,

794/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


UDP

Listen

=> SOMAXCONN,

Reuse

=> 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/;

# blank line

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;
}

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

725 Jul 10 15:07

list.c
-rw-r--r-- 2 boris

512 Jun 13 16:19

stack.c
drwxr-xr-x 2 boris

512 Jun 24 00:19

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.

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

w x

w x

Slika 3.3.1.
Izgled: chmod oktalni kod file
Primjer: chmod 644 bumbar.h file bumbar.h dobiva ovlasti rw-r--r--

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

/* int - koristi se za oznaavanje broja blokova */

blksize_t

/* int - koristi se za oznaavanje veliine blokova */

dev_t

/* int - koristi se za oznaavanje device IDa */

gid_t

/* int - koristi se za oznaavanje group IDa */

ino_t

/* unsigned int - koristi se za oznaavanje broja inodea

mode_t

/* int - koristi se za oznaavanje modova filea*/

nlink_t /* int - koristi se za oznaavanje broja linkova */


off_t

/* int - koristi se za oznaavanje veliine filea */

uid_t

/* int - koristi se za oznaavanje user IDa */

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);

/* <unistd.h> */

int mkdir(const char *path, mode_t mode);

/* <sys/stat.h> */

int rmdir(const char *path);

/* <unistd.h> */

int chmod(const char *path, mode_t mode);

/* <sys/stat.h> */

mode_t umask(mode_t cmask);

/* <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;

/* ID devicea koji sadri file */

ino_t st_ino;

/* broj inodea filea */

mode_t st_mode;

/* modovi pristupa fileu */

nlink_t st_nlink;

/* broj linkova na file */

uid_t st_uid;

/* userID vlasnika filea */

gid_t st_gid;

/* groupID vlasnika filea */

dev_t st_rdev;

/* device ID ukoliko je file tipa


devica */

off_t st_size;

/* veliina filea u bajtovima */

time_t st_atime;

/* vrijeme zadnjeg pristupa */

time_t st_mtime;

/* vrijeme zadnje modifikacije */

time_t st_ctime;

/* vrijeme kreiranja filea */

blksize_t st_blksize; /* veliina blokova */


blkcnt_t st_blocks;
mode_t st_attr;

/* broj blokova koje je file alocirao */


/* atributi filea */

};
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.

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;

/* broj inodea */

char d_name[];

/* ime filea */

};
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

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

stream tcp

nowait root /usr/sbin/in.ftpd in.ftpd

( ftp

stream tcp

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

stream tcp

( ftp

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

pokree debugger

inetd l

pokree logiranje uspjenih veza(connections)

inetd w

ukljuuje TCP Wrapping za vanjske service(usluge)

inetd W

ukljuuje TCP Wrapping za unutarnje service koje su ugraene


u inetd

inetd c maximum

odreuje maximalan broj istovremenih pokretanja za svaki


service

inetd c rate

odreuje maximalan broj koliko puta service moe biti pokrenut


iz jedne IP adrese u jednoj minuti

inetd R rate

odreuje maximalan broj koliko puta service moe biti pokrenut


u jednoj minuti,defaultna vrijednost je 256

inetd s maximum

odreuje maximalan broj istovremenih pokretanja svake


usluge(service-a) iz jedne IP adrese

inetd a

odreuje jednu specifinu IP adresu koje se dri

inetd p

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

= 25

log_type

= FILE /var/log/servicelog

log_on_success = HOST PID


log_on_failure = HOST RECORD
# only_from

= 128.138.193.0 128.138.204.0

# only_from

= localhost

disabled

= tftp

}
service imap
{
socket_type = stream
protocol

= tcp

wait

= no

user

= root

only_from

= 198.72.5.0 localhost

820/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

banner

= /usr/local/etc/deny_banner

server

= /usr/local/sbin/imapd

Programski alati na Unix raunalima


INETD i TCPD

}
service telnet
{
flags

= REUSE

socket_type = stream
wait

= no

user

= root

redirect

= 192.168.1.1 23

bind

= 127.0.0.1

log_on_failure += USERID
}
service telnet
{
flags

= REUSE

socket_type = stream
wait

= no

user

= root

server

= /usr/sbin/in.telnetd

bind

= 192.168.1.11

log_on_failure += USERID
}
#service chargen
#{
# type
#

id

= INTERNAL
= chargen-stream

# socket_type = stream
# protocol
# user

= tcp
= root

821/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

# wait

Programski alati na Unix raunalima


INETD i TCPD

= no

#}
service xadmin
{
type

= INTERNAL

socket_type = stream
protocol

= tcp

user

= root

wait

= no

port

= 7000

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

Sponzor/

Svrha

Operator
Societe Internationale de

.aero

2001

da

Air-transport industry

Telecommunications
Aeronautiques SC, (SITA)

.biz

2001

ne

Businesses

NeuLevel

Unrestricted (but
.com

1995

ne

intended for
commercial

VeriSign, Inc.

registrants)
.coop

2001

da

Cooperatives

DotCooperation, LLC

United States
.edu

1995

da

educational

EDUCAUSE

institutions
.gov

1995

da

.info

2001

ne

United States

US General Services

government

Administration

Unrestricted use

Afilias Limited

831/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


Internet services

Organizations
.int

1998

ne

established by

Internet Assigned Numbers

international treaties

Authority

between governments
.mil

1995

da

United States military

.museum 2001

da

Museums

.name

ne

2001

For registration by
individuals

US DoD Network Information


Center
Museum Domain Management
Association, (MuseDoma)
Global Name Registry, LTD

Unrestricted (but
.net

1995

ne

intended for network

VeriSign, Inc.

providers, etc.)

.org

1995

ne

Unrestricted (but

Public Interest Registry. Until

intended for

31 December 2002, .org was

organizations that do

operated by VeriSign Global

not fit elsewhere)

Registry Services.

Accountants, lawyers,
.pro

2002

ne

physicians, and other

RegistryPro, LTD

professionals

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

Organizacija

198.41.0.4

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

192.5.5.241

Palo Alto, CA, USA

192.112.36.4

Vienna, VA, USA

U.S. Army Research Lab

128.63.2.53

Aberdeen, MD, USA

Autonomica/NORDUnet

192.36.148.17 Stockholm, Sweden

VeriSign

192.58.128.30 Herndon, VA, USA

U.S. DoD Network Information

servers.net

Center

servers.net
i.rootservers.net
j.rootservers.net
k.root-

Reseaux IP Europeens - Network

servers.net

Coordination Centre

l.root-

Internet Corp. for Assigned Names

servers.net

and Numbers

m.rootservers.net

Mjesto

VeriSign

g.root-

h.root-

IP adresa

WIDE Project

193.0.14.129

198.32.64.12

202.12.27.33

Herndon, VA, USA


Marina del Rey, CA,
USA
Herndon, VA, USA
College Park, MD,
USA

London, United
Kingdom
Marina del Rey, CA,
USA
Tokyo, Japan

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

Opis

open

Spaja se na navedeno raunalo (host)

close

Prekida vezu i vraa se u naredbeni mod

quit

Prekida vezu (ako postoji) i zatvara telnet

set

Mijenja vrijednost danog argumenta

send

alje naredbu na remote (udaljeno raunalo)

display

Pokazuje trenutno postavljenu konfiguraciju telnet-a

status

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

Mget

pwd

status

dir

Mkdir

quit

struct

account disconnect Mls

quote

system

append form

Mode

recv

sunique

ascii

get

Modtime reget

bell

glob

Mput

rstatus trace

binary hash

Newer

rhelp

bye

help

Nmap

rename user

case

idle

Nlist

reset

cd

image

Ntrans

restart verbose

cdup

lcd

Open

rmdir

chmod ls

Prompt

runique

close

macdef

Proxy

send

cr

mdelete

Sendport site

delete

mdir

Put

tenex

type

umask

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

Otvara vezu s navedenim host-om.

Close

Zatvara trenutno otvorenu vezu.

Quit

Zatvara vezu i izlazi iz ftp-a.


Naredbe vezane za prijenos datoteka

binary

Mijenja reprezentaciju datoteke u binarni tip.

ascii

Mijenja reprezentaciju datoteke u ASCII tip.

put

Prenosi jednu datoteku s lokalnog na udaljeno raunalo (remote).

mput

Prenosi vie datoteka s lokalnog na udaljeno raunalo.

get

Prenosi jednu datoteku s udaljenog na lokalno raunalo.

mget

Prenosi vie datoteka s udaljenog na lokalno raunalo.


Naredbe vezane za upravljanje datotekama i direktorijima

cd

Promijeni lokalni ili udaljeni radni direktorij.

cd ..

Promijeni da trenutni radni direktorij bude korijenski direktorij.

ls

Prikaz trenutnog radnog direktorija na udaljenom raunalu.

pwd

Ispis trenutnog radnog direktorija udaljenog raunala.

mkdir

Kreiraj novi direktorij na udaljenom raunalu.

rmdir

Izbrii direktorij na udaljenom raunalu.

mv

Promijeni ime datoteke ili direktorija na udaljenom raunalu.

rm

Izbrii datoteku na udaljenom raunalu (rm, ime nove datoteke).

rm

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

Sintaksa

Funkcija

Hello

HELO <sending-host>

Identificira host-a poiljaoca

From

MAIL FROM:<from-address>

Adresa poiljaoca

Recipient

RCPT TO:<to-address>

Adresa primaoca

Data

DATA

Poetak poruke

Reset

RSET

Odustanak od poruke

Verify

VRFY <string>

Provjera korisnikog imena

Expand

EXPN <string>

Otvaranje mailing liste

Help

HELP [string]

Traenje online pomoi

Quit

QUIT

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

Funkcija

USER username

Korisnikovo korisniko ime

PASS password

Korisnikova lozinka

STAT

Prikaz broja neproitanih poruka/bajtova

RETR n

Povrati poruku broj n

846/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


Internet services

DELE n

Izbrii poruku broj n

LAST

Prikaz broja zadnje pristupanoj poruci

LIST [n]

Prikaz veliine poruke n ili svih poruka

RSET

Povrati sve poruke; resetiraj broj na 1

TOP n l

Ispii zaglavlja i jednu liniju poruke n

NOOP

Ne radi nita

QUIT

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

Opis

article <message-id>

Prikazuje zaglavlje poruke, praznu liniju, te tijelo poruke.

body <message-id>

Prikazuje samo tijelo poruke.

group newsgroup

Selektira izabranu newsgrupu.

head <message-id>

Prikazuje zaglavlja selektirane poruke.

Help

Daje listu moguih naredbi.

ihave <message-id>

Obavjetava server da klijent ima izabranu poruku.

last

Dekrementira trenutni pokaziva na poruku.

list

Vraa listu postojeih news grupa.

listgroup

Izlista trenutne poruke selektirane grupe.

newgroups date time

Izlista nove grupe nakon navedenog datuma.

newnews date time

Izlista nove poruke unutar selektirane grupe nakon navedenog


datuma..

next

Inkrementira trenutni pokaziva na poruku.

post

Pokree postanje poruke s terminatorom tokom (.) na inae


praznoj liniji.

Quit

Zatvara TCP vezu klijenta sa serverom.

slave

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

Opis

Obavezno Opcionalno

approved

Za moderiranu newsgroup-u

control

Kontrolna serverska, a ne korisnika poruka.

date

Datum kad je poruka post-ana..

distribution

Doseg poruke.

expires

Datum kada istjee trajanje.

followup-to

Iza koje poruke dolazi.

from

E-mail adresa poiljaoca.

keywords

Kljune rijei koje se tiu teme.

lines

Broj linija tijela poruke.

message-id

Jedinstveni ID poruke.

newsgroups

Kojoj grupi pripada.

organization

Opis organizacije

path

Path u trenutnom sustavu.

references

Na koji se message-id odnosi.

reply-to

Odgovor autoru.

sender

Runo unijeto u polje.

subject

Tema poruke.

summary

Kratki saetak.

xref

Ime host-a

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

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.

rec.

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...

sci.

Science. Sve to se tie znanosti, pa i medicine...

soc.

Social. Razne kulturne grupe, religije, alternativni naini ivota...

talk.

Talking. Najvie se pria o politici, ali i napada se ne sve i svata.

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.

MACHINE B
(SERVER)

client
program

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

Programski alati na Unix raunalima


Rlogin rsh

exit(1);
}
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

xdr_simple (XDR *xdrsp, struct simple *simplep)

{
if ( !xdr_int ( xdrsp, &simplep -> a ))
return (FALSE);
if ( !xdr_short (xdrsp, &simplep -> b ))
return (FALSE);
return (TRUE);
}

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

Programski alati na Unix raunalima


Rlogin rsh

strcpy (dir,argv[1]);
read_dir(dir);
printf("%s\n", dir);
exit(0);
}

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

Programski alati na Unix raunalima


Rlogin rsh

{
return (xdr_string(xdrs, &objp, DIR_SIZE));
}

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

prikazuju sadraj tekueg direktorijuma na remote hostu.

cd path

Mijenja tekui direktorijum na remote hostu.

lcd dir

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

Transfer fajla file_name sa lokalnog na remote host.

Transfer fajla file_name sa remote na lokalni host.

mget

Slino kao i get samo sto file_name u ovom sluaju moe da sadri univerzalne

file_name

znake (*, ?, []).

mput
file_name
quit

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

192.168.0.0/255.255.255.0(ro)

/home 192.168.0.0/255.255.255.0(rw)

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

@student(ro)

/home @student(rw)
Mrena grupa u ovom primjeru ima ime student.

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

vers

proto

port

100000

tcp

111 portmapper

100000

udp

111 portmapper

100011

udp

749 rquotad

100011

udp

749 rquotad

100005

udp

759 mountd

100005

tcp

761 mountd

100005

udp

764 mountd

100005

tcp

766 mountd

100005

udp

769 mountd

100005

tcp

771 mountd

100003

udp

2049 nfs

100003

udp

2049 nfs

300019

tcp

830 amd

300019

udp

831 amd

100024

udp

944 status

100024

tcp

946 status

908/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


Samba i nfs

100021

udp

1042 nlockmgr

100021

udp

1042 nlockmgr

100021

udp

1042 nlockmgr

100021

tcp

1629 nlockmgr

100021

tcp

1629 nlockmgr

100021

tcp

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

Programski alati na Unix raunalima


Unix desktop system

{
Q_OBJECT
public:
MyClass();
~MyClass();
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

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

Komericijalne organizacije

.edu

Obrazovne institucije

.gov

Dravne institucije

.mil

Vojne institucije

.net

Veliki mreni centri za podrku

.org

Organizacije koja ne spadaju meu prijanjih

.int

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

IN

NS

D.ROOT-SERVERS.NET.

518400

IN

NS

E.ROOT-SERVERS.NET.

518400

IN

NS

I.ROOT-SERVERS.NET.

518400

IN

NS

F.ROOT-SERVERS.NET.

518400

IN

NS

G.ROOT-SERVERS.NET.

518400

IN

NS

A.ROOT-SERVERS.NET.

518400

IN

NS

H.ROOT-SERVERS.NET.

518400

IN

NS

B.ROOT-SERVERS.NET.

518400

IN

NS

C.ROOT-SERVERS.NET.

;
;

Addresses

;
D.ROOT-SERVERS.NET.

3600000

IN

128.8.10.90

E.ROOT-SERVERS.NET.

3600000

IN

192.203.230.10

I.ROOT-SERVERS.NET.

3600000

IN

192.36.148.17

F.ROOT-SERVERS.NET.

3600000

IN

192.5.5.241

G.ROOT-SERVERS.NET.

3600000

IN

192.112.36.4

A.ROOT-SERVERS.NET.

3600000

IN

198.41.0.4

H.ROOT-SERVERS.NET.

3600000

IN

128.63.2.53

B.ROOT-SERVERS.NET.

3600000

IN

128.9.0.107

C.ROOT-SERVERS.NET.

3600000

IN

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

Programski alati na Unix raunalima


Dns i dhcp

; Refresh - 3 hours

3600

; Retry - 1 hour

432000

; Expire - 1 week

86400)

; Minimum - 1 day

IN

NS

name

ttl

solaris.dvs.net.hr.

class

type

data

localhost

IN

127.0.0.1

solaris

IN

10.5.3.1

win95

IN

10.5.3.21

linux

IN

10.5.3.22

mail

IN

CNAME

solaris

www

IN

CNAME

solaris

dvs.net.hr.

IN

MX

10

solaris.dvs.net.hr.

dvs.net.hr.

IN

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

ttl

class

type

data

;
;

Source of authority

IN

SOA

solaris.dvs.net.hr.

root.solaris.dvs.net.hr. (
2000050201
10800

; Serial

; Refresh - 3 hours

3600

; Retry - 1 hour

432000

; Expire - 1 week

86400)

; Minimum - 1 day

IN

NS

solaris.dvs.net.hr.

;
;

Machines names

;
;name

ttl

IN

class
PTR

type

data

solaris.dvs.net.hr.

21

IN

PTR

win95.dvs.net.hr.

22

IN

PTR

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:

;
;

Reverse address file for localhost

;
;name

ttl

class

type

data

;
;

Source of authority

IN

SOA

solaris.flibble.orac.net.au.

root.solaris.flibble.orac.net.au. (
2000050201
10800

; Serial

; Refresh - 3 hours

3600

; Retry - 1 hour

432000

; Expire - 1 week

86400)

; Minimum - 1 day

IN

NS

solaris.flibble.orac.net.au.

;
;

Machines names

;
;name

ttl

IN

class
PTR

type

data

localhost.

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

Opis

Vrsta podataka

default-lease-time

Standarna duina trajanje posudbe

Numerini

domain-name

Ime domene za spcifian subnet

Tekst

Lista servera imena za specifian subnet.

Lista IP adresa

domain-nameservers
fixed-address
group
hardware

Statina adresa koja se dodjeljuje host-u


(podrava vie mrea)
Poinje skupnu deklaraciju
Vrsta mrene opreme (trenutno su samo
Ethernet i token ring podrani)

Lista IP adresa
N/A
Tekst,adrese: oktete

Host

Poinje deklaraciju host-a

N/A

host-name

Ime koje se dodjeljuje host-u

Tekst

max-lease-time
netbios-nameservers
range

Maksimalni rok izraeno u sekundima


koji server daje posudbe
Ime WINS servera
Doseg IP adresa koja se dodjeljuje
specifinoj mrei

Numerini

Lista IP adresa

niska i visoka IP adresa

routers

Popis routera koje se mogu upotrijebiti

Lista IP adresa

shared-network

Zapone shared-network deklaracije

N/A

subnet

Zapone subnet deklaracije

N/A

subnet-mask

Subnet-maska od ove mree

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

"

dhcpclient" za odgovarajuu mrenu karticu, onda se preskae konfiguracija za tu karticu.


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.

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

Hosts

Datum Hosts

Network Domains

12/69

07/89

130,000

650

06/70

10/89

159,000

837

10/70

11

10/90

313,000

2,063

12/70

13

01/91

376,000

2,338

04/71

23

07/91

535,000

3,086

16,000

10/72

31

10/91

617,000

3,556

18,000

01/73

35

01/92

727,000

4,526

06/74

62

04/92

890,000

5,291

20,000

03/77

111

07/92

992,000

6,569

16,300

12/79

188

10/92

1,136,000

7,505

18,100

08/81

213

01/93

1,313,000

8,258

21,000

05/82

235

04/93

1,486,000

9,772

22,000

08/83

562

07/93

1,776,000

13,767

26,000

10/84

1,024

10/93

2,056,000

16,533

28,000

10/85

1,961

01/94

2,217,000

20,539

30,000

02/86

2,308

07/94

3,212,000

25,210

46,000

11/86

5,089

10/94

3,864,000

37,022

56,000

12/87

28,174

01/95

5,846,000

39,410

71,000

07/88

33,000

07/95

8,200,000

61,538

120,000

10/88

56,000

01/96

14,352,000

93,671

240,000

01/89

80,000

07/96

16,729,000

134,365

488,000

01/97

21,819,000

828,000

07/97

26,053,000

1,301,000

01/98

29,670,000

07/98

36,739,000

01/99

43,230,000

3,900
9,300

1030/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


Internet history

07/99

56,218,000

01/00

72,398,092

07/00

93,047,785

01/01

109,574,429

07/01

125,888,197

01/02

147,344,723

07/02

162,128,493

01/03

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

'don\'t' pet karaktera: d, o, n, jednostruki navodnik ' pa t


''

# prazan string

'silly\\me' # silly\me
'hello\n' # hello +backslash + n

1035/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

'hello
there'

# hello, novi red, there (11 karaktera ukupno)

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

Znaenje

\n

Nova linija

\r

Return

\t

Tab

\f

Formfeed

\b

Mjesto unazad(Bckspace)

\v

vertikalni tab

\a

Bell

\e

Escape

\007

Bilo koja octal ASCII vrjed (ovdje, 007 = bell)

\x7f

Bilo koja hex ASCII vrjed (ovdje, 7f = delete)

\cC

Bilo koji "control" character (ovdje, control C)

1036/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Izraz

Znaenje

\\

Backslash

\"

Dvostruki navodnici

\l

Malo slijedee slovo

\L

Sve malo do \E

\u

Veliko slijede slovo

\U

Velika slova sev do \E

\Q

Backslash quote all nonalphanumerics

\E

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

# 2 plus 3, ili 5

5.1 - 2.4 # 5.1 minus 2.4, priblino 2.7


3 * 12

# 3 puta 12 = 36

10.2 / 0.3 # 10.2 podijeljeno 0.3, priblino 34


10 / 3

# uvijek floating point djeljenje, priblino 3.333333...

2**3

#Fortran 2*2*2=8

10.5 % 3.2 # 10 mod 3=1

3 > 2 # vraa true


5 != 5 # vraa false

Logiki operatori su
Usporedba

numeriki String

jednako

==

eq

Ne jednako

!=

ne

Manje od

<

lt

Vee od

>

gt

Manje ili jednako <=

le

Vee ili jednako

ge

>=

Operator za stringove
Stringovi se mogu konkatenirati sa . operatorom
"hello" . "world"

# "helloworld"

'hello world' . "\n"

# isto kao "hello world\n"

"fred" . " " . "barney" # isto kao "fred barney"

1038/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

Jo jedan set operator su string komparacijiski operatori:

Comparison

Numeric

String

jednako

==

eq

Ne jednako

!=

Ne

Manje od

<

Lt

Vee od

>

gt

Manje ili jednako

<=

le

Vee ili jednako

>=

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"

"barney" x (4+1) # rezultat "barney" x 5, or # "barneybarneybarneybarneybarney"


(3+2) x 4

# is 5 x 4, ili "5" x 4, sto je "5555"

# 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

Operator

Left

"list" operatori (ljevo)

Left

-> (poziv metode, derefernciranje)

Nonassociative

++ -- (autoincrement, autodecrement)

Right

** (potenciranje)

Right

! ~ \ + - (logiki not, bit not, operator reference, unarni plus,


unarni minus)

Left

=~ !~ (matches, doesn't match)

Left

* / % x (mnoenje,djeljenje,mod,string repetition)

Left

+ - . (plus,minus,konkateniranje)

Left

<< >> (shift operatori)

Nonassociative

imenovani unarni operators (npr chomp)

Nonassociative

< > <= >= lt gt le ge (relacijski operatori)

Nonassociative

== != <=> eq ne cmp (operatori jednakosti)

Left

& (bitovni and)

Left

| ^ (bitovni or, bitovni xor)

Left

&& (logiki and)

Left

|| (logiki or)

Nonassociative

.. ... (noninclusive and inclusive range)

1040/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Asocijativnost

Operator

Right

?: (if then else)

Right

= += -= *=, etc. (dodjeljivanje i binarno dodjeljivanje)

Left

, => (comma and comma arrow)

Nonassociative

List operatori (rightward)

Right

not (logiki not)

Left

and (logiki and)

Left

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);

# dodaj 3 u $a, potom dodaj 4 na sve to i spremi u $b

$d = ($c = 5);

# kopiraj 5 u $c, a potom i u $d

$d = $c = 5;

# 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;

# sa binary assignment operatora

$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

Autoinkrement i Autodekrement
$a += 1; # s operatorom pridjeljivanja
++$a;

# sa autoinkrementom

$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

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

Programski alati na Unix raunalima

$a=5.3;

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)

# $a=ami;

chop($a)

# $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

Programski alati na Unix raunalima

$y = "hey $x"; # vrijednost je sad 'hey $fred': nema ponovne

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";

# nije payday, nego "It's wrong!"

$barney = "It's ${fred}day";

# sad, $barney dobiva "It's payday"

$barney2 = "It's $fred"."day";

# jo jedan nain konkatenacijom

$barney3 = "It's " . $fred . "day"; # i jo jedan nain konkatenacijom


takodjer vam je omogueno da manipulirate veliinom slova
$bigfred = "\Ufred";

# $bigfred je sada "FRED"

$fred = "fred"; $bigfred = "\U$fred"; # ista stvar


$capfred = "\u$fred";

# $capfred je sada "Fred"

$barney = "\LBARNEY";
$capbarney = "\u\LBARNEY";

# $barney je sada "barney"


# $capbarney je sada "Barney"

$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)

Programski alati na Unix raunalima

#dvije vrijednosti: vrijednost $a, i 17

($b+$c,$d+$e) # dvije vrijednosti


()

# prazna lista

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)

# 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
opsega
(1.3..6.1) # isto kao i (1.3,2.3,3.3,4.3,5.3)

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);

# dodaj 1 na $a, 2 na $b, 3 na $c

($a,$b) = ($b,$a);

# zamjeni $a i $b

($d,@fred) = ($a,$b,$c); # dodaj $a na $d, @fred=($b,$c)


($e,@fred) = @fred; isto kao ($e,@fred)=($b,$c)

# zamijeni prvi element @fred sa $e

# @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];

# $c=8

$fred[2]++;

# increment the third element of @fred=(5,9,9)

$fred[1] += 6;

# @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])

@fred[0,1] = @fred[1,0]

# zamijeni prva dva el

@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];

Programski alati na Unix raunalima

# $c = 8

($c) = (7,8,9)[$a-1]; # splice $c=8;


ili
@fred = (7,8,9);
@barney = (2,1,0);
@backfred = @fred[@barney];
# 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];

# prints "dino"

print $#fred;

# 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);

Programski alati na Unix raunalima

# l @fred = ($a,@fred);

unshift(@fred,$a,$b,$c); # @fred = ($a,$b,$c,@fred);


$x = shift(@fred);

# ($x,@fred) = @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)

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

# pretvara u "0", false


# = 0, pretvara se u "0", = false

# pretvara u "1", true

""

# prazan string = false

"1"

# = 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

Programski alati na Unix raunalima

}
evo jednog primjera maltertiranja korisnika:

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;
}

# no need to keep looking for From:, so exit


# end "if from:"

if (/^$/) {
last;

# blank line?
# if so, don't check any more lines

}
}

# end while

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

Programski alati na Unix raunalima

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;
}
}
}
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

%%

Percent sign

%c

Character with the given number

%s

String

%d

Signed integer, in decimal

%u

Unsigned integer, in decimal

%o

Unsigned integer, in octal

%x

Unsigned integer, in hexadecimal

%e

Floating-point number, in scientific notation

%f

Floating-point number, in fixed decimal notation

%g

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

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

Programski alati na Unix raunalima

s/ab*c/def/; # trai abc te zamijeni sa def


Construct

Equivalent Class Negated Construct Equivalent Negated Class

\d (a digit)

[0-9]

\D (digits, not!)

[^0-9]

\w (word char) [a-zA-Z0-9_]

\W (words, not!)

[^a-zA-Z0-9_]

\s (space char) [ \r\t\n\f]

\S (space, not!)

[^ \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

Programski alati na Unix raunalima

/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
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

Representation

Parentheses

( ) (?: )

Multipliers

? + * {m,n} ?? +? *? {m,n}

Sequence and anchoring abc ^ $ \A \Z (?= ) (?! )


Alternation

Evo nekih primjera regularnih izraza i utjecaj zagrada


abc*

# matches ab, abc, abcc, abccc, abcccc, itd..

(abc)*

# matches "", abc, abcabc, abcabcabc, itd..

^x|y

# matches x na pocetku linije, ili y bilo gdje

^(x|y)

# matches x ili y na poetku linije

a|bc|d

# a, or bc, or d

(a|b)(c|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

Programski alati na Unix raunalima

Modifier Meaning
m

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.

Quatifiers
Maximal Minimal Allowed Range
{n,m}

{n,m}?

Must occur at least n times but no more than m times

{n,}

{n,}?

Must occur at least n times

{n}

{n}?

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})

Asertiranje
Assertion Meaning
^

Matches at the beginning of the string (or line, if /m used)

Matches at the end of the string (or line, if /m used)

\b

Matches at word boundary (between \w and \W)

\B

Matches except at word boundary

\A

Matches at the beginning of the string

\Z

Matches at the end of the string

\G

Matches where previous m//g left off

(?=...) 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/;

Programski alati na Unix raunalima

# true

$a =~ /(.)\l/;

# also true (matches the double l)

if ($a =~ /(.)\1/) { # true, so yes...


# some stuff
}

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

Programski alati na Unix raunalima

# $& is now "sample"


# $' is now " string"

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

Programski alati na Unix raunalima

$line = "c:/;c:/windows;c:/windows/system;";
($first, $second, $third, $fourth) =

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;

# the sum of all elements

}
$a = add(4,5,6);

# adds 4+5+6 = 15, and assigns to $a

print add(1,2,3,4,5); # prints 15

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);

# create some local variables

($n,@values) = @_;

# split args into limit and values

my(@result); # temporary for holding the return value


foreach $_ (@values) { # step through the arg list
if ($_ > $n) {

# is it eligible?

push(@result,$_); # add it
}
}
@result;

# return the final list

1077/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima

}
# some invocations:
@new = bigger_than(100,@list);

# @new gets all @list > 100

@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;

# starts as undef

my @b = qw(fred barney betty); # give initial value


...
push @b, qw(wilma);

@c = sort @b;

# cannot leave her out

# 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

Programski alati na Unix raunalima

close(OUT) || die "can't close $b:$!";

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

File or directory is readable

-w

File or directory is writable

-e

File or directory exists

-x

File is executable

-z

File exists and has zero size (directories are never empty)

-s

File or directory exists and has nonzero size (the value is the size in bytes)

-f

Entry is a plain file

-d

Entry is a directory

-t

isatty on the filehandle is true (that is, the filehandle is a character device)

-T

File is text

-B

File is binary

-M

Modification age in days (C lang. time_t value)

-A

Access age in days (C lang. time_t value)

-C

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

Description

dev

Device number (drive number)

ino

Inode number: 0 (zero) in Perl for Win32

mode

File permission mode: read/write/execute

nlink

Number of links to file (usually one for Win32 systems - NTFS filesystems may have a value
greater than one)

uid

User ID - zero for Win32

gid

Group ID - zero for Win32

rdev

Device Identifier (drive number)

size

File size in bytes

atime

Last access time (C lang. time_t value)

mtime

Last modification time (C lang. time_t value)

ctime

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,

$state, $zip

===============================
.
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
}

($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,

$comment

^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$comment

^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$comment

^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$comment

.
ukoliko comment pokrije samo prve dvije linije zadnje dvije se odbacuju

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";

# like print STDOUT "hello world\n";

select (LOGFILE);

# select a new filehandle

print "howdy, world\n";

# like print LOGFILE "howdy, world\n";

print "more for the log\n"; # more for LOGFILE


select (STDOUT);

# re-select STDOUT

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

Programski alati na Unix raunalima

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
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

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

name=\"site_desc\"

rows=\"5\"

cols=\"50\"

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";

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

href=\"http://www.free-scripts.net/scripts\">Link

face=\"Arial,Helvetica\"
It</a>

v1.3<br>Free

size=\"1\"><a
from

<a

href=\"http://www.free-scripts.net/scripts\">Free-Scripts.Net</a></font></center></td>
</table>
</center>\n";
}
# End of Sig sub #

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

Programski alati na Unix raunalima

print end_html;

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

Programski alati na Unix raunalima

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";
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

Programski alati na Unix raunalima

$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;

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

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

Programski alati na Unix raunalima

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

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

message = ['Hello network world']

# tekst koji se salje na server

1157/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

if len(sys.argv) > 1:
serverHost = sys.argv[1]
if len(sys.argv) > 2:
message = sys.argv[2:]

Programski alati na Unix raunalima

# 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']

# C modul atributi

>>> hello.__name__, hello.__file__


('hello', './hello.so')
>>> hello.message

# C funkcijski objekt

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

ispituje stanje polja, pretraivanje po elementima

break

izlaz iz petlje

catch

hvatanje greki

cd

promjena radnog direktorija

close

zatvara i otvara I/O stream

concat

spaja argumente zajedno s razmacima

continue

nastavlja sa sljedeom iteracijom

error

prijavljuje greku

eof

provjerava end-of-file.

eval

spaja argumente te ih evaluira kao naredbu

exec

Fork i execute UNIX program.

exit

terminira proces

expr

evaluira matematiki izraz

file

query file system

for

stvaranje petlje

foreach

stvaranje petlje preko niza vrijednosti

format

formira string, slino kao C sprintf

gets

ita input line s I/O

glob

proiruje pattern prema odgovarajuim file imenima

global

deklariranje global varijabli

history

command-line history control

if

naredba uvjeta

incr

inkrementira varijablu za integer vrijednost

1177/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


Distribucija Linuxa/Unixa

info

query o stanju Tcl interpretera

join

spajanje niza elemenata sa zadanim string separatorom

lappend

dodaje elemente na kraj niza

lindex

dohvaanje elementa niza

linsert

umetanje elemenata u niz

list

stvaranje niza van argumenata

llength

vraa broj elemenata u nizu

lrange

vraa udaljenost izmeu elemenata niza

lreplace

zamjena elemenata u nizu

lsearch

trai element u nizu koji odgovara uzorku

lsort

sortiranje niza

open

otvara file ili process pipeline za I/O

pid

vraa process ID

proc

definira Tcl proceduru

puts

alje string na I/O stream.

pwd

vraa trenutni radni direktorij

read

ita blokove znakova sa I/O sreama

regexp

Regular expression matching

regsub

supstitucija bazirana na regularnim izrazima

rename

promjena imena Tcl naredbe

return

povratna vrijednost procedure

scan

slino kao C sscanf funkcija

set

dodjela vrijednosti varijablama

source

evaluira Tcl naredbe u file-u

split

dijeli string kao niz elemenata

string

operira nad stringovima

switch

grananje u programu

time

mjeri vrijeme izvravanja naredbe

trace

nadzire varijable

unknown

rad sa nepoznatim naredbama

unset

brisanje varijabli

uplevel

izvrava naredbu u razliitom opsegu vidljivosti (scope)

upvar

referenca na varijablu iz drugog opsega vidljivosti

1178/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

while

Programski alati na Unix raunalima


Distribucija Linuxa/Unixa

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

Neke od ugraenih matematikih funkcija

acos(x)

arc-cosinus od x

asin(x)

arc-sinus od x

atan(x)

arc-tangent od x

cos(x)

cosinus od x

exp(x)

exponential, e x

floor(x)

najvea vrijednost integrala manja ili jednaka x fmod(x,y)

log(x)

prirodni logaritam od x

log10(x)

log od x uz bazu 10

pow(x,y)

x na y potenciju

sin(x)

sinus od x

1181/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

sqrt(x)

drugi korijen od x

tan(x)

tangens od x

abs(x)

apsolutna vrijednost od x

double(x)

stavlja x kao floating point

int(x)

pretvara x u integer vrijednost

Tablica

Programski alati na Unix raunalima


Distribucija Linuxa/Unixa

Aritmetiki operatori sortirani od vieg prema niem prioritetu

-~!

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

x?y:z

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

defaultne vrijednosti za

argumente.
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

string compare str1 str2

usporeuje stringove leksikom analizom

string first str1 str2

pokazuje na mjesto u stringu gdje se prvi puta pojavljuje


neki zadani string ili vraa 1 u suprotnom

string index string index

vraa znak na specificiranom indexu

string last str1 str2

obrnuta logika od first

string length string

vraa duljinu stringa

string match pattern str

vraa vrijednost 1ako string odgovara patternu

string range str i j

vraa razmak izmeu zadanih znakova

string tolower string

vraa string malim slovima

string toupper string

vraa string velikim slovima

string trim string

ureuje znakove na poetku i kraju stringa

?chars?
string trimleft string

ureuje znakove na poetku stringa

?chars?

1185/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

string trimright string

Programski alati na Unix raunalima


Distribucija Linuxa/Unixa

ureuje znakove na kraju stringa

?chars?
string wordend str ix

vraa index znaka u stringu nakon rijei koja sadri taj


znak na ix indexu

string wordstart str ix

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

Pregled osnovne exec sintakse za I/O redirekciju

pipeline

< fileName

uzima input

<@ fileId

uzima input sa I/O streama identificiranog sa field

<< value

uzima input sa zadane vrijednosti

> fileName

uzima output

1193/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

Programski alati na Unix raunalima


Distribucija Linuxa/Unixa

2> fileName

uzima standard error output

>> fileName

dodaje standard output imenovanoj datoteci

2>> fileName

dodaje standard error imenovanoj datoteci

>>& fileName

dodaje zajedno standard error i s. output datoteci

>@ fileId

direct standard output na I/O stream identificiran sa fileId

2>@ fileId

direct standard output na I/O stream identificiran sa fileId

>&@ 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

Pregled osnovnih formi Tcl file naredbe


vraa vrijeme pristupa datoteci

file dirname name

vraa glavni direktorij imena datoteke

file executable name

vraa 1 ako ime ima execute dozvolu, inae 0

file exists name

vraa 1 ako ime postoji, inae 0

file isdirectory name

vraa 1 ako je ime direktorij, inae 0

file owned name

vraa 1 ako je trenutni korisnik vlasnik imena datoteke, inae 0

file readable name

vraa 1 ako ime ima dozvolu itanja, inae 0

file rootname name

vraa sve osim ekstenzije imena

file size name

vraa broj byteova u imenu

file tail name

vraa sve znakove nakon zadnjeg '/ ' u imenu

file type name

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

vraa 1 ako ime ima dozvolu pisanja, inae 0

file lstat name var

stavlja stat rezultate linka name u var

file stat name 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

Pregled open acess argumenata

otvoren za itanje, file mora postojati

r+

otvoren za itanje i pisanje, file mora postojati

otvoren za pisanje

w+

otvoren za itanje i pisanje

otvoren za pisanje, dodavanje podataka u file

a+

otvoren za itanje i pisanje, dodavanje podataka u file

Tablica

Pregled osnovnih POSSIX zastavica za access argumente

RDONLY

otvoren za itanje

WRONLY

otvoren za pisanje

RDWR

otvoren za itanje i pisanje

APPEND

otvoren za dodavanje

CREAT

kreira file ako ne postoji

NONBLOCK

spreava blokiranje prilikom otvaranja

TRUNC

skrauje file ako postoji

Primjer:

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.

seek, tell

-naredbe koje se koriste za pristup I/O streamu sluajnim odabirom

(random access to I/O stream)

close

-naredba koja je vana kao i ostale jer oslobaa operativni sustav resursa

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

Pregled osnovnih formi info naredbe

info args procedure

lista argumenata procedure

info body procedure

naredbe u tijelu procedure

info cmdcount

broj naredbi koje su dosad izvrene

info commands ?pattern?

lista svih naredbi ili onih koje odgovaraju pattern-u

info exists variable

istina ako je definirana varijabla

info globals ?pattern?

lista svih glob varijabli ili onih koje odgovaraju patternu

info level

stack level trenutne procedure, ili 0 za global scope

info library

pathname direktorija Tcl biblioteke

info locals ?pattern?

lista svih local varijabli ili one koje odgovaraju patternu

info procs ?pattern?

lista svih procedura ili one koje odgovaraju patternu

info script

ime datoteke koja se procesira ili NULL

info tclversion

broj Tcl verzije

info vars ?pattern?

lista svih vidljivih varijabli ili onih koje odgovaraju p.

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

Pregled osnovnih formi history naredbe

history

skraeno za history info

history add command ?exec?

dodaj naredbu u history list, ako je exec specificirano


izvri naredbu

history change new ?event?

mijenja naredbu specificiranu sa event sa novom u


naredbi history

history event ?event?

vraa naredbu specificiranu sa event

history nextid

vraa broj sljedeeg eventa

history redo ?event?

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):
!!

ponavljanje prole naredbe

!n

ponavljanje naredbe s brojem n

!prefix

ponavljanje zadnje naredbe koja poinje zadanim prefixom

!pattern

ponavlja zadnju naredbu koja odgovara pattern-u

^old^new

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

izvrava trenutnu proceduru i zaustavlja se nakon to procedura


vrati rezultat

ispisuje call stack

u ?level?, d ?level?

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

Pregled osnovnihTk naredbi za kreiranje wdgeta

button

kreira naredbeni gumb

checkbutton

kreira toggle gumb koji je linkan na Tcl varijablu

radiobutton

kreira radio gumb

menu

kreira menu

canvas

kreira canvas (podrava linije , bitmape...)

label

kreira jednolinijski tekst label (read only)

entry

kreira widget za jednolinijski unos teksta

message

kreira vielinijsku tekstualnu poruku

listbox

kreira scrolling text widget

text

kreira text widget openite namjene

scrollbar

kreira scrollbar koji je linkan u drugi widget

frame

kreira widget koji je spremnik za widgete

toplevel

kreira okvir koji predstavlja novi top level X window

Tablica

Pregled osnovnihTk naredbi za manipulaciju widgeta

after

izvrava naredbu nakon odreenog perioda vremena

bell

zvuni signal

bind

vezanje Tcl naredbe na X event

bindtags

kreiranje binding klasa, kontrola

clipboard

manipulira sa X clipboard

destroy

brie widget

fileevent

povezuje Tcl naredbe sa file deskriptorima

1208/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

focus

kontrolira input focus

grab

uzima input focus od drugih widgeta

option

pristup Xresources bazi

pack

packer geometry manager

place

placer geometry manager

send

alje Tcl naredbu u drugu Tk aplikaciju

tk

query internal Tk state

tkerror

background errors

winfo

query window state

wm

poziva window manager

Programski alati na Unix raunalima


Distribucija Linuxa/Unixa

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

Mandrake

PREDNOSTI

MANE

User-friendly,

Nove verzije imaju

Prednosti graf.

greaka te su

konfiguracije,

inicijalno dostupne

Velika tehnika

samo za lanove

podrka,

MandrakeClub-a

SPM

RPM

DOWNLOAD

Besplatno, sa
zakanjenjem

NTFS particija
Ogranieni produkti
Na iroko se koristi,

obuhvaaju free

RedHat

Odlina teh. potpora,

izdanje, Siromana

Fedora Core

Puno inovacija

multimedijska

RPM

Besplatan je

DEB

Besplatan je

SRC

Besplatan je

RPM

Nije besplatan,

podrka
100% besplatan,

Debian

lako nadogradiva

Nema puno

distribucija, otvoren

inovacija kod

razvoj, lako

instalacije,

prijavljivanje greaka Dugo testiranje


novih verzija

Gentoo

Bezbolna

Duga i gnjavatorska

instalacija

sistem instalacija,

individualnih prog.

povremena

paketa, esto

nestabilnost

putanje novih
verzija

SuSE

Nudi brz i lagan

Dostupan samo u

ulazak u svijet

prodaji ili putem

Linuxa, izuzetna

FTP instalacije,

posveenost

ukljuujui

detaljima

komponente s

samo putem FTP-

(dokumentacija),

pravom

1233/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

YaST-

Programski alati na Unix raunalima

vlasnitva

konfiguracijski alati

Slackware

Stabilna distribucija,

Sva konfiguracija

malo greaka,

se podeava Text

privren Unix

File editorom,

principima (iriti i

limitirana

prilagoavati)

hardverska

TGZ

Besplatan je

detekcija
Idealan za poetnike,

Neki zastarjeli

Nije besplatno,

dizajniran da nalikuje programski paketi,

samo 45-

Windowsima

dnevno probno

Lycoris

zahtjeva licencu
po mjestu za

RPM

izdanje

DEB

Nije besplatan

DEB

Nije besplatan

RPM

Nije besplatan

Nije besplatan

komercijalnu
upotrebu

Xandros

Dizajniran za

Ukljuuje vlasnike

poetnike, dobar File

komponente, nema

Manager i drugi

free download

korisni utiliti-i
Brza i jednostavna

Skup, nedostupne

instalacija, one-

testne verzije, osim

click instalacija

ako se plaa

programa

pruanje podrke

Jednostavna

Za Lite nema

Caldera

instalacija, nijedna

tehnike podrke,

OpenLinux

aplikacija ne moe

jer rok upotrebe

uzrokovati ruenje

istjee za 90 dana

LindowsOS

druge
Izuzetna portabilnost,
NetBSD

kompaktan sistem,

Nedostatak SMP

velika pouzdanost

podrke

Dobar security,

Razvija se za samo

1234/1275

Sveuilite u Splitu
Struni studij Raunarstva Zagreb

FreeBSD

Programski alati na Unix raunalima

fantastini

dvije arhitekture:

performansi, najbolja

i386 i alpha

TBZ

Besplatan je

TGZ

Samo putem FTP-

implementacija
TCP/IP stack-a
Najimpresivniji OS
OpenBSD

dananjice sa aspekta
security-a

Hardverska autoKnoppix

detekcija, pokree se

Ako se pokree sa

direktno s CD-a, bez

CD-a, mala brzina i

potrebe za hard disk

izvedba

DEB

Besplatan je

RPM

Besplatan je

instalacijom

Mandrake Move

Pokree se direktno s

Zasnovan na

CD-a, jednostavna

prethodnoj

upotreba, pouzdana

generaciji te mu

detekcija hardvera

stoga nedostaju
neke od mogunosti
i prog. paketa

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

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

- oznaava stabilnu verziju kernela

2.5.1

- 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

http://www.redhat.org

Debian

http://www.debian.org

Mandrake

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 ...)

...

Takoer puno informacija o naem hardveru moemo dobiti naredbom


# /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

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

- radi pod X-ima, preferirani nain

ili
# make menuconfig

- radi u konzoli, koristiti ako nemamo X-e

ili
# make menucofig

- radi u konzoli, koristiti samo u nudi ako niti jedan od


prethodnih naina ne radi

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

- ubacuje modul

# rmmod ime_modula

- 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

- ukljuiti za procesore novije

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

IBM

PS/2 raunala i laptope koji podravaju

MicroChannel arhitekturu
PCMCIA/CardBus support - sekcija iza koje se krije obavezno ukljuiti ako imamo
slotove za prikljuenje PCMCIA kartica, gotovo na svakom prijenosnom raunalo.

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

# Program za uitavanje (lilo) se instalira u MBR

root=/dev/hda2

# Osnovan particija gdje se nalazi na Linux OS

install=/boot/boot-menu.b

# Prikazuje izbornik za odabir kernela

default=linux

# Defaultni kernel ako nismo nita izabrali

map=/boot/map
delay=20

# Vrijeme odabira sistema, u ovom sluaju 2 sekunde

image=/vmlinuz

# Kernel (u naem sluaju link na kernel)

label=linux

# Ovo e biti ispisano u izborniku za izbor kernela vmlinuz

read-only
image=/vmlinuz.old

# Link na stari kernel

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

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