Professional Documents
Culture Documents
Kompletno o Linux HRV PDF
Kompletno o Linux HRV PDF
Zagreb, 2004.
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
"...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
3/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Sadraj
1.
2.
3.
4.
5.
6.
7.
8.
9.
6
30
42
72
111
138
160
179
213
230
263
273
305
322
343
370
396
419
435
469
509
527
556
4/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
578
610
638
662
672
691
718
776
796
815
827
858
876
886
917
926
970
996
1016
1033
44. PERL Practical Extraction and Report Language (Tamara Krutman,Ante Penava)
45. PYTHON (Ana Babi)
1090
1138
1173
DISTRIBUCIJE LINUXA/UNIX
47. (Elizabeta Velkavrh, Alja Pavli-Raver, Eliot Karlo Pavleti)
1214
1244
5/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Draen Hudoletnjak
GNU FILOZOFIJA I
GNU LICENCA
6/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
* 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
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
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.
10/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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 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).
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
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
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.
15/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
17/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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.
22/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
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
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
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
Marijela Napast
STRUKTURA UNIXA
30/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
Slika 1.
31/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
ali obino ukljuuje skup slova: nix da bi ga se moglo pronai sa tzv. Wildcard znakovima.
Npr.:
ls /*nix*
-rwxr----- 1 root
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
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
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
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;
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
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
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)
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
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
PATH
PRINTER
b)
SHELL
TERM
TZ
Shell uva listu naredbi koje smo upisivali. Ako trebamo ponoviti naredbu, koristimo
strelice da bismo se pomicali gore i dolje po listi.
c)
Utipkavanjem djela imena naredbe, naziva datoteke ili direktorija i pritiskom na Tab,
tcsh shell e zavriti ostatak imena automatski. Ako shell pronae vie od jednog imena koje
poinje tim slovima ut e se beep to ukazuje na to da je potrebno utipkati jo nekoliko slova
prije ponovnog pritiskanja Taba.
d)
e)
f)
38/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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)
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
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
41/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Andrija Martinovi
SHELL
42/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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.
45/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
46/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
49/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
50/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Uz pomo VI (ili nekog drugog tekst editora) napie se skripta. Ako prva
linija poinje sa # onda je C shell scripta. U suprotnom, script se tretira kao
Bourne shell script.
izvravanje:
/bin/csh [-vx] script_name args ...
-v
-x
ili:
% chmod +x script_name
% script_name args ...
Skripte se koriste kada je interaktivni rad teak i previe zamren te kada zahtjeva
mnoge komplicirane akcije koje se ponavljaju.
51/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
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.
-prekid procesa.
56/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
57/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
text da bi stao u \
liniju
58/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
59/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
&&
logiko AND
||
logiko OR
60/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
62/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
64/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
$#
$$
$?
$*
$n
$@
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
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
HOME=/home/andrija
TERM=vt320
PWD=/home/andrija
TZ=MET-1METDST
LINES=25
GROUP
Login grupa
HOME
HOST
IFS
LOGNAME
Login usera
PATH
PS1
PS2
SHELL
TERM
USER
Ime korisnika
67/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Znaenje/akcija
>
Redirekcija na izlaz
>>
Dodati u file
<
Redirekcija na ulaz
<<
Pipe izlaz.
&
[]
()
Izvri u subshell-u.
``
""
''
Cijela quote
$var
$$
Process id.
$0
Command name.
$n
$*
Poetak komentara
bg
Pozadinsko izvravanje
break
cd
Promjena direktorija
continue
69/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Simbol/ comanda
Znaenje/akcija
echo
eval
Evaluiraj argument
exec
Izvri
fg
Foreground izvravanje
jobs
kill
Terminiraj proces
newgrp
shift
stop
suspend
time
Vrijeme naredbe
umask
unset
wait
70/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
alias komande
nizovi
historija komandi
Kompletiranje
imena fajlova
Integer aritmetika
Kontrola posla
Editovanje
komandne linije
71/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Sinia Julijan
SH I BASH
72/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
75/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
77/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
/dev
ureaji (devices)
/dev/null
nul-device
/dev/tty
terminal ureaji
/lib
lib datoteke
/include
/home
/usr
korisnike datoteke
/usr/bin
/usr/bin/openwin
X windows datoteke
/usr/lib
/usr/include
/usr/local
/tmp
/sbin
temp direktorij
administratorski alati
/dir1/dir2/dir3
gleda se od root-a
78/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Relativni
dir1/dir2/
../
~/
home direktorij
~user
opcije a l F R ....
pwd
cd[dir]
df
trai disk
du
mkdir dir
rm file....
premjeta datoteke
prikaz datoteka
file file...
79/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
man man
80/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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 .
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
March 2002
LS(1)
81/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
82/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
84/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
ls aF
85/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Primjer:
echo \\
ispisuje
86/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
\
echo \' '\ /$&' \'
ispisuje
' \ /$& '
87/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
88/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
89/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Primjer:
alias ll=ls l
alias l=ls -F
alias rm=rm -i
alias
unalias ime
brie alias
90/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Podaci o procesima:
PID
TT
STAT
TIME
background
92/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
93/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Opis
varijable
HOME
Uobiajena vrijednost
ita se iz etc/passwd
npr. /student/ivica
LOGNAME korisniko ime (npr. ivica) kojim se prijavljuje
MAIL
ivica
PATH
SHELL
/usr/bin
TERM
TZ
zadaje
vremensku
zonu
razliku
od
94/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
-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
(csh, tcsh)
(sh, bash)
argv
cwd
home
path
Va login shell
kod koji pokazuje stupanj uspjenosti prijanjih komandi
term
96/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
find .-print | grep '^Unix' - trai sve datoteke koje zapoinju sa Unix
grep v Unix datoteka
broji linije
-h
-l
-v
-x
99/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
\c
poetak linije
kraj linije
[....]
[^....]
r*
r+
100/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Telefon: ",$3}
adresar.txt
Ime: John Doe
Telefon: 021-336699
Telefon: 021-332211
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
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
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
$?
$$
$!
$*
$@
103/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
$var
Opis
$(var)
$(var-nesto)
$(var=nesto)
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)
104/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
# ulazni parametar
105/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Komanda test
testiranje za datoteke i varijable
if [! f $FILE]
then
if test "$WARN"= "yes"
then
echo "$FILE ne postoji"
fi
fi
Test uvjeti:
-e datoteka
-d datoteka
-f datoteka
-L datoteka
-r[wx] datoteka
-z string
-n string
str1=str2
str1!=str2
n1 eq n2
case
case word in
pattern1) command(s)
;;
pattern2) command(s)
;;
106/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
107/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
until command_list1
do
command_list2
done
108/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
starog
procesa prepisuje se novi
fork
vrijednosti parent
procesu
Kao najei primjer za exec i fork uzima se slijedee:
109/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Marijana Ladan-Pelivanovi
C SHELL, T C-SHELL
111/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
113/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
114/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
115/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
cwd
trenutni direktorij
home
HOME direktorij
ignoreeof
noclobber
path
user
term
shell
118/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
!!
!n
!-n
!string
!?string?
!n*
119/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
!n$
!i:j
^str1^str2
!n:s/str1/str2/
&
<Ctrl>Z
bg [%job]
fg [%job]
stop [%job]
<Ctrl> C
120/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
122/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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.
% ls ?ead
% ls *
% ls *ing
[lista]
[x-y]
125/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
{ string..}
Grupiranje. Primjer:
% ls { x *y* ?z* }
x myfile yourfile xza yza
~home
~user
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
126/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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...
echo $*
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
naredba
127/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
else
naredba
endif (za postojanje i else)
Provjera datoteka:
if ( -c filename) then
....
gdje je -c :
r
w
x
e
o
z
d
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:
cc $2
naredba
breaksw
breaksw
endsw
endsw
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
INTEGER ARITMETIKA
Mogunost obavljanja aritmetikih operacija nad varijablama u scriptu bez UNIX
naredbi
Aritmetike operacije
Logike operacije
+ zbrajanje
- oduzimanje
* mnoenje
| ili operacija
/ dijeljenje
^ ekskluzivno ili
Logiki operatori
==
!=
=~
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
|| Logiko ili
&&
Logiko i
{command}
130/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
alias
[name[expression]]
bg [%job]
cd [name], chdir
[name]
echo [-n[words...]]
exit [status]
fg [%job]
history
jobs [ l ]
kill
nohup [command
[args...]]
rehash
repeat count
command [args...]
Pomjera rijei u varijable u lijevo. Prva rije se gubi. Anko nije definirano
ime varijable, korist se argv.
source [-h]
filename
stop [%job]
unalias pattern
131/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
unset pattern
unsetenv pattern
Resetuje sve varijable ija imena odgovaraju patternu. unset* resetuje sve
Brie varijable okoline ija imena odgovaraju patternu. unsetenv* brie
sve.
Komentari i izlaz
Sve od # do kraja linije smatra se komentarom. Izlaz iz shella sa statusom status:
exit [status]
132/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
133/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
135/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
137/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Predrag Jovanovi
SHELL PROGRAMIRANJE
(shell i bash)
138/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
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
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
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
dodaje dozvolu
uklanja dozvolu
141/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Varijable
U shellu varijable nemaju tipove,mogu sadravati brojeve,znakove i nizove znakova.Ne
moraju
se
ak
ni
deklarirati.Vrijednosti
se
pridruuju
varijablama
pomou
142/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
dakle kada se iz tekue skripte pozove druga_skripta bit e joj proslijeena kopija
varijable var1 i moi e ju koristiti unutar svog shella.
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
mnoenje
dijeljenje
zbrajanje
oduzimanje
Relacijski operatori
>
vee od
<
manje od
>=
<=
==
!=
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:
146/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
-le
-eq
jednako
-ne
razliito
-n
testiranje za vrijednost
jednakost
!=
nejednakost
Str
147/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Logike operacije
-a
logiki AND
-o
logiki OR
logika negacija
Testovi za datoteke
-f
datoteka postoji,obina je
-s
-r
moe se itati
-w
-x
-d
-h
-c
-b
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:
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
Petlje: while,until,for-in,for
Bash shell posjeduje kontrolne strukture petlje koje nam omoguavaju ponavljanje
naredbi.Poput bash if strukture,while i until ispituju rezultat naredbe.
Meutim,for i for-in strukture ne izvravaju testove,ve prolaze kroz niz
vrijednosti,dodjeljujui svaku vrijednost varijabli.
Sintaksa for-in: for varijabla in
lista-vrijednosti
do
naredbe
done
naredbe
done
Sintaksa until:
until naredba 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
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
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
cp $var mybackup/$var
echo $var
done
poziv skripte: bash uarg main.c lib.c io.c
A moemo i eksplicitno pozivati argumente pomou for-in i jedne od specijalnih
Varijabli $* ili $@. Struktura for-in e posebno pozivati svaki argument I dodjeljivati
vrijednost for-in varijabli.Postoji razlika jer $* e pozivati svaku rije posebno i ako su rijei
navedene pod navodnicima.
primjer 18:
#!/bin/bash
echo Unijeli ste $# argumenata
for var in $*
do
echo $var
done
poziv skripte:
izlaz:
jedan
dva
tri
etiri
Dakle,ako elimo da se argumenti u navodnim znacima tretiraju kao jedan
argument,koristimo $@.
primjer 18:
#!/bin/bash
echo Unijeli ste $# argumenata
153/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
for var in $@
do
echo $var
done
poziv skripte:
izlaz:
jedan
dva tri
etiri
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
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
c)
ls *.c
;;
*)
echo Niste unijeli nijednu od opcija
esac
naredba1 | naredba2
primjer 21:
#!/bin/bash
for var in *.c
do
156/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
157/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
Marko Vukovi
160/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
161/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
<scriptname,
budui ovaj nain efektivno onemoguava itanje iz ulazne biblioteke stdin unutar script
kda). Puno sigurnije je napraviti da script kd direktno izvriv sa naredbom chmod.
Npr.:
chmod 555 scriptname
ili:
svim korisnicima),
chmod u+rx scriptname
163/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
#!/bin/bash
a=375
hello=$a
echo hello
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
echo
echo '$hello'
# ispis $hello
# ovdje uocavamo efekte
# razlicitih tipova navoda
echo
exit 0
166/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
167/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
169/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
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"
done
echo
done
171/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
172/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
n = 0
echo "n = $n"
# n = 0
((n += 1))
#povecaj n za 1
# n = 1
173/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
174/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
176/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
wait
Ovdje se za preusmjeravanje I/O podataka u podzadatak koristi tzv. pipe operator, tj. "|".
177/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
REGEX
179/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
REGULAR EXPRESSIONS
((pravilni | regularni) izrazi)
180/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
MODEL NEURONA:
u1..n
ulazni podaci
w1..n
teinski koeficijenti
f( )
funkcija
izlazni podatak
181/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
[]
\( \)
\{ \}
vi
visual c++
awk
sed
Tcl
Ex
grep
egrep
fgrep
Perl
()
182/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
183/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
184/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
185/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
186/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Promaaj
abcb
abc
abcb
187/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
188/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
PRIMJER:
^Koliko je sati zahvaeni stringovi:
"koliko je sati .. .."
^\d
nezahvaeni stringovi:
zahvaeni stringovi:
nezahvaeni stringovi:
1ds
_987h
0ABD
d0d
189/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
zahvaeni stringovi:
\.$
nezahvaeni stringovi:
An52
dkkd
Bell1
bell
_5
6_
zahvaeni stringovi:
nezahvaeni stringovi:
eto.
marko.hr
zahvaeni stringovi:
nezahvaeni stringovi:
DA
DBA
D0123A
D1CA
D01A-KT
DB23A
190/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
zahvaeni stringovi:
D1A
nezahvaeni stringovi:
DA
D0123A
D1CA
D01A-KT
DB23A
zahvaeni stringovi:
nezahvaeni stringovi:
256
2556
26
236
256adf
2d8
zahvaeni stringovi:
nezahvaeni stringovi:
2559
259
255559
255555555559
255596
250559
191/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
zahvaeni stringovi:
^[A-Z]
ako je
zakon
bGet
Bget
cuker
Car
zahvaeni stringovi:
nezahvaeni stringovi:
nezahvaeni stringovi:
aS
Guru
luk
Pas
23pc TF
zahvaeni stringovi su svi oni koji za prvi znak imaju '.', zatim '*'
zahvaeni stringovi:
nezahvaeni stringovi:
.*asdasd\
.8995\
.*\
.*AAA
192/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
zahvaeni stringovi:
nezahvaeni stringovi:
_.d5
Dd5
A.D4
d.dd
193/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
zahvaeni stringovi:
nezahvaeni stringovi:
22.05
D22g056
g22.0
22.988
22.088A
c8.089
zahvaeni stringovi:
nezahvaeni stringovi:
_22dlf
555fhdj
g33_.c
h5.tz
194/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
zahvaeni stringovi:
nezahvaeni stringovi:
5556as
s5aff
d99d456
7aaa
zahvaeni stringovi:
nezahvaeni stringovi:
26
2a5
2.6
222
195/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
nezahvaeni stringovi:
0fshdf0
ad9
1g9
_99s
987
99dl.
nezahvaeni stringovi:
adf
123
pl89pp
1vf.
Znak
Opis
\f
\n
\r
\t
Tab
\v
Vertical tab
196/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
'\s' = [ \t \n\r\f\v]
zahvaeni stringovi:
nezahvaeni stringovi:
Ides u ducan..
.idem
zahvaeni stringovi:
.idem
nezahvaeni stringovi:
.
Ides u ducan..
zahvaeni stringovi:
nezahvaeni stringovi:
9idem
a9cd
945
899
197/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
zahvaeni stringovi:
nezahvaeni stringovi:
1233A
1233
DA
Da
zahvaeni stringovi:
nezahvaeni stringovi:
Tada se zbilo...
f\n
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
Lookahead Assertions
(?=regEx)
nalazi li se ispred...
MATEMATIKA 2
TALIJANSKI ...
Pogodak na matematici 2.
(?!regEx)
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
Lookbehaind Assertions
(?<=regEx)
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
Ana, Ban
Alex, France
3398-000
5598-999
PRIMJER:
egrep "[xX]" tel_imenik
Alex, France
5598-999
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
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
'^[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
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
204/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
EXI
EXI
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
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
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
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
:%s/function(\([^,]*\),\([^,]*\),\([^,]\))/function(\2,\1,\3)/g
:wq
PRIMJER:
zo@linux:~> cat sub2
Marko Blazevic,
Parduk, HR,
,APL
10000 Zagreb
SLO,21100 Ljubljana
,HR,
21000 Split
,42000 Varazdin
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
Siemens
209/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
PIN(labosi)
DV.F111
zo@linux:~> ex txt
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
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
Mario Strini
VI EDITOR
213/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
pozicije kursora. Ukoliko navedemo count sav tekst koji je umetnut bit e
ponovljen count puta
j
215/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
upozorenje)
q!
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)
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
217/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
: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
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
221/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
222/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.)
223/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
224/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
Matko Peji
EMACS
230/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
232/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
233/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Napomena: Emacs u nekim sluajevima koristi posebne znakove kao strelice (npr. pod
X-om ili kad se vrti pod DOS-m, gdje Emacs razumije dogaaje tipkovnice). Ali preporuka je
ne koristiti te tipke ak i kad rade, da bi mogli koristiti Emacs sa bilo kojeg terminala.
Notacija
U nastavku teksta koristiti e se standardna Emacs notacija za opisi utipkavanja:
C-x
M-x
nastavku teksta).
C-M-x
RET
SPC
Razmaknica
ESC
234/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
236/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
238/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
239/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
240/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
241/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Ekran
Linija moda (The Mode Line)
Cijeli Emacs ekran je posveen tekstu vae datoteke, osim jedne linije blizu dna: to je
linija moda. Ova linija slui za informiranje, nikada ne moete u nju ui. Gotovo uvijek je na
neki nain oznaena. Ona ispisuje vane obavijesti (koje se mogu mijenjati) kao:
Stanje meuspremnika. Da li je promijenjen, nije promijenjen ili je readonly.
Ime datoteke koju ureujete.
Glavni mod.
Dio datoteke koju vidite na ekranu:
All
Top
Bot
Percentage
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
poruka znai da Emacs-ova lisp maina preuzima spremanje (reclaming storage). Ovu poruku
moete ignorirati i nastaviti tipkati. Emacs nee izgubiti vae znakove.
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
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.
244/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
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
246/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
247/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
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
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
Meuspremnici
Naredba kill-buffer ne ubija sav tekst u meuspremniku, ve ubija cijelu strukturu
podataka meuspremnika
Funkcije
Ne postoje naredbe za ubijanje funkcija (defun).
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
255/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
256/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
RET
ESC
257/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
258/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
259/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
261/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
gnu.emacs.help
comp.emacs
gnu.emacs.announce
alt.religion.emacs
gnu.emacs.sources
262/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Maja Mehinagi
LOGIN I ID
263/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
264/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
ispoetka. To je sve napravljeno radi jo vee sigurnosti tj. da ne bi neovlatena osoba ula u
UNIX sistem.
266/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
login:student
password:
login:studentica
password
Slika 1
267/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
GCOS polje
Home direktorij
Inicijalni shell
Ime korisnika se obino zadaje malim slovima, duine do osam karaktera i ne smije
zapoinjati brojem. Korisnici koji se prijavljuju na UNIX sistem mogu biti pojedinci ili drugi
UNIX sistemi (uucp na primjer).
ifrirana lozinka se kao rezultat jednosmjernog algoritma smjeta u drugo polje
/etc/passwd file-a, ako se radi o tradicionalnom nainu. Poslije zadavanja teksta lozinke, prvih
osam karaktera se kombinira sa kljuem od dva karaktera, nakon ega se dobiva ifrirana
lozinka duine 13 karaktera. Svaki puta kad se korisnik prijavljuje na sistem, lozinku koju
unese, ifrira se na isti nain i usporedi sa ifriranom lozinkom koja se uva u /etc/passwd
file-u. Ako je dano polje prazno, tada korisnik prilikom prijavljivanja ne mora zadati lozinku.
student
maja
student
Slika 2
270/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
passwd -w 14 korisnik
passwd -1 korisnik
passwd -u korisnik
272/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Nina ugaj
TELNET I SSH
273/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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.
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
277/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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:
278/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
279/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
281/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
282/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
283/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
285/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
se
program
instalira
zasebno,
instalacija
programa
zahtjeva
Zlib
286/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
287/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
to
je
stvorena
odgovarajua
$HOME/.ssh/authorized_keys
ili
289/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
292/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
293/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
-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.
295/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
/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
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
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:
301/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
302/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
Frane Gjeldum
ARHIVIRANJE NA
UNIX RAUNALIMA
305/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
306/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
307/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
--list
-t
ili
--exstract
-x
308/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Kreiranje arhiva
Jedna od osnovnih operacija tara je create (-c) koju upotrebljavamo za kreiranje tar
arhiva, naravno da bi to objasnili moramo prvo kreirati direktorij koji sadri tri dokumenta.
Navedena tri dokumenta emo spremiti u arhivu. Dokumente emo nazvati blues; folk;
jazz, direktorij emo nazvati practice, a arhivu collection.tar. U daljnjim primjerima
pretpostavlja
direktorija.
Da bi stavili dokumente blues, folk, jazz u arhivu collection.tar upotrijebiti
emo slijedeu naredbu:
$ tar --create file=collection.tar blues folk jazz
Redoslijed argumenata nije vaan kada upotrebljavamo long opciju forme, pa se
moe napisati:
$ tar blues --create folk file=collection.tar jazz
Naravno, vidljivo je da je iz ovog redoslijeda tee razumjeti naredbu. Redoslijed
argumenata postaje vaan upotrebom short forme gdje pogrean redoslijed moe dovesti do
neeljenih rezultata. Kada listamo sadraj radnog direktorija (ls) vidjet emo da se arhiva
collection.tar i dokumenti blues, folk i jazz nalaze u njemu. Kreirana arhiva nije
unitila kopije dokumenata u direktoriju. Zakljuno, moramo navesti operaciju i ime
dokumenata inae tar nee raditi. Vrlo je vano pogledati da ve ne postoji dokument u
radnom direktoriju istog imena ,kao arhiva koju emo imenovati prethodnom navedenom
naredbom jer e tar izbrisati trenutni sadraj tog dokumenta. Naravno direktorije smo prije
kreirali ,a arhivu collection.tar stvaramo i imenujemo prethodnim primjerom tar naredbe.
Koristei istu naredbu s verboseopcijom, tar e sam dodati imena dokumenata koje
koristi dok radi .To se esto koristi da prikaemo akcije koje inae ne bi vidjeli.
$ tar create --verbose --file=collection.tar blues folk jazz
309/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
311/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
314/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
[--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.)
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
319/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Vidimo da opcija ima dosta , ali najbolje e neke stvari objasniti na konkretnom
primjeru.
320/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Davorin ajnovi
322 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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.
324 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
325 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Argument
Opis
-w
-r
-n
-t type
-a
-o popis_opcija
/dev/hda6
/ext2 defaults
/dev/hda5
326 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
none
/dev/pts
none
/proc proc
defaults
/dev/hda6
/ext2 defaults
/dev/hda5
/dev/hda1
/win/c vfat
defaults
/dev/hda8
/win/d vfat
defaults
none
/dev/pts
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
328 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
329 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
330 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
<M>MSDOS fs support
<M>VFAT (Windows-95) fs support
Model:
Rev:
Type: Direct-Access
331 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
/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
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
SAMBA
Uvod
U ovom dijelu opisano je instaliranje, podeavanje i koritenje paketa Samba. Pomou sambe
moemo uiniti sljedee:
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.
334 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
335 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
#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
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
vrijednost, primjerice
337 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Dijeljenje direktorija
Nakon to
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
339 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
Parametri
Opis
? or help
[command]
[SHELL COMMAND]
cd
[directory]
lcd
[directory]
Del
[files]
mkdir
[directory]
[file]
340 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
Branimir ivkovi
343 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
[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
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
naredbenog retka, obino ograen apostrofima (') kako bi sprijeili shell u nastojanju da ga
proiri.
b.
348 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
349 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
Character
\a
audible bell
\b
backspace
\f
formfeed
\n
newline
\r
carriage return
\t
horizontal tab
\v
vertical tab
\ooo
\xdd
hexadecimal value dd
\/
slash
\"
quote
352 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
356 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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]
V++ V
increment, decrement
++V --V
A^B
exponentiation
+A -A !A
A+B A-B
addition, subtraction
AB
string concatenation
comparisons
A in V
array membership
A && B
logical AND
A || B
logical OR
A?B:C
conditional expression
assignment
357 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
awk dijeli zapise u polja. String za razdvajanje polja, odreuje ga vrijednost ugraene
varijable FS, razdvaja svako polje od slijedeeg. Moete postaviti odreeni string za
razdvajanje polja tako da dodijelite neku vrijednost varijabli FS, ili tako da specificirate -F
ere opciju na naredbenom retku. Varijabli FS moete dodijeliti regularni izraz. Na primjer:
FS = "[,:$]"
kae da znak zareza, dvotoke ili dolara moe razdvajati polja.
Slijedea lista ugraenih varijabli omoguuje razliite dijelove informacija o ulaznim
podacima.
NF
NR
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
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
360 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
361 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
strani
0
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
362 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
string
363 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
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
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
SED
366 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
slijedeoj
tablici
nalaze
se
pattern-matching
zamjenski
znakovi
(eng.
metacharacters).
Special
Usage
Characters
.
[]
\{n,m\}
\(\)
368 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
\n
&
Ispisuje cijeli tekst koji se slae kada znak koristimo u string vrijednosti za
zamjenu.
Tablica 3. Pattern-Matching Metacharacters
369 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Tomislav Grgac
SED
370/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
ssed v3.60
HHsed
371/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
prije bilo kakvog editiranja, sve naredbe za editiranje se skupljaju u formu iz koje se
koriste u fazi izvravanja;
372/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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:
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
Primjer:
Obradit emo datoteku "input" sa dvije sed naredbe:
>sed -e 'command1' -e 'command2' input
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
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
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
Primjer:
Napisat emo naredbu koja trai znak A u datoteci input:
>sed '/A/' input
ili rije UNIX:
>sed '/UNIX/' input
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
375/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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'
Primjer:
Kako bi recimo nali rije UNIX bez obzira da li je pisana velikim ili malim slovima:
>sed '/[Uu][Nn][Ii][Xx]/'
sekvence, ali ima popratni uinak koji emo opisati pod funkcijom 's' i pod
slijedeom tokom;
376/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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;
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:
377/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Funkcije vie ulaznih linija (Multiple input-line functions) koje trae izraze koji
se proteu kroz vie linija;
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
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
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
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
379/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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:
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
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"
Primjer:
Zamijenit emo svaku pojavu teksta "password" sa "xxxxxxxx" izmeu prve i 15 linije:
>sed '1,15 s/password/xxxxxxxx/g' input
Primjer:
Zamijenit emo treu pojavu teksta "kuna" sa "dolar" za drugu liniju ulaza:
>sed '2 s/kuna/dolar/3' input
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
>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
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
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.
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
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
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).
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
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
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
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
>sed '/poetak/ {
>N
>/poetak.*kraj/ {
>s/poetak.*kraj/poetak kraj/
>P
>D
>}
>}' input
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
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
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
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
:<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
Primjer:
Ako je linija prazna idi na kraj skripte:
>sed '/^$/b' input
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
= - 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:
389/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
392/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
393/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
/^"/{
: 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
s/..//
b loop
}
b ccom
}
: break
H
x
s,\n\(.[^"'/]*\).*,\1,
x
s/.[^"'/]*//
b loop
395/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Kreimir Heimovi
GCC COMPILER
396/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
397/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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)
398/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
399/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
"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
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
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
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
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
GCC
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
410/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
411/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Predprocesor
Predprocesor je program koji
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
414/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
Janko Rade
GDB
THE GNU SOURCE LEVEL
DEBUGGER
418/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
419/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
utipkaj quit
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
421/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
info breakpoints
Pomone informacije
Pomo i informacije o komandama uvijek moemo dobit koristei komandu help
Help
ili h
(gdb) help
List of classes of commands:
aliases
breakpoints
data
-- Examining data
files
internals
-- Maintenance commands
obscure
-- Obscure features
running
stack
status
-- Status inquiries
support
-- Support facilities
tracepoints
user-defined
-- User-defined commands
422/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Argumenti:
Ako se pokrene program samo sa run bez argumenata onda on nasljeuje argumente od
posljednje run komande koja je izvrena ili po postavkama komande set args.
Show args pokazuje koji su argumenti podeeni da se automatski pokreu kada sami ne
navedemo argumente.
Ulazi i izlazi programa:
Program koristi ulaze i izlaze na isti terminal kao gdb.
info terminal
program.
Moemo jednostavno preusmjeriti ulaze i izlaze programa komandom run npr.:
run > outfile
pokree program ali se izlaz zapisuje u outfile.
Jo jedan nain da se preusmjeri ulaze/izlaze programa na druge terminale pomou
komande tty npr.:
tty /dev/ttyb
- preusmjerava ulaze/izlaze na terminal ttyb.
423/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
break function
na funkciju function
break +offset
Na broj(offset) linije
break offset
424/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
break linenum
break filename:linenum
break filename:function
break *address
Na adresu address
Sa uvjetom cond
tbreak args
hbreak args
thbreak args
rbreak regex
Type
Disposition
Enabled or Disabled
y/n
Address
memorijska adresa
What
mjesto u kodu
Za izraz .
rwatch expr
425/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
awatch expr
info watchpoints
GDB postavlja hardverske toke pregleda ako je to mogue zato to su jako brze, a ako
ne moe onda postavlja softverske toke prekida koje su znatno sporije i pokazuju promjenu u
slijedeem redu koda.
Ako je bio u mogunosti postaviti hardversku toku pregleda kada postavimo komandu
watch, gdb prijavljuje
Hardware watchpoint num: expr
Ponekada se ne moe postaviti hardverska toka pregleda zato to tip podataka koju
nadgleda ima iri opseg od opsega koju moe sama pridruiti.
Postavljanje toaka zahvata
Pomou komande catch postavljamo toke zahvata.
catch event
catch
exec
fork
vfork
load
load
libname
library-a:libname.
unload
tcatch event
unload
libname
library-a:libname.
426/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
clear filename:function
clear linenum
clear filename:linenum
linenum
delete [breakpoints] [range...] brie svaku toku u opsegu range. Ako se ne navedu
argumenti, obriu se sve toke
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Nastavljanje i step-anje(koraanje)
Nastavljanje znai da program nastavlja s izvravanjem dok ne naie na kraj ili neku
kontrolnu toku. Step (korak) znai izvravanje trenutne linije koda i prebacivanje u slijedeu
liniju.
continue [ignore-count]
c [ignore-count]
fg [ignore-count]
step
step count
next [count]
set step-mode
set step-mode on
set step-mode off
until
stepi arg
nexti arg
ni
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
Okviri stoga
Stog je podijeljen na okvire u kojima se nalaze informacije o varijablama adrese
funkcije i argumenti. Kada se pokrene program dobiva prvi okvir za funkciju main.
Unutar programa okviri se razlikuju po brojevima koji im se dodjeljuju poevi od 0
prema gore. Ti brojevi samo slue da bi se razlikovali i prepoznavali okviri.
frame args
vrijednosti.
select-frame
Prethodni tragovi
Prethodni tragovi(backtrace) su informacije o tome kako je program doao na mjesto na
kojem se nalazi.
backtrace
bt
backtrace -n
bt - n
429/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
info frame
info f
Ispisuje detaljnije informacije o trenutno odabranom okviru u obliku:
430/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
adresa okvira
adresa slijedeeg okvira (up)
adresa slijedeeg okvira (down)
jezik izvornog koda koji je pisan u okviru
adresa argumenata u okviru
adresa lokalnih varijabli okvira
programsko brojilo
imena registara iz okvira
info frame addr
info f addr
info args
info locals
Pretraivanje podataka
Uobiajeni nain pregleda podataka je komandom print (p).
print expr
print /f expr
print
print /f
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
431/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
432/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Automatski prikaz
Ako elimo svaki put kada program stane ispisati vrijednost neke varijable, onda nam
gdb to moe napraviti automatski. To se radi tako da na (automatic display list) dodamo
varijablu.
Svaki izraz dodan u takvu listu dobiva identifikacijski broj; taj broj se koristi kad ga
briemo s liste izraze.
Lista izgleda ovako
2: foo = 38
3: bar[5] = (struct hack *) 0x3804
Ispis prikazuje identifikacijske brojeve, izraz i njegovu trenutnu vrijednost. Takoer se
moe odrediti u kojem obliku e se ispisivati koje varijable (vidi Ispis izlaznih vrijednosti).
display expr
display/fmt expr
automatskog prikaza.
undisplay dnums...
delete display dnums...
display
info display
433/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
434/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Marko Ferk
GNU MAKE
435
/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
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
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`.
438/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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).
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
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):
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:
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:
441/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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)
442/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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:
-
odluivanje
443/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
make
trai
makefile,
pokuava
kroz
slijedee
nazive,
redom:
444/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Include filenames
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
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 = Makefile
name2 = inc.mk
446/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
447/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
foo:
frobnicate > foo
%: force
@$(MAKE f Makefile $@
force: ;
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
PRIJENOS VARIJABLI
immediate = deferred
immediate ?= deferred
immediate := immediate
immediate += deferred or immediate
define immediate
deferred
endef
449/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
PISANJE PRAVILA
Pravilo se pojavljuje u makefileu i govori kad i kako prepraviti odreeni file, a naziva
se metom pravila. Izlistava druge fileove koji su preduvjeta mete i naredbe koje e koristiti pri
kreiranju ili auriranju mete.
Red pravila nije bitan, osim odluivanja default cilja; mete o kojoj e make razmatrati,
ukoliko ne specificirate jednu. Default cilj jest meta prvog pravila u prvom makefileu. Ako
prvo pravilo ima viestruke mete, samo je prva meta uzeta kao default. Postoje dvije iznimke:
meta koja poinje sa tokom nije default osim ako ne sadri jednu ili vie kosih crta `/` i meta
koja definira da pravilo veze nema uinka na default cilj.
PRIMJER PRAVILA
Ovdje je jedan primjer pravila:
foo.o : foo.c defs.h
cc c g
foo.c
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
ili ovako:
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
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
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
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
subdirs:
for dir in $(SUBDIRS); do \
$(MAKE) C $$dir; \
done
453/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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:
454/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
SUFFIXES,
.DEFAULT,
.DELETE_ON_ERROR,
.PRECIOUS,
.IGNORE,
.INTERMEDIATE,
.LOW_RESOLUTION_TIME,
455/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
456/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
458/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
program : $(objects)
cc o program $(objects)
$(objects) : defs.h
foo = c
prog.o : prog.$(foo)
$(foo)$(foo) -$(foo) prog.$(foo)
459/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
460/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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:
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
$(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
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'.
zamjenjuje rezultat.
$(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,
$(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
$(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.
464/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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 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.
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
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'
466/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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:
467/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
CVS SUSTAV ZA
VERZIONIRANJE
469/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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:
Developer je otklonio bug u zadnjem releasu, i sada tih njegovih promjena vie
nema.
Dobio sam neiji tui kod na kojem pri svakom novom releasu moram raditi neke
izmjene.
470 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
471 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
473 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
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
476 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
477 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
478 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
479 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
480 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
484 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
485 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
486 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
487 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
488 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
489 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
491 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
493 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
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
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.
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
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
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
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
503 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
504 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
505 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
Ivan Podhraki
IDE
509 /1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
UVOD
510/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Invazija
Za
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
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
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
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
512/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
514/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
KDevelop 2.0.2
515/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
516/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
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
518/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
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
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
ARRIBA
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.
522/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
KYLIX
slika :
KYLIX
523/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
524/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Visual SlickEdit
525/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
ECLIPSE
527/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
528/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
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
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
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
532/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
533/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
534/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
535/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
platformi
3.
4.
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
Prema tome, PDE nudi Find Unused Dependencies (sl.6) mogunost koja trai
stavke koje su EXTRANEOUS te nudi mogunost njihova micanja.
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
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
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
Runtime
Tip biblioteke, vidljivost i sadraj mogu se namjestiti u Runtime pageu (sl. 8) manifest
editora.
540/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
sl. 10 test
542/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
softverske prodavae
njih
TM
Workbench
NewTool
JFace
SWT
NewTool
Team
Workspace
NewTool
Platform Runtime
544/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Non-GUI
konfiguracije
Platforma
mogu
jednostavno
preskoiti
plug-in
Workspace
547/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Workbench i UI Toolkit
548/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
SWT widget set i grafika biblioteka integrirana window sistemom, ali OS-
neovisnim API-jem.
Motifu .
549/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
elemenata
domene
i SWT widgetsa,
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
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 nove perspektive, koje araniraju stare i nove viewe kako bi odgovarali
Dodaju nove akcije meniju workbencha i alatnom baru kad postojei editor
postane aktivan.
552/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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:
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
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
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
Goran Jurii
PIPE I FIFO
556/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Primjer 1.
#include<stdio.h>
#include<unistd.h>
int main()
{
printf (ID procesa je %d\n, (int) getpid() );
printf (ID parent procesa je %d, (int) getppid() );
return 0;
}
Povratne vrijednosti su cast-ane na long jer nema garancije da e pid_t stati unutar int-a.
Primijetite da ako pokrenete ovaj program vie puta, javlja se razliit proces ID jer
svako pokretanje programa je novi proces. S druge strane, ako pokrenete program svaki put iz
istog shell-a, parent process ID (odnosno, process ID shell procesa) je svaki put jednak.
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
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
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
Primjer 5.
#include<unistd.h>
{
/*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:
561/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
562/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Slika 2.
*pipe-ovi koriste meuspremnike (buffer cashe) veliine jednog bloka (obino 512
bajtova)
564/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
565/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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]
Parent
p[1]
Child
write( )
pipe
read( )
p[0]
566/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
pipe
KORAK 2. process A stvara dva child
KORAK 3.
B
write()
C
read()
567/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Na redu je konkretan primjer gdje parent proces ita unos sa tastature i alje ga child
procesu koji e ga ispisati na monitor.
Primjer 6.
#include<stdio.h>
#include<unistd.h>
/*posao koji obavlja child proces*/
void do_child(int data_pipe[])
{
int c;
int rc;
close(data_pipe[1]);
pipea*/
568/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
{
perror(Parent);
close(data_pip[1]);
exit(1);
}
}
/*glavna funkcija*/
int main(int argc, char* argv[])
{
int data_pipe[2]; /*niz za spremanje file descriptors-a*/
int pid;
int rc;
569/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
}
pid = fork();
switch (pid)
{
case -1:
perror(fork);
exit(1);
case 0:
default:
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
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
571/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
572/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
2.
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
574/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
{
pid_t childpid;
DODATAK A
576/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
fd flags ptr
f d 0:
f d 1:
f d 2:
v-node ptr
...
f d 0:
f d 1:
f d 2:
...
i-node information
current file size
v-node information
i-node information
current file size
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
Krasnodar Krajnik
fork
578/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
580/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
datoteci
/bin/login
/bin/login
provjera passworda
exec
/etc/init
(starije
UNIX-a)
verzije
/sbin/init
user2
shell
shell
shell
user1
ili
nikada ne umire.
581
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
#include <sys/types.h>
#include <unistd.h>
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
1 - fork()
2 -alocate
kernel
proces structure
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
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
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.
585
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
587
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
fork i execve
U primjeru1 forkom je kreiran child proces koji je izvravao dio koda unutar istog programa
kao i parent. Drugi nain upotrebe forka jest kreiranje childa i zatim pokretanje nekog drugog
programa unutar tog child procesa. Takvu mogunost ostvarujemo kombinacijom forka i
sistemskog poziva execve.
Kada proces izvri sistemski poziv execve adresni prostor procesa se 'reinicijalizira' odn.
prekriva adresnim prostorom programa koji e se unutar njega pokrenuti. Novi program
poinje izvravanje od svoje main funkcije. Proces ID programa koji nastavlja s izvoenjem
ostaje isti budui da se ne kreira novi proces. Execve zamijenjuje resurse trenutnog procesa
(text, data, heap, stack segmente) sa novim programom uitanim sa diska. Novopokrenuti
program preuzima odreena svojstva child procesa. Nabrojimo neka: PID i parent PID, ID
stvarnog korisnika i grupe, kontrolni terminal, pokrenute alarme, radni i root direktorij, tms
strukturu itd.
Zato nam je takva mogunost pokretanja programa unutar postojeeg procesa uope
potrebna? Ilustrirajmo to na primjeru UNIX shella. Neprihvatljivo bi bilo ako bi sva
funkcionalnost shella bila ograniena na ono sto sam program shella, odn. njegov kod, moe
uiniti. Ono to je snaga shella jest upravo njegova mogunost da pokrene izvoenje nekog
drugog programa. Nain na koji to zapravo radi jest forkanje novog procesa (novog shella) i
izvoenje drugog programa u njemu.
execve je deklariran u datoteci zaglavlja <unistd.h> kao
int execve(const char *filename, char *const argv [], char *const envp[]); pri emu
filename
argv []
envp[]
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
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;
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!
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
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
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
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
poziv _exit funkcije - ova funkcija se poziva exit funkcijom i uvaava specifinosti
UNIX-a kao OS-a. Funkcija _exit specificirana je POSIX standardom
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
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
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
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!
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
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
- eka na bilo koji child iji process group ID je jednak apsolutnoj vrijednosti
od pid
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
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
601
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
act.sa_handler = SIG_IGN
- signal se ignorira
//
//
602
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
603
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
<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;
604
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
int i, sleep_sec;
struct sigaction act;
srand((unsigned int)time(0));
memset(&act,0,sizeof(sigaction));
act.sa_handler=sigchld_handler;
i=sigaction (SIGCHLD, &act, 0);
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
605
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
finished
finished
finished
finished
finished
child
child
child
child
child
with
with
with
with
with
pid
pid
pid
pid
pid
5873,
5869,
5870,
5872,
5871,
has returned 0
has returned 3
terminetad by signal no. 9
terminetad by signal no. 9
has returned 8
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.
606
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
close(pipefd)
newpipefd = dup(pipefd)
dup2(pipefd,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
Ispis je:
The date is Tue Dec 7 14:58:19 CET 2004
Press Enter to continue!
U primjeru8 izmeu parenta i childa postoji dvosmjerna komunikacija. Parent i child koriste
streamove koji se kreiraju na osnovu deskriptora. Parent prima string s konzole, prosljeuje
ga childu na obradu. a child nakon obrade vraa rezultat.
U <stdio.h> deklarirana je funkcija
FILE* fdopen (int flides, const char *mode)
koja povezuje stream s postojeim file deskriptorom. mode otvaranja mora biti kompatibilan s
modom file deskriptora.
// primjer8 - pipe, stream
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
void read_from_pipe (int file, char *s){
FILE *stream = fdopen (file, "r");
fgets(s,1024,stream);
fclose (stream);
}
void write_to_pipe (int file,const char *s)
{
FILE *stream = fdopen (file, "w");
fputs(s,stream);
fclose (stream);
}
int main(int argc, char *argv[]){
char str[1024], *cp;
int pipe_x[2], pipe_y[2], status;
pid_t pid;
if (pipe (pipe_x) || pipe (pipe_y)) exit(-1);
switch(pid=fork()){
case -1: printf("can't fork \n"); _exit(-1);
case 0 :
// child code
close(pipe_x[1]);
close(pipe_y[0]);
read_from_pipe(pipe_x[0],str);
printf("child read from pipe - %s\n",str);
cp=str;
while(*cp) *cp=toupper(*cp++);
write_to_pipe(pipe_y[1],str);
printf("child write to pipe - %s",str);
_exit(0);
default:
// parent code
608
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
close(pipe_x[0]);
close(pipe_y[1]);
fgets(str,1024,stdin);
write_to_pipe(pipe_x[1],str);
printf("parent write to pipe - %s",str);
read_from_pipe(pipe_y[0],str);
printf("parent read from pipe - %s\n",str);
wait(&status);
-->pipe
}
}
609
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
VEDRAN DEDU
VANJA HARAMBAA
PROCESI I UPRAVLJANJE
PROCESIMA
610
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
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
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
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
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
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
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
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
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
619/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
621/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Primjer 2: specifinost fork naredbe pod Unixom; primjer da procesi imaju razliite adresne
prostore.
ZAVRETAK PROCESA
1.
2.
3.
4.
622/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
koriteni za uvanje dva file descriptora.Prvi integer koristimo za itanje s pipe-a,a drugi za
pisanje na pipe.
Primjer koritenja funkcije:
int pipes[2];
int rc = pipe(pipes);
if (rc = = -1) {
/* 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.
624/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
625/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
mknod prog_pipe p
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
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
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
struct ipc_perm
{
key_t key; /* key identifying the resource
*/
*/
*/
};
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
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
*/
*/
630/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
631/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
00:00:00 mingetty
4 S
3362
82
00:00:00 mingetty
4 S
3363
82
00:00:00 mingetty
4 S
3364
82
00:00:00 mingetty
4 S
3365
82
00:00:00 mingetty
4 S
3366
82
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
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
635/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
636/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
KILL
kill-unitava proces
SYNOPSIS
kill [ -s signal | -p ] [ -a ] pid ...
kill -l [ signal ]
Kill alje odreeni signal specificiranom procesu.Ukoliko nijedan signal nije
odreen,alje se TERM signal.Root moe unititi skoro bilo koji proces na sustavu.Nije
mogue poslati signal init procesu,jer nema ugraen signal handler.Da unitimo proces koji je
u naem vlasnitvu proslijeujemo naredbu kill i PID procesa.
Npr.
martyp $ ps -ef | grep martyp
martyp 19336 19334 0 05:24:32 pts/4 0:01 -ksh
martyp 19426 19336 0 06:01:01 pts/4 0:00 grep martyp
martyp 19424 19336 5 06:00:48 pts/4 0:01 find / -name .login
martyp $ kill 19424
martyp $ ps -ef | grep martyp
martyp 19336 19334 0 05:24:32 pts/4 0:01 -ksh
martyp 19428 19336 1 06:01:17 pts/4 0:00 grep martyp
[1] + Terminated
martyp $
U primjeru je najprije izvrena ps naredba da bi se izlistali svi procesi iji je vlasnik
martyp,zatim je izvreno unitavanje procesa te provjera da je proces nestao s popisa.
637/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Krunoslav Zeman
Signali
638/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
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
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
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.
.
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
649/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
651/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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);
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
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
654/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
656/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
658/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
SIGXCPU
24,24,30
CORE
SIGXZSZ
25,25,31
CORE
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
SIGWINCH
28,28,20
IGN
Window resize
signal
SIGUNUSED
-,31,-
TERM
Nekoriteni signal
660/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Igor opec
FORK PROCESI
662/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
663/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
664/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
665/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
ODREIVANJE INFORMACIJE O
TRENUTNIM PROCESIMA
Kako shell ljuska operativnog sustava izvrava naredbe?
- svaki puta kada se izda naredba u shell-u, UNIX stvara novi proces i
suspendira
trenutni proces sve dok novonastali proces nije gotov(osim u sluaju pozadinskih procesa)
- kao to smo i rekli, svaki proces je oznaen svojim PID-om(procesov identifikacijski
broj), koji mu je dodijeljen pri njegovom stvaranju, pa zato kada se elimo obratiti pojedinom
procesu obraamo mu se preko njegovog identifikacijskog broja
redoslijed:
1) eka na korisnika da izda naredbu
2) izvri odreeni broj radnji ako naredba sadri bilo kakve specijalne znakove
3) nae izvrnu (''executable'') datoteku za dotinu naredbu, a u sluaju da ju ne nae,
generira pogreku
4) napravi se novi child proces (tj. izvri se fork operacija nad procesom), koji e
izvriti naredbu
5) eka dok se naredba ne izvri (child proces se terminira) i vraa se na poetak
primjer iz konzole - stanja procesa:
upiemo li naredbu ps x u konzoli trebali bismo dobiti popis trenutno aktivnih
procesa i njihove podatke
PID TT STAT TIME COMMAND
6799 co IW
6823 co IW
0:12 X :0
6836 co I
0:01 twm
6837 co I
6841 p0 I
6840 p1 I
6842 p2 S
6847 p2 R
0:00 ps -x
666/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
PID
TT
STAT
TIME
primjer programa:
/**************************************************************/
/*
*/
*/
*/
/**************************************************************/
#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
sleep(1);
}
}
/**************************************************************/
int main(void)
{ int pid, cid;
668/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
669/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
671/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Matija upen
SOCKETS
UNIX DOMAIN, NETWORK
672/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
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
674/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
NETWORKING
Uvod
Linux kernel podrava mnogo razliitih mrenih arhitektura (TCP/IP je samo jedna od
njih), sa nekoliko implementiranih alternativnih algoritama za razvrstavanje mrenih paketa,
ukljuujui i programe koji olakavaju sistemskim administratorima postaviti router,
gateway, firewall, pa ak i jednostavan World Wide Web server, direktno na nivou kernela.
Trenutni kd, inspiriran sa originalnom Berkley Unix implementacijom, je Net-4. Kako
i samo ime govori, ovo je etvrta glavna verzija Linux networkinga. Slino kao i VFS, kd
koristi objekte za provedbu sukladnog interfacea do velikog broja dostupnih arhitektura.
Suprotno od VFS-a, networking kd je organiziran u slojeve (layers), gdje svaki od njih ima
vrlo dobro definiran interface. Poto podaci poslani mreom nisu ponovo upotrebljivi, nema
potreba za spremanjem u cache. Potrebom za to veom isplativou, Linux izbjegava
kopiranje podataka unutar slojeva. Originalni podaci su spremljeni u memory buffer, koji je
dovoljno velik da sadri informacije potrebne svakom sloju.
Mrene arhitekture
Mrena arhitektura opisuje kako je pojedina kompjuterska mrea napravljena.
Arhitektura definira grupu slojeva gdje bi svaki trebao imati vrlo dobro definiranu namjenu.
Programi u svakom sloju komuniciraju koristei razmjenjive skupove pravila i konvencija
(tzv. protokol).
Generalno gledajui, Linux podrava veliki broj razliitih mrenih arhitektura. Neke od
njih su:
name
PF_APPLETALK
Appletalk
PF_BLUETOOTH
Bluetooth
PF_BRIDGE
Multiprotocol bridge
PF_DECnet
DECnet
PF_INET
676/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
PF_INET6
PF_IPX
Novell IPX
PF_LOCAL, PF_UNIX
PF_PACKET
PF_X.25
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
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
connect
socketpair
accept
getname
ioctl
implementira ioctl()komande
listen
shutdown
setsockopt
getsockopt
sendmsg
recvmsg
mmap
sendpage
678/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
connect
disconnect
accept
ioct1
implementira ioctl()komande
init
destroy
shutdown
setsockopt
getsockopt
sendmsg
recvmsg
bind
backlog_rcv
hash
unhash
get_port
679/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
682/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
684/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
685/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
686/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
#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
{
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
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
Saa Dragi
TCP/IP
691/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
692/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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...
694/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
695/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
17
UDP
41
IPv6
47
50
51
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.
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
polje od 2 bytea koje definira socket na koji se alje TCP segment, tj. definira
koja aplikacija na application layeru prima segment, source socket zajedno sa ip adresom
jedinstveno definira mjesto sa kojeg je segment poslan
Sequence number
o polje od 4 bytea, redni broj poetnog okteta segmenta
Acknowledgment numberpolje od 4 bytea, broj slijedeeg okteta korisnikove
poruke, ujedno i kumulativna potvrda
Data Offset
o polje od 4 bytea, oznaava poetak podataka u paketu, ujedno oznaava
veliinu TCP headera
Reserved
o 6 bitova rezerviranih za buduu uporabu, postavljeno na 0
Flags
o 6 bitova koje oznaavaju TCP flagove: URG, ACK,PSH, RST, SYN, FIN
Window
o polje od 2 bytea, govori koliko velik buffer poiljatelj poruke ima za primanje
poruka. TCP/IP stack drugog sudionika treba slati pakete velike maksimalno
do veliine prozora. Ako je poslana 0, poruke se dalje ne alju, sve dok se ne
poalje nova poruka sa vrijednosti veom od 0.
Urgent pointer
o polje od 2 bytea, govori lokaciju hitnih podataka u segmentu
Options
o proizvoljne opcije koje se dodaju TCP headeru u paketima od 4 btyea
Poznatiji TCP portovi:
19
20
21
23
Telnet Server
25
69
80
139
700/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
339
445
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
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
68
69
TFTP
137
138
161
445
520
RIP
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
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
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
705/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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.
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
0
0
UG
0
0
0 eth0
0 eth0
0 lo
0 eth0
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
127.0.0.1
127.0.0.1
20
1
141.29.127.160 255.255.255.255
127.0.0.1
20
127.0.0.1
20
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
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
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
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
710/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
((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
715/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
sendto(socket_descriptor, buf,
sizeof(buf), 0, (struct sockaddr *)&address, sizeof(address));
iter++;
} while (process);
}
716/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
717/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
TCP/IP API
718/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Uvod
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.
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
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.
720/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
OSI Model
Application
Presentation
Session
TCP/IP Model
Transport
Application
Network
Transport
Data link
Internet
Physical
Network interface
Application byte
stream
TCP
segment
IP
datagram
Network-level
packet
721/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Networking na Linuxu
Linux kernel podrava mnogo razliitih mrenih arhitektura (TCP/IP je samo jedna od
njih), s nekoliko implementiranih alternativnih algoritama za razvrstavanje mrenih paketa,
ukljuujui i programe koji olakavaju sistemskim administratorima postaviti router,
gateway, firewall, pa ak i jednostavan World Wide Web server, direktno na nivou kernela.
Trenutni kd Net-4 je inspiriran orginalnom Berkley Unix implementacijom. Kako i
samo ime govori, ovo je etvrta verzija Linux networkinga. Networking kd je organiziran u
slojeve (layers), gdje svaki od njih ima vrlo dobro definiran interface. Poto podaci poslani
mreom nisu ponovo upotrebljivi, nema potreba za spremanjem u cache. Linux izbjegava
kopiranje podataka unutar slojeva. Originalni podaci su spremljeni u memoriju (memory
buffer), koji je dovoljno velik da sadri informacije potrebne svakom sloju.
Mrene arhitekture
Mrena arhitektura opisuje kako je pojedina raunalna mrea napravljena. Arhitektura
definira grupu slojeva gdje bi svaki trebao imati vrlo dobro definiranu namjenu. Programi u
svakom sloju komuniciraju koristei razmjenjive skupove pravila i konvencija (tzv. protokol).
Generalno gledajui, Linux podrava veliki broj razliitih mrenih arhitektura.
Neke od njih su:
name
PF_APPLETALK
Appletalk
PF_BLUETOOTH
Bluetooth
PF_BRIDGE
Multiprotocol bridge
PF_DECnet
DECnet
PF_INET
PF_INET6
PF_IPX
Novell IPX
PF_LOCAL, PF_UNIX
PF_PACKET
PF_X.25
X25
nazvana TCP/IP
722/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
sloja (MAC) i Logical Link Control sloja (LLC) kako je prikazano na slici.
LLC sublayer
Data link
layer
MAC sublayer
723/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
4 bit
IP Header length
4 bit
Type of service
8 bit
Kvaliteta veze
Total length
2 byte
Identification
2 byte
Flags
3 bit
724/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Fragment offset
13 bit
Time to live
1 byte
Protocol
1 byte
Header checksum
2 byte
Source address
4 byte
Destination address
4 byte
Options
and
Padding
djeljiva sa 32
Version
Priority
Flow label
Payload length
16
24
Next header
Hop limit
31
Source address
40 byte
Destination address
725/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
10
Source port
16
31
Destination port
Sequence number
20 byte
Acknowledgment number
Header lenght
Unused
Checksum
Flags
Window
Urgent pointer
Options + Padding
2 byte
Destination port
2 byte
Sequence number
4 byte
Acknowledgment
4 byte
Data offset
4 byte
Reserved
6 bit
Flags
6 bit
Window
2 byte
number
726/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Urgent pointer
2 byte
Options
FTP-data
21
22
23
Telnet
25
80
110
119
143
194
389
727/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
8 byte
Bit:
16
Source port
Destination port
Segment length
Checksum
31
2 byte
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
Checksum
2 byte
67
BOOTP client
68
728/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
69
137
138
161
119
520
1812, 1813
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
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
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
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
731/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
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
klijent
...
klijent
server
...
klijent
735/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Ethernet
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
klijent
application
server
application
host with
TCP/IP
host with
TCP/IP
LAN
LAN
router
router
WAN
router
router
router
router
737/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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)
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
klijent
server
FIN M
close
(active close)
(passive close)
read return 0
ack M + 1
FIN N
close
ack N+1
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
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
connect
socketpair
accept
getname
ioctl
implementira ioctl()komande
listen
shutdown
setsockopt
getsockopt
sendmsg
recvmsg
mmap
sendpage
741/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
disconnect
accept
ioct1
implementira ioctl()komande
init
destroy
shutdown
setsockopt
getsockopt
sendmsg
recvmsg
bind
backlog_rcv
hash
unhash
get_port
742/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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:
-
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
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
socket buffer
744/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
746/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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];
/*
/*
/*
/*
/*
/*
/*
};
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];
747/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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));
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
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
748/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
- kreiranje socket-a
close
- unitavanje socket-a
connect
bind
listen
accept
#include <sys/socket.h>
int socket (int family, int type, int protocol);
Returns: nonnegative descriptor if OK, -1 on error
family
type
protocol
- protokol
Description
AF_INET
IPv4 protocols
AF_INET6
IPv6 protocols
AF_LOCAL
749/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
AF_ROUTE
Routing sockets
AF_KEY
Key sockets
Description
SOCK_STREAM
stream socket
SOCK_DGRAM
datagram socket
SOCK_RAW
raw socket
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
750/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
listen funkcija
listen funkciju zove jedino server i izvrava dvije akcije:
listen funkcije se uobiejeno zove nakon oba poziva socket i bind funkcija i mora biti
752/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
server
accept
3WHS
complete
TCP
arriving
SYN
klijent
connect called
server
SYN J
create entry on incomplete queue
RTT
RTT
connect returns
ack K+1
entry moved from
incomplete queue to
completed queue,
accept can return
753/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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>
754/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
close funkcija
close funkcija se koristi da bi se zatvorila i terminirala TCP veza.
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>
755/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
<stdio.h>
<sys/types.h>
<sys/socket.h>
<netinet/in.h>
<unistd.h>
<string.h>
756/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
<stdio.h>
<sys/types.h>
<sys/socket.h>
<netinet/in.h>
<unistd.h>
<string.h>
<time.h>
757/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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 */
759/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
}
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;
}
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().
760/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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[]);
761/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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>
762/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
{
printf("bind() error!\n");
return 2;
}
/* oslukivanje konekcije */
if (listen(sockfd, 2) == -1)
{
printf("listen() error!\n");
return 3;
}
/* 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;
}
763/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
764/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
//
765/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
766/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
767/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
#include
#include
#include
#include
#include
#include
#include
*/
<stdio.h>
<stdlib.h>
<string.h>
<sys/types.h>
<netinet/in.h>
<netdb.h>
<sys/socket.h>
769/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
printf("Error in recvfrom\n");
return EXIT_FAILURE;
}
data);
shutdown(sockfd,2);
return EXIT_SUCCESS;
}
Server:
/*
#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>
770/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
signal(SIGTERM, inthandler);
}
my_addr.sin_family = AF_INET;
my_addr.sin_addr.s_addr = INADDR_ANY;
my_addr.sin_port = htons(1092);
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
<stdio.h>
<stdlib.h>
<string.h>
<sys/socket.h>
<sys/un.h>
<unistd.h>
772/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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>
773/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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);
//
//
//
//
774/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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);
}
775/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Majk Jednakovi
UDP
USER DATAGRAM PROTOCOL
776/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
777/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
Transportni:
Talnet-udaljeni terminal
TCP-Transportni protokol
file copy)
rsh-udaljeno procesiranje(remonte shell)
Mreni:
IP-Internet Protokol
ICMP-protokol za kontrolu
Protocol)
ARP-adresni protokol(Addres
RTP-prijenos u realnom vremenu(Real time
Rezolution Protocol)
Transfer Protocol)
RIP-usmjerivaki protokol
Name System)
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
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.
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
782/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
783/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
784/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
char
};
--------------------------------------------------------------------------meutim zbog jednostavnijeg koritenje razvijena je struktura:
---------------------------------------------------------------------------------------------------------struct sockaddr_in {
short int
sin_addr;
// Internet address
unsigned char
};
---------------------------------------------------------------------------------------------------------(Napomena: sin_zero element strukture slui da bi ova struktura imala istu veliinu kao
i struktura struct_sockaddr. sockaddr_in je izvedeno zbog lakeg rukovanja.). Pokaziva na
ovu strukturu moe se castati u struct sockaddr* i obrnuto.
struct in_addr je struktura sa samo jednim lanom (unsigned long s_addr).U sluaju
klijenta ovo polje sadri adresu raunala kojem se pristupa i na kojem se oekuje posluitelj,
dok kod servera ovo polje sadri adresu suelja na koje se vee server. U sluaju da elimo da
server prima pakete na sva suelja koristi se konstanta INADDR_ANY.
lanovi strukure sin_port i sin_addr moraju imati vrijednost u network-byte orderu, pa
se koriste funkcije:
The htonl() function converts the long integer hostlong
from host byte order to network byte order.
The htons() function converts the short integer hostshort
from host byte order to network byte order.
The ntohl() function converts the long integer netlong
from network byte order to host byte order.
The ntohs() function converts the short integer netshort
from network byte order to host byte order.
785/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
#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
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);
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
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);
#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
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]
Kod
greke
se
stavlja
h_errno
(herror().funkcija).
Neke
bitnije
su:
791/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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;
=> 'tcp',
794/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Listen
=> SOMAXCONN,
Reuse
=> 1);
# 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
Boris Ivanievi
796/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
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.
801/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
list.c
-rw-r--r-- 2 boris
stack.c
drwxr-xr-x 2 boris
blah
Slika 2.5.1.
Za ovo poglavlje je bitna prva kolona. Ona sadrava informacije o vrsti filea (prvi znak)
i kontrole pristupa fileu. Dalje idu oznake pristupa fileu ownera (vlasnika), grupe, i ostalih
korisnika. Svakom su pridodjeljena tri znaka. Prvi od tri znaka oznaava mogunost itanja
(read) filea (oznaka r). Drugi oznaava mogunost modifikacije (write, oznaka w), dok
zadnji znak daje pravo izvravanja (execution) filea. Kod sva tri znaka oznaka znai
zabranu odreene operacije pojedinom korisniku.
802/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
804/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
lpr
Koristi se za ispis filea na printer.
Izgled: lpr file
Primjer: lpr blablah.h printa sadraj filea blabla.h
805/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
rmdir
Koristi se za brisanje direktorija.
Izgled: rmdir direktorij
Primjer: rmdir mhm brie direktorij mhm
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
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...)
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
808/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Tipovi podataka
Za potrebe programiranja dostupni su nam tipovi podataka u unix okruenju. Oni su
definirani u <sys/types.h> datoteci. To su:
blkcnt_t
blksize_t
dev_t
gid_t
ino_t
mode_t
uid_t
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> */
/* <sys/stat.h> */
/* <unistd.h> */
/* <sys/stat.h> */
/* <sys/stat.h> */
Funkcija symlink kreira symbolic link imena path2 koji pokazuje na file imena path1.
Funkcijom unlink uklanjamo link. Ukoliko smo uklonili symbolic link brie se file, a ukoliko
smo uklonili hard link onda se umanjuje link counter inodea. Funkcije mkdir odnosno rmdir
su identine istoimenim unix komandama. Funkcijom chmod mijenjamo modove odreenog
filea. Sve navedene funkcije vraaju 0 ukoliko je operacija prola u redu, a u sluaju greke
vraaju -1. I na kraju funkcija umask postavlja u trenutnom procesu postavke umaska (u
umasku su upisani default modovi koji e se koristiti pri kreiranju fileova). Vraa dosadanju
vrijednost umaska.
809/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Stat struktura
Za dobivanje temeljnih informacija o fileu koristimo stat strukturu. Da bi nam ona bila
dostupna unutar koda trebamo ukljuiti (includati) <sys/types.h> i <sys/stat.h> header
fileove.
struct stat {
dev_t st_dev;
ino_t st_ino;
mode_t st_mode;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
dev_t st_rdev;
off_t st_size;
time_t st_atime;
time_t st_mtime;
time_t st_ctime;
};
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
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
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
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
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
Jurica Boikovi
INETD I TCPD
815/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
816/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
stream tcp
( ftp
stream tcp
817/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
stream tcp
( ftp
stream tcp
nowait root
nowait root
/usr/sbin/tcpd /usr/sbin/in.ftpd
/usr/sbin/tcpd /usr/sbin/in.wuftpd)
Naredbe
Omoguene su sljedee opcije:
inetd -d
pokree debugger
inetd l
inetd w
inetd W
inetd c maximum
inetd c rate
inetd R rate
inetd s maximum
inetd a
inetd p
818/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
= 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
}
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
= no
#}
service xadmin
{
type
= INTERNAL
socket_type = stream
protocol
= tcp
user
= root
wait
= no
port
= 7000
822/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
823/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
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
HOSTS_ACCESS (5)
825/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Goran Vlahovi
INTERNET SERVICES
827/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
829/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
organizacijama. Npr. InterNIC, koji dri domenu .edu, moe dodijeliti pravo domene
berkeley.edu fakultetu U.C. Berkeley.
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
Organizations
.int
1998
ne
established by
international treaties
Authority
between governments
.mil
1995
da
.museum 2001
da
Museums
.name
ne
2001
For registration by
individuals
Unrestricted (but
.net
1995
ne
VeriSign, Inc.
providers, etc.)
.org
1995
ne
Unrestricted (but
intended for
organizations that do
Registry Services.
Accountants, lawyers,
.pro
2002
ne
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
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
Organizacija
198.41.0.4
192.228.79.201
Cogent Communications
192.33.4.12
University of Maryland
128.8.10.90
192.5.5.241
192.112.36.4
128.63.2.53
Autonomica/NORDUnet
VeriSign
servers.net
Center
servers.net
i.rootservers.net
j.rootservers.net
k.root-
servers.net
Coordination Centre
l.root-
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
London, United
Kingdom
Marina del Rey, CA,
USA
Tokyo, Japan
834/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
close
quit
set
send
display
status
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
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
839/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
ftp> help
Dobijemo otprilike ovakav popis:
debug
Mget
pwd
status
dir
Mkdir
quit
struct
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
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
Ovo su neke vanije naredbe koje bi trebale sve varijante ftp-a na UNIX raunalima
podravati:
Close
Quit
binary
ascii
put
mput
get
mget
cd
cd ..
ls
pwd
mkdir
rmdir
mv
rm
rm
Izlazak u shell.
Osim prijenosa datoteka, vrlo vana Internet usluga je elektronika pota ili email.
842/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
843/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
MIME
PEM
Sintaksa
Funkcija
Hello
HELO <sending-host>
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>
Expand
EXPN <string>
Help
HELP [string]
Quit
QUIT
845/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Funkcija
USER username
PASS password
Korisnikova lozinka
STAT
RETR n
846/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
DELE n
LAST
LIST [n]
RSET
TOP n l
NOOP
Ne radi nita
QUIT
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
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
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
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
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>
body <message-id>
group newsgroup
head <message-id>
Help
ihave <message-id>
last
list
listgroup
next
post
Quit
slave
stat
851/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Header
Opis
Obavezno Opcionalno
approved
Za moderiranu newsgroup-u
control
date
distribution
Doseg poruke.
expires
followup-to
from
keywords
lines
message-id
Jedinstveni ID poruke.
newsgroups
organization
Opis organizacije
path
references
reply-to
Odgovor autoru.
sender
subject
Tema poruke.
summary
Kratki saetak.
xref
Ime host-a
X
X
853/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
comp.unix.solaris
bi
bila
spremljena
datoteci
var/spool/news/comp/unix/solaris/1047.
854/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
soc.
talk.
855/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
Dario Dugi
RPC
(remote procedure call)
858/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
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
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
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
861/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
862/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
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
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
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>
865/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
866/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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);
}
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:
867/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
*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.
868/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
#include <rpc/rpc.h>
#include "simple.h"
bool_t
{
if ( !xdr_int ( xdrsp, &simplep -> a ))
return (FALSE);
if ( !xdr_short (xdrsp, &simplep -> b ))
return (FALSE);
return (TRUE);
}
869/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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;
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
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);
}
871/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
strcpy (dir,argv[1]);
read_dir(dir);
printf("%s\n", dir);
exit(0);
}
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:
872/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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:
DIR_SIZE 8192
DIRPROG ((u_long) 0x20000001)
DRIVERS ((u_long) 1)
READDIR ((u_long) 1)
Djeljenje podataka
Ve smo prije napomenuli da podacima moemo prosljediti stringove. Moramo definirati
XDR filtersku rutinu xdr_dir() koja djeli podatke.
To je jednostavno i definirano je preko standardne xdr_string() rutine.
XDR datoteka rls_xdr.c izgleda ovako:
#include<rpc/rpc.h>
#include "rls.h"
bool_t xdr_dir(XDR *xdrs, char *objp)
873/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
{
return (xdr_string(xdrs, &objp, DIR_SIZE));
}
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
#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);
}
875/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Zvonimir Jankovi
RLOGIN RSH
876/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
879/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
880/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
primjeri:
% rlogin ban.junis
% rlogin melmack
% rlogin afrodita.rcub.zg.ac.hr
% rlogin afrodita.rcub.zg
% rlogin zmaj.eecs.wsu.edu
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
cd path
lcd dir
ascii, bin
put
file_name
get
file_name
mget
Slino kao i get samo sto file_name u ovom sluaju moe da sadri univerzalne
file_name
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
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
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
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
Marija Bili
SAMBA I NFS
886/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
888/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
889/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
890/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
891/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
892/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
# cd /etc/init.d
# ./smb restart
ili
# /etc/init.d/smb restart
895/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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:
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
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
898/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
899/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
900/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
901/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
/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.
902/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
192.168.0.0/255.255.255.0(ro)
/home 192.168.0.0/255.255.255.0(rw)
@student(ro)
/home @student(rw)
Mrena grupa u ovom primjeru ima ime student.
903/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
904/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
909/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
910/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
911/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
913/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
914/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
Jakov Mihaljevi
X WINDOW SYSTEM
917/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
UVOD
918/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
921/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
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
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.
923/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
924/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Adriana Mihinec
Domagoj vagelj
KDE
926/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
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
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
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
932/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
933/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
934/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
936/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
937/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
938/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
941/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
{
Q_OBJECT
public:
MyClass();
~MyClass();
ASYNC myAsynchronousMethod(Qstring someParameter);
Qrect mySynchronousMethod();
};
942/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
945/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Task suitable: Ne smije pruati previe funkcija jer e zbuniti korisnika ili e
naruiti funkcionalnost samog software-a
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
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
949/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
951/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
952/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
955/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
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
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,
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
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
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
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
965/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
966/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
967/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
968/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
969/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Marina Petrovska
970/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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.
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
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
980/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
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
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.
983/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
984/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
985/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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).
986/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
987/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
989/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
992/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
DNS I DHCP
996/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
997
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
.org
.int
Meunarodne organizacije
998
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
999
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
#
# 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 "3.5.10.in-addr.arpa." {
type master;
file "private.rev";
};
zone "0.0.127.in-addr.arpa." {
type master;
file "private.local";
};
1000
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
/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
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
/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
; 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
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
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
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).
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.
1004
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
/var/named/private.local datoteka:
Ova datoteka doputa obrnutu pretragu za localhost adresu. Ova datoteka nije nuna.
Primjer private.local datoteke:
;
;
;
;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.
1005
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
DHCP
1006
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
DHCP jezik:
DHCP server i DHCP client se sporazumiju sljedeim porukama:
DHCPREQUEST
DHCPACK
DHCPNAK
DHCPDECLINE
1008
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Discarded
1009
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Numerini
domain-name
Tekst
Lista IP adresa
domain-nameservers
fixed-address
group
hardware
Lista IP adresa
N/A
Tekst,adrese: oktete
Host
N/A
host-name
Tekst
max-lease-time
netbios-nameservers
range
Numerini
Lista IP adresa
routers
Lista IP adresa
shared-network
N/A
subnet
N/A
subnet-mask
IP adresa
1010
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1011
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1012
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Start i end oznaavaju razdoblje u kojemu posudba vrijedi, svaki unos je oblika:
weekday yyyy/mm/dd hh:mm:ss;
Konfiguracija client-a
1013
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
"
1014
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Dario Benko
INTERNET HISTORY
1016/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
UVOD
1017/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1018/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1019/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Slika 1.
1020/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
1022/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1026/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
2005.god.
???
1029/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
1031/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
Amir Kos
Uvod u Perl
1033/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
1034/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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!
# pet karaktera: h, e, l, l, o
# prazan string
'silly\\me' # silly\me
'hello\n' # hello +backslash + n
1035/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
'hello
there'
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.
"c:\\temp"
Izraz
Znaenje
\n
Nova linija
\r
Return
\t
Tab
\f
Formfeed
\b
Mjesto unazad(Bckspace)
\v
vertikalni tab
\a
Bell
\e
Escape
\007
\x7f
\cC
1036/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Izraz
Znaenje
\\
Backslash
\"
Dvostruki navodnici
\l
\L
Sve malo do \E
\u
\U
\Q
\E
Terminira \L , \U or \Q
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"
1037/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Operator za brojeve
Perl podrava tipian set operatora kao i drugim jezicima:
2+3
# 2 plus 3, ili 5
# 3 puta 12 = 36
2**3
#Fortran 2*2*2=8
Logiki operatori su
Usporedba
numeriki String
jednako
==
eq
Ne jednako
!=
ne
Manje od
<
lt
Vee od
>
gt
le
ge
>=
Operator za stringove
Stringovi se mogu konkatenirati sa . operatorom
"hello" . "world"
# "helloworld"
1038/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Comparison
Numeric
String
jednako
==
eq
Ne jednako
!=
Ne
Manje od
<
Lt
Vee od
>
gt
<=
le
>=
ge
"fred" x 3
# rezultat "fredfredfred"
# 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
Asocijativnost
Operator
Left
Left
Nonassociative
++ -- (autoincrement, autodecrement)
Right
** (potenciranje)
Right
Left
Left
* / % x (mnoenje,djeljenje,mod,string repetition)
Left
+ - . (plus,minus,konkateniranje)
Left
Nonassociative
Nonassociative
Nonassociative
Left
Left
Left
Left
|| (logiki or)
Nonassociative
1040/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Asocijativnost
Operator
Right
Right
Left
Nonassociative
Right
Left
Left
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.
# dodaj na $a vrijednost 17
$d = ($c = 5);
$d = $c = 5;
1041/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
$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 .= " ";
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
1042/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
$a=5.3;
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
1043/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
zamijene
da bi sprijeili supstituciju ili varijablu stavite u jednostruke navodnike ili prije $ stavite \ koji
ponitava specijalno znaenje $
$fred = 'hi';
$barney = "a test of " . '$fred';#$barney = 'a test of $fred'
$barney2 = "a test of \$fred"; # ista stvar
Ime varijable e biti najdue mogue ime varijable koje ima smisla kao dio stringa,to moe biti problem ukoliko
elite poslije zamijenjene vrijednosti nastaviti sa nekim konstantnim tekstom,perl skenira imena varijabli,te bi
mogao protumaiti te karaktere kao ime a to ne elite u tu svrhu vam prua delimiter za imena
varijabli,jednostavno zatvorite ime varijable u {} ili koristite operator konkatenacije.
$fred = "pay"; $fredday = "wrong!";
$barney = "It's $fredday";
$barney = "\LBARNEY";
$capbarney = "\u\LBARNEY";
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
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)
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
($a, 17)
# 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)
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)
# 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
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);
($a,$b,$c) = (1,2,3);
($a,$b) = ($b,$a);
# zamjeni $a i $b
1047/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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;
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
# $c=8
$fred[2]++;
$fred[1] += 6;
# @fred=(11,9,9)
# isto to i ($fred[0],$fred[1])
@fred[0,1] = @fred[1,0]
@fred[1,2] = (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];
# $c = 8
# prints "dino"
print $#fred;
# prints 3
1049/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
unshift(@fred,$a);
# l @fred = ($a,@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);
1050/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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)
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
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.
1053/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
KONTROLNE STRUKTURE
Izraz koji prelazi jednu liniju moe se staviti u {} inei tako blok izraz
{
prvi_izraz;
drugi_izraz;
treci_izraz;
last_statement;
}
Blok izraz se prihvaa i kada se u izrazu nalazi samo jedna naredba,ali ne vrijedi obrnuto.Zadnji ; u blok naredbi
je opcionalan.
If / unless izraz
if (some_expression) {
true_statement_1;
true_statement_2;
true_statement_3;
} else {
false_statement_1;
false_statement_2;
false_statement_3;
}
Perl izraunava izraz u zagradi i ukoliko je to istina(kontroni izraz se pretvara u string i
ukoliko je njegova vrijednost 0 ili prazan string onda je false bilo sto drugo je automatski
istina) izvrava se prvi blok naredbi,ako je pak la slijedi dio koji se nalazi iza else,evo
nekoliko primjera:
0
1-1
""
"1"
# = true
"00" # nije "" ili "0", = true (ova je udna stoga paziii)
"0.000" # =true (isto ko i gore);
1055/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
ili
print " koliko ima godina\n ";
$a = <STDIN>;
chomp($a);
unless ($a < 18) {
print " Dovoljno star idi glasati!\n ";
}
While\untill izraz
while (some_expression) {
statement_1;
statement_2;
statement_3;
1056/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
}
evo jednog primjera maltertiranja korisnika:
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
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>);
for izraz
for ( initial_exp; test_exp; re-init_exp ) {
statement_1;
statement_2;
statement_3;
}
for ($i = 1; $i <= 10; $i++) {
print "$i ";
}
foreach izraz
1058/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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;
}
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>) {
if (/^$/) {
last;
# blank line?
# if so, don't check any more lines
}
}
# end while
1059/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
}
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
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: /;
}
that if this;
# another way
1061/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1062/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
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
Values Funkcija
Values funkcija ispisuje vrijednosti u hashu,na isti nain kao i funkcija keys
%lastname = ();
$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
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
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
1065/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
<> 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
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
%s
String
%d
%u
%o
%x
%e
%f
%g
1067/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
1068/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
\d (a digit)
[0-9]
\D (digits, not!)
[^0-9]
\W (words, not!)
[^a-zA-Z0-9_]
\S (space, not!)
[^ \r\t\n\f]
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
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
1069/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
prioriteti
Name
Representation
Parentheses
( ) (?: )
Multipliers
? + * {m,n} ?? +? *? {m,n}
(abc)*
^x|y
^(x|y)
a|bc|d
# a, or bc, or d
(a|b)(c|d)
PERL Practical Extraction and Report Language koristi regularne izraze kao svoje jako
mono oruje
Modifiers:
Modifier Meaning
i
1070/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Modifier Meaning
m
Treat string as single line (^ and $ ignore \n, but . matches \n).
Quatifiers
Maximal Minimal Allowed Range
{n,m}
{n,m}?
{n,}
{n,}?
{n}
{n}?
*?
+?
??
Asertiranje
Assertion Meaning
^
\b
\B
\A
\Z
\G
=~ 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/;
# true
$a =~ /(.)\l/;
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";
}
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
1072/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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";
}
1073/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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"
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
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
$line = "c:/;c:/windows;c:/windows/system;";
($first, $second, $third, $fourth) =
1075/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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";
}
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;
}
Argumenti
1076/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
foreach $_ (@_) {
$sum += $_; # add each element}
return $sum;
}
$a = add(4,5,6);
print add(1..5);
($n,@values) = @_;
# is it eligible?
push(@result,$_); # add it
}
}
@result;
1077/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
}
# some invocations:
@new = bigger_than(100,@list);
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
@c = sort @b;
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
1079/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
1080/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Recimo da elite provijeriti da li neki file postoji u datom direktoriju koristite e amir.txt
if (-e "amir.txt" && -e "car.cgi") {
print "You have both styles of index files here.\n";
}
Tablica File testova i njena znaenja
File Test Meaning
-r
-w
-e
-x
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
-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
-A
-C
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
Description
dev
ino
mode
nlink
Number of links to file (usually one for Win32 systems - NTFS filesystems may have a value
greater than one)
uid
gid
rdev
size
atime
mtime
ctime
1082/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1083/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
FORMATI
PERL Practical Extraction and Report Language ==FORMATI
$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
}
, OR 97005
|
|
===============================
===============================
| Fred Flintstone
| Bedrock
, OZ 999bc
===============================
1084/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Text polja
@<<<<< # pet karaktera poravnanih u lijevo
@>>>>> # pet karaktera poravnanih u desno
@|||||
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
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
select (LOGFILE);
# re-select STDOUT
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
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
1089/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Tamara Krutman
Ante Penava
PERL
Practical Extraction And Report Language
1090/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
Nakon toga slijedi proces kompajliranja koji se najee izvodi slijedeim naredbama u ljusci:
$ cd stable
$ ./configure
$ make
1093/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
1094/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1095/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1096/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1097/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Installing C:\perl\bin\dbs_dumptabstruct
Installing C:\perl\bin\dbs_dumptabstruct.bat
Installing C:\perl\bin\dbs_empty
Installing C:\perl\bin\dbs_empty.bat
Installing C:\perl\bin\dbs_printtab
Installing C:\perl\bin\dbs_printtab.bat
Installing C:\perl\bin\dbs_update
Installing C:\perl\bin\dbs_update.bat
Writing C:\perl\site\lib\auto\DBIx\Easy\.packlist
ppm>
1098/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
1100/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
> 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
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
1103/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
1105/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
1107/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
1110/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1111/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
1113/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1115/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
1117/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
1118/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
DODACI
U dodacima smo priloili izgled instalacije i primjere nekih od mnogobrojnih skripti.
1121/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1122/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1123/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1124/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1125/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1126/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1127/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
$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
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
}
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\"> $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
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
1133/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1134/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
print end_html;
1135/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1136/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
$im->transparent($white);
$im->interlaced('true');
# Put a black frame around the picture
$im->rectangle(0,0,99,99,$black);
# Draw a blue oval
$im->arc(50,50,95,75,0,360,$blue);
# And fill it with red
$im->fill(50,50,$red);
# make sure we are writing to a binary stream
binmode STDOUT;
# Convert the image to PNG and print it on standard output
print $im->png;
1137/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Ana Babi
PYTHON
1138/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
podrava
proceduralno
objektno
orijentirano
programiranje.
Kod
1140/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
1142/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1143/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
Operatori
Standardni operatori funkcioniraju u Python-u kao i u bilo kojem drugom programskom
jeziku.
+
**
<=
>
>=
==
!= <>
<
4)
and
(2
==
4)
1147/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
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
1153/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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]
):
1156/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
# server ime
# slobodni port koji koristi 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:]
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
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
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
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 modul atributi
# C funkcijski objekt
1161/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
1166/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
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
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
Marijan Poljak
INTERPRETERI TCL/TK
1173/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
1174/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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 :
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
array
break
izlaz iz petlje
catch
hvatanje greki
cd
close
concat
continue
error
prijavljuje greku
eof
provjerava end-of-file.
eval
exec
exit
terminira proces
expr
file
for
stvaranje petlje
foreach
format
gets
glob
global
history
if
naredba uvjeta
incr
1177/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
info
join
lappend
lindex
linsert
list
llength
lrange
lreplace
lsearch
lsort
sortiranje niza
open
pid
vraa process ID
proc
puts
pwd
read
regexp
regsub
rename
return
scan
set
source
split
string
switch
grananje u programu
time
trace
nadzire varijable
unknown
unset
brisanje varijabli
uplevel
upvar
1178/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
while
konstrukcija petlje
Tcl Varijable
Naredba set koristi se za pridjeljivanje vrijednosti varijablama. Naredba uzima dva
argumenta: prvi je ime varijable a drugi je vrijednost varijable. Varijable mogu biti bilo koje
duine, razlikuju se velika i mala slova. Nije potrebno deklarirati Tcl varijable prije njihove
upotrebe. Interpreter kreira varijablu kada joj se prvi puta dodijeli vrijednost. Vrijednost
varijable dohvaa se kasnije sintaksnim znakom $ .
Primjer:
set var 5
=> 5
set b $var
=> 5
Druga set naredba u primjeru pridjeljuje varijabli b, vrijednost varijable var. Upotreba znaka $
ujedno je i prvi primjer supstitucije. Varijabla se moe obrisati koritenjem naredbe unset:
unset
imevar
imevar2...
Bilo koji broj imena varijabli moe se prenesti unset naredbi. Unset e prijaviti greku ako
varijabla nije definirana.
Varijable se dijele u tri kategorije: local, global, visible.
Postojanje varijable moe se testirati naredbom info exists.
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
expr 7.2 / 3
=> 2.4
Naredba expr uzima sve argumente, spaja ih u jedan string, zatim predstavlja string kao
matematiki izraz. Nakon to izrauna rjeenje, ono se formatira u string i vraa. U
matematike izraze mogue je ukljuiti i varijable kao i ugnjeene naredbe. Expr, naravno,
podrava i velik broj ugraenih matematikih funkcija.
Tablica
acos(x)
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)
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)
int(x)
Tablica
-~!
*/
mnoenje, djeljenje
+-
zbrajanje, oduzimanje
<< >>
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
Tcl Procedure
Tcl koristi naredbu proc za definiranje procedura. Osnovna sintaksa kojom se
definira procedura je:
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
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.
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 ;.
Znakom kose crte, \ , nastavljamo s komentarom u sljedei red skripte. Znak ; unutar
komentara nema znaaja, komentar se prekida samo prelaskom u novi red.
1184/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
?chars?
string trimleft string
?chars?
1185/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
?chars?
string wordend str ix
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:
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
1187/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
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.
Naredba llenght vraa broj elemenata niza, lindex vraa pojedini element iz niza,
lrange vraa razmak izmeu elemenata niza.
3.
1188/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Naredba linsert umee elemente na mjesto u nizu koje je oznaeno indexom, lreplace
zamjenjuje elemente u nizu novim elementima.
4.
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
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
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
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
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
pipeline
< fileName
uzima input
<@ fileId
<< value
> fileName
uzima output
1193/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
2> fileName
>> fileName
2>> fileName
>>& fileName
>@ fileId
2>@ fileId
>&@ fileId
&
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
1194/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
1195/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Argument what predstavlja ime datoteke ili pipeline specifikaciju slinu onoj koja se koristi
kod naredbe exec. Argument access moe biti u dvije forme; kratkoj sekvenci znakova ili
nizu tzv. POSSIX pristupnih zastavica (POSSIX acess flags). Ako argument access nije
specificiran, po defaultu je read. permisions argument je vrijednost koja se koristi za tzv.
permission bitove nad novo kreiranom datotekom. Defaultne vrijednosti ovih bitova su 0666.
Dodatna pojanjenja mogue je pronai na man stranici vezano uz chmod naredbu.
Povratna vrijednost naredbe open je identifikator za I/O stream; vrijednost je potrebno
pohraniti u varijablu.
Tablica
r+
otvoren za pisanje
w+
a+
Tablica
RDONLY
otvoren za itanje
WRONLY
otvoren za pisanje
RDWR
APPEND
otvoren za dodavanje
CREAT
NONBLOCK
TRUNC
Primjer:
1196/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
procesa. Meutim, ako se radi o dugakom programu poput Tk skripte to moe dovesti do
problema. Naredba close moe prijaviti i greke.
Refleksija
Refleksija (reflection) omoguava feedback skripte u vezi s unutarnjim stanjem
interpretera. To moe biti korisno u mnogo sluajeva, od testiranja kako bi se uvjerili da neka
varijabla postoji do odbacivanja stanja interpretera.
Naredba info prua mnogo razliitih informacija u vezi interpretera.
Tablica
info cmdcount
info level
info library
info script
info tclversion
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
se izraunavati od kraja dnevnika. Npr. event 1 predstavlja proli dogaaj. Mnoge forme
imaju event specifikator postavljen na 1 po defaultu.
Tablica
history
history nextid
U praksi poeljno je iskoristiti mogunost skraivanja opcija koje dolaze uz naredbu history,
pa ak i samu naredbu history. Za sve opcije postoje definirane jednoznane skraenice, a za
naredbu je potrebno koristiti jedinstveni prefix.
Neke od history operacija mogu mijenjati history listu. One zamjenjuju trenutnu history
naredbu sa naredbom koja je vraena kao rezultat history operacije. Na ovakav nain ponaaju
se operacije event, redo, substitute i words. Ovo ima smisla jer je poeljnije
imati aktualnu naredbu u history, umjesto koritenja naredbe history da bi se dobila
eljena naredba.
Radi to efikasnijeg koritenja mogunosti koju prua history, ona je podrana dodatnom
posebnom sintaksom (nisu sve history operacije podrane ovakvom sintaksom):
!!
!n
!prefix
!pattern
^old^new
Primjer
6.2.
1199/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
% 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
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
u ?level?, d ?level?
help
1201/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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.
2.
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
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
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
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.
1206/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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:
Ako se eli izvriti query nad trenutnom vrijednou atributa, izostavlja se vrijednost na kraju:
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
Tk naredbe
Naredbe koje se koriste u Tk mogu se podijeliti u dvije grupe:
1. Naredbe koje kreiraraju widgete
2. Naredbe koje manipuliraju widgetima i pruaju odgovarajue funkcije (input focus,
event binding, geometry managment)
Tablica
button
checkbutton
radiobutton
menu
kreira menu
canvas
label
entry
message
listbox
text
scrollbar
frame
toplevel
Tablica
after
bell
zvuni signal
bind
bindtags
clipboard
manipulira sa X clipboard
destroy
brie widget
fileevent
1208/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
focus
grab
option
pack
place
send
tk
tkerror
background errors
winfo
wm
1209/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
#!/usr/local/bin/wish -f
# execlog - run a UNIX program and log the output
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1211/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1212/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
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
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
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
1219/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1220/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
1221/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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 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
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
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
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.
1227/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
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
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
potomak
386/BSD-a,
nastao
1993.godine
1230/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
Mandrake
PREDNOSTI
MANE
User-friendly,
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
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,
Gentoo
Bezbolna
Duga i gnjavatorska
instalacija
sistem instalacija,
individualnih prog.
povremena
paketa, esto
nestabilnost
putanje novih
verzija
SuSE
Dostupan samo u
ulazak u svijet
Linuxa, izuzetna
FTP instalacije,
posveenost
ukljuujui
detaljima
komponente s
(dokumentacija),
pravom
1233/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
YaST-
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,
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
komponente, nema
Manager i drugi
free download
korisni utiliti-i
Brza i jednostavna
Skup, nedostupne
instalacija, one-
click instalacija
ako se plaa
programa
pruanje podrke
Jednostavna
Za Lite nema
Caldera
instalacija, nijedna
tehnike podrke,
OpenLinux
aplikacija ne moe
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
fantastini
dvije arhitekture:
performansi, najbolja
i386 i alpha
TBZ
Besplatan je
TGZ
implementacija
TCP/IP stack-a
Najimpresivniji OS
OpenBSD
dananjice sa aspekta
security-a
Hardverska autoKnoppix
detekcija, pokree se
Ako se pokree sa
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
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
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
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
1239/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1240/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
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
Saa Protulipac
Kompajliranje kernela
1244/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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)
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
1247/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
2.5.1
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
http://www.redhat.org
Debian
http://www.debian.org
Mandrake
http://www.mandrake.org
1249/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1250/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1251/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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 ...)
tipovi ipseta na matinoj ploi, grafikoj kartici, mrenoj kartici, zvunoj kartici ...
koje datotene sustave koristimo (ext2, ext3, reiserfs, FAT32, NTFS ...)
koje tipove diskova, odnosno koje kontrolere diskova imamo (IDE, ATA, RAID,
SATA, SCSI, DAT ...)
...
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
ili
# make menuconfig
ili
# make menucofig
1254/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
Odabirom bilo koje sekcije otvara se novi izbornik, slian onome na slici .
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
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
IBM
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
1258/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
1260/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
1261/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
HiSax supported cards u ovom popisu treba pronai tip kartice koju posjedujemo i
selektirati (ukljuiti) ju.
1263/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
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
1266/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1267/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1268/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
1269/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
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
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.
1271/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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
root=/dev/hda2
install=/boot/boot-menu.b
default=linux
map=/boot/map
delay=20
image=/vmlinuz
label=linux
read-only
image=/vmlinuz.old
label=linux-old
read-only
Sve parametre iza znaka jednakosti moemo izmjeniti sukladno naim potrebama. Prilikom
bilo kakvih izmjena u toj datoteci ili promjena linkova na kernele moramo zadati naredbu
# lilo v
1273/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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.
1274/1275
Sveuilite u Splitu
Struni studij Raunarstva Zagreb
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