Professional Documents
Culture Documents
Zagreb, 2004.
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sadržaj
3/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sadržaj
Sadržaj
4/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sadržaj
5/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Dražen Hudoletnjak
GNU FILOZOFIJA I
GNU LICENCA
6/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
UVOD
Priča o GNU-u počinje otprilike 1971. sa Richardom Stallmanom koji je tada počeo
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 nešto što je staro kao i sama računala i u to doba je to bila normalna
stvar, pomoć kolegi. No oni su otišli 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
poboljšavanje 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 sveučilišta 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
možeš tražiti 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 drastično
promijenila početkom 80-tih kad je Digital prestao proizvoditi PDP-10 seriju. Njegova
arhitektura, koja je bila elegantna i moćna u 60-tima se nije mogla "prirodno" proširiti da
koristi veći adresni prostor koji je bio primjenjiv u 80-tima. To je značilo da je gotovo sav
softver koji radi pod ITS-om postao neupotrebljiv. Nešto 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 računala toga doba (VAX, 68020) su imali svoje operacijske sustave ali nijedan od
njih nije bio slobodan softver. Za svaki, makar dobili samo izvršnu datoteku, morao se je
potpisati obvezujući ugovor. To je značilo da je prvi korak u korištenju računala obećanje da
nećeš pomoči svom susjedu. Pravilo koje su uveli tvorci "vlasničkog" softvera bilo je, "Ako
dijeliš softver sa susjedom, pirat si. Ako želiš bilo što promijeniti, moli nas da ti to
napravimo". To je nešto što se Stallmanu nikako nije sviđalo i našao se je pred moralnom
dvojbom. Priključiti se svijetu "vlasničkog" softvera i potpisati obvezujući ugovor kojim
obećaje da neće pomagati kolegama ili potpuno napustiti računalni svijet i raditi nešto drugo.
Umjesto toga, kao pravi programer tražio je neko treće riješenje. Razmišljao je da li postoji
neki program ili programi koje bi on mogao napisati da zajednica ponovno oživi. Zaključio je
da mu za početak treba operacijski sustav jer je to ključni program za korištenje nekog
7/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
* Riječ haker (hacker) u značenju "onaj koji probija zasštite" je pogreška koju su stvorili
mediji i koji taj pojam pogrešno koriste. Pravi hakeri ne priznaju to značenje. Po njima je
haker onaj koji voli programirati i uživa u tome. Zato ja u tekstu dalje koristim i koristiti ću
taj pojam za to, pozitivno značenje.
8/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
GNU OS
Početci
Kratko prije nego je započeo GNU projekt, Stallman je čuo za "Free University
Compiler Kit" poznat također i pod nazivom "VUCK". Taj kompajler je podržavao više
programskih jezika, uključujući C i Pascal te je imao podršku za razne platforme. Stallman je
kontaktirao autora VUCK-a i pitao ga može li dodati taj kompajler u GNU projekt. Odgovor
je bio negativan. Stoga je Stallman odlučio da prvi program kojeg će napraviti bude
višejezični (multi-language), višeplatformni (multi-platform) kompajler. Nadajući se da neće
sam morati napisati cijeli kompajler, nabavio je source kod Pastel kompajlera. To je bio
višeplatformski kompajler napisan na Lawrence Livermore Lab-u. Podržavao je i bio napisan
u proširenoj verziji Pascala te bio zamišljen kao sistem-programski jezik. Stallman mu je
dodao C frontend i počeo ga prebacivati na Motorolino 68000 računalo. 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 odlučio iz početka 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 dovršio kasnije. Prije toga je
radio na GNU Emacsu.
9/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
GNU Emacs
Stallman je rad na GNU Emacsu počeo u rujnu 1984. i već početkom 1985. GNU Emacs
je postao upotrebljiv program. To mu je omogućilo da koristi Unix sustave za editiranje bez
potrebe da nauči 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 razmišljao kako svima omogućiti da dođu do kopije
Emacsa. Obzirom da nije radio tražio je naćin 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 započeo distribuciju slobodnog softvera, preteću današnjih kompanija koje
distribuiraju cjelokupne Linux-bazirane GNU sustave.
Kako je interes za korištenjem Emacsa rastao, sve više ljudi se uključivalo u GNU
projekt i ponovno se je javilo pitanje oko financiranja projekta. Zbog toga je 1985. osnovan
Free Software Foundation (FSF). FSF je preuzela distribuciju Emacsa a kasnije je dodan i
drugi slobodni softver. Također su počeli sa prodajom slobodnih uputstava (manuala). FSF je
primala donacije, ali najveća dobit im je bila od prodaje kopija slobodnog softvera i ostalih
usluga vezanih uz to. Danas FSF prodaje CD-e i DVD-e sa source kodom, izvršnim
datotekama, lijepo štampanim uputstvima i sve to sa slobodom da se dalje distribuira i mijenja
po želji. Zaposlenici FSF-a su napisali poveču količinu GNU softver paketa. Dva
najznačajnija su C library i shell. GNU C library je napisao Roland McGrath i to je nešto što
svaki program koji radi na GNU/Linuxu koristi za komunikaciju sa Linuxom (više o Linuxu u
sljedećem poglavlju). Shell korišten na GNU/Linux sistemima je BASH, (Bourne Again
Shell) kojeg je napisao Brian Fox. FSF je sve to financirala jer im je najvažniji cilj bio razvoj
cijelog operacijskog sustava. Temeljni cilj GNU-a je bio da bude slobodan softver. Iako GNU
nije imao tehničkih prednosti pred Unixom, imao je društvenu prednost jer je omogučavao
10/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
ljudima da surađuju i imao je etičku prednost jer je poštivao 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 korištenja malo memorije
time što nisu podržali 16 bitno adresiranje (znali su da će 32 bitni strojevi postati norma kad
GNU bude dovršen). Nisu se trudili smanjiti potrošnju memorije dokle god ne bi prelazila
megabajt.
Kako je GNU projekt napredovao i sve veći broj sistemskih komponenti je nađen 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.
Također 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 ključne stvari.
Važno je napomenuti da, budući 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
značilo 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 moćnija i pouzdanija.
To je privuklo dodatne pokrovitelje i negdje oko 1990. GNU OS je bio gotovo dovršen. Falila
je još samo jedna, ključna stvar - kernel.
11/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
Linux
Stallmanova prvotna ideja je bila da sami razviju svoj kernel (GNU HURD). Odlučili 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 najteži
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 početak razvoja HURD-a
je kasnio jer su čekali da Mach bude izdan kao slobodan softver, kao što su im obećali a i
pokazalo se da je debugiranje HURD servera koji se pokreću kao tredovi i koji međusobno
komuniciraju porukama prilično težak i zahtjevan posao. Posao na HURD-u se zbog toga
otegnuo godinama.
12/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
GNU FILOZOFIJA
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 naćin za koji smatraju da im je koristan. Softver se
razlikuje od materijalnih objekata. Glavno je pitanje što je to slobodan softver i zašto bi
softver uopće 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 budući da u engleskom jeziku
riječ free ima više značenja, ideja je da se o riječi "free" razmišlja kao u pojmu "free speech"
a ne kao "free beer". U hrvatskom jeziku najbliže prijevodu odgovara riječ "slobodan" a ne
"besplatan".)
Dakle, slobodan softver je onaj koji korisnici imaju pravo pokretati, kopirati,
distribuirati, proučavati, mijenjati i poboljšavati. Točnija definicija se sastoji od četiri vrste
slobode koji imaju korisnici softvera:
• Slobodu da za bilo koju svrhu pokreću program (sloboda 0).
• Slobodu da prouče kako program radi i prilagode ga za svoje potrebe (sloboda 1).
Uvjet za to je da im je dostupan source kod programa.
• Slobodu da dalje distribuiraju kopiju programa kako bi pomogli susjedu (sloboda 2).
• Slobodu da poboljšavaju program i objave svoja poboljšanja javno kako bi cijela
zajednica imala koristi od toga (sloboda 3). Uvjet za to je da im je dostupan source
kod programa.
To su četiri ključne slobode i program je "slobodan" ako i samo ako zadovoljava sve ove
četiri točke. 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 znači (pored ostalog), da ne moramo tražiti ili platiti dozvolu za to. Također
trebamo imati slobodu promijeniti program i koristiti ga privatno za svoj posao ili igru, bez da
ikome uopće spomenemo da te modifikacije postoje. Ako objavimo svoje promjene ne bi
trebali obavijestiti nikoga zbog toga. Sloboda da se koristi neki program znači slobodu bilo
13/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
pojedincu ili organizaciji, da koristi taj program na bilo kojoj vrsti računala, 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 izvršne (executable) verzije, priložiti i
izvorni kod. To je zbog slobode da svatko ima pravo modificirati i poboljšavati program.
Dakle pristup izvornom kodu je kjučna osobina slobodnog softvera.
Da bi sve ove slobode vrijedile uvijek, one moraju biti neopozive tako dugo dok ne
napravite nešto pogrešno. Ako onaj koji razvije neki softver ima pravo ukinuti licencu bez da
ste vi napravili nešto što bi mu dalo razlog, onda taj softver nije slobodan softver. Međutim,
određena pravila u vezi distribucije slobodnog softvera su prihvatljiva, ako nisu u suprotnosti
sa osnovnim slobodama. Na primjer, copyleft (pojednostavljeno rečeno) je pravilo da kad
redistribuirate program, ne možete dodati ograničenja kojima biste zabranili ostalim ljudima
njihove centralne slobode. To pravilo nije u sukobu sa centralnim slobodama nego ih zapravo
štiti. Prema tome, vi možete platiti da dobijete kopiju slobodnog softvera ili možete nabaviti
kopiju besplatno. No nevezano na to kako ste došli do svoje kopije, uvijek imate slobodu
kopirati i mijenjati taj program, imate čak i slobodu prodavati kopije.
Slobodan softver ne znači ne-komercijalan softver. Slobodan softver mora biti dostupan
za komercijalnu upotrebu, komercijalni razvoj i komercijalnu distribuciju. Komercijalni
razvoj slobodnog softvera više nije neuobičajen, takav slobodan softver je postao vrlo važan.
Pravila kako pakirati modificiranu verziju su prihvatljiva ako ne sprečavaju vašu slobodu da
izdate modificiranu verziju. Pravila koja kažu "ako vaš program napravite dostupnim na ovaj
način, morate ga napraviti dostupnim i na neki drugi način" također mogu biti prihvatljiva uz
prethodni uvjet. Ovakvo pravilo vam ipak ostavlja izbor da uopće ne distribuirate program.
Također je prihvatljivo da se u licenci traži da ako distribuirate modificiranu verziju
programa, da autor traži da mu pošaljete kopiju. U tom slučaju dužni ste mu je poslati.
14/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
Ponekad licenca zahtjeva puno premišljanja, uključujući razgovore s odvjetnikom, prije nego
se odluči da li licenca zadovoljava kriterije. Sve ovo se radi da slobodan softver ostane doista
slobodan.
15/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
Kao korisnici računala danas, dosta nas koristi vlasnički softver. Ako nas prijatelj
zamoli da mu snimimo kopiju tog programa, pogrešno bi bilo odbiti ga. Suradnja je važnija
od copyrighta. No takve "underground" aktivnosti ne čine dobro društvo. Pojedinac bi trebao
živjeti otvoreno i ponosno te reći "ne" vlasničkom softveru. Svatko bi trebao moći surađivati
otvoreno s drugim ljudima koji koriste softver. Svatko bi trebao imati pravo naučiti kako neki
program radi i ako je potrebno popraviti njegov rad. To je razlog zašto nam treba slobodan
softver.
16/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
17/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
Copylefted softver
Copylefted softver je slobodan softver čiji uvjeti distribucije ne dozvoljavaju distributeru
dodavanje nikakvih novih, dodatnih ograničenja prilikom distribucije ili modifikacije
softvera. To znaći da svaka kopija tog softvera, makar i modificirana, mora biti slobodna.
Copylefted je generalni koncept, da bi ga ostvarili morate koristiti specifičan skup
distribucijskih pravila. Iako se može postići raznim licencama preporuka je koristiti "GNU
General Public License" jer dvije razlićite licence mogu biti nekompatibilne što znaći da bi
spajanje takvih programa bilo nezakonito.
GPL-covered software
GPL-covered software je softver koji je pokriven sa "GNU General Public License". GNU
projekt većinu svog softvera distribuira kao takav softver.
18/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
Termin "GNU program" je ekvivalent terminu "GNU softver". Neki program je GNU
program ako je GNU softver. Također se koristi i termin "GNU paket".
GNU softver
GNU softver je softver izdan pod nadležnosti GNU projekta. Većina 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 većinu su napisali volonteri.
Freeware
Termin "freeware" nema jasnu prihvačenu definiciju. Obično 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 različita 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, znaći ne može 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
Privatni softver
Privatni ili "prilagođeni" softver je softver razvijen za jednog korisnika (tipično 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 gledajući, nema smisla razmišljati o privatnom softveru na naćin je
li on slobodan ili nije.
Komercijalni softver
Komercijalni softver je softver razvijen sa ciljem da se na njemu zaradi novac. Komercijalni
softver i vlasnički (proprietary) softver nisu ista stvar. Večina komercijalnog softvera je
vlasnički softver ali postoji i komercijalni softver koji je slobodan isto kao što postoji ne-
slobodni (non-free) ne-komercijalni softver.
Važna stvar je naglasiti da je moguć slobodan komercijalni softver. Zato ne bi smo trebali
govoriti komercijalni softver kad mislimo na vlasnički sofver.
20/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
GNU LICENCA
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 neslužbeni prijevod GNU Opće javne licence na hrvatski jezik. Nije ga objavio Free
Software Foundation i zakonito ne izriče uvjete distribucije programa koji koriste GNU GPL -
- to čini samo izvorni, engleski tekst GNU GPL-a. Međutim, nadamo se da će ovaj prijevod
pomoći 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.
Umnažanje i distribuiranje primjeraka ove licence jednakih izvorniku dopušteno je svakomu,
no njeno je mijenjanje zabranjeno.
Predgovor
Licence većine programa nastoje vam oduzeti slobodu da ih dijelite i mijenjate. Tomu
nasuprot, GNU Opća javna licenca jamči vam slobodu dijeljenja i mijenjanja slobodnih
programa -- kako bi program bio slobodan za sve svoje korisnike. Ova Opća javna licenca
vrijedi za veći dio programa Free Software Foundationa i bilo koji drugi program čiji se autor
obveže na njeno korištenje. (Neke druge programe Free Software Foundationa pokriva GNU
Opća javna licenca za knjižnice.) I vi je možete primjeniti na svoje programe.
Kada govorimo o slobodnim programima, govorimo o slobodi, a ne cijeni. Naša Opća javna
licenca je stvorena kako bi vam zajamčila slobodu distribuiranja primjeraka slobodnih
programa (i, ako želite, naplaćivanje toga), primanje izvornog koda ili mogućnost da ga
dobijete, mogućnost mijenjanja programa ili korištenja njegovih dijelova u novim slobodnim
programima; te saznanje da to možete učiniti.
Kako bi zaštitili vaša prava, moramo postaviti ograničenja koja zabranjuju bilo kome
poricanje ovih prava ili zahtjev da ih se odreknete. Ova ograničenja predstavljaju određene
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. Također, oni moraju dobiti izvorni kod ili mogućnost
njegova dobivanja. A vi ih morate obavijestiti o ovim uvjetima kako bi znali svoja prava.
Vaša prava štitimo u dva koraka: 1. stavljajući autorska prava na program, te 2. nudeći vam
ovu licencu koja vam omogućava zakonito umnažanje, distribuiranje i/ili mijenjanje
programa.
21/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
Također, zbog zaštite svakog autora i nas, želimo biti sigurni da svi razumiju da za ovakve
slobodne programe nema jamstva. Ako program netko promijeni i pošalje 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 izbjeći opasnost
individualnog licenciranja od strane redistributora slobodnog programa, što bi program
učinilo vlasništvom. Da to spriječimo, razjasnili smo kako svaki patent mora biti licenciran za
svačiju slobodnu uporabu ili uopće ne biti licenciran.
Slijede točne obveze i uvjeti za umnažanje, distribuiranje i mijenjanje.
22/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
Ove potrebe vrijede za promijenjeno djelo u cjelini. Ako raspoznatljivi dijelovi tog djela nisu
izvedeni iz Programa, i mogu se sami razumno smatrati nezavisnim i odvojenim djelima,
onda ova Licenca, i njeni uvjeti, ne vrijede za te dijelove kada ih distribuirate kao zasebna
djela. Ali ako distribuirate iste dijelove kao dio cjeline koja je djelo zasnovano na Programu,
distribucija te cjeline mora zadovoljavati uvjete ove Licence, čije dozvole drugima koji su je
licencirali vrijede za cjelinu, odnosno svaki njen dio bez obzira tko ga je napisao.
Dakle, ovom dijelu nije namjera da dobije prava ili da pobija vaša prava na djelo koje ste vi
napisali u cjelini; namjera mu je poboljšati pravo nadzora distribucije izvedenih ili skupljenih
djela zasnovanih na Programu.
Također, 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 umnažati i distribuirati Program (ili djelo na njemu zasnovano, po Dijelu 2.) u
objektnom kodu ili izvršnom obliku pod uvjetima Dijela 1. i 2. ako učinite jedno od sljedećeg:
a) Popratite ga potpunim odgovarajućim strojno čitljivim izvornim kodom, koji mora biti
distribuiran pod uvjetima Dijela 1. i 2. na mediju po izboru korištenom za razmjenu
programa; ili
b) Popratite ga pisanom ponudom, koja vrijedi barem tri godine, da ćete svakoj trećoj stranci
dati, za cijenu ne veću od vašeg troška fizičkog vršenja distribucije izvornog koda, potpunu
strojno čitljivu kopiju odgovarajućeg izvornog koda, koju će se distribuirati pod uvjetima
Dijela 1. i 2. na mediju po izboru korištenom za razmjenu programa; ili
c) Popratite ga informacijama koje ste vi primili o ponudi za distribuciju odgovarajućeg
izvornog koda. (Ova mogućnost vrijedi samo za nekomercijalnu distribuciju i samo ako ste
primili program u objektnom kodu ili izvršnom obliku s takvom ponudom, prema prethodnom
Odlomku b.)
Pod izvornim kodom za djelo mislimo na željeni oblik djela za njegovo mijenjanje. Za
izvršno djelo, potpuni izvorni kod odnosi se na izvorni kod svih modula koje ono sadrži, uz
datoteke koje definiraju svako uključeno sučelje, uz skripte za nadzor prevođenja i instalacije
izvršne datoteke. Međutim, kao posebna iznimka, distribuirani izvorni kod ne mora uključiti
bilo što što se obično distribuira (bilo u izvornom kodu, bilo u izvršnom obliku) s glavnim
dijelovima (prevodioc, jezgra, itd.) operacijskog sustava na kojem izvršna datoteka radi, osim
ako sam taj dio prati izvršnu datoteku.
Ako se izvršna datoteka ili objektni kod distribuira omogućavanjem pristupa kopiji na
određenom mjestu, onda se omogućavanje jednakog pristupa izvornom kodu smatra
distribucijom izvornog koda, iako se drugi ne prisiljavaju na umnažanje izvornog koda
zajedno s objektnim.
4. Ne smijete umnažati, mijenjati, podlicencirati ili distribuirati Program osim kako je
izraženo u ovoj Licenci. Bilo kakav pokušaj umnažanja, mijenjanja, podlicenciranja ili
distribuiranja Programa je nezakonit, i odmah poništava vaša prava prema ovoj Licenci.
Međutim, strankama koje su od vas dobile kopije ili prava pod ovom Licencom neće biti
poništene licence, dok zadovoljavaju sve uvjete.
5. Ne morate prihvatiti ovu Licencu, pošto ju niste potpisali. Međutim, ništa vam drugo ne
jamči 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 umnažanje, distribuiranje i mijenjanje Programa ili
djela na njemu zasnovanih.
23/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
6. Svaki put kada ponovo distribuirate Program (ili bilo koje djelo zasnovano na Programu),
primatelj automatski prima licencu od izvornog vlasnika za umnažanje, distribuiranje ili
mijenjanje Programa prema ovim obvezama i uvjetima. Ne smijete nametnuti bilo kakva
daljnja ograničenja na primateljevo korištenje ovdje zajamčenih prava. Niste odgovorni za
traženje zadovoljavanja ove Licence od drugih stranaka.
7. Ako vam se, kao posljedicu sudske presude ili tužbe za kršenje patenta ili iz bilo kojeg
drugog razloga (ne samo što se tiče patenata), nameću obveze (bilo sudskim nalogom,
nagodbom, ili drukčije) u kontradikciji s uvjetima ove Licence, to ne znači da smijete kršiti
uvjete ove Licence. Ako ne možete distribuirati tako da zadovoljavate istodobno i svoje
obveze pod ovom Licencom i sve ostale odgovarajuće obveze, onda kao posljedicu uopće ne
smijete distribuirati Program. Na primjer, ako patentna licenca ne dopušta slobodnu
redistribuciju Programa svima koji njegove kopije dobiju izravno ili neizravno od vas, onda je
jedini način na koji možete zadovoljiti i nju i ovu Licencu prestanak distribuiranja Programa.
Ako se bilo koji dio ovog Dijela drži nevažećim 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 kršenje patenata ili drugih prava na vlasništvo ili na
njihovo pobijanje; jedina mu je svrha zaštita integriteta distribucijskog sustava slobodnih
programa, kojeg implementira javna praksa. Mnogi ljudi su velikodušno pridonijeli velikom
broju programa distribuiranim kroz taj sustav pouzdajući se u dosljednu primjenu tog sustava;
na autoru/donatoru je odluka da li će programe distribuirati nekim drugim sustavom i korisnik
licence ne može mu nametati svoj izbor.
Namjera ovog Dijela je razjašnjavanje onoga za što se vjeruje da su posljedice ostatka
Licence.
8. Ako je distribucija i/ili korištenje Programa u nekim državama ograničeno bilo patentima
bilo sučeljima na koje se polažu autorska prava, izvorni vlasnik autorskih prava koji je
Program stavio pod ovu Licencu može dodati eksplicitno zemljopisno ograničenje distribucije
izuzimajući takve države, i čineći distribuciju dozvoljenom samo u ili među državama koje
nisu izuzete. U tom slučaju, ova Licenca uključuje ograničenje kao da je napisano u tijelu ove
Licence.
9. Free Software Foundation s vremena na vrijeme može objaviti promijenjene i/ili nove
verzije Opće javne licence. Takve nove verzije bit će duhom slične sadašnjoj, no mogu se
razlikovati u detaljima kako bi se riješili novi problemi ili brige.
Svakoj verziji se daje različit broj verzije. Ako Program navodi broj verzije ove Licence koja
za njega vrijedi i "bilo koja kasnija verzija", smijete poštovati obveze i uvjete te verzije ili bilo
koje kasnije verzije koju je objavio Free Software Foundation. Ako Program ne određuje broj
verzije ove Licence, smijete odabrati bilo koju verziju ikad izdanu od strane Free Software
Foundationa.
10. Ako želite uključiti dijelove Programa u druge besplatne programe čiji se uvjeti
distribucije razlikuju, pišite autoru i tražite njegovu dozvolu. Za programe čija autorska prava
ima Free Software Foundation, pišite Free Software Foundationu; ponekad radi toga radimo
iznimke. U odlučivanju će nas voditi dva cilja čuvanja slobode svih izvedenica iz našeg
programa i promicanje dijeljenja i ponovnog korištenja programa općenito.
NEMA JAMSTVA
11. POŠTO JE PROGRAM LICENCIRAN BESPLATNO, ZA PROGRAM NEMA
JAMSTVA, U MJERI DOPUŠTENOJ PRIMJENJIVIM ZAKONOM. OSIM AKO JE
DRUKČIJE IZRAŽENO NAPISMENO, VLASNICI AUTORSKIH PRAVA I/ILI DRUGE
24/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
STRANKE PROGRAM DAJU "KAKAV JEST" BEZ JAMSTVA BILO KOJE VRSTE,
IZRAŽENOG ILI PODRAZUMIJEVANOG, UKLJUČUJUĆI, ALI NE SAMO NJIH,
PODRAZUMIJEVANA JAMSTVA TRGOVINSKE PRIKLADNOSTI I ODGOVARANJA
ODREĐENOJ SVRSI. SVI RIZICI VEZANI ZA KVALITETU I BRZINU PROGRAMA
OSTAJU NA VAMA. AKO SE PROGRAM POKAŽE NEVALJANIM, VI SNOSITE SVE
TROŠKOVE POTREBNOG ODRŽAVANJA, POPRAVLJANJA I ISPRAVLJANJA.
12. NI U KOJEM SLUČAJU, OSIM NUŽNO 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, NEĆE BITI VAMA ODGOVORAN ZA
ŠTETE, UKLJUČUJUĆI OPĆE, POSEBNE, SLUČAJNE ILI POSLJEDIČNE ŠTETE
PROIZAŠLE IZ KORIŠTENJA ILI NEMOGUĆNOSTI KORIŠTENJA PROGRAMA
(UKLJUČUJUĆI, ALI NE SAMO NJIH, GUBITAK PODATAKA ILI ČINJENJE
PODATAKA NETOČNIM 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 MOGUĆNOST TAKVIH
ŠTETA. KRAJ OBVEZA I UVJETA
25/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
GNU GPL
Koristi se sa većinom GNU programa i sa više od polovice svih slobodnih softverskih paketa.
Osnovna ideja je da pruži potpunu slobodu korisnicima softvera i onemogući 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 češče no što je to potrebno.
Glavna razlika je u tome što se biblioteka izdana pod LGPL može upotrijebiti i u vlasničkom
softveru dok se biblioteka izdana pod običnom 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 nužno samo za to). Daje
slobodu svima da koriste, kopiraju, mijenjaju, distribuiraju tu dokumentaciju, besplatno ili uz
naknadu.
26/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
ZAKLJUČAK
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 vlasničkog (proprietary) softvera. Razlog je
ponovno taj što slobodan softver dolazi sa izvornim kodom. Dostupnost izvornog koda
omogućuje bilo kome da prouči taj softver i samim time se bugovi brže pronalaze. Također,
sloboda da se mijenja kod omogućuje bilo kome da prilagodi program upravo svojim
potrebama. Time se dobija velika baza gotovog softvera u kojoj svatko može naći nešto
korisno za sebe, pogotovo ako sam nije vičan programiranju.
27/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
softvera i sl.) zarada nikada nije i ne može biti ni blizu onoj koja se okreće u vlasničkom
softveru.
Na kraju, nebitno kakva budućnost čeka slobodan softver, on je sada tu. Počeo je kao
ideja jednog čovjeka, teškom mukom i uz puno odricanja napravio je početak, pridružili su
mu se i drugi i stvar je krenula. Danas za gotovo sve što postoji kao vlasnički softver postoji i
verzija slobodnog softvera, koji budući da je nastao iz ljubavi prema programiranju a ne zbog
novca, je obično bolji i kvalitetniji. Zbog toga svi mi imamo mogučnost izbora (još kad bi se i
igre izdavale pod GNU licencom kao slobodan softver, gdje bi nam bio kraj). :)
28/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
NAPOMENE
29/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
Marijela Napast
STRUKTURA UNIXA
30/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
OPERACIJSKI SUSTAV
Svako računalo ima operacijski sustav. Operacijski sustav je program koji kontrolira rad
svih ostalih dijelova računala, kako hardvera, tako i softvera. Najvažnije je što nam dopušta
da koristimo sve mogućnosti koje nam pružaju razni programi.
Detaljno govoreći Unix nije samo jedan operacijski sustav, on je obitelj operacijskih
sustava. Različiti proizvođači proizvode svoje verzije Unixa. Iako su sve verzije jako slične,
postoje male razlike koje mogu uzrokovati probleme. Najočitiji primjer je raspored sustava
datoteka i točno određeni format nekih naredbi. Jedna od velikih prednosti Unixa za
programere je to da su svi najbolje napisani korisnički programi neovisni od hardvera što ih
čini lako čitljivim novim sistemima.
Unix je višekorisnički i višezadaćni operacijski sustav. Tako može istovremeno
postojati više korisnika povezanih na sistem i svaki od njih može imati pokrenuto više
programa. Korisnici velikom prednošću Unixa smatraju mogućnost istovremenog korištenja
više programa jer tako ne gube vrijeme na čekanje da se jedan posao završi kako bi mogao
započeti novi. Unix se koristi na radnim stanicama i višekorisničkim serverima. Na X
terminalima i radnim stanicama X Windows predstavlja grafičko sučelje između korisnika i
Unixa. Ali ipak poznavanje Unixa je potrebno za operacije koje nisu pokrivene grafičkim
programom, ili kad ne postoji X Windows sistem npr. u telnet sessionu.
Slika 1.
31/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
KERNEL
Kernel kao što govori i njegovo ime je jezgra svakog Unix sistema i očitava se prilikom
svakog pokretanja sistema i vezan je uz sam pokretački dio programa.
Rukuje sa cijelim izvornim sistemom i prezentira nam ga zajedno sa svakim spojenim
korisničkim sustavom. Zadaća kernela je da drži procese i korisnike odvojenima i regulira
pristup hardveru sistema, uključujući i procesor, memoriju, disk i druge ulazno izlazne
uređaje. Kernel direktno komunicira sa hardverom i omogućava korištenje korisničkih
programa. Ti korisnički programi ne trebaju znati ništa o hardveru. Oni samo trebaju znati na
koji način komunicirati s kernelom i tražiti od njega da izvrši željenu operaciju. Oni
komuniciraju s kernelom kroz skup standardnih sistemskih poziva. Ti sistem pozivi traže od
kernela da izvrši operacije kao što su: otvaranje, zatvaranje, čitanje, pisanje, povezivanje,
izvršavanje, startanje ili promjenu zapisa zbrojeva, mijenjanje vlasništva nad datotekom ili
direktorijem, promjene u novi direktorij, stvaranje procesa, determiniranje procesa,
omogućavanje pristupa hardver uređajima i postavljanje granica izvornom sistemu.
Najjednostavnije rečeno kernel na naredbu korisnika uključuje i isključuje dio sistema. Npr.
ako tražimo da nam računalo ispiše sve datoteke unutar direktorija naredbom ls, onda kernel
“naređuje” računalu da s diska učita sve datoteke u traženom direktoriju i ispiše ih na ekran.
Neke od osnovnih funkcije kernela su:
rukovanje s memorijom sustava i alociranje memorije za svaki proces
raspoređivanje rada procesora kako bi rezultati rada svakog korisnika bili što
uspješniji
organiziranje prenašanja podataka iz jednog djela računala u drugi dio
prihvaćanje instrukcija od strane shella i njihovo predstavljanje
iznuđivanje dozvola pristupa koje su na snazi u datotečnom sustavu
Da bi se prikazao primjer na koji shell i kernel rade zajedno pretpostavimo da korisnik
utipka naredbu rm moja_datoteka (koja ima učinak brisanja datoteke moja_datoteka). Shell
traži datoteku koja sadrži program rm i zatim postavlja zahtjev kernelu kroz sistemske pozive
da izvrši program rm na mojoj_datoteci. Kad proces rm moja_datoteka završi, shell tad vraća
korisniku znak unixa % što ukazuje na to da čeka na nove naredbe.
Da bismo locirali kernel potrebno je znati da root direktorij sadrži oboje, pokretački
(boot) program i kernel za sistem. Ime kernel datoteke varira od proizvođača do proizvođača,
32/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
ali obično uključuje skup slova: nix da bi ga se moglo pronaći sa tzv. Wildcard znakovima.
Npr.:
ls /*nix*
-rwxr----- 1 root 1558734 Sep 24 1992 /vmunix
Ova lista definira svaku datoteku u root direktoriju sa skupom slova nix u njihovu
imenu. U ovom primjeru ispisuje vmunix što je zajedničko ime za kernel file.
33/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
SISTEMSKI POZIVI
Primjećujemo da je exit također sistemski poziv, ali on ne može vratiti grešku. Postoji
više razloga zbog kojih sistemski pozivi koji vraćaju –1 nisu uspjeli obaviti traženi posao.
Globalna varijabla errno sadrži kod koji ukazuje na razlog. Errno sadrži točne podatke samo
34/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
ako sistemski poziv doista vrati –1. Ne možemo koristiti errno da bi smo ustanovili da li je do
greške uopće došlo. Sistemska rutina perror uzima za svoj argument string i daje string,
kolonu i opis razloga greške pohranjenog u errnu. Način na koji koristimo opisane funkcije
prikazuje primjer:
Kao izlaz možemo dobiti sljedeći tekst: file does not exist on an error.
Na stranicama za pomoć možemo pronaći deklaraciju za svaki poziv. Tu je prikazano
koji tip vrijednosti poziv vraća, koji tip argumenata uzima i koje datoteke moramo uključiti za
korištenje određenog 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() uzima 3 argumenta : int koji je nazvan sa d, pokazivač na znak nazvan buf i još
jedan int nazvan nbytes. Read() vraća int kao rezultat. Imena argumenata određujemo sami.
Još jedan jednostavan primjer sistemskog poziva je vremenski sistemski poziv:
35/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
Time vraća vrijeme u sekundama od 01.01.1970. Ako je argument timep različit od nule
točno vrijeme se pohranjuje u integer na koji pokazuje.
Neki od sistemskih poziva najniže razine su:
kreiraj
otvori
zatvori
isključi
čitaj
piši
traži
Neki od sistemskih poziva za kontroliranje procesa su:
razdvoji
čekaj
izvrši
izađi
signal
Sistemski pozivi za IPC su:
pipe
dup
36/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
SHELL
Svaki put kad se uključujemo u Unix sistem, program za uključivanje provjerava našu
šifru i korisničko ime i smješta nas u program koji se zove shell (ljuska). Shell djeluje kao
sučelje između korisnika i kernela. Shell je dio korisničkog programa, a ne dio kernela. Shell
omogućuje izvršavanje nekih procesa u pozadini. Shell je prevoditelj naredbi (command line
interpreter(CLI)). Možemo vidjeti njegov pokazivač na ekranu obično u obliku imena
računala na kojem radimo kojeg slijedi znak %. Po želji korisnik sam može promijeniti taj
pokazni znak. Da bismo napravili naš željeni posao unašamo naredbe na mjesto tog
pokazivača odnosno komandne linije koja se nalazi odmah iza pokazivača. Shell funkcionira
kao prevoditelj naredbi, uzima svaku naredbu i da bi bila obrađena prosljeđuje ju kernelu. On
tada prikazuje rezultat operacija na ekranu. Da bismo saznali koji shell koristimo treba nam
informacija koja se nalazi u shell okružnoj varijabli. Naredba echo $SHELL ispisuje
vrijednost te varijable. Da bismo otkrili koji shell upravo koristimo potrebno je znati
posljednji dio imena, pa tako postoje sljedeće mogućnosti:
Ime: Shell:
/.../sh Bourne shell
/.../csh C shell
/.../tcsh TC shell
/.../ksh Korn shell
/.../bash Bourne Again SHell
Najčešće se koriste dva shella; Bourne shell (sh) i C shell (csh). Možemo koristiti
različite shellove upisivanjem imena shella na mjesto pokazivača, 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 uključuje možemo promijeniti korištenjem naredbe
chsh. Da bismo napustili određeni shell koristimo naredbu imeshella% exit. Različiti shellovi
izvršavaju različit broj funkcija.
Shell provodi sljedeće funkcije:
a) stvara okružje susretljivo našim potrebama
Naše radno okružje je definirano svaki puta kad se spojimo ili započinjemo rad s novim
shellom. Okružje je definirano vrijednostima koje shell nalazi u inicijalizacijskim datotekama
koje se uvijek čitaju prilikom pokretanja. Okružje možemo promijeniti promjenom tih
37/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
datoteka i postavljanjem novih vrijednosti u varijable. Svaki shell rukuje na drugačiji način sa
svojim inicijalizacijskim datotekama.
Često korištene varijable za radno okružje su:
IME OPIS
EDITOR Postavlja editor koji će biti korišten od strane drugih programa,
npr. mail programa
PAGER Postavlja pager koji će biti korišten od drugih programa, npr.
mana za ispisivanje man stranica
PATH Određuje direktorije kroz koje će shell tražiti da bi pronašao
određenu naredbu. Direktoriji se pretražuju redom kojim se pojavljuju
PRINTER Određuje printer koji će služiti za ispis svih dokumenata koji će
mu biti poslani lpr naredbom
SHELL Postavlja glavni shell
TERM Određuje tip terminala za programe kao što su editor i pager
TZ Postavlja vremensku zonu u kojoj se nalazimo
38/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
PROGRAMI
Sve u Unixu je ili datoteka ili proces. Proces je program za izvršavanje identificiran
jedinstvenim PID-om(Process identifier). Datoteka je kolekcija podataka stvorenih od
korisnika korištenjem tekst editora, compilera,itd. Primjeri datoteka su:
dokument ( izvještaj, esej…)
tekst programa napisan u nekom višem jeziku
instrukcije razumljive direktno stroju i nerazumljive prosječnom korisniku, npr.
kolekcija binarnih brojeva (executable ili izvršni file)
direktorij koji sadrži informacije o svojem sadržaju koje mogu biti skup drugih
direktorija ili poddirektorija i običnih datoteka
Okružje 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)
39/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
Slika2:
Svaki čvor predstavlja ili datoteku ili direktorij datoteka, a svaki sljedeći sadrži druge
datoteke i direktorije. Datoteku ili direktorij određujemo po njegovu imenu, ili punom ili
apsolutnom imenu ili jednom relativnom za lokaciju. Puno ime započinje s rootom(/), i zatim
slijede grane datotečnog 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 uobičajeno 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 višu razinu možemo koristiti:
../condron/source/xntp
To ukazuje da je prvo potrebno ići 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 slučaju root
direktorija roditeljski direktorij je on sam. Direktorij je datoteka koja sadrži tablicu s imenima
datoteka koja se nalaze u njemu i svako ime datoteke pridružuje inode broju u listi. Inode je
specijalna datoteka dizajnirana da ju kernel može čitati kako bi dobio informacije o svakoj
40/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura Unixa
datoteci. Određuje dozvole nad datotekama, vlasništvo, datum stvaranja, zadnjeg pristupa i
promjene, te fizičku lokaciju blokova podataka na disku koji sadrže datoteku. Sistemu nije
potrebna nikakva posebna struktura za podatke koji se nalaze u datoteci. Datoteka može biti
ASCII ili binarna ili kombinacija i može 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 objašnjenje dozvola nad datotekama na serveru temeljenom na
Unixu. Svaka stvorena datoteka ili direktorij imaju:
a) vlasnika
to je obično osoba koja je stvorila datoteku
vlasnik datoteke ili direktorija može davati različita dopuštenja
b) grupu
kako više korisnika može biti povezano u korisničku grupu, postoji grupno vlasništvo
vezano za pojedinu datoteku ili direktorij
c) ostalo (svijet)
svi ostali korisnici, u ovom slučaju bilo tko spojen na Internet
Postoje 3 načina zaštite datoteka i direktorija
a) r ((Read) - Čitaj)
korisnik koji ima dozvolu čitanja datoteke i može zaključati sadržaj te datoteke
korisnik koji ima dozvolu čitanja nad direktorijem može saznati koje se
datoteke nalaze u direktoriju (ako se traže detaljne informacije o datotekama unutar
direktorija, direktorij mora imati execute dozvolu)
b) w ((Write) - Piši)
korisnik koji ima dozvolu pisanja nad datotekom može mijenjati sadržaj te
datoteke
korisnik koji ima dozvolu pisanja nad direktorijem može mijenjati sadržaj tog
direktorija
c) x ((Execute)-Izvrši)
korisnik koji ima dozvolu izvršavanja nad datotekom može koristiti ime te
datoteke kao Unix naredbu
korisnik koji ima dozvolu izvršavanja nad direktorijem može kopirati
direktorije
41/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
Andrija Martinović
SHELL
42/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
UVOD
43/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
SHELL
Shell je komandni interpreter UNIX operativnog sistema i može se promatrati kao sloj
koji se nalazi između kernela i korisnika. Interaktivan je s obzirom da ima direktnu
komunikaciju sa korisnikom. On dobiva korisničke zahtjeve, interpretira ih i predaje kernelu
na izvršavanje.
Shell je komandni interpreter, tj. još jedan sloj kojim je hardware računala sakriven od
korisnika.
44/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
Shell ili CLI (Command Line Interpreter) je sučelje između korisnika i operativnog
sustava (UNIX-a), tj program koji interpretira ono što se napiše u komandnoj liniji.
Prvo što korisnik vidi kad se UNIX «digne» je login: pa password:. Nakon uspješnog
logiranja OS dodijeli UID (user ID) i GID (primary group ID) i dođemo do shell-a. Trebali bi
biti u svome (HOME) direktoriju ako postoji ili u ROOT (/) direktoriju.
U komandnu liniju, čiji defaultni prompt može izgledati: $ ili # (kod Bourne shell-a) ili
% (kod C shell-a), upisuju se naredbe.
Te komande mogu biti «built-in», tj. već ugrađene tako da se izvršavaju direktno iz
shell-a , ili se mogu indirektno pozivati iz nekih drugih programa. Ugrađene naredbe su
različite kod različitih verzija shell-ova. Iako su verzije UNIX-a slične, ipak postoje određene
razlike između verzija. Kompatibilne verzije (sh, bash, ksh) i posebna vrsta c shell-a (csh,
tcsh).
U većini verzija UNIX operativnog sustava obično su na raspolaganju sljedeće vrste
shell-ova:
45/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
46/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
KERNEL (JEZGRA)
Kernel UNIX operativnog sistema kontrolira pristup računaru, upravlja fajl sistemom,
resursima računara, diskovima, trakama, štampačima, komunikacionim linijama i drugim
uređajima. Na slici dat je pregled funkcija Kernel-a.
Za kernel (jezgru) možemo reći da je centralni dio operacijskog sustava koji se učitava
pri podizanju sustava, a upravlja računalnim sklopovljem, radom procesora i dodjelom
memorije.
Poznavanje jezgre operacijskog sustava nije nužno za korištenje računala.
Nedostupna je običnom korisniku koji može komunicirati s jezgrom samo preko poziva
sustavu.
47/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
LJUSKA (SHELL)
Ljuska je tumač ( tzv. interpreter ) naredbi i služi kao veza između korisnika i UNIX-a.
Svaki korisnik ima odvojenu kopiju ljuske pa prema tome one mogu biti različite 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 sljedeće akcije:
-getty osluškuje liniju i kada otkrije na njoj skup znakova zaključen znakom za
kraj retka, pokreće novi proces login, prenese mu pročitane znakove i nestaje
-login završava 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 korisničkih naredbi
Pokretanje korisničkih programa i komunikacija sa jezgrom
Prikazivanje rezultata na zaslonu
Prilikom spajanja na računalo, po uspješnoj identifikaciji, nalazimo se u
početnoj ljusci
48/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
49/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
50/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
Uz pomoć VI (ili nekog drugog tekst editora) napiše se skripta. Ako prva
linija počinje sa # onda je C shell scripta. U suprotnom, script se tretira kao
Bourne shell script.
izvršavanje:
/bin/csh [-vx] script_name args ...
-v ispisuje linije skripte koje se izvršavaju
-x ispisuje komande koje se izvršavaju
ili:
% chmod +x script_name
% script_name args ...
Skripte se koriste kada je interaktivni rad težak i previše zamršen te kada zahtjeva
mnoge komplicirane akcije koje se ponavljaju.
51/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
STARTANJE SHELL-A
Shell se starta kao i svaki drugi program, programskom naredbom. UNIX je građen tako
da u operaciji boot procesa uključi i startanje Shell-a, zapravo to je zadnji korak u boot
procesu. Odmah po uključivanju računala 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 učitavanje jezgre odnosno alociranje računarskih uređaja i kad se
jednom starta kernel on ostaje u memoriji tokom čitavog rada računara odnosno do nestanka
napona u memoriji. Druga faza je identifikacija korisnika kako bi bila moguća dodjela
kontrolnih prava korisniku i u tu svrhu se pozivaju dva programa a to su “getty” i “login”.
Prvi ima funkciju obezbjeđivanja portova odnosno komunikacijskih kanala prema korisniku.
Ti kanali se označavaju kao “tty” sa rednim brojem iza toga. getty prima string sa tastature od
korisnika i prosljeđuje ga programu login koji određuje na osnovu tog stringa za koji
pretpostavlja da je korisničko ime (Username) korisnička kontrolna prava (permissions),
zatim se zahtjeva od korisnika da zada sljedeći string koji će od login-a biti prepoznat kao
korisnička lozinka (password). Ako password ne odgovara postojećem korisniku ili korisnik
nije definiran na toj mašini onda login ponovno vraća kontrolu programu getty, a ako je
identifikacija validna onda program login starta sljedeći program koji između ostalog služi za
izolaciju jezgra od korisnika a to je Shell. U svrhu ostvarivanja što veće sigurnosti sistema
startanje Shell-a može biti uskraćeno odnosno onemogućeno. Tu opet postoje opcije pomoću
kojih se određuje koji će se program odmah nakon logiranja startati. To može biti neki text
procesor ili neki spreadsheet program tako da korisnik nema pravo upravljanja fajlovima koji
nisu odgovarajućeg formata za taj program, i poslije isključivanja tog programa sistem
korisnika vraća ponovo na identifikaciju. Koji program će biti startan određuje se u fajlu
/etc/passwd koji sadrži, između ostalog, logine, kriptirane passworde, UID, GID, Ime
korisnika, itd.
Dva fajla, koja u stvari predstavljaju shell skripte, se izvršavaju u toku login procedure.
To su .login i .cshrc i oba se nalaze na HOME direktorijumu korisnika. Prvi se izvršava iz
login programa koji obavlja autorizaciju korisnika (provjera login imena i passworda). Ako je
autorizacija obavljena uspješno, sam login program starta shell korisnika. Slično, kao login,
shell izvršava svoj start-up fajl. Start-up fajl C shell-a je .cshrc. Oba spomenuta start-up fajla
služe za inicijalno automatsko izvršavanje određenih komandi, definiranje aliasa, varijabli,
52/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
radne okoline, i slično. Razlika između .login i .cshrc fajla je ta sto se .login izvršava prvi i to
prije startanja shell-a, ali to obično nije značajno
Tipičan sadržaj .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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
PRIJAVLJIVANJE SA TERMINALA
54/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
Sintaksa naredbi
Kada login uključi Shell na ekranu se ispisuje komandni prompt koji obično počinje 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 pokušao interpretirati. Sintaksna pravila nalažu format u obliku
komande i argumenata:
$ naredba argumenti
naredba je neka izvršna datoteka kao npr. naredba, alat, shell, skripta, itd. Naredba mora
biti “executable” odnosno user mora imati pravo na izvrašanje te komande, pravo “x” u listi
prava koju ima svaka datoteka u UNIX-oidima.
55/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
opcije imena_fileova
Na primjer:
ovo su ukupno tri argumenta. Prvi je opcija a druga dva su imena fileova. Naredbe
definiraju akcije na UNIX-u. Svaku naredbu jedinstveno određuje njeno ime i argumenti.
Zadaci shella su između ostalog i uklanjanje suvišnih informacija kao što su nepotrebni
razmaci između argumenata , itd.
U komandama se mogu koristiti univerzalni znakovi *,[] , ?.
UNIX je CASE SENSITIVE operativni sistem, odnosno string otkucan VELIKIM i
malim slovima nema isto značenje.
Na slici je prikazan dijagram toka izvršavanje naredbi.
56/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
Sve komande UNIX-a se, prema svojim funkcijama, mogu svrstati u neku od sljedećih
klasa:
obrada teksta -tekst editori (ed, ex, vi), spell checker, tekst formateri i
slično,
upravljanje podacima -kreiranje, organizacija i brisanje fajlova i
direktorijuma,
elektronske komunikacije -vise programa (write, mail) koji omogućavaju
razmjenu poruka među korisnicima,
programska okolina -mogućnost definiranja komforne programske
okoline korištenjem različitih uslužnih programa,
razvojno okruženje -kompajleri i interpreteri raznih programskih jezika,
linkeri, debageri,...
ostali uslužni programi -grafička podrška, X Windows.
Često se javljaju problemi tokom rada glede zadavanja naredbi. Ako korisnik želi zadati
nekoliko naredbi u jednom redu, odnosno želi jednom komandom narediti izvršavanje više
naredbi od jednom shell nudi takvu mogućnost na dva potpuno različita načina:
$ cd /usr/local/apache/conf; vi httpd.conf
to su zapravo dvije naredbe stavljene u jednu komandnu liniju koje koriste za editiranje
konfiguracionog fajla Apache web servera. Ključni sintaksni karakter je semikolon “;”. On
govori shellu da razdvoji dvije naredbe u jednoj komandnoj liniji. Shell će to uraditi, što znači
da će prvo promijeniti radni direktorij u /usr/local/apache/conf gdje se nalazi datoteka
httpd.conf i zatim će pokrenuti vi editor za editovanje httpd.conf fajla. Ali ovakav način
zadavanja naredbi bi trebao biti korišten samo onda kada korisnik točno zna kakvog tipa
izvršne fajlove pokreće. Ova vrsta sintakse bi se trebala izbjegavati ukoliko se radi o
određenim shellovim skriptama.
57/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
Drugi način zadavanja više 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. Ključni znak je “&” i stavlja se iza naredbe koja
pokreće program koji želimo startati u pozadini. To su obično neki servisi jer nema potrebe da
servis zauzme jedan komandni prompt.
znak “\” je tzv. backslash karakter. Echo naredba ispisuje tekst na standardni output.
Kao što već spomenuo shell uklanja sve nepotrebne razmake (space caracter) tako da je tekst
ispisan bez velikih razmaka kao u komandnoj liniji. Shell vidi komandu kao string i dijeli ime
programa i argumente pomoću razmaka ma koliko veliki oni bili, a kraj komande prepoznaje
po newline karakteru. Newline karakter se generira kada pritisnemo enter na tastaturi. Na
samom programu je da razluči što je opcija a što neki drugi argument. Prelamanje se vrši
upotrebom backslash karaktera tako što se piše kada ponestane mjesta za čitavu komandu i
poslije toga pritisnemo enter. Backslash je zapravo tzv. escape karakter. Poslije njega svi
karakteri se tretiraju literalno. Ovdje se mora biti pažljiv jer ako poslije backslasha ne dođe
58/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
newline već recimo space pa onda newline backslash neće prelomiti liniju i shell će pokušati
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 točno onakav
kakvog smo ga napisali, odnosno ako želimo da veliki razmaci budu tretirani kao takvi, onda
se koristimo escape karakterima kao što su (’ ) i ( “ ):
znak ( ’ ) se koristi za izbjegavanje grupa specijalnih znakova. Ali ako želimo koristiti
neke specijalne karaktere sa njihovim funkcionalnim značenjem onda se koristi (” ) escape
karakter:
ako prvi proces vrati nulu druga naredba će se izvršiti a ako vrati nonzero druga naredba
se neće izvršiti. Tako će naredba:
59/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
$ ls –l fajl || ls -la
ako prvi dio komande vrati zero druga komanda ls se neće pokrenuti a ako vrati nonzero
komanda će izlistati sve u aktivnom direktoriju.
|| logičko OR
$ telnet 212.69.23.100
$ !telnet
60/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
Iniciranje Programa
Redirekcija inputa i outputa je zadatak shella. Shell prvo uradi redirekciju pa onda
izvrši komandu. Na primjer želimo da neki listing direktorija sačuvamo u jednom fajlu radi
kasnijeg indeksiranja recimo CD-a punog mp3-jeva:
Ova komanda će upisati sve fileove u koji se nalaze u aktivnom direktoriju u fajl koji se
zove listing.txt.
Ali da bi naveli tipičan primjer redirekcije odnosno primjer koji dokazuje da se
redirekcija izvršava od strane shella je sljedeći. Naime ja ću sada zadati komandu koja treba
da izbroji linije u jednoj tekstualnoj datoteci:
$ wc –l .bash_history
143 .bash_history
$ wc –l <.bash_history
143
U prvom primjeru imamo rezultat koji je vratio program za prebrojavanje rijeci u
datoteci (opcija –l govori programu da prebroji redove) zajedno sa imenom fajla koji je
61/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
trebao da pretraži. Ovdje mu je rečeno gdje da traži podatke za obradu. U drugom primjeru
shell mu je samo proslijedio podatke za obradu pa stoga program nije ni znao odakle su
podaci došli.
Pipeline konekcija
Pipeline je standardni kanal na koji podaci ulaze ili izlaze. Pa je zato konekcija
pipelinea vrsta redirekcije inputa i outputa. Pomoću ove konekcije na lagan način je moguće
output jednog programa preusmjeriti ka standardnom inputu drugog. Također ovakve
konekcije su zadatak shella i obrađuju se prije samog izvršenja programa:
$ ls –la | wc –l
26
$ ls file*
ova će naredba izlistati sve fajlove u aktivnom direktoriju čija imena počinju sa
stringom file.
62/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
Upravljanje varijablama
Shell ima ugrađenu mogućnost da alocira memoriju u vidu varijabli. Zapravo, mnoge
stvari u shellu su riješene uz pomoć varijabli. Čitavo uređenje interfacea se u shellu može
uraditi pomoću varijabli:
$ MOJDIR=/home/mozaik
$ echo $MOJDIR
/home/mozaik
karakter $ odmah ispred imena varijable MOJDIR označava da se radi o varijabli jer bi
u protivnom komanda :
$ echo MOJDIR
vratila rezultat:
MOJDIR
$ ls –a $MOJDIR
63/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
$ echo $MOJDIR
$ echo ${MOJDIR:-’/home/mozaik’}
$ /home/mozaik
$/home/mozaik
64/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
$ echo ${MOJDIR:?}
Ovdje bi dodao samo još to da bash podržava i polja varijabli. Polja mogu biti samo
jednodimenzionalna. Format polja je IME_VARIJABLE[n] gdje je n neki integer.
$@ Isto što i $*
Standardne varijable su osnova za kontrolu okoline i bash koristi veliki broj standardnih
varijabli. Slučajno 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 nemoguće
promijeniti premda su one read-only ali sam pokušaj korištenja istih bi dovelo do neželjenih
mijenjanja vrijednosti pa je zbog toga na kraju data lista standardnih varijabli bash-a.
65/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
Environment varijable
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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
HOME=/home/andrija
TERM=vt320
PWD=/home/andrija
TZ=MET-1METDST
LINES=25
67/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
FUNKCIJE SHELL-A
68/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
69/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
70/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
71/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Siniša Julijan
SH I BASH
72/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
UVOD
echo $SHELL
73/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
POVIJEST SHELLA
Prva važni shell bio je Bourne shell, koji je dobio ime po svom kreatoru Steve Bourne-
u. Ovaj shell je bio uključen 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 prošao,
Bourne shell je još ostao popularan i gotovo nepromijenjen. Mnogi alati i administracijske
funkcije oslanjaju se na ovaj shell.
Prvo široko rasprostranjeno alternativno okruženje bio je C shell ili csh. Ovo je
okruženje napisao Bill Joy sa Sveučilišta Kalifornije na Berkleyu kao dio Berkley Software
distribution (BSD) verzije Unix sistema, koja je izašla nekoliko godina poslije verzije 7. Ova
ljuska je uključena u sve trenutne verzije Unixa. C shell dobio je ime po sličnosti naredbi sa C
programskim jezikom. Na ovaj način Unix programeri mogu mnogo lakše 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 mogućnosti.
74/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
75/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
OPĆENITO O UNIXU
Tipovi datoteka:
obične datoteke – tekst, programi....
direktoriji – su također datoteke i to takve koje sadrže imena datoteka koje
posjeduju
specijalne datoteke – devices, pipes (da i uređaji su datoteke, pipe-ove
ćemo spomenuti kasnije)
Unix ima monorootnu (samo jedan root) strukturu file sustava (za razliku od MSDOS,
Windows gdje ima više root-ova npr. C:\, D:\ itd).
76/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
77/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
78/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
opcije –a –l –F –R ....
df – traži disk
du – ispisuje iskorištenost prostora na disku
79/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Kada radite na Unix sustavu niste prepušteni sami sebi. Za svaku naredbu postoje help
stranice tzv. man pages, koje objašnjavaju kako radi program, sintaksa ... imena autora, e-mail
adresa za prijavu eventualnih grešaka u programu podaci o copyright-u ili bolje copyleft-u te
man stranice vezane uz trenutnu, koje bi možda trebali pročitati.
Općenito
man ls
man ls | more
80/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
-a, --all
do not hide entries starting with .
81/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
* (više o njima pročitajte u seminarima kolega Mario Strinić «vi» te Matko Pejčić
«emacs»)
82/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
UNIX SHELL
Shell ili ljuska je korisnički program kojemu je osnovna namjena olakšati interakciju
korisnika i sustava. To je zapravo naredbeni interpreter koji izvršava naredbe koje korisnik
unosi pomoću 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 određene korisničke radnje.
Ako povučemo paralelu s MSDOS operacijskim sustavom shell možemo usporediti s
COMMAND.COM programom, a shell skripte su slične .bat datotekama.
Mogućnosti koje pruža shell:
• podešavanje okružja
• pisanje shell skripti
• command history (pamti unešene naredbe tokom sessiona)
• command aliases (definiranje novog imena za postojeću komandu)
• command editing
echo $SHELL
83/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
chsh /bin/bash
84/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Opći model:
wc –l file
Primjer:
ls [fF]ile[0-3]
85/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
;&()|\^~%{}$#´″'@*?[]!<Return><Space><Tab>
# komentira karakter
cd .. ; pwd
ispisuje
Primjer:
echo \\
ispisuje
86/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
ispisuje
87/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
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
cat a.txt b.txt > c.txt preusmjerava standardni izlaz u datoteku c.txt
cat c.txt >> d.txt preusmjerava standardni izlaz i dodaje na kraj datoteke d.txt
88/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Kada bismo npr. željeli saznati broj datoteka u direktoriju morati bismo napisati
otprilike slijedeće:
dakle prvo bismo ispis komande ls spremili u datoteku lista, a potom bismo istu
datoteku stavili na standardni ulaz naredbe wc. Umjesto kreiranja datoteke lista mogli bismo
standardni izlaz komande ls direktno spojiti na standardni ulaz komande wc. Tu nam pomaže
mehanizam pipe-ove (cjevovoda).
Možemo koristiti i više pipe-ova kako bismo povezali (ulančali) više komandi
Ovim nizom naredbi smo prvo dobili sadržaj direktorija dir1, dir2, i dir3, koji smo
poslali naredbi sort (na sortiranje), a potom poslali na ispis na printer.
Više o pipe-ovima možete pročitati u seminaru kolege Gorana Jurišića «Pipe i fifo».
Općenito
89/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Primjer:
90/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Procesi
Svaka komanda pozove program i pokreće ga. Za vrijeme dok je on pokrenut, zovemo
ga proces. Unix je multitasking Sustav, što znači da može pokretati više 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.
91/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Podaci o procesima:
foreground i background
Općenito:
command &
[1] 276
92/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
^Z
[stopped]
^Z
bg
fg [process -id]
Ubijanje procesa:
93/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Standardne Unix varijable se dijele u dvije kategorije, enviroment i shell varijable. Shell
varijable se odnose sa na momentalnu instancu shell-a pa su stoga i kratkoga vijeka.
Enviroment varijable imaju veću važnost, jer traju koliko i radni session, a bivaju postavljene
nakon logina. One se konvencionalno pišu velikim slovima, dok se shell varijable pišu malim
slovima.
Korisnici mogu kreirati vlastite varijable kako bi podesili svoje radno okruženje
(enviroment), ali se bitno izbjegavati podudaranje sa imenima standardnih varijabli.
Ime
Opis Uobičajena vrijednost
varijable
HOME apsolutno ime korisnikovog home-direktorija čita se iz etc/passwd
npr. /student/ivica
LOGNAME korisničko ime (npr. ivica) kojim se prijavljuje ivica
MAIL apsolutno ime direktorija gdje se nalazi inbox /usr/mail/ivica
za e-mail
PATH popis apstraktnih imena direktorija koje sustav /bin
pretražuje da bi našao i izvršio naredbe /usr/bin
SHELL apsolutno ime shell-a koju treba startati kao
login shell (npr. /bin/bash)
TERM zadaje tip terminala na kojem korisnik radi
TZ zadaje vremensku zonu i razliku od
Greenwich Mean time
94/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
echo $ime_varijable
Primjer:
echo $PATH
.:/user/openwin/bin:/user/local/bin:/user/bin
Primjer:
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 način.
Općenito enviroment i shell varijable, koje imaju isto ime, su različite i neovisne, osim
što možda imaju jednake inicijalne vrijednosti. Ipak postoje iznimke:
Svaki put kada shell varijable home, user i term promjene vrijednost dotične
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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Kao prompt prikazat će se trenutni direktorij – može smanjiti korištenje pwd komande,
a može ga se postaviti na bilo koji drugi tekst
96/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Ekspandiranje varijabli
echo $PATH
PATH=/usr/local/bin:/usr/bin:/usr/openwin/bin
PATH=.:$PATH:$HOME/bin
echo $PATH
PATH=.:/usr/local/bin:/usr/bin:/usr/openwin/bin:/home/user/bin
* user – označava bilo kojeg usera
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.
datoteka=${LOGNAME}_datoteka
97/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Svakom korisniku Unix sustava dodijeljen je set datoteka koji podešavaju standardno
radno okruženje. Od tih najvažnije su .shrc (.profile) (sh) ili .bshrc(bash), .login i .logout.
Gdje se nalaze?
Dobar način podešavanja vašeg okružja je da uvijek dodajete nove komande. Osim ako
stvarno znate što radite nemojte nikada potpuno zamijeniti njihov sadržaj.
S obzirom da se .login čita samo jedanput tokom jednog session-a, njegov smisao je
da postavi uvjete koji će važiti za cijeli session te da odradi akcije bitne samo prilikom
login-a.
.shrc ili .bshrc se koriste za postavljanje uvjeta i odrađivanje akcija prigodne za shell i
njegove instance.
98/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Nakon što napravite izmjene u datotekama neće se vidjeti njihov efekt do slijedećeg
logina. Promjene u .shrc ili .bshrc možete provesti i ranije:
% source .cshrc
Sintaksa:
Primjeri:
find .-print | grep Unix - traži sve datoteke koje sadrže string Unix
find .-print | grep '^Unix' - traži sve datoteke koje započinju sa Unix
-C broji linije
-h ne prikazuj ime datoteke
-l izlistaj samo datoteke koje sadržavaju linije sa zadanim uvjetom
-v prikaži linije koje ne zadovoljavaju uvjet
-x prikaži one linije koje u potpunosti zadovoljavaju uvjet
99/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
100/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Verzije:
awk – originalna verzija
nawk – (new awk) – poboljšani awk-a
qawk – gnu awk – poboljšani nawk
Primjer:
cat adresar.txt
John Doe 021-336699
Jane Doe 021-332211
John Smith 021-112233
awk ´
{print "Ime: ",$1,$2," Telefon: ",$3}
´adresar.txt
*(više o awk-u možete pročitati u seminaru kolege Branimira Živkovića «awk i sed»).
101/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
PROGRAMIRANJE U SHELL-U
Kao što možete pokretati komande u shell-u tako možete koristiti njegov ugrađeni
programski jezik za pisanje vlastitih komandi i programa.
Pokrenite skriptu:
./ime_datoteke
#!/bin/csh C shell
#!/bin/tcsh TC-shell
102/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Primjer 1:
#!/bin/bash
# Ova skripta daje prikaz datuma, vremena,
# username-a, trenutnog radnog direktorija
Izlaz:
Datum i vrijeme:
Sun Feb 15 23:35
Vase korisnicko ime je: user
$1-$9 - argumenti
$0 - ime komande
$# - broj argumenata
$? - exit status zadnje pokrenute komande
$$ - PID trenutne instance shell-a
$! - PID zadnje komande pokrenute u pozadini
$* - string koji sadržava sve argumente
$@ - isto kao igore, osim kada je pod navodnicima
103/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Komanda shift
Primjer:
demo_shift skripta:
Definicija Opis
$(var) isto osim što zagrade zatvaraju ime varijabli koja će biti zamijenjena
$(var-nesto) ako je definirana, vrijednost od var; inače nesto i $var nije setirana na
nesto.
104/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
if – then – else – fi
if [uvjet]
then razne_komande # if uvjet je zadovoljen (true)
else razne_komande # if uvjet nije zadovoljen (false)
fi
if.......
then....
elif....
......
fi
105/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Komanda test
if [! –f $FILE]
then
if test "$WARN"= "yes"
then
echo "$FILE ne postoji"
fi
fi
Test uvjeti:
case
case word in
pattern1) command(s)
;;
pattern2) command(s)
;;
106/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
patternN) comand(s)
;;
esac
for – do – done
Primjer
#!/bin/bash
# uspoređuje datoteke iz dva direktorija
# unesi cmpfile dir1 dir2
dir1=$1
dir2=$2
for i in $(ls $dir1)
do
echo $i:
cmp $dir1/$i $dir2/$i
echo
done
while command_list1
do
command_list2
done
107/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
until command_list1
do
command_list2
done
108/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
109/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i bash
Što se to zbilo?
nakon uspješnog 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 završi
u toj novoj instanci shell-a se exec-a ls koji preuzme streamove obavi svoje i
umre
streamovi se otvaraju prvotnom shell-u, koji očekuje novu komandu
Happy Unix user is even more happy
110/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
Marijana Ladan-Pelivanović
C SHELL, T C-SHELL
111/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
UVOD
Shell kao korisničko okruženje ima ogromne mogućnosti. Dostupne su velike skupine
programa, od tekstualnih procesora, programa za komunikaciju, administraciju sistema pa do
raznih programskih alata. Prvo široko rasprostranjeno alternativno okruženje UNIX sistema
bio je C shell. Nastao je na Berkeley sveučilištu u Kaliforniji a razvio ga je Bill Joy kao dio
Berkley Software Distribution (BSD) verzije UNIX sistema, koja je izašla nekoliko godina
poslije verzije 7 (1979). Inače C shell je dobio ime po sličnosti naredbi sa C programskim
jezikom. Oni programeri koji koriste C ili C++ najčešće programiraju u C-shellu. Kao i Korn-
Shell i C shell je produžetak sh shell-a. Tenex-C shell je poboljšana verzija C shell-a. Izvršni
program C shell-a nalazi se u datoteci /bin/csh.
112/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
# ! /bin/csh
# Sample .cshrc file
setenv EXINIT 'set smd sw=4 wm=2'
set history=50
set savhist=50
set ignoreeof noclobber
if ($?prompt) then
set prompt='[\!] % '
alias f finger -R
alias lo logout
endif
113/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
Shell naredbe su linije sastavljene od jedne ili više riječi, koje su odvojene razmakom ili
TABom. Prva riječ u liniji je naredba. Ostatak (ako ih ima) su argumenti (parametri) datoj
naredbi, a predstavljaju imena objekata na koje će naredba djelovati.
114/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
Postavljanje prompta
Kod t (csh) prompt možemo postaviti tako da u našoj .cshrc datoteci postavimo
slijedeću liniju
Ovim načinom, svaki put kada pritisnemo return, prompt će nam reći gdje se nalazimo
bez da prvo mijenjamo direktorij.
Leksička struktura
Shell dijeli ulazne linije u riječi, prazna mjesta i tabove. Specijalni karakteri kao '&', '|',
';', '<','>', '&&', '||', '<<', '>>' su uvijek odvojene riječi, bile one ili ne okružene praznim
mjestima (whitespace).
Specijalni karakteri uključujući i prazan space i tab mogu imati drugo značenje i biti dio
druge riječi, ukoliko se nalaze ispred backslash '\' ili jednostukog " ili dvostrukog "" navoda.
115/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
Aliasi
alias novoime=naredba
Varijable
Za vrijeme rada shell pohranjuje tzv. shell varijable. Varijable u C shellu su definirane
korištenjem interne set naredbe. C shell podržava varijable okoline (environment varijable) i
varijable same ljuske.
set ime=vrijednost
Neke od najčešće korištenih varijabli: logname, home, path, mail, term automatski se
uključuju i u okolinu nakon ove naredbe, pa za njih nije potrebno upotrebljavati setenv.
Prilikom uključenja u okolinu, imena ovih varijabli se pišu velikim slovima npr. PATH.
116/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
Setenv izlistava okolinu koja se predaje programima, dok set daje popis svih varijabli
koje poznaje sama ljuska.
Varijable u C shell-u možemo koristiti pisanjem znaka $ prije imena varijable. Ili ako su
varijable napisane kao varijable stringova onda koristimo zagrade. Postojanje varijabli
provjeravamo upisivanjem
$?variable
Primjeri:
set i=15
setj=20
echo$k
117/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
118/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
Povijest naredbi
History substitution
% !! < Enter>
119/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
% infinite
< Ctrl > Z
% bg
fg [%job] Naredba za prebacivanje procesa iz pozadine u radni (foreground). Primjer:
% infinite &
% fg % infinite
stop [%job] Prekida proces koji se izvršava u pozadini. Primjer:
% stop % infinite
<Ctrl> C Prekidanje trenutnog procesa.
120/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
Praćenje Signala
Pozivanje funkcije
function ime {
naredbe
}
ili
ime ( ) {
naredbe
}
argc je broj argumenata navedenih kod poziva programa, a argv je niz od argc
pokazivača na te argumente kao nizove znakova. Prvi od tih nizova je ime samog pozvanog
programa. envp je niz pokazivača na nizove znakova oblika "ime=vrijednost" koji čine
okolinu. Posljednji pokazivač je NULL.
121/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
Također, program koji ne koristi nikakve ulazne parametre može definirati main kao:
main treba vratiti cjelobrojnu vrijednost jer poziv možemo pojednostavljeno zamisliti
kao:
exit(main(argc, argv, envp));
Ako program završava pozivom exit na nekom mjestu, onda ne dolazi do povratka iz
main. Međutim, ako main normalno završava, onda je potrebna povratna vrijednost koja će
postati argument poziva exit.
122/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
Redirekcija
Mehanizam redirekcije omogućava kombiniranje osnovnih naredbi (npr. cat, grep, sort,
cut,tr) u cilju obavljanja složenih operacija.
Osnovni tipovi redirekcije (preusmjeravanja):
>>&
<<
cat<<EOF čita iz tijela datoteke tipkam...... EOF
123/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
Piping
Ako napišemo
124/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
Prva grep naredba izlista sve tux rečenice kao output. Znak | vrijednosti iz outputa
prenosi na input slijedeće naredbe, koja je također grep naredba. Druga grep naredba pregleda
sadržaj inputa u potrazi za rečenicama koje sadrže riječ Uni u sebi. Naredba grep na ovaj
način se koristi kao filter.
stout stdin
naredba1 naredba2
% naredba1 | naredba2
Shell i neki tekst procesori dozvoljavaju zamjenu meta-karaktera ili wild cards
specijalnim znacima.
? Zamjenjuje samo jedan znak. Primjer:
% ls prim?.c
prim1.cprim2.c
% ls ?ead Ispisuje sve datoteke koji imaju 4 znaka i koji završavaju sa "ead"
* Zamjenjuje bilo koji string. Primjer:
% ls *.c
prim1.c prim2.c primer.c
% ls * Ispisuje sve datoteke trenutnog direktorija
% ls *ing Ispisuje sve datoteke trenutnog direktorija koji završavaju sa "ing"
[lista] Zamjenjuje bilo koji znak u listi Primjer:
% ls [blm] ead >bead, lead, mead
[x-y] Zamjenjuje bilo koji znak u rangu od x do y. Primjer:
% ls srce[a-g].c
srceb.c srced.c
125/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
Regular expressions
Neki tekst procesori kao grep, egrep, sed, awk i vi omogućavaju pretraživanje pattern-a
umjesto fiksnih stingova. Takvi tekstualni modeli (pattern) su poznati kao regular
expressions.
126/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
izvršiti:
/bin/sch [-vh] script_name args ...
ili:
% chmod +x script_name
% script_name args...
Primjer: Ekvivalentno:
echo $argv echo $*
Kontrola toka
Omogućuje kontrolu izvršavanja scripta pomoću konstrukcija kao što su petlje, uvjetne
naredbe i sl.
127/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
else
naredba
endif (za postojanje i else)
Provjera datoteka:
if ( -c filename) then
....
gdje je -c :
-
Istinito ako korisnik koji izvršava script može čitati datoteku.
r
-
Istinito ako korisnik koji izvršava script može pisati u datoteku.
w
-
Istinito ako korisnik koji izvršava script može izvršavati datoteku.
x
-
Istinito ako datoteka postoji.
e
-
Istinito ako je korisnik koji izvršava script vlasnik datoteke.
o
-
Istinito ako je datoteka prazna.
z
-
Istinito ako je direktorij.
d
128/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
default: cc $2
naredba breaksw
breaksw endsw
endsw
GOTO
loop:
naredba
goto loop
129/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
INTEGER ARITMETIKA
Logički operatori
130/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
cd [name], chdir
Promjena trenutnog direktorija
[name]
history
kill
repeat count
Ponavlja naredbu count puta.
command [args...]
Pomjera riječi u varijable u lijevo. Prva riječ se gubi. Anko nije definirano
shift [varijable]
ime varijable, korist se argv.
stop [%job]
131/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
unset pattern Resetuje sve varijable čija imena odgovaraju patternu. unset* resetuje sve
Komentari i izlaz
exit [status]
132/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
T C SHELL (TENEX-C-SHELL)
Start-up Tcsh
Tcsh
Interaktivan Neinteraktivan
Login No-Login
133/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
/etc/csh.cshrc
$HOME/.tcshrc
logout
/etc/csh.logout
$HOME/.logout
user@sunce>tcsh -l
sunce/home/user>set autologout =1
#Nakon 1 min. ne događanja ništa
user@sunce>auto-logout
Podešavanje prompta
134/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
2. prompt2: "Nastavak prompta" javlja se kod nepotpune while ili foreach petlje kao i
poslije linija koje završavaju \.
3. prompt3: Ovaj prompt se javlja samo u slučaju greške i nudi malu pomoć kroz tcsh.
Primjer:
echo $ar[tab]
echo $argv (ukoliko niti jedna druga varijabla ne počinje sa ar.)
135/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
Primjer:
>ls/usr/l[^D]
lbin/ lib/ local/ lost+found/
>ls/usr/l
>set autolist
>nm/usr/lib/libt[tab]
libtermcap.a@libtermlib.a@
>nm/usr/lib/libterm
Definiranje listi
136/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C shell, T C-shell
Primjer:
Moguće je odgovoriti sa 'y' ili pritisnuti space tipku kako bi ispravili liniju, 'e' ostaviti
naredbu neispravljenu u ulaznom baferu ili 'a' za prekid naredbe.
Uz pomoć interne naredbe sched naredbe možemo izvoditi u određeno vrijeme ukoliko
shell nije zatvoren.
137/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
Predrag Jovanović
SHELL PROGRAMIRANJE
(shell i bash)
138/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
UVOD
Shell se pokreće nakon uključivanja računala kao zadnji korak boot procesa.Odmah po
uključivanju računala Linux-ov boot proces obavlja niz radnji kako bi kontrolu nad sustavom
predao korisniku.Prva faza je učitavanje jezgre odnosno alociranje računalnih uređaja i kada
se jednom starta kernel on ostaje u memoriji tokom čitavog rada računala odnosno do
nestanka napajanja.Druga faza je identifikacija korisnika kako bi bilo moguće kontrolirati
određena prava korisnika na sustavu.U tu svrhu se pozivaju dva programa, a to su «getty» i
«login».Prvi ima funkciju osiguravanja portova odnosno komunikacijskih kanala prema
korisniku.Ti kanali se u linux-u označavaju kao «tty» s rednim brojem iza toga.Getty prima
niz znakova s tipkovnice i prosljeđuje ga programu login,koji na osnovu tog niza znakova za
koji pretpostavlja da je korisničko ime (username) korisniku dodjeljuje njegova korisnička
prava i dozvole (permissions), a zatim se zahtjeva od korisnika unos lozinke (password).Ako
password ne odgovara postojećem korisniku,onda login ponovo vraća kontrolu programu
getty,a ako je identifikacija uspješna program login starta shell program.
Funkcije shella
139/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
#!/bin/bash
140/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
primjer 01:
#!/bin/bash
# je oznaka za komentar
echo Moja prva skripta
opcije:
+ dodaje dozvolu
- uklanja dozvolu
r postavlja dozvolu za čitanje
w postavlja dozvolu za pisanje
x postavlja dozvolu za izvršavanje
u postavlja dozvolu za korisnika koji je kreirao datoteku
g postavlja dozvolu za grupu korisnika
o postavlja dozvolu za sve ostale korisnike sistema
a postavlja dozvolu za korisnika,grupu i sve ostale
141/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
Argumenti skripte
Shell skripta kao i naredbe može imati argumente.Pri pozivu skripte poslije imena mogu
se unositi argumenti.Vrijednosti argumenata mogu se koristiti unutar skripte korištenjem
operatora $ i broja.Prvi argument $1,drugi $2 itd. Specijalno $0 sadrži 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 “Treći unijeti argument je: $3”
Varijable
142/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
primjer 02:
#!/bin/bash
str="Moja druga skripta!"
echo $str
lokalne varijable
primjer 03:
#!/bin/bash
var=”shell “
function fun{
local var=”programiranje”
echo $var
}
echo $var
fun
echo $var
Funkcije
Bash nam omogućava grupiranje koda u cjeline pomoću funkcija.One rade na sličan
način kao kod programskih jezika.Funkcije nam daju mogućnost da neki dio koda ako se radi
o većoj količini,ne ponavljamo nekoliko puta.Funkcije se pozivaju njihovim imenom I
moguće ime proslijediti argumente.
Sintaksa:
ime_funkcije() {
naredbe
}
143/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
Naredba echo šalje podatak na standardni izlaz,a naredba read upisuje podatak u
varijablu.
primjer 04:
#!/bin/bash
echo Unesite Vaše ime:
read ime
echo “$ime,kako ste!”
Eksportiranje varijabli
Sve definicije varijabli unutar određene skripte su dostupne samo toj skripti.Međutim
ako želimo da su varijable definirane u skripti,vidljive i u nekoj drugoj skripti koja se poziva
iz tekuće,moramo koristiti naredbu export koja će osigurati kopije varijabli za sve skripte koje
se pozivaju iz tekuće.
primjer 05:
#!/bin/bash
var1=”ime_osobe”
export var1
druga_skripta
#!/bin/bash
var2=”prezime_osobe”
echo “$var1 $var2”
144/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
dakle kada se iz tekuće skripte pozove druga_skripta bit će joj proslijeđena kopija
varijable var1 i moći će ju koristiti unutar svog shella.
Naredba let je bash shell naredba koja se koristi za izvršavanje operacija nad
aritmetičkim vrijednostima.Naredba let može se inicirati ključnom riječi let ili postavljanjem
dvostrukih zagrada.Pridruživanje vrijednosti se kombinira s aritmetičkim izrazom,također se
mogu koristiti i operatori usporedbe.
Sintaksa:
let vrijednost1 operator vrijednost2
primjer 07:
#!/bin/bash
let “rez = 2 * 7”
echo $rez
-ako se želi koristiti razmak između operanada mora se sve stavit pod navodnike.
145/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
* množenje
/ dijeljenje
+ zbrajanje
- oduzimanje
% ostatak cjelobrojnog dijeljenja
Relacijski operatori
> veće od
< manje od
>= veće ili jednako
<= manje ili jednako
= jednako za naredbu expr
== jednako za naredbu let
!= različito
& logički AND
đ logički ILI
! logička negacija
Naredba test
146/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
primjer 08:
#!/bin/bash
num=5
test $num –eq 10
echo $?
rezultat: 1
Kao alternativa postoji mogućnost da umjesto ključne riječi test koristimo zatvorene
uglate zagrade [ ],tada bi linija test $num –eq 10
izgledala ovako:
[ $num -eq 10]
-gt veće od
-lt manje od
-ge veće ili jednako
-le manje ili jednako
-eq jednako
-ne različito
147/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
Logičke operacije
-a logički AND
-o logički OR
! logička negacija
Testovi za datoteke
-f datoteka postoji,obična je
-s datoteka nije prazna
-r može se čitati
-w moguće pisanje u datoteku
-x moguće izvršavanje datoteke
-d ime datoteke je direktorij
-h ime je simbolički link
-c ime je oznaka uređaja
-b ime je blok datoteka
Kontrolne strukture
Bash shell ima skup kontrolnih struktura koje nam omogućavaju kontrolu toka
programa,odnosno redoslijed izvršavanja naredbi.
Uvjetna struktura If testira uspješnost izvođenja shell naredbe,a ne izraza kao u većini
programskih jezika.
If…then struktura mora završiti s ključnom riječi fi
if…then
Sintaksa: if naredba then
naredba
fi
if…then…else
148/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
primjer 08:
#!/bin/bash
if [ "bash”=”bash" ]; then
echo izraz se izračunao u true
fi
primjer 09:
#!/bin/bash
if [ $# -ne 1 ]; then
echo Netočan broj argumenata
exit 1
fi
echo $1
primjer 10:
#!/bin/bash
if [ "bash”=”shell" ]; then
echo izraz se izračunao u true
else
echo izraz se izračunao u false
fi
primjer 11:
#!/bin/bash
echo Unesite s za ispis datoteka prema veličini
echo inače ce se ispisati sve informacije
149/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
Petlje: while,until,for-in,for
Bash shell posjeduje kontrolne strukture petlje koje nam omogućavaju ponavljanje
naredbi.Poput bash if strukture,while i until ispituju rezultat naredbe.
Međutim,for i for-in strukture ne izvršavaju testove,već prolaze kroz niz
vrijednosti,dodjeljujući svaku vrijednost varijabli.
For-in petlja
150/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
primjer 12:
#!/bin/bash
for var in *.c
do
cp $var mybackup/$var
echo $var
done
primjer 13:
#!/bin/bash
for i in `seq 1 10`;
do
echo $i
done
While petlja
Petlja while ponavlja naredbe.Počinje ključnom riječi 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
while [ “$str” = da ]
do
echo –n “Unesite Vase ime:”
read ime
echo “Postovanje, $ime”
echo –n “Zelite li ponoviti:”
read ime
done
echo Ok
primjer 16:
#!/bin/bash
brojac=1
while let “brojac <= 4”
do
echo $brojac shell
let “brojac = brojac + 1”
done
For petlja
Struktura for bez određene 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 pomoću $@.
$@ je specijalna varijabla čija vrijednost predstavlja listu argumenata komandne linije.
primjer 17:
#!/bin/bash
for var
do
152/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
cp $var mybackup/$var
echo $var
done
primjer 18:
#!/bin/bash
echo “Unijeli ste $# argumenata”
for var in $*
do
echo $var
done
primjer 18:
#!/bin/bash
echo “Unijeli ste $# argumenata”
153/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
Case
Kontrolna struktura koja nam omogućava izbor između više opcija.Izbor se donosi
usporedbom vrijednosti sa ponuđenim vrijednostima.Struktura započinje ključnom riječi case,
zatim izračunavanje vrijednosti varijable,pa in. Zatim slijede opcije iza svake ide ),naredbe,pa
;; *) defaultna opcija. I ključna riječ esac na kraju.
154/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
Sintaksa:
case string in
opcija1)
naredbe
;;
opcija2)
naredbe
;;
*)
naredbe
;;
esac
primjer 19:
#!/bin/bash
# Program koji korisniku omogućava različit
# način za izlistavanje datoteka
echo s. ispis datoteka prema veličini
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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
c)
ls *.c
;;
*)
echo Niste unijeli nijednu od opcija
esac
Kontrolne strukture možemo promatrati kao naredbe koje rezultat operacija šalju na
standardni izlaz.Izlaz je moguće preusmjeriti u drugu naredbu,program ili datoteku.U
kontrolnoj strukturi for-in možemo postaviti operator (>) koji služi za preusmjeravanje,
odmah poslije ključne riječi done kako bi izlaz petlje preusmjerili u datoteku.
primjer 20:
#!/bin/bash
artikli=”med jabuke sir voće”
for var in $artikli
do
echo “$artikli”
done > hrana
Pipeline je standardni kanal na koji podaci ulaze ili izlaze,stoga govorimo o pipeline-u
kao vrsti redirekcije standardnog inputa i outputa.Pomoću ove konekcije možemo vrlo
jednostavno izlaz jednog programa preusmjeriti na ulaz drugog programa.
primjer 21:
#!/bin/bash
for var in *.c
do
156/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
cp $var mybackup/$var
echo $var
done | sort > cdat
u ovom primjeru naredba echo ispisuje imena svih datoteka s .c ekstenzijom,a imena
datoteka se prosljeđuju do filtra za sortiranje koji sortira imena prije preusmjeravanja.
Trap struktura izvršava naredbu ili naredbe kada se dogodi određeni događaj.
Događaj se može dogoditi u bilo kojem trenutku u toku izvršavanja programa.Ovi
događaji se obično nazivaju signalima.Kada sustav primi signal,izvršava se trap i kontrola se
prenosi na naredbu dodijeljenu trap strukturi.
primjer 21:
#!/bin/bash
trap ‘echo Prekid program; rm cdat; exit 1’ 2
157/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
echo $var
done | sort > cdat
158/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
ZAKLJUČAK:
Linux-ov shell (bash) nije grafički orijentiran i za sve operacije koje želimo izvršiti nad
operativnim sustavom moramo poznavati naredbe kao i njihove formate argumenata.To je
naravno puno teže od GUI pristupa ali za neke operacije shell je jednostavno nužan i pruža
velike mogućnosti manipulacije nad sustavom kakve GUI ne pruža.Na primjer uzmimo neki
sustav koji isključivo koristi GUI za komunikaciju korisnika sa operativnim sustavom.Kada
se dogodi problem koji je prouzrokovao,na bilo koji način grešku u radu hardware-a ili
software-a odgovornog za rad grafike na računalu,što se često događa,čak i ti operativni
sustavi predlažu nakon što dožive kolaps,startanje svojevrsnog shell-a (command prompt-a)
za rješavanje problema sustava na nekom nižem nivou,bližem samim komponentama
računala.
Što se tiče pisanja skripti u shell-u,zaključak bi bio da se pisanjem skripti može postići
znatna ušteda u vremenu i smanjenje vjerojatnosti pogrešaka.
Jednostavno ako svaki dan odrađujemo slijedno određene akcije nad sustavom i na to
trošimo određeno vrijeme, trebalo bi razmisliti da li bi mogli napisati skriptu koja bi to
odrađivala za nas. Dakle imamo prednosti pisanja skripti: kreiranje vlastitih skripti za
obavljanje određenih zadataka, ušteda vremena, smanjuje se mogućnost pogreške,
automatizacija svakodnevnih zadataka, automatizacija administrativnih poslova time
povećana produktivnost.
159/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva
Marko Vuković
160/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
Sposobnost rada sa shell scripting-om je nužno svakom tko želi biti razumno efektivan
sistem-administrator, čak i ako nije stručan u pisanju script datoteka. Shvatimo to ovako: kad
se Linux računalo starta, ono pokreće script kôd u /etc/rc.d sa svrhom da nanovo postavi
konfiguraciju sustava i početnih usluga. Detaljno poznavanje ovog startup script kôda je
važno prilikom analiziranja ponašanja cjelokupnog sustava, i ako je to moguće: modificiranja
istog.
Pisanje script kôda nije teško za naučiti, budući da script kôd može biti upisan u
memorijske sekcije veličine jednog byte-a, i također postoji razmjerno malen set operacija i
naredbi koje su specificirane kao shell, koji nije teško shvatiti. Sintakse su jednostavne i
izravne, slične onima koje pozivaju ili povezuju razne segmente kôda u komandnoj liniji.
Postoji još i nekolicina pravila koja se također moraju naučiti. Većina kraćih kôdova radi
besprijekorno prvi put, a i otklanjanje grešaka kod dužih vrši se kratko i izravno, ali samo
zbog jednostavnosti kôda, budući da BASH ne sadrži nikakve debugging programe. No, o
tome kasnije.
Shell script kôd je "brza i prljava" metoda stvaranja prototipova složenih aplikacija.
Mogućnost rada čak i sa ograničenom funkcionalnošću često se smatra korisnom prvom
stranicom u razvoju projekta. Na ovaj način, struktura aplikacije se može testirati i
isprobavati, prije nego što se konačno kôdira u C++, Java-i ili Perl-u.
Shell scripting se drži klasične UNIX filozofije razbijanja složenih projekata u
jednostavnije podzadatke, i povezivanja komponenti i segmenata kôda. Mnogi smatraju ovaj
pristup boljim, ili barem estetskijim pristupom u rješavanju problema, od korištenja jednog od
"sve-u-jednom" jezika nove generacije (Perl), koji funkcioniraju na način da bude pristupačan
svakom korisniku, a što traži od zahtjevnijeg korisnika prilagođavanje svojeg načina
razmišljanja odgovarajućem programskom alatu.
161/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
cd /var/log
cat /dev/null > messages
cat /dev/null > wtmp
U ovom primjeru nema ništa neočekivano, samo set naredbi koje mogu lako biti
izvršavane jedna po jedna izravno iz komandne linije radne konzole. Prednost stavljanja
naredbi u sript kôd ide dalje od primitivnog načela uštede truda i vremena kod tipkanja. Script
kôd lako može biti modificiran, izmijenjen, prilagođavan i generalno može ga se učiniti
pristupačnim za neku određenu aplikaciju.
162/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
Nakon što je script kôd postao izvršiv, može se testirati upisivanjem naredbe
./scriptname. Ukoliko nema problema u sintaksi, izvršavanjem kôda poziva se pravilni
prevodilac naredbi i obrađuje kôd.
Za zadnji korak, nakon testiranja i eventualnog otklanjanja grešaka, korisnik bi se
mogao odlučiti za pomicanje datoteke u /usr/local/bin (kao root direktorij), tako da
omogući pristup datoteci (kôdu) na način da bude izvršna i dostupna u cijelom sustavi. To se
odnosi na sve korisnike. Datoteka se jednostavno ozvršava pozivanjem: scriptname
[ENTER] iz komandne linije.
BASH shell ne sadrži nikakav poseban debugger, niti ima specificirane naredbe za
otklanjanje grešaka. Greške u sintaksi ili pogreške u pisanju generiraju šifrirane poruke o
grešci koje često nimalo ne pomažu u otkrivanju grešaka nefunkcionalnog kôda. To je,
nažalost, jedna od mana ovog jezika.
163/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
Poznavanje rada sa varijablama čini jezgru svakog programiranja kao što i one čine
jezgru svakog programskog jezika. Pojavljuju se u aritmetičkim operacijama i kvantitativnim
zadatcima, radu sa znakovnim nizovima, i nezamjenjive su u radu sa simbolima. No, varijabla
nje ništa više od memorijske lokacije ili seta memorijskih lokacija koje sadrže nekakvu
informaciju.
Referenciranje varijabli
Ime varijable je oznaka za njenu vrijednost, informaciju koju drži 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 sadrži. Jedini put kad se varijabla pojavljuje bez reference, bez prefiksa
$, jest kad je deklarirana ili pridružena, kad nije postavljena, kad se koristi u "export" načinu
rada ili u posebnim slučajevima kad avrijabla predstavlja signal. Pridruživanje može biti sa '='
znakom, u naredbi read i na početku petlje.
Zatvaranje referencirane vrijednosti pod dvostrukim navodnicima (" ") se ne
sukobljava sa zamjenom varijabli. Ovaj način se zove djelomični navod, nešto kao "slabi
navod". Korištenje jednostavnih navodnika (' ') koristi ime varijable doslovce, i supstitucija
nije moguća. 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 greškom, preporuča se korištenje duže
forme.
164/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
Deklaracija varijabli
echo
a=879
echo "vrijednost varijable \"a\" je $a."
let a=16+5 #pridruzivanje koristenjem 'let'
echo "vrijednost varijable \"a\" sada je $a."
echo
#!/bin/bash
a=375
hello=$a
echo hello
echo $hello #identicno kao i: echo ${hello}
echo "$hello"
echo "${hello}"
echo
hello="A B C D"
echo $hello # ispis: A B C D
echo "$hello" # ispis: A B C D
165/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
echo
echo '$hello' # ispis $hello
# ovdje uocavamo efekte
# razlicitih tipova navoda
echo
exit 0
166/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
167/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
Naredba exit
Naredba exit se može koristiti za prekidanje izvršenja kôda, kao u programu u C-u.
Također može vratiti vrijednost, koje je neophodna u izvršavanju "roditelj"-procesa.
exit status
Svaka naredba vraća izlazni status znan kao exit status (negdje u literturi je
označen i kao return status). Uspješno izvršena naredba vraća nulu (0), dok neuspjela
naredba vraća broj različit od nule koji uglavnom označava broj greške (engl. error code).
Uspješno izvršene UNIX naredbe i programi vraćaju nulu kao izlazni status nakon uspješnog
kompletiranja, iako postoji i par iznimaka.
Uvjetne naredbe
Svaki kompletan programski jezik sadrži set nekakvih uvjetnih naredbi koje se
izvršavaju u skladu sa zadanim uvjetom. BASH ima naredbu test, razne operatore koji
koriste uglate i vitičaste zagrade, i if/then konstrukciju.
Uvjetne konstrukcije
168/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
Naredba test ispituje tipove datoteka i uspoređuje nizove.Postoji još i naredba elif
kao sinonim za else if. Željeni efekt je gniježđenje jedne konstrukcije (unutarnje)
if/then unutar druge (vanjske).
169/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
PETLJE I GRANANJE
Petlje
Petlja je odsječak kôda koji iterira zadani set naredbi (ponavlja se) dokle god je
konrolni uvjet petlje istinit. BASH se u ovome ne razlikuje bitno od C-a. Sadrži naredbe for
(in), while, until, koje se koriste u kombinaciji sa do i done koje označavaju početak i
kraj odsječka vezanog uz petlju. Princip petlje je dakle, kao i u ostalim programskim jezicima
isti, pa će ovdje biti spomenuto nešto općenito o petljama, vezano za sam pojam petlje.
Kontrolne naredbe break i continue rade na istom principu kao i u ostalim
jezicima. Naredba break prekida izvršavanje petlje, dok naredba continue radi skok na
slijedeću iteraciju petlje, preskačući ostatak kôda u trenutnom ciklusu petlje.
Konstrukcije case (in)/esac i select tehnički ne predstavljaju petlju, budući da
ne iteriraju izvršavanje određenog programskog odsječka. Međutim, one, poput petlji,
diktiraju smjer izvršenja programa, ovisno o uvjetima zadanima na početku ili kraju bloka.
Naredba case (in) obavlja grananje na jedan od nekolicine programskih odsječaka, ovisno
o uvjetu. Služi kao prečica za višestruke 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
Ugnježđene petlje
Ugnježđena petlja je petlja unutar petlje, tj. unutarnja petlja u bloku vanjske petlje. Tu
se dešava da prvi prolaz kroz vanjsku petlju pokreće i unutarnju, koja se izvršava do kraja.
Slijedeći prolaz kroz vanjsku petlju opet aktivira unutarnju. Ovo se ponavlja dok se vanjska
petlja ne izvrši do kraja. Naravno, naredbom break možemo u svakom dijelu vanjske ili
unutarnje petlje utjecati na prijevremeni prekid iterativnog procesa.
171/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
Builtin (engl. builtin – ugrađeno) je naredba koja je sadržana unutar BASH-ovog seta
naredbi, dakle doslovce ugrađena u programski jezik. One postoje isključivo zbog efikasnosti
– izvršavaju se brže od eksternih naredbi, koje obično zahtijevaju račvanje posebnog procesa,
ili zbog toga što određene builtin naredbe trebaju izravan pristup samom jeziku.
Kad se neka naredba ili shell inicijaliziraju zbog izvršavanja nekog podzadatka, taj
proces se zove račvanje. Novi proces koji je nastao se naziva "dijete", a proces koji je
pokrenuo račvanje "roditelj". Dok "dijete" - proces obavlja svoj posao, "roditelj" je još u
postupku izvršavanja.
Generalno gledano, BASH builtin naredba ne kreira podzadatak, sve dok se izvršava
unutar nekog kôda. Eksterni sustav naredbi ili nekakav filter unutar kôda obično znaju
generirati podzadatke.
Builtin je također sinonim za sistemsku naredbu istog imena, međutim BASH ju
interno reimplementira. Npr. BASH naredba echo nije isto što i /bin/echo, iako je
ponašanje tih dviju naredbi skoro identično.
Postoje još i ključne riječi. To su razne riječi i interpunkcijski znakovi. One imaju
posebno značenje za shell, i neke predstavljaju granice programskih odsječaka sintakse nekog
kôda. Npr. sve uvjetne konstrukcije i ono što ide uz njih predstavljaju ključne riječi. Slično
kao i builtin-ovi, ključna riječ je implementirana u BASH-u, ali za razliku od builtin naredbe,
ona sama po sebi nije naredba, već dio veće komandne strukture.
Ni kod pregleda internih naredbi se BASH ne razlikuje previše od ostalih jezika.
Nabrojimo neke I/O naredbe koje su implementirane u ovom jeziku: echo, printf, read,
zatim naredbe za rad sa datotekama: cd, pwd, pushd, popd, dirs, pa rad sa varijablama:
let, eval, set, unset, export, typeset, declare, readonly, getopts, rad sa
kôdom: source, exit, exec, shopt.
Recimo nešto i o eksternim naredbama, a u kontekstu internih naredbi. Standardne
UNIX naredbe čine shell script kôd svestranijim. Vrlina BASH-a jest kombiniranje internih
naredbi sa jednostavnim konstrukcijama programa. Standardnih naredbi ima više vrsta.
Možemo ih podijeliti po karakteru, po načinu rada, po složenosti... Po složenosti se dijele na:
osnovne (ls, cat, chmod,...), te složene naredbe (expr, find, xargs,...). Po načinu rada
na naredbe za rad sa vremenom i datumom, za procesiranje teksta, za rad sa datotekama, za
matematičke operacije, itd.
172/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
ARITMETIČKO PROŠIRIVANJE
n = 0
echo "n = $n" # n = 0
173/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
174/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
I/O PREUSMJERAVANJE
Naredba exec
175/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
176/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
PODZADATCI (Subshell-ovi)
Definicija podzadatka
Učitavanje shell datoteke ili kôda aktivira još jedan segment komandnog procesora.
Kao što se zadane naredbe interpretiraju u komandnoj liniji, slično se dešava i u procesu
izvršavanja seta naredbi u datoteci. Svako pokretanje shell script kôda je, općenito,
podzadatak nekog procesa "roditelja", početnog procesa iz kojeg je račvanjem nastao.
"Roditelj" proces je vidljiv na konzoli ili xterm sučelju. Međutim, shell script proces također
može i stvarati podzadatke. Takvi podzadatci se izvršavaju paralelno, što kao posljedicu daje
izvršavanje više procesa istodobno.
Ovdje se za preusmjeravanje I/O podataka u podzadatak koristi tzv. pipe operator, tj. "|".
177/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
ZAKLJUČAK
178/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
REGEX
179/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
REGULAR EXPRESSIONS
((pravilni | regularni) izrazi)
Oko 1940. godine dva su neuropsihologa, Warren McCulloch i Walter Pitts, razvila
modele za koje su vjerovali da predstavljaju rad živčanog sustava na razini neurona. Postoji
veliki broj različitih realizacija neuronskih mreža, a samim tim postoji i mnogo podjela.
180/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
MODEL NEURONA:
181/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
vi X X X X X
visual c++ X X X X X
awk X X X X X X X X
sed X X X X X X
Tcl X X X X X X X X X
Ex X X X X X X
grep X X X X X X
egrep X X X X X X X X X
fgrep X X X X X
Perl X X X X X X X X X
182/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
grep je program koji na ulaznoj datoteci uspoređuje uzorak koji smo mu predali.
Uzorak se uspoređuje sa svakom linijom u datoteci. Linije u kojima imamo pogodak se
ispisuju ili broje, ovisno o opciji koju smo uključili pri pokretanju programa. više o tome:
man grep.
Program grep ima nekoliko različitih verzija:
egrep za proširene regularne izraze.
fgrep koristimo kad želimo raditi usporedbu samo prema nekom fiksnom
uzorku.
sed:
Supstitucija u sed-u: sed 's/uzorak1/uzorak2/ ' file
vi:
vi [options] [file]
vi ili vim (vi improved) je text editor koji se može koristiti za uređivanje bilo
kakvog teksta. Najviše se koristi za uređivanje programa.
183/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
184/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
Postoje dvije vrste regEx generatora: text – directed engines, regEx – directed engines.
Jeffrey Friedl ih je u knjizi "Mastering regular Expressions" nazvao DFA i NFA engines.
Razlika između text-directed generatora i regEx-directed generatora je u tome što je
regEx-directed nedeterministički , a text-directed deterministički.
RegEx – directed generator uvijek vraća najljeviji pogodak, čak i ako ga kasnije čeka
bolji pogodak. Kad uspoređujemo regularni izraz sa stringom, generator će početi na prvom
znaku stringa. Pokušat će usporediti sve permutacije izraza (ovisi o izrazu), svaki put istim
redoslijedom.
Rezultat toga je da regEx-directed generator uvijek vraća najljeviji pogodak.
Kad uspoređujemo regEx "cat" sa stringom "He captured a catfish for his cat.", regEx –
directed generator će usporediti prvi znak regEx-a 'c' s prvim znakom iz stringa 'H'.
Dešava se promašaj. Pošto ne postoje ostale permutacije na tom "mjestu" regEx-a
(regEx "cat" je običan niz znakova. Imali bi permutacije da, na primjer, pokušavamo
usporediti regEx [cb]at), parser nastavlja usporedbom 'c' na drugi znak stringa 'e'.
Promašaj, i isto na usporedbi sa spaceom. Dolazimo do 4. znaka stringa, 'c' pogađa 'c' .
Generator sada pokušava usporediti sljedeći znak regEx-a 'a' s 5. znakom stringa 'a'. Pogodak,
ali na 6. znaku stringa 't' ne pogađa 'p'. Generator sada zna da regEx ne može pogoditi string
počevši na 4. znaku. Nastavlja gdje je stao, a to je na 5. znaku stringa 'a'. Dešava se promašaj i
nastavlja se dalje.
Na 15. znaku stringa imamo pogodak: 'c' pogađa 'c' , 'a' pogađa 'a', 't' pogađa 't'.
Potpuni pogodak ("cat" vs. "catfish") i generator je zadovoljan.
Pošto se radi o pohlepnom generatoru, nema nastavka usporedbe, bez obzira na to što
kasnije u stringu postoji bolji rezultat ("cat" vs. "cat"). Za pohlepni algoritam "cat" vs.
"catfish" je na boljem mjestu.
185/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
. ^ $ * + ? { }[ ] \ | ( )
186/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
Sada imamo vraćanje (backtracking) prema početku sve dok ne nađe prvi broj 2
(gledajući s desna na lijevo).
Zahvaćeni string će biti "abcdrefghfds789254gfhh2".
187/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
\d \D \w \W \b \B \s \S \< \> \A \Z
188/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
Osnovni primjeri
(sintaksa zamjenskih znakova, sintaksa specijalnih nizova)
A.A Zahvaća bilo koji troslovni niz znakova koji počinje i završava s A.
PRIMJER:
PRIMJER:
189/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
PRIMJER:
D\d*A zahvaća string koji između znakova D i A nema nijednu ili ima više
znamenki
PRIMJER:
190/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
D\d+A zahvaća string koji između znakova D i A ima jednu ili više znamenki
PRIMJER:
25?6 zahvaća string koji poslije 2 nema nijedan ili ima jedan broj 5 i završava sa 6
PRIMJER:
2(5{2, 4})9 zahvaća sve stringove koji počinju s 2 i imaju min 2 i max 4 broja 5, a
sekvenca broja 5 završava s 9
PRIMJER:
191/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
PRIMJER:
\.\*.*\\ zahvaćeni stringovi su svi oni koji za prvi znak imaju '.', zatim '*'
te nula ili više bilo kojih znakova i završavaju znakom '\'
PRIMJER:
192/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
rib(a | e) zahvaća string koji kao prva tri znaka ima "rib", a kao četvrti znak ima
'a' ili e
(c|C)$ zahvaća linije koje završavaju s c ili C
PRIMJER:
(\w\.)(.\d) zahvaća sve one koji počinju slovom, brojem ili underscoreom te kao drugi
znak imaju točku, pa bilo koji znak i nakon toga znamenku
PRIMJER:
193/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
'\d' = [0-9]
PRIMJER:
'\D' = [^0-9]
^\D\d\d zahvaćene su sve linije koje počinju bilo kojim znakom osim
broja, a nakon toga imaju dvoznamenkasti broj
PRIMJER:
194/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
'\w' = [0-9a-zA-Z_]
\w\d\d\w zahvaća sve one nizove znakova koji kao prvi znak imaju broj, slovo ili
'_', kao drugi i treći znak imaju dvoznamenkasti broj, a zadnji znak imaju isti kao i prvi
PRIMJER:
'\W' = [^0-9a-zA-Z_]
\d\W\d zahvaća sve one nizove znakova koji kao prvi znak imaju za broj, kao
drugi znak ne smiju imati broj, slovo ili '_', a kao zadnji znak moraju imati broj
PRIMJER:
195/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
[0-9]\b zahvaća sve "riječi" koje kao prvi i zadnji znak imaju broj
PRIMJER:
[0-9]\B zahvaća sve riječi koje nemaju znamenku kao prvi i zadnji znak
PRIMJER:
Znak Opis
\f Form-feed (početak reda)
Linefeed (novi red na početak)
\n
\r+\f
\r Carriage return (novi red)
\t Tab
\v Vertical tab
196/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
'\s' = [ \t \n\r\f\v]
PRIMJER:
- za primjer smo odredili da točka označava početak linije
- početak linije ->' . '
'\s' = [^ \t \n\r\f\v]
PRIMJER:
- za primjer smo odredili da točka označava početak linije
- početak linije ->' . '
PRIMJER:
197/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
PRIMJER:
PRIMJER:
\A zahvaća početak stringa isto kao ^, samo što ^ uvijek zahvaća nakon \n
PRIMJER:
\Z – zahvaća string ispred \n, a ako ne postoji string, može zahvatiti i \n, za
razliku od $ koji uvijek zahvaća ispred \n
198/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
Lookahead Assertions
foo(?=bar) vs. "foobar" Pogodak! Generator zahvaća foo jer se iza nalazi bar.
Tražimo pogodak nad imenima fajlova koji nemaju ekstenziju "bat" ili "exe".
.*[.](?!bat$|exe$).*$
Imamo pogodak na svakoj fajlu koji ne završava s "bat" ili "exe".
199/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
Lookbehaind Assertions
Generator se kreće znak po znak i uvijek radi korak prema početku stringa te uspoređuje
sadržaj zagrade. Ako ima pogodak, gleda znak iza i uspoređuje ga sa znakom iza zagrade.
EGREP
PRIMJER:
Datoteka tel_imenik
/*
Ana, Ban 3398-000
Alex, France 5598-999
Indi, Car 8895-977
Elvis, Potrag 9989-771
Marko, Zeus 1189-001
Zoran, Yevs 9987-573
*/
200/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
PRIMJER:
PRIMJER:
Telefonski brojevi:
201/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
3893 -986
9236- 563
2359 - 323
9885-9663
11-66666
2356-99 6
55555-666
zo@linux:~> egrep -E '^[0-9]{4}[ \t]?-[ \t]?[0-9]{3}$' srijeda
3893-464
3893 -986
9236- 563
2359 - 323
zo@linux:~>
202/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
'^[0-9]+\.[0-9]+$'
Ako želimo samo int brojeve:
'^[0-9]+$'
PRIMJER:
Lg.txt
MANU LOGIN 01.01.2004. 12:00
GNO 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 LOGIN 04.01.2004. 09:00
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 LOGOUT 04.01.2004. 16:26
INED LOGOUT 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
204/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
205/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
PRIMJER:
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
mali.pes@yoki.hr
mali-.pes@xor.mg.hl
ma-Exvest@net.hr
IP addr filter
206/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
ip.wpad
/*
158.988.456.235
163.254.252.111
111.189.299.266
11.58.566.233
*/
zo@linux:~> egrep -E '(25[0-5]|2[0-5][0-9]|[01][0-9][0-
9]\.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[0-
5][0-9]|[01][0-9][0-9])' ip.wpad
163.254.252.111
zo@linux:~>
AWK
PRIMJER:
F1/*
ime prezime kolicina naziv placeno
marko puzla 5 kocke 0
darko puh 1 kugla 1
darko on 7 kocke 0
marin draget 4 buli 1
eston sret 7 plast 1
narav tezak 4 marke 0
*/
awk_/*
$5 ~/[0]/ {print $0} $5 ~ /[0]/ {lines++}
END{print "Broj duznika:",lines}
*/
207/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
zo@linux:~>
Ili
zo@linux:~>
vi – supstitucija u vi ex modu
PRIMJER:
function(x+1,x,x+2)
zo@linux:~> ex sub1
208/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
:%s/function(\([^,]*\),\([^,]*\),\([^,]\))/function(\2,\1,\3)/g
:wq
function(x,x+1,x+2)
PRIMJER:
zo@linux:~> ex sub2
:%s/\([^,]*\),\([^,]*\),\([^,]*\),\(.*\)/\1,\3,\4,\2/
:wq
209/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
zo@linux:~> ex sub2
:%s/[\t]*,[\t]*/,/g
:wq
//g[opcionalan] ako želimo da se izraz primijeni na cijelu liniju, //inače samo na prvi
pogodak
zo@linux:~>
13:15-14:50
210/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
PIN(labosi)
DV.F111
zo@linux:~> ex txt
13:15-14:50
PIN(labosi)
DV.F111
211/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
zo@linux:~>
Jedini zaključak koji možemo donijeti vezan uz regularne izraze je taj da regularni
izrazi bez obzira na to kako vam se činili na početku u nezamislivoj mjeri olakšavaju posao,
ako se ne slažete sa tom tvrdnjom pokušajte sami napisati rutinu za provjeru e-maila koja će
obuhvaćati sve slučajeve iz primjera.
212/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
Mario Strinić
VI EDITOR
213/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
UVOD
Startanje:
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 nešto poput:
„filename“ lines 21, 400 characters (ime file-a, broj linija i broj znakova)
„newfile“ [newfile]
Za pokretanja bez imena file-a (bilo starog ili novog imena) donja linija bit će prazna.
214/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
MODOVI RADA:
Komandni mod:
Count je broj koji počinje sa 1-9 i odnosi se na broj znakova na koji želimo imati
učinak. Npr. naredba x20 će obrisati 20 znakova.
Where govori na koliko linija želimo učinak naredbe (također, može biti i naredba za
pomicanje kursora.
Jednostavne Naredbi:
a ulazak u insert mode
h miče kursor lijevo jednu poziciju
i ulazak u insert mode – otkucani znakovi će biti umetnuti prije trenutne
pozicije kursora. Ukoliko navedemo count sav tekst koji je umetnut bit će
ponovljen count puta
j pomiče kursor jednu liniju dolje
k pomiče kursor jednu liniju gore
l pomiče kursor desni jednu poziciju
r mijenja znak „pod“ kursorom (count za zamjenu više znakova)
u povrat zadnje naredbe (undo)
215/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
Text baferi u VI
VI ima 36 bafera sa spremanje dijelova teksta i bafer opće namjene. Kad god je neki dio
teksta obrisan ide u bafer opće namjene ali se može pohraniti i u drugi bafer ako se tako
specificira. Bafer se specificira naredbom “ iza koje slijedi broj ili slovna oznaka bafera.
Na primjer:
Kombinacije naredbe d:
dd – briše liniju
d^ - briše od pozicije kursora do početka linije
d$ - briše od pozicije kursora do kraja linije
dw – briše od trenutne pozicije kursora do kraja riječi
3dd – briše tri linije teksta od trenutne pozicije prema dole
Postoji i naredba y koja funkcionira na sličnom principu koja uzima tekst bez brisanja.
216/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
Lijepljenje (pasting)
Indentacija i provjera
VI editor ima sklop osobina koje mu omogućuju pomoć pri programiranju. Postoji
varijabla kojom možemo podesiti identaciju za svaki nivo ugnježdavanja koda. Varijabla je
sw.
Naredbe za indentaciju:
217/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
Za traženje stringova koristimo naredbe: / i ?. Jedina razlika između ove dvije naredbe
je u tome što / traži string prema naprijed, dok naredba ? traži string prema natrag.Naredbe n i
N ponavljaju prethodnu naredbu u istom ili suprotnom smjeru. Neki znakovi u VI-u imaju
posebno značenje stoga je ispred njih potrebito staviti \ (backslash) da bi bili uključeni u
pretragu.
Specijalni znakovi:
^ - početak linije
. – odgovara jednom znaku
- označava 0 (nula) ili više znakova
$ - kraj linije
[ - početak seta pripadajućih znakova
< - krak riječi
>- početak riječi
Naredbe f i F traže znak na trenutnoj liniji.Naredba f traži naprijed, dok F traži unatrag.
Naredbe t i T traže znak na trenutnoj liniji, ali t pomiče kursor na poziciju prije traženog
znaka (tražeći unaprijed), dok T pretražuje unatrag do znaka prije traženog.
218/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
PODEŠAVANJE VI-A
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 slijedeća 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 – podešava broj linija koje VI koristi (xx)
219/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
:set ws – ako je ova opcija upaljena ako ne pronađe željeni string počinje pretragu s
početka teksta
:set wm xx – automatski "word wrap", što znači da će preći u novu liniju poslije
određenog broja znakova (xx mora biti veći od 0)
220/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
Primjer:
Ako smo otkucali nešto poput „Pero Peric huuuuuuuuuuuuuum“ i ne želimo to stalno
ponavljati možemo napisati:
Postoje dva načina za prilagođavanje(customize) VI-a korisniku. Ako kreirate file .exrc
u svom home direktoriju, sve komande tamo će biti čitane prilikom startanja VI-a.
Drugi način je da podesimo varijablu EXINIT. Opcije će biti smještene u vašem
shellsetup file-u. Ako koristite /bin/csh (C-Shell) koristite ovu naredbu:
setenv EXINIT '...'
221/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
Ako želite staviti više od jedne naredbe odvojite naredbe uspravnom crtom (|).
Primjer:
setenv EXINIT 'set ai nu wm=3|map g G'
Ako želite kreirati file .exrc možete staviti iste stvari u njega kao što je napisano pod
navodnicima poslije EXINIT.
222/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
POVRAT PODATAKA
Vi editira privremenu kopiju vašeg file-a i kad je editiranje završeno ili kad snimimo od
mijenja sadržaj privremene kopije sa novom. Ako nešto krene „naopako“ dok editirate file VI
će pokušati 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
slučaju biti upotrijebljena prilikom slijedećeg dizanja. Komanda bi trebala izgledati ovako vi
–r vitalinfo. Naravno, poslije povrata (recoveringa) file je potrebito ponovo snimiti.)
Pošto VI kopira originalni file i snima sadržaj kopije u originalni file, ako ste logirani
više od jedan put i editirate isti file više od jedan put koristeći VI, ako snimite na jednom
prozoru pa onda na drugom, promjene napravljene prvi put biti će prebrisane. Najsigurnije je
uvijek koristiti jednu kopiju file-a.
223/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
PREGLED NAREDBI:
Umetanje teksta
Ctrl + B – skrola nazad jednu stranicu. Count skrola navedeni broj stranica
Ctrl + D – skrola naprijed pola prozora. Count skrola broj linija
Ctrl + F – skrola naprijed jednu stranicu. Count skrola navedeni broj stranica
Ctrl + H – pomiče kursor jedan space lijevo. Count pomiče navedeni broj
mjesta
Ctrl + J – pomiče kursor dole jednu liniju u istoj koloni. Count pomiče
navedeni broj linija dolje
224/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
225/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
Ako se stavi count prije z-a on mijenja trenutnu liniju u specificiranu. Npr. 18z stavlja
liniju 18 na centar ekrana.
Zamjena teksta:
226/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
Formatiranje znakova/linija
Snimanje i izlaz:
227/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
Miscellany:
228/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
ZAKLJUČAK
Vi editor predstavlja moćan alat za editiranje texta. Iz pobrojane liste naredbi lako je
vidljivo da je gotovo teško zamisliti neku operaciju sa tekstom koju VI ne može izvršiti.
Osim toga odvojenost modova rada (komandnog i insert moda) u bitnome olakšava
navigaciju kroz VI. Naredbe su jednostavne i logično postavljene.
Stoga nije nimalo čudno da je VI postao bazičnim editorom UNIX based Operacijskih
sustava.
229/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Matko Pejčić
EMACS
230/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
UVOD
Što je Emacs?
231/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Emacs je ustvari ime za cijelu obitelj tekst editora koji ili nasljeđuju ili su inspirirani
nekom prethodnom verzijom.
Prvi Emacs za Unix stroj bio je Goselim Emacs koji je poslije postao komercijalan pod
imenom Unipress Emacs.
Kada se danas kaže Emacs misli se na GNU Emacs kojeg je napisao Richard Stallman,
osnivač Free software Fundation, i još uvijek ga održava.
Važno je napomenuti da postoje dva Emacs editora: Emacs i Xemacs. Xemacs sadrži
GUI-Graphic User Interface te zbog toga postaje sve popularniji. Mnogi ga čak nazivaju
modernom inačicom Emacsa. Međutim većina stvari navedenih u daljnjem tekstu odnosi se
na Emacs verziju 20.3, ali se golemi postotak svega toga može komotno upotrijebiti i za
Xemacs.
Vrlo lako. Ako koristite jednu od popularnih Linux distribucija kao Debian, RedHat,
Slackware, Emacs je vjerojatni jedna od opcija koju možete instalirati. Ako ne, možete lako
doći do Emacs source koda i sami ga kompajlirati. Posjetite GNU stranice i pronađite točnu
lokaciju za download:
http://www.gnu.org/software/emacs/emacs.html.
232/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
233/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Napomena: Emacs u nekim slučajevima koristi posebne znakove kao strelice (npr. pod
X-om ili kad se vrti pod DOS-m, gdje Emacs razumije događaje tipkovnice). Ali preporuka je
ne koristiti te tipke čak i kad rade, da bi mogli koristiti Emacs sa bilo kojeg terminala.
Notacija
234/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Za Emacs svaka udarac tipke je naredba, čak i jednostavni tipke kao A ili z (ispis
znakova) su naredbe za umetanje. Znakovi koji ne služe za ispis su naredbe za uređivanje;
miču kursor, skrolaju tekst, brišu ili kopiraju tekst itd.
Svaka naredba ima svoje ime koje možete pronaći u dokumentaciji (npr. kill-line,
delete- backward-char, ili self-insert-command). Ove naredbe su vezane za pritisak tipki zbog
lakog uređivanja. Takvo vezanje tipki i naredbi naziva se key binding ili samo binding
(vezivanje).
Skup svih vezivanja (binding-a) čini Emacsov skup naredbi (Emacs command set).
Međutim Emacs je nadogradiv, promjenjiv editor. To znači:
Vezivanje može biti različito za različite modove ovisno o nadogradi
Vezivanje može biti različito za različite modove ovisno o promjenama
U ovom tekstu opisana su standardna vezivanja.
Jednostavne tipke
Postoji 95 raznih ASCII znakova koji se mogu ispisati i svi su vezani uz self-insert-
command da bi se mogli umetnuti u tekst kada su odabrani. Za naredbe uređivanja Emacs
koristi sve control znake: C-a, C-b itd. Ali to je još 32 znakova, a Emacs ima više od 32
naredbe za uređivanje.
128 znakova u gornjoj polovici ASCII-a nisu zauzeti, ali kako ih otipkati? Emacs koristi
Meta tipku koja radi na isti način 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 višeg reda. To nam daje pristup znakovima kao
Meta-a, Meta-b itd. (Postoji također i Meta-A, ali da bi se izbjegla moguća zabuna
metaznakovi štampanih slova odgovaraju metaznakovima pisanih)
Što je sa control znakovima sa bit setom višeg reda? To su potpuno validni
metaznakovi; označavaju se sa C-M-a, itd. Za njihov odabir zajedno se drže pritisnute Control
i Meta tipke. Budući da su i Control i Meta Shift tipke M-C-a i C-M-a je zapravo isto. Zbog
ujednačenosti uglavnom se piše M-C-a.
235/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Control i meta tipke plus znakovi za ispis daju nam zajedno 256 moguće kombinacije
tipki, ili 160 naredbi za uređivanje, kada se oduzmu samo insertirajući znakovi. Ali Emacs
ima više od 160 naredbi za uređivanje! Zbog toga također koristimo prefiks naredbe. Prefiks
naredba je tipka koja kada ju pritisnemo ništa ne ispisuje, već čeka odabir neke druge tipke
zajedno sa njom čineći jednu naredbu. Svaka prefiks naredba dodaje još 256 mogućih
kombinacija za koje možemo vezati određene naredbe. Prefiks naredbe obično grupiraju
naredbe koje su na neki način povezane.
Standardne prefiks naredbe su:
Prefiksi nam daju dodatnih 768 mogućnosti i zbroj se penje na 928. Ali Emacs ima više
od 928 naredbi! Zbog toga postoji mogućnost jedne subnaredbe od prefiks naredbe za neku
prefiks naredbu, kao npr C-x 4 ili C-x v , svako takvo vezivanje daje dodatnih 256
mogućnosti kombiniranja tipki. Postoji niz takvih dvoznakovnih prefiksa, ali su dosta
specijalizirani i ne sadrže cijeli skup od 256 naredbi. Postoje čak i tro-znakni prefiksi, ali
većina ljudi neće priznati da ih koristi.
236/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
ESC prefiks
Ne postoji drugi prefiks koji je istovremeno vrlo važan i potpuno suvišan kao ESC
prefiks.
Sve tipkovnice nemaju Meta tipku koja postavlja bit višeg reda (high order bit). Na PC-
u 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 može, ali i ne mora raditi.
Srećom č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
pokušavati držati ESC pritisnutim dok pritišćete neku drugu tipku, koristite ga kao prefiks i
otipkajte ga odvojeno. Ako ga zadržite pritisnutim sekundu predugo vjerojatno ćete izazvati
autorepeat što bi vas moglo vrlo zbuniti.
Previše naredbi?
Kako popamtiti sve ove naredbe? Jednostavno: nikako.Većina korisnika Emacs-a nauči
samo osnovne naredbe i sa tim su potpuno zadovoljni. Neki nauče osnovne naredbe i još neke
koje im trebaju za neke posebne zadaće. Neki konstantno uče nove naredbe da bi ubrzali
editiranje.
Vrlo mali broj korisnika dođe do stupnja da pišu svoje vlastite, potpuno nove Emacs
naredbe.
237/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Emacs sadrži tri (zapravo četiri) strukture koje su neodvojivo povezane i vrlo važne za
razumjeti:
File (datoteka) - Datoteka je zapravo Unix datoteka na disku. Nikada ne
uređujete ovu datoteku, već učitavate kopiju u Emacs međuspremnik
(buffer) i pišete kopiju mađuspremnika na disk da ju spremite.
Međuspremnik (buffer) - Međuspremnik je interna podatkovna struktura
koja sadrži tekst koji uređujete. Emacs može imati više aktivnih
međuspremnika u isto vrijeme. Većina, ali nikako svi, međuspremnici fu
povezani sa datotekom. Međuspremnici imaju imena; međuspremnik koji je
aktiviran iz datoteke je gotovo uvijek nazvan po toj datoteci, i kažemo da
međuspremnik posjećuje datoteku (a buffer is visiting a file)
Prozor (window) - Prozor je vaš pogled na međuspremnik. Zbog
ograničenosti monitora vjerojatno nećete moći vidjeti sve vaše buffere
odjednom. Možete podijeliti ekran u koliko dijelova želite (ili za koliko
imate mjesta), ovisno koliko buffera želite vidjeti. Također je moguće da
više prozora gledaju različite dijelove istog međuspremnika.Prozore možete
stvarati i brisati kad kod želite, brisanjem prozora ne briše se sadržaj
međuspremnika.
Okvir (frame) - Okvir je sličan prozoru, ali se tretira kao posebna cjelina pod
X prozorskim sustavom.
C-x C-f
find-file. Ovo je glavna naredba za učitavanje datoteke u međuspremnik. Kada izvršite
ovu naredbu Emacs čeka da upišete ime datoteke. Slijedeće provjerava da li već uređujete tu
datoteku u nekom drugom međuspremniku, i ako je tako jednostavno skače na već postojeći
međuspremnik i ne učitava datoteku ponovo. Ako je provjera negativna otvara se novi
238/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
C-x C-s
save-buffer. Ovo je glavna naredba za spremanje datoteke, tj. za pisanje kopije
aktivnog međuspremnika na disk.
C-x s
save-some-buffers. Omogućuje vam da spremite sve međuspremnike koji posjećuju
datoteke, pitajući vas za svaki i nudeći nekoliko opcija (spremi, nemoj spremiti, baci pogled
pa ga možda spremi, itd.)
C-x b
switch-to-buffer. Pita za ime međuspremnika i prebacuje međuspremnik trenutno
aktivnog prozora na taj međuspremnik.Ne mijenja konfiguraciju prozora. Ova naredba će
stvoriti novi prazan međuspremnik, ako upišete neko nepostojeće ime. Taj međuspremnik
neće posjećivati datoteku neovisno kako ga nazovete.
C-x C-b
list-buffers. Novi prozor se pojavljuje sa popisom svih međuspremnika, dajući ime,
obavijest o promjenama, veličinu u bajtima, glavni mod i ime datoteke koju posjećuje.
C-x k
kill-buffer. Pita za ime međuspremnika i uklanja cijelu podatkovnu strukturu za taj
međuspremnik iz Emacs-a. Ako je međuspremnik promijenjen ponuditi će vam se mogućnost
spremanja. Ovo ne briše pridruženu datoteku.
C-x C-q
vc-toggle-read-only. Učini međuspremnik read-only ili ga učini read-write ako je read-
only
239/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
C-v
scroll-up. Osnovna naredba za skrolanje naprijed za jedan cijeli ekran. Po defaultu
Emacs ostavlja dvije linije sadržaja sa prethodnog ekrana.
M-v
scroll-down. Isto kao i C-v samo se kreće unazad.
C-x o
other-window. Promjena aktivnog prozora. Neprekidan poziv ove naredbe rezultira
prolaskom kroz sve prozore, s lijeva nadesno i odozgo prema dole.
C-x 1
delete-other-window. Briše sve druge prozore osim aktivnog, čineći jedan prozor
veličine ekrana. Ova naredba ne briše međuspremnike i datoteke pridružene prozoru.
C-x 0
delete-window. Briše samo aktivan prozor, a drugima mijenja veličinu proporcionalno.
C-x 2
split-window-vertically. Po vertikali dijeli aktivan prozor u dva. Ovo rezultira
stvaranjem novog prozora, ali ne i novog međuspremnika Dva prozora sada gledaju isti
međuspremnik. Ovo vam omogućuje gledanje dva dijela međuspremnika istovremeno.
C-x 3
split-window horizontally. Po horizontali dijeli aktivni prozor u dva. Ovo rezultira
stvaranjem novog prozora, ali ne i novog međuspremnika Dva prozora sada gledaju isti
međuspremnik. Ovo vam omogućuje gledanje dva dijela međuspremnika istovremeno.
C-M-v
scroll-other-window. Radi isto što i C-v ali skrola drugi prozor. Ako imate više od dva
prozora skrola onaj prozor koji bi C-x o učinio aktivnim.
240/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
OSNOVNI KONCEPTI
Vjerojatno je važnije razumjeti ove osnovne koncepte nego znati bilo koju naredbu za
editiranje. Naredbe za editiranje su detalji: možete ih i sami naučiti,a ko temeljito obradite
osnove.
Ulaženje i izlaženje
emacs
kada se digne, nećete editirati niti jednu datoteku. Sada možete upotrebom
odgovarajućih naredbi učitati datoteku za uređivanje. Druga mogućnost je da upišete
emacs foo.tl
Sada kada ste pokrenuli Emacs možete početi pisati u njega. Ne postoji potreba za
posebnim „insert modom“ ili tako nečim; upamtite znakovi za ispis (printing characters) se
sami umeću jer su vezani za self-insert-command.
241/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Ekran
Cijeli Emacs ekran je posvećen tekstu vaše datoteke, osim jedne linije blizu dna: to je
linija moda. Ova linija služi za informiranje, nikada ne možete u nju ući. Gotovo uvijek je na
neki način označena. Ona ispisuje važne obavijesti (koje se mogu mijenjati) kao:
Prazna linija ispod linije moda je minibuffer. Emacs koristi minibuffer za prikaz poruka,
ali i za input kada vas Emacs traži da upišete nešto (tražiti će vas da upišete yes ili no kao
odgovor na pitanje, ime datoteke za uređivanje, dugo ime naredbe, itd.)
Minibuffer je također poznat kao echo area, zbog toga što Emacs tu daje „jeku“ pritiska
tipke, ako tipkate jako polako.
Čudne poruke
S vremena na vrijeme Emacs će u minibuffer upisati neku svoju poruku koja, na prvi
pogled nema veze sa onim što vi radite. Dvije najčešće poruke su: „Mark set“ i „Garbage
collecting...“. Prva poruka znači da je Emacs odredio cilj (set a mark) za vas ovisno o vašoj
zadnjoj naredbi; automatsko određivanje cilja je poželjna mogućnost za neke naredbe. Druga
242/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
poruka znači da Emacs-ova lisp mašina preuzima spremanje (reclaming storage). Ovu poruku
možete ignorirati i nastaviti tipkati. Emacs neće izgubiti vaše znakove.
Ponekad će Emacs učiniti nešto što ne razumijete: tražiti će neke informacije, ili će
zapištati kada pokušate nešto otipkati, ili će učiniti nešto jednako tako zbunjujuće. To samo
znači da ste pozvali neku naredbu greškom.
Kada se tako nešto dogodi samo trebati napisati C-q (što je vezano za keyboard-quit).
ZO je ASCII BEL znak koji prekida sve što Emacs radi. To će vas izvući iz bilo kojeg pitanja
koje vam Emacs postavi, prekinuti će bilo koju parcijalnu sekvencu tipki .
Budući da je Emacs potpuno rekurzivan, ponekada ćete morati otipkati C-q više puta,
kako bi izašli iz rekurzivnog niza naredbi. I za kraj, ako je Emacs potpuno zablokiran,
utipkavanje C-q tri puta zaredom brzo će prekinuti što god je uzrok blokade.
Pomoć
Emacs ima veliki i opširni online help, koji je dostupan preko help tipke C-h. C-h je
prefiks tipka. Pritisnite C-h dvaput i dobiti ćete listu podnaredbi; učinite to tri puta i dobiti
243/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
ćete prozor koji opisuje sve te naredbe (SPC će skrolat taj prozor). Neke od najboljih help
naredbi su:
C-h a
command-apropos. Traži ključnu riječ i onda ispisuje sve naredbe sa tom
Ključnom riječi u njenom dugom imenu.
C-h k
describe-key. Traži 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. Pokreće interaktivni pretraživač Emacs paketa.
C-h t
help-with-tutorial. Pokreće emacs tutorial.
Info
Jedna od najvažnijih Emacs naredbi je undo. Koji se poziva sa C-_. C-_ je validan
ASCII znak, ali ga neke tipkovnice ne generiraju pa također možete koristiti C-x u--.
Undo naredba je vrlo korisna kada učinite nešto što niste željeli. Jedan udarac tipkom
sve mijenja unazad.
244/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Kaže sa da Emacs ima beskrajan undo, jer možete izvršiti undo nad dugačkim nizom
naredbi, za razliku od nekih drugih editora. Kažemo da Emacs ima redu jer možete
promijeniti smjer dok izvršavate undu i tako u stvari pozvati undo na undo.
Jednom kada se naučite na ovu mogućnost nasmijati ćete se na svaki editor koji ju
nema. Vrlo je važno da se što prije udomaćite sa undo naredbom. Preporuča se pažljivo
čitanje undo dijela manuala i puno vježbe.
Emacs nikad ne mijenja datoteku na disku dok mu vi to ne kažete, ali je vrlo pažljiv oko
spremanja vašeg rada:
Backup datoteke - Emacs uvijek sprema i prošlu verziju datoteke kada vi
izvršite spremanje. Ako se
vaša datoteka zove foo, onda se backup zove foo~. Iako je po defaultu
isključeno, Emacs će imati veći broj prethodnih verzija datoteka za vas,
foo.~1~, foo.~2~, foo.~3~. Vi sami odlučujete koliko verzija ćete spremati.
Auto-Save datoteke - Emacs po defaultu izvršava auto-save datoteke
dok ju uređujete. Auto-save datoteka za datoteku foo se zove #foo#. Ako se
Emacs (ili sustav) sruši, a vi niste uspjeli spremiti promjene na svojoj
datoteci većinu vašeg rada ćete moći naći u toj datoteci. Auto-save se, po
defaultu događa svakih 300 znakova ili kada naleti greška u sustavu.
Completion
245/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Mnoge Emacs naredbe primaju argumente na isti način kao i funkcije ili procedure to
čine u programskim jezicima. Većina naredbi će vas tražiti argumente, npr. naredba za čitanje
datoteke će vas tražiti ime datoteke.
Postoji jedna vrsta argumenata koja je toliko česta da postoji poseban način njihovog
prosljeđivanja: brojevni argumenti. Veliki broj naredbi će brojevni argument interpretirati na
način da će se toliko puta pozvati. Naredba delete-char (vezana je na C-d) briše jedan znak
desno od kursora, ali ako joj se da brojevni argument n, izbrisati će n znakova.
Da bi se naredbi proslijedio brojevni argument, npr. 12, otipkajte C-u 12 prije naredbe
Ako tipkate dovoljno polako vidjeti ćete
C-u 1 2-
U echo području (echo area). Onda otipkajte C-d i tako ste naredbi delete-char dali
argument 12.
Budući da često ni ne znamo koliko točno puta želimo da se neka naredba ponovi,
postoji lakši način za prosljeđivanje brojevnih argumenata različitih veličina. C-u sam po sebi,
bez brojki, je jednak brojevnom argumentu 4. Još jedan C-u množi to sa još 4, čineći 16.
Slijedeće C-u množi to sa još 4 čineći 64, itd. Zbog toga se C-u naziva universal argument.
Važno je znati da sve naredbe ne interpretiraju brojevne argumente kao broj
ponavljanja; neke ih ignoriraju, a neke ih gledaju kao boolean (ili postoji argument ili ne).
Pročitajte dokumentaciju za naredbu prije nego ju probate.
Ponekada trebamo umetnuti controlni znak u datoteku. Ali kako da umetnemo ESC
kada je koristimo kao prefiks naredbu? Odgovor jr: koristimo quoted-insert koji je vezan za
C-q. C-q rdi kao prefiks naredba na način da kada ju napišete ona čeka jo jedan znak. Ali taj
znak se ne izvrši kao naredba već se umeće u međuspremnik. Dakle C-q ESC umeće Escape.
246/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Vrlo vjerojatno ćete naići na jednu specifičnu onemogućenu naredbu M-ESC (također
poznata kao i ESC ESC), jer je vrlo lako otipkati dva Escape-a zaredom kada se koristi ESC
prefiks.
247/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Jedna od najčešćih stvari koje korisnik editora radi je pomicanje naokolo, da bi izvršio
određene naredbe. Emacs nudi mnoge naredbe za kretanje koje se odnose na tekstualne
objekte; za svaki tekstualni objekt, postoji naredba kretnje kojom se pomičete na početak ili
kraj objekta.
Sve te naredbe za kretanje primaju brojevne argumente za određivanje broja
ponavljanja.
Osnovni tekstualni objekt je znak. Emacs prepoznaje i niz drugih objekata ovisno u
kojem ste modu (C-ovski tekstualni objekt nema baš puno smisla ako ne editirate C kod).
Točna definicija objekta ovisi o vašim postavkama, ali još važnije varira od moda do
moda. Znakovi koji tvore riječ u Text modu, ne moraju biti isti kao oni koji tvore riječ u C
modu. Ovo je jako korisno jer možete koristiti iste naredbe za pomicanje, a opet da budu
različito podešene za različite vrste teksta.
Znakovi
C-f
Forward-char. Miče naprijed (desno) preko znaka
C-b
Backward-char. Miče nazad (lijevo) preko znaka
6.2 Riječi
M-f
Foreward-word. Miče naprijed preko riječi.
M-b
Backward-word. Miče unazad preko riječi.
248/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Linije (vertikalno)
C-n
next-line. Miče dolje do slijedeće linije.
C-p
previous-line. Miče gore do prethodne linije.
Kada se kreće po linijama kursor pokušava ostati u istom stupcu, ali ako je nova linija
prekratka, pozicionirati će se na kraj linije. Ovo je vrlo važno: Emacs ne umeće razmake na
kraj linija.
Linije (horizontalno)
C-a
begining-of-line. Miče na početak trenutno aktivne linije.
C-e
end-of-line. Miče na kraj trenutno aktivne linije.
Rečenice
M-a
backward-sentence. Miče na početak trenutno aktivne rečenice.
M-e
foreward-sentence. Miče na kraj trenutno aktivne rečenice.
249/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Odlomci
M-{
backward-paragraf. Miče na početak trenutno aktivnog odlomka.
M-}
foreward-paragraph. Miče na kraj trenutno aktivnog odlomka.
Stranice
C-x [
backward-page. Miče na početak trenutno aktivne stranice.
C-x ]
foreward-page. Miče na kraj trenutno aktivne stranice.
Međuspremnici
M-<
beggining-of-buffer. Miče na početak međuspremnika
M->
end-of-buffer. Miče na kraj međuspremnika.
250/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Funkcije
Budući da su funkcije tako važan dio svakog programskog jezika, Emacs sadrži naredbe
za pomicanje kroz njih. Ove naredbe rade bez problema u većini modova. U Emacsu funkcije
i procedure se nazivaju defun kao i u Lispu.
C-M-a
begining-of-defun. Miče na početak trenutno aktivne defun.
C-M-e
end-of-defun. Miče na kraj trenutno aktivne defun.
251/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Znakovi
C-d
delete-char. Briše znak desno od kursora.
DEL
delete-backward-char. Briše znak lijevo od kursora.
Riječi
M-d
kill-word. Ubija sve do kraja riječi desno od kursora.
M-DEL
backward-kill-word. Ubija sve do početka riječi lijevo od kursora.
252/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Linije (horizontalno)
C-k
kill-line. Ubija do kraja trenutno aktivne linije ne uključujući newline znak.
Dakle, ako želite ubiti cijelu liniju potrebna su dva C-k.
C-u 0 C-k
kill-line. Ubije do početka trenutno aktivne linije, ne uključujući newline
znak.
Ako ste možda ste pomislili da C-u -1 C-k ubija liniju do početka, imali ste pravo, ali ta
naredba briše i newline znak ispred.
Rečenice
M-k
kill-sentence. Ubija do kraja trenutno aktivne rečenice uključujući i sve
newline znakove na koje naiđe.
C-u -1 M-k
kill-sentence. Ubija do početka trenutno aktivne rečenice uključujući i sve
newline znakove na koje naiđe.
Odlomci
Stranice
253/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Međuspremnici
Naredba kill-buffer ne ubija sav tekst u međuspremniku, već ubija cijelu strukturu
podataka međuspremnika
Funkcije
Ako ubijete nekoliko objekata u nizu, neupotrebivši neku drugu naredbu (non-kill
naredu), sva ta ubojstva se vežu u jedan kill-ring. Možete, na primjer, ubiti dio teksta kao
nekoliko linija odabirom C-u 6 C-k naredbe. To će ubiti šest linija, ali će to biti samo jedno
ubojstvo (kill).
Vraćanje (Yanking)
Jednom kada ste ubili neki tekst, kako ga vratiti? Zadnje ubijeni tekst možete vratiti
(yank) sa C-y. Budući da Emacs ima samo jedan kill-ring, ubojstvo možete izvršiti u jednom
međuspremniku , a tekst vratiti (yank) u drugom. Da bi vratili prethodna ubojstva morate se
pomicati po kill-ringu. Počnite sa C-y i onda koristite M-y da bi se pomakli na prethodno
mjesto u kill-ringu zamjenom upravo vraćenog teksta prethodnim ubojstvom. Svaki daljnji M-
y miče as po kill-ringu, svaki put zamjenjujući vraćeni (yanked) tekst. Kada dođete do teksta
koji vas interesira jednostavno stanite. Svaka druga naredba prekida kruženje po kill ringu i
C-y vraća zadnje ubojstvo.
254/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Emacs nema potrebu za posebnim naredbama za pomicanje i kopiranje teksta (već smo
ih naveli!!!). Za pomicanje teksta, jednostavno ga ubijte i vratite negdje drugdje. Za kopiranje
ubijte tekst i odmah ga vratite. Ništa se nije dogodilo osim što je tekst sada u kill- ringu,
spreman za izvlačenje, vraćanje.
255/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Naredba isearch-backward, koja je vezana za C-r radi na isti način, ali traži unazad.
Puno korisniji je word search koji vam omogućuje traženje niza riječi neovisno o tome
kako su odjeljenje. Da bi pokrenuli tu vrstu traženja otipkajte C-s RET C-w word word word
RET.
Emacs također može pretraživati po regularnim izrazima. To je izuzetno moćan alat, ali
prekompleksan da bi ga se ovdje objasnilo.
Zamjena
256/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
257/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
M-@
mark-word. Postavlja regiju oko slijedeće riječi, ili od početka do kraja riječi kojoj ste
trenutno pozicionirani.
M-h
mark-paragraph. Postavlja regiju oko trenutno aktivnog odlomka.
C-M-h
mark-defun. Postavlja regiju oko trenutno aktivne funkcije (defun).
C-x C-p
mark-page. Postavlja regiju oko trenutno aktivne stranice.
C-x h
mark-whole-buffer. Postavlja regiju oko cijelog međuspremnika.
258/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
C-x C-x
exchange-point-and-mark. Zamjenjuje point i mark. Brzo uzastopno izvršavanje
ove naredbe omogućuje viđenje dokle regija doseže.
C-w
kill-region. Ubija regiju
M-w
kill-ring-save. Sprema regiju u kill-ring bez da je briše iz međuspremnika.
C-x C-i
indent-rigidly. Uvlači regiju za koliko god znakova odredimo u brojevnom argumentu
(default je 1) .
C-x C-l
downcase-region. Pretvara sva slova u mala. Po defaultu ova naredba je onemogućena.
C-x C-u
upcase-region. . Pretvara sva slova u velika. Po defaultu ova naredba je onemogućena.
259/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
UVLAČENJE (INDENTATION)
260/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
MODOVI
Glavni način na koji Emacs prilagođuje naredbe svakoj vrsti teksta je kroz major i
minor modes. Svaki međuspremnik ima major mod i nula, jedan ili nekoliko minor modova.
Nekada Emacs izabire major mo automatski, obično na temelju ekstenzije datoteke. Naravno
možete i eksplicitno odrediti mod.
Fundamental Mode
Osnovni mod koji je temelj svih modova. Odličan za editiranje teksta, samo što ne
pruža
neke dodatne mogućnosti
Text Mode
Za editiranje teksta. Sadrži posebne naredbe za spell checking centriranje linija itd.
Lisp Mode
Za editiranje Common Lisp source koda. Sadrži interaktivnu vezu sa Common Lisp
interpretorom u drugom međuspremniku.
Tcl Mode
Za editiranje Tcl source koda. . Sadrži interaktivnu vezu sa Tcl interpretorom u
drugom
Međuspremniku.
C Mode
Za editiranje C koda. Sadrži posebnu indentaciju itd.
Postoji još niz drugih glavnih modova od kojih su neki su jako specijalizirani (modovi
za editiranje e-mailova, za čitanje news grupa, pretraživanje World Wide Web-a itd.)
261/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
262/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Login i ID
Maja Mehinagić
LOGIN I ID
263/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Login i ID
UVOD
Svakome tko koristi UNIX sistem pridružuje se ime korisnika (user name) koje se
koristi prilikom prijavljivanja na sistem. To ime korisnika često se naziva i račun (account). U
praksi, jedna osoba može koristiti više korisničkih imena. Različita imena koristimo kada
koristimo sistem za različite potrebe.
NPR.
Jedna osoba koristi program za obračunavanje plaća i program za stanje računa. U
prvom slučaju korisnik se prijavljuje pod imenom ''plaća'', a u drugom slučaju pod imenom
''račun''. Više korisnika koji rade na istom projektu mogu sačinjavati grupu koja ima svoje
ime.
Jedan od korisnika UNIX sistema ima veća prava i obaveze nego ostali korisnici, tj. ima
funkciju super korisnika (super-user). To je osoba koja ima obavezu administriranja,
dodjeljivanja dozvola za rad novim korisnicima i koji se brine o cjelokupnom sistemu. Super
korisnik prijavljuje se pod imenom ''root''.
Kao dodatak imenu korisnika, prilikom prijave na sistem skoro uvijek je potrebno zadati
i lozinku (password). To je jedan niz karaktera koji je poznat samo danom korisniku i koji
treba biti ispravno dodijeljen radi dobivanja dozvola za rad sa sistemom. Super korisnik
poznaje lozinku korisnika samo prilikom dodjeljivanja dozvole za rad nekom od korisnika.
Nakon toga, poslije uspješnog prijavljivanja na sistem, korisnik može izmijeniti lozinku
264/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Login i ID
naredbom passwd i tada je poznaje samo on. Super korisnik može dodijeliti novu lozinku
korisniku u slučaju da je korisnik zaboravio staru.
Da bismo dobili dozvolu za pristup UNIX sistemu, moramo izvršiti proces prijave na
na sistem (signing on). Taj proces se najčešće 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 približimo terminalu koji je vezan na UNIX sistem, na ekranu trebamo vidjeti
poruku:
265/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Login i ID
ispočetka. To je sve napravljeno radi još veće sigurnosti tj. da ne bi neovlaštena osoba ušla u
UNIX sistem.
Završetak rada sa UNIX sistemom vrši se utipkavanjem naredbe logout ili <ctrl-D>
(držimo tipku CTRL i pritisnemo tipku d), u trenutku kada se na ekranu nalazi prompt tj. kada
UNIX očekuje novu naredbu. Postoji i naredba exit kojom također možemo završiti rad tj.
odjaviti se sa sistema.
Korisnik mijenja svoju lozinku jednostavnim zadavanjem naredbe passwd kao što je
prikazano primjerom:
$ passwd
New password:studentica
Retype new password:studentica
$
266/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Login i ID
login:student
password:
login:studentica
password
Slika 1
267/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Login i ID
Super korisnik
Na svakom UNIX sistemu pored običnih korisnika postoji određeni broj korisnika koji
ima specijalna ovlaštenja. To je korisnik poznat pod imenom ''root'' ili super korisnik.
Korisnik root može pristupati svim file-ovima na sistemu kao i svim procesima, a može čak i
uništiti cijeli sistem.
Korisnik root ne poznaje zabrane i postoje naredbe koje može izvršavati samo on. To su
na primjer podešavanje vremena na sistemu (date), podešavanje file sistema (mount) ili
kreiranje specijalnih file-ova (mknod).
Prvi način postajanja super korisnika je da dovedemo sistem u stanje u kojem može
raditi samo jedan korisnik (single-user state). To se događa uvijek kao međufaza podizanja
operativnog sistema (bootstrap). Tijekom boot-a inicijalni shell radi sa privilegijama super
korisnika. U višekorisničkom režimu rada (multi-user state), možemo se prijaviti na sistem
pod imenom root. Ako smo se prijavili kao običan korisnik, možemo se prijaviti kao root
korisnik pomoću naredbe:
$ su
Password:top_tajna
#
Također sa naredbom su (switch user) možemo da se prijavimo pod imenom bilo kojeg
korisnika:
$ su student
Password:msjs
$
Ako root izvršava naredbu su, tada se ne zahtjeva unošenje lozinke korisnika čije smo
ime zadali kao argument.
268/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Login i ID
Zavisno od verzije UNIX-a postoje 3 načina definiranja korisnika koji se mogu prijaviti
na sistem prema mjestu gdje se čuva popis korisnika i odgovarajuća lozinka:
Svaki korisnik koji se može prijaviti na UNIX sistem definiran je jednom linijom u
/etc/passwd file-u:
# cat /etc/passwd
root:x:0:1:0000-Admin(0000):/:
daemon:x:1:1:0000-Admin(0000):/:
bin:x:2:2:0000-Admin(0000):/usr/bin:
sys:x:3:3:0000-Admin(0000):/:
adm:x:4:4:0000-Admin(0000):/var/adm:
uucp:x:5:5:0000-uucp(0000):/usr/lib/uucp:
...
student:x:107:15:maja:/home/student:/bin/csh
#
Polja u /etc/passwd file-u su odvojena znakom '':'' i uvijek moramo navesti svih šest
separatora. Značenje pojedinih polja /etc/passwd file-a prikazano je na slici 2.
POLJE OPIS
269/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Login i ID
Super korisnik uvijek ima UID=0. Ostali korisnici imaju UID počevši
od 101 ili 201
Redni broj glavne grupe (Group IDentitiy) kojoj pripada dani korisnik
GID
odgovara definiciji grupe u /etc/group
Ime korisnika se obično zadaje malim slovima, dužine do osam karaktera i ne smije
započinjati 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 smješta u drugo polje
/etc/passwd file-a, ako se radi o tradicionalnom načinu. Poslije zadavanja teksta lozinke, prvih
osam karaktera se kombinira sa ključem od dva karaktera, nakon čega se dobiva šifrirana
lozinka dužine 13 karaktera. Svaki puta kad se korisnik prijavljuje na sistem, lozinku koju
unese, šifrira se na isti način 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.
Slika 2
270/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Login i ID
Pojedini sistemi čuvaju u /etc/passwd file-u pored lozinke i podatke o trajanju valjanosti
lozinke i druge informacije. Ti podaci se sastoje od zareza '','' kao separatora i 4 karaktera.
Dodaju se na kraj lozinke koristeći sljedeće 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 između dvije izmjene lozinke. Ako su
oba karaktera nule (''..''), korisnik mora izmijeniti lozinku prilikom prvog sljedećeg
prijavljivanja. Ako je drugi broj veći od prvoga, tada samo super korisnik može izmijeniti
danu lozinku. Ostala dva karaktera predstavljaju broj tjedana kada je lozinka posljednji put
promijenjena, počevši od 1.siječnja 1970. godine. Inicijalni podaci o intervalima vremena
ubacuju se ručno pomoću vi editora.
Ako želimo privremeno zabraniti prijavljivanje nekom korisniku tj. da zaključamo
(lock) njegov račun, tada dodajemo ''LK'' ispred šifrirane lozinke u odgovarajućem polju.
UID kod svih UNIX sistema u mreži koji koriste NFS treba biti isti. Kod sistema koji
koriste NIS/NIS+ , taj problem je automatski riješen. Korisnik nobody je vlasnik file-ova koje
nije kreirao super korisnik, te im nitko ne može pristupiti. Korisnik noaccess služi za
prijavljivanje udaljenih korisnika čije je ime ''root''.
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
može promijeniti.
Inicijalni shell može biti sh,csh,ksh,bash,tesh ili uucico (koristi se kod UUCP
komunikacije).
271/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Login i ID
NAREDBE OPIS
272/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
Nina Žugaj
TELNET I SSH
273/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
UVOD
Za pristupanje nekom udaljenom računalu putem lokalne ili Internet mreže, neovisno o
mreži, potrebno je koristiti protokole, pomoću kojih se može uspostaviti veza s udaljenim
računalom.
Telnet i SSH dva su takva protokola, koja omogućavaju spajanje i rad na nekom
udaljenom računalu.
Telnet je servis (program, a ujedno i naziv protokola), koji omogućuje pristup nekom
udaljenom računalu emulacijom terminala, a SSH je kriptirani protokol što znači da su svi podaci koji se šalju i
Iako imaju istu funkciju (remote pristup računalima) i iako je SSH vrlo sličan telnetu,
zbog potencijalne ranjivosti telneta, SSH se pokazao daleko sigurniji, te se telnet polako
povlači iz upotrebe.
Također, u odnosu na FTP (File Transfer Protocol) ili tradicionalne BSD R-naredbe (R-
commands) - rlogin, rsh i rcp, SSH je sigurniji, a u njegove dvije implementacije SSH1 i
SSH2, ispravljeni su neki propusti. Većina njih se svodi na manje bugove, no bilo je i
nekoliko ozbiljnih sigurnosnih propusta. Najopasniji od dosad zloupotrebljavanih propusta
omogućava udaljenom napadaču korištenje računala kao root.
I protokol SSH1 se pri određenim konfiguracijama pokazao potencijalno ranjivim na
sesije koje se dekriptiraju tijekom transfera. Zato se savjetuje, kad god je to moguće,
korištenje jačeg protokola SSH2, jer su neke slabosti SSH1 ispravljene u protokolu SSH2.
Telnet i SSH rade na različitom portu:
telnet 23 / tcp
SSH 22 / tcp
Neovisno o vrsti protokola, da bi se korisnik spojio na neko udaljeno računalo mora na njemu imati otvoren korisnički račun
(account).
Telnet i SSH servisi baziraju se, kao i većina mrežnih servisa, na klijent-poslužitelj
modelu. Klijent uspostavlja vezu s poslužiteljskim računalom na kojem je pokrenut telnet
odnosno SSH daemon (tipično telnet na portu 23, a SSH na portu 22), nakon čega slijedi
razmjena podataka odnosno naredbi između tih računala.
274/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
TELNET
Telnet pripada grupi emulatora terminalskog rada, što znači da on omogućava lokalnom
računalu da uspostavi vezu s udaljenim računalom, a nakon uspostave veze oponaša rad
terminala, tj. prilikom izvođenja operacija ne koriste se procesor i periferije lokalnog računala
već udaljenog računala. Osobno računalo (računalo korisnika) se u tom slučaju ponaša kao
obični terminal (koji ne posjeduje sekundarnu memoriju i procesor) kojeg i emulira telnet.
Da bi mogli koristiti resurse računala kojem pristupamo, na njemu treba imati otvoren
korisnički račun. Nakon otvaranja veze s udaljenim poslužiteljem pojavljuje se prozor koji
zahtijeva od korisnika da se prijavi za rad i to unosom korisničkog imena (logina) i šifre
(passworda). Nakon upisa istih korisnik može izvoditi naredbe i operacije na udaljenom
poslužitelju. U slučaju pogrešno upisanih podataka pojavljuje se obavijest o greški i
mogućnost ponovnog pokušaja. Ukoliko se šifra upiše krivo više od tri puta korisnički račun
obično se automatski zaključava iz sigurnosnih razloga.
275/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
Premda neki sustavi pružaju mogućnost prijave kao gosta, takva je mogućnost rijetka
zbog sigurnosnih razloga.
Telnet korisnicima omogućuje i prijavljivanje na njihova vlastita računala iz udaljenih
lokacija, također unošenjem korisničkog imena i šifre. Na taj način korisnici mogu
provjeravati e-mail, uređivati datoteke i pokretati programe na svojim uobičajenim
računalima kao da su na njih prijavljeni lokalno. To se, međutim, može učiniti u okružju koje
se temelji na terminalima, jer se za to ne može koristiti sustav X Windowsa. Telnet pruža
samo emulaciju terminala za uobičajene terminale poput DEC VT-100, koji ne podržavaju
grafička okružja poput X Windowsa. Znači da je veza koju telnet omogućuje ograničena na
korištenje naredbenog sučelja pri radu.
Tradicionalni mrežni servisi kao što su telnet, ftp, rsh i dr., iako vrlo praktični i
jednostavni za korištenje, ujedno sadrže i jedan veliki nedostatak – imaju implementiran vrlo
nizak nivo sigurnosti, budući da se u vrijeme njihova nastanka nije previše pažnje obraćalo na
sigurnost računalnih sustava.
Komunikacija nije kriptirana, te su moguće zlouporabe od strane neovlaštenih ili
zlonamjernih korisnika.
U današnje vrijeme kada sigurnosni aspekt predstavlja jedan od najvažnijih elemenata
svake računalne mreže taj problem svakodnevno dolazi sve više do izražaja.
276/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
telnet [hostname]
=> hostname je ime udaljenog računala. Ako ime udaljenog
računala nije navedeno, telnet se pokreće u svom interaktivnom načinu rada, a ako je ime
udaljenog računala navedeno, telnet odmah pokušava započeti sesiju.
277/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
Dakle, telnet sesiju korisnik pokreće utipkavši telnet, nakon čega slijedi ime računala na
koje se želi spojiti. Telnet zatim vraća poruku Trying i neku IP adresu (gdje je neka IP adresa
adresa računala koje je navedeno).
Ako se telnet uspješno spoji na računalo (što znači da je to računalo uključeno i da
mreža nije isključena), Linux/Unix će izvijestiti Connected to ime računala i zatim će reći da
je znak za izlazak iz sesije neka određena kombinacija tipki. Znak za izlazak određuje 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 računalu.
Nakon što se telnet uspješno spojio na udaljeni sustav bit će prikazana prijavna
informacija i sustav će zatražiti unos korisničkog imena i šifre. Pod pretpostavkom da
korisnik ima valjano korisničko ime i šifru, uspješno će se prijaviti i tada može interaktivno
raditi na udaljenom sustavu.
Na kraju rada svakako se treba odjaviti. Telnet zatim izvijesti da je udaljena sesija
zatvorena i korisnik se vraća se u naredbeni redak lokalne ljuske.
278/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
close
=> prekid trenutno spojene veze
display
=> prikaz parametara
mode
=> promjena načina rada: line-by-line (utipkani sadržaj retka
prvo se prikazuju na lokalnom računalu, nakon čega se odjednom šalje udaljenom računalu)
ili character-at-a-time (većina pritisnutih tipki šalje se neposredno udaljenom računalu)
open hostname [port]
=> povezivanje s udaljenim računalom. Inicijalno: port 23.
quit
=> napuštanje telneta
send
=> prijenos posebnih znakova ( naredbom "send ?" dobije se
detaljniji opis).
set
=> postavljanje parametara ("set ?" za detaljniji opis).
status
=> prikaz trenutnog statusa
toggle
=> izmjena parametara ("toggle ?" za detaljniji opis).
z
=> privremeni prelazak u novu ljusku (shell) na lokalnom
računalu
?
=> prikaz pomoći
279/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
SSH
SSH (Secure Shell = sigurna ljuska) je mrežni servis koji korisnicima omogućuje
uspostavu sigurnog komunikacijskog kanala između dva računala putem nesigurne računalne
mreže.
SSH servis svoj rad bazira na korištenju kombinacije simetrične i asimetrične
kriptografije, te metoda enkripcije koje omogućuju sigurniji prijenos podataka računalnom
mrežom.
Trenutno postoje dvije verzije SSH protokola, SSH1 i SSH2.
SSH2 je novija verzija, koja sadrži određena poboljšanja u odnosu na stariju verziju.
280/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
Kako je već spomenuto SSH servis koristi enkripciju podataka u svrhu njihove zaštite
od neautoriziranog pristupa.
U ovom dijelu biti će vrlo kratko iznesene osnovne napomene vezane za kriptografiju i
enkripciju podataka, kako bi se omogućilo lakše razumijevanje načina na koji SSH protokol
implementira sigurnost.
Postoje dvije osnovne grupe algoritama za enkripciju podataka:
simetrični algoritmi - bazirani na jednom tajnom ključu
asimetrični algoritmi - bazirani na tajnom i javnom ključu
Za enkripciju ili dekripciju podataka, osim samog algoritma, potrebno je poznavati i
ključ (key) na temelju kojeg algoritam provodi kriptiranje podataka.
Ovisno u koju od gore navedenih grupa algoritam spada, ovisi na koji će se način
provoditi enkripcija odnosno dekripcija podataka.
Kod simetrične kriptografije isti ključ se koristi i za kriptiranje i dekriptiranje podataka.
Pošiljatelj kriptira podatke tajnim ključem i tako kriptiranu poruku šalje na odredište.
Primalac poruke istim tajnim ključem može dekriptirati poruku odnosno doći do njenog
pravog sadržaja.
281/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
razmjenu ključeva potrebno obaviti nesigurnim putem (mail, telefon ili sl.) što može ugroziti
privatnost ključa.
Prednost algoritama ove skupine je ta da su iznimno brzi što je glavni razlog njihove
učestale primjene. Najpoznatiji predstavnici ove grupe algoritama su DES (Data Encryption
Standard), IDEA, 3DES, Blowfish i dr.
Asimetrični algoritmi svoj rad baziraju na korištenju dva ključa umjesto jednoga. Svaki
korisnik u tom slučaju posjeduje svoj tajni i javni ključ. Ključevi su međusobno kompatibilni
na taj način da se poruka kriptirana jednim ključem može dekriptirati samo drugim ključem
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 slučaju je sljedeći:
pošiljatelj poruku kriptira javnim ključem primatelja poruke koji je svima
poznat i dostupan
primatelj poruku dekriptira svojim tajnim ključem koji je poznat jedino
njemu
Na taj način svatko svakome može poslati enkripcijom zaštićenu poruku pod uvjetom
da je poznat javni ključ primatelja poruke i time je omogućena sigurna i jednostavna razmjena
podataka između dva korisnika.
282/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
Upravo ovakav koncept iskorišten je i kod SSH protokola gdje se razmjena i dogovor
oko tajnog ključa sesije obavlja asimetričnim RSA algoritmom, da bi se u sljedećoj fazi tako
dogovoreni ključ koristio za simetričnu enkripciju podataka koji se razmjenjuju između
udaljenih računala.
283/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
SSH PROTOKOL
Uspostava veze između dva računala SSH protokolom može se podijeliti u nekoliko
faza:
U prvoj fazi klijent i poslužitelj razmjenjuju podatke o inačici protokola koji
će se koristiti, obavlja se identifikacija korištenih SSH programskih paketa,
provjerava se ispravnost veze i sl. U ovoj fazi enkripcija podataka još se ne
koristi.
U sljedećoj fazi klijent i poslužitelj dogovaraju se o tajnom ključu 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 između klijenta i poslužitelja nakon ove
faze biti će kriptirani na dogovoreni način.
Slijedi treća faza u kojoj se klijent autenticira kod poslužitelja kako bi se na
taj način utvrdio identitet klijenta odnosno provjerile ovlasti pristupa za tog
klijenta. Ukoliko je sve prošlo u redu prihvaća se sesija između klijenta i
poslužitelja nakon čega je moguća sigurna razmjena podataka.
SSH podržava nekoliko načina autentikacije korisnika od kojih je najsigurnija ona koja
koristi RSA algoritam. Postoje metode bazirane na .rhost i host.equiv datotekama koje su
284/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
285/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
Korištenje osnovnih mogućnosti Openssh programa je vrlo jednostavno, što je bio jedan
od osnovnih ciljeva prilikom razvijanja ovog servisa.
Nakon što je program instaliran moguće se odmah spojiti na bilo koje udaljeno računalo
na kojem je instaliran SSH poslužitelj i na kojem korisnik ima otvoren valjani korisnički
račun.
Dovoljno je u naredbenom retku upisati naredbu:
# ssh -l <korisničko_ime> <ime-računala>
nakon čega će se korisniku prikazati poruka koja govori da se radi o pokušaju spajanja
na nepoznato računalo. Od korisnika se traži potvrda za nastavak postupka spajanja, čime ga
se upozorava da se prvi puta pokušava spojiti na udaljeno računalo.
The authenticity of host [hostname] can't be established.
Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
Are you sure you want to continue connecting (yes/no)?
Slijedi postupak unosa korisničke šifre za korisničko ime definirano -l parametrom i
ukoliko se unese valjana šifra korisnik je sigurnim SSH kanalom spojen na udaljeno računalo
na kojem može dalje raditi, tj. time se završava proces uspostave SSH sesije s poslužiteljem.
286/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
Kod ovog pristupa klijent poslužitelju u prvoj fazi postupka autentikacije šalje poruku
koja između ostalih informacija sadrži i podatak o njegovom javnom ključu koji želi koristiti
za autentikaciju. Poslužitelj u svojoj internoj bazi provjerava da li ima podatak o istom
korisniku, te ukoliko ima vraća korisniku znakovni niz (chalenge) koji je kriptiran javnim
ključem tog korisnika.
Nakon toga klijent mora dekriptirati primljenu vrijednost te vratiti odgovor poslužitelju,
koji će potvrditi uspješnu dekripciju primljene vrijednosti.
Budući da je dekripciju moguće obaviti jedino pomoću tajnog ključa istog korisnika,
poslužitelj prihvaća sesiju i autenticira korisnika.
U ovom slučaju poslužitelj nikada ne traži šifru korisnika budući da je kompletni proces
autentikacije obavljen na temelju javnog i tajnog ključa korisnika.
Da bi se omogućio ovakav proces autentikacije klijent prvo mora generirati svoj par
tajni/javni ključ, te nakon toga kopiju javnog ključa pohraniti na poslužitelju.
287/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
Prilikom postupka generiranja ključeva korisnik će biti upitan da unese tzv. passphrase
niz koji pruža dodatni nivo zaštite kod korištenja SSH servisa i koji se može jednostavno
shvatiti kao šifra za korisnikov par ključeva.
Iako nije obavezno definiranje ovog niza (moguće je ostaviti prazan niz, tj. samo
pritisnuti <Enter>), korisnicima se iz sigurnosnih razloga preporučuje korištenje istoga.
Trenutno postoje dvije verzije SSH protokola, SSH1 i SSH2. Zbog toga je moguće ssh-
keygen programu proslijediti -t parametar kojim se definira za koji algoritam se želi stvoriti
par ključeva:
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
Budući da datoteke koje sadrže ključeve korisnika sadrže različita imena, za svaki od
algoritama moguće je generirati zaseban par ključeva. Na taj način omogućuje se spajanje na
različite SSH poslužitelje odnosno izbjegavanje eventualnih problema s kompatibilnošću
software-a između klijenta i poslužitelja.
Ključevi 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
sadrži javni ključ, a druga tajni ključ korisnika. Imena su im identična s jedinom razlikom što
javni ključ sadrži ekstenziju .pub.
Primjeri:
id_rsa
=> datoteka koja sadrži tajni ključ korisnika za SSH2 verziju
protokola koja koristi RSA algoritam za enkripciju
id_rsa.pub
=> datoteka koja sadrži javni ključ korisnika za SSH2 verziju
protokola koja koristi RSA algoritam za enkripciju
288/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
id_dsa
=> datoteka koja sadrži tajni ključ korisnika za SSH2 verziju
protokola koja koristi DSA algoritam za enkripciju
id_dsa.pub
=> datoteka koja sadrži javni ključ korisnika za SSH2 verziju
protokola koja koristi DSA algoritam za enkripciju
identity
=> datoteka koja sadrži tajni ključ korisnika za SSH1 verziju
protokola koja koristi RSA algoritam za enkripciju
identity.pub
=> datoteka koja sadrži javni ključ korisnika za SSH2 verziju
protokola koja koristi RSA algoritam za enkripciju
Kao što je već spomenuto, nakon generiranja vlastitog para tajni/javni ključ, kopiju
javnog ključa klijent mora pohraniti na poslužitelju 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 računalu, a ukoliko se koristi SSH2
verzija protokola potrebno je kopirati ključ id_rsa.pub ili id_dsa.pub u
$HOME/.ssh/authorized_keys2 datoteku udaljenog računala.
Nakon što je stvorena odgovarajuća $HOME/.ssh/authorized_keys ili
$HOME/.ssh/authorized_keys2 datoteka potrebno je ispravno postaviti ovlasti tih datoteka
kako bi se veza mogla uspješno uspostaviti. Potrebno je zadati naredbu:
# chmod 644 .ssh/authorized_keys .ssh/authorized_keys2
što će rezultirati -rw-r--r-- ovlastima, koje svim korisnicima sustava dozvoljavaju
čitanje ovih datoteka.
289/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
Ukoliko je sve dobro podešeno potrebno je još samo pokrenuti proces spajanja SSH
protokolom na udaljeno računalo:
# ssh <ime_računala>
nakon čega je korisnik automatski prijavljen u sustav ukoliko je sve prošlo 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 računalom. Na ovaj
način dodatno je zaštićen korisnikov par ključeva, budući da je osim poznavanja tajnog ključa
u ovom slučaju potrebno i poznavati passphrase niz definiran prilikom postupka generiranja
ključeva čime se dodatno podiže sigurnosni nivo SSH sustava.
U $HOME/.ssh direktoriju korisnika koji koristi SSH servis postoji i datoteka pod
imenom known_hosts. Ona sadrži listu svih računala s kojima je klijentski dio SSH aplikacije
ikada komunicirao, zajedno s njihovim identifikacijskim oznakama (ssh_host_key), što
omogućuje dodatnu identifikaciju udaljenog računala s kojim se želi uspostaviti sesija.
Ssh_host_key je ključ koji sadrži svako računalo s instaliranim SSH servisom i generira
se prilikom instalacije programskog paketa. Koristi se u svrhu međusobne identifikacije
računala koja međusobno komuniciraju SSH protokolom.
290/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
Neke od opcija koje je moguće proslijediti SSH programu u obliku argumenata su:
-c
=> definira se simetrični algoritam koji će se koristiti za
enkripciju podataka. Moguće vrijednosti ovog parametra su: des, blowfish i 3des. Inicijalna
vrijednost je 3des, budući da se isti smatra optimalnim. Blowfish je nešto manje sigurniji od
3des algoritma ali je zato znatno brži, dok je des algoritam ovdje moguće navesti isključivo iz
razloga kompatibilnosti sa SSH1 verzijom protokola, a iz sigurnosnih razloga ne preporučuje
se njegovo korištenje.
-f
=> zahtjeva se od ssh klijenta da radi kao pozadinski proces.
Ova se opcija vrlo često koristi u slučajevima kada se želi uspostaviti sigurni SSH kanal
između dva računala, koji će se kasnije iskoristiti za tuneliranje drugih TCP protokola.
-g
=> dozvoljava se udaljenim računalima spajanje na lokalno
preusmjereni port. Ova opcija također je vezana za mogućnost korištenja preusmjeravanja
portova.
-l
=> definira se korisničko ime (-l kao login) korisnika, pod kojim
se želi spojiti na udaljeno računalo.
-p
=> definira se port udaljenog računala na koji će se klijent
aplikacija spajati. Inicijalno je to port 22.
-x i -X
=> onemogućuje se ili omogućuje preusmjeravanje X11 sesija
peko sigurnog SSH kanala.
-C
=> omogućuje se kompresija podataka koji se prenose SSH
kanalom, a nivo kompresije može se definirati CompressionLevel parametrom u
konfiguracijskoj datoteci klijent programa.
-v
291/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
-2
=> forsira se korištenje SSH2 verzije protokola.
SSH klijentski dio aplikacije svoje konfiguracijske parametre prima iz sljedećih izvora:
komandna linija
$HOME/.ssh/config konfiguracijska datoteka korisnika
/etc/ssh/ssh_config globalna konfiguracijska datoteka
Sve opcije koje se zadaju putem naredbenog retka nadjačavaju one definirane u
$HOME/.ssh/config datoteci, a sve definirane u $HOME/.ssh/config datoteci nadjačavaju one
definirane u globalnoj /etc/ssh/ssh_config datoteci.
Svi parametri koje je moguće proslijediti putem naredbenog retka moguće je definirati u
navedenim konfiguracijskim datotekama.
292/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
293/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
-b
=> definira se veličina ključa kojeg poslužitelj generira prilikom
instalacije. Inicijalno je to 768 bitova.
-d
=> pokretanje moda za otklanjanje grešaka. Ukoliko se zada ova
opcija sustav će u log datoteke bilježiti sve akcije vezane za rad poslužitelja, a ujedno će se i u
konzoli generirati odgovarajuće poruke što olakšava otklanjanje grešaka.
-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 izvršavanje
postupka autentikacije. Ukoliko se klijent ne autenticira za to vrijeme poslužitelj prekida
sesiju s klijentom. Inicijalna vrijednost ovog parametra je 600 sekundi.
-h
=> definira se datoteka iz koje se čita javni ključ poslužitelja.
Ovaj parametar potrebno je definirati u slučajevima kada se sshd program pokreće pod
ovlastima drugog korisnika budući da isti nema ovlasti pristupa ssh_host_key datoteci koja
inicijalno sadrži ovu vrijednost. U tom slučaju korisnik definira vlastitu datoteku kojoj ima
pristup, te je nakon toga navede kao parametar sshd poslužitelju.
294/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
-i
=> ovaj parametar definira se u slučajevima kada se sshd
program pokreće putem inetd poslužitelja. U principu se ovakav pristup ne preporučuje,
budući da se na taj način nešto usporavaju performanse sustava.
-p
=> definira se mrežni port na kojem poslužitelj osluškuje
zahtjeve klijenta. Na ovaj način moguće je ssh daemon programu zadati bilo koji port koji će
se koristiti za uspostavu mrežnih sesija. Inicijalno je to port 22.
Kako je već ranije spomenuto sshd program svoju konfiguraciju čita iz datoteke
/etc/ssh/ssh_config (osim ukoliko nije drugačije definirano -f parametrom).
U toj datoteci moguće je definirati brojne ključne riječi kojima se utječe na rad sshd
poslužitelja, a neke od njih su:
AllowGroups
=> parametar koji se koristi za definiranje grupe korisnika koja
ima prava pristupa SSH poslužitelju. Moguće je navesti više korisničkih grupa, pri čemu se
iste odvajaju razmakom. Inicijalno je dozvoljeno spajanje korisnika bez obzira kojoj grupi isti
pripada. Moguće je korištenje wildcard znakova * i ? za preciznije definiranje liste
korisničkih grupa.
AllowUsers
=> slično kao i AllowGroups parametar, samo što se odnosi na
korisnike, a ne na grupe korisnika.
AllowTCPForwarding
=> ovaj parametar omogućuje tuneliranje ostalih protokola
preko SSH sigurnog kanala. Inicijalno je postavljen na vrijednost "yes".
Banner
=> parametar koji je omogućen samo kod SSH2 verzije
protokola, a definira datoteku čiji će se sadržaj prikazati korisniku prilikom uspostave veze s
udaljenim računalom.
295/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
Chipers
=> definiraju se grupe algoritama koje se mogu koristiti za
kriptiranje podataka. Moguće je definirati sljedeće algoritme: aes128-cbc, 3des-cbc, blowfish-
cbc, cast128-cbc i arcfour. Moguće je definirati više algoritama pri čemu se isti u tom slučaju
odvajaju zarezom.
CheckMail
=> definira se da li sshd poslužitelj mora provjeravati mail
korisnika prilikom njegovog spajanja. Inicijalna vrijednost ovog parametra je "no".
Deny Groups i Deny Users
=> parametri kojima se na sličan način kao i kod AllowGroups i
AllowUsers omogućuje zabrana pristupa SSH servisu. Korištenjem ovih parametara moguće
je vrlo precizno definirati kojim korisnicima je omogućeno korištenje SSH servisa.
IgnoreRhosts
=> onemogućuje se autentikacija korisnika na temelju .rhosts i
hosts.equiv datoteka. Inicijalna vrijednost ovog parametra je "yes", budući da se ovaj način
autentikacije smatra manje sigurnim.
IgnoreUserKnownHosts
=> definira se da li sshd poslužitelj 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 korisničke šifre. Inicijalna vrijednost ovog parametra je "yes".
PermitRootLogin
=> definira se da li je dozvoljeno prijavljivanje pod korisničkim
računom administratora sustava. Inicijalna vrijednost ovog parametra je "yes". Moguće je
definirati sljedeće vrijednosti ovog atributa: yes, no, forced-commands-only (omogućuje
prijavljivanje administratora na temelju njegovog para tajni/javni ključ) i without-password
(bez korisničke šifre).
Port
=> definira se mrežni port na kojem sshd poslužitelj osluškuje
zahtjeve. Inicijalno je to port 22.
296/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
Protocol
=> definira se verzija protokola koju koristi sshd program
poslužitelj. Moguće 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 stanovišta sigurnosti, kojom se od sshd
poslužitelja zahtjeva da provjeri IP adresu i ime računala s kojeg zahtjev dolazi. Na ovaj način
pruža se dodatna zaštita od IP i DNS spoofing napada u kojima neovlašteni korisnik lažira IP
adresu ili ime računala s kojeg konekcija dolazi, kako bi na taj način ostvario neautorizirani
pristup resursima drugog sustava.
RhostsAuthentication
=> definira se da li je moguća autentikacija samo na temelju
.rhosts ili hosts.equiv datoteka. U normalnim okolnostima ne preporučuje se korištenje ove
metode budući 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 nešto
je sigurnija u odnosu na prethodno navedenu, ali je također 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", budući da se ovaj mehanizam autentikacije smatra prilično
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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
X11Forwarding
=> omogućuje se preusmjeravanje X11 protokola putem
sigurnog SSH kanala. Inicijalno je ova mogućnost isključena.
Pomoću ovih parametara moguće je vrlo precizno definirati ponašanje SSH daemon
programa.
Authorized_keys datoteke
Kako je već ranije spomenuto authorized_keys datoteka sadrži popis javnih RSA
ključeva svih korisnika koji se SSH protokolom žele spajati na SSH poslužitelj pomoću 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 moguće je
koristiti obje datoteke ukoliko se želi da poslužitelj jednako podržava SS1 i SSH2 verzije
protokola.
Svaki redak ove datoteke sadrži jedan javni ključ (RSA ili DSA, ovisno o korištenom
algoritmu enkripcije) korisnika.
Znak # kao i većini drugih slučajeva predstavlja početak komentara te se kao takav
ignorira.
Za datoteku $HOME/.ssh/authorized_keys osim što je na raspolaganju korisniku u
čijem se home direktoriju nalazi, također se preporučuje da bude dostupna administratoru
sustava. U nju će korisnici kopirati svoj javni ključ za SSH1 verziju protokola, ili preciznije
rečeno identity.pub datoteku.
U datoteku $HOME/.ssh/authorized_keys2 korisnici kopiraju ključeve vezane za SSH2
verziju protokola, odnosno id_rsa.pub i id_dsa.pub datoteke.
Navedene datoteke sadrže privatne ključeve tog računala. Slično kao što i svaki korisnik
posjeduje svoj par javni/tajni ključ, tako i svako računalo koje koristi SSH servis ima svoj
zasebni par ključeva. Ove datoteke iz tog razloga moraju imati ovlasti koje samo
298/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
$HOME/.rhosts datoteka
Ova datoteka sadrži razmakom odvojene vrijednosti korisničko ime - ime računala, i svi
tako navedeni korisnici sa navedenog računala mogu se spojiti na to računalo bez navođenja
korisničke šifre.
Korištenje .rhosts datoteke naslijeđeno je od starijih mrežnih servisa kao što su rsh, i
rlogin koji se danas više ne koriste. Iz navedenog odmah se može zaključiti zašto se
korisnicima nikako ne preporučuje korištenje ovakvog mehanizma autentikacije, budući da je
299/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
isti prilično nesiguran. Ukoliko se želi omogućiti ovakav način autentikacije, to je potrebno
eksplicitno navesti u konfiguracijskoj datoteci sshd poslužitelja.
$HOME/.shosts datoteka
Shosts datoteka je posebno određena datoteka koja obavlja ulogu .rhosts datoteke, s
jedinom razlikom da se koristi isključivo za ssh servis.
/etc/hosts.equiv datoteka
U ovoj datoteci navedena su imena računala koja se mogu spojiti na dotično računalo
bez odgovarajuće korisničke šifre, pod pretpostavkom da korisnik ima isto korisničko ime na
oba računala.
Slično kao i kod .rhost datoteke korisnicima se iz sigurnosnih razloga ne preporučuje
korištenje ove datoteke u svrhu autentikacije udaljenih korisnika.
/etc/shosts.equiv
Isto kao i /etc/hosts.equiv, samo što datoteka vrijedi isključivo za SSH servis.
300/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
OPĆENITO O PREUSMJERAVANJU
TCP PORTOVA I SFTP
Princip je sljedeći:
SSH klijentu potrebno je reći koji se port na lokalnom računalu želi tunelirati kroz
sigurni SSH kanal, i na koji port udaljenog računala se taj promet želi preusmjeriti. U tu svrhu
koristi se već prije spomenuta -L opcija ssh klijenta.
Nakon toga kompletni promet lokalnog računala koji se šalje na u prethodnoj fazi
definirani port biti će putem sigurnog SSH kanala preusmjeren na sshd poslužitelj navedenog
udaljenog računala.
Sshd poslužitelj prima kriptirani promet na SSH portu 22 i prosljeđuje ga servisu na
port koji je u prvom koraku definiran kod ssh klijenta.
Servis vraća odgovor na primljeni zahtjev, te ga prosljeđuje sshd poslužitelju, koji ga
putem SSH kanala vraća klijentskom dijelu aplikacije.
301/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
302/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
SCP
303/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH
ZAKLJUČAK
U ovom seminaru dan je kratki pregled osnovnih karakteristika telnet i SSH protokola,
te neke od mogućnosti njihove primjene. Opisani su temeljni programski paketi neophodni za
korištenje SSH protokola, kao i osnovni postupci njihove konfiguracije.
304/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
Frane Gjeldum
ARHIVIRANJE NA
UNIX RAČUNALIMA
305/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
Opći dio
Obično arhive dolaze s ekstenzijom «.tar»! Nije potrebno navoditi ekstenziju, ali dobro
je radi preglednosti.
306/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
Autori tara
Tar je originalno napisao John Gilmore, ali mnogi drugi su ga modificirali i
unapređivali.
Važno je istaknuti da je tar zajednički proizvod rada više ljudi koji su koristeći tar
uočavali probleme, pronalazili rješenja i podijelili svoja mišljenja.
Tar može primiti različite argumente koji specificiraju i definiraju akcije nad pojedinim
dokumentima ili arhivom. Glavni tipovi argumenata spadaju u dvije klase:
operacije
opcije
Dozvoljeno je specificiranje i više od jedne opcije odjednom, a isto tako nije potrebno
navođenje nikakve opcije. Dok kod izvršavanja određenih operacija zahtjeva se specificiranje
samo jedne odjedanput. Većinu tar operacija i opcija možemo pisati u bilo kojem od tri forme:
Long (mnemonic) forma
Short forma
Old style forma
Na primjer umjesto tipkajući naredbu ;
307/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
--list
-t listamo sadržaj arhive ili
--exstract
-x ekstrahiramo članove arhive.
--file=archive-name
-f archive-name
Verbose opcija prikazuje detalje koji još uvijek radi. Na primjer, ukoliko želimo vidjeti
proces upisivanja dokumenata u arhivu i želimo pojasniti određene stvari.
--verbose
-v
Nakon upoznavanja s osnovnim tar opcijama proučiti ćemo kako kreirati arhive, listati
arhive i ekstrahirati članove iz arhive.
308/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
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 sadrži tri dokumenta.
Navedena tri dokumenta ćemo spremiti u arhivu. Dokumente ćemo nazvati «blues»; «folk»;
«jazz», direktorij ćemo nazvati «practice», a arhivu «collection.tar». U daljnjim primjerima
pretpostavlja se da se nalazimo u direktoriju «practice» koji je poddirektorij «home»
direktorija.
Koristeći istu naredbu s «verbose»opcijom, tar će sam dodati imena dokumenata koje
koristi dok radi .To se često koristi da prikažemo akcije koje inače ne bi vidjeli.
309/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
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:
Kao što se može vidjeti, sistem reagira jednako bez obzira da li uporabimo «long» ili
«short» formu. Već je prije napomenuto da pogrešan redoslijed može dovesti do neželjenih
rezultata kod upotrebe «short» opcije. Kao primjer evo naredba:
310/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
Listanje arhiva
Često želimo znati što pojedina arhiva sadrži. Lako doznamo imena članova arhive
upotrebom list operacije. Tako npr. možemo pregledati sadržaj arhive «collection.tar»
tipkajući naredbu:
Moguće je i točno odraditi član neke arhive pa nam tar vrati samo njega:
$tar – list –file=collection.tar blues
Tar bi odgovorio;
Practice/
Practice/blues
Practice/jazz
Practice/collection.tar
311/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
Naravno nema smisla kreirati arhivu s članovima ako ne možemo te članove izvaditi i
uporabiti. Za ekstrahiranje članova upotrebljava se operacija (-- extract,-x). Ekstrahiranje
članova arhive ne mijenja samu arhivu; možemo taj postupak obaviti onoliko puta koliko
nam treba. Slično i drugim operacijama možemo ekstrahirati cijelu arhivu ili samo pojedine
članove tj. dokumente.
Ako želimo ekstrahirati cijelu arhivu navest ćemo samo ime arhive bez imena članova.
$ tar –xvf collection.tar
(Tar će vratiti sve članove arhive.)
Ako želimo ekstrahirati točno odrađen član, navest ćemo ime dokumenta kao parametar
nakon imena arhive.
$tar – extract – file=collection.tar blues
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 sljedećoj
naredbi:
312/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
Ako želimo dodati dokument već postojećoj arhivi ,ne trebamo kreirati novu arhivu;
možemo koristiti « –append (-r)».Koristeći «append» možemo dodati dokument istog imena
kao i dokument u arhivi a da se taj dokument ne izbriše. Tar dozvoljava beskonačan broj
dokumenata sa istim imenima. Važno je navest ime dokumenta koji dodajemo kao argument
jer nema «defaulta».
Da bi demonstrirali uporabu operacije «append», kreirat ćemo dokument «rock» u
«practice direktoriju a nakon toga ga dodati arhivi «collection.tar»Moramo utipkati sljedeću
naredbu:
Vrlo slična operacija kao «append» je «--update (r)».Ona ažurira tar arhivu
uspoređujući 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
nešto dodati u dokument blues, čime ga zapravo mijenjamo.
313/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
Da bi dodali jednu ili više arhiva na kraj neke druge arhive trebamo uporabiti « –
concatenate (--catenate,-a)» operaciju. To je mnogo lakše nego dodavati svaki član
pojedinačno.
Nova arhiva nakon spajanja će se zvati istim imenom kao prva navedena arhiva u
naredbi i sadržavat će članove svih arhiva, čak i ako se članovi isto zovu, zajedno će
koegzistirati. Znači da nema brisanja članova.
Kreirati arhivu koja sadrži sve dokumente u tom «file» sistemu znači napraviti «back
up» tog file sistema. Te arhive mogu biti ponovno uporabljene da se obnovi tj. restaurira
svaki od arhiviranih dokumenata. To je posebno značajno ako se fizički ošteti disk ili slučajno
obriše neka datoteka.
Kopije file sistema nazivamo «dumpovima».
314/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
Treba razlikovati
potpune arhivske kopije(«full dumps»)
diferecijalne kopije(«incremental dumps»)
315/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
«CPIO» PROGRAM
Cpio kopira dokumente u tar ili cpio arhivu. Arhiva može biti dokument na disku ili
npr. magnetskoj traci. Slično kao i tar obavlja i ekstrahiranje van arhiva. Gnu cpio podupire
sljedeće 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.
Pošto podržava i tar format , cpio je kompatibilan i sa tar programom.
Kod ekstrahiranja cpio prepoznaje vrstu formata arhiva i može čitati i arhive kreirane na
računalima sa drukčijim poretkom bajtova.
Gnu cpio izvodi tri primarne funkcije i tri operativna načina 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
316/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
Ako želimo arhivirati cijelo direktorijsko stablo uporabit ćemo naredbu «find» za
dobavljanje liste dokumenata.
Copy-in mode
U «copy –in modu» cpio ekstrahira dokumente van arhive i lista sadržaj arhive.
Arhiva se nalazi na standardnom ulazu. Moguće je uporabiti i predloške («paterns») pa
samo imena dokumenata u arhivi koja se podudaraju sa zadanim predlošcima će biti
ekstrahirana. Ako nisu zadani predlošci, ekstrahirat će se svi dokumenti iz arhive.
Ekstrahiranje arhive zahtjeva malo više razmišljanja jer cpio neće kreirati direktorije za
obnovljene dokumente po « defaultu», ni ti će prepisati stare dokumente bez da mu zadamo
opciju.
317/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
[--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 smještaju u trenutno aktivni direktorij. Opcija «-i» ekstrahira arhivu a «-v»
prikazuje imena dokumenata redoslijedom kako se ekstrahiraju.)
Copy-pass mode
318/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
Primjer:
319/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
« DD » PROGRAM
Još jedan program , sličan tar ili cpio programima koji se može uporabiti za arhiviranje
je dd program. On kopira dokumente («files») uz manipuliranje ulazno-izlaznim
(i/o)veličinama blokova. Opcionalno se mogu vršiti konverzije nad dokumentima.
Po «defaultu» kopira dokumente sa standardnog ulaza na standardni izlaz.
Opća sintaksa:
dd[option]…
conv=CONVERSION,CONVERSION]…
(kopira dokument ali prema tome što je navedeno kao argument)
-«ascii» (pretvara ebcdic u ascii)
-«ebcdic» (pretvara ascii u ebcdic)
-«lcase» (pretvara velika slova u mala)
-«ucase» (pretvara mala slova u velika)
Vidimo da opcija ima dosta , ali najbolje će neke stvari objasniti na konkretnom
primjeru.
320/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Arhiviranje na Unix računalima
U sljedećoj «shell» naredbi kopirat ćemo podatke u blokove velike 512 kb,
Između diska i trake ali nećemo spremati ni restaurirati podatke u «labelu» na početku
diska.
Primjer:
(dd bs =4k skip=1 count=0 && dd bs=512 k) < $disk > $ tape
-kopirano je sve osim «labele» na početku 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Davorin Šajnović
322 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
UVOD
323 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
MOUNT
Sustavi datoteka
Da bi mogli montirati neki od uređaja tipa diska ,cd-rom-a ili npr. Usb-sticka moramo nešto
spomenuti o sustavima datoteka. Cijela priča se svodi na to da ne možemo jednostavno
ubaciti cd-rom ili priključiti usb stick i i očekivati da sustav sve sam obavi(pročita podatke ili
ih zapiše) već moramo te uređaje «montirati». Sustavi datoteka tvore osnovu za pohranu
podataka na Linux računalima. Linux programi, biblioteke, sustavske datoteke i korisničke
datoteke se nalaze u sustavima datoteka. Zbog specifičnog svojstva Linuxa da sve resurse s
kojima raspolaže tretira kao datoteka ,kod UNIX-Linux korisnika se uvriježila izreka «sve je
datoteka». S gledišta korisnika postoje tri vrste datoteka:
- obične datoteke
- kazala datoteke
- specijalne datoteka
Malo ćemo pogledati ovu zadnju vrstu tj. specijalne datoteke! Specijalne datoteke su vrlo
neobično ali zgodno svojstvo UNIX-a. Specijalne datoteke se koriste(čitaju, pišu) kao i obične
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 nužno.Tako ako želimo pisati na pisaču pišemo u datoteku «/dev/lpt». Prednost ovakve
organizacije ulaza i izlaza je sljedeća:
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 zaštitni mehanizam i za datoteke i za ulazno-izlazne jedinice itd.
324 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Sad kad smo nešto rekli o sustavima datoteka pogledajmo kako se moze dodavati i
uklanjati CD-ROM, diskovna particija, usb mp3 player, flopy disk itd.
Da bismo uspostavili sustav datoteka u stablu direktorija, moramo imati fizičku
particiju, CD-ROM , flopy i sl. Isto tako moramo provjeriti postoji li direktorij u kojem
želimo dodati sustav datoteka. Samim postavljanjem sustava datoteka nećemo dodati(stvoriti)
takav direktorij mount point, već on mora postojati prije nego počnemo stvarati sustav
datoteka. Recimo da želimo stvoriti sustav datoteka u direktoriju /mnt za CD-ROM(pogon
/dev/sr0). Mora postojati direktorij /mnt inače će postupak biti prekinut. Nakon što ste pod tim
direktorijem stvorili sustav datoteka svi podatci sa CD-ROM-a pojavit će se u direktoriju
/mnt , inače je on prazan.Napomenimo i to da se unutar direktorija /mnt može kreirati više
različitih sustava datoteka tipa CD-ROM-a, WIN_C particije, usb, flopy pa im se pristupa na
način /mnt/cd-rom ili /mnt/usb itd.
Da bismo uspostavili sustav datoteka upotrijebit ćemo naredbu «mount» , a sintaksa je
sljedeća: «mount device mountpoint» tj. gdje je device fizički uređaj(disk ili particija) koji
325 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Argument Opis
-w Stvaranje sustava dat. Sa dozvolom za čitanje i pisanje
Prvo moramo vidjeti kako je označena particija koju hočemo dići! U zavisnosti o tome na
koju smo granu stavili hard disk, označavanje diska može biti sljedeće:
hda - primarni master
hdb – primarni slave
hdc – sekundarni master
hdd – sekundarni slave
Isto tako potrebno je znati i «broj» particije na disku koju hoćemo montirati. To ćemo
najlakše saznati ako u konzoli otipkamo sljedeće: cat /proc/partitions
Dobiti ćemo listu particija zajedno sa veličinama(izraženo u blokovima) i brojem particije.
Kada znamo koje particije želimo montirati, trebamo to ubaciti u /etc/fstab fajl ,možete ga
editirati sa vi editorom na način da utipkate vi fstab. Otvorit će se nešto slično ovome:
/dev/hda7 swap swap pri=1 0 0
/dev/hda6 /ext2 defaults 1 1
/dev/hda5 /boot ext2 defaults 1 1
326 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
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 kažemo Linuxu da montira win
particije.Ti direktoriji moraju postojati inače ćemo dobiti poruku da je montiranje
nemoguće(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 ručnog mountanja bilo kojih particija ili uređaja(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 kaže montiraj, -t ukazuje Linuxu na fajl sistem particije, vfat govori da je to
FAT a može biti i iso9660 u slučaju da se montira cdrom uređaj itd. /dev/hda1 govori da se
mounta hard disk br. 1 a možemo pisati i /dev/cdrom ako hočemo mountati cd-rom uređaj.
/win/c direktori gdje hočemo montirati particiju a obično se koristi /mnt kao mount
point(/mnt/win/c).
A odmontiravanje ide ovako:
umount /dev/hda1.
327 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
328 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Nastavak :
mount /mnt/windows Kasnije koristite samo "mount /mnt/windows" U ranijim verzijama
distribucija pisanje po ntfs particijama nije bilo dozvoljeno iz sigurnosnih razloga (zbog
nestabilnosti dijela kernela koji se brine o pisanju).
329 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Da bi smo mogli uopće koristiti USB potrebno je saznati koji driver je potreban za sam
USB.To će mo naći tako da otkucamo naredbu dmesg ili lspci i dobijemo nešto slično ovome:
otipkajmo:
localhost @root $ lspci –v | grep USB
00:07.2 USB Controller: VIA Technologies, Inc. USB (rev 1a) (prog-if 00 [UHCI])
Subsystem: VIA Technologies, Inc. USB Controller
00:07.3 USB Controller: VIA Technologies, Inc. USB (rev 1a) (prog-if 00 [UHCI])
Subsystem: VIA Technologies, Inc. USB Controller
Iz ovog gore vidimo da nam je potreban UHCI driver u kernelu za core USB-a, a treba nam i
driver za massstorage i SCSI driver...
Kernel dio! Ako nemate kernel-sorce instaliran na vaše računalo instalirajte ga sa
instalacijskog cd-a ili downlodajte svoju verziju s interneta.
Evo kratkod primjera instalacije s cd-a.
cd /mnt/cd_rom
rpm –i kernel-sorce 2.6.8.1 (ili koji već imate...)
i potvrdite s enterom sve do kraja!
Ukoliko imate instaliran kernel dio ovo gore preskočite!
Otipkajmo sljedeće naredba:
cd /usr/src/linux
make menuconfig
Zatim odaberite:
Device drivers SCSI device support
<M>SCSI disk support
zatim,
USB support
<M>UHCI HCD(most Intel and Via) support
<M>USB Mass Storage support
i na kraju
File systems DOS/FAT/NT Filesystem
330 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
<M>MSDOS fs support
<M>VFAT (Windows-95) fs support
331 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Kao što smo već mogli vidjeti u gornjim primjerima smo editirali datoteku fstab.Datoteku
fstab čitaju mount , umount ,swapon i fsck naredbe, zato je bitno da su u njoj točni podatci.
Naredbe mount i umount koriste datoteku fstab da bi znale što želimo da uradimo ako smo na
komandnoj liniji zadali samo ime particije ili točku povezivanja. Pogledajmo kako bi mogla
izgledati datoteka fstab:
U svakom redu ima po šest polja razdvojenih razmacima. Svaki red opisuje po jedan sistem
datoteka. Polja su obično poravnata zbog bolje preglednosti ali to nije obavezno. Prvo polje
prikazuje ime uređaja ili oznake koja mu je pridružena naredbom e2label(LABEL=oznaka).
Datoteka fstab može sadržavati veze do udaljenog sistema i u tom slučaju prvo polje sadrži
NFS putanju. Zapis server: /resurs upućuje na direktorij /resurs na računalu serveru. U
drugom polju zadaje se točka povezivanja, a treće polje označava tip sistema datoteka. Točno
ime tipa koristi se kako bi se raspoznali određeni sustavi datoteka u ovisnosti od konfiguracije
sistema. Četvrto polje sadržava opcije za povezivanje(po defaultu je rw, za čitanje i upis).
332 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Peto polje se obično ne koristi, a u njemu je zadana učestalost ispisa koja se može 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 moguće , tako da se ne zadaje ista vrijednost za dva sustava datoteka koji
su na istom disku jer će pomjeranje glave naprijed i nazad znatno pogoršati performanse.
Samo sustavi datoteka na odvojenim diskovima ispituju se paralelno.
Sada koristeći 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 obično
izvršava iz pokretačkih skripti u toku podizanja sistema. Operator –t ograničava tu operaciju
na sisteme datoteka određenog 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 sadržaj datoteke mtab. Isto tako ako želimo nešto 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 potraži dodatni argument koji
ako ne postoji jednostavno dobijemo poruku da se specificirani filesystem ne može
odmontirati jer nije montiran. Važno je napomenuti da sustav datoteka ne može biti
odmontiran jedino ako je zauzet. Ako pokušamo odmontirati takav filesystem dobit ćemo
poruku o zauzeću. Da bi sustav bio zauzet dovoljno je da user promijeni direktorij naredbom
„cd“ i da taj filesystem bude zauzet. Naredbom # cat /etc/mtab možemo vidjeti sadržaj
datoteke mtab-a.
333 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
SAMBA
Uvod
U ovom dijelu opisano je instaliranje, podešavanje i korištenje paketa Samba. Pomoću sambe
možemo učiniti sljedeće:
Samba je protokol koji koriste Microsoftovi operativni sustavi za dijeljenje datoteka i pisača.
Tvrtke Microsoft i Intel su 1987. god. razvile protokol SMB(Server Message Block) ,a
Andrew Trigdell je prilagodio sustav raznim UNIX i Linux računalima.
Samba je danas dobro podržana i stalno se razvija i proširuje funkcionalnost. Nudi stabilan
mehanizam velike snage za integriranje računala pod Windowsom u mrežu pod Linuxom.
Adut sambe je to što je podrebno instalirati jedan paket na jedno računalo pod Linuxom, a na
strani Windowsa nije potreban dodatni softwer pod uvjetom da je računalo pod Windowsima
konfigurirano za rad u „Microsoft mreži“.
334 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
• U datoteci smb.conf računala definiraju koji klijenti mogu pristupati resursima preko
Sambe. U datoteci treba da se nalaze samo IP adrese(ili rasponi adresa) koji tu trebaju
biti.
• pomoću zaštitne barijere(firewall) s filtriranjem paketa blokirati pristup TCP
priključcima koje koristi CIFS s Interneta. To su TCP priklj. od 137 – 39.
#Koristi se zsebna zapisnička datoteka za svako računalo , granica veličine 500K za svaku
log file = /var/log/samba/log.%m
max log size = 500
#definiranje načina zaštite resursa. Većina korisnika želi sigurnost na nivou korisnika.
#Detalji se mogu naći u datoteci security_level.txt u dokumentaciji Sambe
security = user
335 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
#Većini korisnika ova opcij daje bolje performanse.Proučiti datoteku speed.txt u stranicama
#priručnika
socket options = TCP_NODELAY
NAPOMENA !
Printeri moraju biti konfigurirani na Linux računalu.
Micanjem komentara „;“ aktiviraju se zakomentirani redovi.
336 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Iz komentara se može vidjeti da korisnici kada se prijave na svoja računala mogu koristiti
matične 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 započinje
imenom odlomka u uglatim zagradama, primjerice odlomak [global]. Unutar svakog
odlomka paratetri se određuju pomoću parova „ime = vrijednost“, primjerice
workgroup=MojaGrupa. Datoteka smb.conf sadrži tri posebna odlomka [global], [homes],
[printers], te jedan ili više korisničkih odlomaka. Odlomak [global] upravlja parametrima koji
se koriste za kompletan smb poslužitelj, a sadrži osnovna podešenja(default)vrijednosti koje
se koriste u drugim odlomcima. Prvi redak odlomka [global] definira radnu grupu kojoj
pripada naše računalo. Isto tako sadrži i mjesto na kojem je definiran sustav za ispis na našem
poslužitelju ,a u sljedećem retku je naznačeno mjesto gdje se nalazi datoteka za podešenje
ispisa.
Odlomak [homes] omogućuje mrežnim klijentima povezivanje s korisničkim početnim
direktorijem na našem poslužitelju, a da pritom nema izravnog zapisa u datoteci smb.conf.
Uputimo li zahtijev za određenom uslugom na poslužitelj samba on će prvo pregledati
datoteku smb.conf i potražiti poseban odlomak koji odgovara traženoj usluzi. Ako ne nađe
odgovarajući zapis u datoteci, program Samba provjerava odlomak [homes]. Ako on postoji,
Samba traži datoteku s lozinkama, a u njoj početni direktorij onog korisnika koji je uputio
zahtijev. Nakon toga će taj direktorij postati dijeljeni direktorij na mreži.
Odlomak [printers] određuje način ispisa u slučaju da u datoteci smb.conf nema posebnih
zapisa koji se odnose na način ispisa. Kao i kod odlomka [homes], ako nije nađen poseban
zapis koji određuje način ispisa na pisač, Samba koristi odlomak [printers] kako bi
korisnicima omogućila pristup pisačima koji su definirani u datoteci /etc/printcap. Parametar
printable možemo podesiti na vrijednost yes i u tom slučaju se zadani pisač može koristiti za
ispis. Parametar guest ok služi za podešavanje mogućnosti ispisa za korisnika koji se prijavio
kao gost.
337 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Dijeljenje direktorija
Nakon što se uspješno postavi poslužitelj Samba, možemo stvoriti posebne dijeljene
direktorije kojima mogu pristupati određene grupe korisnika ili javne direktorije kojima
mogupristupati svi. Pretpostavimo da želimo napraviti direktorij kojem dozvoljavamo pristup
samo određenog korisnika. Trebamo napisati novi odlomak i unjeti potrebne podatke. Zadati
ćemo korisnika, stazu korisničkog direktorija i još neka podešenja:
[davorovdir]
comment = Davorov udaljeni direktorij
path = /usr/local/src
valid users = tomi
browseable = yes
public = no
writable = yes
create mod = 0700
Na ovaj način stvoren je dijeljeni direktorij pod nazivom davorovdir. Staza do direktorija na
lokalnom poslužitelju je /usr/local/src. Kako browsable ima vrijednost yes direktori će se
pojaviti u mrežnom poopisu direktorija, a kako je parametar public postavljen na no moći će
mu pristupati samo korisnik s imenom tomi. Pristup drugim korisnicima možemo omogućiti
tako da ih se navede u parametru valid users.
338 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
339 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
340 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Primjer zapisnika gdje je prikazano uspješno povezivanje i jedna pogrešno otkucana lozinka:
[2004/27/12 19:59:26] smbd/reply.c Rejecting user 'ned' : autentication failed
[2004/27/12 20:05:06] smbd/service.c klum (192.168.1.51) connect to service ned as user
ned (uid =500, gid = 500) (pid 1275)
[2004/27/12 20:10:43] smbd/service.c klum (192.168.1.51) closd connection to service ned
[2004/27/12 20:05:44] smbd/service.c klum (192.168.1.51) connect to service admin as user
ned (uid =500, gid = 500) (pid 1275)
Locked files:
Pid Deny mode R/W Oplock Name
--------------------------------------------------------
1275 DENY_WRITE RDONLY EXCLUSIVE+BATCH/home/admin/doc/ips.txt
1275 DENY_NONE RDWR NONE /home/ned/install_notes.txt
Rezultat naredbe smbstatus sadrži prilično dugačke redove koji su ovdje skraćeni zbog
jednostavnijeg prikaza i jasnoće!
341 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Poslje greški u radu, programi pod Windowsima često ostavljaju zaključane datoteke iza sebe
što izaziva probleme prilikom ponovnog pokretanja programa. Može se nasilno otključati
datoteka zaustavljanjem procese smbd koji je zaključao tu datoteku.Nasilno otključavanje
može dovesti do grešaka u datotekama.
Zaključak
Samba programski paket je vrlo moćan alat u slučajevima kada postoji potreba za
međusobnim dijeljenjem računalnih resursa između računala sa instaliranim Linux i Windows
operativnim sustavima. S obzirom na sve češće situacije u kojima se unutar iste računalne
mreže intenzivno koriste računala sa instaliranim različitim vrstama i inačicama operativnih
sustava (tipično Linux i Windows, ali nisu isključeni niti ostali operativni sustavi), snaga
ovog programskog paketa dolazi do izražaja. Naime, Samba paketom omogućava se
međusobno dijeljenje diskovnog prostora (engl. shares), zatim pisača, pa čak i serijskih
portova između različitih operativnih sustava, što ovaj programski paket čini gotovo
neizbježnim izborom u 'mješovitim' radnim okolinama. Velika prednost Samba paketa leži u
činjenici da Samba može zamijeniti Windows poslužitelje potrebne za uspostavu lokalne
mreže (WINS poslužitelj i kontrolor domene). Cijene Windows poslužitelja su relativno
velike dok se Samba distribuira besplatno. Treba uzeti u obzir da se Windows NT poslužitelji
dodatno naplaćuju ovisno o tome koliko je računala u mreži na njih spojeno. Iako Samba
paket još uvijek nema potpunu funkcionalnost NT poslužitelja, on se bez problema može
koristiti u manjim lokalnim mrežama (do 30 računala) kod kojih nema potrebe za pomoćnim
WINS poslužiteljem i pomoćnim kontrolorom domene koje Samba još uvijek ne podržava.
Samba WINS poslužitelj i kontrolor domene rade zadovoljavajuće na računalu sa P166
procesorom i 128MB RAM-a što su puno manji zahtjevi od onih koje nameće Windows NT
operacijski sustav. Može se zaključiti da je Samba dobra (i jeftinija) zamjena za Windows NT
poslužitelje u malim lokalnim mrežama kao što su SOHO mreže.
342 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Branimir Živković
343 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
UVOD
Ime awk nastalo je od inicijala njegovih kreatora: Alfred V. Aho, Peter J. Weinberger, i
Brian W. Kernighan. Original program napisan je 1977 u AT&T Bell Laboratories. 1985 nova
inačica programa napravila je programski jezik moćnijim, predstavlja korisnički definirane
funkcije, višestruki ulazni sljedovi, izračun regularnih izraza.
Ta nova inačica postala je uglavnom dostupna sa Unix System V Release 3.1. izdanjem.
Inačica u System V Release 4 izdanju dodaje neka nova svojstva i ispravlja ponašanje u nekim
od ‘tamnih strana’ jezika.
Specifikacija za awk u POSIX Command Language and Utilities standardu dodatno je
pročistila 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 također pridonio svojim dijelovima
koda. 1988 i 1989 godine, David Trueman temeljito prerađuje gawk kako bi bio
kompatibilan sa novijim awk programom. U preradi mu je pomogao Arnold Robbins.
Tekući razvoj fokusiran je na popravcima pogrešaka, poboljšanje izvedbe, poklapanje
sa standardima, i povremeno, nova svojstva.
344 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
OPIS
Svako pravilo specificira uzorak (eng. pattern) koji tražimo i akciju (eng. action) koja će
se izvršiti kada pronađemo uzorak. Uzorak je regularan izraz, poseban uzorak, raspon uzorka,
ili bilo koji aritmetički izraz.
BEGIN je poseban uzorak koji služi kao oznaka akcije koju awk izvodi prije čitanja bilo
kojeg ulaznog zapisa.
END je poseban uzorak koji služi kao oznaka akcije koju awk izvodi nakon što su
pročitani svi ulazni zapisi.
pattern1,pattern2
Ovaj raspon uspoređuje sve retke od retka koji se slaže sa prvim uzorkom pattern1 do
retka koji se slaže sa drugim uzorkom pattern2, uključivo sa tim uzorcima. Ako izostavite
uzorak, ili ako brojčana vrijednost uzorka nije nula, awk izvodi akciju koja daje rezultat za taj
redak.
Akcija je slijed navoda okončan znakom točka zarez (;), znakom za novi redak, ili
zatvorenim vitičastim 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) može biti i slijed naredbi ograđen vitičastim zagradama.
# if statement
if (condition)
statement
345 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
[else
statement]
# while loop
while (condition)
statement
# do-while loop
do
statement
while (condition)
# for loop
for (expression1; condition; expression2)
statement
expression1
while (condition){
statement
expression2
}
for (i in array)
statement
346 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Naredba
break
continue
zaustavlja tekuće ponavljanje for ili while naredbe i počinje slijedeće ponavljanje (ako
takvo postoji).
Next
završi sve obrade za tekući ulazni zapis i odmah započinje obradu slijedećeg 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 završava. awk postavlja exit status programa nabrojčanu
vrijednost koju sadrži izraz expr. Ako izostavite izraz (expr), exit status je 0.
return [expr]
izlazimo iz funkcije. Ako specificirate izraz expr, funkcija vraća vrijednost izraza expr
kao svoj rezultat, inače, rezultat funkcije nije definiran.
delete array[i]
347 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Npr. naredba
348 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
awk dodjeljuje varijabli v1 pripadajuću vrijednost prije početne akcije (ali nakon
standardnog dodjeljivanja vrijednosti ugrađenim (eng. built-in) varijablama kao što su FS (niz
znakova za razdvajanje polja) i OFMT, te ugrađene varijable imaju posebno značenje za
awk).
awk dijeli ulaz na zapise. Po standardu, zapise razdvajaju znakovi za prijelaz u novi red.
Ako želite, možete specificirati neki drugi znak za razdvajanje zapisa.
awk slijedno uspoređuje svaki ulazni zapis sa uzorkom svakog pravila u programu. Ako
se uzorak poklapa, nad tim ulaznim zapisom awk izvodi akciju definiranu za to pravilo.
Uzorci i akcije se često odnose na odvojena polja unutar zapisa. Po standardu, white
space (obično znakovi za razmak (eng. blank), znakovi novog retka (eng. newline), ili
vodoravne oznake tabulatora (eng. horizontal tab characters)) razdvajaju polja.
Moguće je specificirati neki drugi niz znakova (eng. string) za razdvajanje polja
koristeći
–F ere opciju.
Možete izostaviti dio awk pravila koji se odnosi na uzorak ili dio koji se odnosi na
akciju ali nije moguće izostaviti oboje. Ako izostavite uzorak, awk izvodi akciju za svaki
ulazni zapis (to znači da svaki zapis odgovara). Ako izostavite akciju, awk ispisuje na
standardni izlaz svaki zapis koji se poklapa sa uzorkom.
Sve što se u retku programa nalazi iza znaka # awk smatra komentarom. Na primjer:
# Ovo je komentar
349 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
OPCIJE
-F ere
-f prog
vraća awk program koji sadrži datoteka prog. Ako se na komandnom retku više
puta pojavi opcija –f, kao rezultat dobijemo program koji je konkatenacija svih
specificiranih programa.
-v var=value
dodjeljuje vrijednost varijabli var prije početka izvođenja programa. Ovu opciju
možete specificirati puno puta.
350 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
VARIJABLE I IZRAZI
Postoje tri vrste varijabli: identifikatori (eng. identifiers), polja (eng. fields) i niz
elemenata (eng. array elements).
Identifikator je slijed slova, znamenki i podvučenih crta koji započinje slovom ili
podvučenom crtom.
awk dijeli ulaz na zapise, a zapise dijeli u polja. Specifikacije polja imaju oblik $n gdje
n kreće od 1 do NF (ugrađena varijabla koja sadrži informaciju o broju polja u tekućem
zapisu). Takva specifikacija polja odnosi se na nto polje tekućeg ulaznog zapisa. $0 (nula)
odnosi se na čitav tekući 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 upućuje na niz elemenata.
Svaki takav izraz može sadržavati bilo koji niz znakova. Za višestruke izraze indeksa, awk
ulanča vrijednosti niza znakova svih izraza i odvaja ih oznakom SUBSEP. Početna 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 početnu vrijednost.
Vrijednost varijable koja nije postavljena na neku početnu 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 odgovarajuću brojčanu vrijednost; awk koristi vrijednost koja odgovara
kontekstu.
Kad pretvaramo brojčanu vrijednost u niz znakova odgovarajuće vrijednosti, awk
provodi radnju ekvivalentnu pozivu funkcije sprintf . Ako upotrebljavate niz znakova u
kontekstu brojke, i awk ne može interpretirati sadržaj niza znakova kao broj, tretirat će
vrijednost tog niza znakova kao broj nula.
351 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Escape Character
\a audible bell
\b backspace
\f formfeed
\n newline
\r carriage return
\t horizontal tab
\v vertical tab
\ooo octal value ooo
\xdd hexadecimal value dd
\/ slash
\" quote
awk podržava proširene regularne izraze. Kad awk čita program, prevodi znakove
ograđene slash znakovima (/) kao regularne izraze.
Na primjer:
/foo.*bar/{print $1,$3}
rezultat ove naredbe bit će ispis svih redaka koji sadrže niz znakova foo , te nakon toga
bilo koji niz znakova koji završava nizom znakova bar.
index in array
352 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
gdje index izgleda kao izraz ili (izraz,…,izraz). Ovaj uvjet se izračuna kao 1 ako je
vrijednost niza znakova predstavljena sa index ujedno i indeks u nizu, inače se uvjet izračuna
kao 0 (nula). Na taj način pouzdano znamo postoji li taj element niza.
Tablica simbola
SYMTAB[expr]
SYMTAB["var"]
353 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
OPERATORI
Uvjetni operator
Izraz expr mora kao rezultat dati broj. Ako je taj broj različit od nule izračunava se izraz
expr1 i njegov rezultat je rezultat cijelog izraza. Ako je taj broj jednak nuli izračunava 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 sadrži barem jednu znamenku. awk
interpretira svaki string ili varijablu na desnoj strani operatora ~ ili !~ kao dinamički
regularni izraz.
Relacijski operatori su <, <=, >, >=, == i !=. Kad su oba operanda koje uspoređujemo
brojke, awk uspoređuje njihove brojčane vrijednosti, inače ih uspoređuje kao string
vrijednosti. Operand je brojka ako je to cijeli broj (eng. integer) ili broj sa pomičnim 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 izračuna izraza koristi se
Short Circuit Evaluation.
354 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
var=expr
je ekvivalentna naredbi
355 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
ARGC count i ARGV vector ne sadrže opcije naredbenog retka (započete sa -) ili
program datoteku (koja slijedi nakon -f). Oni sadrže ime naredbe, naredbe za inicijalizaciju u
obliku
var=vrijednost
awk zapravo kreira ARGC i ARGV prije nego što učini bilo što drugo. Zatim prolazi
kroz ARGV i obrađuje argumente. Ako je argument vektora ARGV prazan string, awk ga
izostavlja. Ako sadrži znak jednakosti (=), awk to interpretira kao dodjeljivanje vrijednosti
varijabli. Ako je to znak minus (-), awk odmah čita ulazne podatke sa standardnog ulaza dok
ne naiđe na kraj datoteke; inače, awk tretira argument kao ime datoteke i čita ulazne podatke
iz te datoteke sve dok ne dosegne kraj datoteke.
356 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
ULAZNI PODACI
awk dijeli ulazne podatke na zapise (eng. records). Znak za razdvajanje zapisa odvaja
svaki zapis od onog slijedećeg. Vrijednost ugrađene varijable RS daje tekući znak za
razdvajanje zapisa, standardno započinje kao newline (\n). Ako varijabli RS dodijelite neki
drugi znak, awk će ga od tada koristiti kao znak za razdvajanje zapisa.
Order of Operations
(A) grouping
$i V[a] field, array element
V++ V— increment, decrement
++V --V
A^B exponentiation
+A -A !A unary plus, unary minus, logical NOT
A*B A/B A%B multiplication, division, remainder
A+B A-B addition, subtraction
AB string concatenation
A<B A>B A<=B comparisons
A>=B A!=B A==B
A~B A!~B regular expression matching
A in V array membership
A && B logical AND
A || B logical OR
A?B:C conditional expression
V=B V+=B V-=B assignment
V*=B V/=B V%=B
V^=B
357 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
awk dijeli zapise u polja. String za razdvajanje polja, određuje ga vrijednost ugrađene
varijable FS, razdvaja svako polje od slijedećeg. Možete postaviti određeni string za
razdvajanje polja tako da dodijelite neku vrijednost varijabli FS, ili tako da specificirate -F
ere opciju na naredbenom retku. Varijabli FS možete dodijeliti regularni izraz. Na primjer:
FS = "[,:$]"
getline
učita slijedeći ulazni zapis u $0 i razdijeljuje zapis u polja. Varijable NF, NR i FNR su
prikladno postavljene.
getline var
učita slijedeći ulazni zapis u varijablu var. awk ne razdijeljuje zapis u polja (što znači
da se tekuća $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 učita slijedeći
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().
358 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
expr | getline
interpretira vrijednost string izraza expr kao naredbeni redak koji treba izvršiti, awk
proslijedi izlazne podatke te naredbe u funkciju getline i učita ih u $0 na sličan način kao
getline <expr.
Možete imati samo ograničen broj otvorenih polja i kanala (eng. pipe) u isto vrijeme.
Polja i kanale možete zatvarati tijekom izvršavanja koristeći 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 uspješno zatvori kanal, vraća broj nula. Ako zatvarate polja i
kanale koji vam više nisu potrebni, možete koristiti bilo koji broj polja i kanala tijekom
izvršavanja awk programa.
359 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
atan2(expr1, expr2)
int(expr)
vraća onaj dio koji je cijeli broj (eng. integer)od brojčane vrijednosti izraza expr.
Ako izostavite (expr), funkcija vraća onaj dio koji je cijeli broj od $0.
rand()
sin(expr), cos(expr)
vraća sinus i kosinus od brojčane vrijednosti izraza expr (interpretirane kao kut u
radijanima).
srand(expr)
360 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
U nekoj string vrijednosti traži prvi podniz znakova koji se poklapa sa proširenim
regularnim izrazom regexp, te zamjenjuje taj podniz sa nizom znakova zadanim sa repl. awk
zamijeni svaki znak ampersand (&) u repl nizu znakova sa podnizom znakova string
vrijednosti koji se poklapa sa regexp. Takvo posebno ponašanje možete spriječiti tako da
stavite znak backslash (\) ispred znaka ampersand. Ako izostavite argument string, funkcija
sub() će umjesto njega koristiti tekući zapis. Funkcija sub() vraća broj nula ako nije izvršena
zamjena, te broj jedan ako je zamjena izvršena.
Radi na isti način kao funkcija sub(), osim što funkcija gsub() zamijeni svaki podniz
koji se nalazi u string vrijednosti i poklapa se sa izrazom regexp. Funkcija gsub() vraća broj
izvršenih zamjena.
Vraća mjesto prvog pojavljivanja izraza str u string vrijednosti. Ako funkcija index() ne
pronađe izraz str u string vrijednosti, vratit će broj nula.
len = length(expr)
Vraća broj znakova u string vrijednosti izraza expr. Ako izostavite (expr), funkcija
koristi referencu $0. Zagrade oko izraza expr su neobavezne.
n = ord(expr)
361 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Formira listu izraza expr, expr... koristeći specifikaciju string vrijednosti fmt, te vraća
formatiran string. String fmt se sastoji od specifikacija pretvorbi koje pretvaraju i dodaju
slijedeći izraz expr u string, to su najčešće znakovi koje funkcija sprintf() dodaje u string. Te
specifikacije pretvorbi su slične onima koje koristimo po ANSI C standardu.
Specifikacije pretvorbi su u obliku
%[-][0][x][.y]c
gdje je
- poravna polje po lijevoj strani; default je poravnavanje polja po desnoj
strani
0 nula na početku ispisuje broj sa nulom na početku
x je minimalna širina polja
y je preciznost
c je znak za pretvorbu
Za string, preciznost je najveći broj znakova koji trebaju biti ispisani iz string
vrijednosti. Za broj, preciznost je broj znamenki koje trebaju biti ispisane sa desne strane
decimalne točke kada se ispisuje broj sa pomičnim zarezom (eng. floating point). Ako je x ili
y znak zvjezdica (*), najmanja širina polja ili preciznost je vrijednost slijedećeg izraza expr u
pozivu funkcije sprintf().
362 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Razdijeli string u polja. Izraz regexp je regularni izraz koji određuje niz znakova za
razdvajanje polja i namijenjen je za ovu operaciju. Funkcija raspoređuje odvojena polja u
elemente niza array; indeksi niza počinju od 1. Funkcija split() vraća broj polja u koja je
podijelio string vrijednost (taj broj je ujedno i najveći indeks tog niza). Izraz regexp dijeli
zapis na isti način kao i FS string za razdvajanje polja. Ako izostavite argument regexp,
funkcija split() koristit će tekuću vrijednost varijable FS.
Vraća podniz znakova iz string vrijednosti koji počinje na mjestu offset i uzima najviše
len znakova. Prvi znak u string vrijednosti ima offset vrijednost 1. Ako izostavite argument
len, funkcija substr() vratit će preostali dio string vrijednosti.
str = tolower(expr)
Pretvara sva slova string vrijednosti izraza expr u mala slova i vraća rezultat. Ako
izostavite izraz expr, funkcija tolower() umjesto izraza koristi referencu $0.
str = toupper(expr)
Pretvara sva slova string vrijednosti izraza expr u velika slova i vraća rezultat. Ako
izostavite izraz expr, funkcija toupper() umjesto izraza koristi $0.
363 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
SISTEMSKE FUNKCIJE
status = system(expr)
poziva naredbu tail, koristeći string vrijednost od $1 kao datoteku koju tail pretražuje.
function name(parameter-list){
statements
}
364 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
IZLAZNI PODACI
Naredba print ispiše svoje argumente u jednostavnom formatu. Ako nema argumenata,
ona ispiše tekući 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 odgovarajuće vrijednostiizlaznih podataka. ORS i OFS
su ugrađene varijable i njihove vrijednosti možete 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 pomičnim zarezom. Default vrijednost
varijable OFMT je %.6g; možete promijeniti tu vrijednost tako da varijabli dodijelite neku
drugu string vrijednost. OFMT se primjenjuje samo na brojeve sa pomičnim zarezom (eng.
floating point).
Naredba printf oblikuje svoje argumente koristeći fmt argument. Oblikovanje je isto
kao kod ugrađene funkcije sprintf(). Za razliku od naredbe print, naredba printf ne dodaje
znak za razdvajanje izlaznih podataka automatski, te na taj način omogućuje programu puno
precizniju kontrolu nad izlaznim podacima.
Naredbe print i printf pišu na standardni izlaz. Možete 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 piše izlazne podatke u tu datoteku. Isto tako, ako dodate izraz >>expr,
awk pridodaje izlazne podatke tekućem sadržaju datoteke.
Da bi isključili dvosmislenosti, naredbe kao ovakva
print a > b c
365 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
SED
-n
Ispisuj samo retke specificirane sa p naredbom ili p indikatorom stanja (eng. flag) za s
naredbu.
-e cmd
Slijedeći argument je naredba za obradu. Korisno ako je specificirano više skripti.
-f file
Slijedeći argument je datoteka koja sadrži naredbe za obradu.
Ako je prvi redak skripte “#n”, sed se ponaša kao da je bila specificirana opcija –n.
366 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
[address[,address]][!]command [arguments]
sed kopira svaki redak ulaznih podataka u prostor za uzorak. sed instrukcije sastoje se
od adresa (eng. address) i naredbi za obradu (eng. editing commands). Ako se adresa naredbe
slaže sa retkom u prostoru za uzorak, naredba se primijeni na taj redak. Ako naredba nema
adresu, primjenjuje se na svaki ulazni redak. Ako naredba promijeni sadržaj prostora,
naknadne adrese će se primijeniti na tekući redak u prostoru za uzorak, ne na originalan ulazni
redak.
Adresiranje uzorka
Adresa može biti broj retka ili uzorak, ograđen u slash znakove (/uzorak/). Uzorak
opisujemo koristeći regularne izraze. \n može biti korišten 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 slažu sa tom
adresom. Ako su specificirane dvije adrese odvojene zarezom, naredba će biti primijenjena na
raspon redaka između prve i druge adrese, uključivo sa tim adresama. Neke naredbe
prihvaćaju samo jednu adresu: a, i, r, q, i =.
Operator ! napisan nakon adrese prouzroči da sed primijeni naredbu na sve retke koji
se ne slažu sa adresom.
Vitičaste zagrade ({}) koristimo da bi ugnijezdili jednu adresu unutar druge, ili da bi
primijenili višestruke naredbe na istu adresu.
[/pattern/[,/pattern/]]{
command1
command2
}
367 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
Otvorena vitičasta zagrada mora biti na kraju retka, a zatvorena vitičasta zagrada mora
biti sama u retku. Nakon zatvorene vitičaste zagrade ne smije biti razmaka.
Special Usage
Characters
368 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Awk & sed
\n Slaže se sa ntim uzorkom koji je prije toga spremljen pomoću “\(” i “\)”, n
je broj od 1 do 9 i spremljeni uzorci se broje slijeva.
& Ispisuje cijeli tekst koji se slaže kada znak koristimo u string vrijednosti za
zamjenu.
Tablica 3. Pattern-Matching Metacharacters
369 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Tomislav Grgac
SED
370/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
1. UVOD
SED je kratica za Stream EDitor. Napisao ga je sad već pokojni Lee E. McMahon 1973.
i 1974., a nastao je kao logični nastavak na UNIX naredbu GREP. SED je neinteraktivni
editor dizajniran da bude posebno koristan u tri slučaja:
a) kod tekstualne obrade datoteka prevelikih za jednostavno interaktivno editiranje;
b) za editiranje datoteka bilo kojih veličina kada su sekvence komandi editiranja
prekomplicirane za jednostavno tipkanje u interaktivnom modu rada;
c) za efikasno izvođenje višestrukih funkcija globalnog editiranja sa ulaza u jednom
koraku.
Umjesto da mijenjamo datoteku interaktivno pomičući kursor po ekranu (kao kod tekst
procesora), korisnik šalje SED-u skriptu komandi za editiranje plus ime datoteke za editiranje
(tekst za editiranje može također doći kao izlaz iz Pipe-a). U tom smislu SED radi kao filter -
koji briše, dodaje ili mijenja znakove, riječi ili linije teksta. Njegov djelokrug aktivnosti
odnosno primjene ide od malih, jednostavnih promjena do onih vrlo kompleksnih.
371/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
2. SINTAKSA I KORIŠTENJE
372/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
- Izvorna linija ili ulazna datoteka nakon obrade ostaje nepromijenjena jer naredbe za
editiranje mijenjaju kopiju izvorne linije s ulaza. Takva kopija se proslijeđuje na
standardni izlaz, ali se isto tako može preusmjeriti u datoteku.
2.2. Opcije
Primjer:
Recimo da želimo datoteku imena "input" obraditi sa nekom sed naredbom i ne ispisati ništa:
ili možemo tu izlaz te datoteke pipe-om preusmjeriti u sed i također ništa ne ispisati:
Primjer:
Obradit ćemo datoteku "input" sa dvije sed naredbe:
Primjer:
Obradit ćemo datoteku "input" sa naredbama iz skripte "script te još jednom naredbom nakon skripte:
373/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
2.3. Adresiranje
Primjer:
Probajmo adresirati sedmu liniju i obraditi je za sada s "ostatak naredbe":
Ako pak želimo adresirati raspon linija, recimo od 100-te do kraja input datoteke (pri tome smo kraj našli na 412 liniji sa wc naredbom i
to možemo napraviti na slijedeći način:
Pošto interni brojač linija radi kumulativno na više datoteka, evo jednog primjera i za to (uz preusmjeravanje rezultata u datoteku
"output":
>cat input1 input2 input3 | sed '100,$ ostatak naredbe' > output
koristeći znak ! kao negaciju probajmo adresirati sve osim linija između 2 i 5:
374/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
Primjer:
Napisat ćemo naredbu koja traži znak A u datoteci input:
Primjer:
Tražimo u datoteci input sve linije koje započinju sa slovom A:
• Znakom '$' označavamo da se traži izraz koji se nalazi na kraju linije (završava
tim izrazom);
Primjer:
Ponovit ćemo prethodni primjer ali ovaj put tražimo pojavu slova A na kraju linije:
• Znak '\n' traži oznaku za novu liniju (ali ne novu liniju u prostoru uzoraka
"pattern space");
Primjer:
Tražimo oznaku za novu liniju:
375/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
Primjer:
Tražimo liniju koja nije prazna:
• niz znakova u uglatim zagradama '[ ]' traže bilo koji od tih znakova u stringu, a
ako je prvi znak u stringu '^' traže se bilo koji znakovi osim tih navedenih u
uglatim zagradama '[ ]'; sa znakom '-' označujemo niz uzastopnih znakova;
Primjer:
Tražimo liniju koja počinje s brojem:
ili liniju koja ne počinje sa znakom A iza kojeg slijedi znak C - tu možemo primjetiti različito značenje znaka ^, kao početak i kao
negacija:
• Izraz iza kojeg stoji znak '*' traži bilo koji broj pojava (uključujući nijednu)
izraza koji mu prethodi;
Primjer:
Tražimo znak A iza kojeg slijedi 0 ili više pojava (zaredom) znaka B:
Primjer:
Kako bi recimo našli riječ UNIX bez obzira da li je pisana velikim ili malim slovima:
>sed '/[Uu][Nn][Ii][Xx]/'
• izraz unutar sekvence '\ \' ima identičan učinak kao i običan izraz bez te
sekvence, ali ima popratni učinak koji ćemo opisati pod funkcijom 's' i pod
slijedećom točkom;
376/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
• izraz '\(n,m\)' (n i m su brojevi) traži niz pojava znakova koji se traže unutar
sekvence '\ \' napisane prije nje; '\n\)' će tražiti n-tu pojavu; '\n,\)' će tražiti
najmanje n-tu pojavu; '\(n,m\)' će tražiti bilo koju pojavu između n i m;
Primjer:
Printat ćemo samo linije koje sadrže 65 znakova i više
• izraz '//' ili "nul izraz" je jednak kao zadnji kompajlirani izraz;
Ako želimo koristiti neke od specijalnih znakova (^ $ . * [ ] \ /) kao elemente izraza,
koristimo ih u kombinaciji s '\'.
2.4. Funkcije
377/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
• Funkcije više ulaznih linija (Multiple input-line functions) koje traže izraze koji
se protežu kroz više linija;
• Funkcije čuvanja i dohvaćanja (Hold and Get Functions) koje omogućavaju
spremanje i učitavanje ulaznog teksta za kasniju upotrebu;
• Funkcije kontrole toka (Flow of Control Functions) koje kontroliraju redoslijed
primjene funkcija;
• Ostale funkcije (Miscellaneous Functions)
Primjer:
Obrisat ćemo sve linije koje sadrže riječ UNIX:
obrišimo sve linije od prve koja sadrži riječ hello do i uključujući one koja sadrži riječ goodbye (ovdje vidimo primjer dvije adrese):
obrišimo sve linije koje započinju s točkom i preusmjerimo u output (točka je specijalni znak i za nju je potrebna escape sekvenca \.):
Primjer:
Dodat ćemo praznu liniju iza svake druge linije (koristit ćemo G (get) funkciju opisanu u poglavlju 2.4.5. gdje dodajemo sadržaj
privremenog buffera koji je prazan):
378/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
Primjer:
Ubacit ćemo liniju s tekstom "Programski alati na UNIX računalima" iza svake linije koja sadrži riječ "Kolegij":
>sed '/Kolegij/a\
>Programski alati na UNIX računalima' input
Primjer:
Ubacit ćemo liniju s tekstom "/*Komentar: ovo je pretprocesorska direktiva*/" ispred svake linije koja počinje s "#":
>sed '/^#/i\
>/*Komentar: ovo je pretprocesorska direktiva*/' input
379/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
Primjer:
Zamijenit ćemo svaku liniju koja je prazna s linijom koja sadrži 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
Primjer:
Zamijenit ćemo pojavu teksta "Zgb" sa "Zagreb":
Po defaultu će samo prvi niz znakova koji se podudara s uzorkom biti zamijenjen, ali i
tome se može doskočiti (vidi flag g ispod).
<Replacement> nije uzorak, odnosno svi posebni znakovi koji se upotrebljavaju kod
uzorka, nemaju specijalno značenje. Pa ipak neki drugi znakovi su specijalni:
• & - taj znak će se zamijeniti sa skupom znakova koji se podudara s uzorkom
<pattern>;
Primjer:
Zamijenit ćemo pojavu teksta "UNIX" sa "Programski alati na UNIX računalima" koristeći specijalni znak & (primjetimo da ne moramo
koristiti escape sekvence za navodnike):
380/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
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 sadrži 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" između prve i 15 linije:
Primjer:
Zamijenit ćemo treću pojavu teksta "kuna" sa "dolar" za drugu liniju ulaza:
Primjer:
Ako naša input datoteka sadrži tekst:
>Prva linija
>Dobro more Dobro jutro
>treća linija
381/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
>Prva linija
>Plavo more Dobro jutro
>Plavo more Dobro jutro
>treća linija
objašnjenje toga je da SED po default-u printa sve linije, dok p flag traži ispis uspješno izmjenjene linije. Ukoliko primjenimo slijedeću
sintaksu:
dobivamo:
onemogućili smo default-ni ispis -n opcijom, a p flagom tražili ispis samo promijenjene linije. Ako pak želimo dobiti ispis cijele datoteke,
uključujući i promijenjene linije te da nema dupliciranja, nećemo koristiti niti -n opciju, niti p flag.
Recimo da želimo u našoj 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:
Primjer:
Koristit ćemo datoteku input sa sadržajem iz prethodnog primjera i primjenom slijedeće sintakse:
na standardni izlaz, ali i u datoteku output smo zapisali linije koja je promijenjena (samo prva promjena):
ako pak želimo napraviti izmjene na cijeloj liniji, koristimo kombinaciju g i w flagova:
382/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
p i w flagovi funkcije s rade isto kao samostalne funkcije p i w (opisane dolje) osim
što su ovisne o uspjehu svoje zamjenske funkcije s.
Primjer:
ovakvom sintaksom vjerojatno ćemo izazvati neželjeni učinak - ispisivat će se sve linije duplicirane. Zbog toga najčešće koristimo
funkciju p zajedno s opcijom -n:
ili od linije koja sardrži riječ "početak" pa do linije koja sadrži riječ "kraj":
evo još jednog zanimljivog primjera gdje printamo sve linije osim one koja sadrži izraz "ne printaj" (primjetimo upotrebu ! funkcije
opisane u poglavlju 2.4.6.:
Primjer:
Kod funkcije za zamjenu w flag smo koristili za zapisivanje samo promijenjenih linija u datoteku. Funkcija w može stajati sama i recimo
da cijelu promijenjenu datoteku želimo spremiti možemo koristiti slijedeću opću sintaksu:
a stvarni primjer:
Napomena: Nigdje ne stoji da datoteka input i output moraju biti različite, dapače, w funkcija (i w flag s funkcije) će vrlo rado izvršiti
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 izvrši povratka nema.
383/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
Primjer:
ovakvu sintaksu nemojte koristiti osim ako niste sigurni da to želite. Naime, pošto nema adresiranja, ovakav kod će uzrokovati da se
sadržaj datoteke source ubaci iza svake linije datoteke input, što može biti nezgodno ako je datoteka source jako velika. Probajmo radije
ubaciti njen sadržaj iza 4 linije datoteke input:
Sintaksa r funkcije ne dopušta specifikaciju više od jedne adrese tako da će slijedeći kod uzrokovati grešku:
ako ipak želimo ubaciti sadržaj 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: Pošto postoji limit na broj datoteka koje se mogu otvoriti istovremeno, treba
obratiti pažnju da ne bude više od 10 datoteka spomenutih u w funkciji i w zastavici (flagu) s
funkcije, te da se taj broj smanjuje za 1 ako se izvršava i r funkcija (samo jedna datoteka za
čitanje može biti otvorena).
384/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
Primjer:
Sama za sebe N funkcija nije previše zanimljiva jer ne mijenja ulazni tekst, ali probajmo napraviti slijedeće:na liniju koja završava s
točkom, dodat ćemo slijedeću liniju s ulaza (opet ćemo koristiti funkciju grupiranja { }):
>sed '/\.$/ {
>N
>s/\n//
>}' input
ili drugi primjer gdje ćemo izbrisati sav tekst između riječi "početak" u prvoj liniji i riječi "kraj" u drugoj liniji (opet koristimo funkciju
grupiranja i to sada i sa njenim ugnježđivanjem):
>sed '/početak/ {
>N
>/\n.*kraj/ {
>s/početak.*\n.*kraj/početak kraj/
>}
>}' input
Primjer:
Koristit ćemo primjer sličan prethodnom samo ćemo ovog puta obrisati liniju u kojoj se nalazi riječ "početak" ako se u slijedećoj liniji
nalazi riječ "kraj":
>sed '/početak/ {
>N
>/\n.*kraj/ D
}' input
Primjer:
I opet primjer s "početak" i "kraj", ali sada, umjesto brisanja, isprintat ćemo liniju u kojoj se nalazi riječ "početak" ako se u slijedećoj
liniji nalazi riječ "kraj":
>sed -n '/početak/ {
>N
>/\n.*kraj/ P
}' input
i sada evo primjera gdje kombiniramo sve tri Multiple input line funkcije (najčešći redoslijed njihove primjene je prvo N pa P i na kraju
D); tražimo liniju koja sadrži riječ "početak", učitavamo slijedeću liniju, ako u njoj postoji riječ "kraj" brišemo sav tekst između njih,
printamo i brišemo prvu liniju:
385/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
>sed '/početak/ {
>N
>/početak.*kraj/ {
>s/početak.*kraj/početak kraj/
>P
>D
>}
>}' input
Primjer:
Ubacit ćemo praznu liniju iza svake linije datoteke input:
prilično jednostavno, ali što ako već imamo praznih linija u datoteci input, a želimo samo jednu liniju razmaka između svake "neprazne"
linije:
386/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
Primjer:
ovakva sintaksa će dodati praznu liniju na početak datoteke i izbrisati zadnju liniju. Evo kako radi: na prvoj liniji se izmjenjuje sadržaj
privremenog buffera (koji je prazan) sa sadržajem 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 započinju s "Početak"
zamijeniti sve pojave stringa "nešto" s "nešto drugo":
>sed '5,16!{
s/nešto/nešto drugo/g'
'} input
Primjer:
Pošto smo već u prijašnjim primjerima imali upotrebu funkcije za grupiranje, evo jednog primjera njenog ugnježđivanja (nesting):
>sed /^Početak/ {
>/10000/ {
>s/Zgb/Zagreb/2
>s/^/Promijenjeni /
>}
>}' input
evo pojašnjenja što smo napravili: adresirali smo sve linije koje počinju s "Početak"; primjenjujemo funkciju za grupiranje i u njog
adresiramo sve linije koje sadrže 10000; na njima primjenjujemo novu funkciju grupiranja u kojoj mijenjamo drugu pojavu stringa "Zgb"
u "Zagreb" i na početak linije umećemo string "Promijenjeni"
387/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
• :<label> - ova funkcija bilježi mjesto u listi naredbi za editiranje kojem se mogu
obratiti b i t funkcije (obrađene ispod). Argument <label> može biti niz od osam
ili manje znakova. Ukoliko postoje dvije ili više istih labela funkcije :, generirat
će se compile time diagnostic te neće biti pokušaja izvršenja. Funkcija : i njen
argument se pišu zajedno (bez razmaka).
Primjer:
Primjer za samu funkciju je prilično besmislen. Funkcija će zabilježiti dio koda, ali bez funkcija grananja b i t, nikad neće biti ponovo
pozvan.No ipak, evo sintakse:
Primjer:
Ako je linija prazna idi na kraj skripte:
>sed '/^$/ {
>:loop
>N
>s/^\n$//
>t loop
>}' input
postupak je slijedeći: tražimo praznu liniju; kad i ako je nađemo grupiramo daljnje funkcije i labelom označavamo početak; učitavamo
slijedeću liniju; radimo zamjenu: ako linija između svog početka i kraja ima samo embedded newline brišemo ga; ako je za supstitucija
uspjela granamo se do labele loop i ponavljamo dok god se supstitucija ne izvrši (linija nije prazna).
388/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
Primjer:
Evo kako možemo saznati koliko linija ima naša datoteka 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 počinje s "Početak"
ako pak želimo ispred svake linije dodati njen broj koristimo slijedeću sintaksu:
• q - quit - funkcija koja uzrokuje da se trenutna linija zapiše na izlaz (ako treba),
svi dodani ili pročitani tekstovi da se zapišu i da se prekine izvršavanje.
Primjer:
Ako želimo isprintati prvih 10 linija koristeći q funkciju to bi izgledalo ovako:
slijedeći kod bi printao sve linije od prve do i uključujući i onu u kojos se nalazi "traženi tekst" i nakon toga prekinuo rad:
Napomena: Pri korištenju q funkcije treba biti oprezan ako se promjene zapisuju u originalnu datoteku iz koje čitamo jer nakon izvršenja
funkcije q nema više zapisivanja na izlaz.
Obje funkcije primaju samo jednu adresu tako da ako želimo raditi s više 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 podržavaju neke druge verzije. Za te funkcije
nećemo davati primjere već ćemo ih samo popisati i objasniti:
• y - transform - funkcija slična zamjenskoj funkciji s (ima istu sintaksu), a radi
trasformiranje znakova u adresnom dijelu sa znakovima u replacement dijelu
• l - ispusuje trenutni sadržaj prostora uzoraka (korisno kod debuggiranja skripte)
• ; - function (command) stacking - funkcija koja nam omogućuje slaganje više
SED funkcija jednu iza druge bez upotrebe -e opcije ili { } funkcije.
389/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
3. ZAKLJUČAK
390/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
4. DODATAK
Skripta za pretvaranje prvog slova riječi 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
Skripta za formatiranje teksta tako da ni jedne linija nije duža od 40 znakova (Carlos
Duarte)
:a
/^.\{40\}/!{
$q
N
s/ *\n */ /
ba
}
s/^.\{40\}/&\
/
s/^\(.*\) \(.*\)\n/\1\
\2/
P
s/^.*\n//
ba
1! G
h
$p
392/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
1{
# Prepare 80 spaces in the buffer
x
s/^$/ /
s/^ *$/&&&&&&&&/
x
}
# spaces are split into two halves through the use of back-refs.
s/^\(.*\)\n\( *\)\2.*$/\2\1/
: loop
/^$/{
x
p
n
b loop
}
393/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
/^"/{
: double
/^$/{
x
p
n
/^"/b break
b double
}
H
x
s,\n\(.[^\"]*\).*,\1,
x
s,.[^\"]*,,
/^"/b break
/^\\/{
H
x
s,\n\(.\).*,\1,
x
s/.//
}
b double
}
/^'/{
: single
/^$/{
x
p
n
/^'/b break
b single
}
H
x
s,\n\(.[^\']*\).*,\1,
x
s,.[^\']*,,
/^'/b break
/^\\/{
H
x
s,\n\(.\).*,\1,
x
s/.//
}
b single
}
/^\/\*/{
s/.//
: ccom
s,^.[^*]*,,
/^$/ n
/^\*\//{
394/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb SED
s/..//
b loop
}
b ccom
}
: break
H
x
s,\n\(.[^"'/]*\).*,\1,
x
s/.[^"'/]*//
b loop
$b
N
/^\(.*\)\n\1$/{
s/.*\n//
p
:b
$b
N
/^\(.*\)\n\1$/{
s/.*\n//
bb
}
}
$b
D
395/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
Krešimir Hećimović
GCC COMPILER
396/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
"Ne smije vam past na pamet kritizirati GCC dok ga dobro ne upoznate!"
Pavle Špoljarić
Zagreb, 08.01.2004.
SOFTWARE
Računala ne mogu ništa napraviti bez uputa korisnika. Da bi napravili bilo koji posao
morate računalu dati niz instrukcija. Taj set instrukcija naziva se računalni program. Software
se odnosi na skup računalnih programa i procedura koje opisuju kako koristiti te programe.
Možemo reći da je software kolekcija programa koje povećavaju mogućnosti hardware-a.
Software vodi računalo pri svakom koraku, gdje da počne i gdje da završi određeni posao.
Proces izrade softvera je ono što svi nazivamo programiranje. Računalni software se obično
dijeli na dvije široke kategorije:
sistemski software
aplikacijski software
Sistemski software Znamo da je program set instrukcija koje se moraju učitati u
računalo da bi moglo raditi. Kad upalite računalo neki programi se izvrše i aktiviraju različite
dijelove računala i spremaju ga za rad. Taj set programa je sistemski software. Stoga možemo
reći da je sistemski software set od jednog ili više programa napravljenih za kontroliranje rada
računala kao sistema (komunikacija s printerom, diskom, kontrola upotrebe memorije i
procesora i sl.). Bez sistemskog softwareas (operacijskog sustava- DOS, WINDOS, UNIX)
nije moguće raditi na računalu. Razvoj sistemskog softwarea je kompleksan posao i zahtjeva
mnogo znanja o računalnoj tehnologiji. Zato se za razliku od aplikacijskog softwarea ne
razvija kod kuće.
Aplikacijski software je set programa koji izvršavaju operacije za određenu primjenu
(pisanje teksta, izrada statističkih izvještaja, analiza podataka itd). Jedan primjer aplikacijskog
softwarea su programski jezici.
397/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
PROGRAMSKI JEZICI
Upoznati smo sa terminom "jezik". Jezik je sistem komunikacije između dvije ili više
osoba. Možemo komunicirati na nekoliko jezika: hrvatski, engleski, njemački... No kako
komunicirati sa računalom. Računalo neće razumjeti govorne jezike (za sada) za prijenos
podataka i instrukcija. Zato postoje programski jezici posebno razvijeni da možete prenijeti
podatke i instrukcije računalu za obavljanje određenog posla. FORTRAN, BASIC, C,
COBOL samo su neki od mnoštva programskih jezika. Instrukcije i programi pišu se u
određenom jeziku ovisno o vrsti posla koju želimo da program obavlja. Na primjer za
znanstvene aplikacije koristi se FORTRAN, a za poslovne COBOL.
Termin niska razina znači blizina načinu rada stroja. Jezici niske razine su strojno
orijentirani i zahtijevaju širok spektar znanja o hardwareu i njegovoj konfiguraciji. Oni su
jako blizu hardwareu (velika brzina izvođenja) ali su teški za pisanje programa.
a) Strojni jezik
Strojni jezik je jedini jezik koji računalo direktno razumije, ne zahtjeva nikakav
prijevod. Često ka zovemo i strojni kod. Napisan je kao set binarnih brojeva: 1 (jedinica) i 0
(nula). Instrukcija može izgledati ovako: 1011000111101. Kad sa određenim sekvencama
koda "nahranimo" računalo, ono prepozna kod i pretvara ga u električni signal potreban za
izvršenje tog koda. Taj jezik nije lako naučiti jer ga je teško shvatiti (no nije nemoguće). To je
jezik efikasan za računalo no nije za programera. Osim što ga je teško programirati, kod u
strojnom jeziku još je teže debugirati.
Jedina prednost je što se program u strojnom jeziku izvršava vrlo brzo jer procesoru nije
potrebno prevoditi instrukcije. Strojni jezik je jezik prve generacije.
398/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
b) Asemblerski jezik
To je prvi korak ka poboljšanju strukture programiranja. Pošto računalo prepoznaje
brojeve i slova određena kombinacija alfanumerika se može iskoristiti za zamjenu strojnog
koda. Asemblerski jezik, dakle, tvori set simbola i slova a prevoditelj (asembler) je taj koji
prevađa asemblerski jezik u strojni. Programiranje u asemnbleru je mnogo lakše jer
omogućava programeru da lakše shvati kod. Npr. liniju koda (izmišljena) "CPx1000 R1", koja
kopira (CP-copy) sadržaj s adrese(x) 1000 u registar R1, lakše je shvatiti nego "1010 1000
1110" (1010-copy, 1000-adresa, 1110-registar).
Asebblerski jezik ima istu razinu izvršavanja 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 računalo možda se neće pokrenuti na drugim računalima sa drugačijom konfiguracijom
hardwarea.
399/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
primjer.c
C kompajler
primjer.exe
Kompajler (Compiler)
Kompajler je prevoditelj koji prevodi naredbe pisane u jeziku visoke razine u strojni
jezik. Zove se kompajler jer kompajlira (najbliži 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 piše 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 može prevoditi samo one izvorne programe koji su pisani u jeziku za koji je
kompajler namijenjen. Fortran kompajler neće kompajlirati izvorni kod napisan u COBOL-u.
Objektni program koji napravi kompajler je strojno ovisan. To znači da se programi
kompajlirani za jednu platformu neće izvršavati na drugoj. Zato svaka platforma mora imati
svoj kompajler za određeni programski jezik. Platformska neovisnost postiže se korištenjem
jezika više razine na različitim platformama.
400/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
Interpreter
401/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
Fortran
402/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
403/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
"plaća" povećanje od 20 do 50% u brzini izvedbe, jer niti jedan jezik visoke razine nije tako
cjelovit kao asemblerski jezik. Ipak vrijeme koje se uštedi na kodiranje može biti ogromno,
što čini C najpoželjnijim jezikom za mnoge programere. S druge strane, pošto većina
programa troši 90 posto svoga vremena u samo 10 posto ili manje koda, moguće je napisati C
program i potom prepraviti mali dio koda u asemblerskom jeziku i na taj način dobiti na
brzini programa, kao da je cijeli napisan u asemblerskom jeziku.
Kad je postalo očigledno da programski jezik C postaje vrlo popularan jezik dostupan
na različitim platformama, grupa zabrinutih pojedinaca sastala se da predloži standardni set
pravila za korištenje C-a. Grupa je predstavljala sve sektore software industrije i nakon
mnogo sastanaka i puno predložaka, napisali su prihvatljiv standard za programski jezik C.
Prihvaćen je od strane ANSI-a (American National Standards Institute) i ISO-a (International
Standard Organization). Nitko ga nikome nije nametnuo, no pošto je tako široko prihvaćen
bilo bi nerazborito, za bilo kojeg pisca compiler-a, odbiti prilagoditi se standardu.
Danas više nije bitno treba li kod programskog jezika C pronalaziti loše strane ili ga
hvaliti, kao što nema smisla raspravljati o tome je li dobra sadašnja signalizacija na
prometnicama ili bi bilo bolje zamijeniti značenje crvenog i zelenog svijetla. Bavimo li se
djelatnošću u kojoj se koristi jezik C, moramo ga što prije usvojiti i primjenjivati. Pri tome
postoje različite razine korištenja među kojima je najvažnija razumijevanje već napisanog
programa C uz mogućnost njegove promjene (prilagodbe) pri rješavanju 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 1983-
1985 (danas AT&T Labs i Lucent Bell Labs). C++ je nastavak na C. Prije 1983 Stoustrup je
na C dodao dodatne mogućnosti i formirao jezik koji je sam zvao "C sa klasama".
Kombinirao je korištenje klasa Simule i objektno orijentirane mogućnosti sa snagom i
iskoristivošću C-a. Pojam C++ prvi je puta upotrebljen 1983. C++ je dizajniran za UNIX
okruženje, no ubrzo je prihvaćen na drugim operacijskim sustavima. Sa C++-om programeri
su dobili mogućnost da poboljšaju kvalitetu koda i dijelove koda su mogli ponovno koristiti.
404/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
Objective-C
405/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
moguće 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 igaračih konzola i video rekordera. Oak je isprva napravljen za
korištenje u set-top kutijama dizajniranim za video-on-demand usluge (npr. teletext). Taman
kad je posao s proizvođačima set-top kutija bio pri kraju pojavio se WWW (World Wide
Web). Oak dizajneri počeli su shvaćati trend te se njihov fokus prebacio na Internet i
WebRunner (browser s omogućenim Oak-om) je rođen. Oak je preimenovan u Java a
WebRunner postaje HotJava browser. Oduševljenje Internetom privuklo je mnoge dobavljače
softwarea tako da su Java razvojni alati mnogih proizvođača ubrzo postali dostupni. Isto
oduševljenje odrazilo se na proizvođače softwarea koji su netom pohitali da pobliže upoznaju
Javu i njene mnoge divne mogućnosti.
Java je čisti objektno orijentiranim jezik.. To znači da je u Java programu sve objekt i
sve proizlazi iz bazne klase (root object class). Java okružje uključuje stotine klasa i metoda u
šest glavnih područja. Jedna od Javinih najprivlačnijih mogućnosti je njen standardni library
(Rich Standard Library). Mnogi će kao prednost Jave istaknuti mogućnost dinamičke
alokacije varijabli, a glavni razlog koji je omogućio brzo prihvaćanje Jave je sličnost Javine
sintakse sa popularnim programskim jezikom C++.
406/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
GNU
GNU Projekt je razvio potpuno slobodan softwareski sistem nazvan "GNU" (GNU's
Not Unix) koji je kompatibilan s UNIX-om. Ime GNU izabrano je jer ispunjava slijedeće
zahtjeve; prvo, to je rekurzivna kratica za "GNU's Not Unix", drugo, to je riječ i treće zabavno
ga je izgovoriti.
Riječ "slobodan" ne odnosi se na cijenu, već na slobodu. Možete ili ne morate platiti
određenu cijenu da biste dobili GNU software. Bilo kako bili, jednom kad imate GNU
software imate tri specifične slobode pri njegovoj upotrebi:
Prvo: slobodu kopiranja programa i dijeljenja među prijateljima i kolegama
Drugo: slobodu izmjene programa na bilo koji način, jer imate izvorni kod
Treće: slobodu distribucije unaprijeđene verzije, na taj način pomoći izgradnju društva
(Ako redistribuirate GNU software, možete naplatiti fizički čin prijenosa kopije ili možete
kopije davati)
GNU projekt je začet 1983 kao način vraćanja kooperativnog duha koji je nekad bio
prisutan – da se ponovno omogući suradnja sklanjajući prepreke koje nameću vlasnici
softwarea. 1971, kad je Richard Stallman počeo karijeru u MIT-u, radio je u grupi koja je
koristila termin "besplatan software". Čak su i neka računalna poduzeća distribuirala besplatni
software. Programerima je omogućen zajednički rad.
Do kraja 1980 gotovo sav softwaer je bio u nečijem vlasništvu (propritary), a njegovi su
vlasnici priječili suradnju korisnika. To je učinilo stvaranje nečega poput GNU Projekta
potrebnim.
Svako računalo zahtjeva operativni sistem; ako nema besplatnog operativnog sistema,
ne možete pokrenuti računalo bez da dohvatite vlasnički softvare. Tako je prva stvar pri
stvaranju besplatnog softwarea bila napraviti besplatni operacijski sustav. Operacijski sustav
nije samo jezgra (kernel); on uključuje i kompajlere, editore, programe za obradu teksta i
mnoge druge stvari. Pisanje operacijskog sustava je vrlo velik posao, te je trajao nekoliko
godina.
Odlučili su napraviti operacijski sustav kompatibilan s UNIX-om jer je bio isproban i
portabilan, a kompatibilnost bi učinila prelazak s UNIX-a na GNU laganim. Inicijalni cilj da
se napravi UNIX-oidni operacijski sistem bio je postignut. Do 1990. napravljeni su ili nađeni
svi glavni dijelovi osim jednog – jezgre. Tada je Linus Torvalds razvio besplatnu jezgru –
Linux. Spajajući Linux sa gotovo završenim GNU sistemom dobiven je kompletan operativni
407/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
sustav: Linux baziran GNU sistem. Procjenjuje se da stotine tisuća ljudi danas koristi Linux-
based GNU sisteme, uključujući Slackware, Debian, Red Hat i druge.
Međutim GNU Projekt nije ograničen na operacijske sustave. Njihov cilj je omogućiti
cijeli spektar software-a, što god neki korisnik može poželjeti. To uključuje i aplikacijski
software.
Želja im je omogućiti software za ljude koji nisu stručnjaci na polju računala. Zato se
trenutni razvija drag'n'drop desktop s ikonama (slično Windowsima) da bi početnici lakše
koristili GNU sisteme. GNU Projekt također želi omogućiti besplatne igre i ostale oblike
zabave (neke igre su već dostupne).
Kako daleko može ići besplatan software? Nema granica, osim kad zakona poput
patentnih sistema potpuno zabrane besplatan software (želi se patentirati ideja????). Krajnji
cilj je omogućiti besplatan software za sve što korisnici požele – i na taj način vlasnički
softvare potjerati u zaborav.
408/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
GCC
Izvorni autor GNU C Compilera (GCC) jer Richard Stallman, osnivač GNU projekta.
Svaki UNIX-oid (operativni sustav baziran na UNIX-u) treba C kompajler, a u to vrijeme
nije bilo besplatnih stoga ga je GNU Projekt morao razviti od početka. Rad na kompajleru
sponzoriran je donacijama pojedinaca i kompanijama Free Software Foundation-u,
neprofitnoj organizaciji koja je nastala da podrži rad GNU Projekta. 1987. godine izlazi prvo
izdanje GCC-a. To je bio veliki pomak pošto je GCC bio prvi portabilni ANSI C
optimizirajući kompajler izdan kao besplatni software. Od te godine GCC je postao temelj
sveg besplatnog softwarea.
GCC je izdan pod GPL-om (GNU Public License).GPL podrazumijeva od svakoga tko
promjeni GNU software i redistribuira izmijenjeni proizvod, da ponudi svoje izmjene u
izvornom kodu GNU zajednici. Tako će izmjene uvelike koristiti cjelokupnoj software
zajednici.
Velika revizija kompajlera desila se 1992. godine serijom 2.0 kojom je dodana
mogućnost kompajliranja C++-a. 1997. kreirana je eksperimentalna grana kompajlera (EGCS
– Enhanced (Experimental) GNU Compiler System) koja je poboljšala optimizaciju i podršku
za C++. Te mogućnosti su integrirane u glavni dio razvoja GCC-a i postale dostupne kao 3.0
verzija GCC-a 2001.
Danas je GCC proširen na mnoge dodatne programske jezike, uključujući 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 Upravljački Odbor (GCC Steering Committee), skupina
predstavnika GCC korisničke zajednice iz industrije, istraživanja i akademske zajednice.
Odbor se ujedinio brine i da netko ne bi preuzeo kontrolu nad GCC-om (da se ne uništi baza
besplatnog softwarea).
409/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
GCC je, prije svega, portabilni kompajler – moguće ga je pokrenuti na većini danas
dostupnih platformi i može napraviti kod za mnoge tipove čipova, od 8-bitnih
mikrokontrolera do procesora korištenim u superračunalima.
GCC nije samo kompajler, on može i kros-kompajlirati (cross-compile) svaki program,
tj proizvesti izvršne datoteke za različite datotečne sustave od onoga na kojem se kompajler
izvršava. To je prilično korisno za računala sa ugrađenim sustavom (embedded systems) koja
nisu sposobna pokrenuti kompajler. GCC je napisan u C-u i može sam sebe kompajlirati, tako
da može biti prebačen na drugi sustav u budućnosti.
Programi u svakom jeziku mogu biti kompajlirani u GCC-u ili kros-kompajlirani za bilo
koju arhitekturu. Na primjer ADA program moguće je kompajlirati za mikrokontroler ili C
program za superračunalo.
GCC ima modularni dizajn što dopušta lako dodavanje podrške za nove jezike i
arhitekture. Dodavanje novog front-enda za jezik u GCC omogućuje korištenje tog jezika na
bilo kojoj platformi. Slično tome, dodavanjem podrške za novu platformu svim jezicima je
ona dostupna.
Najbitnije i najvažnije GCC je besplatan software. Znači možete ga koristiti i
modificirati kao i svaki drugu GNU software.
Kad se govori o C++ kompajleru najčešće se koristi izraz "G++", no pošto postoji samo
jedan kompajler, može ga se zvati "GCC" bez obzira na koji se jezik misli. Termin "G++"
koristan je kad se želi naglasiti kompajliranje C++ programa.
410/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
411/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
Make file
Make file je datoteka koja se koristi pri kompajliranju izvornog koda. U njemu su
definirana odnosna pravila i akcije koje trebaju biti napravljene po tim pravilima. Poopćena
sintaksa pravila/akcije je:
mojprogram: mojfile.c
_________gcc mojfile.c -o mojprogram
412/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
Predprocesor
Kompajler
GCC kros-kompajler
Alat koji konvertira program iz C naredbi u strojni kod je kros-kompajler. Termin kros-
kompajler (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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
414/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
Optimizator
Asembler
GAS
415/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
dakle bila movl %edx,%eax.. No GAS ne zahtjeva strogu AT&T sintaksu, pa je sufiks
opcionalan kad se veličina može pogoditi iz operanda registra a u ostalim slučajevima
defaultna vrijednost je 32 bita (s upozorenjem)
neposredni operandi su označeni 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 sadržaju 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 postiže zatvaranjem indeksnih registara ili indirektne
adrese memorijske ćelije u zagrade; kao u testb $0x80,17(%ebp) (testira viši bit byte
vrijednosti na 17 mjestu od ćelije na koju pokazuje %ebp)
Postoje neki programi koji mogu prebacivati izvorni kod između AT&T i Intel
asemblerske sintakse, neki su čak sposobni raditi konverziju u oba smjera.
NASM projekt (Netwide Assembler) pruža i386 assembler, napisan u C-u, koji bi
trebao biti dovoljno modularan da na kraju podrži sve poznate sintakse i formate objekata.
Odnedavno GAS podržava i Intelovu sintaksu.
Linker
Linker povezuje sve potrebne datoteke u jednu cjelinu. Linker konstruira tablicu
objektnih modula i njihovu veličinu (u byte-ovima). Na osnovi te tablice, svakom objektnom
modulu pridruži početnu adresu. Zatim, rješava sve nedosljednosti alokacije. npr. nalazi sve
instrukcije koje referenciraju memoriju i dodaje realokacijske konstante jednake početnim
adresama modula. Na kraju se rješavaju vanjske reference – nalazi se adresa vanjske
memorije i procedura i ažuriraju se instrukcije.
Objektni modul je linearna struktura podataka koja sadrži identifikator ili tablicu
sadržaja. U tablici sadržaja 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GCC compiler
ime simbola,
lista instrukcija koje koriste simbol,
simbole proglašene vanjskima (tip external) u trenutku definicije,
nerazriješeni simboli u trenutku translacije se smatraju vanjskima,
programski tekst – npr asemblirane instrukcije (binarno),
programski podaci – npr konstante,
rječnik relokacija,
lista instrukcija koje treba obnoviti kad se program učita na adresi koja nije
$0000
oznaka kraja modula.
Nakon linkanja napravi se izvršna datoteka koja izgleda gotovo isto kao gore opisan
objektni modul.
Kad se program pokrene, u stvari se pokreće program koji se zove "loader". On čita
datoteku koja sadrži program, učita ju u memoriju i sredi relokacije (ako je program učitan na
mjestu različitom od $0000).
417/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
Janko Rade
GDB
THE GNU SOURCE LEVEL
DEBUGGER
418/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
UVOD
Debugger
Debugger nam služi da bismo vidjeli što se dešava unutar programa dok se izvodi ili da
bismo vidjeli što je program radio kada se srušio.
Debugger je općeniti koncept koji se koristi u različitim programskim jezicima za
pronalaženje grešaka i uvid u izvršavanje programa.
GDB može raditi četiri osnovne zadaće (plus još puno drugih stvari koje proizlaze iz
osnovnih) da bi pomogao naći greške:
Pokrenuti program, navesti bilo što bi moglo djelovati na njegovo ponašanje.
Zaustaviti program točno na navedenom položaju.
Pretražiti što se to dogodilo na tom položaju (dijelu programa) kada je
program stao.
Promijeniti kod u tom programu tako da se može ispravljati jednu grešku i
nastaviti s ispravljanjem druge greške.
GDB je besplatan (slobodan) program, zaštićen sa strane General Public License
(GPL)-a.
GPL daje slobodu kopiranja i prilagođavanja koda programa osobnim zahtjevima i
potrebama. Svaki čovjek koji dobije tu slobodu također dobiva pravo da distribuira taj svoj
program, ali svima mora dati pravo uvida u svoj kod.
Razne softwerske kuće koriste zaštitu autorskih prava da bi ograničili individualnu
slobodu, a Free Software Foundation koristi GPL da bi održali tu slobodu.
U osnovi GPL je dozvola koja daje slobodu. Tu slobodu (dozvolu) nitko ne smije
nikome uskratiti.
Richard Stallman je originalni autor gdb-a i puno ostalih gnu programa. Razvitku gdb-a
je doprinijelo mnogo ljudi.
419/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
Pozivanje gdb-a
Pozivanje gnu debuggera radi se tako da pokreneš program gdb. Jednom kada se
pokrenuo, gdb prihvaća i obrađuje komande s tipkovnice sve dok mu se ne kaže da izađe iz
programa (quit).
Gdb se također može pozvati s raznim varijantama opcija i argumenata da bi se dobila
razumljivija okolina za ispravljanje grešaka. Uobičajeni način pokretanja gdb-a je pokretanje
s jednim argumentom, tj. upišemo gdb pa ime programa kojega želimo ispravljati.
gdb program
Gdb se također može pokrenuti i tako da poslije imena programa upišemo i ime core
file-a (CORE file je datoteka koja sadrži neke dijelove adresnog prostora od programa koji se
ispravlja, a gdb pristupajući exe fileu sam traži ostale dijelove adresnog prostora).
gdb program core
Kao drugi argument također se može napisati i PID (process ID) ako se želi ispravljati
proces koji se izvršava 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 može još na puno načina pokrenuti tako da se koriste opcije s komandne linije.
GDB te može prisjetiti tih opcija ako se upiše
gdb –help ili gdb -h
420/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
Ako se želi snimiti izlazne poruke gdb-ovih komandi u datoteku za to postoji nekoliko
načina:
set logging on
Uključivanje ispisa izlaznih poruka.
set logging off
Isključivanje ispisa izlaznih poruka.
set logging file
Promjena imena datoteke gdje se spremaju izlazne poruke.U default-u:gdb.txt’.
set logging overwrite [on|off]
Prepisivanje datoteke za spremanje izlaznih poruka.
set logging redirect [on|off]
Ako želite da se poruke ne ispisuju na ekranu nego samo u datoteku, trebate opciju
redirect na vrijednost ON.
show logging
Prikazuje trenutne vrijednosti opcija za ispis izlaznih poruka.
Komandna linija
Komandna linija gdb-a se sastoji od jedne linije za unos. Ne postoji ograničenje dužine
komandne linije.
Poslije komande se upisuju argumenti značajni za tu komandu. Neke komande ne
dozvoljavaju argumente.
421/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
Pomoćne informacije
Pomoć i informacije o komandama uvijek možemo dobit koristeći komandu help
Help ili h
(gdb) help
List of classes of commands:
aliases -- Aliases of other commands
breakpoints -- Making program stop at certain points
data -- Examining data
files -- Specifying and examining files
internals -- Maintenance commands
obscure -- Obscure features
running -- Running the program
stack -- Examining the stack
status -- Status inquiries
support -- Support facilities
tracepoints -- Tracing of program execution without stopping the program
user-defined -- User-defined commands
run ili r Run komanda se koristi da bi pokrenuli program unutar gdb-a. Prvo se
specificira ime programa pa onda argumenti.
422/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
Argumenti:
Ako se pokrene program samo sa run bez argumenata onda on nasljeđuje argumente od
posljednje run komande koja je izvršena ili po postavkama komande set args.
Show args pokazuje koji su argumenti podešeni da se automatski pokreću kada sami ne
navedemo argumente.
423/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
424/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
break linenum
break filename:linenum
break filename:function
break *address Na adresu “address”
break ... if cond Sa uvjetom “cond”
tbreak args Samo za jedno zaustavljanje
hbreak args Hardware točke prekida
thbreak args Hardware točke prekida za jedno zaustavljanje
rbreak regex Na svim funkcijama koje odgovaraju na izraz
“regex”
425/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
awatch expr Koja će se zaustaviti kada se “expr” pročita ili upiše u program.
info watchpoints ispisuje popis preglednih točaka , isto kao i info break
GDB postavlja hardverske točke pregleda ako je to moguće zato što su jako brze, a ako
ne može onda postavlja softverske točke prekida koje su znatno sporije i pokazuju promjenu u
slijedećem redu koda.
Ako je bio u mogućnosti postaviti hardversku točku pregleda kada postavimo komandu
watch, gdb prijavljuje
Hardware watchpoint num: expr
Ponekada se ne može postaviti hardverska točka pregleda zato što tip podataka koju
nadgleda ima širi opseg od opsega koju može sama pridružiti.
Postavljanje točaka zahvata
Pomoću komande catch postavljamo točke zahvata.
426/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
Kada nam više ne trebaju točke prekida potrebno ih je obrisati. Kada ju obrišemo ona
više ne postoji. S komandom clear brišemo točke prekida ovisno o tome gdje se nalazi, sa
komandom delete brišemo ih ovisno o njihovom broju. To vrijedi i za točke pregleda i za
točke zahvata.
Ako se ispuni zadani uvjet moguće je postaviti točke prekida koje zaustavljaju program.
Uvjet je zadan Boolean izrazom. Ako je True točan, onda se zaustavi program. Uvjeti se
također koriste i kod točaka pregleda.
427/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
Nastavljanje i step-anje(koračanje)
Nastavljanje znači da program nastavlja s izvršavanjem dok ne naiđe na kraj ili neku
kontrolnu točku. Step (korak) znači izvršavanje trenutne linije koda i prebacivanje u slijedeću
liniju.
Pretraživanje stoga
Kada se program zaustavi analizirajući kod, tražimo kada i zbog čega je stao kako
bismo popravili grešku 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 može se pregledavati pomoću naredbi za pretraživanje.
428/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
Okviri stoga
Prethodni tragovi
429/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
Odabir okvira
Većina 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 odabir okvira na adresi “address”
up n pomicanje okvira “n” po stogu prema gore
down n pomicanje okvira “n” po stogu prema dolje
npr:
(gdb) up
#1 0x22f0 in main (argc=1, argv=0xf7fffbf4, env=0xf7fffbfc)
at env.c:10
10 read_input_file (argv[i]);
up-silently n
down-silently n varijante komandi up i down ali ne ispisuju na ekranu promjenu okvira.
Informacije o okvirima
frame
f ispisuje informacije o okviru koji je trenutno odabran
info frame
info f
430/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
• adresa okvira
• adresa slijedećeg okvira (up)
• adresa slijedećeg okvira (down)
• jezik izvornog koda koji je pisan u okviru
• adresa argumenata u okviru
• adresa lokalnih varijabli okvira
• programsko brojilo
• imena registara iz okvira
Pretraživanje podataka
Izrazi
Print i sve druge gdb-ove komande prihvaćaju izraze i izračunavaju njihovu vrijednost.
Izrazi mogu biti konstante, varijable, operatori, uvjetni izrazi, pozivi funkcija i string-ovi.
431/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
Gdb ispisuje vrijednosti ovisno o tipu podataka, a to nam ponekad neodgovara. Npr:
trebamo hexadecimalnu vrijednost broja ili decimalni prikaz pointera ili dio memorijske
lokacije kao string. To se radi tako da poslije print komande koristimo kosu crtu(slash) pa
željeni argument:
x broj u hexadecimalni oblik.
d broj u decimalni oblik(signed).
u broj u decimalni oblik(unsigned).
o broj u oktalni oblik.
t broj u binarni oblik.
a kao apsolutnu adresu
c kao slovo (character)
f kao broj s pomičnim zarezom
Pretraživanje memorije
“n”,”f“ i “u” su parametri koji određuju u kojem obliku se radi ispis memorije, a “addr “
mjesto sa kojega se počinje ispisivati memorija.
n broj ponavljanja
f način prikaza
u veličina jedinice u
b byte - ima.
h ili polu riječima(2 byte-a)
w ili rječima(4 byte-a)
g ili velikim riječima(8 byte-a).
432/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
Automatski prikaz
Ako želimo svaki put kada program stane ispisati vrijednost neke varijable, onda nam
gdb to može 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
brišemo s liste izraze.
Lista izgleda ovako
2: foo = 38
3: bar[5] = (struct hack *) 0x3804
undisplay dnums...
delete display dnums... briše izraz određen identifikacijskim brojem “dnum”
disable display dnums... isključuje ispisivanje, ali ga je kasnije moguće opet uključiti
enable display dnums... uključuje ispisivanje automatskog prikaza
display ispisuje trenutne vrijednosti isto kao i kada stane program
info display ispisuje popis varijabli koje se ispisuju
433/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GDB
434/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Marko Ferk
GNU MAKE
435
/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
UVOD
Kako biste se priremili za korištenje makea, morate napisati file nazvan makefile koji
opisuje povezanost sa bilo kojim, executable jezikom za programiranje i koji omogućuje
ažuriranje svakogfilea. Tipično,u programu file je ažuriran iz fileovih objekata, koji su redom
napravljeni compiling izvorom fileova.
Kad ste jednom napravili odgovarajući 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 odlučio koji podatak treba biti ažuriran.
Za svaki od tih fileova on izdaje naredbe pohranjene u bazi podataka.
Možete stvoriti argumente na komandnoj liniji makea kako bi se kontroliralo koje fileove
treba rekompilirati i kako.
436/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
PREDSTAVLJANJE MAKEFILEOVA
Makefile vam je potreban da biste dali naredbu makeu. Najčešće nam makefileovi
pokazuju kako kompajlirati i povezati program.
U ovom ćemo poglavlju govoriti o jednostavnom makefileu koji povezuje kako kompilirati i
složiti tekst koji se sastoji od osam C izvora i 3 glavna filea. Makefile također upućuje kako
pokrenuti naredbe koje su izričito tražene (primjerice, ukloniti određeni file kao radnja
čišćenja).
Kad make rekompajlira editor, svaki izmijenjeni izvor C filea mora se rekompajlirati. Ako je
glavni file promijenjen, svaki će izvor C filea koji uključuje glavni file, on se mora
rekompajlirati kako bi se sačuvao. 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 sačuvani iz prethodnih kompajlacija, moraju povezati kako bi se stvorio
novi izvršni editor.
Meta (target) je obično naziv filea koji je generiran programom; primjeri targeta su izvršni
fileovi. Meta također može 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 više fileova.
Naredba (command) je radnja koji make izvodi. Pravilo može imati više od jedne naredbe,
svake u svom nizu.
Imajte na umu: trebate umetnuti tab oznaku na početku svakog naredbenog reda. Ovo se
odnosi na vas neoprezne.
437/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Obično je naredba u pravilu s preduvjetom i služi 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 sadrži naredbu delete spojenu s metom `clean` nema preduvjete.
Pravilo (rule) nadalje objašnjava kako prepraviti određene fileove koji su mete određenog
pravila. Make iznosi naredbe preduvjeta da stvore ili ažuriraju metu (target). Pravilo također
može objasniti kako i kada izvesti neku radnju.
Makefile mora sadržavati i drugi tekst osim pravila, ali jednostavni makefile treba sadržavati
samo pravila. Pravila se mogu doimati do neke mjere kompliciranijima nego što je ovdje
prikazano, no svi više ili manje odgovaraju vezi.
JEDNOSTAVNI MAKEFILE
Ovdje je nanizan makefile koji opisuje način o kojem izvršni 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 uključujući `defs.h`, a samo oni koji definiraju naredbe za
montiranje uključuju `command.h`. Samo fileovi na niskim nivoima koji se mijenjaju pri
montiranju uključuju `buffer.h`.
438/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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 koristeći blackslash-newline. Ovo je kao korištenje
jedne druge linije, ali se lakše čita.
Kako biste koristili ovaj makefile da biste stvorili odgovarajući file, utipkajte:
make
Kako biste koristili make da biste izbrisali odgovarajući file i sve objekte iz direktorija,
utipkajte:
make clean
U ovom primjeru mete uključuju odgovarajući 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 uključuju `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 ažurirati.
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 sadrži metu i preduvjet. Ove shell naredbe govore
kako ažurirati file metu. Tab oznaka mora doći na početak svakog naredbenog niza kako bi se
razlikovale naredbene linije od ostalih linija u makefileu. (Imajte na umu da make ne zna ništa
o tome kako naredbe funkcioniraju. Ovisi na vama da tražite naredbe koje će ažurirati file
metu na pravi način. Sve što make čini jest da izvršava naredbe po pravilima koje ste vi
zatražili kat file meta treba biti ažurirana.)
439/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Meta `clean` nije file, već samo naziv radnje. Budući da ne želite iznijeti radnje u ovom
pravilu, `clean` nije preduvjet nijednog drugog pravila. S tim u vezi, make nikad ne
poduzima ništa s tim ukoliko to izričito zatražite. Imajte na umu da ovo pravilo ne samo da
nije preduvjet, već ih niti ne sadrži, tako da je jedina svrha pravila vršiti tražene naredbe. Mete
koje se ne odnose na fileove, nego su samo radnje zovu se lažne mete (phony targets).
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 kažete makeu da to učini
(naredbom kao što je `make clean`).
Prije rekompajlirana objekt filea, make razmatra ažuriranje preduvjeta, izvornog filea i
glavnih fileova. Ovaj makefile ne specificira da se bilo što učini za njih -- `.c` i `.h`
fileovi nisu mete nikakvih pravila, tako da make za ove fileove ne čini ništa. No make će
automatski ažurirati generirane C programe, poput onih koje su napravili Biton i Yacc po
vlastitim pravilima.
Nakon rekompajliranja bilo kojeg objekt filea koji je potreban, make odlučuje da li će
prespojiti `edit`. Ovo se mora napraviti ukoliko file `edit` ne postoji ili ako je bilo koji
440/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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
ažurira `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 našem primjeru, trebali smo izlistati sve objekt fileove dvaput u našem pravilu za `edit`
(ponovljeno ovdje):
Takva duplikacija jest error-prone; ukoliko je novi objekt dodan sistemu, možemo ga dodati
jednoj listi i drugu zaboraviti. Možemo ukloniti rizik i pojednostaviti makefile koristeći
varijablu. Varijable dopuštaju tekstualnom nizu da se definiraju odjednom i zamijene na
višestruka mjesta kasnije.
Nadalje, na svakom mjestu gdje želimo umetnuti listu naziva objekt fileova, možemo
zamoijeniti vrijednost varijable tako da upišemo `$(objects).`
Evo kako izgleda kompletan jednostavni makefile kada koristite varijablu za objekt fileove:
441/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
PISANJE MAKEFILEOVA
`#` u nizu makefilea označuje komentar. S ostatkom se niza ignorira, samo što
(trailing backslash) koji nije nestao iz drugog backslasha nastavlja komentar kroz
višestruki niz. Niz koji sadrži samo komentar (možda i sa razmakom ispred) prazan je
i ignorira se. Ako želite koristiti doslovce znak # učinite to backslashom (npr. \#).
Komentari se mogu pojaviti u bilo kojem nizu makefilea iako se oni posebno tretiraju
u određenim situacijama.
Sa komandnom skriptom (ako niz počinje s likom TAB) čitav se niz prenosi u shell, kao sa
bilo kojim drugim nizom koji počinje sa TAB. Shell odlučuje kako će se interpretirati tekst: je
li ovo komentar ili nije odlučuje shell.
443/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
U normalnim okolnostima trebati sve makefileove nazvati `makefile` ili `Makefile`. Prvi je
naziv provjeren, `GNUmakefile` nije preporučljiv za većinu makefileova. Trebali biste
koristiti ovaj naziv ukoliko imate makefile koji je specifičan GNU makeu i kojega neće
razumjete ostale verzije makea. Ostali make programi traže `makefile`, `Makefile`, ali ne i
`GMUmakefile`.
Ukoliko make ne pronađe ni jedan od ovih naziva, ne koristi niti jedan makefile. Zatim
morate specificirati cilj sa naredbenim argumentom i make će pokušati dokučiti kako da ga
prepravi koristeći samo ugrađena implicitna pravila.
Ukoliko želite koristiti nestandardni naziv za vaš makefile možete specificirati naziv sa `-f`
ili `--file` opcijom. Argumenti `-f name` ili `--file=name` govore makeu da
očita naziv name kao makefile. Ukoliko koristite više od više od jedne `-f` ili `--file`
opcije možete specificirati više makefileova.
444/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Include filenames…
Dodatni prostori dopušteni su i ignorirani na početku niza, ali tab nije dopušten. Prostor je
poželjan između include i naziva filea, te između naziva više fileova. Dodatni prostor
ignorira se tu i na kraju direktive. Komentar koji započinje sa `#` je dopušten na kraju niza.
Ukoliko naziv filea sadrži bilo koju varijabilnu ili funkcijsku referencu, on se proširuje.
Na primjer, ako imate tri `.mk` filea, `a.mk`, `b.mk` i `c.mk`, te $(bar)
ekspanzije do bla bla onda je slijedeće proširenje
include foo*.mk $(bar)
jednako
include foo a.mk b.mk c.mk bla bla
VARIJABILNI MAKEFILEOVI
Ako je definirano okruženje varijabilnog MAKEFILEA, make promatra njegovu
vrijednost kao listu naziva dodatnih MAKEFILEOVA koje će očitati prije drugih. Ovo djeluje
dosta slično include direktivi: različiti direktoriji pretraženi su za te MAKEFILEOVE.
445/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
VARIJABILNA MAKEFILE_LISTA
Kako make očitava različite makefileove, uključujući bilo kakvo postizanje iz varijabli
MAKEFILEA, naredbenog niza,, default fileova, ili iz include direktiva, njihovi će se
nazivi automatski dodati varijabli MAKEFILE_LISTE.
To znači da je prva stvar što make učini jest pregled posljednje riječi u ovoj varijabli i to će
biti naziv trenutnog makefilea. Kad je jednom trenutni makefile uporabio include,
posljednja riječ će biti tek-pridruženi makefile.
name1 = Makefile
name2 = inc.mk
446/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Nakon očitavanja svih makefileova make će razmotriti svaki kao ciljnu metu i pokušati je
ažurirati. Ako makefile ima pravilo koje govori kako to učiniti ili ako se implicitno pravilo na
to odnosi, bit će ažurirano ukoliko je potrebno. Nakon što su svi makefileovi provjereni,
ukoliko su se neki izmijenili, make započinje fazu čišćenja i ponovnog očitavanja
makefileova.
Ako znate da se jedan ili više vaših makefileova ne mogu preraditi i želite spriječiti make da
izvrši pretragu implicitnim pravilom, možete koristiti bilo koju uobičajenu metodu
sprječavanja implicitnog pretraživanja. Na primjer, možete napisati eksplicitno pravilo sa
makefileom kao metom, te praznu zapovjednu nit.
447/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
U ovom makefileu u kojega želite priključiti drugi možete koristiti match-anything pravilo
kako biste naredili da se prepravi bilo koja meta, što se ne može napraviti iz informacije u
sadržanom fileu. Make će pregledati drugi makefile.
Na primjer, ako imate makefile nazvan `Makefile` koji govori kako napraviti metu `foo`
(i druge mete). Možete napisati makefile nazvan `GNUmakefile` koji sadrži:
foo:
frobnicate > foo
%: force
@$(MAKE –f Makefile $@
force: ;
Važno je razumjeti ovaj dvofazni pristup jer ima izravan značaj na to kako se ponašaju
varijable i funkcijsko proširenje; ovo je često izvor zabuna pri pisanju makefilea. Ovdje ćemo
prikazati zbroj faza u kojima se proširenja odvijaju za različite konstrukcije unutar makefilea.
Kažemo da je proširenje trenutno ukoliko se događa za vrijeme prve faze: u ovom će slučaju
make proširiti bilo koju varijablu ili funkciju u tom razredu. Ako se proširenje ne izvede
odmah, kažemo da je ona deferirana. Ona se ne odvija dok god se bilo koja konstrukcija
kasnije ne pojavi u trenutnom kontekstu ili pak u drugoj fazi.
Možda niste upoznati s nekima od ovih konstrukcija.
448/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
PRIJENOS VARIJABLI
immediate = deferred
immediate ?= deferred
immediate := immediate
immediate += deferred or immediate
define immediate
deferred
endef
KONDICIONALNI IZVADAK
Sve instance kondicionalne sintakse su u potpunosti izbačeni, to uključuje ifdef, ifeg,
ifdef i ifneg oblike.
DEFINICIJA PRAVILA
Pravilo se uvijek proširuje na isti način, bez obzira na formu:
immediate : immediate ; deferred
deferred
To jest, dijelovi mete i preduvjeta prošireni su odmah, a zapovijedi korištene pri konstruiranju
mete su uvijek deferirane. Ovo općenito pravilo je istinito za eksplicitna pravila, pravila o
vezama, o sufiksima i statističkim vezama, te za definicije jednostavnih preduvjeta.
449/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
PISANJE PRAVILA
Pravilo se pojavljuje u makefileu i govori kad i kako prepraviti određeni file, a naziva
se metom pravila. Izlistava druge fileove koji su preduvjeta mete i naredbe koje će koristiti pri
kreiranju ili ažuriranju mete.
Red pravila nije bitan, osim odlučivanja 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 višestruke mete, samo je prva meta uzeta kao default. Postoje dvije iznimke:
meta koja počinje sa točkom nije default osim ako ne sadrži jednu ili više kosih crta `/` i meta
koja definira da pravilo veze nema učinka na default cilj.
PRIMJER PRAVILA
Ovdje je jedan primjer pravila:
foo.o : foo.c defs.h #module for t widdling the forbs
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 počinje tabom kako bi se identificirala kao naredba.
SINTAKSA PRAVILA
Općenito, pravilo izgleda ovako:
targets : prerequisites
command
…
450/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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. Obično postoji samo jedna
meta po pravilu, no povremeno ima razloga da ih bude više.
Naredbeni nizovi započinju tab oznakom. Prva se naredba može pojaviti u nizu nakon
preduvjeta sa tab oznakom ili se može pojaviti u istom nizu sa polunizom. U oba slučaja
efekt je isti.
Budući da se simbol dolara koristi za započinjanje varijabilnih referenci, ako zaista želite
simbol dolara morate ih upisati dva, `$$`. Možete uzduž podijeliti niz umećući blackslash iza
kojeg slijedi novi red, no ovo nije obavezno, budući da make ne postavlja granice u redovima
makefilea.
Pravilo govori dvije stvari: kad je meta zastarjela i kako je ažurirati kad je potrebno.
Kriterij za zastarjelost je određeno uvjetom preduvjeta, koji sadrži imena fileova koji su
odvojeni razmakom. Zamisao je da se sadržaj mete filea temelji na informaciji u preduvjeta,
tako da ako se neki preduvjeta izmijeni, sadržaj postojeće mete više nužno 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 izgrađenih 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 počne izgrađivati metu. Drugo, unosi ovisnu vezu: ako je bilo koji preduvjet
noviji od mete, ona se smatra zastarjelom i moraš e ponovno izgraditi.
451/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Naravno, to je upravo ono što vi želite: ako je preduvjet mete ažuriran, isto se treba učiniti sa
metom.
Oznaka ` na početku file može također značiti da file od posebnog značaja. Ako je samo ili
iza njega slijedi crta, predstavlja vaš home direktorij. Na primjer `~/bin` prošireno je
`home/you/bin`. Ako nakon `~` slijedi riječ, nit predstavlja home direktorij korisnika
koji je nazvan po toj riječi. Na primjer, `~john/bin` proširuje se na
`/home/john/bin`. U sistemima koji nemaju home direktorij za svakog korisnika
(poput MS DOS ili MS Windows) ova se funkcija simulira postavljanjem varijabilnog
okruženja HOME.
LAŽNE METE
Lažna je meta ona koja nije pravi naziv filea. To je tek naziv za neke naredbe koje se
izbacuju kad to izričito zatražite. Postoje dva razloga za korištenje lažnih meta: za
izbjegavanje sukoba sa istoimenim fileom ili kako bi se poboljšala izvedba.
Ako napišete pravilo čije naredbe neće kreirati ciljanu metu, naredba će biti izbačena
svaki put kad se meta bude prepravljala. Evo primjera:
clean:
rm*.o temp
452/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Budući da rm naredba ne stvara file nazvan `clean`, takav file vjerojatno nikad neće
postojati. Zato će rm naredba biti izbrisana svaki put kad kažete `make clean`.
Lažna će meta prestati raditi ako bilo što ikad kreira file nazvan `clean` u ovom direktoriju.
Budući da preduvjeta nema, file `clean` razmotrit će se za ažuriranje, a njegova se naredba
neće izbaciti. Kako bi se izbjegao ovaj problem, možete izričito zatražiti lažne mete koristeći
posebnu metu .PHONY.
.PHONY : clean
Kad ste ovo napravili, `make clean` će provoditi naredbe bez obzira postoji li file
nazvan `clean`. Pošto zna da lažne mete ne imenuju prave fileove koji se mogu prepraviti
iz drugih fileova, make preskače implicitno pravilo o potrazi za lažnim metama. Zato je
deklariranje mete lažnom dobra izvedba, čak i ako vas ne zabrinjava da takav file postoji.
Zato prvo morate napraviti niz koji tvrdi da je clean lažna meta, zatim napišete pravilo
ovako:
.PHONY: clean
clean:
rm*.o temp
Još jedan primjer korisnosti lažnih meta je u kombinaciji sa rekurzivnim invokacijama makea.
U ovom slučaju nakefile će često sadržavati varijablu koja izlistava broj poddirektorija koje
treba izgraditi. Jedan način na koji se to riješava je s jednim pravilom čija je naredba shell
petlja preko poddirektorija, ovako:
subdirs:
for dir in $(SUBDIRS); do \
$(MAKE) –C $$dir; \
done
453/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Doduše, postoji nekoliko problema sa ovom metodom. Prvo, otkrivena greška u pod-makeu
nije obuhvaćena ovim pravilom tako da će nastaviti graditi ostatak direktorija čak i kada se
jedan sruši. To se može preduhitriti tako da se doda shell naredba koja će primijetiti grešku i
izaći, no tada će to raditi čak i ako make pobudi –k opcija, koja je nesretna. Drugo, i možda
još važnije, ne možete oduzeti prednost paralelno izgrađenim mogućnostima makea koji
koriste ovu metodu, budući da postoji samo jedno pravilo.
Ovdje smo također deklarirali da `foo` poddirektorij ne može biti izgrađen dok god `baz`
direktorij nije potpun; ovakva povezanost deklaracije je osobito važna kad se pokušava
paralelno izgrađivanje.
Lažne mete ne bi trebale biti preduvjet prave mete filea; ako je, njene naredbe se pokreću
svaki put kada make ažurira taj file. Dok god lažna meta nije preduvjet prave mete, naredbe
lažne mete će se izbacivati samo kad je lazna meta određena za cilj.
Lažne mete mogu imati preduvjete. Kad jedan direktorij sadrži višestruke programe, najviše
bi odgovaralo opisivanje svih programa u jednom makefileu `./Makefile`. Budući da će meta
prepravljana pogreškom biti prva u makefileu, ustaljeno je nazvati ovu lažnu metu `all` i
dati joj, kao preduvjeta, sve individualne programe. Na primjer:
454/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Svrha praznih meta fileova jest za snimanje, sa vremenom zadnje modifikacije, tj. kad su
pravila naredbe zadnji put izbačene. Ovakav file bi trebao imati neke preduvjete. Kad
zatražite prepravljanje praznu metu, naredbe se izbacuju ukoliko je bilo koji preduvjet češći
od mete; drugim riječima, ako se preduvjet promijenio od kad ste zadnji put prepravljali metu.
Evo primjera:
455/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Može postojati samo niz naredbi koje se izbacuju za file. Ukoliko više od jednog pravila
izdaje naredbu za isti file, make koristi posljednji dani niz i ispisuje poruku s greškom.
Povremeno je korisno da iste mete pobuđuju različite naredbe koje su definirane u različitim
dijelovima vašeg makefilea; možete koristiti double-colon pravila.
Posebno pravilo samo sa preduvjeta može se koristiti za davanje dodatnih preduvjeta mnogim
fileovima odjednom. Na primjer, makefileovi često imaju varijablu poput objekata kojoi
sadrže popis svih kompiliranih output fileova u sustavu koji se gradi. Lak načina da se kaže
kako se svi oni moraju rekompajlirati ako se `config.h` promijeni, učinit ćete ako napišete:
objects = foo.o bar.o
foo.o : defs.h
bar.o : defs.h test.h
$(objects) : config.h
Kad se meta pojavi u višestrukim redovima, sva pravila moraju biti istoga tipa: sva uobičajena
ili sva u dvostrukoj koloni. Ako su u dvostrukoj koloni svaki je od njih neovisan o drugima.
Svaka naredba dvostruke kolone izvršeno je ako je meta starija od bilo kojih preduvjeta toga
pravila. Ako nema preduvjeta za to pravilo, njegove se naredbe uvijek izvršavaju (čak i ako
456/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
meta već postoji). Ovo može rezultirati tako da se izvrši nijedno, neka ili sva pravila
dvostrukih kolona.
Pravila dvostrukih kolona za metu izvršavaju se redom kako se pojavljuju u makefileu. Kako
god, slučajevi gdje dvostruke kolone imaju smisla su ona gdje redoslijed izvršavanja naredbi
nije bitan.
457/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Varijable i funkcije u svim dijelovima makefilea proširuju se kad se očitaju, osim za shell
naredbe u pravilima, desnim stranama varijabilnih definicija koristeći `=` i tijela varijabilnih
definicija koja koriste define direktivu.
Naziv varijable može biti nastavak oznaka koje ne sadrže `:´,´#´,`=` ili koje vode do
praznog prostora. Kako god, nazive koji sadrže oznake koje nisu slova, brojevi i slično treba
izbjegavati, jer mogu imati posebna značenja u budućnosti. Nazivi varijabli su osjetljivi.
Nazivi `foo`, `FOO` i `Foo` odnose se na tri različite varijable. U nazivima varijabli
korištenje ovih slova je tradicionalno, no preporučamo korištenje slova donjeg tipa za
parametre kako bi se kontrolirala implicitna pravila ili parametri, koje će korisnik preskočiti
sa naredbenim opcijama.
458/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
program : $(objects)
cc –o program $(objects)
$(objects) : defs.h
foo = c
prog.o : prog.$(foo)
$(foo)$(foo) -$(foo) prog.$(foo)
459/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Kondicional slučajevi koriste tri direktive: jednu ifeg, jednu else i jednu endif.
Direktiva ifeg počinje sa kondicionalom i označava stanje. Sadrži dva argumenta odvojena
sa zarezom i okružena zagradama. Varijabilna zamjena je obavljena za oba argumenta i oni su
uspoređeni. Linije u makefileu koje slijede ifeg su pročitane ako se dva argumenta
podudaraju, inače su ignorirane.
Direktiva else uzrokuje sljedbeni niz koji se očitava ako je prethodni kondicional propao. U
primjeru iznad to znači da je druga alternativa povezivanja naredbi korištena kad god se prva
alternativa ne koristi. Imati else u kondicionalu je po izboru.
Endif direktivom kondicional završava. Svaki kondicional mora završiti sa endif. Slijedi
tekst koji ne sadrži kondicional.
460/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
SINTAKSE KONDICIONALA
Sintaksa je jednostavan kondicional bez else kako slijedi:
conditional-directice
text-if-true
endif
Text-if-true može biti bez tekstualne linije da bi se smatrao dijelom makefilea ako je stanje
istinito. Ako je stanje lažno, nikakav se tekst ne koristi.
Proširi sve varijabilnle reference u arg1 i arg2 i usporedi ih. Ako su identične text-if-true je
efektivan, u protivnom je text-if-false, ako ga ima, efektivan.
461/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
$(function arguments)
ili ovako:
${function arguments}
Ovdje je function ime funkcije; jedan od naziva s kratke liste koji su dio makea. Također
možete sastavno kreirati vlastite funkcije koristeći ugrađenu call funkciju.
Arguments su argumenti funkcije. Od funkcije su odvojeni imenom s jednim ili više razmaka i
ako postoji više od jednog argumenta, onda su odvojeni zarezom. Takav prostor i zarezi nisu
dio vrijednosti argumenta. Delimitri koje koristite kako biste okružili funkcijski poziv, mogu
se pojaviti u argumentu samo u prikladnim parovima; druga se vrsta delimitara može pojaviti
pojedinačno. Ako argument sam po sebi sadrži funkcijski poziv ili varijabilnu referencu,
najpametnije je koristiti istu vrstu delimitara za sve reference; napišite `$(subst
a,b,$(×))`, a ne `$(subst a,b,${×})`. Zato što je jasnije i zato što samo jedan
tip delimitara odgovara da bi se pronašao kraj reference.
462/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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'.
Ovdje subs funkcija zamjenjuje svaki razmak sa zarezom, kroz vrijednost fooa i
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 riječima u textu koji odgovara uzorku i zamjenjuje ih zamjenom.
Ovdje uzorak može sadržavati `%` koji ima ulogu wildcard oznake, a odgovara bilo kojem
broju bilo koje oznake unutar riječi. Ako zamjena također sadrži `%`, 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
$(error text…)
Generira kobnu pogrešku gdje je poruka text. Primijetite kako se pogreška generira svaki put
kad je ova funkcija procijenjena. Tako, ako umetnete naredbu ili doznaku na desnoj strani
rekurzivne varijable, neće se procjenjivati neko vrijeme. Text će se proširiti prije nego što se
pogreška generira. Na primjer,
Ifdef ERROR1
$(error error is $(ERROR1))
endif
će generirati fatalnu pogrešku za vrijeme čitanja makefilea ako je make varijabla ERROR1
definirana.
464/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Međutim možda želite ažurirati samo neke od svojih fileova, pa želite koristiti različite
mogućnosti kompiliranja; možda želite samo pronaći koji su fileovi zastarjeli i ne želite ih
mijenjati.
Dajući argumente dok make radi, možete učiniti bilo koju od ovih stvari i još mnoge druge.
Izlazni status makea uvijek je jedan od triju vrijednosti:
0
Izlazni status je nula ako je make uspješan.
2
Izlazni je status dva ako makenaiđe na kakve pogreške. Ispisat će poruke opisujući
određene pogreške.
1
Izlazni je status jedan ako koristite `-q' zastavicu I make zaključuje da su neke mete
zastarjele.
465/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
ifneq ($(MAKECMDGOALS),clean)
include $(sources:.c=.d)
endif
Uporaba određivanja 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 sadržavati nekoliko programa, sa makefileom koji
započinje ovako:
.PHONY: all
all: size nm ld ar as
Ukoliko radite na veličini programa (size), vjerojatno ćete htjeti narediti `make size`
tako da se rekompiliraju samo fileovi iz tog programa.
Još jedna uporaba određivanja cilja je da se uredi da fileovi nisu mormalno napravljeni.
Primjerice, to može biti file outputa ili verzija programa koja je kompilirana posebno za
testiranje, koje sadrži pravilo u makefileu, no nije prerekvizit neispravnog cilja.
Još jedna uporaba određivanja cilja je da se pokrenu naredbe povezane sa lažnim metama ili
praznim metama. Mnogi makefileovi sadrže lažnu metu nazvanu `clean` koja uništava sve
osim izvornog filea. Jasno, to će učiniti samo ako zatražite `make clean`. Slijedi popis tipičnih
lažnih naziva praznih meta.
`all'
`clean'
`mostlyclean'
`distclean'
`realclean'
`clobber' .
`install'
`print'
`tar'
`shar'
`dist'
`TAGS'
`check'
`test'
466/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1. Koristite naredbu `make' kako biste rekompilirali izvorne fileove koji zaista trebaju
rekompilaciju, uvjerivši se da su objekt fileovi ažurirani prije nego što počnete.
2. Napravite promjene u glavnim fileovima.
3. Upotrijebite naredbu `make -t' kako biste označili sve objekte do zadnje izmjene.
Slijedeći put kad budete pokretali make, promjene u glavnom fileu neće uzrokovati
nikakve rekompilacije.
Ukoliko ste već promijenili glavni file do trenutka kad neki fileovi zatrebaju rekompilaciju,
prekasno je da ovo napravite. Umjesto toga možete upotreijebiti `-o file` zastavicu, koja
specifični file označava “starim”. To znači da se file sam po sebi neće preraditi niti će se
preraditi išta drugo na njegov račun. Slijedite ovu proceduru:
467/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
ZAKLJUČAK
Kroz ovaj seminarski rad pokušao sam objasniti uporabu makea. Ovdje je neizbježan
file nazvan makefile, koji šalje naredbe makeu. Najčešće nam makefileovi pokazuju kako
kompajlirati i povezati program. Makefile također upućuje kako pokrenuti naredbe koje su
izričito tražene, kao na primjer uklanjanje određenog filea kao radnja čišćenja.
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 suvišnog gubljenja vremena. Osmišljen još u ranim 1970-ima,
make je do današnjih dana okosnica u većini programskih projekata. Sadrži bogati spektar
izbora koji vam dopušta manipulaciju višestrukim direktorijima, zatim izgradnju različitih
verzija programa, te se prilagođava vašim potrebama.
Pišući ovaj seminar ustanovio sam zašto ovaj program zauzima visoko mjesto u procesu
izgradnje softvera unatoč mnogobrojnoj mlađoj konkurenciji.
468/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
CVS – SUSTAV ZA
VERZIONIRANJE
469/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
UVOD
470 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
471 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
CVS model
472 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
473 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Izlaz nam pokazuje, liniju po liniju, razliku između datoteka email i addresses.
Kako bi te dvije datoteke bile identično potrebno je dodati (a) liniju 3 i 4 (3,4) iz datoteke
addresses (>) poslije linije 2 u datoteku email.
Pokazaćemo i sadržaj datoteka korištenih u primjeru kako bi cijeli primjer bio dodatno
pojašnjen. Linije su numerirane kako bi se lakše popratio ovaj primjer:
email email2
1 udrin@zg.tel.hr 1 udrin@zg.tel.hr
2 udrin@zg.htnet.hr 2 udrin@zg.htnet.hr
3 aleksandra@zg.hinet.hr 3 ADSL_ZA_DZABE@zg.t-com.hr
4 oksi@zg.htnet.hr 4 Zekorog@zg. t-com.hr
5 aleksandra@zg.hinet.hr
6 oksi@zg.htnet.hr
474 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
PREGLED POJMOVA
Neke od ovih pojmova ili njihove sinonime smo koristili do sada, no važno je prije
daljnjih opisa pojmove još jednom navesti i objasniti, budući će se ti pojmovi koristiti u
slijedećim poglavljima.
• Check out – postavljanje zahtjeva za vlastitom radnom kopijom iz
repozitorija. Radna kopija koja se dobije je trenutno stanje te datoteke ili
projekta u trenutku u kojem se dohvaća. Kao što je već ranije spomenuto, kada
developer završi sa svojim izmjenama na datoteci potrebno je upotrijebiti
commit i update naredbe kako bi se takva prerađena datoteka objavila u CVS
sistemu, primjenjujući vlastite izmjene na datoteci i ujedno dobivajući na uvid
izmjene koje su činili druge osobe uključene na projekt
• Commit – slanje promjena iz vlastite radne kopije u centralni repozitorij.
Naziva se još i check in.
• Conflict – situacija u kojoj dva developera pokušavaju napraviti commit
promjena koje se odnose na isti dio iste datoteke. CVS takvu situaciju
prepoznaje i prijavljuje nastali konflikt, no odgovorni za tu situaciju moraju ju
sami i riješiti.
• Log message – komentar koji se dodaje promjenama koje se commit-a, a koji
mora sadržavati opis promjena. Pregledavanjem postojećih komentara mora se
moći dobiti sažeti uvid u stanje projekta i što se na projektu do sada događalo.
• Repository – glavna, «master» kopija projekta, gdje CVS pohranjuje
kompletni revision povijest projekta. Svaki projekt ima jedan repozitorij.
• Revision – promjena commit-ana u nekom vremenskom trenutku za jednu
datoteku ili grupu datoteka. Revision je zapravo «snimka» jednog stanja kroz
stalne promjene na projektu.
• Update – akcija koja omogućuje primjenjivanje tuđih dorada neke datoteke na
vlastitu radnu kopiju te iste datoteke. Također ta akcija će pokazati dali vaša
radna kopija ima nekih izmjena koje još nisu commit-ane. Ukratko update drži
vašu radnu kopiju ažurnom sa aktualnom kopijom u repozitoriju.
• Working copy – radna kopija datoteke kroz koju developer radi izmjene na
projektu. Svaki developer na projektu ima svoju radnu kopiju datoteke na kojoj
nešto radi ili planira raditi.
475 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
476 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
477 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
CVS radi import svega u direktorijskom stablu, od zadanog direktorija prema niže.
Dakle prije importa potrebno se pozicionirati u najviši direktorij svog projekta.
mojStroj$ cd myproj
mojStroj$ ls
README.txt a-subdir/ b-subdir/ hello.c
mojStroj$
Parametar -m(message) služi kratkom opisu import procedure. To je ujedno i prvi log
message na projektu. Od tog trenutka i svaki commit će imati svoj kratki opis. Upravo zbog
toga što je akcije u repozitoriju potrebno opisivati radi praćenja projekta te su poruke
obavezne.
Argument projname predstavlja ime projekta. Pod tim imenom će se projektu u
repozitoriju pristupati.
Argumente vendortag i releasetag sada nećemo objašnjavati(služe za katalogizaciju
CVS repozitorija), koristiti ćemo korisničko ime i start kao vrijednosti za njih.
Pokretanje import-a:
478 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Čitanjem izlaza primjećujemo da CVS ispred svake datoteke stavlja jedno slovo. U
ovom slučaju slovo je "N" za "new file".
Nakon izrade nebrojenih backupa te redudancije postupaka i kopija svih formata spremni smo
na check out radne kopije iz repozitorija.
479 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Valja primijetiti da se od nekuda pojavio i direktorij CVS, nema mjesta panici, uloga
tog poddirektorija je da pohranjuje podatke o verzioniranju datoteka.
Pogledajmo što sve tamo ima:
mojStroj$ cd CVS
mojStroj$ ls
Entries Repository Root
mojStroj$ cat Root
/usr/local/cvs
mojStroj$ cat Repository
myproj
mojStroj$
480 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Dakle imamo datoteku Root koji pokazuje gdje se repozitorij nalazi i imamo datoteku
Repository koja pokazuje na projekt u repozitoriju (u našem slučaju myproj).
481 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Zahtjevnim programerskim zahvatom u datoteku hello.c dodati ćemo jednu liniju koda
koja ispisuje «Goodbye, world!».
Usporedimo sada našu lokalnu kopiju sa kopijom koja se nalazi u repozitoriju.
482 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
main ()
{
printf ("Hello, world!\n");
+ printf ("Goodbye, world!\n");
}
Ovdje je dakle situacija prilično jasna. Nova linija je dodana u datoteku (+ označava
dodanu liniju).
Važno je primijetiti kako CVS ima implicitne (podrazumijevane) argumente. Do sada
smo pokretali CVS naredbu iz naredbenog retka bez da napišemo na koju datoteku se odnosi.
Također i:
483 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Naredba commit poslati će izmjene koje smo učinili u repozitorij. Kako smo već
spomenuli a rado ćemo i ponoviti, ukoliko se ne navede ime datoteke poslane će biti sve
izmjene na svim datotekama koje smo učinili u direktoriju ili niže.
Da vidimo:
484 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
485 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Aha. Veliko slovo C ispred imena datoteke znači da iako je merge prošao, konflikt
postoji. Sadržaj hello.c sada pokazuje obadvije promjene:
#include <stdio.h>
void
main ()
{
printf ("Hello, world!\n");
<<<<<<< hello.c
printf ("this change will conflict\n");
=======
printf ("between hello and goodbye\n");
>>>>>>> 1.3
printf ("Goodbye, world!\n");
}
i tako u nedogled
>>>>>>> (zadnja oznaka verzije u repozitoriju)
486 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Do sada, projekt je pretrpio neke promjene. Ako želimo saznati što se do sada na projektu
zbivalo nije potrebno proučavati svaki diff. Pregledavanje poruka o izmjenama(log message-
a) trebalo bi nam te informacije pružiti:
mojStroj$ cvs log hello.c
RCS file: /usr/local/cvs/myproj/hello.c,v
Working file: hello.c
head: 1.4
branch:
locks: strict
access list:
symbolic names:
start: 1.1.1.1
jrandom: 1.1.1
keyword substitution: kv
total revisions: 5; selected revisions: 5
description:
--------------
revision 1.4
date: 2001/04/20 04:14:37; author: jrandom; state: Exp; lines: +1 -1
podesih redak
--------------
revision 1.3
date: 2001/04/20 02:30:05; author: qsmith; state: Exp; lines: +1 -0
Dodo ja redak
--------------
revision 1.2
date: 2001/04/19 06:35:15; author: jrandom; state: Exp; lines: +1 -0
ispisasmo i Goodbye
--------------
revision 1.1
487 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Kao što se iz izlaza vidi, pregledavanjem log message-a može se brzo i kvalitetno steći
uvid u dosadašnji rad na projektu.
488 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Kako bi u cjelosti priveli ovo poglavlje kraju, valja nam spomenuti i slijedeće CVS
operacije koliko god one trivijalne bile.
Dodavanje datoteka u projekt radi se u dva koraka, prvo se izvrši naredba add a zatim
se napravi commit:
mojStroj$ cvs add novi.c
cvs add: scheduling file 'novi.c' for addition
cvs add: use 'cvs commit' to add this file permanently
mojStroj$ cvs ci -m "Dodo novi.c" novi.c
RCS file: /usr/local/cvs/myproj/novi.c,v
done
Checking in novi.c;
/usr/local/cvs/myproj/novi.c,v <— novi.c
initial revision: 1.1
done
mojStroj$
Dodavanje direktorija još je jednostavnije, jer nije potrebno poslije add naredbe raditi
commit.
Ovdje je važno napomenuti da se dodavanje binary datoteka radi nešto drukčije.
Naime kako nebi došlo do problema sa konverzijama (oznaka kraja reda npr.) potrebno je add
naredbu raditi sa parametrom –kb:
489 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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 računa da su direktoriji prazni (postupak je naravno isti
kao kod izbijanja datoteka).
490 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Kako smo već ranije zaključili i u razvoju software-a, kao uostalom i u svemu
ostalom u životu stvari jednostavno krenu krivim putem. Ne kaže se uzalud da je put do pakla
popločan dobrim namjerama. No oni sretnici koji krivim putem krenu, a ipak im je pružena
prilika za popravak, svakako bi voljeli da nemoraju ponovno sve od početka, već bi rado
pokušali izmijeniti neslavan kraj, nastavljanjem od točke u kojoj misle da su pogrešno
skrenuli.
CVS dakle svom korisniku u nevolji, pruža mogućnosti dohvaćanja zadnje "dobre"
verzije u kojoj se projekt nalazio.
Tu mogućnost pruža kroz vremensku (vrijeme commit-anja) ili povijesnu (oznaka zadnje
snimke -snapshota)
Datumsko dohvaćanje radi se proslijeđivanjem parametra D update naredbi:
mojStroj$ cvs -q update -D "2001-04-19"
U hello.c
U a-subdir/subsubdir/fish.c
U b-subdir/random.c
mojStroj$
491 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Tom naredbom označili smo trenutnu snimku stanja našeg projekta sa imenom
"Testiran_Isporucen_011204".
Označavanjem datoteka na projektu tag naredbom, dajemo oznaku jednoj fazi života
projekta. Važno nam je stanje u kojem se u tom trenutku projekt nalazio.
Slijedeće slike dobro pokazuju kako tag označava datoteke u određenom trenutku bez
obzira kakvu povijest verzija svaka datoteka zasebno ima.
Vraćanje verzije koju smo označili kao vrijednu vraćanja, tj. točku u kojoj vjerujemo
da imamo dobro stanje projekta radi se na slijedeći način:
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$
492 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
ADMINISTRACIJA REPOZITORIJA
Kreiranje repozitorija
ćemo kreirati repozitorij u direktoriju /usr/local/repozitorij koji prije toga trebamo kreirati.
U direktoriju će biti kreiran novi direktorij CVSROOT koji ima slijedeći sadržaj
cvspserver 2401/tcp
493 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Nakon toga je u /etc/inetd.conf datoteci potrebno definirati što je zapravo servis koji smo
pridružili portu:
(ne zaboravite da je \ samo oznaka da je slijedeći red nastavak prethodnog, a ne nova naredba)
Novi servis će biti aktivan nakon što se ponovo pokrene internet deamon a korisnici će moći
pristupati sa naredbom:
nakon toga će se tražiti da unese svoju lozinku na tom serveru. Lozinka koja se unosi je
lozinka za "shell account" tj. sistemska lozinka. Da bi to bilo moguće u datoteci
CVSROOT/config parametar SystemAuth mora biti podešen na "yes".
Podešavanje parametara i izmjena datoteka u CVSROOT direktoriju će biti objašnjeni nešto
kasnije.
<ime>:<"kriptirana" lozinka>
primjer:
nekilogin:aSa3jreTzMheS
nekidrugilogin:eFa5jzrLu7hea
494 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Kada se korisnik prijavi na ovaj način 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 korišten za rad sa CVS serverom i koja prava će biti
dodjeljena.
Isto tako je moguće jednom sistemskom loginu dodjeliti više 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 možemo iskoristiti i ukoliko želimo na jednostavan način korisnicima
koji rade na jednom projektu zabraniti da mjenjaju dokumente drugog projekta, a istovremeno
im zabranimo korištenje sistemskog logina.
cvslogin1
cvslogin2
cvstrecilogin
Ukoliko se nečiji login nalazi u datoteci readers tada će taj korisnik imati privilegije
samo za čitanje, pa makar se nalazio i u datoteci writers. Ukoliko se nečiji login nalazi u
datoteci writers tada svi korisnici čiji se login nalazi u toj datoteci imaju prava za čitanje i
pisanje. Međutim 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 možemo raditi pozitivnu, odnosnu negativnu selekciju, ili pak i pozitivne i
negativne, ukoliko se odlučimo na kreiranje obije datoteke.
495 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Kreirajmo neki direktorij koji će predstavljati naš projekt. Neka to bude npr. ~/projekt
i u njemu kreirajmo 2 datoteke hellocvs.c i read.me. Taj projekt ćemo sada dodati u
repozitorij. Potrebno je ući u direktorij projekt i izvršiti naredbu
head 1.2;
access;
symbols
c:1.1.1.1 b:1.1.1;
locks; strict;
comment @# @;
1.2
date 2004.12.19.21.22.06; author cvsuser4; state Exp;
branches;
next 1.1;
1.1
date 2004.12.12.18.37.53; author cvsuser4; state Exp;
496 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1.1.1.1
log
@
@
text
@@
Ukoliko neki dokument obrišemo iz projekta tada taj projekt neće biti izbrisan iz
repozitorija, jer ukoliko netko želi staru verziju projekta taj dokument mora biti dostupan.
Taj dokument će biti premješten u Attic direktorij, kojeg će kreirati ukoliko ne postoji unutar
projekta u repozitoriju.
Brisanje dokumenta naravno, radimo pomoću CVS alata, nikakve izmjene ne radimo direktno
u repozitorij direktoriju.
CVSROOT direktorij nije dio niti jednog projekta već služi za administraciju
repozitorija. Međutim ukoliko želimo mjenjati dokumente unutar njega to činimo kao i sa bilo
kojim drugim projektom, pomoću alata za rad sa repozitorijem. Dakle potrebno je napraviti
check out, zatim izmjenu na lokalnoj kopiji, a zatim check in.
498 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
config
• SystemAuth ako podesimo na no korisnici se neće moći logirati ukoliko ne postoji lozinka
definirana u CVSROOT/passwd. Ako se podesi na yes tada će CVS ukoliko ne nađe
lozinku u navedenoj datoteci, lozinku potražiti u sistemskim lozinkama.
• TopLevelAdmin ako se podesi na yes tada će se u lokalnoj kopiji projekta pojavljivati
CVS direktorij. Tu mogućnost iskorištavamo ukoliko korisnici imaju potrebu raditi na
više projekata istovremeno. U protivnom je dobro tu opciju ostaviti na no,
• PreservePermissions. Ukoliko želimo da se zapamte pristupna prava na datoteke u
verzijama tada je potrebno opciju podesiti na no
Između imena opcije, znaka jednakosti i ključne riječi yes ili no ne smije stajati razmak.
Ukoliko neka opcija nije navedena ili nema ključnu riječ yes ili no tada će se repozitorij
ponašati kao da je navedena opcija no. Ukoliko imamo potrebu stavljati komentar unutar
configuracijske datoteke tada redove sa komentarima treba označiti sa početnim znakom #.
SystemAuth=yes
TopLevelAdmin=no
PreservePermissions=no
499 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
modules
ime_datoteke ime_direktorija
proizvoljno_ime_aliasa -a naredbe_ili_imena_koje_alias_zamjenjuje
commitinfo
%s - ime datoteke
%V - verzija prije commita
%v - verzija poslije commita
500 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
regular_expression program_koji_se_pokrece_u_slucaju_zadovoljenja
loginfo
Ova datoteka se ponaša isto kao i datoteka commitinfo s tom razlikom što se program ne okida
u slučaju da je regular expression zadovoljen u datoteci koju commit-amo, već u komentaru
(log message) koji pišemo prilikom commit-a.
taginfo
Ova datoteka se ponaša isto kao i datoteka commitinfo s tom razlikom što se program ne okida
u slučaju da je regular expression zadovoljen u datoteci koju commit-amo, već u imenu
"taga" prilikom commita.
verifymsg i rcsinfo
Datoteka verifymsg sadrži naredbe koje se izvršavaju prilikom svakog commit-a. Najčešće 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 ključnu riječ ALL.
501 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
cvswrappers
U ovoj datoteci se može definirati posebno ponašanje datoteka s obziro na njihovo ime.
S obzirom na ograničenu mogućnost ove datoteke, najčešće se koristi da se definira koje
datoteke će se korisititi kao binarne.
Npr:
*.gif -k 'b'
checkoutlist
U ovoj datoteci možemo definirati dodatne administrativne datoteke koje želimo kontrolirati
putem verzioniranja, a nisu standardno isporučene.
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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Kao što smo vidjeli u prethodnim poglavljima, rad sa CVS-om iz komandne linije nije
baš intuitivan i zahtjeva znanje i razumjevanje rada CVS-a.
Iz tog razloga su nastala grafička sučelja koja pojednostavljuju rad. Međutim većina
developera koji rade sa CVS-om koriste isključivo check-in/check-out mogućnosti CVS-a i ne
žele instalirani alat koji bi zamjenjivao 2 naredbe, već si najčešće sami napišu skriptu u tu
svrhu.
To je razlog zbog čega grafička sučelja za rad CVS-om do sada nisu postigla veliku
popularnost.
Grafička sučelja predstavljaju sučelje na CVS komandni klijent, koji se nalazi instaliran na
računalu.
Dakle kada mi u grafičkom sučelju odaberemo projekt moj_projekt u repozitoriju i
odaberemo "check out", tada taj alat neće stvarno sam napraviti check out u repozitoriju, već
će samo u novom procesu pokrenuti naredbu
Velika prednost takvog načina je da eventualne pogreške u takvim alatima neće utjecati na
konzistenciju repozitorija.
Neka grafička sučelja ipak i sama za neke svrhe gledaju u repozitorij, ali se uglavnom
ograničavaju na čitanje.
Većina sučelja sadrži samo osnovne opcije CVS-a, dok za sada niti jednim grafičkim
sučeljem ne možemo u potpunosti zamjeniti sve opcije CVS-a, međutim najbolja sučelja
omogućuju preglednije praćenje verzija modula i druge mogućnosti koje nisu dostupne iz
komandne linije.
503 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
504 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
CERVISIA
Ovaj alat je namjenjen za KDE sučelje i u mnogim instalacijama linuxa se automatski instalira
sa KDE sučeljem.
Cervisia je najcjelovitije CVS grafičko sučelje i podržava mnoge mogućnosti osim osnovnih
opcija check-in, check-out, add, remove ....
Cervisia omogućava napredni pregled datoteka u raznim bojama ovisno o statusu, grafičku
usporedbu datoteka, grafički prikaz datoteka i grana te upravljanje njima.
Cervisiu je moguće pokrenuti i na sučelju koje nije KDE, međutim u praksi se često javljaju
problemi, pa se u takvim slučajevima najčešće poseže za nekim drugim CVS sučeljem.
505 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
TKcvs
Ovo Tcl/Tk bazirano CVS grafičko sučelje je vrlo popularno, najviše zahvaljujući izvrsnom
diff alatu unutar sučelja i mogućnosti instalacije na Windows, Linux i MacOSX platforme.
Poput Cervisie, osim osnovnih ima i brojne napredne mogućnosti i spada u red
najkvalitetnijih CVS grafičkih sučelja.
Za izvršavanje je potrebno imati Tcl/Tk runtime.
506 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
LinCVS
Prednost ovog alata je mogućnost spajanja na CVS server na više načina od ostalih
sučelja (local/nfs, pserver, ssh, ssh-agent, proxy).
Iako sadrži mnoge napredne mogučnosti, ovaj alat nije na razini prethodna dva alata.
507 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Ostala sučelja
508 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Ivan Podhraški
IDE
509 /1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
UVOD
komplicirano korištenje.
sučelje, događa im se da više puta odskače ta naredba od crte prevodioca (command line
compiler).
Zahvalan broj koji se stalno povećava je broj grafičkih okolina, koji čini korištenje software
510/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Invazija
Za IDE test uzeo sam primjer Anjute , u tekućoj beta inačici KDevelop
2.0.2, KDE Studio gold 3.0, isto kao i Kylix 2. U usporedbi Anjute i KDevelop , KDevelop
okolina je komercijalni softver. KDE Studio iz “the Kompany” je dostupna u no-frills , free ,
Open Source verziji, gdje se Borland Kylix može besplatno koristiti za privatne potrebe.
Koncept poslužitelja je da prikuplja baze svih kandidata odnosno sve datoteke koji su
potrebne da bi se za jedan dan izradio nov program. Ovo se ne primjenjuje samo na izvornom
prevodilac ( ni popratan pomoć program ). Umjesto toga , oni svi ( sa iznimkama ) imaju
Za one koji prelaze sa Microsofta i Borlanda, odnosno sa njihove razvojne okoline pod
Također postoji tekući IDE za ovaj software i ako nije instaliran na računalo
može se kasnije instalirati što nas košta naše dragocjeno vrijeme. Tako dobijemo npr.
prikazivanje svih razvojnih okolina , sa izuzetkom od Kylix , koji može usmjeriti stvaranje
pojedinih stranica , na primjer rpm oblik zapisa , što je naravno dostojno svake pohvale.
Usprkos mogućnosti naš test kandidat ima u rutini , razlikovanje sve četiri aplikacije.
511/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
• IDE
Anjuta 0.1.8
Anjuta dolazi pod GPL razvojnom okolinom. U svojoj tekućoj inačici je u beta
faza i stoga nije još potpuno pročišćen. Unatoč što je Anjuta najmanje prisutna, ali ipak već
sada obećava..
Anjuta , u svojoj tekućoj inačici , cilja na razvoj Gtk-a , koji je temeljen na GNOME -
Anjuta ne daje izravnu podršku aplikacijama koje koriste Qt ili KDE. Sva pomoć je potpuno
prilagođena Gtk-u i Gnome-u. Pa ipak ukoliko ih savjesno zanemarite nećete imati problema
Ovaj je duži i nespretniji put , i jednostavniji za Qt ili KDE razvijen od strane korisnika
Gtk I Qt su dvije knjižnice koje programer može iskoristiti unutar njihovih aplikacija.
Oni opskrbljuju grafičke objekte npr. menije. U tom slučaju rad sa Windowsima je olakšan za
programere. Gtk dolazi pod GPL , i Qt je na isti način raspoloživ pod ovom licencom.
Kompatibilnost sa drugim jezicima kao što je Java na primjer , je u planirajućem stadiju ili je
već djelomično gotov. U stvaranju novih programa , pomoćnik pomaže korisniku ,vodeći ga
kroz nekoliko jednostavnih koraka do željenog rezultata. (U mojem testu naprimjer, u samo
512/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Anjuta nesvjesno pohranjuje sve projekte u “projekt mapu” , a taj odredišni direktorij se može
U C-u je potrebna minimum jedna, ali se najčešće koriste dvije kartoteke “make” kartoteka
Pod standardnim postavkama Anjuta stvara tri mape koji vodi sa 64 kartoteke ukupno.
Editor je vrlo koristan te se njime vrlo lako služimo za obradu izvornog koda.
513/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Anjuta može otvoriti većinu različitih oblik zapisa , kao što je Java kod ili
Latex kartoteka. Upravo zato jer postoji gomila oblika zapisa , razvojna okolina izgrađena je
Za stvaranje aplikacije pomoću grafičkog sučelja, na osnovi Gtk , može se koristiti vanjski
514/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
KDevelop 2.0.2
SuSE - Linux , dobio sam više nego što sam očekivao. Upozorio nas je na više od 20
deinstaliranih paketa.
iskorištava Yast2. Oprez! Oni koji se lobiraju neće dobiti direktnu obavijest o postojanju
Do prvog dojma dolazi odmah nakon otvaranja. KDevelop ujedinjuje velik broj programa
unutar jednog radnog okruženja. Odmah, kako slijedi, otvara se grafičko okruženje -Qt.
Ovaj softver je stvorio Trolltech , proizvođač Qt-a. U usporedbi s Anjutom, više je baziran na
Windows modelu. Također je omogućen pristup vrlo detaljnoj pomoći , što upotpunjuje
Editor prozor je smješten sa desne strane, što je vrlo praktično kod editiranja izvornog koda,
Upravo zbog toga ovaj prozor može biti nezavisno smješten. Na dnu je smješten statusni
Ustvari KDevelop vrlo jako naglašava sastavljanje u cjelinu. Upravo zbog toga ne bi trebalo
biti iznenađenja, jer svi podaci se očitavaju iz KDE projekata te se postiže isti cilj.
KDE i Qt varijacijama programa, , razvojna okolina nažalost pruža jedinu vrstu aplikacije, na
515/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Srećom , pomoćnik nudi mnogobrojne mogućnosti , kao što je naprimjer promjena postavki u
Ovo omogućuje da nekoliko ljudi radi na istom projektu. KDevelop i Kylix su jedini
program
Kada su svi razvojni paketi instalirani, softver može izraditi cijeli nacrt za
To omogućuje da sve klase koje su korištene u projektu budu lako vidljive i modificirane.
Pomoćnik ponekad može preuzeti stvaranje novih klasa tako da generira dijelove koda i
pristupnih fileova.
Metode i atributi tada mogu biti dodane ili izbrisane korištenjem prigodnog dijalog prozora
Kada to radimo, ponekad nam se čini da je desni klik na mišu nalik čarobnom štapiću.
Atributi koji se ručno unašaju u kod , su automatski transformirani u adrese, nakon što prođu
Sve u svemu Kdevelop sadrži mnogo korisnih funkcija , koje su nažalost u startu sakrivene od
korisnika
Vrijeme koje treba premosnici da prebaci podatke između konzole za poruke i nekog
Ova procedura je pa ipak u prednosti jer jasno i točno sortira poruke prema tipu.
516/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
KDE Studio je razvijen od strane “the Kompany”, te je dostupan u dvije inačice. KDE Studio
( izdan pod GPL ) koji je slobodan i u izvornoj inačici koja čini komercijalni KDE Studio
Gold. Osnovna razlika između ove dvije inačice je u broju omogućenih mogućnosti.
Posvetit ću se testnoj verziji KDE Studia Gold, koja se može besplatno presnimiti sa
stranice proizvođača. Internet. Iako pruža sve opcije, vrijeme korištenja strogo je ograničeno
korisniku pomoćnik pomaže prilagoditi novu radnu okolinu. KDE Studio razlikuje se od
KDE Studio koristi ime projekta, te pomoću njega određuje podgrupu. To znači da projekt
Kada stvaramo novi projekt, ubrzo postaje jasno da KDE Studio daje naglasak na C i C++
razvoj, koristeći Qt ili KDE osnovu. Ovaj IDE ne nudi izbor stvaranja GNOME aplikacije,
što ostavlja mogućnost stvaranja projekta ručno, odnosno bez pomoći asistenta.
U usporedbi sa konkurencijom, KDE Studio kreira samo jednu kopiju najvažnijih podataka.
Neki govore da je čak i previše ekonomičan jer kao izvor programiranja koristi funkcije koje
moraju biti stvorene od korisnika. Aplikacija jedino nudi predložak za KDE ili Qt program.
KDE Studio nudi stablo predočeno u gornjem lijevom dijelu prozora, tako da drugi podaci ne
mogu biti ispisani na tom mjestu. Statusni prozor se nalazi na gornjem desnom dijelu
prozora.. Editor nudi poput Anjute mogućnost uvođenja funkcija i klasa. KDE Studio ne
postiže djelovanje KDevelopa, odnosno u jednu ruku postiže, jer ima preglednik klasa.
Također nudi grafičko sučelje, koje mora biti dodatno pozvano sa menija. Unatoč svemu
517/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
KDevelopu. Nažalost malen je broj ostalih zanimljivih stvari koje se mogu pronaći u KDE
518/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
razrađen Prevodioc Borland, koji ima mnogu iskustva u radu sa različitim razvojnim
Kako i ime govori, samo slobodna inačica dopušta kreiranje projekata pod GNU licencom.
Svi ostali koji žele dodatne opcije moraju kupiti, odnosno licencirati software po cijeni od
325 eura na službenoj Borland stranici. Također postoji i licenca za tvrtke koja nudi još više
Programi koji su napisani u Delphiu, Kylix može iskoristiti u oba jezika, Pascal i knjižnice
oformljene pomoću Borlanda. Kućne aplikacije na ovaj način mogu biti brzo i lako
oformljene, ali sve ovisi o znanju korisnika i instaliranim knjižnicama.. Borlandu je glavni cilj
U tu svrhu , Borland ne koristi za prijenos samo CLX knjižnice u Linux , nego je napravio
Nakon pokretanja , puna inačica zahtjeva unošenje registracijskog koda. Ako slučajno
ulaz odobren, uvodna slika nas obavještava da smo Delphi korisnik.. Razvojna okolina vrlo
Delphi korisnici nisi jedni kojima će se svidjeti rad kod kuće. Zanimljivo je to, što proizvođač
519/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Izravno nakon početka , očekuje nas prazan projekt , koji je smješten u praznom prozoru, a
Ovaj prostor može biti iskorišten za liste, nešto poput opcija u programima za obradu
fotografija.
Meni predstavlja sve raspolagajuće elemente, odnosno opcije. Ovaj prozor je obično
smješten sa lijeve strane. Za vrijeme kada korisnik stvara grafičko sučelje , Kylix za to
vrijeme generira pripadajući programski kod. Korisnik tada mora samo pregledati i upotpuniti
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 mišem.
Kylix je jedini program, prezentiran u ovom radu, koji podržava grupni rad.
520/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
ANJUTA
Anjuta će osigurati jednaku funkcionalnost i korisničko sučelje kao C i C++. Vrlo nalikuje
slika : ANJUTA
521/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
ARRIBA
aplikacije, ali također kao Anjuta ne može otkriti C ++ . Pruža podršku za mnogo
programskih jezika.
o C- FORGE
C - Forge je Power PC razvoj okolina sa podrškom za mnoge jezike, C++ i vrlo popularnu
Javu.
522/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
• KYLIX
grafički IDE, te program za pronalaženje pogrešaka . Pruža podršku za baze podataka i XML
Java , i FORTRAN.
slika : KYLIX
523/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
524/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Visual SlickEdit
Osigurava jednaku funkcionalnost i korisničko sučelje kao C ++. Pruža podršku za mnoge
525/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
• ZAKLJUČAK
C ili C ++ programeri koji žele programirati u programima koji su bazirani na Gtk-u trebali bi
KDevelop bi ipak trebao biti prva postaja za KDE i Qt programer, dok KDE Studio nažalost
Programeri koji su gradili svoje znanje u Visual Basicu pod Windowsima , ipak preporučujem
Za one koji još uvijek ne žele ulaziti u opširnost i dubinu C-a i C ++ , bilo bi najbolje da rade
u Kylixu..
Ako pišete neki mali programski kod, ne trebate se opterećivati sa radom na nekim moćnim
Zato je preporučljivo da svi korisnici koji prelaze sa Windows operativnih sustava koriste
526/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
ECLIPSE
527/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
ŠTO JE ECLIPSE?
Eclipse je open source razvojni projekt koji pruža 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.
528/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Svi dijelovi zajedno stvaraju bogato razvojno okruženje koje programeru omogućava
učinkovito razvijanje alata koji se glatko uklapaju u Eclipse Platform.
Općenito govoreći, razvoj svakog softvera lakši je kada se koristi IDE (integrirano
razvojno okruženje). Kada se govori o razvoju poslovnih aplikacija, programer obično
razmišlja o korištenju IDE-a kako bi olakšao razvoj aplikacije. S obzirom na to da su zahtjevi
različiti od aplikacije do aplikacije, nije uvijek moguće pronaći odgovarajući IDE koji se
uklapa u okruženje. Često je potreban framework za razvoj IDE-a kako bi se ovaj problem
riješio. Srećom, tu je Eclipse (open source platforma) koja nudi baš takav framework.
Poslovne perspektive
529/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Podrška
Kao i kod svih dobrih javno dostupnih projekata, newsgrupe, mailing liste i članci
programera cijelog svijeta podržavaju Eclipse. Za gotovo svaku komponentu Eclipse postoji
newsgrupa i mailing lista. Komercijalni priključci drugih prodavača nude podršku za
licencirane korisnike. Dodatno, sve priključke prati korisnička dokumentacija, koja je
dostupna i preko IDE-a.
Eclipse projekt podržavaju i najpoznatija imena industrije, na primjer: Borland,
Ericsson, Fujitsu, Hitachi, Hewlett-Packard, IBM, RedHat, SAP i Telelogic.
Poslovne mogućnosti
Distribucijski razvoj
530/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Uobičajeni priključci
531/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
532/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Konfiguracija PDE-a
Tijekom samog izvođenja mnogi plug-inovi zahtijevaju korištenje nekih drugih plug-
inova kako bi ispravno radili.
Za vrijeme razvoja plug-ina sve biblioteke morale bi biti u build pathu kako bi se kod
kompajlirao bez pogrešaka.
Da bi PDE pružio razvojno okružje koje je identično okružju runtimea u koji će plug-
in biti ugrađen, PDE mora specificirati Target Platform.
Specifikacijom target platforme PDE skenira i izlistava sve plug-inove koji su
pronađeni na toj lokaciji. Samo oni koje je eksplicitno naveo korisnik grade target platform
(sl. 2) i mogu se koristiti u radnom okružju plug-ina, dok su svi ostali zanemareni.
533/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
534/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Također se može specificirati i output direktorij gdje Java kompajler može spremati
svoje class kompajlirane datoteke projekta - dok Java kod ne sadrže svi plug-inovi (npr.
dokumentacijski plug-inovi).
Tijekom procesa izrade plug-ina developerima, pogotovo početnicima 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.
Kada odaberemo blank plug-in project, (sl.5) wizard generira plug-in projekt,
manifest datoteku, build.properties datoteku i inicijalizira sadržaj od tih datoteka bazirano na
podacima unesenim u wizard.
535/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Dependencies
Lista potrebnih plug-inova određuje libraries koji će biti na plug-in runtime class
pathu. Nakon spremanja manifest datoteke, PDE automatski obnavlja class path projekta
tako da sve promjene utječu na dependency listu, ako takva postoji.
Lista potrebnih plug-inova ne bi trebala sadržavati neiskorištene stavke. Takvu stavku
je lako uočiti zato što se tijekom development vremena plug-in kod se neće htjeti kompajlirati
u workspace.
536/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Prema tome, PDE nudi Find Unused Dependencies (sl.6) mogućnost koja traži
stavke koje su EXTRANEOUS te nudi mogućnost njihova micanja.
Extensions
Plug-in može pridonijeti samoj platformi tako što dodaje extension pointove
deklarirane od drugih plug-inova. Extension deklaracija mora slijediti shemu definiranu od
extension pointova.
Shema može biti jednostavna ili komplicirana onoliko koliko autor želi.
Dodajući nove ekstenzije u extensions page, manifest editora uključuje kreiranje
ugniježđenih elemenata koristeći se context menuom i setiranje vrijednosti atributa za te
elemente u Properties pogledu.
PDE koristi gramatiku extension točke da ispuni context menu s ispravnim nazivima
elemenata te nadograđuje property pogled sa legalnim atributima odabranog elementa.
Menu i elementi menua mogu biti dodani u radno okružje kontribucijom na
org.eclipse.ui.actionsets extensions points.
537/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Vršni 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
sl. 7 extenzije
Menu element specificira label menija onakav kakav će se pojaviti u radnom okružju.
Element 'separator' kreira menu separator koji također služi kao grupa u koju će menu item
biti dodan. I na kraju, 'action' element specificira stvarni menu item, koristeći se menuom
identifikatora i separatorovim imenom 'menubarpath' (atribut indicira slot gdje je item
smješten).
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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Runtime
Tip biblioteke, vidljivost i sadržaj mogu se namjestiti u Runtime pageu (sl. 8) manifest
editora.
540/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Extension points
Testiranje plug-ina
PDE nudi također i launcher u svojoj platformi koji omogućuje test i debuggiranje
plug-inova.
Runtime workbench pregledava ponašanje plug-inova u okružju u kojem će kasnije
biti implementirani.
Izlazni direktorij plug-in projekta smješten je u runtime classpath plug-ina. To
omogućuje class loaderu da uvijek bude u mogućnosti locirati i učitati najnovije class
datoteke plug-ina. Sve ostale execution opcije i postavke nalaze se u samoj launch
konfiguraciji (JRE, VM argumenti…).
Launcher (sl. 9) također može kreirati više različitih konfiguracija kako bi testirao (sl.
10) plug-inove pod drukčijim uvjetima.
sl. 9 Launcher
541/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
sl. 10 test
Zadnje što je potrebno napraviti u izradi plug-ina jest zapakirati plug-in u format koji
će se moći lako implementirati u svaki Eclipse bazirani produkt.
Sam proces pakiranja plug-in projekta vode build.properties konfiguracijske datoteke.
Ova je datoteka strukturirana kao set ključnih vrijednosti (određuje koje je datoteke potrebno
uključiti, a koje isključiti iz zapakiranog plug-ina).
Dva se ključa i koriste pri izradi Hello_world plug-ina: source<library> i bin.includes.
Kako bi se omogućio export i pakiranje plug-ina, brine se još jedan wizard, a to je Deployable
Plug-ins and Fragments.(sl. 11)
542/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Zaključak
543/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Eclipse Platform
NewTool
Workbench Help
JFace
SWT
NewTool
Team
Workspace
NewTool
Platform Runtime
544/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Plug-in je najmanja jedinica Eclipse Platforma koja može biti razvijena i isporučena
zasebno. Obično je mali alat napisan kao pojedinačni plug-in, dok kompleksni alati imaju
svoju funkcionalnost razdijeljenu na nekoliko plug-inova. S iznimkom male jezgre poznate
kao Platform Runtime, sve funkcionalnosti Eclipse Platforma locirane su u plug-inovima.
Plug-inovi su kodirani u Javi. Tipični plug-in sastoji se od Java koda u JAR biblioteci,
nekih read-only datoteka i drugih resursa poput slika, web templatea, kataloga poruka itd.
Neki plug-inovi uopće ne sadrže kod. Jedan takav primjer jest plug-in koji sudjeluje u online
pomoći u formi HTML stranica. Plug-in kodna biblioteka i read-only sadržaj locirani su
zajedno u direktoriju u datotečnom sistemu ili u baznom URL serveru. Tu je također i
mehanizam koji dopušta plug-inu da bude sintetiziran iz nekoliko odvojenih fragmenata,
svaki u svom vlastitom direktoriju ili URL-u. Ovo je mehanizam koji se koristi kako bi
isporučio različite jezične pakete za internacionalne plug-inove.
Svaki plug-in ima manifest datoteku koji deklarira njegovu mogućnost povezivanja s
drugim plug-inovima. Model povezanosti 'jednostavan' je: plug-in sadrži stanovit broj
imenovanih nadoveznih točaka (produžetaka, extension pointsa) i stanovit broj nadovezivanja
na jednu ili više točaka drugih plug-inova.
Pri startanju, Platform Runtime otkriva raspoloživ set plug-inova, čita njihove
manifest datoteke i gradi in-memory plug-in registry. Platform spaja nadovezne točke prema
imenu s njihovim odgovarajućim priključnim točkama. Svaki problem, kao što je npr.
nadovezivanje na nepostojeću točku, detektira se i logira. Rezultirajući plug-in registry
dostupan je preko Platform API-ja. Plug-in se ne može dodati nakon startanja.
545/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Plug-in manifest datoteka sadrži XML. Nadovezna točka može deklarirati dodatne
specijalne XML tipove elemenata na koje bi se nadovezala. Ovo plug-inovima omogućuje
povezivanja kojima mogu kolati najrazličitije informacije. Štoviše, objavljene informacije
dostupne su iz plug-in registryja, bez aktivacije sudjelujućeg plug-ina ili loadanja bilo kakvog
koda. Ova je osobina ključna za podržavanje velike baze instaliranih plug-inova od kojih su
samo neki potrebni u bilo kojem danom korisničkom session-u. Dok plug-inov kod nije
loadan, njegovo zauzeće memorije i djelovanje na vrijeme start-upa jest zanemarivo.
Korištenjem XML baziranih manifesta olakšano je pisanje alata koji podržavaju kreiranje
plug-inova. Plug-in razvojna okolina (PDE), koja je uključena 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 priključenim na
njegove 'spojne' točke. Npr. plug-in koji sadrži referencijalnu korisničku ekstenziju može
saznati sve sadržane korisničke preference i pristupiti njihovim imenima te složiti preference
dijalog. To može biti napravljeno samo upotrebom informacija iz registryja, bez potrebe
aktiviranja bilo kojeg sudjelujućeg plug-in.
Sudjelujući plug-in bit će aktiviran tek kada korisnik izabere preferencu s liste.
Aktiviranje plug-inova na ovaj način ne događa se automatski; postoji određen broj API
metoda koje služe isključivo za aktivaciju plug-ina. Jednom aktiviran, plug-in ostaje aktivan
sve dok se Platform ne isključi. Svaki plug-in opremljen je poddirektorijem u koji pohranjuje
podatke specifične za njega; ovaj mehanizam omogućuje plug-inovima da prenose važna
stanja između izvođenja.
546/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Workspace
547/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Workbench i UI Toolkit
548/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
549/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
JFace
550/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Workbench
551/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Prozor workbencha ima više odvojenih perspektiva, od kojih je samo jedna vidljiva u
danom trenutku. Svaka perspektiva ima svoje vlastite viewere i editore koji su uređeni (tiled,
stacked ili detached) za prezentaciju na ekranu (neki, prema potrebi, mogu biti skriveni).
Nekoliko različitih tipova viewera i editora mogu u perspektivi biti istodobno otvoreni.
Perspektiva kontrolira inicijalnu poglednu vidljivost, layout i akcijsku vidljivost. Korisnik
može brzo mijenjati perspektivu kako bi izvodio različite zadatke i može lako presložiti i
prilagoditi perspektivu kako bi bolje odgovarala određenom zadatku. Platform osigurava
standardnu perspektivu za općenite 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
načinima. Glavne produžne točke dopuštaju alatima da povećaju workbench:
• Dodaju novi tip editora.
• Dodaju novi tip pogleda.
• Dodaju nove perspektive, koje aranžiraju stare i nove viewe kako bi odgovarali
novom korisnikovu zadatku.
Platformovi standardni vieweri i editori prisutni su koristeći se ovim mehanizmom.
552/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
UI Integracije
Alati koji su napisani u Javi s pomoću Platform API-ja postižu najviši 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 podložnog datotečnog sistema. Njihove integracije su zato vrlo
slabe, pogotovo na UI razini. U nekim okolinama Eclipse Platform također podržava ovakve
vrste integracije:
• Workbench ima ugrađenu podršku za umetanje bilo kakvog OLE dokumenta
kao editora (samo u Windowsima). Ova opcija omogućuje tijesnu UI
integraciju.
• Plug-inov alat može implementirati kontejner koji premošćuje Eclipse
Platform API s ActiveX kontrolom kako bi bila upotrijebljena u editoru,
Vieweru, dijalogu ili wizardu (samo u Windowsima). SWT omogućuje
potrebnu niskorazinsku podršku. Ova opcija omogućuje tijesnu UI integraciju.
• Plug-inov alat može upotrebljavati AWT ili Swing za otvaranje zasebnog
prozora. Ova opcija omogućuje slabu UI integraciju, ali dopušta usku
integraciju ispod UI
Timska podrška
Pomoć
553/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Sadržaj je dodan u HTML datoteke. Objekti koji uređuju sirovi sadržaj u online knjige
koristeći pogodne navigacijske strukture izraženi su zasebno u XML datotekama. Ovo
odvajanje dopušta prije postojećoj HTML dokumentaciji da bude inkorporirana direktno u
online knjige bez potrebe za editiranjem ili njezinim prepravljanjem.
Dodana navigacijska struktura predstavlja sadržaj knjiga kao stablo tema. Svaka tema,
uključujući i nelistovne teme, može imati link na stranicu golog sadržaja. Obična knjiga može
imati višestruke alternativne liste top-level tema, dopuštajući nekima ili svim informacijama
da budu prisutne u totalno različitim organizacijama; npr. organiziranim prema zadacima ili
alatima.
Kada se organizira sistem za pomoć, potpuno tematsko stablo moguće je jedino kada
je set alata za dokumentaciju zatvoren. S Eclipse Platformom, set alata je uvijek nadoveziv i
posljedica toga jest da struktura dokumentacije za pomoć mora biti modularna. Platformov
mehanizam za pomoć dopušta alatu dodavanje i sirovog sadržaja i tematskog seta, kako bi
indicirao gdje treba umetnuti svoju temu u već postojeće tematsko stablo kao predefiniranu
točku za umetanje.
Epilog
554/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
funkcionalnosti mogu biti integrirane. Kroz te ekstenzije, alati pisani kao zasebni plug-inovi
mogu proširiti Eclipse Platform. Korisniku je predstavljen IDE sa specijaliziranim setom
dostupnih alatnih plug-inova.
Ipak, ovo zapravo nije kraj priče nego njezin početak. Alati u pravilu definiraju nove
točke ekstenzija i svoje vlastite API-je i tako služe kao temelji i integracijske točke za nove,
nadolazeće alate.
555/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Goran Jurišić
PIPE I FIFO
556/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
UKRATKO O PROCESIMA
Najkraća definicija procesa bi bila: proces je instanca programa koji se trenutno izvodi.
Svaka instanca ima svoj memorijski prostor i stanje izvođenja.
Proces mora imati svoj ID (identifikacijski broj) u obliku nenegativnog integer-a tako
da operacijski sustav može razlikovati procese, alocirati i upravljati sa sistemskim resursima
koji su potrebni za izvođenje pojedinog procesa. Naravno, svaki process ID je jedinstven. Isto
tako, svaki proces ima i svoje tzv. file descriptor-e.
*proces ID 0 je najčešće sistemski proces koji se zove swapper i dio je kernela
*proces ID 1 je init proces i pokreće ga kernel na kraju bootstrap procedure; podiže ga
UNIX sistem nakon učitavanja kernela; init čita inicijalizacijske datoteke dovodi sustav u
potrebno stanje
Proces u UNIX-u se kreira pomoću 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 događaju na jednom od ta
dva procesa vidljive na onom drugom.
getpid i getppid sistemski pozivi vraćaju 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Primjer 1.
#include<stdio.h>
#include<unistd.h> /*definira fork() i pid_t*/
int main()
{
printf (“ID procesa je %d\n”, (int) getpid() );
printf (“ID parent procesa je %d”, (int) getppid() );
return 0;
}
Povratne vrijednosti su cast-ane na long jer nema garancije da će pid_t stati unutar int-a.
Primijetite da ako pokrenete ovaj program više puta, javlja se različit 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 može stvoriti novi proces putem sistemskog poziva
fork. Proces koji poziva postaje na taj način 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>
558/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Povratna vrijednost funkcije fork je važna karakteristika koja omogućava parent i child
procesima da se međusobno razlikuju. Funkcija fork vraća 0 child-u te vraća child process ID
parent procesu. U slučaju neuspjeha fork vraća -1 i ne stvara child process. Zvuči zbunjujuće?
Evo primjera koji će pomoći.
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 izvršava sa jednom x varijablom. Nakon fork-a, dva
nezavisna procesa se izvršavaju, svaki sa svojom kopijom x varijable. Budući da se parent i
child procesi izvršavaju 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, izvršavaju iste instrukcije jer u kodu nismo
testirali povratnu vrijednost funkcije fork. Primjer 4. demonstrira kako testirati povratnu
vrijednost funkcije fork.
559/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Primjer 4.
#include <stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main(void)
{
pid_t childpid;
childpid = fork();
if(childpid == -1)
{
perror(“Neuspjeli pokusaj fork-anja!”);
return 1;
}
/*kod za child*/
if (childpid == 0)
printf(“Ja sam child %ld\n”, (long)getpid() );
else
/*kod za parent*/
printf(“Ja sam parent%lj\n”, (long)getpid() );
return 0;
}
Originalni proces u primjeru 4. ima vrijednost varijable childpid koja nije 0, tako da
izvršava drugu printf naredbu. Child proces ima vrijednost varijable childpid 0 i izvršava prvu
printf naredbu.
Zar bi moglo ići 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Primjer 5.
#include<unistd.h> /*definira fork() I pid_t*/
#include<sys/wait.h> /*definira wait() sistemski poziv*/
child_pid = fork();
*wait() sistemski poziv čeka dok child process ne završi, i sprema njegov izlazni status
u varijablu
*perror ispisuje poruku o grešci temeljenu na errno varijabli
Funkcija fork() kopira i dio memorije poznat kao «U Area» (User Area). Taj dio
memorije sadrži između ostalog, file descriptors tablicu procesa. To znači da nakon povratka
iz fork() poziva, child proces nasljeđuje sve file-ove koji su otvoreni u parent procesu.
Isto tako, file-ovi koji su otvoreni nakon fork() poziva, se ne dijele između parent i child
procesa. Ako jedan proces zatvori zajednički file, on je i dalje otvoren u drugom procesu.
561/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
562/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
MEHANIZMI
IPC-a
Za procese na Za procese na
istom host-u odvojenim host-
ovima
Za razmjenu
Mrežni mehanizmi
podataka Za sinkronizaciju
semaphores
Remote procedure
call (RPC)
signals
Transport lazer
interface (TLI)
pipes
sockets
message queues
shared memory
files
Slika 1.
563/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Pipe je komunikacijski kanal između dva procesa. Putem njega dva procesa mogu
izmjenjivati podatke i to half-duplex načinu rada. To znači da u jednom trenutku samo jedan
proces može slati, a drugi primati podatke.
shell komande mogu se međusobno povezati tako da izlaz jednog procesa bude direktan
ulaz u drugi proces. Upotreba sa naredbom shell izgleda ovako:
naredba1 | naredba2
Uzmimo, kao primjer, da želimo ispisati imena file-ova u direktoriju koristeći naredbu
ls | lpr.
Tada shell stvara proces ls i odvojeni proces lpr, povezujući ih sa dva pipe-a. Proces ls
piše podatke u pipe, a proces lpr čita podatke iz pipe-a.
Tok podataka ima samo jedan smjer, od ls prema lpr.
Slika 2.
*pipe-ovi koriste međuspremnike (buffer cashe) veličine jednog bloka (obično 512
bajtova)
564/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Pipe vraća dva file descript-ora, fildes[0] i fildes[1]. Podaci pisani u fildes[1] mogu se
čitati iz fildes[0] po sistemu First-In-First-Out. Za pisanje u pipe iz procesa koristi se poziv
write() u file descriptor fildes[1], a za čitanje iz cjevovoda koristi se poziv read() uz file
descriptor fildes[1]. Pipe zatvaramo pozivom close().
Ako je sve uspješno izvršeno, pipe vraća 0; ako nije pipe vraća -1 i postavlja errno.
Program može pristupiti pipe-u samo putem file descriptor-a. Zbog toga pipe može
koristiti samo onaj proces koji ga je stvorio i potomak koji je naslijedio descriptor-e putem
fork-a.
565/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Kada process pozove read() iz pipe-a, read() odmah vraća ako pipe nije prazan. Ako je
pipe prazan, read() čeka dok se nešto ne upiše u pipe toliko dugo koliko proces “drži” pipe
otvoren za pisanje.
Budući da slika govori više nego 1000 riječi…..
Ovako to izgleda kad su oba kraja pipe-a otvorena za oba procesa ( pipe(p) ):
Parent Child
p[1] p[1]
write( ) write( )
pipe
read( ) read( )
p[0] p[0]
Parent Child
p[1]
write( )
pipe
read( )
p[0]
566/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
pipe
KORAK 2. process A stvara dva child
A Procesa B i C. B i C nasljeđuju descriptor-e.
B C
KORAK 3.
A
Svaki proces zatvara onaj
Dio pipe-a koji mu ne treba.
B C
B C
write() read()
567/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Na redu je konkretan primjer gdje parent proces čita unos sa tastature i šalje ga child
procesu koji će ga ispisati na monitor.
Primjer 6.
#include<stdio.h>
#include<unistd.h>
568/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
/*glavna funkcija*/
int main(int argc, char* argv[])
{
int data_pipe[2]; /*niz za spremanje file descriptors-a*/
int pid; /*pid child procesa*/
int rc; /*za spremanje povratnih vrijednosti*/
569/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
pid = fork();
switch (pid)
{
case -1: /*fork nije uspio*/
perror(“fork”);
exit(1);
case 0: /*unutar child procesa*/
do_child(data_pipe);
default: /*unutar parent procesa*/
do parent(data_pipe);
}
return 0;
Dakle, child process je zatvorio write kraj pipe-a (jer treba samo čitati iz pipe-a), dok je
parent proces zatvorio read kraj pipe-a (jer treba pisati u pipe).
*errno – kernel javlja razlog greške tako da sprema broj greške u globalnu varijablu
errno (sys/errno.h); perror(string) – traži broj greške koja se dogodila te piše na standard error
poslani string i ispisuje opisnu poruku o grešci
Postoji još jedan način na koji možemo stvoriti pipe; putem tzv. formatted pipeing-a.
Sintaksa je sljedeća:
570/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Na taj način otvaramo pipe za I/O gdje je command proces koji će se povezati sa
pozivajućim procesom i na taj način stvoriti pipe.
Pipe koji smo stvorili na ovaj način bi uvijek trebali zatvoriti sa pclose(FILE
*stream). Za komunikaciju sa pipe-om koristimo fprintf() i fscanf().
*u C-u postoje dvije klase funkcija koje se bave datotečnom problematikom. Prvu klasu
čine sve one funkcije koju datoteku pamte preko tzv. File-pointera, odnosno varijable tipa
(FILE*). To su funkcije poput fclose,fread,fwrite…. U drugu klasu spadaju funkcije koje
datoteku pamte preko njezinog rukovatelja (handle). Svakoj se datoteci prilikom otvaranja
pridružuje njezin nenegativni i u tom procesu jedinstveni broj koji jednoznačno definira tu
datoteku. Prvih nekoliko rukovatelja zauzima se već prilikom pokretanja procesa. To su
redom:
0 – rukovatelj standardnog ulaza (FILE* ekvivalent – stdin),
1 – rukovatelj standardnog izlaza (FILE* ekvivalent – stdout)
2 – rukovatelj standardne greške (FILE* ekvivalent – stderr)
Poziv dup kopira postojeći file descriptor datoteke fd i vraća novi file descriptor ili -1 u
slučaju greške. Poziv ne uspijeva, na primjer ako fd nije otvoren ili je već otvoren
maksimalan broj file descriptor-a (obično 20). Novi file descriptor ima drugačiji broj od
originalnog. Pravilo je da se kod otvaranja bilo kojeg novog file descriptor-a uzima najmanji
571/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Koristeći to pravilo, kraj pipe-a iz kojeg se može čitati se povezuje na standardni ulaz
na sljedeći način:
zatvori se descriptor datoteke 0 i duplicira se descriptor kraja za čitanje pipe-
a
dup će vratiti descriptor datoteke 0.
ako se zatim pokrene proces koji čita standardni ulaz, on će čitati iz pipe-a
(prethodno treba zatvoriti polazni descriptor kraja za čitanje pipe-a ako više
nije potreban)
572/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Što se prvog načina tiče, ako želimo stvoriti imenovani cjevovod koji bi nazvali recimo
prvi_fifo, to bi učinili ovako:
mknod prvi_fifo p
Kao što se vidi, imenovani cjevovodi imaju ime (“prvi_fifo”) te su označeni kao
posebna vrsta datoteke (oznaka p – pipe).
Drugi način na koji možemo napraviti FIFO je uz pomoć mknod() sistemskim pozivom.
573/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
O_SYNC – write će čekati sve dok podaci ne budu stvarno zapisani na disk
#include<sys/stat.h>
574/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
Funkcija mkfifo() također stvara novu datoteku čiji put je path (path i ime datoteke),
dok mode argument specificira dozvole .
U slučaju uspjeha, mkfifo vraća 0, a u slučaju neuspjeha vraća -1 i postavlja errno.
*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 omogućava procesima da se sinkroniziraju prije nego
počne prenošenje 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)
575/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
{
pid_t childpid;
Što se događa u primjeru 7.? Prvo se stvara imenovani cjevovod iz path-a određenog
preko komandne linije. Zatim se fork-a child.
Child proces piše u imenovani cjevovod, a parent čita šta je napisano. U primjeru je
uključena provjera greške.
Dalji rad sa imenovanim cjevovodima je isti kao i sa običnim cjevovodima.
DODATAK A
576/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PIPE i FIFO
funkcija Opis
Pid_t getpid(void) Process ID
Pid_t getppid(void) Parent process ID
Pid_t getuid(void) Effective user ID
Pid_t geteuid(void) Real group ID
Pid_t getgid(void) Effective group ID
Pid_t getegid(void)
DODATAK B
file table
Parent proc.table entry v-node table
file status flags v-node information
fd flags ptr
f d 0: current file offset i-node information
f d 1: v-node ptr
f d 2: current file size
577/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Krasnodar Krajnik
fork
578/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sadržaj
UVOD
Svaki operacijski sustav osigurava točno određeni broj pristupnih točkaka (service
points) koje omogućavaju programu da zatraži neku uslugu od kernela (dohvaćanje datoteke s
diska, kreiranje procesa, alociranje memorije, sistemsko vrijeme i dr.). Skup tih pristupnih
točaka, odn. usluga koje je moguće zatražiti od kernela zovu se sistemski pozivi (system
calls).
U UNIX-u, sučelje (interface) tih pristupnih točaka odn. sistemskih poziva je
dokumentirano i definirano u C jeziku1. Dakle, u UNIX-u za svaki sistemski poziv postoji
ekvivalent - C bibliotečna funkcija istog imena. Pozivom takve funkcije u C programu poziva
se izvršavanje odgovarajućeg sistemskog poziva kernela. To se izvodi na način da C funkcija,
uz. ev. podešavanje i pripremu parametara, postavlja određene vrijednosti u registre, a zatim
izvršava instrukciju softverskog prekida (software interrupt) nakon čega kernel izvršava
zadani sistemski poziv. Na koji način kernel ostvaruje neku uslugu (sistemski poziv) ovisno je
o implementaciji OS-a i korisnik (bio to korisnik za terminalom ili C programer) na ponašanje
sistemskog poziva ne može utjecati.
S druge strane, većina C funkcija nije sinonim jednog sistemskog poziva već za svoje
izvršavanje koristi ili nijedan (npr. strcpy(),strlen()) ili više poziva (npr. system()).
S točke gledišta programera nema razlike između prvih funkcija koje su slike odn. ekvivalenti
sistemskih poziva i drugih koje koriste ili nijedan ili više poziva. Obje skupine služe za razvoj
aplikacijskih programa. Broj, ponašanje i funkcionalnost funkcija u svakoj takvoj biblioteci
moguće je mijenjati po potrebi, ali broj i ponašanje sistemskih poziva u UNIX-u unaprijed je
utvrđen implementacijom i ne može se mijenjati.
1
Kod Windowsa npr. to nije tako;. skup svojih sistemskih poziva Windowsi ne dokumentiraju i ne definiraju
kao skup C bibliotečnih funkcija. Umjesto toga, Windowsi koriste Windows API biblioteku koja predstavlja
dodatnu razinu, sučelje između aplikacije i operacijskog sustava. Korisnički program poziva API funkcije, a API
funkcije izvršavaju sistemske pozive. S jedne strane, dakle, nema načina da korisnički program direktno izvrši
sistemski poziv. S druge strane, moguće je mijenjati implementaciju OS-a odn. sistemskih poziva sve dok
izmjenjena implementacija ostaje kompatibilna s API.jem.
579/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sadržaj
580/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
PROCESI U UNIX-U
Proces čiji PID=0 je obično 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 sljedeći procesi koji su opet stvarali druge procese itd.
Sustav procesa u UNIX-u je,
dakle, stablaste strukture Kernel mode kernel Proces 0: Kernel bootstrap
581
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
Moguće je pokrenuti naredbu 'ps' s različitim opcijama čime utječemo na izbor procesa i
odabir informacija o procesu; selekcija po PID-u, terminalu, korisniku koji je vlasnik procesa,
vrijeme startanja procesa itd. (man starnice sadrže detalje o opcijama).
fork
U UNIX-u, kreiranje novog procesa izvodi se izvršavanjem sistemskog poziva fork. Svaki
UNIX proces kreiran je fork-om i to je jedini način za kreiranje procesa. Jedine iznimke od
toga odnose se na spomenute procese kreirane od strane sistema u toku izvođenja bootstrap
procedure.
Proces koji poziva fork naziva se parent (roditeljski) proces. Uspješnim izvođenjem
poziva fork, nastaje druga (gotovo) identična memorijska kopija programa koji je izvšio fork
poziv. Ta druga memorijska kopija parenta naziva se child (dijete). Nakon poziva fork obje
kopije, i parent i child, nastavljaju izvođenje kao samostalni procesi.
Ono osnovno što razlikuje parenta i childa, dakle ono po čemu možemo kontrolirati koji
dio koda identične memorijske kopije će izvršavati parent a koji dio će izvršavati child, jest
povratna vrijednost koju vraca fork.
582
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
Parent procesu fork kao povratnu vrijednost vraća PID childa. Child procesu fork kao
povratnu vrijednost vraća 0, U slucaju greške, fork kao povratnu vrijednost vraća -1.
Neuspjeli poziv fork-a može se dogoditi zbog sljedećeg:
- nedostatak memorije za kreiranje novog procesa
- u sistemu je pokrenuto previše procesa (ovo obično znači da nešto nije u redu sa sistemom)
- ukupan broj procesa koje je real user pokrenuo prekoračuje dozvoljeni limit (limit se može
podesiti)
(dodatno - vidi poglavlje vfork i copy-on-write)
583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
1 - fork() 2 -alocate
kernel
proces structure
4 - set pid=0
Stack Stack
3 - copy
Heap Heap
... ...
pid_t pid; pid_t pid;
Data Data
... ...
Text Text
5 - shared
... ...
pid = fork() pid = fork()
if (pid == 0) if (pid == 0)
{ 7 - run {
... ...
} }
else if (pid >0) else if (pid >0)
{ {
... ...
} }
parent child
Primjer1 ilustrira upotrebu forka kada parent i child izvršavaju dio koda unutar istog
programa.
584
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
Varijabla fork_return prilikom deklaracije nije inicijalizirana i do poziva fork poprima neku
slučajnu vrijednost. Ono što se zapravo događa pozivom fork možemo zamisliti kao sljedeće:
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 moguće je samo mapirati, a ne i kopirati. U svakom slučaju, stvara
se nova kopija adresnog prostora koji će postati adresni prostor child procesa. Time dobivamo
dva identična 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 vraćen PID child
procesa. Ta će se povratna vrijednost pridružiti fork_return varijabli parenta. Dakle, samo
parent proces zaista izvodi fork.
Nakon toga će i parent i child, sa različitim vrijednostima fork_return varijabli, nastaviti
izvršavanje kao odvojeni procesi na prvoj instrukciji koja slijedi fork. U našem primjeru to
znači: za parent - pridruživanje povratne vrijednosti, a za child - na if naredbi kojom se
ispituje sadržaj varijable fork_return2. Dakle, ako je fork uspio, parent proces izvršit ć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 vraća PID
procesa iz kojega je pozvan te pozivom pid_t getppid() koji, slično, vraća PID parent procesa.
585
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
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 našeg parenta.
Njegov PID je 12111.
Također, iz ispisa programa se može primjetiti da je prvo bio izvršen dio koda koji je izvodio
child proces, a zatim dio koji je izvršio parent. Da li je to uvijek tako i postoji li pravilo koje
određuje redoslijed?
Unix (točnije scheduler) upravlja parentom i childom kao sa samostalnim procesima. Nema
garancije koji od njih će prvi nastaviti izvršavanje niti koliko će se dugo izvršavati prije nego
što ga scheduler prekine i dodijeli procesorsko vrijeme nekom drugom procesu. Točnije, ne
možemo znati koliki će dio koda izvršiti jedan proces prije nego što drugi završi s
izvršavanjem. (možemo ev. specificirati prioritet procesa, ali ni to ne daje nikakve garancije)
U našem 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
omogućila da dohvati PID nekog svog child procesa. U tom smislu fork je jedini način za to.
U slučaju da parent kreira jednog ili više child procesa s kojima kasnije ima namjeru
manipulirati ili komunicirati trebao bi čuvati povratne vrijednosti forka.
586
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
U smislu identifikaije procesa PID je osnovno po čemu razlikujemo parenta od childa. Ako
parent i child gledamo kao samostalne procese onda se stvarna razlika svodi se na pitanje:
koje osobine child pruzima od parenta, a koje postaju njegove vlastite.
Child od parenta nasljeđuje sljedeća svojstva:
- identifikaciju stvarnog i efektivnog usera koji je pokrenuo proces (real/effective/saved
UIDs and GIDs)
- data, heap, stack segmente
- varijable okruženja
- područje dijeljene memorije (attached shared memory segments )
- otvoreni file deskriptori
- zastavica koja određuje ponašanje deskriptora prilikom izvršavanja exec poziva
(close-on-exec flags)
- prioritet izvršavanja procesa unutar sistema (nice value)
- broj trenutne sesije (session ID)
- trenutni radni direktorij (current working directory)
- root direktorij (root directory)
- maska koja se upotrebljabva pri kreiranju datoteka (file mode creation mask (umask))
- limite za resurse (resource limits)
- kontrolni terminal iz kojega je proces pokrenut (controlling terminal)
Jedinstveno za child što ga razlikuje od parenta je:
• process ID
• parent PID
• child ima vlastitu kopiju file deskriptora. Svaki file deskriptor childa dijeli zajednički
file-pointer s korespondiranim file deskriptorom parent procesa
• objekti međuprocesne sinkronizacije (process, text, data and other memory locks) nisu
nasljeđeni - ovo zapravo osigurava ispravnu međuprocesnu komunikaciju(
osigurava prevenciju od deadlock-a i sl..)
• struktura tms nije nasljeđena (ova struktura pridjeljena je svakom procesu i sadrži
podatke o potrošnji vremena procesora za proces i njegove child procese –
posebno potrošnja u user, a posebno u kernel prostoru)
• reinicijaliziraju se limiti resursa (ovo se odnosi na potrošnju CPU-a, max. veličine data
segmenta(ukljućujući heap), stacka, max. broj datoteka koje proces može otvoriti,
max. broj procesa koje proces dalje može kreirati itd.)
• child ne nasljeđuje skup definiranih/tekućih signala koje je definirao parent
• child ne nasljeđuje timere koje je definirao parent
• operacije asinkronog ulaza i izlaza se ne nasljeđuju
Ovo je okvirni popis. Postoje detalji koji se razlikuju ovisno o implemetaciji određene verzije
Unixa/Linuxa tako da prethodno treba ipak uzeti s rezervom.
587
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
Nakon poziva fork parent i child nastavljaju izvršavanje kao samostalni procesi. To je točno u
smislu da i jedan i drugi mogu izvršavati bilo kakav kod potpuno neovisno jedan o drugom i
naknadno redefinirati određena svojstva koja su nasljeđena pozivom fork. Međutim, sama
koncepcija nasljeđivanja određenih 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. Dapače, ako pogledamo svojstva koja child
nasljeđuje od parenta možemo vidjeti da su ona očekivana i intuitivno poželjna; ako se
program izvršava u svom radnom direktoriju poželjno je da to bude radni direktorij
novokreiranog childa; također je normalno da korisnik koji je 'vlasnik' programa bude
'vlasnik' i pokrenutog child processa itd. S druge strane, ono što child ne nasljeđuje zapravo je
prevencija od neželjenih situacija. Npr. nasljeđivanje objekta sinkronizacije kao što je mutex
proizvodilo bi prije zbrku nego što bi predstavljalo poželjno ponašanje. Zamislimo samo da
svaki child nasljedi zaključani mutex. Ili, ako parent proces definira proceduru za upravljanje
nekim signalom (signal handler), to tipično nije ono kako bi i child reagirao na određeni
signal. Na kraju krajeva, child i parent izvršavaju različite dijelove koda, rade različiti posao.
588
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
fork i execve
U primjeru1 forkom je kreiran child proces koji je izvršavao dio koda unutar istog programa
kao i parent. Drugi način upotrebe forka jest kreiranje childa i zatim pokretanje nekog drugog
programa unutar tog child procesa. Takvu mogućnost ostvarujemo kombinacijom forka i
sistemskog poziva execve.
Kada proces izvrši sistemski poziv execve adresni prostor procesa se 'reinicijalizira' odn.
prekriva adresnim prostorom programa koji će se unutar njega pokrenuti. Novi program
počinje izvršavanje od svoje main funkcije. Proces ID programa koji nastavlja s izvođenjem
ostaje isti budući da se ne kreira novi proces. Execve zamijenjuje resurse trenutnog procesa
(text, data, heap, stack segmente) sa novim programom učitanim sa diska. Novopokrenuti
program preuzima određena 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.
Zašto nam je takva mogućnost pokretanja programa unutar postojećeg procesa uopće
potrebna? Ilustrirajmo to na primjeru UNIX shella. Neprihvatljivo bi bilo ako bi sva
funkcionalnost shella bila ograničena na ono sto sam program shella, odn. njegov kod, može
učiniti. Ono što je snaga shella jest upravo njegova mogućnost da pokrene izvođenje nekog
drugog programa. Način na koji to zapravo radi jest forkanje novog procesa (novog shella) i
izvođenje drugog programa u njemu.
589
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
jedna linija koda koja ev. slijedi. Tako, u slučaju da poziv uspije, povratna vrijednost se nema
kome vratiti. Zato, povratna vrijednost bit će ona koju vrati pokrenuti program.
Funkciji exec_program prosljeđujemo ime programa koji želimo izvršiti, listu argumenata
kojima pokrećemo program (arg[0] je ovdje također ime programa) i listu varijabli okruženja.
U main programu prvo pokrećemo 'ls' program za koji smo prije definirali listu argumeata.
Taj program pokrenećemo u novom procesu. Ako pokretanje uspije program će se izvršiti, a
nakon toga proces će regularno završiti s izvršavanjem ('ls' je jedino što će se izvršiti unutar
tog procesa). Zatim u main funkciji pokrećemo 'date' program.
Ispis programa je ovakav:
total 132
drwxrwxr-x 4 user user 4096 Pro 3 12:33 .
drwxrwxr-x 3 user user 4096 Pro 3 01:55 ..
drwxrwxr-x 2 user user 4096 Pro 3 12:33 .deps
drwxrwxr-x 2 user user 4096 Pro 3 01:55 .libs
-rw-rw-r-- 1 user user 9719 Pro 3 01:55 Makefile
-rwxrwxr-x 1 user user 50660 Pro 3 12:33 primjer2
590
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
Iz ispisa se može primjetiti da se linija nakon pokretanja 'date' programa nije izvršila. 'date' je
nakon uspješnog poziva execve prepisao adresni prostor procesa programa primjer2.o.
Povratna vrijednost koju je terminal dobio je ona koju je vratio 'date'.
Postoji više funkcija (skupina exec) koje služe za pokretanje programa. U mnogim
implementacijama UNIX-a, samo je jedna iz te skupine exec funkcija, obično execve, ona koja
predstavlja ekvivalent odn. direktan poziv stvarnom sistemskom pozivu. Prostalih pet su
bibliotečne funkcije koje prije poziva execve obave još poneko podešavanje vezano uz
argumente, putanju do izvršne datoteke i sl.
S obzirom na način pozivanja i karakteristike razlikujemo:
• funkcije koje sadrže slovo 'p' u imenu (execvp i execlp) primaju ime programa i traže
program s tim imenom u trenutnom path-u; funkcijama koje ne sadrže slovo 'p'
potrebno je proslijediti puni path programa koji se želi pokrenuti
• funkcije koje sadrže slovo 'v' u imenu (execv, execvp i execve) za program koji se
pokreće prihvaćaju listu argumenata kao NULL-terminirani niz pokazivača na
string. Funkcije koje sadrže slovo 'l' (execl, execlp i execle) prihvaćaju listu
argumenata kao var-args mehanizam korišten u C jeziku
• funkcije koje sadrže slovo e u imenu (execve i execle) prihvaćaju dodatni argument, niz
varijabli okruženja u obliku NULL-terminiranog niza pokazivaća 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 izvršavanja exec poziva. U suprotnom
(podrazumijevano stanje), deskriptor ostaje otvoren.
591
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
funcija system
#include <stdlib.h>
int system(const char *command);
Upotreba standardne C bibliotečne funkcije system je jednostavan način za pokretanje
izvršavanja nekog programa. Međutim, system funkcija zapravo izvodi kreiranje procesa
(fork) u kojem se zatim pokreće Bourne shell (execve) i kojem se na izvršavanje predaje
argument 'command'.
Kao povratnu vrijednost funkcija vraća exit status shell komande. Ukoliko shell ne može biti
pokrenut vraća vrijednost 127, a u slučaju neke druge greške -1 (npr greška forka).
592
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
Spomenuli smo da kreiranje procesa pozivom fork znači kreiranje 'gotovo' identične kopije
adresnog prostora tog istog procesa. Kao produkt ove operacije dobili smo dva procesa od
kojih svaki izvršava različite dijelove istog programa ili još gore, u slučaju izvršavanja
kombinacije fork-execve - jedno bespotrebno kopiranje adresnog prostora.. Očito je da, sa
stanovišta performansi i zauzimanja sistemskih resursa, to nije optimalno riješenje (u velikoj
većini slučajeva). Srećom, dosljedno kopiranje adresnog prostora prilikom kreiranja procesa
dolazi kao jedino rješenje tek u starijim implementacijama UNIX-a.
Vfork
vfork sistemski poziv se prvotno pojavljuje u inačici 3.0 BSD-a. Predstavljen je prvenstveno
kao zamjena za fork u slučajevima kada je potrebno izvršiti 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 sljedećeg: 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 izvrši sistemski poziv
execve. Nakon toga parent proces nastavlja s izvođenjem.
Ovo znači da vforkani child proces ne smije neočekivano promijeniti vrijednosti varijabli
parent procesa. Štoviše, child proces ne smije izaći (return) iz funkcije koja sadrži vfork (u
kojem je child kreiran) i ne smije završiti pozivom exit. Ako child želi izaći, trebao bi pozvati
_exit. (Ovo se također odnosi i na obični fork. Kasnije ćemo objasniti zašto je to tako.)
Druga bitna razlika u odnosu na fork je u tome što vfork garantira da će child proces prvi
nastaviti izvođenje, sve dok ne pozove execve ili exit. Nakon što child pozove bilo koju od ove
dvije funkcije, daljnje izvođenje nastavlja parent.
U smislu ovoga što smo naveli vfork je trebao predstavljati optimiziranu verziju forka naročito
u sustavima koji nemaju implementiranu copy-on-write tehniku. Međutim, vfork je sa sobom
donio previše popratnih problema; od zahtjeva da ne smije mijenjati ništa u adresnom
593
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
copy-on-write tehnika
Također, ovo bitno smanjuje mogućnost neuspjelog poziva forka jer su u ovom slučaju
memorijski zahtjevi znatno manji.
594
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
Informacije o tome kako je proces završio dostupne su u slučaju exit i _exit funkcija kao exit
status, odn argumenat prosljeđen prilikom poziva funkcije. U slučaju abnormalne terminacije
kernel generira termination status kojim pokušava prikazati razlog abnormalnog prekida
izvršavanja.
Parent proces može dohvatiti informacije o načinu na koji je child prekinuo izvođenje
pomoću wait i waitpid sistemskih poziva
Zašto koristiti _exit radije nego exit kao naredbu za završetak izvođenja childa?
Osnovna razlika između exit i _exit je u tome što prva obavlja čišćenja vezana uz bibliotečne
funkcije u user-modu (I/O) i zatim poziva korisnički definirane funkcije čišćenja. Druga
obavlja čišćenja samo od strane kernela za dati proces.
U dijelu koda koji se odnosi na kreiranje, izvođenje i završetak child procesa stoga je u
normalnim okolnostima neispravno korištenje poziva exit. To na primjer, može dovesti do
dvostrukog ispražnjavanja spremnika standarnog ulaza (stdio buffer) i brisanje privremenih
datoteka. U C++ kodu ovakva situacija postaje još gora zato jer se destruktori statičkih
objekata mogu izvršiti na pogrešan način. (Postoje određeni slučajevi, npr. deamon procesi, u
kojima bi zapravo parent trebao biti taj koji će izvšiti sistemski poziv _exit umjesto childa,
595
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
Bazično pravilo u gomili uobičajnih slučajeva jest da je sistemski poziv exit potrebno izvršiti
samo jednom unutar funkcije main().
U slučaju upotrebe poziva vfork, upotreba exit-a još je opasnija zbog toga što može utjecati na
stanje parent procesa.
zombie procesi
Budući da je struktura procesa stablastog tipa i postoji parent-child odnos koji proizlazi iz
koncepta nasljeđivanja svojstava - redoslijed kojim parent i njegovi child procesi završavaju s
izvođenjem nije nebitan.
Kada proces završi s izvršavanjem kernel dostavlja njegov exit odn. termination status parent
procesu. Ukoliko parent izvrši forkanje childa i child završi s izvođenjem prije parenta, kernel
još uvijek čuva informacije o exit statusu childa - za slučaj da parent zatreba te informacije.
Ovakva mogućnost je poželjna, a često i nužna.
Da bi parent mogao dobiti takvu informaciju, potrebno je da izvrši wait sistemski poziv nakon
što je izvršio fork. Ovaj poziv uzrokuje da parent zaustavi izvođenje sve dok njegov child na
završi. Nakon što child završi i izvrši se obrada wait poziva odn. dohvaćanje exit statusa,
kernel može odbaciti informacije vezane uz childa. Odstupanje od ovakvog redoslijeda
uzrokuje nastanak nepoželjnih zombie i orphan procesa.
Ako child završi s izvođenjem prije nego što se uopće poćinje čekati na njega, on postaje
zombie. Ako se nikada nije niti čekalo na završetak njegovog izvođenja, također postaje
zombie.
Premda se takav child proces više ne izvršava, i dalje zauzima mjesto (entry) u tablici procesa
(ili u novijim implementacijama samo inf. o exit statusu).. Ovo nije dobro zato jer tablica
procesa sadrži fiksan broj redaka (entryja) i moguće je da postane prepunjena. Također,
postoji limit broja procesa koje jedan korisnik može pokrenuti. Ovo je jedan od razloga zašto
je dobro uvijek provjeriti da li je sam fork uspješno izvršen.
Ako parent završi s izvođenjem prije nego što završi child, child proces biva posvojen od
strane nekog drugog procesa, obično init procesa. Takav child naziva se orphan. Za njega će
init pozvati wait odn. obaviti poslove čišćenja koje je trebao obaviti parent. (Kada init to ne bi
učinio ponovno bi se pojavila mogućnost da child završi kao zombie i do daljnjega 'visi' u
sustavu.)
596
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
Kako izbjeći nastanak zombie-a? Potrebno je osigurati da parent proces izvrši poziv wait (ili
waitpid, wait3 ili sl.) za svaki child proces koji kreira. Također, na nekim sistemima moguće je
specificirati da parent nije zainteresiran za exit status childa.
Druga mogućnost je da parent izvrši dvostruko forkanje childa s time jedan child proces
završava s izvođenjem odmah po pokretanju. Ovo će uzrokovati da proces 'unuk' bude
proglašen kao 'siroće', dijete bez roditelja, što će uzrokovati da init proces obavi sva potrebna
čišćenja.
fork_return = fork();
if (fork_return < 0){ // if fork fail
printf("Can't fork\n"); _exit(-1);
}
else if (fork_return == 0){
printf("child is running \n"); // child code (return quickly)
}
else{ // parent code
printf("parent is running\n");
sleep(1); // give child time to finish
system("ps N -r -H"); // see if we have a zombie
wait(&exit_state);
system("ps N -r -H"); // see if we have zombie now!
}
}
U ovom primjer parent se nakon kreiranja childa-a prije poziva wait "uspavljuje" na 1
sekundu. Ovo je dovoljno vrijeme da child završi 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 izvršenog poziva wait, child više 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
wait i waitpid
wait sistemski poziv blokira trenutni proces (onaj iz kojega je pozvan) sve dok:
- se ne završi neki child proces
- dok trenutni proces ne dobije signal za vlastito terminiranje
- trenutni proces ne dobije signal za izvršavanje procedure nekog svog signal-handlera
Ako je child proces već završio (već se nalazi u stanju zombie) poziv odmah završava i svi
sistemski resursi koje je child zauzimao se oslobađaju.
waitpid može čekati na završetak točno specificiranog childa i dodatno posjeduje opcije
kojima je moguće definirati različite načine na koji će se izvršiti.
pid argument može imati jednu od sljedećih vrijednosti:
pid == -1 - čeka na bilo koji child proces ( waitpid (-1, &status, 0) = ekvivalent običnom
wait pozivu)
pid > 0 - čeka na child čiji PID = pid
pid == 0 - čeka na bilo koji child čiji process group ID je jednak onom u kojem se izvodi
sam proces
598
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
pid <= -1 - čeka na bilo koji child čiji process group ID je jednak apsolutnoj vrijednosti
od pid
Važna razlika u odnosu na wait odnosi se na argument options; za vrijednost WNOHANG
waitpid ne blokira proces nego dozvoljava trenutnom procesu nastavak izvođenja čak i ako
nije završio child koji se u waitpid specificirao. Ako je argument options=0, waitpid blokira
proces.
Uz wait i waitpid u pojedinim implementacijama postoje i proširenja. Npr. BSD 4.3 donosi
dva nova poziva, wait3 i wait4. Prednost ovih dvaju poziva je što omogućavaju prenošrnje
dodatnih informacija o korištenim resursima terminiranog procesa i svih njegovih child-ova.3
3
U Linux-u (Mandrake10) ove i dodatne opcije je dostupne su pozivom waitpid (man stranice sadrže detaljnije
upute)
599
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
U parent dijelu koda pozivamo waitpid s opcijom WNOHANG iako je očito da se child
procesi izvršavaju. To znači da će parent nastaviti izvođenje, a child procesi koji završe prije
sljedećeg wait/waitpid poziva postat će zombi procesi.
Drugi poziv waitpid na kraju programa pobrinuo se za čišćenje. Ovdje je kao treći argument
waitpid pozivu prosljeđena 0 što znači 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 našem
slučaju se to ne događa jer su svi child procesi već završili.
Ispis primjera4:
I'm child No.0 and I'm going to sleep
waitpid for child 0 after fork
600
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
Proces može biti privremeno zaustavljen signalom SIGSTOP. Da bi nastavio izvođenje mora
primiti signal SIGCONT.
Proces može završiti kao odgovor na signal. Npr. SIGINIT signal šalje se procesu nakon što
korisnik utipka Ctrl+C u terminalu. SIGTERM signal šalje se naredbom kill. Sistemskim
pozivom abort, proces sam sebi šalje SIGABRT signal. Najmoćniji signal za prekid
izvršavanaja je SIGKILL koji uzrokuje trenutno prekidanje izvođenja i ne može se blokirati
ili handlati na drugi način.
Kada proces prekine s izvođenjem, na normalan ili abnormalan način, kernel šalje njegovom
parent procesu SIGCHLD signal. Parent može ignorirati ovaj signal (podrazumijevano) ili
odgovoriti na njega izvršavanjem određenog signal handlera. Handler je moguće definirati na
sljedeći način:
601
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
for(i=0;i<3;i++){
fork_return[i] = fork();
switch(fork_return[i]){
case (-1):
printf("Can't fork\n"); _exit(-1);
case (0): // child code
printf("I'm child No.%d and I'm going to sleep \n",i);
sleep(1);
printf("I'm child No.%d and I'm going to die \n",i);
abort();
default: // parent code
602
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
SIGCHLD je signal za kojeg smo redefinirali akciju. Sigaction strukturom definira se handler
koji će se izvršiti kao odgovor na signal. Ovdje smo prosljeđivanjem SIG_IGN poručili
kernelu da nas ne zanima kada i kako su child procesi završili (samim time niti njihov exit
status). Tako, nakon što child završi s izvođenjem kernel će odbaciti sve informacije vezane
uz child procese koji zato neće postajati zombie procesi. Ovime smo omogućili neovisno
izvođenje 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
603
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
Child vraća status code vrijednost preko pokazivača na integer. Preko tog pokazivača moguće
je dohvatiti informacije o načinu na koji je proces završio s izvođenjem.
Pomoću WIFEXITED makroa može se ustanoviti da li je child završio normalno (izlaskom iz
main funkcije ili upotrebom funkcija exit odn. _exit). WEXITSTATUS makro dohvaća exit
code child procesa.
Pomoću WIFSIGNALED makroa može se ustanoviti da li je child terminiran signalom.
WTERMSIG vraća oznaku signala.
Primjer6 pokazuje kako rukovati proizvoljnim brojem child procesa koji se proizvoljno dugo
izvršavaju. Primjer je napravljen tako da child procesi s neparnim PID-om završavaju
izvođenje pozivom funkcije exit i kao povratnu vrijednost vraćaju broj sekundi koliko su se
bili prisutni u sistemu (spavali). Parni child procesi se terminiraju signalom.
U postavljenom signal-handleru ispituje se način na koji je child završio izvođenje.
#define CHILDS 5
int childs=0; // number of active childs
604
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
int i, sleep_sec;
struct sigaction act;
srand((unsigned int)time(0));
memset(&act,0,sizeof(sigaction));
act.sa_handler=sigchld_handler; // set function to be a handler
i=sigaction (SIGCHLD, &act, 0); // set handler to handle SIGCHLD signal
for(i=0;i<CHILDS;i++){
sleep_sec=rand()%10; // child will sleep random sec
childs++;
switch (pid = fork()){
case (-1):
printf("Can't fork\n"); _exit(-1);
case (0): // child code
printf("I'm child No.%d, my PID is %d, im going to sleep for %d sec
\n",i,getpid(),sleep_sec);
sleep(sleep_sec);
if (getpid() & 1)
_exit(sleep_sec); // if odd use exit to finish
else
kill(getpid(),SIGKILL); // if even terminate with signal
default: // parent code
break;
}
}
printf("\n\nI'm the parent. Just create all childs \n");
system("ps N -r -H"); // see what is running
while (childs) pause();
printf("\n\nI'm the parent. My childs all finished \n");
system("ps N -r -H");
}
pause funkcija 'uspavljuje' proces sve dok ili ne primi signal koji ga terminira ili ne primi
signal koji uzrokuje pokretanje nekog signal-handlera. Ova funkcija pozivat će se sve dok
broj pokrenutih child procesa ne bude 0 tj. dok signal-handler ne obradi završetak izvođenja
svih child procesa.
Evo i ispisa koji ovaj primjer daje. Naravno, budući da se u primjeru koriste random
vrijednosti ispis će za svako pokretanje programa biti različit.
605
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
Zbog kopiranja adresnog prostora koje se događa prilikom izvršavanja forka važno je da se
linija
sleep_sec=rand()%10;
nalazi u dijelu koda kojeg izvršava parent. Ako ovu liniju stavimo u dio koda koji izvodi child
proces svi child procesi 'spavat' će jednako dugo.
Komunikacija među procesima je posebna tema. Zato ovdje slijede tek dva vrlo jednostavna
primjera koja se odnose na specifičnost odnosa parent-child.
Komunikacija između parenta i child moguća je kroz bilo koji standardni oblik međuprocesne
komunikacije: pipe, sockets, poruke (message queues), dijeljena memorija (shared memory).
Uz to, child proces može sa parentom (kao sto smo vidjeli u prethodnim primjerima)
komunicirati preko argumenta funkcije exit.
Međutim, upravo karakteristika forka da se svi deskriptori otvoreni od strane parenta kopiraju
u child daje velike mogućnosti za komunikaciju pomoću pipe-a.
pipe je mehanizam jednosmjerne komunikacije prema kojem jedan proces piše na jedan kraj,
a drugi čita s drugog kraja pipe-a. Zasniva se na sekvencijalnom pisanju na jednom i
sekvencijalnom čitanju na drugom kraju po principu FIFO ( first-in first-out). Mehanizam
pipe-a ne dozvoljava proizvoljno pozicioniranje unutar pipe-a.
606
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
607
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
Ispis je:
The date is Tue Dec 7 14:58:19 CET 2004
Press Enter to continue!
U primjeru8 između parenta i childa postoji dvosmjerna komunikacija. Parent i child koriste
streamove koji se kreiraju na osnovu deskriptora. Parent prima string s konzole, prosljeđuje
ga childu na obradu. a child nakon obrade vraća rezultat.
U <stdio.h> deklarirana je funkcija
FILE* fdopen (int flides, const char *mode)
koja povezuje stream s postojećim 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
close(pipe_x[0]);
close(pipe_y[1]);
fgets(str,1024,stdin);
write_to_pipe(pipe_x[1],str);
printf("parent write to pipe - %s",str);
read_from_pipe(pipe_y[0],str);
printf("parent read from pipe - %s\n",str);
wait(&status);
-->pipe }
}
609
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Procesi i upravljanje procesima
VEDRAN DEDUŠ
VANJA HARAMBAŠA
PROCESI I UPRAVLJANJE
PROCESIMA
610
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Procesi u UNIXU
Sva moderna računala, i moderni OS-ovi mogu raditi više stvari odjednom. Dok
izvršava neki korisnikov program, računalo u isto vrijeme može čitati i pisati po disku,
zaslonu ili printeru. Također može izršavati tren jedan, tren drugi program, puštajući svakog
od njih da radi nekoliko desetinki, ili stotinki sekundi. Preciznije rečeno u bilo kojem trenutku
procesor vrti samo jedan program, ali vrlo brzo prebacuje izvršavanje programa sa procesora i
vraća ga u stanje čekanja. Ponekad opisujući gornju stvar govorimo o pseudo-paralelizmu
kako bi naglasili pravi hardverski paralelizam na višeprocesorksim sustavima.
SLIKA 1.1
Razlika između procesa i programa je jedva zamjetna, ali jako bitna. Da bi lakše
razumjeli razliku, napravimo jednu analogiju. Zamislimo kuhara koji peče rođendarsku tortu
svojoj kćeri. On ima recept i kuhinju opremljenu sa svim sastojcima: brašnom, jajima i sl.
U računalnom svijetu takav kuhar bio bi procesor, a recept bio program, dok bi
sastojci bili ulazni podaci. Zamislimo sad da kuharova kćer utrči u kuhinju plačući jer ju je
ubola pčela. Kuhar tada zapamti gdje je stao u svom receptu, i pruži pomoć svojoj kćeri.
611/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Gledano u računalnom svijetu vidimo da je procesor bio prebačen sa jednog procesa na proces
višeg prioriteta, od kojih svaki ima različiti program. Nakon pružene pomoći kuhar će
nastaviti točno od mjeswta gdje je stao.
Ključna ideja je da je proces aktivnost neke vrste. On ima program, ulaz, izlaz i stanje.
Pojedini procesor može dijeliti nekoliko procesa, zajedno sa nekim algoritmom
raspoređivanja rada tih procesa na tom procesoru.
Proces (eng. Process), nekad nazivan i zadatak (eng. Task), je instanca programa koji
se
izvršava. Sukladno tome, da bi se stvorio proces potrebno je pokrenuti program.
Pokretanje aplikacije s medija za pohranu podataka stvara proces. Na jednoprocesorskom
računalnom sustavu sama središnja procesorska jedinica (eng. Central Processing Unit, CPU)
se dijeli među procesima tako što procesi dobivaju vrijeme za izvršavanje na procesorskoj
jedinici.
Kao i sve ostalo, proces je unutar operativnog sustava – OS, predstavljen kao
podatkovna struktura. Podatkovna struktura procesa sadrži skup vrijednosti za sve
promijenljive registre središnje procesorske jedinice, predstavljajuci tako trenutno stanje
izvršenja pripadajućeg procesa. Preciznije rečeno, sastoji se od tri dijela: segmenta instrukcija,
segmenta korisničkih podataka i segmenta sustavnih podataka. Ponekad se naziva i „okolina
izvršavanja“. Nabrojat ćemo i opisati svojstva jednog procesa.
Svojstva procesa
• Proces izvršava pripadajuci programski kod koji može doci iz različitih izvora
tj. Različitih datoteka.
• Pri izvržavanju proces dobiva ograničena prava s kojima raspolaže i u okviru kojih se
i izvršava. Sam operativni sustav može pokrenuti proces s apsolutnim pravima gdje on
dobiva potpunu slobodu pri izvršavanju.
612/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
• Dio operativnog sustava, zvan raspoređivac (eng. Scheduler), dijeli vrijeme središnje
procesorske jedinice svakom procesu koliko mu pripada.
• Proces zahtjeva memoriju za svoju podatkovnu strukturu. Svakom procesu se
prilikom izvršavanja dodijeli slobodna memorija. U praksi, taj memorijski prostor ne
mora biti ulančano nanizan.
• Proces ima mogućnost pristupa datotečnom sustavu, a takve aktivnosti se moraju
pomno pratiti kako bi bio zadovoljen nivo sigurnosti te da se otvorene datoteke
pravilno zatvore kada proces završi.
• Kod svakog procesa nužna je identifikacija prema konvenciji operativnog sustava
Prednosti procesa su njegova zaštićena podatkovna stuktura (od pristupa drugog procesa).
Proces je moguće stvoriti (pokretanjem programa iz ljuske operativnog sustava ili iz
aplikacije), on može završiti, te su moguća „prebacivanja“ s procesa na proces u toku
izvršavanja. Kao što je rečeno, o njihovom „prebacivanju“ se brine dio operativnog ustava –
raspoređivač. Postoji nekoliko tehnika raspoređivanja procesa koje on može koristiti, a ovisi o
operativnom sustavu.
Kada proces dobiva teoretski neprekidno procesorsko vrijeme u trenutku kada dođe na
red zaizvršavanje, operativni sustav koristi tehniku raspoređivanja „Prvi dolazeci – prvi
poslužen“ ili FCFS (eng. First Come-First Served). Tehniku je jednostavno implementirati, ali
zato je siromašna mogućnostima. Bolja tehnika je gdje se svaki proces razlomi u vremenske
isječke (eng. Quantum) za izvršavanje koji međusobno razmjenjuju procesorsko vrijeme
prilikom kojeg se izvršavaju. Ona se naziva metoda „vremenskih isječaka“ (eng. Time
slicing) iliti RR (eng. Round Robin) i omogućava optimiziranije raspoređivanje procesa,
pogotovo onih koji kraće traju, naspram FCFS tehnike.
Drugačije optimizirane i kompleksnije tehnike su „slijedi najkraći proces“ ili SPN
(eng. Shortest Process Next), „zamjenski SPN“ iliti PSPN (eng. Preemtive Shortest Process
Next), HPRN (eng. Highest Penalty Ration Next), „višerazinski FB“ (eng. FeedBack),
„sebični RR“ iliti SRR (eng. Selfish Round Robin) i druge. U praksi, moguće je u operativni
sustav implementirati mješavinu navedenih tehnika.
613/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
njih koliko ima procesorskih jedinica (dvije, četiri ili više). U praksi, svaka središnja
procesorska jedinica jednog višeprocesorskog sustava pojedinačno također koristi ranije
navedene metode.
int fork(void) ;
614/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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 dođe do
greške, vraćena vrijednost je -1 i ne dolazi do stvaranja procesa „dijete“. Poziv fork nema
nikakvih argumenata i programer ne može biti odgovoran za grešku. Ona može biti rezultat
nemogućnosti jezgre operativnog sustava da stvori novi proces („dijete“) zbog nedostatka
nekog od potrebnih sredstava.
Kao što je rečeno, proces „dijete“ nasljeđuje većinu svojstava iz segmenta sustavskih
podataka kao što su trenutni direktorij, prioritet ili identifikacijski broj korisnika. Manje je
atributa koji se ne nasljeđuju:
615/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
„Roditelj“ procesa koji završava pozivom exit prima njegov status preko sustavskog
poziva wait:
Poziv wait čeka da neki od procesa „djece“ završi (ili bude zaustavljen za vrijeme
čekanja), s tim da mu se ne govori koji proces da čeka. Funkcija vraća identifikacijski broj
procesa „djeteta“ koji je završio i sprema njegov 16-bitni status u cijeli broj na koji pokazuje
statusp, osim kada je taj argument NULL. U tom slučaju se status završenog procesa gubi. U
slučaju pogreške (kada nema „djece“ ili je čekanje prekinuto primitkom nekog prekidnog
signala) rezultat je 1.
Proces može završiti na tri načina i to: pozivom exit, primitkom signala ili padom
cijelokupnog sustava (gašenje računala, nestanak struje i drugo). Logično, samo kod prva dva
načina možemo saznati način završetka 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 izvršavanja procesa „roditelja“ – čekanje na zavšetak „djeteta“
wait(NULL);
N = 5;
for (i = 0; i < N; i++)
{
616/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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);
617/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
PRIORITETI
Priotiteti procesa kreću se u rasponu od -20 do 20. -20 predstavlja najviši prioritet
izvođenja procesa, a 20 najniži. Korisnik može procesima kojih je on vlasnik prilikom
njihovog pokretanja smanjiti prioritet naredbom nice. Sintaksa naredbe nice je slijedeća:
gdje je broj relativni prioritet koji se želi postići, dok naredba predstavlja proces koji ćemo
pokrenuti. Tako npr. Možemo u pozadini (operator &) pokrenuti naredbu sleep koja će
završiti nakon 50 sekundi.
Gornjom smo naredbom procesu sleep smanjili relativni prioritet na 15. Naredbom
ps –l moguće 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.
Vidimo da je ovu naredbu moguæe izvršiti jedino ako smo logirani kao root. Uočite
da je ovdje riječ o negativnom nice broju (-10), dakle povećavamo relativni prioritet procesa.
Ukoliko želimo već aktivnom procesu promijeniti prioritet, koristimo naredbu renice:
$ renice 7 432
618/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
gdje je 432 PID (process ID), a 7 konačni prioritet dotičnog procesa. PID je broj koji je
ispisan na ekranu nakon pokretanja procesa. Naravno, može ga se doznati i korištenjem
naredbe ps l.
STANJA PROCESA
SLIKA 1.2
619/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
KREIRANJE PROCESA
1. Inicijalizacija sustava
2. Poziv sistemskog poziva za kreiranje procesa od strane nekog drugog aktivnog
procesa.
3. Korisnički zahtjev za kreiranje procesa.
4. Pokretanje neke skripte.
Kada se pokreće operacijski sustav, obično 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 može biti kreiran od nekog drugog procesa u bilo koje vrijeme. Npr. ako
treba dohvatiti veliki broj podataka preko mreže kako bi se sekvencijalno s njima nešto
računalo, uobičajeno je da se kreira novi proces koji bi dohvaćao te podatke preko mreže i
spremao ih u nekakvu zajedničku memoriju, dok bi prvi proces uzimao te podatke i računao s
njima. Posebno će doći do ubrzanja kod višeprocesorskih sustava kad bi se svaki od tih
procesa odvijao na različitim procesorima.
U nekom interaktivnom sustavu korisnik može startati program tipkajući naredbu ili
klikom na ikonu. I jednim i drugim načinom starta se novi proces u kojem se izvršava
odabrani program.
Zadnji slučaj kad se proces kreira je npr. pokretanje neke skripte. Korisnik može poslati
sustavu nekakav zathjev ili skriptu (može i preko 'udaljenih poziva'), nakon čega će
operacijski sustav, kad odluči da ima dovoljno resursa za pokretanje idućeg posla, kreirati
novi proces i unutar njega pokrenuti posao iz reda zahtjeva.
620/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Tehnički gledano, u svim ovim slučajevima, neki postojeći 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 okruženju (enviroment strings) i iste otvorene fileove.
Obično proces dijete sa sistemskim pozivom execve ili nekim sličnim poziva neki novi
program. Npr. kada korisnik u komandnoj ljusci utipka npr. sort, ljuska sa forkom klonira
proces i u procesu dijetetu izvrši sort. Razlog ovog postupka u 2 koraka je da bi se djetetu
omogućila manipulacija sa file deskriptorima nakon fork-a, a prije izvršavanja nekog drugog
programa, kako bi se mogle izvršiti 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 nešto 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 različiti od početka.
ponavljaj{
ispiši_ prompt;
učitaj_naredbu(N, P);
kreiraj_novi_proces();
621/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Primjer 2: specifičnost fork naredbe pod Unixom; primjer da procesi imaju različite adresne
prostore.
ZAVRŠETAK PROCESA
Stanje između child-ovog završetka i prije nego sto to parent primi na znanje se
naziva “zombie”.Ako postoji pogreška u kodiranju parent procesa,child ostaje u “zombie”
stanju zauvijek.
622/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
-Pipes
-Signali
-Message queues
-Semafori
-Dijeljena memorija
-Sockets
PIPE
Pipe (anonymous pipe ili unnamed FIFO) je jedan od načina preko kojeg procesi
mogu međusobno komunicirat.Pipe je jednosmjerni mehanizam koji omogućuje razmjenu
niza bajtova između dva povezana procesa.Pipe može biti korišten za prenošenje podataka ili
za sinkronizaciju između oba procesa.Moguća je i komunikacija u dva smjera,te su u tom
slučaju potrebna dva pipe-a.Poredak u kojem su bajtovi zapisani na pipe je identičan 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 međusobno komunicirati preko tog pipe-a.
Pipe() je sistemski poziv kojim se stvara read-write pipe koji služi za ostvarivanje
komunikacije među procesima.Poziv uzima za argument polje od dva integera koji će biti
623/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
korišteni za čuvanje dva file descriptora.Prvi integer koristimo za čitanje s pipe-a,a drugi za
pisanje na pipe.
int pipes[2]; /* first, define an array to store the two file descriptors */
int rc = pipe(pipes); /* now, create the pipe */
if (rc = = -1) { /* pipe() failed */
perror("pipe");
exit(1);
}
624/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Deadlock- stanje u kojem grupa od dva ili više procesa čeka da se oslobode resursi
koji su trenutno zauzeti od jednog ili više procesa unutar iste grupe,ili čekaju na neki događaj
za koji postoji pretpostavka da bi trebao biti poslan od nekog drugog procesa unutar grupe.
• Oba pipe-a su prazna i oba procesa pokušavaju čitati svoj ulazni pipe.Iz razloga što su oba
pipe-a prazna,oba procesa su blokirana kod čitanja,te zauvijek ostaju u tom stanju.
Npr.
625/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Kreirani named pipe,kao i svaka druga datoteka unutar datotečkog sustava posjeduje
access permission koji definira korisnike koji mogu otvoriti named pipe,za čitanje ili
pisanje,ili oboje.
Izvršavanjem naredbe ls -l ,FIFO prepoznajemo po oznaci “p” na prvom mjestu.
Npr.
Otvaranje named pipe-a se izvršava isto kao i otvaranje bilo koje druge datoteke
unutar datotečnog sustava,koristeći sistemski poziv open() ili koristeći standardnu C funkciju
fopen().Ako je poziv uspješan,vraćen je file descriptor(u slučaju open() )ili “FILE” pointer (u
slučaju fopen() ).Njih se može koristit ili za čitanje ili za pisanje,ovisno o parametrima
proslijeđenima sistemskom pozivu open() ili funkciji fopen().
Čitanje i pisanje s named pipe-a je slično kao i čitanje i pisanje u datoteku.Postoje dvije
glavne razlike:
- Named pipe ne može biti istovremeno otvoren i za čitanje i za pisanje.Proces koji otvara
named pipe mora izabrati jedan od ta dva načina(ili čitanje ili pisanje) i pridržavat 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 obične datoteke.Kad proces
pokušava zapisivati na named pipe koji nema procesa koji ga čita,zapisivanje nije
moguće,tj. Proces koji pokušava zapisivati se blokira sve dok drugi proces ponovo ne
otvori named pipe.
SOCKETS
626/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
SYSTEM V IPC
627/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
struct ipc_perm
{
key_t key; /* key identifying the resource */
ushort uid; /* owner effective user ID and effective group ID */
ushort gid;
ushort cuid; /* creator effective user ID and effective group ID */
ushort cgid;
ushort mode; /* access modes */
ushort seq; /* sequence number */
};
628/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
SYNOPSIS
SYNOPSIS
ipcrm [-q msqid] [-m shmid] [-s semid] [-Q msgkey] [-M shmkey] [-S
semkey] ...
MESSAGE QUEUES
Message queue je niz u koji poruka može biti smještena. Poruka je sastavljena od
tipa poruke(identifikacijski broj) i podataka.Message queue može biti private ili public.Ako je
private,može mu pristupiti samo proces koji ga je stvorio ili child od toga procesa.Ako je
public,može mu pristupit bilo koji proces kojem je poznat queue key.Nekoliko različitih
procesa može zapisivat poruke u message queue ili čitat poruke iz niza.Poruke mogu biti
iščitavane po identifikacijskom broju,pa prema tome ne moraju biti čitane u FIFO poretku,kao
što je slučaj sa pipe-om.
629/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
• int msgflg – flag-ovi koji određuju kako poslat message.Može biti logički ili IPC NOWAIT
630/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
• int msgtyp -tip poruke koju želimo čitati-može biti jedna od slijedećih:
-0
-pozitivni integer
-negativni integer
-IPC NOWAIT
-MSG EXCEPT
-MSG NOERROR
631/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
SEMFORI (Semaphores)
Unutar Unix sustava semafor izvršava dvije operacije pod nazivom wait i signal.
Na primjer uzmimo da imamo semafor čiji je brojač postavljen na 1.Samo jedan proces može
izvršiti operaciju wait-nazovimo ga proces A.Proces A izvršavajući operaciju wait smanjuje
vrijednost brojača za jedan te ulazi u dijeljeni resurs.Kad proces A uđe u dijeljeni resurs
vrijednosr brojača je jednaka 0.Proces A izvršava instrukcije nad dijeljenim resursom.Svaki
drugi proces koji za to vrijeme pokuša pristupit resursu,stavlja se u red čekanja.Proces A
napušta resurs i izvršava operaciju signal.Ako postoji proces u redu čekanja,brojač ostaje
jedak 0.Slijedeći proces iz reda čekanja ulazi u dijeljeni resurs i započinje s izvršavanjem.Svi
ostali procesi ostaju u redu čekanja.Ukoliko ne postoje procesi koji čekaju na pristup
dijeljenom resursu,brojač se povećava za 1 i time se omogućuje slijedećem procesu(u nekom
budućem trenutku kad će neki proces pristupat resursu) da uđe u taj resurs.
632/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Kreiranje semafora
SIGNALI
Većina signala može biti ignorirana ili blokirana.Jedna od iznimki je KILL signal
koji ne može biti ignoriran.
633/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
PS
634/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
C- Iskorištenje procesora.
635/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
636/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
KILL
kill-uništava proces
SYNOPSIS
kill [ -s signal | -p ] [ -a ] pid ...
kill -l [ signal ]
Npr.
637/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Krunoslav Zeman
Signali
638/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
UVOD
Signali su softverski prekidi koji se dostavljaju procesima. Svi procesi koji se izvršavaju
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 može biti
proizveden od same jezgre, proces ga može poslati sam sebi ili drugom procesu, ili ga može
poslati korisnik. Signali su klasični primjer nesinkronih događaja, jer se mogu pojaviti u bilo
koje vrijeme u procesu.
639/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
PROCESI
Proces je program koji je trenutno u izvršavanju. Svaki proces zauzima određene sistemske
resurse, kao što si memorija i procesorsko vrijeme. Kernel pruža korisnicima iluziju
konkurentnog izvršavanja više procesa u isto vrijeme raspoređivanjem tih resursa među
procesima koji su spremni za izvršavanje.
Proces se izvršava ili u korisničkom ili u kernel modu. U korisničkom modu instrukcije se
izvršavaju u neprivilegiranom modu hardvera. Kada proces zatraži od kernela da izvrši neki
sistemski poziv, instrukcije se vrše u privilegiranom, ali kernelom ograničenom i
kontroliranom modu. Ovako su aplikacije odvojene od hardvera.
Kernel razlikuje procese prema njihovom proces identifier (PID) broju. Korisnici mogu
kreirati procese, kontrolirati izvršavanje procesa i primiti obavjest kada se status izvršavanja
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 izvršavanjem instrukcije koja slijedi poslije pozivanja fork-a, s tim što
postoji jedna razlika, djetetu fork vraća vrijednost nula, a roditelju vraća vrijednost PID-a
djeteta.(koji je različit od nule).
Obično nakon pozivanja fork-a jedan od ova dva procesa poziva sistemski poziv execve,
kojim se vrši prepisivanje postojeće memorijske slike procesa novom, koja sw čita iz
binarnog faila, poslje čega počinje izvršavanje novog programa.
Proces može završiti svoje izvođenje pozivanjem sistemskog poziva exit. Ako je njegov
roditelj pozvao sistemski poziv wait, PID djeteta se signalom šalje roditelju tako da on
možeznati koje je djete završilo s izvršavanjem. Ako se proces dijete sruši sistem simulira exit
sistemski poziv i obavještava roditelja. Prilikom izlaženja, proces dijete postaje zombi proces,
koji se ne izvršava, ali postoji u memoriji, kako bi roditelj mogao, koristeći wait4 sistemski
poziv, da dobije više informacija o djetetovom izvršavanju.
640/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Multiprogramiranje
-predstavlja iluziju paralelnog izvršavanja više procesa ili programa. Kernel to omogućava
pomoću smjenjivanja kontksta procesa (context switching) . Kontekst procesa obuhvaća sve
informacije koje kernel koristi za izvršavanje procesa (PID,prioritet,stanje
izvršavanja,data,stack i text segmente,stanje signala,akcije signala,akcije na
signale,tajmere,dekriptore...). Kernel odlučuje koji će se proces sljedeći izvršavati, to se
naziva scheduling – vremensko planiranje.
Scheduling
– Zadatak kernela je da isplanira i zakaže izvršavanje procesa tako da svi procesi mogu
zauzeti podjednako resursa. Programi se ocjenjuju prema količini računanja i količini I/O koje
izvršavaju i na osnovu toga im se određuje prioritet. On se u FreeBSD-u izrčunava svake
sekunde, na osnovu količine računanja u prethodnom periodu, količine memorije koju
zauzima, ukupne zauzetosti resursa sistema i vrijednosti nice koju ima svaki proces i koja
označava poželjni prioritet. Svi procesi naizmjenično dobivaju određeni vremenski period
izvršavanja. U FreeBSD-u ovaj period je 0,1 sekunda, poslje čega kernel prelazi na
izvršavanje procesa sa najvišim prioritetom.
Procesi koji čekaju da se I/O operacija završi imaju veći prioritet izvršavanja, jer se izvršavaju
u kernel-modu. Nasuprot tome, procesima koji su zahtjevaju dosta računanja (procesorskog
vremana) prioritet im se smanjuje, kako ne bi zauzeli kompletan procesor i zaustavili
izvršavaje ostalih procesa. Na ovaj način 4.4BSD kernel daje prednost interaktivnim
programima (kakvi su npr. text editori) nad dugotrajnijim batch-type procesima koji
zahtjevaju dosta procesorskog vremena i koji zagušuju sistem.
641/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Ogrančenje resursa
Kernel podržava ograničavanje količine resursa koji su dostupni pojedinim procesima. Ova
ograničenja mogu biti: maksimalno CPU vrijeme koje proces može zauzeti, količina
memorije koju može alocirati, veličina i broj fajlova koje proces može kreirati, broj
simultanih procesa koje korisnik može pokrenuti i dr.
Za svako ograničenje postoje soft i hard limit. Kada proces pređe soft limit sitže mu signal
koji obično rezultira prekidanjem izvršavanja procesa, ali proces može i ignorirati ovaj signal
i pokušati osloboditi resurse. Ukoliko to ne napravi sljedeći pokušaj alociranja još resursa
neće uspjeti.
Hard limit se ne može prekoračiti. Svi korisnici mogu svojim procesima smanjiti hard limit, a
jedino superuser ga može povećati.
Sistemski procesi
Svi procesi u 4.4BSD-u (i naravno u FreeBSD-u) potiču od jednog procesa kojeg pokreće
kernel. Proolikom pokretanja sistema kreiraju se tri procesa i oni uvijek postoje i izvršavaju
se. Procesi swapper i pagedaemon su procesi koji se izvršavaju u kernel modu. Swapper (PID
0) je odgovoran za vremensko planiranje premještanja 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 izvršava u korisničkom modu, van kernela i koji je odgovoran za administrativne zadatke,
kao što je pokretanje drugih procesa
(po jedan getty proces u svaki terminal mašine) zatvaranje procesa prilikom gašenja sistema
(ulaskom u beskonačnu petlju ili resetiranjem sistema).
642/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Identifikatori korisnika
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 može napraviti novu grupu. Procesi unutar jedne
grupe mogu međusobno 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. Više procesa se spajaju pajpovima, a signali se mogu slati sviim procesima tog
posla odjednom.
643/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
SIGNALI
Popis signala
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGIOT 6
#define SIGBUS 7
#define SIGFPE 8
#define SIGKILL 9
#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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
#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 većine navedenih
signala su unaprijed dodijeljene. Tako npr. signal KILL (broj 9) uzrokuje završetak procesa
kojemu je namijenjen. Kažemo da smo proces 'ubili' signalom KILL. Signalima STOP i
CONT može se zaustaviti pa nastaviti izvođenje procesa. No, ima i signala kojima funkciju
određuje korisnik (programer). To su signali USR1 i USR2. Ponekad se može dogoditi da
je isti signal predstavljen drugim brojem na drugom UNIX sustavu. Zbog toga je
preporučljivo koristiti imena signala, a ne njihove brojeve. Isto tako, nisu baš svi signali
definirani na svim UNIX sustavima.
Slanje signala vrši se pozivom sustava kill:
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 ugrađena naredba istog naziva (koja se i zasniva na istoimenom pozivu sustava):
kill. Ona služi za slanje signala određenom procesu iz komandne linije.
Naredbom kill –l dobiva se popis svih signala.
.
645/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Od strane terminala generirani signali se pojavljuju kad korisnik pritisne određene tipke (ili
određenu kombinaciju tipki). Npr. : obično CTRL+C generira signal za kraj izvršavanja
pojedinog programa
Greške (iznimke, exceptions) također mogu generirati signal, npr. dijeljenje sa nulom,
pogrešna memorijska referenca i slično.
kill funkcija, odnosno kill naredba na UNIX-u šalje signal nekom drugom procesu ili grupi
procesa.
Softverski uvjeti generiraju signal kad se dogodi nešto čega bi proces trebao biti svjestan, npr.
kada sat alarma postavljen od strane procesa istekne.
Signal može 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 sadrži nikakve informacije i može
biti poslan samo određenom procesu ili procesima. Signali se nikada ne koriste za normalnu
komunikaciju, nego samo za posebne događaje.
Kada se signal genrira on postaje neriješen (u toku, eng. pending) i takav ostaje neko kratko
vrijeme dok ne bude dostavljen procesu kojem je namijenjen. Međutim, moguće je da je takav
signal trenutno blokiran od strane sustava, pa može ostati neriješen proizvoljno dugo, tj. sve
do onog trenutka dok ta vrsta
signala ne bude deblokirana. Jednom deblokiran dostavlja se odmah. Postoje tri stvari koje
proces može reći jezgri što da ućini s dostavljenim signalom:
1. Ignorirati signal.
Ovo radi za većinu signala osim za dva signala koja nikad ne mogu biti ignorirana: SIGKILL
i SIGSTOP. Razlog zašto ova 2 signala ne mogu biti ignorirana leži u činjenici da superuseru
mora biti omogućena opcija sigurnog zaustavljanja ili ubijanja procesa. Također ako
ignoriramo neke signale koji su generirani usljed hardverdske pogreške ponašanje procesa
nije definirano.
2. Uhvatiti signal.
646/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Da bi ovo uradili, jezgri treba reći da pri pojavi signala pozove neku određenu funkciju u
kojoj možemo uraditi prouizvoljnu akciju.
647/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Vrste signala:
Različiti operativni sustavi definiraju različite signale. Svaki signal ima ime. Imena svih
signala počinju sa SIG, a popis svih signala u pojedinom operativnom sustavu može se nači u
datoteci signal.h. Imena signala su pozitivne cjelobrojne konstante.
ANSI C standard specificira sljedećih 6 signala: SIGINT, SIGILL , SIGFPE,
SIGSEGV, SIGTERM, SIGABRT..
Vrste signala
Moderne implementacije UNIX-a definiraju oko tridesetak signala. Ovdje je pregled samo
najznačajnijih.
SIGINT
šalje se svakom procesu za koji je to kontrolni terminal u trenutku kada je pritisnuta tipka za
prekid (standardno DEL, najčešće izmijenjeno u Ctrl-C).
SIGQUIT
Slično kao SIGINT, ali se odnosi na tipku za kraj izvršavanja (standardno Ctrl-\, najčešće
izmijenjeno u Ctrl-X).
SIGKILL
Jedini siguran način uništavanja procesa je da mu se pošalje ovaj signal, jer ne može biti
ignoriran niti uhvaćen.
SIGALARM
šalje se kada istekne traženo vrijeme čekanja procesa.
SIGTERM
Ovo je standardni signal za uništavanje procesa. Koristi se i kod isključivanja da ubije sve
aktivne procese. Očekuje se da će proces koji ga primi uredno spremiti aktualno stanje prije
završetka.
sigset i njemu bliski sistemski pozivi
void (* sigset(int sig, void (* func)())() ;
648/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
specificira šta se dešava prilikom primitka određenog signala. sig je broj signala. Drugi
argument je kazaljka na funkciju i može biti:
SIG_DFL. U ovom slučaju postavlja se automatska reakcija na signal. Za večinu
signala to znači uništavanje procesa.
SIG_IGN. Ovime se postavlja da signal bude ignoriran. Signal SIGKILL se ne može
ignorirati.
SIG_HOLD. Signal se prihvaća ali ne obrađuje i obradit će se onda kada se definicija
ponašanja za taj signal promijeni. Može se čuvati samo po jedan signal svake vrste.
SIGFPE Signal koji se događa zbog aritmetičke pogreške (dijeljenje s nulom,
floating point overflow ili underflow)
SIGUSR1 i SIGUSR2 signali slobodni u korisničke svrhe
649/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Rukovanje signalima
Nekoliko objašnjenja:
signal() je sistemski poziv koji vraća adresu funkcije koja kao argumnet uzima int i ne vraća
nikakvu vrijednost . Znaći signal vraća sljedeće: void (*)(int).
signal() vraća prethodno asociranu funkciju za obradu prekida.
signal() kao argumente uzima sljedeće:
Prvi parametar tipa int je broj signala. Obično 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 vraća ništa. U slučaju 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 slučaju uspjeha signal će vratiti adresu funkcije koja je prethodno služila za obradu prekida,
inače vratiti će konstantu SIG_ERR.
Funkcija signal ima određene 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 poželjno na neko vrijeme
650/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Svaki proces ima signalnu masku koja definira skup signala trenutno blokiranih od strane
procesa. Možemo to predočiti na način da svaki bit sadrži predstavlja pojedini signal S
obzirom da broj signala može biti veći nego cijeli broj POSIX.1 definira novi tip sigset_t koji
sadržava skup signala.
651/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Signalna maska
sigproc mask ispituje ili postavlja (ili oboje) signalnu masku. Ako je oset nenull pointer,
trenutna signalna maska se vraća preko oset. Ako je set ne-null pointer tada how određuje
kako je će se signlna maska modificirati.
Mogućnosti su:
SIG_BLOCK
Nova signlna maska za proces je unija trenutne signalne maske i skupa signala definiranog sa
set, tj. set sadrži signale koje želimo blokirati.
SIG_UNBLOCK
Nova signlna maska je presjek trenutne signalne maske i skupa signala definiranog sa set, tj.
set sadrži signale koje želimo deblokirati
SIG_SETMASK
Postavlja se nova signalna maska.
652/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Ova funkcija nasljeđuje funkciju signal i služi za ispitivanje ili modificiranje (ili oboje)
struct sigaction{
Signalna maska procesa se postavlja na sigmask i proces se zaustavlja dok se ne pojavi signal
(malo neprecizno reèeno: unlock and pause)
653/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Prekidi i signali
SIGNALI
Jezgra može poslati procesu signal. Taj signal može biti proizveden od same jezgre, proces ga
može poslati sam sebi ili drugom procesu, ili ga može poslati korisnik.
Primjer signala koji potiče od jezgre je signal koji je poslan kada proces pokuša 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 uništava procese, a šalje ga
proces koji želi uništiti svoju "porodicu" procesa. Tipični korisnikov signal je prekidni signal.
Standardno je postavljeno da se taj signal generira tipkom DEL, međutim, večina korisnika to
mijenja u Ctrl-C (stty intr ^C).
Postoji tridesetak različitih signala (u različitim verzijama UNIX-a može ih biti manje ili
više). Za večinu signala (izuzetak je SIGKILL i još neki) proces može kontrolirati što se
dešava nakon što primi neki signal. Može prihvatiti ugrađenu akciju što (za večinu signala)
rezultira uništavanjem procesa, može ga ignorirati ili može uhvatiti signal i izvesti određenu
funkciju. Tip signala (cijeli broj) se prenosi u funkciju kao jedini argument i funkcija ne može
otkriti izvor signala. Nakon povratka iz funkcije proces može nastaviti od mjesta prekida.
654/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Prototip je nešto teže razumijeti jer je jedan od argumenata kazaljka na funkciju, a i sama
funkcija kao rezultat vraća kazaljku na funkciju - prethodnu definiciju ponašanja za zadani
signal. To se može koristiti ako kasnije treba vratiti prijašnje stanje.
Nakon povratka iz funkcije za obradu signala, proces nastavlja s radom od mjesta na kojem je
prekinut primitkom signala. Međutim, ako je signal prihvaćen za vrijeme čekanja na izvršenje
poziva read, write, open, ioctl, wait, ili pause oni će biti prekinuti uz postavljanje greške
EINTR u errno (ne odnosi se na pristup običnim datotekama).
Neposredno pred poziv funkcije za obradu signala func, ponašanje kod prijema dotičnog
signala se mijenja u SIG_HOLD. Na povratku iz te funkcije restaurira se func kao funkcija za
obradu signala i otpušta eventualno pristigli signal. To se može obaviti i prije završetka same
funkcije, pozivom sigrelse, što onda omogučava prijem novog signala prije nego što je
prethodni obrađen.
655/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Iako su ranije opisani pozivi, slijedi opis još nekoliko važnijih funkcija i sistemskih poziva
povezanih sa signalima:
int pause(void) ;
zaustavlja proces do dolaska nekog signala. To ne može biti neki od signala koji se ignoriraju.
Također, ako signal izazove prekid procesa, pause ne može ništa vratiti. Tek ako funkcija za
hvatanje signala vraća nešto, pause se vraća s rezultatom -1 i errno postavljenim na EINTR.
od prije postojeći alarm. U svakom slučaju, sleep kao rezultat vraća "neprospavano" vrijeme
(koliko je proces ranije probuđen zbog drugih signala). To vrijeme se onda može nadoknaditi
dodatnim spavanjem.
656/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
U večini slučajeva kill se koristi za uništavanje procesa (od tuda dolazi ime) ili za testiranje
ponašanja kod greške simuliranjem signala. Najčešće se koristi kao komanda, a ne kao poziv
u programu.
Neposredno pred poziv funkcije za obradu signala, ponašanje kod prijema dotičnog signala se
mijenja u SIG_DFL. To znači da će slijedeći signal istog tipa ubiti proces. Ovo ponašanje se
može promijeniti unutar same funkcije za obradu
signala, ali uvijek postoji interval (koji kod većeg opterećenja može biti i prilično dugačak)
unutar kojeg prijem signala može ubiti proces.
UNIX ne dozvoljava pojedinom korisniku izravno korištenje prekida procesora. Zato prekide
treba simulirati koristeći signale koje jezgra operacijskog sustava šalje procesima.
657/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
658/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
POSIX.1 standard
Signal Value Action Coment
SIGINT 2 TERM Prekid s tipkovnice
SIGQUIT 3 CORE Quit s tipkovnice
SIGILL 4 CORE Ilegalna instrukcija
SIGABRT 6 CORE Prekid
SIGFPE 8 CORE Iznimka pomičnog
zareza
SIGKILL 9 TERM Kill signal
SIGSEGV 11 CORE Pogrešna referenca
memorije
SIGPIPE 13 TERM Pisanje
SIGALRM 14 TERM Vremenski signal za
alarm
SIGTERM 15 TERM Signal prekida
SIGUSR1 30,10,16 TERM Samodefinirajući 1
SIGUSR2 31,12,17 TERM Samodefinirajući 2
SIGCHLD 20,17,18 IGN Zaustavljanje ili
prekidanje djeteta
SIGCON 19,18,25 Nastavi ako
zaustavljeno
SIGSTOP 17,19,23 STOP Zaustavi prces
SIGTSTP 18,20,24 STOP
SIGTTIN 21,21,26 STOP tty unos za
pozadinske procese
SIGTTOU 22,22,27 STOP Tty izlaz za
pozadinske procese
659/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Sljedeći signali ne nalaze se u POSIX.1 standardu ali su opisani u SUSv2 i SUSv3 / POSIX
1003.1-2001
660/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
ZAKLJUČAK
661/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Igor Čopec
FORK PROCESI
662/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
FORK PROCESI
663/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
664/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
- Kako bi operativni sustav znao što pojedini proces smije raditi a što ne, on mora
pohraniti informaciju o tome tko posjeduje pojedini proces (UID i GID).
- UNIX operativni sustav pohranjuje dva tipa UID i dva tipa GID informacija.
a) pravi UID i pravi GID
- pravi procesov UID i GID će biti isti kao UID i GID od korisnika koji je pokrenuo
proces, pa će stoga svaki proces koji pokrenete imati vaš UID i GID
- pravi i stvarni procesov UID i GID služe za potrebe brojanja pristupa procesu
665/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
ODREĐIVANJE INFORMACIJE O
TRENUTNIM PROCESIMA
666/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
TT kolumna daje imena terminala, koji se mogu saznati pomoću naredbe WHO
STAT (State of job) kolumna može biti predstavljena sa četiri znaka !
R(runnable process) proces koji je moguće pokrenuti
T(stopped process) zaustavljeni process
S(process sleeping) proces koji spava manje od 20 sekundi
I (idle process) process koji spava dulje od 20 sekundi
primjer programa:
/**************************************************************/
/* */
/* kratki program o procesu (funkciji) fork() */
/* */
/**************************************************************/
#include <stdio.h>
/***************************************************************/
{ int i;
667/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
sleep(1);
}
}
/**************************************************************/
int main(void)
if (! fork())
{
cid = getpid();
printf ("Ja sam novonastali proc (cid = %d) of (pid=%d)\n",cid,pid);
ChildProcess();
exit(0);
}
wait(NULL);
return 0;
}
668/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
cc longtimer.c &
pa će shell kompajlirati dotični proces u pozadini omogućavajući mi davanje daljnjih
naredbi.
669/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
UNIŠTAVANJE PROCESA
Proces možemo uništiti korištenjem naredbe 'kill' . Jednostavno nađemo procesov PID
(na primjer korištenjem naredbe 'ps'), a potom ga uništimo ovako:
kill -9 pid
Ako proces trenutno radi u konzoli, tj. nije u pozadini možemo ga jednostavno uništiti
ovako
control-C
670/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Fork procesi
Evo ovo je bio kratak seminar o fork procesima, jednom od glavnih aduta UNIX
operativnog sustava koji osigurava njegovu sigurnost i stabilnost. Upravo zbog ovakvih
rješenja je UNIX nenadmašiv u stabilnosti i zbog toga se koristi za posluživanje kompleksnih
i vrlo zahtjevnih informacijskih sustava, jednostavno nema mu premca. Izabrao sam ovo
područje jer mislim da je najkompliciranije krenuti raditi u konzoli a dok ne znaš njezine
potencijale i mogućnosti, jer se upravo u konzoli može apsolutno sve, a dok u bilo kakvom
grafičkom sučelju su stvari okljaštrene i apsolutan pristup je ograničen u svakom pogledu!
Nadam se da će ovaj seminar pomoći shvatiti kako rade procesi . UNIX rules...
671/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
Matija Čupen
SOCKETS
UNIX DOMAIN, NETWORK
672/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
TCP/IP i Internet
1969. godine ARPA, Advanced Research Projects Agency, osnovala je istraživački i
izvedbeni projekt izrade eksperimentalne “packet-switching” mreže. Mreža, nazvana
ARPAnet, bila je napravljena zbog proučavanja tehnika slanja robusnih i pouzdanih podataka.
Mnoge tehnike modernih podatkovnih komunikacija razvijene su sa ARPAnet
eksperimentalnom mrežom.
Eksperimentalna mreža bila je toliko uspješna da su je mnoge organizacije, povezane na
nju, počele koristiti za svakodnevnu komunikaciju. 1975. godine ARPAnet je iz
eksperimentalne postala vrlo razvijena “operativna” mreža 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 mrežu bili su primorani prijeći na nove protokole. Da bi olakšala
prijelaz, DARPA4, je zatražila Bolta, Beraneka i Newmana (BBN) da implementiraju TCP/IP
protokole u Berkley (BSD) Unixu. Tako je započeo brak Unixa i TCP/IP-a.
Kako je sa vremenom prihvaćen TCP/IP standard, termin Internet se počeo koristiti u
svakodnevnoj upotrebi. 1983. ARPAnet se podijelila na MILNET i novu manju ARPAnet.
Internet termin se koristio za cjelokupnu mrežu: MILNET plus ARPAnet.
Počevši od 1983. godine i konstantno rastući jedna stvar je ostala konstanta: Internet je
napravljen na TCP/IP protokolu.
4
tijekom 1980. ARPA, kao dio U.S. Department of Defense, postala je DARPA (Defense Advanced Research
Projects Agency) ali agencija i njena misija razvijanja naprednog istraživanja ostala je ista
673/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
674/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
Isto kao i u OSI modelu, podaci se šalju prema dolje niz stack kada su poslani na mrežu
i gore uz stack kada su primljeni sa mreže. Struktura TCP/IP-a izgleda na način da se podaci
šalju niz protokol stack iz aplikacijskog sloja sve do fizičke mreže. Svaki sloj u stacku dodaje
kontrolnu informaciju da bi potvrdili sigurnu dostavu. Ova kontrolna informacija naziva se
zaglavlje (header) jer je postavljen na početak podataka koji se trebaju poslati. Svaki sloj
tretira sve informacije koje primi iz sloja iznad kao podatke i stavlja svoje zaglavlje na
početak informacije. Kada su podaci primljeni, događa se suprotno, svaki sloj “skida“ svoje
zaglavlje prije nego šalje podatke sloju iznad. Slika 1.3.
slika 1.3.
675/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
NETWORKING
Uvod
Linux kernel podržava mnogo različitih mrežnih arhitektura (TCP/IP je samo jedna od
njih), sa nekoliko implementiranih alternativnih algoritama za razvrstavanje mrežnih paketa,
uključujući i programe koji olakšavaju sistemskim administratorima “postaviti” router,
gateway, firewall, pa čak i jednostavan World Wide Web server, direktno na nivou kernela.
Trenutni kôd, inspiriran sa originalnom Berkley Unix implementacijom, je Net-4. Kako
i samo ime govori, ovo je četvrta glavna verzija Linux networkinga. Slično kao i VFS, kôd
koristi objekte za provedbu sukladnog interfacea do velikog broja dostupnih arhitektura.
Suprotno od VFS-a, networking kôd je organiziran u slojeve (layers), gdje svaki od njih ima
vrlo dobro definiran interface. Pošto podaci poslani mrežom nisu ponovo upotrebljivi, nema
potreba za spremanjem u cache. Potrebom za što većom isplativošću, Linux izbjegava
kopiranje podataka unutar slojeva. Originalni podaci su spremljeni u memory buffer, koji je
dovoljno velik da sadrži informacije potrebne svakom sloju.
Mrežne arhitekture
676/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
IPS (Internet Protocol Suite) je mrežna arhitektura Interneta, ponekad nazvana TCP/IP
mrežna arhitektura zbog glavnih protokola.
Mrežna kartica
Mrežna kartica (NIC - Network interface card) je specijalna izlazno/ulazna jedinica koja
plasira izlazne podatke do umreženog računalnog sistema i prima pakete od istih sistema u
memoriju kernela.
Počevši sa BSD-om, svi Unix sistemi dodjeljuju različito ime za svaku mrežnu karticu
instaliranu na računalu; npr. prva mrežna kartica dobiva ime eth0. Umjesto korištenja
filesistema, sistemski administrator mora postaviti vezu između imena i mrežne adrese. BSD
Unix je predstavio novu grupu sistemskih poziva koji su postali standard programiranja
modela za mrežne uređaje.
BSD sockets
677/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
Socket je komunikacija između tzv. ulaznih vrata i krajnje točke kanala koji povezuje dva
procesa. Podaci se pošalju na “ulazna vrata” i nakon nekog vremena pojave se na drugoj
strani (izlazu). Komunikacijski procesi mogu biti na različitim računalima. Mrežni kôd
Kernela prosljeđuje podatke između krajnjih točaka.
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
uključen u polju u.socket_i sockfs inode-a.
678/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
INET sockets
INET socketi su strukture podataka tipa struct sock. Svaki BSD socket koji pripada IPS
mrežnoj arhitekturi sadrži adrese INET socketa u sk polju socket objekta.
INET socketi su potrebni jer socket objekti (opisujući BSD sockete) uključuju samo
polja koja su značajna za sve mrežne arhitekture. Ali, kernel mora također zapamtiti i
nekoliko drugih informacija za svaki socket bilo koje mrežne 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 također definira neke metode specifične tipu transporta protokola
(TCP ili UDP). Metode spremljene u strukturi podataka tipa proto:
679/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
sock objekt sadrži otprilike 80 polja od kojih su mnoga pokazivači na druge objekte,
tablice, metode ili druge strukture podataka.
Koncepti socketa
Communication style
Način 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 određuje kako su ti paketi podržani i kako su adresirani
od pošiljaoca do primatelja.
- Connection style garantira isporuku svih paketa po redu kako su poslani. Ako su paketi
izgubljeni ili je promijenjen redoslijed zbog problema na mreži, primatelj automatski zahtjeva
njihovo ponovno slanje od pošiljaoca. Connection-style socket je kao telefonski poziv: Adresa
pošiljaoca i primaoca je fiksna na početku komunikacije kada je veza uspostavljena.
- Datagram style ne garantira isporuku ili redoslijed dolaska paketa. Paketi mogu biti
izgubljeni ili promijenjenog redoslijeda zbog problema na mreži. Svaki paket mora biti
označen sa svojom destinacijom i nije zagarantirano da će biti isporučen. Sistem garantira
samo “najbolju volju”, tako paketi mogu nestati ili stići u krivom redoslijedu kako su poslani.
Datagram-style sockets ponašaju se više kao slanje pisma poštom: Pošiljatelj specificira
adresu primaoca za svaku individualnu poruku.
Namespace
Socket namespace određuje kako su zapisane adrese socketa. Adresa socketa određuje
jedan kraj “veze” socketa. Na primjer, adrese socketa u “local namespaceu” su obična imena
datoteka. U “Internet namespaceu” adresa socketa je sastavljena od Internet adrese (također
680/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
znane kao Internet Protocol adress ili IP address) hosta spojenog na mrežu i broj porta. Broj
porta raspoznaje višestruke sockete na istom hostu.
Protokol
Protokol specificira kako su poslani podaci. Neki protokoli su TCP/IP, AppleTalk
mrežni protokol i UNIX lokalni komunikacijski protokol. Nisu sve kombinacije stilova,
namespacea i protokola podržane.
Socket buffer
Svaki pojedini paket poslan kroz mrežnu jedinicu sastoji se od nekoliko dijelova
informacije. Svima osim payloada, podaci čije je slanje prouzročeno kreiranjem samoga
paketa, svi slojevi mreže, počevši od data link sloja i završavajući na transportnom sloju,
dodaju neke kontrolne informacije. Format paketa kontroliranih od mrežne kartice su
prikazani na slici.
681/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
Struktura podataka sk_buff sadrži mnoga druga polja, kao ”identifikator” mrežnog
protokola korišten za slanje podataka (checksum field) i vrijeme dolaska primljenih paketa.
Kao glavno pravilo, kernel izbjegava kopiranje podataka ali jednostavno prosljeđuje
sk_buff descriptor pointer svakom mrežnom sloju. Na primjer, kada priprema paket za slanje,
transportni sloj počinje kopirati payload iz user mode buffera na višu poziciju socket buffera;
tada transportni sloj dodaje svoje TCP ili UDP zaglavlje prije payloada. Nakon toga, kontrola
se šalje mrežnom sloju, koji prima socket buffer descriptor i dodaje IP zaglavlje prije
transportnog zaglavlja. Konačno, data link layer dodaje svoje zaglavlje i trailer, čime
pripremi paket za slanje.
Sistemski pozivi
682/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
Connect
Da bi ostvario vezu između dva socketa, klijent zove connect, određujući 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. Treći argument je dužina, u byte-ovima, od adresne
strukture na koju pokazuje sa drugim parametrom. Format adrese socketa razlikuje se prema
socket namespaceu.
Serveri
683/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
Lokalni socketi
Proces spajanja socketa na istom računalu može 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 korištene samo kod kreiranja
veza.
Ime socketima je specificirano u struct sockaddr_un. Moramo postaviti sun_family
polje u AF_LOCAL, određujući da je ovo lokalni namespace. Polje sun_path određuje ime
datoteke za korištenje i može biti, najviše, 108 byte-ova dugačko. Bilo koje ime može biti
korišteno, 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
različita računala mogu dijeliti iste file-sisteme, samo procesi pokrenuti na istom računalu
mogu komunicirati sa lokalnim namespace socketima.
Jedini dozvoljeni protokol za lokalni namespace je 0.
Zbog toga što postoji u file-sistemu, lokalni socket se može izlistati kao i datoteka. Na
primjer:
%ls –l /tmp/socket
srwxrwx—x 1 user group 0 Nov 13 18:18 /tmp/socket
684/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
U ovom primjeru server program kreira lokalni namespace socket; “listens for
connection on it”. Kada primi vezu, čita tekstualne poruke i ispisuje ih sve dok se veza ne
zatvori. Ako je jedna od poruka “quit” server program gasi socket i završava sa radom.
Program uzima “path” do socketa kao argument iz komandne linije.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
685/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
/* Kreira socket */
socket_fd = socket (PF_LOCAL, SOCK_STREAM, 0);
/* Pokazuje da je ovo server */
name.sun_family = AF_LOCAL;
strcpy (name.sun_path, socket_name);
bind (socket_fd, &name, SUN_LEN (&name));
/* ”Listen” for connections */
listen (socket_fd, 5);
/* Prihvaća vezu */
client_socket_fd = accept (socket_fd, &client_name, client_name_len);
/* Handle the connection. */
client_sent_quit_message = server (client_socket_fd);
686/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
return 0;
}
Internet-domain sockets
687/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
#include <stdlib.h>
#include <stdio.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/socket.h>
#include <unistd.h>
#include <string.h>
688/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
{
int socket_fd;
struct sockaddr_in name;
struct hostent* hostinfo;
/* kreira socket */
socket_fd = socket (PF_INET, SOCK_STREAM, 0);
/* sprema ime servera u adresu socketa */
name.sin_family = AF_INET;
/* konvertira string u broj */
hostinfo = gethostbyname (argv[1]);
if (hostinfo == NULL)
return 1;
else
name.sin_addr = *((struct in_addr *) hostinfo->h_addr);
/* web server koristi port 80 */
name.sin_port = htons (80);
/* spaja se na web server */
if (connect (socket_fd, &name, sizeof (struct sockaddr_in))== -1)
{
perror ("connect");
return 1;
}
/* prima home-page sa servera */
get_home_page (socket_fd);
return 0;
}
689/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sockets, unix domain, network
Parovi socketa
Kao što smo prije vidjeli, pipe funkcija kreira dva file descriptora za početak i za kraj
pipe-a. Pipe-ovi su ograničeni jer file descriptori moraju biti korišteni kao povezani procesi i
jer je veza nedirektna. socketpair funkcija kreira dva file descriptora za dva spojena socketa
na istom računalu. Ovi file descriptori omogućavaju dvosmjernu komunikaciju između
povezanih procesa. Njihova tri parametra su jednaka kao i kod poziva socket: određuju
domenu, stil spajana i protokol. Zadnji parametar je niz dva integera, koji se puni sa file
descriptorima od dva socketa, slično pipe.
Kada zovemo socketpair, moramo specificirati PF_LOCAL kao domenu.
690/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb TCP/IP
Saša Dragić
TCP/IP
691/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
UVOD
692/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Iz ove podjele, vidi se da je OSI model tako zamišljen da svaka razina koristi svoj
protokol kojeg možemo proizvoljno zamijeniti a da razine, tj. protokoli iznad dalje rade bez
problema. Npr. ethernet kao fizički layer može koristiti BNC ili UTP ili recimo radio valove,
dok IP može koristiti ethernet, ppp, token ring...
693/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
TCP/IP PROTOKOL
Network Interface
694/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Ethernet koristi 2 protokola paralelno MAC i LLC. MAC se brine za fizičko adresiranje
dok LLC obavlja nešto malo vise funkcije vezane uz adresiranje na samom uređaju.
Internet protocol (IP) se koristi za bespojnu komunikaciju između računala i kao sto se
vidi iz dijagrama gore, za prijenos ga koriste TCP i UDP. On je odgovoran za pravilno
adresiranje računala i prosljeđivanje paketa, ali ne garantira njihovo dospijeće. IP također
poruke može razbiti na manje pakete te ih sastaviti na odredištu s tim da svaki dio može
695/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
krenuti drugim putem kroz mrežu. Ako paketi ne stignu pravim redoslijedom IP ce ih sastaviti
u ispravan paket.
IP datagram:
IP header:
696/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Version
o 4 bita, verzija ip headera, trenutno se koristi verzija 4. Sljedeća verzija je
IPv6, koja se zasad koristi samo eksperimentalno.
IP Header length
o 4 bita, govori koliko je 32-bitnih rijeci ip header dugačak.
Type of service
o 8 bitova, govori o kvaliteti veze
Total length
o 2 bytea, označava ukupnu duljinu IP paketa
Identification
o 2 bytea, koristi se za da bi identificirali specifični datagram između
pošiljatelja i primatelja. Za svaki sljedeći IP paket vrijednost se
inkrementira.
Flags
o 3 bita, označavaju da li je paket pogodan za fragmentaciju, te da li je
fragmentiran
Fragment offset
o 13 bitova, označava mjesto gdje se fragment nalazi u cijeloj poruci
(potrebno za sastavljanje poruke)
Time to live
o 1 byte, označava preko koliko prijelaza paket može proći dok se ne
odbaci. Svaki IP router prilikom prosljeđivanja paketa dekrementira
njegovu vrijednost, a ako je 0, paket se dalje ne prosljeđuje.
Protocol
o 1 byte, označava koji protokol se nalazi iznad, tj. čiji paket IP paket
sadrži
Protokoli:
1 ICMP
2 IGMP
4 IP in IP encapsulation
6 TCP
697/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
17 UDP
41 IPv6
47 Generic Routing Encapsulation (GRE)
50 IP Security Encapsulating Security Payload (ESP)
51 IP Security Authentication Header (AH)
89 OSPF
Header checksum
o 2 bytea, osigurava integritet headera
Source address
o 4 bytea, označava adresu pošiljatelja poruke
Destination address
o 4 bytea, označava adresu primatelja poruke
Options and Padding
o dodatne opcije i dopuna paketa da bi njegova veličina bila djeljiva sa 32
Transport layer
TCP protokol:
TCP je obostrani spojni protokol koji spaja 2 računala (TCP konekcija može biti i
unutar jednog računala, mnoge aplikacije komuniciraju na taj način, npr. X window system),
te osigurava da paketi na odrediste dođu traženim redoslijedom.
698/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
o 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 početnog okteta segmenta
Acknowledgment numberpolje od 4 bytea, broj slijedećeg okteta korisnikove
poruke, ujedno i kumulativna potvrda
Data Offset
o polje od 4 bytea, označava početak podataka u paketu, ujedno označava
veličinu TCP headera
Reserved
o 6 bitova rezerviranih za buduću uporabu, postavljeno na 0
Flags
o 6 bitova koje označavaju TCP flagove: URG, ACK,PSH, RST, SYN, FIN
Window
o polje od 2 bytea, govori koliko velik buffer pošiljatelj poruke ima za primanje
poruka. TCP/IP stack drugog sudionika treba slati pakete velike maksimalno
do veličine prozora. Ako je poslana 0, poruke se dalje ne šalju, sve dok se ne
pošalje nova poruka sa vrijednosti većom od 0.
Urgent pointer
o polje od 2 bytea, govori lokaciju hitnih podataka u segmentu
Options
o proizvoljne opcije koje se dodaju TCP headeru u paketima od 4 btyea
Poznatiji TCP portovi:
19 Network News Transfer Protocol (NNTP)
20 FTP Server (data channel)
21 FTP Server (control channel)
23 Telnet Server
25 Simple Mail Transfer Protocol (SMTP)
69 Trivial File Transfer Protocol (TFTP)
80 Hypertext Transfer Protocol (HTTP; Web server)
139 NetBIOS Session Service
700/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
UDP protokol:
UDP je bespojni protokol gdje nemamo informaciju da li je paket stigao ili nije. UDP
samo prosljeđuje pakete protokolu iznad koji se mora brinuti za njihovo pravilno tumačenje.
Kako nema overheada i odmah prosljeđuje 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 može biti 0
Destination port
o polje od 2 bytea koje definira port na koji stiže UDP poruka, tj. definira koja
aplikacija na application layeru prima poruku, zajedno sa ip adresom iz ip
headera jedinstveno označava kojem processu tj. aplikaciji je poruka poslana
701/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Length
o polje od 2 bytea koje označava duljinu. Minimalna duljina je 8 byte-ova a
teoretska maksimalna 65,515 (duljina ip paketa minus headeri). Prava
maksimalna duljina je ograničena MTU-om linka preko kojeg se prenose
paketi. Ovo polje je redundantno zato sto se duljina paketa uvijek može
izračunati iz duljine IP paketa.
Checksum
o polje od 2 bytea koje osigurava integritet podataka
Application layer
702/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
IP adresiranje
Klase IP adresa:
IP adrese su podijeljene u klase, ovisno o primjeni i veličini organizacije kojoj se
dodjeljuju. Najčešće korištene su A, B i C. Ovim klasama su definirane duljine mrežne adrese
i duljine adrese računala. Klasa A koristi prvih 8 bitova za adresiranje mreže, a zadnjih 24 za
adresiranje računala i dodjeljuje se uglavnom ogromnim organizacijama. Klasa B koristi 16
bitova za adresu mreže i 16 bitova za adresu računala i dodjeljuje se uglavnom velikim
organizacijama i tvrtkama (ISP-ovi i slično), trenutno tih adresa najviše nedostaje. Klasa C
koristi 24 bita za adresu mreže, a 8 za adresu računala. Dodjeljuje se većini organizacija i
tvrtki. Ukoliko postoji potreba za vise od 254 ali znatno manja od 65.534 računala, 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 računala postavimo na 0, dobili smo adresu mreže, a
ako ih sve postavimo na 1 dobili smo brodcast adresu.
Npr.
703/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Loopback adrese:
Za testiranje i mrežnu komunikaciju između aplikacija na istom računalu koristi se
specijalna loopback mrežna adresa:
127.0.0.0
Bilo koja regularna adresa na toj mreži je adresa samog računala, najčešće se koristi:
127.0.0.1
Privatne IP adrese:
Za mreže koje se ne planiraju spajati na internet, ili se planiraju spajati na internet
pomoću jednog gatewaya koji koristi NAT (Network Adress Translation, poznato još kao i IP
Masquarade, IP adresa se u tom slučaju maskira IP adresom gatewaya) predviđene su privatne
IP adrese. Zapravo, za lokalnu mrežu možemo koristiti bilo koje adrese, ali bolje je koristiti
privatne da ne bi imali problema sa slučajnim routanjem tih paketa prema van, dok se privatne
IP adrese teoretski ne routaju na Internetu.
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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Kako zbog fizičkih problema ne možemo spojiti mnogo računala na istu mrežu
(nemogućnost hardwareske izvedbe, patile bi performanse) velike mreže dijelimo na
subnetove (podmreže) pomoću subnet maski. pomoću subnet maske određujemo (neovisno o
klasi mreže) koji dio adrese router smatra za mrežnu, a koji dio za adresu računala, tj. prema
njoj zna koje adrese routa prema van, a koje zadržava na lokalnoj mreži.
Subnet maska je jednake veličine kao IP adresa, znaci 32 bita. Adresa mreže je
označena sa bitom 1, a adresa računala sa bitom 0, tako da ako recimo klasu B hoćemo
podijeliti na 256 adresa dobijemo subnet masku 255.255.255.0.
N = network
H = host
NNNNNNNN.NNNNNNNN.HHHHHHHH.HHHHHHHH
11111111.11111111.00000000.00000000
Kako je nama potrebno 256 adresa C klase subnet maska ce sad izgledati ovako:
11111111.11111111.11111111.00000000
255.255.255.0
705/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Primjer 2:
11111111.11111111.11111111.11100000
255.255.255.224
Routing
Kako fizički nije moguće napraviti jednu veliku mrežu na koju ce se spojiti sva
računala, koriste se routeri. Router je uređaj koji ovisno o svojoj routing tablici pakete sa
jednog mrežnog interfacea prosljeđuje na drugi interface. Zapravo većina operativnih sustava
unutar samog tcp/ip stacka ima implementirana osnovnu verziju routera kojeg onda
706/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
konfiguriramo tako da mu upišemo adresu gatewaya (routera). U tom slučaju sve pakete za
koje se računalo 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 mrežama uglavnom postoji vise putova od jednog do drugog mjesta, tj. ip adrese,
routeri tu uglavnom koriste neki od protokola za dinamičko routanje.
==============================================================
=============
Interface List
0x1 ........................... MS TCP Loopback interface
0x2 ...00 50 56 c0 00 08 ...... VMware Virtual Ethernet Adapter for VMnet8
0x3 ...00 50 56 c0 00 01 ...... VMware Virtual Ethernet Adapter for VMnet1
0x10005 ...00 30 05 55 51 e1 ...... Intel(R) PRO/100 VE Network Connection
0x10006 ...00 10 5a f6 87 d7 ...... 3Com EtherLink XL 10/100 PCI TX NIC (3C905B-
TX)
==============================================================
=============
==============================================================
=============
Active Routes:
Network Destination Netmask Gateway Interface Metric
707/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
708/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Uvod
• socket
Socket je komunikacijski kanal. Kada se 2 procesa spoje preko socketa, koriste njegov
descriptor za čitanje i pisanje. Socket sistemski poziv uzima sljedeće argumente:
int domain
int type
int protocol
Gotovo uvijek ćemo koristiti AF_INET protokol. Postoji vise tipova socketa:
709/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Gotovo uvijek ćemo koristiti SOCK_STREAM tip socketa. Treći argument je broj
protokola, za primjere ćemo koristiti 0.
• bind
Bind funkcija spaja proces sa socketom. Bind uglavnom koristimo u serverskim
procesima da postavimo socket koji čeka na konekcije. Argumenti za bind poziv su:
int socket
struct sockaddr * my_addr
int my_addr_length
Prvi argument je socket deskriptor koji nam je vratio socket poziv. Drugi argument je
sockaddr struktura čija je definicija u /usr/include/linux/socket.h.
struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};
Sockaddr mora biti alociran i predan kao drugi argument i dalje se po njemu iz
programa ne smije direktno prestupati. Primjer:
710/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
• listen
Nakon smo socket kreirali i vezali uz proces, proces serverskog tipa može pozvati listen
funkciju da čeka na nadolazeće socket konekcije. Argumenti su:
int socket
int input_queue_size
Prvi argument je socket deskriptor koji nam je vratio socket, drugi je veličina queua, tj.
koliko konekcija može čekati u redu. Ako ćemo koristiti fork da bi obrađivali svaku konekciju
u posebnom procesu broj ne mora biti velik, ali za jednostavnije servere lakše je postaviti
vrijednost na nešto veću i obrađivati 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ć djelomično
objasnili i još ćemo objasniti u primjeru.
• recv
Recv koristimo za prihvaćanje poruka sa socketa kojeg smo već spojili. Postoje još
recvfrom i recvmsg ali oni se koriste za prihvaćanje poruka koje nisu spojno orijentirane pa ih
za sad nećemo spominjati.
Argumenti su:
int socket
void * buf
int buf_len
unsigned int flags
711/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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 treći su
zastavice koje kombiniramo sa |.
• 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
MSG_OOB—Process 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_DONTROUTE—Do not use routing
Server iz primjera kreira jedan stalni socket za čekanje na zahtjeve, a kad se klijent
spoji, otvara se privremeni socket. Svaki put kad se klijent spoji novi privremeni socket se
otvara.
712/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
while(1) {
// get a temporary socket to handle client request:
temp_sock_descriptor = accept(sock_descriptor, (struct sockaddr *)&pin,
&address_size);
// receive data from client:
recv(temp_sock_descriptor, buf, 16384, 0);
// ... here we can process the client request ...
// return data to the client:
send(temp_sock_descriptor, buf, len, 0);
// close the temporary socket (we are done with it)
close(temp_sock_descriptor);
}
713/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Klijent otvara privremeni socket, pošalje jednu poruku serveru i čeka na jednu poruku
nazad.
int socket_descriptor;
struct sockaddr_in pin;
struct hostent *server_host_name;
server_host_name = gethostbyname(“127.0.0.1”);
bzero(&pin, sizeof(pin));
pin.sin_family = AF_INET;
pin.sin_addr.s_addr = htonl(INADDR_ANY);
pin.sin_addr.s_addr = ((struct in_addr *)(server_host_name->h_addr))->s_addr;
pin.sin_port = htons(port);
close(socket_descriptor);
714/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
memset(&address, 0, sizeof(address));
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr(“127.0.0.1”); // local computer
address.sin_port = htons(port);
do {
sprintf(buf,”data packet with ID %d\n”, iter);
if (iter >20) {
sprintf(buf, “stop\n”);
process = 0;
}
715/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
sendto(socket_descriptor, buf,
sizeof(buf), 0, (struct sockaddr *)&address, sizeof(address));
iter++;
} while (process);
}
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
void main() {
int sin_len;
int port = 8080;
char message[256];
int socket_descriptor;
struct sockaddr_in sin;
struct hostent *server_host_name;
server_host_name = gethostbyname(“127.0.0.1”);
bzero(&sin, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = htonl(INADDR_ANY);
sin.sin_port = htons(port);
716/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
while (1) {
sin_len = sizeof(sin);
recvfrom(socket_descriptor, message, 256, 0, (struct sockaddr *)&sin, &sin_len);
printf(“\nResponse from server:\n\n%s\n”, message);
if (strncmp(message, “stop”, 4) == 0) break;
}
close(socket_descriptor);
}
717/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
TCP/IP API
718/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Uvod
5
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 istraživanja ostala je ista
719/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
OSI model sadrži 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 mreže. Slika 1.1. prikazuje svaki sloj s imenom i sadrži kratak opis.
Gledajući sliku, protokoli su kao “blokovi” stavljeni jedan na drugi. Zbog toga se struktura
često naziva stack ili protocol stack.
720/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
OSI Model
Application
Presentation
Transport Application
Network Transport
Isto kao i u OSI modelu, podaci se šalju prema dolje niz stack, kada su poslani na
mrežu, i gore uz stack, kada su primljeni sa mreže. Podaci se u TCP/IP-u šalju niz protokol
stack iz aplikacijskog sloja sve do fizičke mreže. Svaki sloj u stacku dodaje kontrolnu
informaciju da bi potvrdio sigurnu dostavu. Ova kontrolna informacija naziva se zaglavlje
(header) jer je postavljen na početak podatka koji se treba poslati. Svaki sloj tretira sve
informacije koje primi iz sloja iznad kao podatke i stavlja svoje zaglavlje na početak
informacije. Kada su podaci primljeni, događa se suprotno, svaki sloj “skida“ svoje zaglavlje
prije nego pošalje podatke sloju iznad.
TCP TCP
header segment
IP IP
header datagram
Network Network-level
header packet
Slika - Prolaz podataka kroz slojeve
721/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Networking na Linuxu
Linux kernel podržava mnogo različitih mrežnih arhitektura (TCP/IP je samo jedna od
njih), s nekoliko implementiranih alternativnih algoritama za razvrstavanje mrežnih paketa,
uključujući i programe koji olakšavaju sistemskim administratorima “postaviti” router,
gateway, firewall, pa čak i jednostavan World Wide Web server, direktno na nivou kernela.
Trenutni kôd Net-4 je inspiriran orginalnom Berkley Unix implementacijom. Kako i
samo ime govori, ovo je četvrta verzija Linux networkinga. Networking kôd je organiziran u
slojeve (layers), gdje svaki od njih ima vrlo dobro definiran interface. Pošto podaci poslani
mrežom 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 sadrži informacije potrebne svakom sloju.
Mrežne arhitekture
IPS (Internet Protocol Suite) je mrežna arhitektura Interneta, ponekad nazvana TCP/IP
mrežna arhitektura zbog glavnih protokola.
722/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Data link sloj Ethernet protokola se sastoji od dva podsloja, Media Access Control
sloja (MAC) i Logical Link Control sloja (LLC) kako je prikazano na slici.
LLC sublayer
Data link
layer MAC sublayer
723/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Network Network
interface IP header IP payload interface
header trailer
IP datagram
Network-level packet
Slika - IP datagram
Bit: 0 4 8 16 19 31
Source address
20 byte
Destination address
Options + Padding
Slika - IPv4 header
724/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Fragment offset 13 bit Mjesto gdje se fragment nalazi u cijeloj poruci (potrebno za
sastavljanje poruke)
Time to live 1 byte Vrijeme života paketa, tj. Preko koliko prijelaza paket može
proći dok se ne odbaci. Svaki IP router prilikom
prosljeđivanja paketa dekrementira njegovu vrijednost, a ako
je 0, paket se dalje ne prosljeđuje
Protocol 1 byte Koji protokol se nalazi iznad, tj. Čiji paket IP paket sadrži
Header checksum 2 byte Osigurava integritet headera
Source address 4 byte Adresa pošiljatelja poruke
Destination address 4 byte Adresa primatelja poruke
Options and Dodatne opcije i dopuna paketa da bi njegova veličina bila
Padding djeljiva sa 32
Tablica - Opis IPv4 header-a
IPv6 header:
Bit: 0 4 8 16 24 31
Source address
Destination address
40 byte
725/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
TCP protokol
TCP je obostrani spojni protokol koji spaja 2 računala, te osigurava da paketi dolaze na
odredište traženim redoslijedom. TCP koneckija može biti i unutar jednog računala (mnoge
aplikacije komuniciraju na taj način, npr. X window system).
Network Network
interface IP header TCP header Segment interface
header trailer
TCP segment
IP datagram
Network-level packet
Slika - TCP segment
Bit: 0 4 10 16 31
Sequence number
Acknowledgment number
Header lenght Unused Flags Window
20 byte
Options + Padding
Slika - TCP header
Source port 2 byte Socket s kojeg se šalje TCP segment, tj. Definira koja aplikacija na
application layeru šalje segment, source socket zajedno s IP adresom
jedinstveno definira mjesto sa kojeg je segment poslan
Destination port 2 byte Socket na koji se šalje TCP segment, tj. Definira koja aplikacija na
application layeru prima segment, source socket zajedno s IP adresom
jedinstveno definira mjesto sa kojeg je segment poslan
Sequence number 4 byte Redni broj početnog okteta segmenta
Acknowledgment 4 byte Broj slijedećeg okteta korisnikove poruke, ujedno i kumulativna potvrda
number
Data offset 4 byte Početak podataka u paketu, ujedno označava veličinu TCP headera
Reserved 6 bit Rezervirano za buduću uporabu (postavljeno na 0)
Flags 6 bit URG, ACK, PSH, RST, SYN, FIN flagovi
Window 2 byte Veličina buffera pošiljatelja poruke koji služi za primanje poruka.
726/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
20 FTP-data
21 FTP – File Transfer Protocol
22 SSH – Secure Shell
23 Telnet
25 SMTP – Simple Mail Transfer Protocol
80 HTTP – Hypertext Transfer Protocol
110 POP3 – Post Office Protocol version 3
119 NNTP – Network News Transfer Protocol
143 IMAP – Internet Message Access Protocol
194 IRC – Internet Relay Chat
389 LDAP – Lightweight Directory Access Protocol
Tablica - Poznatiji TCP portovi
727/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
UDP protokol
UDP je bespojni protokol gdje nemamo informaciju da li je paket stigao ili nije. UDP samo
prosljeđuje pakete protokolu iznad koji se mora brinuti za njihovo pravilno tumačenje. Kako
nema overheada i odmah prosljeđuje pakete, znatno je brži od TCP-a.
Network Network
interface IP header UDP header Message interface
header trailer
UDP message
IP datagram
Network-level packet
Slika - UDP datagram
Bit: 0 16 31
Source port 2 byte Port sa kojeg se šalje UDP poruka, tj. definira koja aplikacija na
application layeru šalje poruku, polje je opcionalno te ako se ne koristi
može biti 0
Destination port 2 byte Port na koji stiže UDP poruka, tj. definira koja aplikacija na application
layeru prima poruku, zajedno s IP adresom iz IP headera jedinstveno
označava kojem procesu tj. aplikaciji je poruka poslana
Length 2 byte Minimalna duljina je 8 byte-ova a teoretska maksimalna 65,515 (duljina
ip paketa minus headeri). Prava maksimalna duljina je ograničena MTU-
om linka preko kojeg se prenose paketi. Ovo polje je redudantno zato što
se duljina paketa uvijek može izračunati iz duljine IP paketa
Checksum 2 byte Polje koje osigurava integritet podataka
Tablica - Opis UDP header-a
728/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
UDP (User data protocol) je niži nivo protokola od TCP-a. UDP ne garantira dostavu paketa
na odredište. Također UDP ne garantira dostavu paketa u originalnom poretku, odnosno u
onom poretku kojim su bili poslani. Korištenjem UDP socket-a naši programi mogu postati
znatno složeniji nego što to mogu biti TCP socket-i. Evo savjeta i pod kojim uvjetima treba
koristiti UDP socket-e:
- podaci koje trebamo poslati odgovaraju jednom fizičkom UDP paketu. UDP paketi
su veliki 8192 byte-a, ali zbog podataka za header, preostaje nam jos 5000 byte-a
- neki podaci se mogu izgubiti bez narušavanja integriteta sistema
- svaki izgubljeni paket se nemora ponovno slati
Najveća prednost UDP protokola nad TCP-om je ta što je puno brži, ali mu je sigurnost
prijenosa, odnosno dostave paketa mana.
Aplikacijska razina
729/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Klase IP adresa
IP adrese su podjeljene u klase, ovisno o primjeni i veličini organizacije kojoj se
dodjeljuju. Najčešće korištene su A, B i C. Ovim klasama su definirane duljine mrežne adrese
i duljine adrese računala. Klasa A koristi prvih 8 bitova za adresiranje mreže (od kojih je
MSB (most significant bit) postavljen na 0), a zadnjih 24 za adresiranje računala i dodjeljuje
se uglavnom ogromnim organizacijama. Klasa B koristi 16 bitova za adresu mreže (MS bitovi
postavljeni na 10) i 16 bitova za adresu računala i dodjeljuje se uglavnom velikim
organizacijama i tvrtkama (ISP-ovi i slično). Klasa C koristi 24 bita za adresu mreže (MS
bitovi postavljeni na 110), a 8 za adresu računala. Dodjeljuje se većini organizacija i tvrtki.
Ukoliko postoji potreba za više od 254 ali znatno manja od 65.534 računala, bolje je zakupiti
više adresa klase C nego jednu B jer time štedimo adrese. Klasa D ima 4 najznačajnija bita
postavljena na 1110, dok klasa E 4 najznačajnija 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 računala postavimo na 0, dobili smo adresu mreže, a ako ih
sve postavimo na 1 dobili smo broadcast adresu.
Npr.
199.10.2.0 – adresa mreže
199.10.2.255 – broadcast adresa mreže
730/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Loopback adrese
Za testiranje i mrežnu komunikaciju između aplikacija na istom računalu koristi se
specijalna loopback mrežna adresa 127.0.0.0.
Bilo koja regularna adresa na toj mreži je adresa samog računala, najčešće se koristi
127.0.0.1.
Privatne IP adrese
Za mreže koje se ne planiraju spajati na internet, ili se planiraju spajati na internet
pomoću jednog gatewaya koji koristi NAT (Network Adress Translation, poznato jos kao i IP
Masquarade, IP adresa se u tom slućaju maskira IP adresom gatewaya) predviđene su privatne
IP adrese. Zapravo, za lokalnu mrežu mozemo koristiti bilo koje adrese, ali bolje je koristiti
privatne da ne bi imali problema sa slučajnim routanjem tih paketa prema van, dok se privatne
IP adrese teoretski ne routaju na Internetu.
Subnet maska je jednake velčcine kao IP adresa, tj. 32 bita. Adresa mreže je označena sa
bitom 1, a adresa računala sa bitom 0, tako da ako recimo klasu B želimo podijeliti na 256
mreža dobijemo subnet masku 255.255.255.0.
731/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
N = network
H = host
Ovako izgleda IP adresa B klase:
NNNNNNNN.NNNNNNNN.HHHHHHHH.HHHHHHHH
Trenutna subnet maska je:
11111111.11111111.00000000.00000000
Kako je nama potrebno 256 mreža C klase, subnet maska će sad izgledati ovako:
11111111.11111111.11111111.00000000 ili 255.255.255.0
Primjer 2:
Ako od adrese računala u klasi C uzmemo 3 bita možemo kreirati 8 mreža 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 mreža sa slijedećim 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Usmjeravanje (Routing)
Kako fizički nije moguće napraviti jednu veliku mrežu na koju će se spojiti sva
računala, koriste se usmjerivači (router). Usmjerivač je uređjaj koji ovisno o svojoj routing
tablici pakete sa jednog mrežnog sučelja proslijeđuje na drugo sučelje. Zapravo većina
operativih sustava unutar samog TCP/IP stacka ima implementiranu osnovnu verziju
usmjerivača kojeg onda konfiguriramo tako da mu upišemo adresu gatewaya (routera). U tom
slučaju sve pakete za koje računalo ne zna gdje bi poslalo šalje na gateway. Napredniji
operativni sustavi (svi UNIXoidi, noviji Windowsi) imaju integriran pravi usmjerivač. Kako
na velikim mrežama postoji više puteva od jednog do drugog mjesta, tj. više IP adresa,
usmjerivači tu uglavnom koriste neki od protokola za dinamičko usmjeravanje (rutanje).
733/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
734/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Mrežno programiranje
komunikacijski link
klijent server
klijent
...
klijent server
...
klijent
735/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Klijent – server mogu se nalaziti u istoj lokalnoj mreži, na primjer Ethernet, ali također mogu
biti i u različitim mrežama, što je u većini situacija slučaj, povezanim preko wide area
network-a (WAN) koristeći routere.
Slike prikazuju klijent – server vezu unutar iste mreže i klijent – server vezu kada se nalaze u
različitim mrežama.
application protocol
user Web Web
process klijent server application layer
TCP protocol
IP IP network layer
Ethernet protocol
Ethernet Ethernet
driver driver datalink layer
actual flow between klijent and
Ethernet
Bitno je napomenuti, iako izgleda da klijent i server komuniciraju koristeći application layer,
transport layer komunicira koristeći TCP itd., da u stvarnosti to nije tako, već se sve spušta na
najnižu razinu, a zatim se vrši prijenos podataka od najniže razine do odgovarajuće razine.
736/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
klijent server
application application
LAN LAN
router router
WAN
router router router router
737/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Minimalan broj potvrdnih paketa za ovu izmjenu je tri i zbog toga se uspostava TCP
veze i naziva three – way handshake.
Slika 2.1. pokazuje opisan postupak.
klijent server
socket SYN J
socket, bind,listen
connect (blocks)
accept (blocks)
(active open)
SYN K, ack J+1
Raskidanje veze
Dok je za uspostavljanje veze bila potrebna tri segmenta, za raskid veze su potrebna
četiri segmenta.
1. Jedna aplikacija prva zove close, kaže se da je kraj izvođenja active close. Ta
strana šalje FIN segment, što znači da je završeno slanje podataka.
2. Druga strana koja primi FIN izvodi passive close. Primljeni FIN je potvrđen od
TCP-a. Primitak FIN-a se također prosljeđuje aplikaciji kao end-of-file (EOF)
(nakon svakog podatka koji je možda već u redu da ju primi aplikacija), budući da
primitak FIN-a znači da aplikacija neće primit nit jedan suvišan podatak preko
veze.
3. Malo kasnije aplikacija koja primi end-of-file će zatvoriti (close) socket. To
uzrokuje da TCP pošalje FIN.
4. TCP na sistemu koji je primio taj konačni FIN (kraj sa active close) potvrđuje FIN.
738/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
klijent server
close FIN M
(active close) (passive close)
read return 0
ack M + 1
close
FIN N
ack N+1
Socketi
739/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
ćete pročitati '1,2,3'. Također sve moguće greške 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 može i ne mora stići, ne moraju stići 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 držati otvoren cijelo vrijeme nego se samo šalju paketi sa odredišnom
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, možemo doći do www stranice preko Web servera
koristeći socket za mrežnu komunikaciju. Da bi uspostavili vezu sa www serverom koristeći
Telnet program, neka je stranica na koju se spajamo www.imestranice.com, tada ćemo
prilikom spajanja navesti i port koji označava da se spajamo na www server, a on je 80. Port
80 je standardni port dodijenjen od IANA-e na kojem 'sluša' (listen) web server.
% 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
BSD socketi
Generalno gledajući, svaki operacijski sustav mora definirati odgovarajući Application
Programming Interface (API) između korisničkog programa i “mrežnog kôda”. Linux mrežni
API je baziran na BSD socketima. Predstavljeni su u Berkley UNIX 4.1cBSD i dostupni su u
gotovo svakom operacijskom sustavu sličnom Unixu.
Socket je dvosmjerna komunikacijska jedinica koja može biti korištena za
komuniciranje sa drugim procesima na istom računalu ili sa procesom pokrenutim na drugom
računalu. Internet programi kao Telnet, rlogin, talk ili World Wide Web koriste sockete.
Socket je komunikacija između tzv. ulaznih vrata i krajnje točke kanala koji povezuje dva
procesa. Podaci se pošalju na “ulazna vrata” i nakon nekog vremena pojave se na drugoj
strani (izlazu). Komunikacijski procesi mogu biti na različitim računalima. Mrežni kôd
Kernela prosljeđuje podatke između krajnjih točaka.
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
uključen u polju u.socket_i sockfs inode-a.
741/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
INET socketi
INET socketi su strukture podataka tipa struct sock. Svaki BSD socket koji
pripada IPS mrežnoj arhitekturi sadrži adrese INET socketa u sk polju socket objekta.
INET socketi su potrebni jer socket objekti (opisujući BSD sockete) uključuju
samo polja koja su značajna za sve mrežne arhitekture. Ali, kernel mora također zapamtiti i
nekoliko drugih informacija za svaki socket bilo koje mrežne 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 također definira neke metode specifične tipu transporta protokola
(TCP ili UDP). Metode spremljene u strukturi podataka tipa proto:
742/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
sock objekt sadrži otprilike 80 polja od kojih su mnoga pokazivači na druge objekte, tablice,
metode ili druge strukture podataka.
Koncepti socketa
Kada kreiramo socket moramo definirati tri parametra:
- način komuniciranja (communication style),
- namespace,
- i protokol.
Communication style
Način 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 određuje kako su ti paketi podržani i kako
su adresirani od pošiljaoca do primatelja.
- Connection style garantira isporuku svih paketa po redu kako su poslani. Ako su paketi
izgubljeni ili je promijenjen redoslijed zbog problema na mreži, primatelj automatski
zahtjeva njihovo ponovno slanje od pošiljaoca. Connection-style socket je kao telefonski
poziv: adresa pošiljatelja i primatelja je fiksna na početku komunikacije kada je veza
uspostavljena.
- Datagram style ne garantira isporuku ili redoslijed dolaska paketa. Paketi mogu biti
izgubljeni ili promijenjenog redoslijeda zbog problema na mreži. Svaki paket mora biti
označen sa svojom destinacijom i nije zagarantirano da će biti isporučen. Sustav garantira
samo “najbolju volju”, tako paketi mogu nestati ili stići u krivom redoslijedu u odnosu na
to kako su poslani. Datagram-style sockets način slanja je moguće usporediti sa slanjem
pisma poštom: pošiljatelj specificira adresu primatelja za svaku individualnu poruku.
Namespace
Socket namespace određuje kako su zapisane adrese socketa. Adresa socketa određuje
jedan kraj “veze” socketa. Na primjer, adrese socketa u “local namespaceu” su obična imena
datoteka. U “Internet namespaceu” adresa socketa je sastavljena od Internet adrese (Internet
743/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Protocol adress ili IP address) računala spojenog na mrežu i broj porta. Broj porta raspoznaje
višestruke sockete na istom računalu.
Protokol
Protocol specificira kakvim socketom se podaci prenose.
Neki protokoli su TCP/IP, primarni mrežni protokol korišten kod Interneta; Apple Talk
mrežni protokol; UNIX lokalni komunikacijski protokol.
Socket buffer
Svaki pojedini paket poslan kroz mrežnu jedinicu sastoji se od nekoliko dijelova. Svi
slojevi mreže, dodaju neke kontrolne informacije na osnovni payload, tj. podatak koji se
prenosi putem mreže. Format paketa se mijenja prolaskom kroz TCP/IP slojeve.
744/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Serveri
Životni ciklus servera ovisi o kreiranju connection-style socketa, dodjelivši mu adresu
na njegov socket, postavljajući poziv na listen koji omogućuje veze do socketa,
postavljajući pozive na accept dolazećim vezama, i na kraju zatvarajući socket. Podaci
nisu čitani i pisani direktno preko server socketa. Umjesto toga program svaki puta prima
novu vezu; Linux kreira zasebne sockete za korištenje prijenosa podataka preko te veze.
U ovom odlomku ćemo objasniti bind, listen i accept. Adresa mora biti
dodjeljena socketu servera koristeći bind tako da se klijent može spojiti na taj socket. Prvi
argument bind-a je socket file descriptor. Drugi argument je pokazivač na adresnu strukturu
socketa. Treći argument je dužina 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 određuje koliko je
prihvaćenih veza u ”redu” (queue). Ako je ”red” pun, dodatna spajanje biti će odbijena. To ne
ograničava ukupan broj veza koje server može obraditi. Ograničava jedino broj klijenata koji
se pokušavaju spojiti a nisu još bili prihvaćeni.
Server prihvaća 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. Treći argument je dužina adresne
strukture socketa u byte-ovima. Server može koristiti klijentovu adresu da utvrdi hoće li
stvarno komunicirati sa klijentom. Poziv za prihvaćanje kreira novi socket za komunikaciju sa
klijentom i vraća odgovarajući 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
koristimo recv. Koristimo iste argumente kao read, plus dodatni FLAGS argument.
Flag MSG_PEEK omogućava čitanje podataka ali ne i micanje iz ulaznog ”reda”.
Lokalni socketi
Proces spajanja socketa na istom računalu može 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 korištene samo kod
kreiranja veza.
Socketima je ime specificirano u struct sockaddr_un. Moramo postaviti
sun_family polje na AF_LOCAL, čime određujemo da se radi o lokalnom namespaceu.
Polje sun_path određuje ime datoteke koja će se koristiti i može biti, najviše, 108 byte-
ova dugačko. Može biti korišteno 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 različita računala mogu dijeliti iste file-sisteme, samo
procesi pokrenuti na istom računalu mogu komunicirati sa lokalnim namespace socketima.
Jedini dozvoljeni protokol za lokalni namespace je 0. Zbog toga što postoji u file-
sistemu, lokalni socket se može izlistati kao i datoteka. Na primjer:
$ls –l /tmp/socket
746/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
IPv4 socket adresna struktura, često nazivana ″Internet socket adresna struktura″, je
nazvana sockaddr_in i definirana je u <netinet/in.h> header-u.
struct sockaddr_in {
uint8_t sin_len; /* lenght of structure (16) */
sa_family_t sin_family; /* AF_INET */
in_port_t sin_port; /* 16-bit TCP or UDP port number */
/* network byte ordered */
struct in_addr sin_addr; /* 32-bit IPv4 adress */
/* network byte ordered */
char sin_zero[8]; /* unused */
};
Socket adresna struktura se uvijek šalje po referenci, kada je prosljeđujemo kao argument bilo
koje socket funkcije.
Kako bi se ostvarila generička socket adresna struktura, neovisna o protokolu bilo je potrebno
osmisliti kako će se kroz jednu funkciju slati strukture različitih protokola. U ANSI C-u
rješenje bi bilo vrlo jednostavno korištenjem void * (void pointera), koji je generički tip
pointera. Ali kako su socket funkcije rađene prije nego što je donešen ANSI C, bilo je
potrebno pronaći nekakvo rješenje, koje je izabrano 1982. godine kao generička socket
adresna struktura i koja je definirana u <sys/socket.h> header-u a izgled strukture je
slijedeći:
struct sockaddr {
uint8_t sa_len;
sa_family_t sa_family; /* address family: AF_xxx value */
char sa_data[14]; /* protocol-specific address */
};
747/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Socket funkcije su definirane tako da uzimaju pointer na generičku strukturu, kao što je
prikazano u ANSI C prototipu funkcije za bind funkciju:
Ovo dređuje da za svaki poziv ove funkcije mora se cast-ati pointer socket adresne strukture
specifičnog protokola na pointer generičke socket adresne strukture.
Na primjer,
int sockfd;
struct sockaddr_in serv;
...
bind (sockfd, (struct sockaddr *) &serv, sizeof(serv));
(unused)
interface name
128-bit and
IPv6 adress link-layer address
pathname
fixed lenght (16 bytes) (up to 104 bytes)
variable lenght
variable lenght
748/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
socket funkcija
Za izvršavanje mrežne komunikacije, prvu stvar koju proces mora napraviti je pozvati
funkciju socket, odrediti tip komunikacijskog protokola (TCP koristeći Ipv4, UDP koristeći
Ipv6, Unix protokol, itd.).
#include <sys/socket.h>
family Description
AF_INET IPv4 protocols
AF_INET6 IPv6 protocols
AF_LOCAL Unix domain protocols
749/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
family Description
SOCK_STREAM stream socket
SOCK_DGRAM datagram socket
SOCK_RAW raw socket
Nisu podržane sve kombinacije parametara. Tablica prikazuje pregled kombinacija koje su
podržane.
AF_ prefiks dolazi od ″address family″, a PF_ prefiks dolazi od ″protocol family″. U
povijesti je bila intencija da jedna porodica protokola može podržavati više adresnih porodica
i za to je korištena PF_ vrijednost za kreiranje socket-a, dok je AF_ vrijednost korištena u
socket address strukturama. Trenutno je PF_ vrijednost postavljena na AF_, ali nema
garancije da se to u budućnosti neće promijeniti.
750/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
connect funkcija
#include <sys/socket.h>
int connect (int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);
sockfd je socket deskriptor koji nam vrati funkcija socket. Drugi i treći argument je pointer
na socket address strukturu i veličina te strukture.
socket address mora sadržavati 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 slučaju TCP socket-a, veza se inicijalizira u tri sinhronizacijska koraka (three – way
handshake).
Ako se veza uspostavi funkcija vraća nulu, inače ako se dogodi error ili se veza ne može
uspostaviti funkcija vraća -1.
bind funkcija
#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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
listen funkcija
#include <sys/socket.h>
listen funkcije se uobičejeno zove nakon oba poziva socket i bind funkcija i mora biti
752/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
accept
arriving
SYN
klijent server
RTT
connect returns ack K+1
753/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
accept funkcija
accept funkcija zove TCP server, prihvaća slijedeću završenu vezu iz reda completed
connection queue. Ako je red završenih veza prazan, proces prelazi u sleep stanje (blocking
socket). Kada server prihvati novu vezu, kreira se i novi socket preko kojeg se nastavlja
komunikacija između servera i klijent-a.
#include <sys/socket.h>
754/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
close funkcija
dalje pokušavati (neko određeno vrijeme) poslati odnosno primiti podatke. close funkcija se
ponaša kao dekrementirajuća, dok se funkcija accept ponaša kao inkrementirajuća 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Osnovna ideja je slijedeća: server mora biti cijelo vrijeme u radu i ″osluškivati″ da li
ima clienat-a koji se žele spojiti na server (kao čovjek na informacijama, čeka da zazvoni
telefon). Ako postoji netko tko se želi spojiti na server, server mu to mora omogućiti (čovjek
na informacijama podiže slušalicu i preusmjerava poziv na odgovarajuću liniju kojom će se
vršiti komunikacija). Ako postoji još linija koje se žele spojiti, server će im to omogućiti samo
u slučaju da nisu sve linije već zauzete, to je u našem slučaju broj koji smo naveli u backlog
kod listen funkcije. Ako su sve linije zauzete i ne možemo prihvatiti niti jednu nadolazeću
vezu, tada klijent-ova strana javlja klijent-u da je server zauzet ili da se ne može spojiti na
određeni server. Klijent-ova strana može imati definirani vremenski interval u kojemu će se
klijent pokušavati spojiti na server.
756/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
puts(buffer);
socket-server.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
memset(&servaddr, 0, sizeof(servaddr));
/* informacije servera */
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8000);
servaddr.sin_addr.s_addr = INADDR_ANY;
/* osluškivanje konekcije */
if (listen(sockfd, 2) == -1) {
printf("listen() error!\n");
return 3;
}
757/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
return 0;
}
Prvo se pokreće serverov program koji kreira socket i zatim čeka na klijent-a sa funkcijom
accept. Kada se klijent spoji na serverov socket, accept funkcija vrati novi socket preko
kojega će se vršiti komunikacija. Nakon toga server klijent-u šalje svoje trenutno vrijeme i
završava sa radom. Klijent dobiva informaciju od servera i također završava sa radom.
Konkurentni server
Ako želimo da naš server program bude što sličniji pravom serveru tada bi accept funkciju
stavili u beskonačnu while petlju zajedno sa send funkcijom koja šalje klijent-u vrijeme
servera. Sada je sasvim očit 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 rješenje
ovoga problema, a to je konkurentni server, server koji može u jednom trenutku izmjenjivati
podatke sa više klijenata. Konkurentan server radi na način da svaku komunikaciju sa
pojedinim klijentom vrši u zasebnom thread-u. Pomoću 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Primjer prikazuje kako server komunicira sa više klijenata u isto vrijeme pomoću thread-ova.
server-thread.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
#include <pthread.h> /* thread definicije */
return NULL;
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(7000);
servaddr.sin_addr.s_addr = INADDR_ANY;
759/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
addr_sz = sizeof(cliaddr);
printf("Server ceka na klijent-a!\n");
while (1) {
/* za svaku novu konekciju dinamički alociramo resurse */
int *clifd = (int *) malloc (sizeof(int));
return 0;
}
Klijent-ov kod se nije mijenjao, on se i dalje spaja na server kao i prije promjene, samo sada
se ne može dogoditi zastoj, jer server svaku novu konekciju pokreće u zasebnom thread-u.
Sad server može biti samo zauzet ako se dosegne maksimalan broj thread-ova koje server
može opsluživati.
Kod korištenja 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 sruši, klijenti koji se obrađuju u zasebrni thred-
ovima, 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 nešto više osnovnih resursa. Za kreiranje procesa pod UNIX-om koristi se
funkcija fork().
Jedini način da kreirate novi proces pod UNIX-om je korištenjem fork funkcije.
Njezin prototip je vrlo jednostavan i lako za koristiti, samo je osnovno razumijevanje malo
složenije.
#include <unistd.h>
760/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Ako do sada niste vidjeli ovu funkciju, najteži dio za shvatiti je da se fork funkcija poziva
jednom, a da njezin poziv izaziva vrijednosz dva puta. Vraća jednom rezultat pozivajućem
procesu (roditelju) i to ID novonastalog procesa, i jednom vraća vrijednost novonastalom
procesu (djetetu) i to vrijednost nula. Vraćena vrijednost nam ujedno služi da bi znali da li se
naš program trenutno izvršava kao roditelj ili kao dijete. Ono što je najznačajnije kada
koristimo fork funkciju je to da svi deskriptori otvoreni prije samog poziva fork funkcije su
dijeljeni između roditelja i dijeteta.
Dva tipična načina korištenja fork funkcije:
1. Proces radi vlastitu kopiju tako da jedna kopija može upravljati osnovnim
operacijama, dok druga kopija može služit kao pomoćni task za obavljanje nekih
drugih poslova.
2. Proces želi izvršavati drugi program. Jedini način za kreiranje novog procesa je
pozivanjem fork funkcije. Proces prvo poziva fork da bi kreirao vlastitu kopiju, a
tada jedna od kopija (najčešće proces djeteta) poziva exec da bi zamijenio sebe sa
novim programom. To je tipično za shell programe.
#include <unistd.h>
int execl (const char *pathname, const char *arg0, ... /* (char *) 0 */ );
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*/ );
761/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Kako tema ovoga seminara nije interprocesna komunikacija, već TCP/IP API i socket-i, tako
da se nećemo upuštatit u detaljna razmatranja ovih funkcija. Za detalje pogledajte neku od
odgovarajućih referenci ili man stranice.
Jedina bitna napomena, i to vrlo važna, je to da se često u ponekim knjigama spominje da
upravo ovih šest funkcija služe za kreiranje novih procesa ili pokretanje novih programa, to je
donekle točno, ali može biti vrlo krivo shvaćeno. 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 pokušava 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 <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
#include <signal.h>
#include <sys/wait.h>
int main(void)
{
int sockfd, client;
struct sockaddr_in servaddr, cliaddr;
char buffer[64] = {0};
char * begin;
int address_size;
time_t tmp_time;
pid_t childpid; /* variable to store the child's pid */
/* informacije servera */
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8000);
servaddr.sin_addr.s_addr = INADDR_ANY;
762/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
{
printf("bind() error!\n");
return 2;
}
/* osluškivanje konekcije */
if (listen(sockfd, 2) == -1)
{
printf("listen() error!\n");
return 3;
}
sleep(10);
strcpy(buffer, "Zdravo!!!\n");
send(client, buffer, strlen(buffer), 0);
return 0;
}
763/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
- "lutajući" thread-ovi mogu naškoditi drugim thread-ovima unutar istog procesa zato
što thred-ovi dijele isti virtualni memorijski prostor i druge resurse. Na primjer, jedan
thread može pisati po neautoriziranom dijelu memorije, koja je možda dostupna u
drugom thread-u unutar istog procesa. Sa druge strane "lutajući" procesi to ne mogu
zato što svaki proces ima vlastitu kopiju memorijskog prostora.
764/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
strcpy(buff, param1);
765/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
766/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
return 0;
}
/* informacije servera */
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8000);
servaddr.sin_addr.s_addr = INADDR_ANY;
767/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
return 2;
}
/* osluskivanje konekcije */
if (listen(sockfd, 2) == -1)
{
printf("listen() error!\n");
return 3;
}
return 0;
}
768/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Klijent:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/socket.h>
int nRet=0;
if (argc != 3)
{
printf("usage: application celsius hostname\n");
return EXIT_FAILURE;
}
he = gethostbyname(argv[2]);
if (he == NULL)
{
printf("Error in gethostbyname\n");
return EXIT_FAILURE;
}
769/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
printf("Error in recvfrom\n");
return EXIT_FAILURE;
}
shutdown(sockfd,2);
return EXIT_SUCCESS;
}
Server:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <netinet/in.h>
770/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
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;
printf("%s\n", data);
}
}
shutdown(sock,2);
printf("User requested program to halt.\n");
return EXIT_SUCCESS;
}
771/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
/* Kreiramo socket. */
socket_fd = socket (PF_LOCAL, SOCK_STREAM, 0);
/* Osluškujemo konekcije. */
listen (socket_fd, 5);
772/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
close (socket_fd);
unlink (socket_name);
return 0;
}
Klijent:
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
/* Kreiramo socket. */
socket_fd = socket (PF_LOCAL, SOCK_STREAM, 0);
/* Spremamo serverovo ime u socket adresnu strukturu. */
name.sun_family = AF_LOCAL;
strcpy (name.sun_path, socket_name);
/* Spajamo se na socket. */
connect (socket_fd, &name, SUN_LEN (&name));
/* Pišemo tekst sa komandne linije na socket. */
write_text (socket_fd, message);
close (socket_fd);
return 0;
}
773/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Za znatiželjne čitatelje (oni koji žele znati više) dat je jedan jednostavan primjer
komunikacije klijent – server pod windows-ima.
Server program otvara socket na portu 3490 i čeka da se netko spoji na njega. Nakon
što se neki klijent spoji na socket ispisuje se string "Hello world!" i zatvara socket.
Server:
/*
** server.c -- a stream socket server demo
*/
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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;
}
WSACleanup();
return 0;
}
774/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Klijent:
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);
}
buf[numbytes] = '\0';
printf("Received: %s",buf);
closesocket(sockfd);
WSACleanup();
return 0;
}
775/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Majk Jednaković
UDP
USER DATAGRAM PROTOCOL
776/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
U OSI modelu ovaj se protokol nalazi iznad IP protokola. UDP je zamišljen s ciljem
omogućavanja prijenosa podataka i razmjene informacija u mrežama s preklapanjem paketa
(packet – switched networks ) kao što je Internet. UDP pretpostavlja da se kao protokol ispod
njega koristi IP protokol.
UDP omogućava aplikacijskim programima da međusobno razmjenjuju informacije i
poruke uz upotrebu minimalnih protokolnih mehanizama. Kako bi se omogućila
komunikacija između različitih aplikacija uvodi se pojam porta. Protokol nije konekcijski
orijentiran što znači da dostava paketa nije garantirana. Isto tako se ne provjerava dupliciranje
podataka. Isto tako nema provjere redoslijeda pristiglih podataka tako da aplikacije koje to
zahtijevaju moraju koristiti TCP protokol ( Transmission Control Protocol ).
777/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Aplikacijski sloj (Application Layer) opisuje kako će stvarni posao biti određen na
izvornom i odredišnom računalu.Ovdje se odvajaju upravo one stvari koje korisnika najviše
zanimaju:
Prenošenje elektroničke pošte, prenošenje datoteka, pristup World Widw Webu.
Ovdje se izvršavaju aplikacije pojedinih mrežnih usluga.
Prezentacijski sloj (Presentation Layer) opisuje sintaksu podataka koji se prenose, te
obavlja neke predradnje za sljedeći viši sloj.Pretvara datoteke između različitog formata, brine
se o kompresiji i dekompresiji podataka, i slično. Npr. Ovaj sloj opisuje kako će broj sa
pomičnim zarezom biti prenesen na drugo računalo koje radi na drugačijim matematičkim
formatima.
Sloj sesije-sastanka ili dijaloga (Session Layer) opisuje uspostavljanje dijaloga
između ishodišnog i odredišnog računala.Zadužen je za uspostavljanje veze (konekcije) s
drugim računalom te prekidanjem uspostavljene konekcije.
Transportni sloj (Transport Layer) opisuje kvalitetu i prirodu podataka koji prenose
kroz mrežu.Npr ovaj sloj opisuje kako će biti izvršena retransmisija neispravno primljenih
paketa na odrediste.Brine se o dobrom redoslijedu pristizanja paketa na odredište.U internet
mreži to su protokoli TCP i UDP protokoli
Mrežni sloj (Network Layer) opisuje kako se niz podataka razmjenjuje između bilo
koja dva čvora mreže.Npr. ovaj sloj definira adresiranje i usmjeravanje paketa kroz Internet
mrežu.U suradnji sa slojem 2.određuje koji je put najoptimalniji za prijenos podataka do
odredišta.U Internet mreži to je IP protokol.
Sloj podatkovne veze (Data Link Layer) opisuje logičku organizaciju podatkovnih
bitova za prijenos kroz medije.Npr. ovaj sloj definira strukturu okvira i paketiranje podataka,
adresiranje paketa, metodologiju određivanja sume, i slično.
Fizički sloj (Physical Layer), opisuje fizikalne karakteristike različitih
komunikacijskih medija kroz elektroničke karakteristike signala koji « nose « podatke. (Npr.
Ethernet kablove, utičnice, završetke, naponske razine signala, modeme i modemske
standarde, i dr).
Mrežni sloj (Network Layer) opisuje kako se niz podataka razmjenjuje između bilo
koja dva čvora mreže.Npr. ovaj sloj definira adresiranje i usmjeravanje paketa kroz Internet
778/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
1. 2. 3. 4. 5. 6. 7.
779/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Aplikacijski: Transportni:
Talnet-udaljeni terminal TCP-Transportni protokol
FTP-prijenos podataka (File Transfer Protocol) (Transmission Control Pro)
SMTP-elektronička posta(Simple Email Pro) UDP-brzi datagramski protokol
rcp-udaljeno kopiranje datoteka (remonte (User Datagram Protocol)
file copy)
rsh-udaljeno procesiranje(remonte shell) Mrežni:
rlogin-udaljeno logiranje(remonte login) IP-Internet Protokol
TFTP-trivijalni prijenos datoteka(Trivial ICMP-protokol za kontrolu
Internet File Protocol) poruka(Internet Control Massage
Pro)
HTTP-web protokol(Hipertext Transfer IGMP-(Internet Grup Mgmnt Pro)
Protocol)
ARP-adresni protokol(Addres
RTP-prijenos u realnom vremenu(Real time Rezolution Protocol)
Transfer Protocol) RARP-Rezervni adresni protokol
DHCP-protokol za dinamičku konfiguraciju (Reverse Rezolution Pro)
računala(Dinamic Host Configuration Pro) RIP-usmjerivački protokol
NTP-imenik mrežnih domena(Domain (Routing Information Pro)
Name System) BGP-Protokol rubnog mosta
SNMP-protokol za upravljanje mrežnim (Border Getway Protocol)
uređajima(Simple Network Mangement Pro) SLIP/CSLIP-serijski protokoli
(Serial line IP/Compresed SLIP)
Podatkovni i Fizički:
780/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Telnet
Telnet pruža mogućnost rada na udaljenog računalu. Korisnik se s jednog računala
može logirati (prijaviti) na drugo i ponašati se kao da je točno na tipkovnici drugog računala.
Ova veza može biti stvorena u lokalnoj mreži ili između bilo koje dvije na svijetu, dokle god
korisnik ima dopuštenje ulogirati se na udaljeno računalo.
Telnet se može koristiti za rad na računalima po cijeloj zemlji. Obično se ne koristi
osim u LAN / WAN kontekstu, ali postoje računala koja dopuštaju 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
782/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Internet Protocol
Brine se za prijenos paketa podataka koje je složio TCP ili UDP. Koristi set unikatnih
adresa za svaki uređaj na mreži da bi utvrdio smjer i odredište podatka.
783/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
CLIENT-SERVER KOMUNIKACIJA
TCP/IP je skup protokola koji se koristi za povezivanje računala i srodnih uređaja. Iako
unutar njega postoji više protokola promatrat ćemo samo dva, TCP(Connection oriented) i
UDP (Connectionless) te ćemo pričati 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, možemo reći da je socket pristupna točka (definirana
određenim parametrima) koja služi za komunikaciju između aplikacija na različitim
računalima.
Karakteristike:
Bespojna uluga (Connectionless) – UDP protokol
osnovna jedinica prijenosa je datagram
bespojna veza
ne garantira se isporuka pojedinog datagrama, ali se također može desiti
isporuka više identičnih kopija istog datagrama
ne garantira se očuvanje redoslijeda poslanih datagrama
nema kontrole protoka
Spojna usluga:
pouzdanost: svaki niz poslanih okteta će sigurno stići na odredište, osim u
slučaju prekida veze ili neke druge greške na poslužitelju o čemu će
aplikacija pošiljatelj biti obaviještena
kontrola toka – nije moguće zagušenje primatelja od strane pošiljatelja
očuvani redoslijed isporuke
Svaki socket je zapravo deskriptor (socket descriptor) što je cijeli broj. Osnovna
struktura koju funkcije očekuju je
----------------------------------------------------------------------------------------------------------
struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
784/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
785/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Adrese koje se koriste i stavljaju unutar ove strukture su 32-bitne adrese. U slučaju da
imamo (s našeg gledišta) standardni zapis adrese (npr. 161.53.119.118) ona se mora pretvoriti
u 32-bitni broj za što možemo iskoristiti funkciju :
786/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Redoslijed pozivanja
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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/socket.h>
sockfd je socket file deskriptor kojeg je vratio poziv funkcije socket(). my_addr je
pokazivač na strukturu struct sockaddr koja sadrži informacije o adresi i pristupnom broju
(port). Portovi ispod 1024 su rezervirani. Moguće je koristiti bilo koji broj porta do 65535 ako
već nije zauzet od strane nekog drugog programa. U slučaju da se za port ostavi 0 veže se na
bilo koji broj koji jezgra ili funkcija odredi. addrlen je veličina prethodne strukrure i može se
postaviti na sizeof(struct sockaddr).
Dok poslužitelj mora vezati socket na neki port i osluškivati, klijent se kod spojne
usluge treba konektirati na neki određeni stroj na neki određeni port i to pomoću funkcije
connect
788/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
#include <sys/types.h>
#include <sys/socket.h>
sockfd je socket file deskriptor kojeg je vratio poziv funkcije socket(), serv_addr je
struktura struct sockaddr koja sadrži odredišnu IP adresu i odredišni port, a addrlen je veličina
prethodne strukrure i može se postaviti na sizeof(struct sockaddr).
Primijetimo da klijent ne zove bind() jer ga ne zanima lokalni port, već samo onaj
odredišni. Da bi se klijent spojio na odredišni stroj, tamo mora netko i čekati i osluškivati, za
što služi funkcija listen
sockfd je socket file deskriptor kojeg je vratio poziv funkcije socket(),a backlog je broj
dozvoljenih konekcija u redu čekanja. Konekcije se prihvaćaju funkcijom accept().
#include <sys/socket.h>
int send(int sockfd, const void *msg, int len, int flags);
int recv(int sockfd, void *buf, int len, unsigned int flags);
789/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
int sendto(int sockfd, const void *msg, int len, unsigned int flags,
const struct sockaddr *to, int tolen);
int recvfrom(int sockfd, void *buf, int len, unsigned int flags,
struct sockaddr *from, int *fromlen);
Želimo li zatvoriti socket to možemo učiniti pomoću close, ili ako želimo malo više
kontrole (npr. zatvoriti ga samo u jednom smjeru) shutdown
close(sockfd);
int shutdown(int sockfd, int how);
#include <sys/socket.h>
#include <unistd.h>
790/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Korištenje DNS-a
#include <netdb.h>
791/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
U slučaju da želimo unutar jednog programa osluškivati na više portova očito ne može
(ne smijemo) ostati blokirani na accept. Iako je socket file deskriptor, pa možemo podesiti
(fnctl) da nije blokirajući, bolja varijanta je upotrijebiti select (vidi prethodne vježbe)
Client
import java.io.*;
impoert java.net.*;
792/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Server
import java.io.*;
import java.net.*;
793/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
Sockets in Perl
Perl has a C-like interface to sockets. It also has a higher level one using the IO::Socket
module. This example is a client to fetch documents from a Web server.
#!/usr/bin/perl -w
use IO::Socket;
unless (@ARGV > 1) { die "usage: $0 host document ..." }
$host = shift(@ARGV);
$EOL = "\015\012";
$BLANK = $EOL x 2;
foreach $document ( @ARGV ) {
$remote = IO::Socket::INET->new( Proto => "tcp",
PeerAddr => $host,
PeerPort => "http(80)",
);
unless ($remote) { die "cannot connect to http daemon on $host" }
$remote->autoflush(1);
print $remote "GET $document HTTP/1.0" . $BLANK;
while ( <$remote> ) { print }
close $remote;
}
Here is a server that will execute some commands and return a result
#!/usr/bin/perl -w
use IO::Socket;
use Net::hostent; # for OO version of gethostbyaddr
794/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UDP
795/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
Boris Ivanišević
796/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
UVOD
797/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
Filozofija unix file sistema je vrlo jednostavna – sve unutar njega se tretira kao file.
Koliko god ta pretpostavka izgleda jednostavno ona u sebi sadrži moć koju je teško na prvi
pogled uočiti. Ovim poglavljem ću pokušati pokazati da je to tako. Isto tako treba naglasiti da
takva pretpostavka na prvi pogled za sobom vuče niz prednosti – jednostavnost upotrebe,
jednoznačno definirani pristup svim resursima operativnog sustava.
Boot blok sadrži osnovni program odnosno pokazivač na njega koji pokreće podizanje
operativnog sustava. Super blok nosi informacije o file sistemu, njegovu veličinu, listu
slobodnih inodeova, odnosno listu slobodnih data blokova (zapravo broj slobodnih blokova i
pokazivač na slijedeći slobodni blok) te flag za označavanje modifikacije super bloka. Tu je
još i polje inodeova i data blokova, gdje su inodeovi i fileovi fizički zapisani.
Što je inode
U unix file sistemu inode igra veliku ulogu. Sadržava sve relevantne informacije o
nekom file-u. Zapravo bi ga mogli shvatiti kao posrednika između operativnog sustava i
fizičkih podataka. Slika 2.3.1. pokazuje okvirnu strukturu inode-a:
798/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
Tip i modovi
User i group ID
Broj hard linkova
Veličina u bajtovima
Direktni pointer 1
Direktni pointer 2
...........
Jednostruki indirektni pointer
Dvostruki indirektni pointer
Trostruki indirektni pointer
Slika 2.3.1.
Svaki inode sadrži podatke o tipu i modovima filea odnosno govori koji je file tipa
(direktorij, obični file, pipeline...) i koje su mogućnosti pristupa fileu na razini vlasnika
(ownera), grupe i ostalih korisnika. To se odnosi na postavke čitanja, pisanja odnosno
izvršavanja fajla ukoliko se on može pokrenuti. Dalje sadrži 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 veličina filea i broj hard linkova na file. I jasno,
na kraju tu su pointeri na stvarne fizičke blokove memorije i indirektni pointeri.
Indirektni pointeri služe za mogućnost adresiranja većih fajlova.
799/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
Data
blokovi
Legenda
Direktni pointer
800/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
Slika 2.3.2. pokazuje kako je pomoću indirektnih pointera moguće ostvariti adresiranje
većih fajlova. Važno je naglasiti da različite implementacije unixoidne arhitekture file
sistema različito tretiraju strukturu inodea na način da povećanjem ili smanjenjem broja
direktnih i indirektnih pointera dopuštaju mogućnost spremanja i manipuliranja većim ili
manjim fajlovima. To dopušta veliku fleksibilnost jer ograničenje veličine najvećeg mogućeg
filea nije dobro. Valja napomenuti da ipak veći broj pointera može stvoriti dodatni memorijski
overhead.
801/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
originalni file. Kod brisanja je bitno uvidjeti da ako izbrišemo originalni file soft link više nije
validan. Još jedna važna razlika je u tome što da bismo stvorili hard link originalni file mora
postojati dok kod symbolic linka to nije preduvjet.
Svaki administrator unixoidnog file systema u sklopu instalacije podešava sistem razina
pristupa. On se temelji na stvaranju pojedinaca i grupa korisnika sa pripadajućim razinama
ovlasti. Svakom pojedincu pridružuje se userID i groupID broj koji se koristi za zaštitu
neovlaštenog pristupa fileovima. GroupID služi da bi se određenoj skupini korisnika mogle
dati unaprijed uniformirane privilegije jednom komandom. Root user odnosno administrator
računala uvijek ima 0 kao broj userIDa i groupIDa. Njemu su na raspolaganju sve ovlasti nad
svim fileovima. Navedeni podaci o korisnicima nalaze se u /etc/passwd fileu.
Slika 2.5.1. prikazuje kako izgleda karakteristična ls -l komanda.
-rw-r--r-- 1 boris 725 Jul 10 15:07
list.c
-rw-r--r-- 2 boris 512 Jun 13 16:19
stack.c
drwxr-xr-x 2 boris 512 Jun 24 00:19
blah
Slika 2.5.1.
Za ovo poglavlje je bitna prva kolona. Ona sadržava 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 označava mogućnost čitanja
(read) filea (oznaka r). Drugi označava mogućnost modifikacije (write, oznaka w), dok
zadnji znak daje pravo izvršavanja (execution) filea. Kod sva tri znaka oznaka – znači
zabranu određene operacije pojedinom korisniku.
802/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
Bitno je naglasiti da je ishodište svih direktorija root direktorij (oznaka /). Stoga kad
smo na nekoj poziciji unutar stabla direktorija možemo promatrati svoju poziciju s obzirom
na direktorij u kojem jesmo (relative path) i poziciju s obzirom na root direktorij (absolute
path).
Pojedini važni direktoriji su:
bin - komande dostupne svima u obliku izvršnih 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 dinamičkih biblioteka
sbin – specijalne komande
tmp – skladište privremenih fileova
usr – sve povezano sa pojedinim korisnikom (dodatne komande, man
stranice, headeri, standardne biblioteke)
803/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
KOMANDE NA UNIXOIDNOM
OPERATIVNOM SUSTAVU
man
Najvažnija komanda. Služi za prikazivanje manual stranica određene komande.
Izgled: man command
Primjer: man cp – daje manual stranice o komandi cp
cp
Koristi se za kopiranje filea.
Izgled: cp source destination
Primjer: cp bla.c blah – kopira file bla.c u direktorij blah
mv
Koristi se za pomicanje filea.
Izgled: mv source destination
Primjer: mv bla.c .. – pomiče file bla.c u parent direktorij
rm
Koristi se za brisanje filea.
Izgled: rm file
Primjer: rm bla.c – briše file bla.c
more
Koristi se za ispis filea u konzolnoj liniji.
Izgled: more file
Primjer: more blabla.h – ispisuje sadržaj filea blabla.h
804/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
lpr
Koristi se za ispis filea na printer.
Izgled: lpr file
Primjer: lpr blablah.h – printa sadržaj filea blabla.h
cd
Koristi se za mijenjanje pozicije.
Izgled: cd direktorij
Primjer: cd hmda – ulazak u direktorij hmda
pwd
Koristi se za ispis trenutne pozicije.
Izgled: pwd
ls
Koristi se za ispis svih fileova unutar trenutnog direktorija.
Izgled1: ls – daje samo listu imena fileova
Izgled2: ls -l - daje više informacija o fileovima
mkdir
Koristi se za stvaranje novog direktorija.
Izgled: mkdir direktorij
Primjer: mkdir mhm – stvara novi direktorij mhm
805/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
rmdir
Koristi se za brisanje direktorija.
Izgled: rmdir direktorij
Primjer: rmdir mhm – briše direktorij mhm
chmod
Koristi se za promijene postavki pristupa fileu. Može se koristiti na više načina
međutim ovdje ću opisati po meni možda najjednostavniju primjenu koja koristi oktalno
kodiranje. Slika 3.3.1. pokazuje primjer kodiranja.
d r w x _ _ x _ w x
1 1 1 0 0 1 0 1 1
7 1 3
Slika 3.3.1.
806/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
PROGRAMIRANJE U UNIXU
Unix i C
Teško je uopće zamisliti kakvo bi bilo stanje u računalnom svijetu da je unix bio bez C
programskog jezika i da je C bio bez unixa. Zapravo popularnost unixa i ostalih sličnih
operativnih sustava se isto tako duguje C-u. Mase programera napravilo je svoje prve korake
pisajući C instrukcije na unixu. Današnji C, kojeg još i nazivaju moderni asembler, zbog
efikasnosti, jednostavnosti i povezanosti sa unixom je vjerojatno najviše upotrebljavan
programski jezik na unix platformi (uz veliku upotrebu i nekih ostalih programskih jezika
perl, awk...)
Sve što nam treba da bismo počeli stvarati programe je par važnih stvari. Koristit ćemo
definicije struktura podataka i funkcija iz unistd.h filea koji sadrži standardne unix definicije,
zatim dirent.h koji nam treba zbog manipulacije direktorijima, te sys/stat.h koji dozvoljava
pregled svih stvari vezanih uz file.
U našem radu koristit ćemo gcc C kompajler koji se nameće kao standardan, kvalitetan i
besplatan.
Make alat
I još na kraju, prije programiranja, bitno je spomenuti još jednu stvar koja nam iz dana u
dan može olakšati 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
izvršne fileove. Međutim taj posao bi postao ogroman kada bismo morali istu stvar raditi za
mnogo fileova. Zato nam je ponuđen alat koji omogućuje unaprijed zadano ponašanje svih
807/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
Da bi ovo proradilo file moramo nazvati Makefile. U make fileu navodimo koji file
želimo stvoriti i o čemu je taj file ovisan. Nakon toga upisujemo komandu kojom ga
stvaramo. Linija clean govori da clean nije ovisan niti o jednom fileu i izvršit će se brisanje
fileova komandom rm. Make file pokrećemo naredbom make koja će naći u trenutnom
direktoriju Makefile i pokrenuti ga. Naredba make clean će pokrenuti čišćenje fileova
odnosno pokretanje naredbe rm.
Pomoću Makea je moguće raditi svašta, moguće je koristiti varijable unutar njega,
uglavnom s njim radimo proces kompajliranja i linkanja automatiziranim od početka do kraja.
808/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
Tipovi podataka
Izabrane funkcije
Od mnogih funkcija koje su definirane u raznim unix header fileovima izdvojit ćemo
one koji omogućuju operacije sa fileovima i direktorijima.
int symlink(const char *path1, const char *path2); /* <unistd.h> */
int unlink(const char *path); /* <unistd.h> */
int mkdir(const char *path, mode_t mode); /* <sys/stat.h> */
int rmdir(const char *path); /* <unistd.h> */
int chmod(const char *path, mode_t mode); /* <sys/stat.h> */
mode_t umask(mode_t cmask); /* <sys/stat.h> */
Funkcija symlink kreira symbolic link imena path2 koji pokazuje na file imena path1.
Funkcijom unlink uklanjamo link. Ukoliko smo uklonili symbolic link briše se file, a ukoliko
smo uklonili hard link onda se umanjuje link counter inodea. Funkcije mkdir odnosno rmdir
su identične istoimenim unix komandama. Funkcijom chmod mijenjamo modove određenog
filea. Sve navedene funkcije vraćaju 0 ukoliko je operacija prošla u redu, a u slučaju greške
vraćaju -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). Vraća dosadašnju
vrijednost umaska.
809/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
Stat struktura
Za dobivanje temeljnih informacija o fileu koristimo stat strukturu. Da bi nam ona bila
dostupna unutar koda trebamo uključiti (includati) <sys/types.h> i <sys/stat.h> header
fileove.
struct stat {
dev_t st_dev; /* ID devicea koji sadrži file */
ino_t st_ino; /* broj inodea filea */
mode_t st_mode; /* modovi pristupa fileu */
nlink_t st_nlink; /* broj linkova na file */
uid_t st_uid; /* userID vlasnika filea */
gid_t st_gid; /* groupID vlasnika filea */
dev_t st_rdev; /* device ID ukoliko je file tipa
devica */
off_t st_size; /* veličina filea u bajtovima */
time_t st_atime; /* vrijeme zadnjeg pristupa */
time_t st_mtime; /* vrijeme zadnje modifikacije */
time_t st_ctime; /* vrijeme kreiranja filea */
blksize_t st_blksize; /* veličina blokova */
blkcnt_t st_blocks; /* broj blokova koje je file alocirao */
mode_t st_attr; /* atributi filea */
};
810/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
Dirent struktura
Za dohvaćanje direktorija odnosno fileova unutar njega trebaju nam dvije stvari. Jedna
od njih je tip podataka DIR koji predstavlja direktorij, dok je druga struct dirent (skraćenica
od directory entry) koji predstavlja jedan unos unutar direktorija. Za korištenje je potrebno
uključiti (includati) <dirent.h>.
struct dirent {
ino_t d_ino; /* broj inodea */
char d_name[]; /* ime filea */
};
811/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
PRIMJERI PROGRAMA
Napisat ćemo program koji će raditi kao ls komanda bez opcionalnih parametara.
#include <unistd.h>
#include <dirent.h>
int main(int argc, char **argv)
{
DIR *dir;
struct dirent *dentry;
dir = opendir(".");
while(dentry = readdir(dir))
printf("%s ", dentry->d_name);
closedir(dir);
return 0;
}
812/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
else if(S_ISDIR(info))
printf("direktorij/n");
else if(S_ISCHR(info))
printf("character device/n");
else if(S_ISBLK(info))
printf("blok device/n");
else if(S_ISFIFO(info))
printf("named pipe/n");
else if(S_ISSOCK(info))
printf("socket/n");
}
else
{
printf("nema tog filea");
}
return 0;
}
813/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb File, directory and inode programming
Literatura
Kao literaturu sam koristio man i web stranice, bez kojih bi ovaj seminar bio teško
izvediv, pa se zahvaljujem svim ljudima koji su uložili 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 nemogućnosti odluke i definiranih stajališta struke oko upotrebe računalnog
nazivlja, a isto tako i zbog vlastitog odnosa prema toj temi izabrao sam rješenja koja mi zvuče
kao dobra, znajući da će biti onih koji se s njima ne slažu.
Kod nekih poglavlja se može primijetiti da nisu opisana do kraja, netko će reći da nešto
fali, međutim kao što sam i sam učio o ovoj temi pisajući ovaj seminar odlučio sam da ono što
mi se učinilo kao nepotrebnim, odnosno možda suviše teškim i zbunjujućim, izbacim odnosno
pojednostavnim. Poglavlje 3 navodi osnovne oblike komandi. Za njihovo potpuno
svladavanje nužno je dalje proučiti man stranice. Ovo sam više zamislio kao popis najbitnijih
komandi.
Nepoznati pojmovi
I još na kraju bitno je reći 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. Teško 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb INETD i TCPD
Jurica Božiković
INETD I TCPD
815/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb INETD i TCPD
INETD
Što je INETD
816/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb INETD i TCPD
I testiramo s:
ps awk | grep ftp
ftp localhost
817/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb INETD i TCPD
Naredbe
818/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb INETD i TCPD
Konfiguracijska datoteka
819/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb INETD i TCPD
XINETD
defaults
{
instances = 25
log_type = FILE /var/log/servicelog
log_on_success = HOST PID
log_on_failure = HOST RECORD
# only_from = 128.138.193.0 128.138.204.0
# only_from = localhost
disabled = tftp
}
service imap
{
socket_type = stream
protocol = tcp
wait = no
user = root
only_from = 198.72.5.0 localhost
820/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb INETD i TCPD
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 = INTERNAL
# id = chargen-stream
# socket_type = stream
# protocol = tcp
# user = root
821/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb INETD i TCPD
# wait = no
#}
service xadmin
{
type = INTERNAL
socket_type = stream
protocol = tcp
user = root
wait = no
port = 7000
}
822/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb INETD i TCPD
823/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb INETD i TCPD
TCPD
Što je tcpd
TCPD program može biti podešen da nadgleda nadolazeće zahtjeve za telnet, finger, ftp,
exec, rsh, rlogin, tftp, talk i comsat. Program podržava oba 4.3BSD-style socket-a(ulaza) i
System V.4-style TLI. Funkcionalnost će biti ograničena kada protocol pod TLI nije internet
protocol.
Kad stigne zahtjev, inetd daemon pokreće tcpd program umjesto željenog servera.
TCPD učita zahtjev i provede nekoliko dodatnih provjera. Provjerava kojem korisniku veza
pripada i uspoređuje tog korisnika s podacima u file-u /etc/hosts.allow i /etc/hosts.deny. Ako
je sve u redu tcpd pokrene odgovarajući server program.
S ovom metodom omogućujemo inetd-u da pokrene service pod komandom tcpd
wrappera(omotača).
Login
Veze koje tcpd nadgleda se prijavljuju preko syslog-a. Svaki zapis sadrži zapis o
vremenu,ime korisnika i zatraženu uslugu(service). Ta informacija može biti korisna da bi se
detektirale neželjene aktivnosti, posebno kad se informacije o loginu više korisnika spoje.
Ako želite saznati gdje idu informacije o vašem loginu pretražite syslog konfiguracijsku
datoteku, koja je obično /etc/syslog.conf.
824/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb INETD i TCPD
825/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb INETD i TCPD
Opcionalno, tcpd onesposobljava opcije ulaza na izvor za svaku vezu s kojom radi. To
znači da tcpd neće dopustiti ulaz na računalo ako otkrije da neko koristi neispravnu, nevažeću
IP adresu. Ovo će spriječiti sve napade korisnika koji koriste adrese tuđih mreža. UDP service
nema koristi od ove zaštite. Ova opcija mora biti uključena za vrijeme kompajliranja.
Greške(bugs)
Neki UDP I RPC daemon-i zadrže se još neko vrijeme nakon što su završili svoj posao,
u slučaju da dođe 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 zahvaćena ovim
limitiranjem je rexd, koju koristi komanda on 1. Ali to nije veliki gubitak zato jer je na većini
sustava rexd manje siguran od wildcard-a u /etc/hosts.equiv.
826/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
Goran Vlahović
INTERNET SERVICES
827/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
UVOD
Internet Protocol omogućuje slanje paketa između bilo koja dva računala 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 sličan način kao i serijska linija između
dva računala, dok UDP/IP omogućava jednostavan način slanja poruka između dva računala.
Najinteresantniji korisnički programi koriste TCP za kreiranje veze, tako da je TCP/IP često
definiran kao interkonekcijski protokol Interneta.
828/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
Imena i adrese
829/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
Struktura DNS-a
Struktura DNS baze podataka slična je strukturi UNIX datotečnog sustava. Cijela baza
se može prikazati kao naopako stablo, s korijenskim čvorom na vrhu. Za razliku od UNIX-a
gdje je root direktorij označen sa slash ("/"), kod DNS-a se označava kao jedna točka (".").
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 datotečnom sistemu.
Razlika je jedino da su domene odvojene točkom, dok su putanje datoteka odvojene kosom
crtom. Svaka domena može biti administrirana od različite organizacije, a svaka organizacija
može tu domenu podijeliti u određen broj poddomena i predati odgovornost nad njima drugim
830/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
organizacijama. Npr. InterNIC, koji drži domenu .edu, može dodijeliti pravo domene
berkeley.edu fakultetu U.C. Berkeley.
U adresi koju mi upisujemo, najdesnija oznaka iza točke je tzv. top-level domena
(TLD).
1980. kreirano ih je sedam. To su: .com, .edu, .gov, .int, .mil, .net i .org. U slijedećih
12 godina, održane su mnoge rasprave i predloženo je da se uvedu novih sedam, što je
učinjeno 2001. i 2002. To su: .biz, .info, .name, .pro, .aero, .coop i .museum.
Sponzor/
TLD Uvedena Sponzorirana Svrha
Operator
Societe Internationale de
.aero 2001 da Air-transport industry Telecommunications
Aeronautiques SC, (SITA)
Unrestricted (but
intended for
.com 1995 ne VeriSign, Inc.
commercial
registrants)
United States
.edu 1995 da educational EDUCAUSE
institutions
831/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
Organizations
established by Internet Assigned Numbers
.int 1998 ne
international treaties Authority
between governments
For registration by
.name 2001 ne Global Name Registry, LTD
individuals
Unrestricted (but
.net 1995 ne intended for network VeriSign, Inc.
providers, etc.)
Accountants, lawyers,
.pro 2002 ne physicians, and other RegistryPro, LTD
professionals
Osim tih "generičkih", postoje i posebni TLD-i sa 2 slova, tzv. "country-code", koji su
uspostavljeni za preko 240 država i teritorija.
Zone
832/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
za zonu alocira ime i IP adresu za novi sistem, te ih unese u bazu podataka name servera.
Osoba zadužena za zonu također mora osigurati i najmanje jedan redundantni sekundarni
name server da bi name servis radio čak i u slučaju 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) ažuriraju svoju bazu
podataka s primarnim serverom.
Što ako name server radi ako ne sadrži informaciju koja se traži 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.root-
servers.org).
Trenutno su u funkciji slijedećih trinaest root name servera:
833/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
834/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
BIND
835/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
TELNET
Na mreži smo
836/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
Telnet naredbe
Ako u našem shell prompt-u napišemo telnet bez ikakvih argumenata, pokrećemo
telnet servis u naredbenom modu (command mode). Vidje ćemo poseban telnet prompt
(telnet>). Tada možemo unijeti bilo koju telnet naredbu. Ovo su neke od najčešćih naredbi, a
za kompletnu listu treba pogledati manual na našem sistemu.
Naredba Opis
? Daje pomoć
Kako to sve radi? Naredba open prima 2 argumenta, host i port (opcionalno). Ime
host-a je naravno obavezno i određuje s kojim računalom se spajamo. To računalo mora biti
dostupno i podržavati telnet servis. Ako ne navedemo broj porta, tada se spaja na default-ni
port 23. Kada dođe do spajanja, remote računalo preuzima vezu i pokreće login proceduru.
Nakon logiranja, sve je isto kao da smo se direktno logirali na to, sada udaljeno računalo.
Ukoliko nam je samo potrebno prenijeti datoteke između udaljenih računala, koristit ćemo
FTP.
837/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
FTP (File Transfer Protokol) tj. protokol za prijenos datoteka je razvijen kao protokol
koji će omogućiti prijenos datoteka između dva računala na mreži. Ta dva računala (host-a)
ne moraju biti slična; niti hardware niti operativni sustavi ne moraju biti slični. Windows FTP
klijent može bez problema (osim ako sigurnost ne dozvoljava) razmijeniti datoteke s UNIX
računalom na kojem se vrti FTP servis. Također, udaljeno računalo može putem FTP naredbi
inicirati i razmjenu datoteka između dva udaljena računala (tzv. third-party transfer).
Između ostalih karakteristika, FTP podržava razmjenu i ASCII i EBCDIC (Extended
Binary Coded Decimal Interchange Code) setova znakova. Također jako je važna podrška
ASCII i binarnih prijenosa, koji se mogu obaviti bez ikakvog modificiranja (uuencode i
uudecode) datoteka, kao što npr. zahtijeva UUCP protokol.
FTP veza
FTP radi na aplikacijskom nivou OSI (Open System Interconnection) modela i ovisi o
TCP-u da bi mogao sigurno prenijeti podatke između host-ova na mreži. Kao takav, ne brine
se oko komunikacijske arhitekture i oslanja se na TCP za uspostavljanje veze i prijenos
podataka bez pogreške. 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) može
biti namješten da sluša i na nekim drugim portovima. To se čak može i vrlo lako napraviti
tako da editiramo /etc/service file i zamijenimo broj porta koji je naveden za FTP servis.
838/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
Kako je FTP siguran servis, zatražiti će korisničko ime i lozinku. Ako nismo
autentificirani, ftp će odustati od uspostavljanja session-a za prijenos datoteka. Postoji ipak i
mogućnost logiranja, tzv. anonymous FTP pristup, kada se za korisničko ime može
upotrijebiti riječ anonymous, a email adresa kao lozinka. To je postalo jako popularno
razvojem Interneta kada se na raznim serverima moglo pronaći nebrojeno mnogo programa
tipa freeware i shareware.
U ovom primjeru imamo korisnika koji je logiran na host jade i koji koristi ftp za
spajanje na host tenor.
# ftp tenor
Connected to tenor.
220 tenor FTP server (UNIX(r) System V Release 4.0) ready.
Name (tenor:root): sam
331 Password required for sam.
Password:
230 User sam logged in.
ftp>
839/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
ftp> help
Dobijemo otprilike ovakav popis:
Ipak, nisu sve naredbe implementirane na svim UNIX varijantama ftp-a. Evo jednog
primjera gdje je naredba implementirana na lokalnom računalu, a ne i na udaljenom:
ftp> rstatus
502 STAT command not implemented.
ftp>
840/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
Evo još jednog primjera korištenja ftp-a. Pokrećemo 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
Ovo su neke važnije naredbe koje bi trebale sve varijante ftp-a na UNIX računalima
podržavati:
Osim prijenosa datoteka, vrlo važna Internet usluga je elektronička pošta ili email.
842/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
843/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
odnosa razmotrite primjer iz stvarnog života kada neka osoba pošalje pismo. MUA
predstavlja osobu koja šalje pismo. On pismo napiše, stavi ga u omotnicu, napiše adresu i
zalijepi marku i zatim ga dostavi u poštanski ured. MTA je poput osoblja poštanskog ureda -
oni pismo zaprime, provjere adresu i ako je potrebno preformatiraju je i zatim pismo usmjere
ili u poštanski sandučić u istom poštanskom uredu (ako je pismo lokalno) ili u drugi poštanski
ured (za udaljena odredišta). MDA odgovara poštaru koji poštu iz poštanskog ureda
isporučuje na namijenjenu lokaciju. Ako je korišten prolaz, ta se sličnost može proširiti -
MTA koji zaprimi pismo za odredište u drugoj državi treba tu poruku prenijeti drugom MTA-
u koji zna kako pismo isporučiti u ciljnoj državi.
Povijest sendmail-a
844/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
Email Protokoli
Protokol Opis
POP Post Office Protocol, definira metodu kako mali host može dohvatiti poštu
s većeg host-a bez pokretanja MTA (kao što je sendmail). RFC 1725, 1734
845/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
# telnet almond.nuts.com 25
Trying 172.16.12.1 ...
Connected to almond.nuts.com.
Escape character is '^]'.
220 almond Sendmail 4.1/1.41 ready at Tue, 29 Mar 94 17:21:26 EST
helo peanut.nuts.com
250 almond Hello peanut.nuts.com, pleased to meet you
mail from:<daniel@peanut.nuts.com>
250 <daniel@peanut.nuts.com>... Sender ok
rcpt to:<tyler@almond.nuts.com>
250 <tyler@almond.nuts.com>... Recipient ok
data
354 Enter mail, end with "." on a line by itself
Hi Tyler!
.
250 Mail accepted
quit
221 almond delivering mail
Connection closed by foreign host.
846/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
Evo jednog primjera kako se, koristeći POP3, logirati na server, pročitati i izbrisati tri
poruke, koristeći telnet.
847/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
retr 3
+OK 158 octets
The full text of message 3
dele 3
+OK message # 3 deleted
quit
+OK POP3 almond Server exiting (0 NEWMAIL messages left)
Connection closed by foreign host.
848/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
USENET NEWS
Uvod
Povijest USENET news servisa može se pratiti sve do izvornog ARPAnet-a. Tadašnja
ARPA-Internet zajednica koristila je niz mailing lista za distribuiranje informacija, oglasa i
nadogradnji svojim članovima zajednice. Kako se ta zajednica širila, održavanje tih mailing
lista postajalo je sve teže i teže. Liste su postale izuzetno dugačke, a sve promjene i dodaci su
postali teški.
USENET predstavlja održivu alternativu za prosljeđivanje news-a. Ideja je da se
informacije s novostima (eng. 'news') postave (post-aju) na centralni server i omoguće
korisnicima da ih prime kad oni to požele. USENET sistem omogućuje sličnu funkcionalnost
staroj mailing list operaciji; informacije su uređene kao pojedini članci podijeljeni u posebne
grupe i podjele. (na takav server se također odnosi naziv bulletin board system (BBS). Da bi
pristup i pretraživanje bili što brži, ta centralna skladišta "news" informacija distribuirana su
na mnoge lokalne servere.
USENET se razvio u najveći svjetski elektronički BBS. To je sada konglomeracija
računala na kojima se vrte različiti operativni sustavi, a informacije razmjenjuju preko UUCP-
a, Interneta i drugih mreža. USENET je vjerojatno i najveći eksperiment do sada, sa
kreativnom anarhijom. Postoji samo mala centralna kontrola i autoritet i svatko tko ima
zadovoljavajući software te vezu na Internet, može se pridružiti.
USENET news se prenosi preko TCP/IP mreže koristeći NNTP. To je protokol koji je
uključen kao dio TCP/IP protokola na svim UNIX sistemima i ne zahtijeva posebnu
konfiguraciju. Sve što trebate je ime najbližeg news servera.
RFC-i
RFC-i (Request for Comments) su izdani od strane radne grupe Internet Engineering
Task Force (IETF) i prilagođeni su Internet standardima. Može ih se smatrati nužnim za
kompatibilnost. Njihova kompletna arhiva i novosti mogu se naći na: http://www.rfc-
archive.org. Ako želite razmjenjivati news s drugim Internet NNTP serverom, morate
poštivati ono što je propisano standardima RFC 977 i RFC 1036. O čemu se zapravo radi:
849/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
USENET mreža 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, slušajući na
portu 119 baš kao što i SMTP server sluša 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
Kao i HTTP protokol, NNTP koristi sustav request i response poruka za razmjenu
informacija između klijenata i servera. Te poruke su kodirane standardnim setom ASCII
znakova. Ovdje je sažetak USENET request naredbi za poruke:
851/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
LIST
215 list of newsgroups follows
alt.2600
alt.2600.aol
...
...
comp.protocols.snmp
comp.protocols.frame-relay
comp.protocols.tcp-ip
...
...
...
select a particular group
GROUP comp.protocols.tcp-ip
211 86 1001 1087 comp.protocols.tcp-ip group selected
ARTICLE 1002
220 1002 <13343@darkstar.com> Article retrieved, text follows
Path:
From:
Newsgroup: comp.protocols.tcp-ip
Subject: HTTP Request Formats
Date: 8 March 1997 20:21:32 EST
Organization: Deloitte Touche Consulting Group
852/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
853/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
854/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
Imena grupa su podijeljena hijerarhijski s lijeva na desno. Najlijevije ime je tzv. top-
level grupa. Npr. comp.unix.misc spada u veliku grupu koja se tiče računala: hardware,
software, programiranje itd. Drugo ime (unix) se odnosi na sve što se tiče računala s UNIX
operativnim sustavom, dok se misc odnosi na razno unutar grupe unix.
Povijesno je postojalo 7 velikih top-level grupa:
misc. Miscellaneous. Kad se jednostavno nije znalo kuda strpati grupu, dolazila je ovamo.
Recreational. Ovdje dolaze razne slobodne aktivnosti, hobiji, a isto tako i umjetnost,
rec.
muzika...
855/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
Uvod
Mail, FTP, Telnet i USENET news su s nama od ranih dana Interneta. Oni su zapravo
proširenja usluga koje su smišljene i izvedene davno prije nego što je Internet postojao.
WWW je novi, potpuno Internetski koncept, baziran djelomično na postojećim servisima, a
djelomično na novom protokolu nazvanom HyperText Transfer Protocol (HTTP).
Mnoge ljude zbunjuju funkcije i porijeklo WWW-a, Mosaic-a i HTTP-a, a
terminologija korištena za odnose između ta tri odvojena entiteta postaje prilično maglovita.
Ta maglovitost je ponekad i namjerno proširena: Web preglednici pokušavaju osigurati
neograničen interface širokoj raznolikosti informacija različitim mehanizmima, pa
zamućivanje razlika olakšava njihovo korištenje, ali otežava njihovo razumijevanje. Zato
ćemo odmah na početku dati kratak pregled što su zapravo ta tri entiteta
WWW
WWW je velika skupina HTTP servera na Internetu i Web je ustvari najviše zaslužan 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 Berners-
Lee-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 Urbana-
Champaign. 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
856/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet services
formata (tekst, grafika, audio, video, ...), ali najčešći format na Web-u je HyperText Markup
Language (HTML). HTML je standardizirani jezik za opis stranice, koji služi za kreiranje
Web stranica. Omogućuje osnovne mogućnosti za formatiranje dokumenata, uključujući i
mogućnost uključivanja grafičkih 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 može se pokrenuti na različitim
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 tipično
razumiju i najmanje FTP, Gopher te WAIS protokole, dok neki drugi preglednici, npr.
Netscape, podržavaju i NNTP i SMTP protokole.
Web preglednici su nevjerojatno popularni, što je i razumljivo. Omogućuju bogat
grafički interface ogromnom broju resursa na Internetu. Informacije i servisi koje su prije
mogli koristiti samo stručnjaci, postali su lagano dostupni. Tako se danas preko Interneta
može rezervirati mjesto u restoranu, kupiti karta za kazalište 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 tražilica Interneta,
npr. www.google.com te pronaći željenu stranicu. Samo ime koje upisujemo locira se pomoću
URL-a (Uniform Resource Locator), i izgleda uglavnom ovako protocol://hostname/path.
"Protocol" kaže na koji način se pristupa podacima (uglavnom http). "Hostname" kaže ime
računala domaćina kojem pristupamo, a "path" je putanja do same datoteke, specifična za
host računalo.
Nažalost, sigurnost Web preglednika i servera predstavlja veliki problem. Iskoristivost
Web-a je velikim djelom njegova fleksibilnost, a fleksibilnost čini kontrolu vrlo teškom. Baš
kao što je lakše prenijeti i pokrenuti neki program sa Web preglednika nego preko FTP-a,
tako je i lakše prenijeti i pokrenuti štetni program. Web preglednici ovise o vanjskim
programima, tzv. plug-innovima, koji tada pokreću 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Dario Dugić
RPC
(remote procedure call)
858/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
Što je RPC ?
Slika - pokazuje tok aktivnosti prilikom RPC poziva između dva mrežna sustava.
MACHINE B
client (SERVER)
program
callrpc() execute
function request call
service
execute
request
return request
reply completes
program
continues
859/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
Klijent stvara proceduralni poziv koji šalje zahtjev na server i zatim čeka.
Kada stigne zahtjev server poziva izvršnu rutinu koja izvodi uslugu zahtjeva i šalje odgovor
klijentu.Nakon izvršavanja RPC poziva klijentov program se nastavlja.
Napomena. RPC osobito podržava mrežne aplikacije.
ONC RPC protokol je zasnovan na modelu poziva udaljene procedure,što je slično s modelom
pozivanja lokalne procedure.U slučaju lokalnog pozivanja.pozivać postavlja argumente
proceduri na nekoj točno 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 točno specificirane lokacije i pozivać nastavlja s
izvršavanjem.
RPC model je sličan tome.Jedan djelić kontrole se logički "vrti" između dva procesa.To su
proces pozivaća i serverski proces.Proces pozivaća prvo šalje pozivnu poruku serverskom
procesu i zatim čeka (blokira se) poruku primitka.Pozivna poruka uključuje parametre
procedure i pruka primitka uključuje rezultate procedura.Jednom kada poruka primitka
pristigne rezultati procedure se odpakiravaju i ponovno se nastavlja izvršavanje procesa
pozivaća.
Na strani servera proces miruje čekajući dolazak pozivne poruke.Kada pristigne pozivna
poruka,serverski proces otpakirava parametre procedure,proračunava rezultat,šalje poruku
primitka i tada čeka sljedeću 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 ograničenja na taj model.
Npr. implementacija može koristiti asinkrone RPC pozive tako da klijent može raditi nešto
korisno dok čeka potvrdu od servera.Sljedeća mogućnost je da server kreira odvojene zadatke
za procesuiranje dolaznog poziva tako da izvorni server može biti slobodan za primanje
drugih zahtjeva.
Postoji nekoliko važnih stvari u kojima se pozivanje udaljenih procedura razlikuje od
pozivanja lokalnih:
• Kontrola pogriješaka: kada se koristi pozivanje udaljenih procedura greške u radu
udaljenih servera i mreža moraju biti uklonjene i pod kontrolom.
• Globalne varijable: pojedinačni argumenti ne mogu biti poslani kao globalne varijable
• Performanse: udaljene procedure rade nešto sporije od lokalnih procedura.
• Autentifikacija: zbog slanja kroz nesigurne sustave mreža autentifikacija je nužna.
860/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
Na primjeru:
Definiranje protokola
-rpcgen rpcprog.x
861/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
Sada je potrebno upisati kod klijenta i aplikacije.Oni međusobno moraju komunicirati putem
procedura i tipova podataka specificiranih u protokolu.
Uslužna strana će morati registrirati procedure koje mogu biti pozvane od strane klijenta i
morati će vratiti sve podatke potrebne za procesuiranje.
Postoji nekoliko razina aplikacijskog sučelja koje se mogu koristiti za razvoj RPC aplikacije.
Nakon toga jednostavno pokrenemo programe rpcprog i rpcsvc na klijentu odnosno serveru.
Napomena.Serverske procedure moraju biti registrirane prije no što ih klijent može pozvati.
RPC sadrži više razina sučelja aplikacije za svoje usluge.Te razine proizvode različite ocjene
kontrola balansiranih s različitom koda za izvršavanje.Ovo poglavlje daje pregled rutina
dostupnih na svakoj razini.
862/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
rpc_reg() – registrira proceduru kao RPC program za sve prijenose određenog tipa.
rpc_call() – udaljeni poziv određene procedure na određenom udaljenom hostu.
rpc_broadcast() – rasprostranjuje poruku poziva kroz sve prijenose određenog
tipa.Standardno sučelje je podjeljeno na gornji nivo,srednji nivo,stručni nivo i donji nivo.
Ova sučelja daju programeru puno bolju kontrolu nad komunikacijskim parametrima kao što
je prijenos koji se koristi,koliko čekati prije nego što se počne odgovarati na greške i zahtjeve
retransmisije itd.
Gornji nivo
Na gornjem nivou sučelje 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 sučelje.
svc_create() – stvara kontrolu nad serverom za sve prijenose određenog tipa.Program govori
svc_create() koju izvršnu funkciju treba koristiti.
Srednji nivo
Sučelje srednjeg nivoa RPC-a omogučava kontrolu nad detaljima.Programi napisani na ovim
nižim razinama su kompliciraniji ali rade puno djelotvornije.Srednji nivo omogučuje
specificiranje prijenosa koji će se koristiti.
863/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
Stručni nivo
Stručna nivo sadrži veći broj rutina s kojima specificiramo parametre povezane s prijenosom.
Upotreba tih rutina:
rpcb_set() – poziva RPC obvezu za postavljanje puta između RPC usluge i mrežnih adresa.
svc_reg() – povezuje specificirani par programa i broj verzije s određenom izvršnom rutinom.
Donji nivo
Donji nivo sadrži rutine koje se koriste za potpunu kontrolu nad opcijama za prijenos.
864/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
Ovaj dio objašnjava kako je izvedeno C sučelje prema RPC-u i opisuje kako napisati mrežnu
aplikaciju koristeći RPC.
Napomena.Za kompletnu specifikaciju rutina u RPC biblioteci pogledati u rpc i s njima
povezane man dokumente.
Pojednostavljeno sučelje
Pojednostavljeno sučelje je najlakša razina,jer ne zahtjeva korištenje bilo kojih drugih rutina
RPC-a.Razvoj programa na ovoj razini može biti vrlo brz i direktno je podržan od strane
rpcgen kompajlera.Z večinu aplikacija,lakoća rukovanja rpcgen-om je dovoljna.
Neke RPC usluge nisu dostupne kao funkcije C-a ali su stoga dostupne kao RPC
programi.Pojednostavljeno sučelje uskladištenih rutina omogučava lakoću upravljanja RPC-
om za programe koji ne zahtjevaju veću razinu kontrole.
Rutine poput rusers nalaze se u RPC biblioteci librpcsvc.rusers.c.
Sljedi primjer programa koji ispisuje broj korisnika na udaljenom računalu hostu.
On poziva rusers RPC rutinu iz biblioteke.
#include <rpc/rpc.h>
#include <rpcsvc/rusers.h>
#include <stdio.h>
{
int num;
if (argc != 2)
{
fprintf (stderr, "usage: %s hostname\n",argv[0] );
exit(1);
}
865/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
Klijentska strana
int
rpc_call (char *host, u_long prognum, u_long versnum, xdrproc_t inproc, char *in,
xdr_proc_t outproc, char *out, char *nettype );
#include<stdio.h>
#include<utmp.h>
#include<rpc/rpc.h>
#include <rpcsvc/rusers.h>
{
unsigned long nusers;
enum clnt_stst cs;
if ( argc != 2 )
{
fprintf (stderr, "usage: rusers hostname\n");
866/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
exit(1);
}
Serverska strana
867/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
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() može biti pozvan toliko puta koliko je potrebno registrirati različite programe,
verzije i procedure.
Tipovi podataka poslani ili primljeni od udaljenih procedura mogu biti bilo koji set
predefiniranih tipova ili mogu biti definirani od strane programera.RPC se snalazi s
arbitražnim strukturama podataka,bez obzira na različite rasporede bajtova na računalima ili
odgovarajučih rasporeda struktura i to tako da ih uvijek konvertira u standardni transferni
format nazvan XDR prije no što ih šalje na prijenos.Konvertiranje se naziva serializing a
868/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
struct simple
{
int a;
short b;
}
simple;
#include <rpc/rpc.h>
#include "simple.h"
{
if ( !xdr_int ( xdrsp, &simplep -> a ))
return (FALSE);
if ( !xdr_short (xdrsp, &simplep -> b ))
return (FALSE);
return (TRUE);
}
869/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
Npr. Za slanje polja integera,sadržane su u strukture koje sadrže polje i njegovu veličinu.
struct varintarr
{
int *data;
int arrlnth;
}
arr;
int intarr[SIZE];
Za polje tipa char svaki znak zauzme 32 bita.xdr_bytes() pakira znakove.Ima 4 parametra koji
su slični s prva 4 parametra xdr_array()-a.
870/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
struct fileexample
{
char *string;
struct simple *simplep;
}
finalexample;
#include<stdio.h>
#include<strings.h>
#include "rls.h"
871/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
strcpy (dir,argv[1]);
read_dir(dir);
printf("%s\n", dir);
exit(0);
}
#include<stdio.h>
#include<sys/types.h>
#include<sys/dir.h>
<xpg2include/sys/dirent.h>
#include"rls.h"
read_dir(char *dir)
{
DIR *dirp;
struct direct *d;
printf("beginning");
dirp=opendir(dir);
if (dirp == NULL)
return (NULL);
dir[0]=NULL;
while (d = readdir(dirp))
sprintf(dir,"%s%s\n",dir,d->d_name);
printf("returning");
closedir(dirp);
return((int)dir);
}
zasigurno moramo djeliti veličinu među datotekama.Kasnije kada razvijemo RPC verzije, više
informacija će biti potrebno unjeti u tu datoteku.
Sada želimo prilagoditi ovaj program da radi na cijeloj mreži; dozvoljavajući nam nadziranje
direktorija udaljenog servera.
Sljedeći koraci su potrebni:
• Trebamo konvertirati read_dir.c da se pokreće na serveru.
- trebati ćemo registrirati server i rutinu read_dir() na tom serveru
872/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
Definiranje protokola
Možemo koristiti string s null vrijednošću za slanje i primanje naziva direktorija i njegovog
sadržaja.Štoviše, možemo 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 može
učiniti automatski koristeći rpcgen ili oslanjajući se na predefinirane makroe u
pojednostavljenom sučelju.
Ovdje ćemo ih specificirati ručno.Server i klijent se u toku izvođenja moraju složiti koje će
logičke adresekoristiti.
Brojevi programa su definirani na standardni način:
• 0x00000000 – 0x1FFFFFFF: definirani od Sun-a
• 0x20000000 – 0x3FFFFFFF: ručno definirani
• 0x40000000 – 0x5FFFFFFF: gost
• 0x60000000 – 0xFFFFFFFF: rezervirani
Jednostavno ćemo izabrati korisnički definirane vrijednosti za naš broj programa. Verzija i
brojevi procedura su postavljeni na temelju standardne prakse.
I dalje imamo DIR_SIZE definiciju zahtjevanu od lokalne verzije.
Djeljenje podataka
Već smo prije napomenuli da podacima možemo 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"
873/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
{
return (xdr_string(xdrs, &objp, DIR_SIZE));
}
Serverska strana
#include<rpc/rpc.h>
#include "rls.h"
main()
{
extern bool_t xdr_dir();
extern char *read_dir();
pozivamo lokalnu funkciju read_dir() koja koristi callrpc() za pozivanje udaljene procedure
koja je registrirala READDIR na serveru.
874/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
#include<stdio.h>
#include<strings.h>
#include<rpc/rpc.h>
#include"rls.h"
main (argc,argv)
875/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
Zvonimir Janković
RLOGIN RSH
876/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
TELNET
telnet host
Naredbe telnet koristi se za uspostavljanje virtualne terminalske sesije sa drugim
računalom u mreži. Parametar u pozivu ove naredbe host može biti ime ili IP adresa ciljnog
hosta. Nakon uspostavljanja veze sa remote hostom, pojavljuje se standardni login prompt i
od korisnika se očekuje da prođe uobičajenu proceduru logiranja. Telnet sesija se završava
odjavljivanjem sa remote hosta također na standardni način (logout komandom ili sa < Ctrl
>D).
Escape karakterom (< Ctrl > ]) telnet prelazi u lokalni mod i posjeduje izvjestan skup
lokalnih naredbe i. Jedna od značajnijih je close kojom se prekida sesija. Ovaj način se obično
koristi u neregularnim slučajevima kada je, recimo zbog loših veza, nemoguće regularno
prekinuti telnet sesiju.
877/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
primjer:
venus 1% hostname
venus
venus 2% telnet ban.junis
Traying 160.99.1.1...
Connected to ban.junis.ni.ac.hr
Escape character is '^]'
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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
Skup “r” (remote) naredbi (rlogin, rsh i rcp) je još jedan primjer (slabe) točke u mrežnoj
sigurnosti, proizašle iz dobre namjere. Program rlogin prijavljuje korisnika na udaljeno
računalo, rsh (remote shell) se spaja na udaljeni sustav i izvršava specificiranu naredbu, a rcp
kopira datoteke između sustava. Tvorci su željeli korisnicima olakšati snalaženje u svijetu
velikih domaćinskih računala (hosts), omogućujući im da se s nekih računala prijave rad na
drugim, udaljenim računalima (remote hosts) bez lozinke. Ta udaljena računala nazvana su
pouzdanim domaćinskim računalima (trusted hosts). Bilo koje računalo na kojem korisnik
ima korisnički račun (account) s istim korisničkim imenom može se proglasiti pouzdanim
domaćinskim računalom (trusted host) navođenjem u datoteci .rhosts. Korisnik može imati
takvu datoteku na bilo kojem računalu na kojem ima korisnički račun. Na taj način željelo se
olakšati rad time što se lozinka traži samo kod prijave na neko od tih računala i omogućuje
automatska prijava za rad na bilo kojem pouzdanom domaćinu. Korisnik ne gubi vrijeme
upisujući lozinke kad se poželi prijaviti na neko drugo računalo. Dovoljno je znati lozinku na
jednom od računala, umjesto pamtiti sve lozinke. Logika kojom su se autori rukovodili bila je:
ako znaš lozinku, ti si autentificiran; računala u .rhosts datoteci vjeruju jedno drugom polazeći
od principa da nitko od njih ne može biti kompromitiran; ako te jedno računalo autentificiralo,
ostala mogu vjerovati njegovoj izjavi. Ako napadač uspije prikriti svoj originalni identitet i
predstaviti se kao netko drugi, omogućen mu je nesmetan i lak pristup sustavu jer mu ovaj
“vjeruje”.
No ovaj pristup ima i svojih (uvjetno rečeno) pozitivnih strana: kako se ne zahtjeva
lozinka za pristup, ona se ne može saznati prisluškivanjem. Ali taj princip upravo je i glavni
problem: ne može se vjerovati radnom računalu (host) ni korisnicima na njemu.
Programi rexec i rexecd omogućuju udaljeno izvršavanje (remote execution). Za razliku
od “r” komandi, ne koristi se mehanizam pouzdanih domaćinskih računala (trusted hosts).
Klijent šalje poruku u jasnom (nekriptiranom) tekstu koja sadržava korisničko ime, lozinku i
naredbu koja se treba izvršiti. Zlonamjernik treba samo pročitati nezaštićene podatke iz
paketa.
879/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
rlogin
880/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
primjeri:
% rlogin ban.junis
% rlogin melmack
% rlogin afrodita.rcub.zg.ac.hr
% rlogin afrodita.rcub.zg
% rlogin zmaj.eecs.wsu.edu
Izvršava jednu po jednu naredbu.Date naredbi ime sustava i naredbu koju želite
izvršiti.Naredba rsh koristi isti način ili strategiju sto se tiče korisničkog imena kao i rlogin za
pristup nekom sustavu , a da on ne zatraži korisničko ime i lozinku tada to možete učiniti i
rsh-om.Ali budući da rsh ne rukuje terminalom bas povezano (pametno) ne možete koristiti
cijeli ekran poput vi-a ili emacs-a ali zato možete koristiti ed.
ftp(1)
ftp host
FTP (File Transfer Protocol) sluzi za prijenos fajlova sa jednog računala u mreži 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 slična standardnoj pri uspostavljanju terminalske sesije. Dakle,
korisnik navede login ime i password koji odgovaraju remote hostu. Ukoliko je procedura
identifikacije uspješno obavljena, ftp ulazi u interaktivni mod i korisnik može početi sa
radom. U suprotnom se preporučuje izlazak iz programa i ponavljanje procedure.
881/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
Postoje dva režima prijenosa fajlova, zavisno od njihovog tipa. Tekstualni fajlovi
se prenose u ascii a binarni u bin režimu. Tekstualni fajlovi se mogu prenositi i u
ascii, bin
bin modu, međutim prijenos binarnih fajlova u ascii modu dovodi do oštećenja
sadržaja tako da o ovome treba voditi računa.
put
Transfer fajla file_name sa lokalnog na remote host.
file_name
get
Transfer fajla file_name sa remote na lokalni host.
file_name
mget Slično kao i get samo sto file_name u ovom slučaju moče da sadrži univerzalne
file_name znake (*, ?, []).
mput
Slično kao i put samo sto file_name moze da sadrži univerzalne znake.
file_name
882/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
primjer:
% ftp venus.elfak.ni.ac.zg
Connected to venus.elfak.ni.ac.zg.
Name (venus:srle): mirko
331 Password required for mirko.
Password: ****
230 User mirko loged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
ftp> ascii
ftp> put paper.txt
ftp> get config.txt
ftp> bin
ftp> mget *.Z
ftp> quit
%
U većini računalnih mreža velikih ustanova obično postoji po jedan javni ftp server
(anonymous ftp) na kome se nalaze podaci dostupni korisnicima bez obzira da li oni
posjeduju račun na serveru ili ne. Kod pristupa ovakvim serverima korisnik kao login ime
navodi ftp ili anonymous a kao password bilo sta, obično e-mail adresu.
primjer:
% ftp ftp.elfak.ni.ac.zg
Name (venus:srle): ftp
Password: srle@elfak.ni.ac.zg
883/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
FINGER(1)
finger [user[@host]]
Naredba finger se dobivaju podaci o korisniku user na hostu host. Ti podaci obuhvaćaju
njegovo login ime, puno ime, HOME direktorijum, shell koji koristi i slično. 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 računaru host.
primjeri:
% finger
Daje spisak prijavljenih korisnika na lokalnom hostu. Slično 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Rlogin rsh
PING(1)
ping host
Naredba ping moze biti od koristi pri provjeri veze ka nekom hostu. Parametar host
moze biti ime ili IP adresa hosta ka kome se veza želi provjeriti. Ova naredba konstantno šalje
pakete specificiranom hostu i ako je veza u redu, spomenuti host vraća pakete iste sadrzine
lokalnom hostu. Na korisničkom terminalu se ispisuju informacije o vraćenim 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
kašnjenja). Za slučaj da veza nije u redu svi poslati paketi ce biti izgubljeni i od ciljnog hosta
ne treba očekivati nikakve mrežne usluge.
885/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
Marija Bilić
SAMBA I NFS
886/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
SAMBA POSLUŽITELJ
887/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
NetBIOS protokol
Kad se neko NetBIOS računalo spoji na mrežu, prvo što mora napraviti je registrirati
svoje ime (name registration). SMB protokol koristi koncept grupa (workgroup) na koje se
nova računala mogu prijaviti. Grupa je skupina računala unutar iste mreže. Problem je u tome
što dva računala unutar iste grupe ne mogu imati isto ime. Postoje dva načina da se to osigura:
dozvoljavanje svim računalima na mreži da čuvaju svoje NetBIOS ime u
slučaju da ga neko drugo računalo pokuša koristiti (Slika 1.1).
korištenje NBNS-a (NetBIOS Name Server) koji vodi računa o tome koja su
računala registrirala NetBIOS ime (Slika 1.2).
888/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
889/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
890/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
Kontrolor domene
Kontrolor domene je glavni dio Windows domene (slično kao NIS poslužitelj u
Linux/Unix svijetu). On ima više zadataka. Jedan je briga oko pravilne provjere autentičnosti
korisnika. Provjera autentičnosti je proces dodjele ili zabrane pristupa korisniku dijeljenim
resursima na drugom računalu spojenom na mrežu (korištenjem korisničke zaporke). Svaki
kontrolor domene koristi SAM (security account manager) za održavanje liste korisničkih
imena i zaporki. Kontrolor stvara centralni repozitorij zaporki i korisničkih imena što je
mnogo efikasnije nego da svako računalo na mreži mora održavati stotine zaporki za svaki
dijeljeni resurs koji je dostupan na mreži. U Windows domeni, kada neautentičan klijent
zatraži pristup dijeljenom resursu na nekom poslužitelju, poslužitelj će pitati kontrolor
domene da li je taj korisnik autentičan. Ako je, poslužitelj će dati korisniku pristup resursu, a
ako nije poslužitelj ć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. Može se reći da je korisnik
prijavljen na samu domenu.
891/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
Samba programski paket sastoji se od niza programskih modula, od kojih svaki obavlja
određeni dio poslova.
smbd je SMB program poslužitelj (radi na TCP portu 137) koji razgovara
SMB protokolom, te omogućava međusobnu komunikaciju i dijeljenje
resursa između računala. On predstavlja jedan od dva najvažnija modula koji
dolaze kao dio Samba paketa, i koji omogućuju njezino funkcioniranje.
nmbd je drugi modul, a uloga mu je da obavlja poslove vezane za rezoluciju
NETBIOS imena. Radi na TCP portu 139, te stalno osluškuje mrežni
promet, odnosno NETBIOS zahtjeve. Ukoliko na mreži čuje zahtjev za
pristup sa svojim NETBIOS imenom, on odgovara svojom IP adresom, kako
bi računalo koje je uputilo zahtjev zna kome slati daljnje pakete.
smbclient je klijentski program za pristupanje resursima drugog računala,
kojima je dozvoljen pristup.
nmblookup je program koji nam omogućuje saznavanje IP adrese računala
kojemu se želi pristupiti, na temelju njegovog NETBIOS imena.
smbstatus je programski modul koji omogućuje davanje informacija o
trenutnim vezama prema Samba poslužitelju.
testparm je program za provjeru regularnosti napisane ili naknadno
modificirane smb.conf datoteke.
892/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
Konfiguracija Sambe
ime = vrijednost
Sekcije i njihovi parametri nisu osjetljivi na velika i mala slova. Svaka linija koja
počinje sa znakovima # ili ; smatra se komentarom, te kao takva neće biti tumačena. Svaka
sekcija u smb.conf datoteci opisuje jedan dijeljeni resurs, sa njegovim parametrima. Iznimka
je sekcija [global], koja se odnosi na sve sekcije, te sadrži neke općenite postavke. Osim
[global] sekcije postoje još dvije sekcije, koje se nešto razlikuju u odnosu na običnu sekciju
koja predstavlja neki dijeljeni resurs, a to su sekcije [printers] i [homes]. Ostale obične 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
comment = Test
path = /export/samba/test
read only = no
guest ok = yes
Ovdje je dan primjer jednostavne smb.conf datoteke u kojoj je stvorena sekcija [test],
koja predstavlja dijeljene /export/samba/test direktorija bez dozvole pisanja (read only
parametar). Naveden je i guest ok parametar koji dozvoljava pristup navedenom direktoriju
bez davanja korisničke zaporke. Parametar workgroup u sekciji [global], svrstati će ovaj
Samba poslužitelj u Simple radnu grupu. Unutar [global] sekcije, osim gore spomenutih,
može se naći i velik broj drugih parametara, koji se mogu definirati, i koji će se kao takvi
odnositi na sve sekcije. Tu se mogu naći razni parametri vezani za definiciju nekih općih
sigurnosnih nivoa, enkripcija, korisničkih opcija i sl. Pored [global] sekcije potrebno je
spomenuti [homes] sekciju, koja može biti vrlo korisna u određenim situacijama. Naime, u
slučajevima kada valjani korisnik (korisnik koji ima korisnički račun na poslužitelju) Samba
poslužitelju pošalje zahtjev za pristup sekciji koja nije definirana u smb.conf datoteci, a
ujedno u istoj datoteci postoji definirana [homes] sekcija, Samba poslužitelj će takvom
korisniku omogućiti 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 računalu. Upravo na opisani način [homes] sekcija se
može iskoristiti za efikasnije raspoređivanje 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 korisničkim imenom i zaporkom mogu pristupiti. Korisna opcija koja se
može navesti unutar pojedinih sekcija su parametri valid users i invalid users. Pomoću ovih
parametar može se točno definirati za svaku sekciju, tko ima prava pristupa, a tko ne.
Koristeći opciju read only = yes, korisnicima je sekcija unutar koje se nalazi naveden ovaj
atribut otvorena isključivo 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 slučaj, pri čemu
se onda koristi read list parametar.
894/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
# cd /etc/init.d
# ./smb restart
ili
# /etc/init.d/smb restart
895/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
Element koji može unijeti najviše poteškoća što se tiče konfiguracije Sambe i
međusobne suradnje između Linux i Widows računala su problemi s kriptiranjem korisničkih
zaporki, koji su posljedica nekompatibilnosti između te dvije platforme. Naime, ukoliko se
želi omogućiti pristup nekom dijeljenom resursu s Win98/NT/2000 računala koje koristi
enkripciju zaporki, potrebno je u [global] sekciji navesti sljedeći parametar
koji će predstavljati prvi korak u omogućavanju takvog pristupa. Svaki korisnik koji se
želi spojiti na Linux Samba poslužitelj s nekog udaljenog računala, mora na tom Linux stroju
posjedovati svoj valjan korisnički račun. Postoji i vrlo korisna opcija mapiranja korisnika
(username map), koja omogućuje dijeljene resursa između korisnika koji imaju različita
korisnička imena na različitim računalima. Budući da Windowsi i Linux koriste drugačije
algoritme za kriptiranje zaporki, na Linux računalu potrebno je stvoriti posebnu smbpasswd
datoteku, u kojoj će biti sadržana korisnička imena korisnika, s kriptiranim zaporkama koje
odgovaraju Windows enkripciji. Ta datoteka se može vrlo jednostavno popunjavati za svakog
korisnika zasebno naredbom:
# smbpasswd –a ime_korisnika
(korisnik mora imati otvoren korisnički račun na tom računalu) nakon čega slijedi upit
za unosom zaporke ili automatski korištenjem skripte koja dolazi u paketu sa Samba
poslužiteljem, na slijedeći način:
Ova linija će za svakog registriranog korisnika koji posjeduje korisnički račun na tom
Linux stroju, stvoriti odgovarajuće polje u smbpasswd datoteci, što će omogućiti valjanu
identifikaciju korisnika koji pokušava pristupiti sa Windows računala. Nakon ovoga ne bi
trebalo biti problema sa pristupom Windows računala koja koriste enkripciju. Postoji i
896/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
Prije nego se počeo koristiti NBNS, povezivanje imena radilo je u cijelosti preko
broadcasta. Problem s broadcastom je što ne radi dobro ako mrežama koje se sastoje od više
podmreža i nepotrebno zagušuje mrežu. Kako bi se riješio taj problem razvijen je WINS,
NBNS koji radi sa višestrukim podmrežama, koji Samba podržava. Na jednom računalu u
mreži se pokrene WINS poslužitelj i sva računala u mreži ga mogu koristiti za povezivanje
imena sa IP adresama i za registraciju na mrežu umjesto broadcasta. Postoje četiri mehanizma
za povezivanje imena sa IP adresama računala koja Samba podržava. To su:
WINS
broadcast
parovi ime-IP adresa u /etc/hosts datoteci
lmhosts datoteka
Samba može koristiti bilo koju ili sve od navedenih metoda i to redoslijedom koji se
specificira u smb.conf datoteci pomoću resolve order opcije.
Pisač spojen na Samba poslužitelj može se dijeliti preko mreže i mogu ga koristiti druga
računala u mreži. Klijent koji ima instaliran ispravan upravljački program za taj pisač može
897/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
preko mreže na njemu ispisivati dokumente jednako kao da je pisač spojen direktno na njega.
Windows klijenti će dijeljeni pisač vidjeti u svojem Network Neighbourhood okružju. Kod
ispisa preko mreže odvija se na sljedeći način:
otvara se veza prema poslužitelju,
datoteka koja se želi poslati na pisač kopira se preko mreže na poslužitelj,
veza sa poslužiteljem se zatvara,
poslužitelj šalje kopiju datoteke na pisač i nakon toga ju briše.
Kad datoteka koju treba ispisati stigne na poslužitelj, ona se privremeno sprema na
lokalni disk u direktorij koji je određen opcijom path. Nakon toga Samba pokreće Linux
naredbu kojom se ta datoteka šalje na pisač.
898/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
svima da ih koriste. Dodatno, pristup pisaču može se ograničiti samo na par korisnika
korištenjem opcije valid user.
Primjer:
Korištenje opcije valid user.
[printer1]
printable = yes
print command = /usr/bin/lpr -r %s
printer = lp
printing = BSD
valid users = marko mirko
899/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
900/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
Unix mrežni datotečni sustav (Network File System) omogućava korištenje particija
tvrdih diskova koje se nalaze na drugim računalima u mreži kao da su na lokalnom tvrdom
disku. Time dijeljenje datoteka putem mreže postaje jednostavno, brzo i transparentno za
korisnika. Kako neispravna konfiguracija NFS-a može pružiti pristup neovlaštenim
korisnicima lokalnom tvrdom disku, putem mreže, posebnu pažnju treba posvetiti pravilnoj
konfiguraciji sustava.
Iako postoje i drugi sustavi koji pružaju sličnu funkcionalnost (npr. Samba, koja je
prethodno opisana), prednosti NFS-a su standardiziranost, jednostavnost za korištenje, te
podrška za većinu Unix platformi. Isto tako, postoje NFS klijenti i poslužitelji za Windows
operativni sustav tako da je putem NFS-a moguće dijeliti podatke i datoteke na mrežama koje
se sastoje i od Linux (Unix) i od MS Windows računala. Verzije NFS-a koje se trenutno
koriste su verzija 2 i verzija 3. Verzija 2 je dovoljna za uobičajenu upotrebu dok je verzija 3
pogodna za jako opterećene i velike mrežne disk poslužitelje.
Verzija 2 NFS-a postoji već dugo vremena i podržana je još od verzije 1.2 Linux jezgre
(kernela) ali je minimalna potrebna verzija Linux jezgre 2.2.18 ako se želi koristiti bilo koja
od sljedećih mogućnosti NFS-a:
miješanje Linux NFS-a s NFS-om drugih operativnih sustava,
pouzdano zaključavanje datoteka preko NFS-a,
korištenje verzije 3 NFS-a.
Osnovni paketi za NFS su nfs-utils i mount. Paket nfs-utils dolazi standardno sa svim
Linux distribucijama i to u obliku .rpm (RedHat i Mandrake distribucija) i .deb (Debian
distribucija) paketa.
901/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
/etc/hosts.allow
/etc/hosts.deny
Za rad poslužitelja dovoljno je podesiti datoteku /etc/exports ali takva postava je,
gledano s aspekta sigurnosti poslužitelja, vrlo loša. Naime, iako je za samo pokretanje
poslužitelja i omogućavanje dijeljenja datoteka preko mreže dovoljno u datoteci /etc/exports
reći koji će direktoriji biti dijeljeni, u datotekama /etc/hosts.allow i /etc/hosts.deny se navodi
koja računala imaju pristup poslužiteljskom računalu.
902/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
903/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
Treća je mogućnost korištenje asteriksa (*) (npr. *.apm.hr) umjesto cijelih imena
računala. Ista stvar se može postići primjenom djelomičnih IP adresa tako da se navede samo
dio IP adrese koji se odnosi na lokalnu mrežu bez da se adresira neko određeno
Kod korištenja ovih pojednostavljenja treba biti oprezan, jer se može desiti da se
omogući pristup neželjenim računalima. Sa stajališta sigurnosti, čak je i za velike lokalne
mreže najbolje navesti ime svakog računala zasebno jer se time smanjuje opasnost od
pogreške i omogućavanja neželjenog pristupa resursima.
Napomena o tome što se ne može (i ne smije) dijeliti:
ako je neki direktorij dijeljen tada njegov naddirektorij i njegovi
poddirektoriji ne mogu biti dijeljeni ako se nalaze u istom datotečnom
sustavu. Za tako nešto nema niti potrebe jer se dijeljenjem jednog direktorija
dijele i svi njegovi poddirektoriji, ali treba paziti kako se ne bi potkrala
greška u /etc/exports datoteci.
nije dobra ideja dijeliti FAT ili VFAT (MS DOS, MS Windows) datotečne
sustave. FAT nije predviđen za rad s višekorisničkim računalima i operacije
koje ovise o datotečnim dozvolama neće raditi.
uređaji 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
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 poslužitelju i klijentu kako bi ovi
ispravno radili.
NFS demoni
O NFS usluzi se brine pet demona:
rpc.nfsd - radi većinu posla oko NFS usluge,
rpc.lockd - brine se oko zaključavanja datoteka,
rpc.statd - zajedno s rpc.lockd se brine oko zaključavanja datoteka,
rpc.mountd - brine se oko inicijalnih zahtjeva za montiranjem datotečnog
sustava ,
rpc.rquotad - brine se oko korisničkih kvota (količina diskovnog prostora
koju korisnik smije zauzeti svojim podacima) na dijeljenim particijama.
Prvi demon kojem treba ograničiti pristup je portmapper. Ovaj demon govori klijentima
kako naći sve NFS usluge na poslužitelju. Ograničenje pristupa portmapper demonu
onemogućava neautorizirani pristup NFS-u jer neautorizirani korisnici neće znati gdje se
nalaze NFS demoni. Ovaj pristup ima i svojih mana. Prvo, ograničavanje pristupa
portmapper-u ne pomaže ako potencijalni uljez unaprijed zna kako naći potrebne demone.
Drugo, ako je pokrenuta NIS usluga, ograničavanje portmapper-a će također ograničiti pristup
NIS usluzi. U pravilu to ne predstavlja veći problem jer je poželjno ograničiti NFS i NIS na
sličan način. Pokretanje NIS usluge zajedno s NFS-om je poželjno zato što klijentu olakšava
određivanje vlasništva nad pojedinim datotekama i direktorijima dijeljene particije. Općenito
je dobra ideja kod NFS-a (kao i kod ostalih mrežnih usluga) inicijalno zabraniti pristup svim
računalima u datoteci hosts.deny, a nakon toga omogućiti pristup željenim računalima u
905/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
datoteci hosts.allow. Tako će pristup poslužitelju biti omogućen samo računalima navedenim
u datoteci hosts.allow dok će svim ostalim računalima pristup biti zabranjen.
Primjer:
Zabrana pristupa portmapper demonu za sva računala. U datoteku hosts.deny je
potrebno dodati sljedeću liniju:
portmapp:ALL
Primjer:
Zabrana pristupa svim NFS demonima za sva računala. U datoteku hosts.deny je
potrebno dodati sljedeće linije:
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
Moguće je u datoteku hosts.deny staviti samo liniju ALL:ALL koja uzrokuje zabranu
pristupa svim uslugama koje koriste ovu datoteku osim ako nije drugačije naznačeno u
datoteci hosts.allow. Sa stajališta sigurnosti, ovo je najbolje rješenje premda može
predstavljati problem ako se potrebne dozvole za pristup zaborave dodati u datoteku
hosts.allow.
Sljedeća 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 omogućiti pristup, a host IP adresa računala
kojem se želi omogućiti pristup. Isto kao i u slučaju datoteke exports može se umjesto IP
adrese pojedinog računala koristiti kombinacija IP adrese mreže i mrežne maske kako bi se
dozvolio pristup grupi računala.
906/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
907/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
908/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
U ispisu moraju postojati barem linije u kojima se spominju portmapper, nfsd i mountd.
Ako ih nema NFS nije ispravno pokrenut.
909/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
Primjer:
Ako se NFS poslužitelj zove maja.apm.hr a ime klijenta je ivana.apm.hr. Da bi na
klijentu montirali /home direktorij s poslužitelja u /mnt/home direktorij klijenta potrebno je
upisati naredbu:
# mount maja.apm.hr:/home /mnt/home
NFS datotečni sustav može biti dodan u /etc/fstab datoteku isto kao i lokalni datotečni
sustav. Jedina razlika je što je tip datotečnog sustava potrebno postaviti na nfs, a opcije dump
i fsck (zadnje dvije opcije u datoteci fstab) na nulu.
Primjer:
Kao i u prošlom primjeru ime poslužitelja je maja.apm.hr a ime klijenta ivana.apm.hr.
Kako bi se /home direktorij poslužitelja montirao u /mnt/home direktorij klijenta prilikom
svakog podizanja klijenta potrebno je u datoteku /etc/fstab dodati liniju:
maja.apm.hr:/home /mnt/home nfs rw 0 0
Ove opcije određuju kako će se NFS klijent ponašati u slučajevima kad se poslužitelj
sruši ili kad padne mreža. Postoje dva pristupa:
soft - ako se zahtjev za datotekom prekine, NFS klijent će prijaviti grešku
procesu na klijentskom računalu koji je zatražio datoteku. Neki programi
mogu podnijeti takav pristup ali većina ne može. Ovakav pristup se ne
preporuča jer vrlo često uzrokuje gubitak podataka i pokvarene datoteke.
910/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
hard - program koji pristupa datoteci preko NFS datotečnog sustava će stati
ako se dogodi pad poslužitelja ili mreže. Proces ne može 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 poslužitelj ponovno digne
program će nastaviti tamo gdje je stao. Preporuča se korištenje hard, intr
kombinacije na svim NFS montiranim datotečnim sustavima.
Primjer:
Isti primjer kao i prošli ali su korištene opcije hard i intr.
maja.apm.hr:/home /mnt/home nfs rw,hard,intr 0 0
Ako se direktorij želi montirati ručno korištenjem mount naredbe tada u komandnoj
liniji treba upisati:
# mount -o hard,intr naomi.zesoi.fer.hr:/home /mnt/home
Opcije rsize i wsize programa mount određuju veličinu blokova podataka koje
međusobno razmjenjuju NFS klijent i poslužitelj. Ako ove opcije nisu specificirane tada se
koriste uobičajene vrijednosti koje iznose 4096 byte-ova.
Uobičajene vrijednosti mogu biti ili prevelike ili premale. S jedne strane, neke
kombinacije Linux jezgre (kernela) i mrežnih kartica ne mogu podnijeti tako velike blokove
(uglavnom na starim računalima sa starim mrežnim karticama). S druge strane, ako su
podržani veliki blokovi, veća vrijednost od uobičajene može ubrzati rad sustava. Budući da se
911/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
ovo uvelike razlikuje od sustava do sustava ne postoji pravilo kojim bi se moglo odrediti koja
je veličina najbolja za dani slučaj već se to mora eksperimentalno utvrditi.
Primjer:
Testiranje brzine prijenosa podataka putem NFS-a.
Testiranje brzine NFS sustava može se obaviti pomoću par jednostavnih naredbi. Prva
od tih naredbi kopira 16384 bloka podataka od kojih je svaki veličine 16Kbyte iz datoteke
/dev/zero (/dev/zero nije prava datoteka već program koji samo vraća nule kad ga se pozove)
na montiranu particiju. Potrebno je još izmjeriti vrijeme potrebno da se to obavi. Sve
navedeno može se obaviti upisivanjem naredbe na klijentu:
# time dd if=/dev/zero of=/mnt/home/testfile bs=16k count=16384
Ova naredba datoteku s poslužitelja čita u datoteku /dev/null (/dev/null nije obična
datoteka već program koji briše sve što se kopira u njega).
Ovo je potrebno ponoviti više puta kako bi se dobila srednja vremena potrebna za
stavljanje datoteke na poslužitelj i za dohvaćanje datoteke natrag na klijent. Svaki put je
potrebno datotečni sustav s poslužitelja prvo odmontirati i nakon toga ga ponovno montirati
kako bi se ispraznio međuspremnik.
Cijeli postupak potrebno je ponoviti za različite vrijednosti opcija rsize i wsize. Veličine
bi trebale biti potencije broja 2 i ne smiju biti veće od 8192 byte-a budući da je to maksimalna
dozvoljena veličina za NFS verziju 2 (ako se koristi NFS verzija 3 mogu se koristiti
vrijednosti do 32768 byte-a). Odmah nakon montiranja datotečnog sustava s novim
vrijednostima za rsize/wsize potrebno je otići u taj direktorij naredbom cd i pokušati izlistati
njegov sadržaj naredbom ls kako bi se vidjelo da li NFS uopće može raditi s novim
vrijednostima. Tipična greška kod prevelikih vrijednosti je nepotpuna lista datoteka kod ls
naredbe. Nakon što se ustanovi da li nove vrijednosti za rsize/wsize rade može se ponoviti test
mjerenja brzine.
912/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
913/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
914/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
Ovdje je potrebno upisati IP adresu klijenta kojem se želi dati pristup, korisnički i
grupni identifikacijski broj (UID i GID) za željenog korisnika i način 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 računalu.
NFS klijent
Prije korištenja NSF klijenta potrebno je podesiti neke parametre potrebne za rad. Za to
je potrebno odabrati opciju Settings.
Tu se mogu podesiti korisnički i grupni identifikacijski broj, dodati IP adrese NFS
poslužitelja, odrediti način 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 sučelje Windows Explorer programa tako da za njegovo korištenje nije potrebno otvarati
dodatne prozore.
915/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Samba i nfs
ZAKLJUČAK
916/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb X window system
Jakov Mihaljević
X WINDOW SYSTEM
917/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb X window system
UVOD
918/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb X window system
X server
X klijent
X protokol
Xlib
919/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb X window system
¸
Slika 1.
Klijent-Server dizajn
920/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb X window system
Zahtjev:
X klijent traži od X servera određenu akciju npr. Create Windov
Da bi poboljšao performanse, X klijent uobičajeno ne očekuje odgovor. Server se
uobičajeno oslanja na pouzdanost mreže kao garanciju isporuke .
Dužina zahtjeva je 4 bajta(ili umnožak 4 bajta)
Odgovor:
X server će odgovoriti na zahtjev ako isti zahtjeva odgovor. Svi zahtjevi ne
zahtijevaju odgovor.
X odgovor je svaki umnožak 4 bajta; minimum 32 bajta
Događaji:
X Server će proslijediti X klijentu svaki događaj koji aplikacija očekuje . Ovo
uključuje ulaze od strane miša i tipkovnice. Da bi se minimalizirao mrežni promet
klijentu će se proslijediti samo događaji koje očekuje.
X događaji su dužine 32 bajta.
921/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb X window system
X Server
Osnovne značajke:
Pokreće se lokalno
Prihvaća i demultipleksira zahtjeve X klijenata te odgovara i djeluje na osnovu
njih
prikazuje zadane informacije na zaslonu
odgovara na zatražene informacije
prijavljuje greške u zahtjevu
Upravlja sa tipkovnicom, mišem i zaslonom
Prosljeđuje ulaze tipkovnice i miša do klijenata
kreira, upravlja i uništava prozore
piše i crta po prozorima
Dizajn:
Dizajn X servera ovisi o platformi(hardverskoj) i operacijskom sustavu na koji je
implementiran. Stoga se povećavanjem mogućnosti tehnologija na kojima je izgrađen
povećavaju mogućnosti i X servera. Karakteristika je X servera je velika zavisnost od
hardvera, razlikuje se način pristupa hardveru kroz operativni sustav. Pored kompatibilnosti,
za X server je vrlo bitna efikasnost, jer na njemu je da optimalno iskoristi grafičke kartice.
Kod X servera uobičajeno je da se za svaki tip adaptera(ili za nekoliko sličnih) postoji
poseban X server. Dakle, pod X-om tražimo server za pojedini adapter kao što na npr. MS
Windows sustavu tražimo drajver. Uz X server idu konfiguracijske datoteke, softver za
podešavanje 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 sadržaj unutar prozora, a ne i okvir, liniju sa naslovom i slično. Tako X server koji radi
pod MS Windowsima postiže da se X prozorima rukuje kao i sa ostalima. Nije tipično da
server preuzme rukovanje prozorima, on tipično taj posao prepušta posebnom klijentu-
Window menager-u.(WM) WM daje prozorima , okvir, naslov, kontrolira promjenu veličine,
pomicanje, svodi prozore na ikone i vraća u punu veličinu, dodjeljuje i oduzima fokus,
922/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb X window system
regulira koji je ispred, a koji je iza, hvata klikove miša na prozor i sl. Sa različitim WM-ovima
dobiju se različito dekorirani prozori, ali i različite politike manipuliranja.
Za jedan server u jednom trenutku može biti vezan jedan WM. Ukoliko nije tako
prozori izgledaju «ogoljeno»(bez okvira), a korisnik može raditi samo u prozoru koji trenutno
ima fokus, ali i da ga miče ili mu mijenja veličinu.
X Klijent
923/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb X window system
Xfree86
924/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb X window system
Licence) nekompatibilna. Taj potez je podigao dosta prašine 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Adriana Mihinec
Domagoj Švagelj
KDE
926/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
UVOD
927/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
KDE –Povijest
Od početka razvitka UNIX operacijskog sustava postojao je jedan velik problem.
Postojala je stabilna jezgra, dobre i moćne aplikacije. Na nesreću, samo mali broj ljudi je
mogao koristiti UNIX jer je on bio napisan za studente i profesionalce koji su ga proučavali
duže vrijeme.
Primjer: standardna metoda za čitanje USENET vijesti bila je:
find /var/spool/news –name '[0-9]*' –exec cat {} \; | more
Iako je bio relativno efikasan, nije se mogao nazvati jednostavnim za upotrebu. Sve to
vodi ka tomu da UNIX nije bio za širu publiku. Povedena tom misli grupa od stotinjak
programera predvođena Matthias Etrichom počinje raditi na KDE-u. Prva objava rada na
KDE-u je bila 14.10.1996. Već iduće godine 20.10.1997. objavljena je prva verzija KDE 1.0
Beta1 široj javnosti, gdje se postavilo zanimljivo pitanje: Što znači slovo K u nazivu K
Desktop Environment? Odgovor je isto tako zanimljiv: Ništa. Jednostavno je tako nazvan bez
nekog posebnog razloga. Nakon još nekoliko Beta verzija 12.7.1998. objavljena je konačna
verzija KDE 1.0. Slijede mnogobrojne poboljšane verzije KDE 1.0 sve dok 23.10.2000. nije
objavljena skoro u potpunosti izmjenjena verzija KDE 2.0. koja je zapamćena po tome što je
lansirala Konqueror, Koffice, Kparts, KIO... Zaredale su ponovno mnogobrojne verzije 2.0., a
3.4.2003. lansirana je treća generacija KDE-a 3.0. sa mnogobrojnim poboljšanjima.
Zadnje objavljena verzija je KDE 3.3.2 (08.12.2004.).
Iako ne pokušava zamijeniti tradicionalnu UNIX ljusku, KDE je alat koji će učiniti
korištenje UNIX-a lakšim, privući više ljudi UNIX okružju. Uz KDE, korištenje UNIX-a
postaje jednostavno.
928/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Što je KDE?
KDE je desktop okruženje, tj. to je kolekcija programa, tehnologija, i dokumentacije,
koji omogućavaju lakši rad na UNIX radnim stanicama. Filozofija KDE-a je besplatan
software kako bi se razvilo kvalitetno okružje koje pruža korisniku kontrolu računalnih
resursa. KDE je jedan veliki projekt koji se neprestano poboljšava i raste. Glavne misli vodilje
i filozofija ovog projekta su:
o učini to odmah!,
o koncentriraj se!,
o koristi dostupne alate radije nego da izmišljaš već postojeće!,
o Kada nešto predlažeš umjesto “trebali bi...” koristi “ja ću...” jer su ogromni planovi
beskorisni ako se ne primiš posla,
o neprekidno poboljšavaj,
o počni sa razumnom razinom funkcionalnosti i podesivosti i onda poboljšavaj tijekom
vremena!
929/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
DCOP messaging
DCOP je client-to-client komunikacijski protokol sa serverom kao posrednikom preko X11-
ICE library standarda. Protokol podržava prolaz poruka kao i pozive procedura koristeći
XML-RPC do DCOP prolaza. Izvedbe za C/C++ i Phyton te Javu su dostupne.
930/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Kparts je KDE-ov komponentni objektni model koji dopušta aplikaciji da ugradi drugu u
sebe. Tehnologija obrađuje sve aspekte ugrađivanja, kao što je pozicioniranje toolbars-a i
unošenje pravih menia kada se ugrađena komponenta aktivira odnosno deaktivira. Kparts
može također surađivati sa KIO traderom u pronalasku handlera za pojedini mimetype ili
uslugu/protokol. Ovu tehnologiju koriste specifično Koffice i Konqueror.
XML-GUI Builder
XML grafičko korisničko sučelje(GUI) traži od XML-a da kreira pozicijske menije , toolbars-
ove i druge aspekte grafičkog korisničkog sučelja. Ova tehnologija daje korisniku i
programeru na raspolaganje mogućnost pojednostavljivanja configurability elemanata
korisničkog sučelja kroz aplikaciju i automatski zadovoljava KDE standarde i Style Guide baz
potrebe za modifikacijom standarda.
931/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
O izgledu KDE-a
Pri pokretanju KDE-a prvo što ćemo uočiti jesu radna površina i panel. Velika
prednost KDE-a jest mogućnost korištenja višestrukih radnih površina. Na taj način
organizacija rada se višestruko poboljšava. Svoje programe možemo staviti na različite radne
površine koje možemo nazvati prema vrsti posla tako da se u svakom trenutku možemo lako
snaći što povećava učinkovitost rada. Vrlo je dobro koristiti višestruke radne površine kada
surfamo internetom umjesto da radimo i šef nenadano uleti u sobu?! Radne površine
mjenjamo jednostavno klikom na jednu od njih, dok dvostrukim klikom možemo promjeniti
imena radnih površina. Među radnim površinama moguće je razmjenjivati i prozore tako što
na title bar prozora kliknemo deni gumb miša i odaberemo opciju To Desktop.
Kada se KDE pokrene panel je smješten na dnu ekrana. Odavde se pokreću programi i
prelazi se u virtualne radne površine. K gumb je najvažniji dio radne površine, preko njega se
dolazi do većine instaliranih aplikacija.
Na panelu se nalaze i gumbi nazvani One, Two, Three i Four koji predstavljaju
virtualne radne površine. Korištenje višestrukih radnih površina je jedno od najmoćnijih oruđa
KDE-a i X window sistema.
Icon bar predstavlja prečice do često korištenih programa, nalazi se odmah do K
gumba, a korisnik može sam postavljati ili micati ikone sa iconbar-a.
932/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
933/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
KDE ima jednostavan IPC mehanizam nazvan KWMcom koji je (bio!) korišten za
komunikaciju panela i window manager-a. Poruke su se propuštale preko X Atoms-a. Zbog
toga je propuštanje ograničeno u veličini i kompleksnosti podataka koji mogu biti propušteni
(X Atoms moraju biti maleni da bi sačuvali svoju učinkovitost). CORBA se smatrala boljom
idejom, učinkovitije IPC/RPC rješenje. Međutim, kroz godine rada pokazalo se da je rad sa
CORBA-om spor i memorijski naporan. Ono što je zaista bilo potrebno jest jednostavan
protokol sa osnovnom autorizacijom, koji neće raditi niti upola onoliko koliko je radila
CORBA ali će biti napredniji kada su u pitanju jednostavniji zadaci. Primjer takvog
jednostavnog zadatka mogao bi biti aplikacija koja šalje poruku panelu: „Ja sam počela sa
radom, prestani prikazivati 'Aplication starting' wait state“ ili na primjer kada neka aplikacija
pita da li postoji koja pokrenuta aplikacija sa njenim imenom. Taj problem je naveo na
stvaranje novog protokola nazvanog DCOP – Desktop Communication Protocol. DCOP jest
jednostavan IPC/RPC mehanizam namjenjen radu preko socket-a, bilo to Unix domain socket
ili tcp/ip socket. DCOP je načinjen na vrhu Inter Client Exchange(ICE) protokola koji
standardno dolazi kao dio X11R6 i nadalje. Ujedno ovisi i o Qt-u no povrh toga ne ovisi niti o
jednom drugom library-u. Zbog toga je vrlo učinkovit i lako se povezuje sa svim KDE
aplikacijama sa malim overhead-om.
Model rada DCOP-a je vrlo jednostavan. Svaka aplikacija koja koristi DCOP je
klijent. One međusobno komuniciraju putem DCOP servera koji radi poput prometnika
prosljeđujući poruke/pozive na prava odredišta. Svi klijenti su peer jedan drugome. Kod
DCOP protokola moguće su dvije vrste akcija: „šalji i zaboravi“ poruke koje ne blokiraju i
„pozivi“ koji blokiraju čekajući da se neki podatak vrati. Bilo koji podatak koji se šalje je
serijaliziran koristeći QDataStream operatore dostupne u svim Qt klasama.
934/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Uspostava veze
935/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
936/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Trenutno pravi put dobivanju podataka od DCOP-a jest umnožiti nasljeđe od klase
koju smo nasljedili kao i DCOPObject klase. DCOPObject pruža jednu vrlo važnu metodu:
DCOPObject::process(). Ovo je čista virtualna metoda koju moramo implementirati kako bi
procesuirali DCOP poruke koje primamo.
Primjer implementacije:
937/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Ako je aplikacija u mogućnosti procesuirati pozive funkcija istog trena kada oni dođu onda je
kod sa prethodne stranice sve što je potrebno. No, ako želimo da naša aplikacija procesuira
kompleksnije zadatke možemo željeti da rezultate pošaljemo nekada kasnije kada će nam to
odgovarati.
Da bi to učinili moramo upitati svog DCOPClient-a za transakcijski Id. Tada se
možemo vratititi iz funkcije koja je u tijeku izvođenja i kada rezultati postanu dostupni vratiti
se na izvođenje transakcije. U međuvremenu naša aplikacija može dobivati pozive DCOP
funkcija drugih klijenata.
Primjer:
bool BarObject::process(const QCString &fun, const QbyteArray &data,
QCString &, QbyteArray &)
{
if (fun == „doIt(int)“) {
QdataStream arg(data, IO_ReadOnly);
int i; // parameter
arg >> i;
Qstring result = self->doIt(i);
DCOPClientTransaction *myTransaction;
myTransaction = kapp->dcopClient()->beginTransaction();
// start processing...
// Calls slotProcessingDone when finished.
startProcessing( myTransaction, i);
return true;
} else {
qDebug(„unknown function call to BarObject::process()“);
return false;
}
}
938/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
DCOP signali
Ponekad pojedina komponenta računala želi poslati potvrdu putem DCOP-a drugoj
komponenti ali ne zna zapravo koja komponenta će biti zainteresirana za te potvrde. Kako bi
se to omogućilo smišljeni su DCOP signali.
DCOP signali su vrlo slični Qt signalima. DCOP signal se može 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 potječu iz DCOP Object/DCOP Cliant kombinacije. Mogu se spojiti na
funkciju druge DCOP Object/DCOP Cliant kombinacije.
Postoje dvije glavne razlike između veza Qt signala i veza DCOP signala. U DCOP-u ,
za razliku od Qt-a, signalne veze mogu imati anonimnog pošiljaoca, i te veze mogu biti non-
volatile.
Sa DCOP-om može se spojiti signal bez specifikacije DCOP objekta ili klijenta. U tom
slučaju signali od bilo kojeg DCOP objekta i/ili DCOP klijenta će biti isporučeni. Ovo
dopušta specifikaciju pojedinih događaja bez poznavanja objekta koji će prouzročiti događaj.
Druga značajka DCOP su tzv. Non-volatile veze. Sa Qt signalnim vezama, veze se
brišu u slučaju da se izbriše primaoc ili pošiljaoc signala. Volatile DCOP veza će se ponašati
isto tako, no non-volatile DCOP signalna veza neće biti izbrisana u slučaju da se izbrišu
pošiljaoc ili primaoc. Jednom kada se objekt kreira sa isti imenom kao i originalni objekt
pošiljaoc, veza će se povratiti(restore). Nema razlike u slučaju da se objekt primaoc izbriše, u
tom slučaju signalna veza će se uvijek izbrisati.
Primaoc može kreirati non-volatile vezu bez obzira da li pošiljaoc uopće kreiran, to su
tzv. anonimne DCOP veze i one bi u pravilu uvijek trebale biti anonimne.
Sljedeći primjer pokazuje kako Klauncher emitira signal svaki puta kada dobije potvrdu da se
završila 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.
939/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Spaja clientDied(pid_t) signal na svoj clientDied(pid_t) DCOP funkcije. U tom slučaju signal
i funkcija imaju isto ime. Funkcija koja prima može ignorirati jedan ili više argumenata
signala.
940/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Pisanje u IDL dokument je vrlo slično pisanju C++ header dokumenta. Iznimka je
ključna riječ 'ASYNC'. Ona indicira da će poziv na funkciju biti procesuiran asinkrono. Za
C++ kompajler, to je 'void'.
#ifndef MY_INTERFACE_H
#define MY_INTERFACE_H
#include <dcopobject.h>
k_dcop:
#endif
Kao što se vidi, kreirana je apstraktna bazna klasa, koja je virtualno nasljeđena od
DCOPObject.
Ako koristimo standardne KDE building skripte, onda se ovaj dokument jednostavno
dodaje u sources direktorij.
Sljedeće što treba učiniti je izabrati koje klase će biti implementirane u sučelje opisano
u MyInterface.h. Suprotne nasljeđu ovih klasa, a takve da virtualno nasljeđuju od
MyInterface. Zatim treba dodati deklaraciju u klasno sučelje slično onome u MyInterface.h,
ali virtualno.
941/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
{
Q_OBJECT
public:
MyClass();
~MyClass();
public:
MyClass();
~MyClass();
k_dcop:
ASYNC myAsynchronousMethod(Qstring someParameter);
Qrect mySynchronousMethod();
};
942/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Nakon što je kdesu dobio root lozinku, pokreće kcmroot kao root, i razgovara sa korisnikovim
dcop serverom.
Važno je napomenuti da DCOP komunikacija nije zaštićena, pa nije zahvalno slati važne
informacije na ovaj način.
943/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
KDE XmlRpc
KDE XmlRpc dopušta 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. Budući
su sve KDE aplikacije (ili će to postati) DCOP klijen/server, to efektivno znači da se sve KDE
aplikacije mogu manipulirati (skriptati) od strane bilo kojeg jezika na bilo kojoj platformi.
XmlRpc je standardni način implementacije poziva udaljenih procedura (RPC)
koristeći 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 označavanje 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 korištenju XML parsera i HTTP klijentima. Ovo čini implementaciju za
većinu XmlRpc dijelova relativno jednostavnom.
Iako je XmlRpc stvarno jednostavan za korištenje, bilo bi besmisleno očekivati da će
se ovaj pristup implementirati u sve aplikacije, kada već postoji jednostavan za korištenje
RPC/IPC protokol – DCOP. Kao rješenje 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 rješenje je mnogo bolje od drugog koje je također bilo opcija, a čija je
ideja bila da je prevođenje transparentno između dva protokola. Tako i XmlRpc klijent i
DCOP server oboje misle kako komuniciraju pomoću svog protokola sa deamonom.
Kako bi se ostvarila ova vrsta komunikacije potrebno je sljedeće:
provjeriti da je port kxmlrpcd uključen
auth token za autorizaciju
ime DCOP servera kojem želimo pristupiti
ime DCOP objekta kojem želimo pristupiti
Posljednje dvije stvari možemo saznati na jednostavan način, 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 naći u dokumentu
$HOME/.kxmlrpcd. Ako je komunikacija lokalnog karaktera sve što treba učiniti jest parsirati
file, no ako je komunikacija udaljena te informacije moramo dobaviti na neki drugi način.
Neke mogućnosti 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
string koji mora popratiti sve dolazne XmlRpc zahtjeve. Prvi parametar upozivu metode mora
biti string i to auth token string. Osim ovog protokol je isti kao i standard.
Kod KDE-a XmlRpc se ne koristi kao server, umjesto toga kreira se DCOP server. I to
je u biti to! Ako je neka aplikacija postavljena kao DCOP server automatski ima mogućnost
komunicirati sa XmlRps klijentom. No, postoji jedno malo ograničenje. Mora se propustiti
samo QCString kao tip stringa i korištenje <struct> i <array> je ograničeno.
#!/bin/sh
EOF
945/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
KDE BASE
KDE Base
Svrha KDE Base-a jest da specificira izgled i osjećaj KDE aplikacija, tj. stvorena su
pravila, pomoću kojih se programeru omogućava izrada sučelja aplikacija koje će biti u
skladu sa izgledom KDE-a.
Ova pravila se ne nameću korisniku i on ih ne mora poštivati ako ne želi, no dužnost je
svakog dizajnera-programera da njegova aplikacija ima pristojno sučelje.
Primjer:
Knotes program se sastoji samo od radne površine. On je dizajniran tako da izgledom
podsjeća na dobro poznati blokić: Post-it:
Iako Knotes nema menubar ili toolbar ostatak programa (pri tome se misli na dijaloge i
upotrebu miša) bi trebao poštivati dizajn KDE-a.
946/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Većina modernih aplikacija ima vrlo sličan layout od svog glavnog prozra. Ti prozori
nude izgled dokumenta i kontrole potrebne za manipulaciju njima. Kontrole za pojedine
akcije su dostupne kroz menie sa prečicama kroz toolbars i tipkovnicu. Izvješća o tome što se
događa sa dokumentom su obično postavljena na statusnu traku.
Ovakav način prikazivanja aplikacija je toliko uobičajen da se koristi i za prikazivanje
aplikacija koje su dokumenti samo u širem smislu značenja riječi dokument, npr. File
manager.
Da bi se neki software mogao nazvati „user friendly“ mora zadovoljavati neke
kriterije. Prema nekim izvorima, većina, tj. 80 – 90% današnjeg software-a ne zadovoljava te
kriterije.
Ti kriteriji su:
• Task – suitable: Ne smije pružati previše funkcija jer će zbuniti korisnika ili će
narušiti funkcionalnost samog software-a
• Razumljiv: Kada korisnik upotrebljava software po prvi puta morao bi razumjeti o
čemu se radi i kako ga koristiti
• Navigacija: Korisnik bi u svakom trenutku trebao znati gdje se nalazi.
• Sukladan očekivanjima: Aplikacija bi trebala biti konzistentna svakim svojim
dijelom
• Tolerantan pogreškama: Aplikacija bi trebala omogućiti funkciju undo bez da se
program sruši.
• Feedback- rich: Aplikacija bi u svakom trenutku korisniku trebala davati povratne
informacije o tome što se događa s obzirom na učinjene akcije.
Kada govorimo o korisničkom sučelju ne možemo zaobići 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 sadrži
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 olakšava život programerima i dugo se
smatrao najboljim načinom rada. No, tehnologija je uznapredovala i danas se smatra kako
MDI ograničava rad korisnika. KDE aplikacije, čak štoviše sve aplikacije bazirane na X-u, ne
947/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
koriste MDI, već SDI – Single Document Interface. SDI aplikacije nemaju glavni „mother“
prozor koji sadrži sve ostale prozore u sebi. Prozori aplikacija su svi odreda dijeca X root
prozora što znači da su pod kontrolom window mamagera i mogu se pomicati po desktop
okruženju prema željama korisnika. Ako aplikacija mora otvoriti dodatni prozor on je također
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 koristeći ovaj model. Ovo može i ne
mora biti istina, po ovom pitanju se vode debate. Vrijeme, i rad programera, će presuditi, no u
međuvremenu, 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.
Sučelje 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 moguće. Kada čisti SDI model nije prihvatljiv programer bi
trebao koristiti kooperacijski SDI model, za aplikacije koje moraju dijeliti
konfiguracijske informacije između instanca aplikacija, ili kontrolni SDI model za
aplikacije koje zahtjevaju više otvorenih dokumenata nego što ih je moguće prikazati na
ekranu.
948/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Kod čistog SDI sučelja, jedan prozor sadrži točno jedan dokument i taj jedan dokument
jest cijela ta aplikacija. Ne postoji glavni „mother“ prozor koji sve nadzire, a prozori koji su
naizgled pod upravljanjem neke aplikacije nemaju veze sa drugim prozorima. Jedan prozor je
jedna aplikacija gdje svaki ima svoj Quit gumb koji zatvara taj prozor. Zatvaranje jednog
prozora nema nikakvog efekta na ostale otvorene prozore. Ispod površine, moguće je da jedan
proces upravlja svim virtualnim terminalima, no to je skriveno od korisnika i on ne može
znati.
Postoji niz pravila koja moraju biti zadovoljena kako bi neki prozor (aplikacija) mogao
biti nazvan čistim SDI sučeljem:
Svaki prozor bi trebao imati potpuni meni aplikacije. Naredba New bi trebala otvoriti
novi prozor sa praznim dokumentom u sebi ili sa kopijom trenutnog dokumenta u prozoru.
Dokument u ovom kontekstu predstavlja novi shell, novi (bez title-a) tekst dokument, novu
(bez title-a) sliku, itd. KDE aplikacije nebi trebale imati praznih prozora. Svaki prozor treba
sadržavati dokument koji može biti prazan. Gledano ispod površine aplikacija može imati
otvoren svoj drugi prozor ili taj prozor može biti fork od drugog procesa koji kontrolira novi
prozor ali to su implementacijski detalji koje korisnik ne zna i ne mora mariti za njih.
Ako čista SDI aplikacija ima ikonu onda bi svi prozori koji se otvaraju kao npr. prozor
za pomoć, dijalozi toolbars i sl. Također trebali imati istu ikonu. Window manager bi trebao
prezentirati samo jednu ikonu koja bi trebala vratiti sve prozore kada se aktivira.
Kada god se čista SDI aplikacija otvara trebala bi provjeriti postoji li njena kopija koja
je već pokrenuta. Ako je takva kopija pronađena, to bi trebala biti kopija koja predstavlja
novu akciju. Ovo je napravljeno zbog toga da veliki programi kao što je Wordprocessor nebi
otvarali svoje kopije i tako iskoristili svu korisnikovu memoriju. Postoje aplikacije koje zbog
tehničkih razloga moraju zaobići ovo pravilo, što je u redu no, u većini slučajeva trebalo bi ga
poštivati.
Ako korisnik želi otvoriti isti dokument dvaput u naizgled različitim aplikacijama, koje
su zapravo ista aplikacija, to im mora biti omogućeno. Ponekada korisnik želi činiti stvari
koje su zdravom razumu čudne no, svejedno mu aplikacija to mora dopustiti.
Trebala bi postojati jedna instanca dodatnog prozora kao što je toolbar po prozoru, po
korisnikovom zahtjevu. Dva aplikacijska prozora ne mogu dijeliti istu traku s alatima iako je
949/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
to tehnički moguće, zbog načina na koji aplikacija treba biti implementirana. Drag and drop
operacija nad prozorom treba pozvati otvaranje dokumenta koji se vuče u tom prozoru.
950/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Zagovornici čistog SDI sučelja tvrde kako je čisto SDI sučelje sve što je potrebno. No,
postoje situacije koje govore o komplikacijama i ograničenjima čistog SDI sučelja prilikom
rješavanja nekih problema. Jedan od potencijalnih problema je kada jedna aplikacija želi
promijeniti značajke koje koristi neka druga instanca aplikacije. Npr. zamislimo web browser
kao čistu SDI aplikaciju, u kojoj svaki prozor može sadržavati jednu web stranicu. Svaki
prozor radi u izolaciji od drguih, i on je kao takav aplikacija za sebe, neovisna od ostalih
prozora. Ovaj model će dobro raditi, no što će se dogoditi kada će korisnik željeti promijeniti
neke parametre kao npr. bookmark ili font? Sada dolazi do izražaja programer koji je odlučio
da li će se parametri promijeniti u samo jednom prozoru ili u svima. No ako je odlučeno kako
bi promjena trebala zahvatiti sve prozore koji su pokrenuti od određene aplkacije, čisto SDI
sučelje će se srušiti.
U prvi plan sada dolazi kooperacijsko SDI sučelje koje je sagrađeno na čistom SDI
modelu sučelja ali su dodane neke značajke s kojima se mogu dopustiti neke situacije koje
čisto SDI sučelje zabranjuje.
Kooperacijsko SDI sučelje je preuzelo pravila čistog SDI sučelja sa sljedećim
promjenama:
Svaki prozor još uvijek predstavlja jedan dokument, a svaki dokument još uvijek
predstavlja jednu instancu aplikacije. Na svakom prozoru je meni koji funkcionira kao kod
čistog SDI sučelja. Razlika je u tome što je svaki prozor koji radi pod nekom aplikacijom
svjestan drugih prozora koji rade pod tom istom aplikacijom, a tu „svjesnost“ aplikacija može
iskoristiti.
Aplikacija može imati dodatni meni na menubar-u označen sa Windows. Ovaj meni će
sadržavati listu drugih dokumenata koji su otvoreni u drugim prozorima, a odabir jednog od
njih će rezultirati podizanjem prozora u kojem je taj dokument.
Windows meni može ujedno sadržavati i Close all opciju. Ova opcija bi trebala biti
smještena na dnu menia i trebala bi biti odvojena od ostalih opcija tog menia, a kao što sam
naziv kaže trebala bi zatvarati sve gore izlistane dokumente i njihove prozore.
951/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Čisto i kooperacijsko SDI sučelje imaju jednu odliku koju mnogi smatraju problemom.
Ako aplikacija želi otvoriti više dokumenata nego što ima dostupnih prozora, mora se stvoriti
neka vrsta kontrole mora preuzeti otvorene dokumente. Npr. zamislimo da je aplikacija
lansirana nekom zapovjedi kao što je „Kapp *.jpg“ a u radnom direktoriju postoji 2000 .jpg
dokumenata. Pod čistim ili kooperacijskim sučeljem otvorilo bi se 2000 prozora što nije
dobro.
Rješenje bi bilo da imamo neku vrstu kontrolnog prozora u kojem bi bili svi dokumenti
koji su otvoreni i spremni na rad. U prethodnom primjeru to bi izgledalo tako što bi bilo
između 0 i 2000 otvorenih dokumenata i jedan otvoreni prozor koji nadrize te dokumente.
Ovakvo sučelje poznato je pod nazivom kontrolirano SDI sučelje.
Ovdje je važno shvatiti kako kontrolni prozor ne ograničava u nijednom smislu kretanja
prozora koje kontrolira. Ovo nije MDI sučelje, ovo je SDI sučelje koje koristi kontrolni
mehanizam.
Kontrolni SDI mmodel je sagrađen na kooperacijskom SDI modelu te podržava sve
značajke kooperacijskog modela, no ima i neke svoje:
Kontrolni prozor bi trebao biti nazvan „<App> - Control“
Kontrolni prozor bi trebao imati meni koji će biti specifićan za njegovu namjenu tj. File
meni bi trebao sadržavati opciju New entry ali ne i opciju Open.
Opcija Quit zatvara sve dokumente u kontrolnom prozoru (uz upite o spremanju
promjena) i izlazi iz cjelokupne aplikacije.
U instancama gdje je kontrolni SDI model prihvatljiviji aplikacijama nego kooperacijski
SDI model, sadržaj kontrolnog prozora bi trebao biti više-manje očit. No, svejedno bi se
trebala voditi briga o tome da se ne stavljaju kontrole koje su specifične za pojedini prozor u
kontrolni prozor. Primjer za to mogao bi biti Gimp 1.1 koji ima menubar i toolbar prihvatljiv
za sve dokumente u kontrolnom prozoru. Kada bi Gimp 1.1 bio KDE aplikacija svaki
prozor/dokument bi imao svoj vlastiti meni i toolbar, a kontrolni prozor bi sadržavao globalni
konfiguracijski meni, listu trenutno otvorenih prozora ili možda jednostavan splash ekran u
stilu Wordperfect 8.
Prva opcija u prozorskom meniu svakog prozora bi trebala biti kontrolni prozor.
952/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Konqueror
953/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
KDE Network
KDE Network obuhvaća programe vezane uz mreže, kako Internet tako i lokalne
mreže. U ovom poglavlju ćemo reći ukratko ponešto o tim programima uz napomenu da neke
nećemo spominjati (koji nam se nisu činili toliko važni ili zastupljeni).
Kdict
Kdict je grafički klijent za DICT protokol. Omogućava korisniku da pretražuje kroz
bazu podataka kako bi našao pojedinu riječ ili frazu, te mu tada prikazuje pogodnu
definiciju.Kdict pojednostavljuje jednostavne ali isto tako i napredne upite. Lista odvojena
separatorom predstavlja dobar način za pretraživanje riječi koje imaju isto ili slično značenje,
a koje nam je napredan upit prikazao. Kdict svojim izgledom uvelike podsjeća na web
browser. U njega je implementirana naprijed/natrag tj back/forward tehnologija. Riječi koje
su u listi a za koje želimo vidjeti značenje moramo samo kliknuti i značenje riječi će se
prikazati analogno tome u web browseru je link.
Kdict je u stanju raditi sa sadržajem clipboarda pa ga jednostavno možemo
kombinirati sa web browserom ili text editorom. Ako je na računalo postavljen firewall, ako
računalo nema pristup internetu ili ako je server koji se nalazi na dict.org prespor korisniku,
korisnik može postaviti svoj vlastiti lokalni server. Pri tome korisnik dobiva određene
prednosti kao što je mogućnost dodavanja baza podataka.
KNewsTicker
KNewsTicker je dodatni programčić za Kpanel, poznat još i po nazivu Kicker, koji
pruža jednostavan pristup vijestima koje omogućuju stranice kao što su: SlashDot, Linux
Weekly News, Frashmeat itd. Ovo je moguće na taj način što KNewsTicker zatraži od
stranice potreban RSS dokument koji sadrži glavne vijesti kao i linkove na cijelokupne
članke. Takvi dokumenti su vrlo popularni u današnje vrijeme, a KNewsTicker sa sobom nosi
popis stranica koje omogućavaju ovaku vrstu usluge.
No, što su to RSS dokumenti? Ukratko možemo reći da su RSS dokumenti bazirani na
XML-u kako bi se omogučio 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 puštena u javnost je bila RSS 0.9. RSS je zamišljen kako bi na jednostavan način
954/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
prosljeđivao sadržaj 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 izašle brojne verzije RSS-a, zadnja je 2.0, no prve
dvije verzije koriste se za čak 85% dokumenata koji se prosljeđuju ovom tehnikom.
Kopete
Kopete je KDE-ov instant messaging (IM) klijent. Omogućava jednostavnu
komunikaciju što prvenstveno znači da premošćuje zapreke koje stvaraju različite IM sistemi.
kpf
KPF je alat koji pruža jednostavno dijeljenje dokumenata koristeći HTTP. Kpf je
isključivo javni fileserver, što znači da nema ograničenja pristupa shared dokumentima. To u
principu znači da dokumentu koji je postavljen za djeljenje može pristupiti bilo tko. U samom
početku razvoja kpf-a njegova namjena je bila za dijeljnje dokumenata na IRC-a (Internet
Relay Chat). Danas uvelike olakšava dijeljenje dokumenata među udaljenim korisnicima te u
neku ruku zamjenjuje priloge kod slanja e-mail.
Kppp
Kppp je dialer i korisničko sučelje prema shell programu pppd. Dopušta interaktivno
generiranje skripta i network podešavaja. Jednom kada se kppp spoji daje korisniku široku
lepezu statistika i bilježi vrijeme provedeno online. Ugrađeni terminal i skriptni generator
olakšava uspostavu veze i podešavanja. Uz kppp korisniku više nije potreban dodatni terminal
program kao što je seyon ili minicom. Ujedno pruža stalno praćenje telefonskog računa.
KWiFiManager
KWiFiManager je skup alata koji omogućuju podešavanje wireless LAN PC-kartice
na K desktop okruženje. Pruža informacije o trenutnoj konekciji i dopušta korisniku
podešavanje čak do 4 različite nezavisne konfiguracije koje mogu biti pokrenute prilikom
pokretanja Kde-a. KWiFiManager podržava sve wireless LAN kartice koje koriste wireless
extensions sučelje, što uključuje i mnoge kartice koje podržava wlan-ng projekt.
955/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Pim
KAddressBook
KAddressBook je glavna adresar-aplikacija za KDE. Budući je bazirana na kabc
library, podržava resurse koji se mogu koristiti za podizanje i spremanje kontakata na mnogo
različitih lokacija, ne samo na local file sistem nego i LDAP server te SQL bazu podataka.
Korisničko sučelje izgledom podsjeća na MS Outlook.
KAlarm
Kalarm je jedan koristan program pomoću kojeg se mogu postavljati alarmi-poruke,
slati e-mail poruke ili se može narediti pokretanje programa u određeno vrijeme.
KPilot
KPilot je aplikacija koja sinkronizira PlamPilot ili slične uređaje sa KDE desktopom
kao što to čini HotSync za Windows. Može sinkronizirati ugrađene aplikacije.
Knode
Knode je jednostavan za korištenje čitač vijesti. Omogučava čitanje vijesti čak i
početnicima u KDE-u, no ujedno ima i naprednije funkcije za one upućenije. Knode je online
čitač ali uz pomoć newsservera kao što je leafnode može postati offline čitač.
956/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
KDE Grafics
Kdiv
Kdiv je plugin za Kviewshell program koji dopušta Kviewshall-u da prikazuje div
dokumente (.div) koji su produkt TeX typesetting sistema. Kdiv podržava 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 može koristiti za prikazivanje materijala za printanje ili za čitanje dokumenata
online.
KView
KView je preglednik slika na KDE desktopu. U ovom programu moguće je gledati
grafike različitih formata kao što su PostScript, TIFF i sl. Spremanjem slike sa drugom
ekstenzijom moguće je na jednostavna način konvertirati slike u bilo kakve druge grafičke
formate. KView ujedno omogučuje jednostavne procese nad slikama kao što su
sužavanje/razvlačenje rotacija i filtriranje. Pomoću KView programa moguće je postaviti
sliku kao pozadinu ekrana ili kreirati svoj slideshow.
957/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
KDE Utilities
KdiscFree
KdiscFree prikazuje dostupne file devices ( hard disc particije, floppy i CD drives..),
zajedno sa informacijama o njihovom kapacitetu, slobodnom prostoru, tip i mount pointu.
Dopušta i mountiranji ili unmontiranje drives-a i gledanje istih u file manageru. KdiscFree je
sličan 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 sučelje za GNUpg (poznat kao i gpg), snažan alat za enkripciju.
Sa Kgpg alatom jednostavno je enkriptati i dekriptati dokumente i e-mail, što pruža mnogo
sigurniju komunikaciju. Kgpg je olakšao život mnogim korisnicima UNIX operativnih
sistema utoliko što se više ne mora pamtiti sve gpg komande već se enkripcija i dekripcija
mogu izvršiti sa nekoliko klikova mišem.
958/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
KDE Admin
KDE Admin je sveobuhvatni naziv za alate namjenjene administratorima.
Kcron
Kcron je aplikacija za raspored programa koji rade u pozadini. To je zapravo grafičko
sučelje 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 više
arhiva na jednoj traci. KDat je kreiran sa ciljem da se stvori grafičko korisničko sučelje za tar
koje podržava brze selektivne ekstrakcijske odlike programa dds2tar. Mogućnosti koje pruža
KDat su: jednostavno grafičko sučelje do lokalnog filesistem-a i sadržaja traka, mnogobrojne
arhive na jednoj (fizički jednoj) traci, kompleksan zbir arhiva i dokumenata je pohranjen na
lokalnom hard disk-u, selektivan povratak dokumenata iz arhive i backup profili za često
korištene backup-ove.
Kpackage
KPackage je grafičko korisničko sučelje 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
KOffice
KOffice je integrirano office okruženje za K Desktop Environment. Sastoji se od
sljedećih 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, višestruke kolone na stranici, zaglavlja i podnožja, tablice, ugrađivanje teksta
slika i sl. I još mnoge druge.
KSpread
KSpread je program namjenjen izradi tabličnih dokumenata, no koristan je i kada su
nam potrebne matematičke formule ili statistički izračuni. Mogućnosti KSpread programa su:
izrada višestrukih tablica u istom dokumentu, zaglavlja i podnožja, uzorci, korištenje više od
100 matematičkih formula uključujuči 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 može: ugrađivati
clike i clipart u dokument, unositi auto- forme, podešavati značajke objekata kao što su boja
rotacija sjena i sl, grupirati ili od grupirati objekte, podešavati pozadinu, napredno
poništavati/ponavljati, prezentirati uz efekte. Uz sve to može printati kao PostScript, kreirati
HTML slideshow sa samo nekoliko klikova mišem i koristiti XML kao format dokumenta.
Kivio
Kivio je program za izradu dijagrama. Ima slično sučelje kao Visio®. U potpunosti je
integriran u KOffice i može se npr. ugrditi u KWord. Karakteristike ovog programa su
skriptne matrice (stencile) koje korist Python, podrška za Dia matrice, plugin strukture za
dodavanje funkcionalnosti.
960/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Karbon
Karbon je aplikacija KOffice-a za crtanje vektora.
Krita
Krita je program za crtanje i editiranje slika u KOffice. Još je uvijek u izradi, a
trenutno su u potpunosti funkcionalne sljedeće mogućnost programa: crtanje sa bojama i
kistovima, kreiranje vlastitih kistova pomoću krugova i kvadrata, ispunjavanje objekata
bojama i uzorcima, brisanje, airbrush, jednostavni geometrijski oblici,
poništavanje/ponavljanje, podizanje i spremanje dokumenata, unošenje i izvlačenje slika u sve
formate podržane od ImageMagick, dodavanje pomicanje i promjene redosljeda slojeva,
zumiranje, odabir boja, podrška za Wacom tablets i još mnogo toga. Krita ovisi o sljedećim
library: ImageMagick X11, Little CMS (besplatan sistem za management boja).
Kugar
Kugar je program za izradu poslovnih izvješća koja se mogu pregledavati i ispisivati.
Izvješća se mogu pregledavati Konqueror programom, a isto tako moguse ugrađivati i u bilo
koju KDE aplikaciju. Kugar radi na principu spajanja aplikacijski generiranih podataka sa
template-ima kako bi se stvorio završni izvještaj. Podaci i template su specificirani XML-om,
što znači da se aplikacija treba brinuti samo za podatke, dok se template može referencirati
preko URL-a što dopušta da se stvori centralni template library. Ima podršku za direktan
pristup bazama podataka.
KChart
KChart je program za kreiranje dijagrama(chart). Dokumenti stvoreni KChart
programom se mogu ugrađivati u KOffice dokumente npr KWord.
KFormula
KFormula je program koji nam olakšava život pri pisanju matematičkih ili sličnih
formula. Značajke ovog programa su: jednostavnounošenje slova grčke abecede, inteligentno
pomicanje pokazivača, napredno označavanje sintakse, ogučnost izlaza dokumenta u LaTeX
program. Ovaj program se nastoji unaprijediti tako što će podržavati unos dokumenata iz
LaTeX i MathML programa.
961/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Kexi
Kexi je program koji trenutno ne dolazi sa KOffice ali sljedeća KOffice verzija
programa će sadržavati Kexi. To je program za manipulaciju podacima. Pomoću njega mogu
se kreirati baze podataka te kreirati upiti. Ideja za ovakav program došla je iz nedostataka
postojećih programa kao što su MSAccess, FoxPro, Oracle Forms i File Maker. Trenutno
Kexi podržava sljedeće sisteme baza podataka: SQLite, PostgreSQL, MySQL i
FireBird/Interbase. Planirano je da podržava i druge sisteme baza podataka, ponajprija ODBC
sučelje.
962/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
KDevelop
963/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
KDE libraries
Libraries:
Kdecore
Kdecore je osnovni programski framework za svaki kde program. Pruža prisup
konfiguracijskom sistemu, rukovanje komandnim linijama, podizanje i manipulaciju
ikona, neke posebne vrste interprocesorske komunikacije, rukovanje dokumentima i
raznim drugim programima.
Kdeui
Kdeui librarie pruža mnoge widgets-e i standardne dijaloge koje Qt nema, ili imaju
više značajki nego njihov Qt „suparnik“. Pruža ujedno i nekoliko widgets-a koji su
subclassed od Qt-ovih i bolje su integrirane u kde desktop poštivajući korisnikove
postavke.
Kio i ksycoca
Kio i ksycoca libraries sadrže postrojenja za asinkroni mrežno transparentni
ulaz/izlaz i pristup rukovanju mimetype-om.
Kfile
Kfile libraries sadrži kde dokument dijalog i njegove pomoćne klase.
Kjs
Kjs libraries pruža implementaciju JavaScript jezika.
Khtml
Khtml libraries sadrži KHTML dio, HTML widget, DOM API i parser, uključujući
sučelje prema Java i JavaScript jezicima.
Grupne klase
964/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
965/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Auto-Completion
966/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
967/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Plugins i komponente
968/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Kao što svi znaju GNOME je kao i KDE, desktop okruženje za UNIX radne stanice.
Ova činjenica je sama po sebi uzrokovala mnoge polemike oko toga koje desktop okruženje je
bolje. Na ovo pitanje nije lako odgovoriti, tj. na ovo pitanje je nemoguće odgovoriti, jer su
ljudi po svojoj prirodi subjektivni, pa tako ovisno koji desktop korisnik ima, toga automatski
smatra najboljim. No, usprkos svemu jedan važan događaj pokrenuo je lavinu debata oko tog
pitanja, a to je činjenica da je nedavno Sun/Hewlett Packard odlučio koristiti GNOME kao
svoj standardni desktop. Kako je to utjecalo na KDE, najbolje pokazuje njihov odgovor na to
pitaje, a koji je bio: Ne utječe ni malo! Ovo nas vraća ponovno na početak gdje se govorilo o
KDE filozofiji. KDE projekt je osnovan i radi u nadi kako će stvoriti najbolji desktop na
svijetu. Kako se tehnologija neprekidno poboljšava, tako i programeri koji rade na KDE-u
imaju neprekidno pune ruke posla, ali usprkos tome mogli bismo reći da su poprilično up-to-
date. KDE nikada nije bio orjentiran oko podjele tržišta, podjele mozgova, koorporacijske
naklonosti ili bilo kakvog vanjskog utjecaja. Usprkos tome KDE dobiva nagrade kao
„korisnikov izbor“ i kao „programerov izbor“. Zašto? Zato što su kreatori KDE-a unijeli u
svoj posao svu svoju ljubav prema programiranju i pretočili ju u ovaj software, ili možda zato
što je GNOME kontroliran od strane GNOME Foundation, a KDE je oduvijek bio i prema
njihovim riječima zauvijek će biti kontroliran od strane KDE stvaraoca. Gledano sa druge
strane, KDE projekt je jedini Open Source projekt koji nema „dobronamjernog“ diktatora ili
upravljački odbor. Prema njihovim riječima nemaju namjeru mijenjati ovu dobitnu formulu.
969/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Marina Petrovska
970/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
UVOD
971/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
POVIJEST
1973. Xerox proizvodi prvo računalo (Alto) s grafičkim sučeljem da bi 1981. napravili
The Star, čiji sustav je imao većinu obilježja koje imaju današnji 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
padajuće izbornike, a 1984. izbacuje prvog Macintosha na tržište. Iste godine na MIT
sveučilištu je predstavljen "Window System X" - prvi Unixov GUI.
1985. izlazi Geos za Commodore 64 i kasnije Apple II, Commodore proizvodi računalo
Amiga 1000 s Workbench 1.0 sustavom, a Microsoft izbacuje prvu verziju Windowsa,
najavljenu 1983.
1987. Apple izbacuje Macintosha II, prvo Apple računalo s prikazom u boji, izlaze Ms
Windows 2.03 s prozorima koji se mogu preklapati i mijenjati veličinu.
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 računala, Microsoft izbacuje
Windows 3.0 (koji u sebi ima Program Manager).
972/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
1992. Se pojavljuju prvi IBM-ov 32-bitni sustav OS/2 v2.0, Microsoft Windows 3.11 i
Amiga Workbench 3.
1993. Microsoft predstavlja Windows NT, prve 32-bitne Windowse.
1994. pojavljuje se Photon microGUI za Unix-based sustave.
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
omogućava 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 ušminkana verzija Windowsa 2000.
973/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
974/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
kad ga vidite na djelu. Šareno je to sučelje s mnogo boja, prozirnih dijaloških kućica i
prozora, te mnoštvom inovativnih funkcija.Gatesov novi borbeni poklič glasi ".NET" (čitaj:
dot-net). E sad, to nije samo grafičko sučelje, niti operativni sustav, to je, jednom riječju,
filozofija. Microsoftovi programeri koncept svog novog sučelja opisuju sintagmom
"univerzalno platno". Prostor je to gdje se internet, "radni stol" (desktop) osobnog računala i
operativni sustav sažimaju u jedan (i jedinstven) alat koji korisniku omogućuje da istim
tehnikama pretražuje poruke e-pošte, web stranice i sadržaj tvrdog diska. No, kako će
kompjuter znati kada mu treba procesor riječi, kada program za obradu slike, a kada nešto
sasvim treće, Bill Gates još nije potpuno objasnio. Odgovor je, čini se, u "univerzalnoj liniji
za tipkanje" - uvijek aktivnom praznom prostoru u koji korisnik može upisati web adresu, upit
za pretraživanje ili naslov poruke e-pošte što kompjutoru odmah daje dovoljno podataka za
"podizanje" upravo potrebne aplikacije.
Naravno, sve opisano tek je prototip. Ipak, najbliže tome što nas očekuje u vrlo bliskoj
budućnosti već možemo vidjeti u najnovijoj inačici 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 desetljećima. No, to nije slučaj s Linuxom. Taj internet "unixoid"
bio je isključivo dvorište za egzibicije turbo softveraša i nije baš sklon svakome. Još do jučer
Linuxaši su se ponosili time što imaju komandnu liniju i što u njihov klub teško može
prodrijeti netko bez diplome iz informatičkih znanosti ili bar matematike. Osim toga, to je
operativni sustav građen po "open source" načelu - što znači da je svima dostupan nacrt
temelja ("kernela"), čega se treba pridržavati, a dalje svi grade iz donesenog materijala.
Rezultat? Mnoštvo "distribucija" (vrsta) Linuxa, kojima je danas, uz to što korisnika
doista tjeraju na učenje, gotovo jedina prednost to što su uglavnom besplatne (ali ne i
podrška).
Linuxaši su dugo vremena odbacivali i samu pomisao na grafičko sučelje, no danas su
se stvari promijenile. Nekoliko skupina programera počelo je raditi i na tome, a posebno se
istaknula tvrtka Eazel - sastavljena od, a od koga bi drugog, par Macintosh veterana. Njihovo
grafičko sučelje zove se Nautilus, lako se "lijepi" na Linux, dopušta instalaciju s više
stupnjeva složenosti - od početnika do "power usera", ima navigaciju sličnu onoj kako se
pretražuje internet. No, ono što je najzanimljivije način je na koji se prezentiraju datoteke koje
su prikazane tako da odmah upućuju na svoj sadržaj. Mapa s glazbom izgleda kao CD album,
a datoteke su prikazane na isti način kao i na ovitku ploča. Drugi izum omogućava korisniku
975/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
posebno označavanje datoteka pridajući im razne atribute - glavno, tajna, posao, u-radu i
slično. To omogućuje preciznije pretraživanje tvrdog diska.
No, kako će se mala tvrtka boriti protiv "pirata silicijske doline"? Kako bilo, uključili su
se. Prvi im je uspjeh to što će Dell, drugi svjetski proizvođač osobnih računala, svojim
poslovnim korisnicima instalirati Linux s Eazel sučeljem.
Maraton za grafičko sučelje i operativni sustav budućnosti je počeo. Tko će pobijediti
sad je teško procijeniti, a korisnici od žustre konkurencije mogu samo profitirati.
976/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
STRUKTURA
977/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
978/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
2) Drugi sloj je Window Manager koji vodi računa o samom prozoru i ponašanju
prozora (otvaranje, zatvaranje, mijenjanje veličine, minimiziranje, maksimiziranje...).
Najčešće dolazi u paketu s Desktop Environmentom, ali ne mora biti tako - recimo, Gnome je
dolazio sa Enlightenement window managerom dok se uz novije verzije isporučuje Sawfish.
Kao i UNIX, X-i su prilično fleksibilni. Izgled prozora, rad menija i ostale mogućnosti su
kontrolirane od strane WINDOW MANAGER-a. Najčešći WINDOW MANAGER-i su
mwm, fvwm, i twm. Postoji gomila drugih window managera uključujući i fvwm95, koji
simulira Windows-e na UNIX PLATFORMI .
Neki od window managera raspoloživih za Linux:
twm – Tomov window manager
fvwm – virtualni window manager za X11
fvwm95 - virtualni window manager za X11 koji poprilično 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 prilagođen mnogim
UNIX-ima
KDE – K Desktop Environment, besplatna varijacija CDE-a
Twm – program twm za upravljanje prozorima u sustavu X Windows pruža naslovne
trake, oblikovane prozore, nekoliko obrazaca upravljanja ikonama, korisnički definirane
makro funkcije, klik za upisivanje i pokazivačem upravljano žarište tipkovnice, korisnički
određene tipke i povezivanja tipkom miša.
Fwm – program za upravljanje prozorima fwm za X11 jest izvedenica twm-a. Program
je preoblikovan za smanjenje potrošnje memorije, pružanje trodimenzionalnog izgleda
okvirima i pružanje jednostavne virtualne radne površine
Fwm95 – program za upravljanje prozorima fwm95 za X11 je «hakerska preinaka
temeljena na fvwm2.x». Cilj je razvijatelja bio oponašanje glavnih značajki GUI-ja dobro
poznatog operativnog sustava da bi se korisnici ugodnije osjećali u UNIX okružju i radi
izbjegavanja napuhavanja jednostavnog i čistog GUI koda fvwm-a.
Olwm – program za upravljanje prozorima olwm za X Windows sustav primjenjuje
dijelove grafičkog korisničkog sučelja Openlook. To je standardni program za upravljanje
979/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
prozorima za Sunov proizvod Open Windows, ali ispravno radi sa svakim X11 sustavom,
uključujući Xfree86.
Enlightenment – Enlightenment je omiljen i sjajno napisan program za upravljanje
prozorima. Stabilan je i brz. Premda je ispočetka temeljen na rvwm radu, njegove su novije
inačice u potpunosti napisane od nule.
CDE – Common Desktop Environment (CDE) je komercijalni pokušaj prilagodbe
uobičajene radne površine na većinu inačica UNIX-a. Detaljnije sam ga opisala kasnije u
seminaru.
KDE – K Desktop Environment (KDE) je veliki freeware projekt zamišljen za stvaranje
integriranog radnog okručja sličnog CDE-u, ali razvijen i izdan u potpunosti pod GNU Public
License (GPL). Detaljnije sam ga opisala kasnije u seminaru.
980/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
GRAFIČKA SUČELJA
GNOME
981/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Opća svojstva
S GNOME paketom dolazi program pod imenom Kontrolni centar i namijenjen je za
konfiguriranje grafičkog sučelja 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 moguće mijenjati.
982/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
može se povezati s programom Xmms koji je namijenjen za slušanje muzike u mp3 formatu.
Nakon toga, svaki put kad se mišem dvaput klikne na datoteku s ekstenzijom .mp3 ona će se
automatski otvoriti u Xmms-u). HTML Viewer i URL Handlers se odnose na podešavanje
parametara za pregledavanje Web stranica.
Look and Feel sekcija sadrži opcije za podešavanje izgleda aplikacija i menija u
GNOME okruženju. U sekciji Multimedia nalaze se opcije za zvučne efekte (npr. zvukovi
koji se čuju prilikom otvaranja ili zatvaranja prozora, pokretanja ili zatvaranja X Windows
okruženja i sl.).
U sekciji Peripherials nalaze se opcije za podešavanje rada miša i tastature. Ovdje se
može podesiti brzina strelice miša, dvostrukog klika miša, neke postavke vezane uz rad s
tastaturom i slično.
Sekcija Sawfish window manager sadrži opcije koje se odnose na Sawfish, upravitelj
prozorima (eng. window manager) koji dolazi standardno sa GNOME grafičkim okruženjem.
Slika 2.2 prikazuje opcije za podešavanje pozadine ekrana. U pozadinu se može staviti
slika s lokalnog tvrdog diska ili se može odabrati boja za pozadinu (boja može biti jednolika
ili se može podesiti pretapanje jedne boje u drugu). Na slabijim računalima (sve konfiguracije
slabije od PI na 166MHz sa 128MB RAM-a) nije poželjno stavljati sliku kao pozadinu zato
jer to može dosta usporiti rad računala.
983/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
GNOME grafičko okruženje dolazi sa mnogo gotovih tema za prozore. Tema za prozore
određuje izgled prozora u grafičkom sučelju. Slika 2.3 prikazuje prozor za izbor neke od
dostupnih tema. U gornjem dijelu prozora može se odabrati neka od ponuđenih tema dok je u
donjem dijelu prozora prikazano kako ta tema izgleda. Izbor teme za prozore ne utječe na
brzinu rada računala tako da je svejedno koja će tema biti odabrana.
984/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
985/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Svaka virtualna radna površina može biti podijeljena u nekoliko virtualnih ekrana. Ovo
može biti korisno kod niskih rezolucija kada je prozor veći od ekrana. Tada se drugi dio
prozora može vidjeti na drugom virtualnom ekranu. Promjena radne površine (ili virtualnog
ekrana) obavlja se preko GNOME panela ili se može podesiti da se radna površina promijeni
kada se mišem izađe izvan ruba ekrana (Slika 2.5).
986/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
GNOME panel se standardno nalazi u donjem dijelu ekrana. U njemu se nalazi Start
meni iz kojeg se mogu pokretati aplikacije. Kako bi se ubrzao rad, pokraj Start menija nalaze
se ikone za direktno pokretanje programa. Tu je i traka s trenutno otvorenim prozorima. U
desnom dijelu panela nalazi se program za promjenu trenutne radne površine pokraj kojeg je
sat. Ovako GNOME panel izgleda nakon instalacije GNOME paketa. Odabirom opcije Panel
u Start meniju može se promijeniti izgled panela. Na traku za brzo pokretanje programa
mogu se dodati novi programi ili maknuti stari (Start meni->Panel->Add to panel). Na panel
se mogu dodati i GNOME applet-i (Start meni->Panel->Add to panel->Applet). GNOME
applet-i su mali programi koji mogu raditi unutar panela tj. za svoj rad ne trebaju poseban
prozor. Primjeri GNOME applet-a su sat u desnom dijelu panela i program za promjenu radne
površine. Standardno s GNOME paketom dolazi dvadesetak applet-a različitih namjena (npr.
sat, različiti sistemski monitori, mikser za zvuk itd.). GNOME podržava korištenje i više
987/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
panela. Dodatne panele može 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 miša na panel i odabirom opcije Panel->Add to panel. Desnim klikom miša na bilo
koji od panela i odabirom opcije Panel->Properties može se podešavati ponašanje panela
prilikom rada (npr. hoće li panel uvijek biti iznad prozora ili neće i sl.). Na ostatku ekrana
nalaze se ikone i trenutno otvoreni prozori.
Nova ikona se može dodati na desktop desnim klikom miša 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 grafičkom okruženju vrlo je sličan radu u MS Windows operativnom
sustavu. Programi se pokreću dvostrukim klikom miša na neku od ikona. Desni klik miša na
ikonu daje meni s opcijama kao što su kopiranje, brisanje i sl. Desnim klikom miša na prazni
dio radne površine dobiva se meni u kojem se može dodati nova ikona na radnu površinu,
promijeniti pozadina, poravnati ikone na ekranu i slično. Korisnicima koji su već imaju
iskustva u radu s MS Windows operativnim sustavom vrlo se lako prilagoditi GNOME
grafičkom sučelju zato jer su razlike u načinu rada i korištenju male.
Zaključak
988/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Konfiguracija
KDE Control Center je mjesto gdje se podešavaju postavke KDE grafičkog okruženja.
Program se može pokrenuti iz Start izbornika odabirom Start -> Control Center, što će
otvoriti glavni prozor (Slika 3.1) sa grupama postavki za podešavanje. Moguće je pristupiti i
svakoj od postavki izravno, bez pokretanja KDE Control Center-a, jednostavnim odabirom u
Start -> Configuration -> KDE izborniku.
989/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
990/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Opća svojstva
KDE sučelje je svojim izgledom i rasporedom elemenata vrlo slično MS Windows
grafičkom sučelju. Ikone se na radnu površinu postavljaju pritiskom na desni gumb miša, a
sve aplikacije se pokreću iz Start izbornika koji se nalazi u donjem lijevom uglu i označen je
velikim slovom K. Ikone za pokretanje aplikacija u Start izborniku razvrstane su (ovisno o
njihovoj funkciji) u odgovarajuće grupe:
Amusement - igre i ostali programi namijenjeni za zabavu,
Applications - važnije 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 - mrežni klijenti (web, mail, news grupe),
Office - uredski alati,
Terminals - terminali.
Prilikom instalacije aplikacija iz distribucije i ostalih aplikacija napisanih za KDE
grafičko okruženje, ikone tih aplikacija automatski će se pojaviti u odgovarajućoj grupi u
Start izborniku. Ukoliko se ikona nakon instalacije ne pojavi u Start izborniku potrebno je
izdati naredbu update-menus koja će osvježiti izbornike.
991/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
992/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Zaključak
KDE grafičko sučelje je vrlo stabilan i dobar proizvod, s kojim dolazi mnoštvo
kvalitetnih aplikacija koje su većini korisnika dovoljne za svakodnevan rad na računalu. Za
razliku od nekadašnjih grafičkih sučelja za Linux operativni sustav, KDE kao i Gnome sučelje
slijedi filozofiju MS Windowsa, pa je korisnicima naviknutima na rad u MS Windows-ima
prijelaz na KDE prilično bezbolan.
Testirana grafička sučelja za Linux operativni sustav pokazala su se vrlo kvalitetnim. Po
svojim mogućnostima konfiguracije i prilagođavanja korisniku nadmašuju MS Windows
grafičko sučelje. Jednostavna su za korištenje i pružaju sve prednosti point-and-click
tehnologije.
Gledano sa strane korisnika, razlike između ta tri sučelja vrlo su male (između GNOME
i Ximian GNOME paketa gotovo da ih i nema) i po mogućnostima i po načinu korištenja.
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 približno jednaki za sva tri sučelja. Minimalna preporučena
konfiguracija za sva tri sučelja je PI na 166MHz sa 128MB RAM memorije. Na slabijim
konfiguracijama pokretanje grafičkog sučelja previše usporava rad za normalno korištenje
računala. Testiranja su pokazala da na slabijim konfiguracijama računala GNOME i Ximian
GNOME rade brže od KDE grafičkog sučelja. Na jačim konfiguracijama (PII na 400MHz sa
256MB RAM memorije) razlika u brzini rada je neprimjetna.
993/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
XIMIAN
Opća svojstva
Budući da je Ximian grafičko okruženje samo nadogradnja GNOME paketa s njim
dolazi isti softver za konfiguraciju. Program Kontrolni Centar za podešavanje grafičkog
sučelja je isti kao i u GNOME paketu.
Slika 4.1 prikazuje tipičan izgled Ximian grafičkog okruženja.
994/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix desktop system
Grafičko sučelje i rad s njim isti su kao u slučaju GNOME grafičkog okruženja. Jedina
razlika između 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.
Zaključak
Ximian je grafičko okruženje za Linux i Unix operativne sustave koje korisnicima
omogućava jednostavnu primjenu i konfiguraciju računala. Izgledom i načinom korištenja
vrlo je slično grafičkom okruženju iz MS Windows operativnog sustava tako da će ga
korisnici koji imaju iskustva s MS Windows grafičkim okruženjem vrlo brzo naučiti koristiti.
Ximian je samo nadogradnja GNOME paketa tako da su ta dva grafička okruženja vrlo slična
izgledom i načinom korištenja. Razlika između GNOME i Ximian Desktop paketa je u
popratnim aplikacijama koje s njima dolaze. Kao i u GNOME paketu, u Ximian Desktop
paket uključeni su i programi za konfiguraciju računala iz grafičkog okruženja što uvelike
olakšava rad neiskusnim Linux korisnicima.
995/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
DNS I DHCP
996/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
DNS
Server imena domena (Domain name server, kraće DNS) je internetska direktorijska
služba. Pomoću DNS se imena domene prevode u IP adrese, DNS također upravlja
prijenosom e-mail-a. Ukoliko računalo ne bi moglo pristupiti DNS-u, ne bi mogla pronaći
internet stranice, i slati i primati e-mail.
• DNS sistem sastoji od tri komponente:
• DNS podaci (resource records)
• serveri (name servers)
• internet protokoli koji pribavljaju podatke od servera.
Svih resource records u DNS-u su podjeljeni u milijune datoteke koje se nazivaju zone
(zones). Zone se čuvaju u autoritativne (authoritative) serverima, koji su raspoređeni po
cijelom internetu, koji odgovaraju na upite bazirane na resource records pohranjene u zonama
od kojih imaju kopije. Cashing serveri traže podatke od drugih servera i cashiraju odgovore.
Većina servera imena su autoritativne za neke zone i obavljaju funkciju cashiranja za sve
ostale DNS podatke. Veliki serveri imena su ćesto autoritativni serveri za desetak tisuća zona,
ali većina servera imena su autoritativni serveri za samo nekoliko zona.
Paul Mockapetris osmislio je DNS 1984. godine da riješi sve veće probleme sa starijim
sustavom mapiranje ime-adresa. Stari sustav se sastojao od jedne datoteke pod nazivom
tablica-domaćina (host-table), koja je održavala Stanford Research Institute's Network
Information Center (SRI-NIC). Kad bi se pojavile nove host names SRI-NIC bi ih dodavale
tablici – nekoliko puta tjedno. Sistemski administratori bi pribavljali najnoviju verziju (preko
FTP) i prilagodili bi svoje serveri imena domena (Domain name servers).
Ali kako se internet širio, tako je tablica-domaćina postala sve nepraktičnija. Iako je
dobro funkcijonirala za mapiranje ime-adrese, nije bila praktična ni efikasna za
prilagođavanje i distribuiranje podatake. Pošto je stabilnost interneta u pitanju Mockapetris i
još par ljudi su odlučili pronaći bolji način.
Tako je nastao DNS. Dobra stvar je to što nijedna organizacija nije sama odgovorna za
prilagođavanje. DNS je vrsta distribuirana baza podataka; podijeljena je preko puno servera u
997
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
cijelom svijetu. Nijedan server ne pohranjuje sve podatke. Zbog toga DNS praktički
dozvoljava neograničen 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)
.hr
dvs
Svaki čvor predstavlja jednu domenu. Sve sto je ispod čvora pripada njezinoj domeni.
Jedna domena može biti dio jedne druge domene, npr. računalo dvs pripada i .hr domeni i
.com domeni.
Popis 7 glavnih domena:
.com Komericijalne organizacije
.edu Obrazovne institucije
.gov Državne institucije
.mil Vojne institucije
.net Veliki mrežni centri za podršku
.org Organizacije koja ne spadaju među prijašnjih
.int Međunarodne organizacije
.arpa je posebna domena koja se koristi za adresa-ime mapiranje.
DNS server je računalo koje koristi DNS software. Pošto većina servera koriste Unix
operativne sustave, najpopularniji DNS program je BIND (Berkeley Internet Name Domain),
ali postoji i software za PC i Mac.
DNS software uglavnom se sastoji od dva djela: server imena i resolver. Server
odgovara na upite internet browsera dabavljanjem ime-adresa konverzije. Ukoliko server ne
zna odgovor na upit, onda resolver trži podatke od drugog servera.
Kad se upiše URL u internet browser, ona šalje upit najbližem serveru. Ako je taj server
već odgovorio na neki upit za isti host name (unutar nekog vremenskog roka, koji je postavio
administrator da se izbjegne da se pošalju stari podaci), onda će naći podatke u svom cashe-u
i odgovoriti.
998
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
Ukoliko server ne zna za to ime domena, onda resolver pokušava ''riješiti'' problem
slanjem upita drugom serveru koji se nalazi višlje na stablu. Ukoliko to ne riješi problem,
onda će taj drugi server isto poslati upit dalje – sve dok se ne nađe 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 pronađeni, šalju se natrag browser-u, i browsera se upučuje se na traženu
internet stranicu. Obićno se taj proces brzo odvija , ali može se dogoditi da potraje i dulje (15-
ak sekundi). U najgorim slučajevima se može dogoditi da se pojavi poruka da domena ne
postoji, iako postoji.
To se događa jer autoritativnom serveru treba dosta vremena da odgovori na upit, a
računalo ističe vrijeme čekanja. Nakon isteka vremena računalo odbaci spoj. Kasnijim
pokušajem postoji velika mogućnost da će proraditi, jer je autoritativnom serveru prošlo
dovoljno vremena da odgovori i prvi sever je pohranio podatke u svom cash-u.
DNS konfiguracija
Biranje Domene
Treba se izabrati ime domene prije nego što se konfigurira DNS poslužitelj.
Ovdje se koristi primjer dvs.net.hr. Boot Datoteka Named provjerava boot datoteku pri
pokretanju tako da se početne postavke i podaci mogu učitati.
Primjer named.conf datoteke :
999
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
#
# Boot file for server solaris, primary server
# for dvs.net.hr.
#
options {
directory "/var/named";
forwarders {
299.18.99.151;
299.8.183.1;
};
forward first;
dialup yes;
heartbeat-interval 1440;
};
zone "." {
type hint;
file "named.ca";
};
zone "3.5.10.in-addr.arpa." {
type master;
file "private.rev";
};
zone "0.0.127.in-addr.arpa." {
type master;
file "private.local";
};
1000
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
directory
Direktorij pod kojeg se mogu pronaći datoteke. /var/named direktorij je tradicijonalan
iako se konfiguracijske datoteke najčešće nalaze u direktoriju pathname/etc.
forwarders
Popis IP adresa kojima se šalju upiti.
forward
Način na kojem se šalju upiti. Upiti se šalju prvo adresama navedenima u forwarders.
Samo ako nijedan poslužitelj ne odgovori ovaj će poslužitelj sam obaviti posao. Ako se ova
postavka postavi na “only”, onda ovaj poslužitelj nikada ne obavlja pretrage sam.
dialup
Označava da ovo računalo koristi Dial-up.
heartbeat-interval
Interval u kojem se obavlja održavanje, izraženo u minutama. Ova postavka je inicijalno
postavljna na 60min.
zone
Podaci o određenoj domeni. Linija pod navodnicima daje ime domene.
type
Vrsta podataka domene. “hint” znači da podaci služe za pronalaženje glavnih
poslužitelja domena (root domain server). “master” znači da je ovaj poslužitelj glavni za ovu
domenu.
file
Datoteka iz koje se učitavaju podaci poslužitelja imena.
/var/named/named.ca Datoteka:
Kad poslužitelj obavlja svoj posao (ali ne kada šalje upite), treba mu početna točka za
pretraživanje domena. Ova datoteka sadrži IP adrese poslužitelja za glavnu domenu.
Prvi dio ove datoteke pokazuje da su poslužitelji imena za glavne domene ovi koji su
navedeni. Drugi dio pokazuje IP adresu svakog poslužitelja imena. Brojevi (518400 i
3600000) određuju time-out za ove unose. Ovi brojevi moraju biti dovaljno veliki da time-out
ne bi bio problem.
1001
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
. 518400 IN NS D.ROOT-SERVERS.NET.
. 518400 IN NS E.ROOT-SERVERS.NET.
. 518400 IN NS I.ROOT-SERVERS.NET.
. 518400 IN NS F.ROOT-SERVERS.NET.
. 518400 IN NS G.ROOT-SERVERS.NET.
. 518400 IN NS A.ROOT-SERVERS.NET.
. 518400 IN NS H.ROOT-SERVERS.NET.
. 518400 IN NS B.ROOT-SERVERS.NET.
. 518400 IN NS C.ROOT-SERVERS.NET.
;
; Addresses
;
D.ROOT-SERVERS.NET. 3600000 IN A 128.8.10.90
E.ROOT-SERVERS.NET. 3600000 IN A 192.203.230.10
I.ROOT-SERVERS.NET. 3600000 IN A 192.36.148.17
F.ROOT-SERVERS.NET. 3600000 IN A 192.5.5.241
G.ROOT-SERVERS.NET. 3600000 IN A 192.112.36.4
A.ROOT-SERVERS.NET. 3600000 IN A 198.41.0.4
H.ROOT-SERVERS.NET. 3600000 IN A 128.63.2.53
B.ROOT-SERVERS.NET. 3600000 IN A 128.9.0.107
C.ROOT-SERVERS.NET. 3600000 IN A 102.33.4.12
/var/named/private.hosts datoteka:
Ova datoteka sadrži IP adrese privatne mreže.
Primjer private.hosts datoteke:
@ IN SOA solaris.dvs.net.hr.
root.solaris.dvs.net.hr. (
2000050201 ; Serial
1002
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
dvs.net.hr. IN MX 10 solaris.dvs.net.hr.
dvs.net.hr. IN A 10.5.3.1
Objašnjenje koda:
@
Domena. Ovo je skraćenica za domenu koja je navedena u named.conf datoteci
(dvs.net.hr u ovom slučaju).
IN
Internet. Upućuje da se radi o zapisu za internet.
SOA
Source of Authority. Ovaj unas sadrži podatke o tome koje je računalo glavni poslužitelj
imena za ovu domenu (solaris.dvs.net.hr u ovom slučaju) i komu se treba obratiti u slučaju
problema (root.solaris.dvs.net.hr). Serijski broj se koristi da se označi gdje su se dogodile
promjene. Ostali brojevi daju vrijeme isteka za podatke koji ovaj poslužitelj nudi. Serijski
broj se treba povećavati sa svakom verzijom datoteke.
1003
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
NS
Name Server. Ova linija upućuje na to da je solaris.dvs.net.hr poslužitelj 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 nužno, ali upućuju
upite za www.dvs.net.hr prema solaris.dvs.net.hr
MX
Mail Exchange. Ova linija upućuje sustavu gdje se mail za korisnik@dvs.net.hr treba
poslati (solaris u ovom slučaju).
1004
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
/var/named/private.local datoteka:
Ova datoteka dopušta “obrnutu pretragu” za localhost adresu. Ova datoteka nije nužna.
Primjer private.local datoteke:
;
; Reverse address file for localhost
;
;name ttl class type data
;
; Source of authority
@ IN SOA solaris.flibble.orac.net.au.
root.solaris.flibble.orac.net.au. (
2000050201 ; Serial
10800 ; 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 class type data
1 IN PTR localhost.
1005
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
DHCP
1006
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
Client može dobiti više DHCPOFFER paketa od više servera, pa mora birati jedan od
njih. Tako pošalje DHCPREQUEST paket, koji identificira određeni server i ponudi
«posudbi» koja najbolje odgovara. Odluka se može zasnivati na tome koji server daje najdulju
«posudbu», ili koji nudi najviše podataka koji su određenom 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 više ne vrijedi (moguće 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
počeo iz početka.
Kad client dobije DHCPACK paket, vlasništvo i održavanje «posudbe» postaju
odgovornost clienta. Client-i bi trebali testirati adresu koja im je ponuđena slanjem ARP
upita, pa ako neki drugi čvor odgovori na upit client će pretpostaviti da je ponuđena adresa
već u uporabi. Tada bi client trebao odbaciti ponudu slanjem DHCPDECLINE poruke serveru
koji je bio ponudio. Isto će poslati novi DHCPREQUEST paket, pokrenući 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 može
osloboditi i ponuditi drugim korisnicima. Ukoliko server ne dobije potvrdu od clienta za
nastavak korištenja, označava posudbu kao ne-obnovljenu i učini je dostupnom za druge
client-e.
1007
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
DHCP jezik:
1008
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
ovaj unos se odnosi na klasu A mreže 10.2.0.0.. Međutim, samo adrese na manjoj mreži
(10.2.3.0.) su dostupne. Čak ni sve adrese u toj mreži nisu dostupne, jer je najveća adresa
10.2.3.200.
Opcije u dhcp.conf datoteci imaju uglavom slijedeću sintaksu:
opcija opcija-ime opcije-podaci
Neke opcije su IP adrese ili imena domaćina (hostnames), neke su brojevi ili tekst, dok
su neke Boolean vrijednosti (true/false, on/off). Treba navesti riječ option tako da bi DHCP
server znao da je ono što slijdi opcija, a ne deklaracija subnet-a ili nešto drugo.
1009
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
Slijedeća tablica nudi pregled najčešćih DHCP opcija. Postojih još, ali većina njih se
odnose na specifične protokole ili servere
domain-name-
Lista servera imena za specifičan subnet. Lista IP adresa
servers
netbios-name-
Ime WINS servera Lista IP adresa
servers
1010
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
1011
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
1012
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
Start i end označavaju razdoblje u kojemu posudba vrijedi, svaki unos je oblika:
weekday yyyy/mm/dd hh:mm:ss;
Weekday je brojčana vrijednost za dan (0 za nedjelju, kao što je ovdje slučaj), datum i
vrijeme se računaju po Greenwich Mean Time, a ne po lokalnom vremenu.
Unos hardware-a je isti kao što je u dhcp.conf datoteci i daje adresu mrežne kartice. Uid
unos je jednoznačan identifikator za client, koristeći ASCII-string identifikator koji daje client
ili vrsta hardware-a sa adresom hardware-a (u ovom primjeru 01).
Konfiguracija client-a
1013
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
Može se konfigurirati tako da neki uređaji koriste DHCP, a drugi statične adrese. Kad se
sustav pokrene, poziva se /etc/rc.d/network scripta. Ako je IPCONFIG linija jednaka "
dhcpclient" za odgovarajuću mrežnu karticu, onda se preskače konfiguracija za tu karticu.
Kasnije, za vrijeme boot procesa, scripta DHCP client-a, client će zatražiti
konfiguraciju od DHCP servera.
U većini slučajeva je standardna koniguracija client-a dovoljna. Ukoliko ne bi bila,
client ima svoju konfiguracijsku datoteku: /etc/dhcclient.conf. Ukoliko postoji više uređaja na
mreži sa razičitim postavkama, onda se postavke trebaju staviti u skupinama po uređajima, pa
se može dobit ovako nešto:
interface eth0
send dhcp-lease-time 3600;
request subnet-mask, broadcast-
address,time-offset, routers,
domain-name, domain-name-servers,
host-name;
require subnet-mask, domain-name-servers;
1014
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Dns i dhcp
Sigurnost
Na prvi pogled može se činiti da nema puno potrebe za osiguravanjem DHCP sustava.
Međutim, s obzirom koliko je DHCP važan, valjalo bi postaviti neke sigurnosne mjere.
Prva stvar je sam uređaj. Iako nestanak struje od nekoliko sati ne može stvoriti puno
problema , duži nestanak struje bi mogla značiti da neka računala 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 uređaji, na kojima DHCP radi pored još drugih uređaja.
Druga stvar koja se mora uzeti u obzir je denial-of-service napad. Ako bi DHCP server
bio dostupan sa interneta, bilo bi moguće za nekoga da zauzme sve IP adrese, pa ne bi ostale
adrese za druga računala. Treba osigurati DHCP promet kroz firewall.
1015
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
Dario Benko
INTERNET HISTORY
1016/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
UVOD
Ovo je prikaz samo malog dijela događaja koji su prethodili ovoj velikoj mreži bez koje
bi naš današnji svijet bio nezamisliv.
1017/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
1957.god. (4. listopada) SSSR lansira prvi umjetni zemaljski satelit, Sputnik.
ovo je početak globalnih telekomunikacija. Sateliti danas igraju vrlo važnu ulogu u
prijenosu podataka.
1018/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
1019/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
Slika 1.
1020/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
1971.god. Ray Tomlinson, BBN izumio prvi E-mail - program za slanje poruka preko
mreže.
E-mail je još uvijek glavni način komunikacije ljudi preko Interneta.
ARPANET narastao na 15 čvorišta (nodes) (23 hosts): UCLA, SRI, UCSB,
University of Utah, BBN, MIT, RAND, SDC, Harvard, Lincoln Lab, Stanford,
UIUC, CWRU, CMU, and NASA(Ames). (vidi -> Slika 2.)
Slika 2.
1021/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
1976.god. umrežavanje se sve više širi svijetom te i kraljica Elizabeta šalje e-mail.
UUCP (Unix-to-Unix CoPy) razvijen u AT&T Bell Labs i distribuiran sa UNIX-
om sljedeće godine. UNIX je bio i još je uvijek glavni operativni sustav korišten
od strane sveučilišta i istraživačkih struktura.
Dr. Robert M. Metcalfe razvija Ethernet, presudni element prema razvoju LAN-a.
- rođen SATNET (Atlantic packet Satellite network) koji je povezivao Ameriku i
Europu. Korišteni su INTELSAT sateliti koje je posjedovao konzorcij zemalja, a
ne isključivo američka vlada.
Department of Defense počinje eksperimentirati sa TCP/IP protokolom i uskoro ga
odlučuje upotrijebiti za ARPANET.
1977.god. E-mail sve više kreće uzlaznom putanjom i Internet postaje stvarnost.
1022/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
1980.god. (27.10) ARPANET potpuno stao zbog nehotičnog širenja "status-message "
virusa.
1981.god. BITNET, "Because It's Time NETwork" je kao surađivačka mreža započela
svoj rad kod gradskog Sveučilišta New York, sa prvom vezom prema Yaleu.
utemeljen je CSNET (Computer Science NETwork) kao pružatelj mrežnih servisa,
pogotovo E-maila. CSNET kasnije postaje poznat kao Computer and Science
Network.
1023/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
1024/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
1025/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
1026/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
NSFNET se vraća nazad prema istraživačkoj mreži. Glavni dio SAD backbone
prometa sada usmjeren kroz međusobno povezane mrežne dobavljače (network
providers).
WWW premašuje ftp-data (u ožujku) kao servis s najvećim prometom na NSFNet
temeljen na broju paketa, i u travnju temeljen na broju bajta.
tradicionalni on-line dial-up sistemi (Compuserve, America Online, Prodigy)
počinju pružati pristup Internetu.
registracija naziva domene nije više besplatna.
pojavljuju se nove WWW tehnologije: Mobile code (JAVA, JAVAscript,
ActiveX), "Virtual environments" (VRLM), "Collaborative tools" (CU-SeeMe).
1027/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
2001.god.
virusi godine: Code Red, Nimda, SirCam, BadTrans.
novonastale tehnologije: Grid Computing, P2P.
GÉANT, "the pan-European Gigabit Research and Education Network" stavljena u
funkciju zamjenjujući tako "TEN-155 network".
radio stanice počinju emitiranje preko Web-a.
visoke škole u pet američkih država (Michigan, Missouri, Oregon, Virginia i
Washington) među prvima dobivaju Internet2 pristup.
Napster prisiljen obustaviti svoje usluge, ali će se ponovno javiti kasnije kao
"subscription service".
Europsko vijeće dovršilo je međunarodni "cybercrime" ugovor i usvojilo ga 9.
studenog. Ovo je prvi ugovor koji obrađuje kaznena djela počinjena preko
Interneta.
1028/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
2003.god. crv SQL Slammer prouzročio jedan od nejvećih i najbrže širećih DDoS
napada ikada. Za otprilke 10 minuta raširio se po cijelom svijetu, srušio je 5 od 13 DNS root
servera kao i desetine tisuća drugih servera, djelujući i na mnoštvo drugih sistema.
nakon ovog, u kolovozu su uslijedili drugi, Sobig.F virus, najbrže rasprostirući
virus i Blaster (MSBlast), jedan od najdestruktivnijih crva.
Little GLORIAD (Global Ring Network for Advanced Application Development)
počinje djelovati. Sastoji se od umreženog prstena preko sjeverne polutke sa
vezama prema Chicagu, Amsterdamu, Moskvi, Novosibirsku, Zabajkal'sku,
Manzhouliu, pekingu i Hong Kongu. Ovo je prva mrežna povezanost preko
Rusko-Kineske granice.
2004.god. -…
2005.god. - ???
1029/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
PRILOG:
Rast Interneta:
1030/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
07/99 56,218,000
01/00 72,398,092
07/00 93,047,785
01/01 109,574,429
07/01 125,888,197
01/02 147,344,723
07/02 162,128,493
01/03 171,638,297
1031/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Internet history
ZAKLJUČAK :
Put do ovog što danas zovemo Internetom nije bio nimalo lagan i nitko tko je
sudjelovao u njegovom stvaranju nije imao konačnu viziju o tome što će se iz svega toga
izroditi.
1032/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Amir Kos
Uvod u Perl
1033/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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 možda ćini da su brojevi
i stringovi različite stvari,Perl ih tretira kao jednake.
Skalarne vrijednosti se spremaju u skalarne varijable.
Brojevi
U Perlu možete 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 znači 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 način na koji perl interpretira vrijednost u programu,perl prihvaća cjeli set floating
point karaktera dostupnih u C:
Npr.:
1.25 # 5/4
7.25e45 # 7.25 * 10 potencirano na 45
-6.5e24 # -6.5 * 10 na 24
-12e-24 # - 12 * 10 na -24
-1.2E-23 # isto kao i iznad
1034/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Integer karakteri
npr.:
12
15
-2004
3485
Nikada ne počinjite broj s 0 zato sto perl podržava i oktalne i hexadecimalne vrijednosti
okatalne počinju 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
reći da perl raspolaže sa 256 različitih karaktera(nema ništa posebno oko NUL karaktera '/0'
kao npr. u C).
Najkraći mogući string nema karaktera,najduži string može ispuniti svu vašu raspoloživu
memoriju jer perl slijedi filozofiju tzv. «no-built in limits»,to daje perlu mogućnost
manipulacijom stringovima kao sirovim binarnim podacima zadatak koji bi nekim drugim
alatima predstavljao veliku teškoću…npr. možete patc-ati svoj OS jednostavno čitajući string
u Perl string,napraviti izmjenu i ponovno zapisati rezultat na izlaz!
Kao i brojevi stringovi se prezentiraju karakterima!
1035/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
'hello
there' # hello, novi red, there (11 karaktera ukupno)
treba primijetit da \n unutar jednostrukih navodnika nije interpretiran kao novi red,nego
jednostavno kao dva karaktera \n(jedino u slučajevima kada je na \ dodan još jedan \ ili ' tek
tada ima posebno značenje.
Izraz Značenje
\n Nova linija
\r Return
\t Tab
\f Formfeed
\b Mjesto unazad(Bckspace)
\v vertikalni tab
\a Bell
\e Escape
1036/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Izraz Značenje
\\ Backslash
\L Sve malo do \E
\E Terminira \L , \U or \Q
Skalarni Operatori
Operatori na neki način proizvode novu vrijednost iz jedne lili više vrijednosti,operatori
očekuju ili string ili broj,ukoliko proslijedite string gdje se očekuje broj,perl automatski
pretvara po svojim intuitivnim pravilima.
Ukoliko koristite string operand na numeričkom 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 pokušate proslijediti string kada se očekuje broj,numerička vrijednost
se proširuje u ekvivalentan string recimo:
"X" . (4 * 5) # isto kao "X" . 20, ili "X20"
1037/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Operator za brojeve
Logički operatori su
jednako == eq
Ne jednako != ne
Manje od < lt
Veče od > gt
Operator za stringove
Stringovi se mogu konkatenirati sa . operatorom
"hello" . "world" # "helloworld"
'hello world' . "\n" # isto kao "hello world\n"
1038/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
jednako == eq
Ne jednako != Ne
Manje od < Lt
Veće od > gt
# 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 naopačke dobili bi «44444» ovaj primjer pokazuje da x nije
komutativan #
1039/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Asocijativnost Operator
Right ** (potenciranje)
Left + - . (plus,minus,konkateniranje)
1040/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Asocijativnost Operator
Skalarne Varijable
Varijabla je mjesto u memoriji koja sadrži jednu ili više vrijednosti,ime varijable je konstantno kroz cijeli
program ali se vrijednost koju sadržava varijabla tipično mijenja.
Skalarna varijabla drži jednu skalarnu vrijednost(bio to broj ,string ili referenca),ime varijable počinje s $ te
sadrži slova ,brojeve ili _,(max 255 znakova ☺)imena varijabli su osjetljiva na velika i mala slova tako da $A
nije isto što i $a.
1041/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Autoinkrement i Autodekrement
$a += 1; # s operatorom pridjeljivanja
++$a; # sa autoinkrementom
$d = 17;
$e = ++$d; # $e i $d su sad= 18
ovdje je operator ++ korišten kao prefix tj. operator je lijevo od operanda,operator se može koristiti i sa desne
strane izraza,u tom slučaju rezultat je ostao isti
$c = 17;
$d = $c++; ………………….# $d = 17, ali $c = 18
Auto dekrement se ponaša na sličan način samo što on ne dodaje već oduzima vrijednost .
$x = 12;
--$x; # $x sada iznosi 11
$y = $x--; # $y =11, ali sada je $x = 10
1042/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
$a=5.3;
$name=«amirko\n»;
chop($name) # $name=«amirko»
$name=«car the one»
chop($name); $name=«car the on»;
$name=«car the one»
$name=chop($name) # GREŠKA $name=«e»;
chop($name) # OK odsijeca zadnji karakter;
Ukoliko funkciji proslijedimo prazan string ona ne radi ništa i ne vrača ništa,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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Kao što se vidi case shifting string escape su zapamćeni unutar stringa,sve dok se ne
iskoriste,tako da iako prvo slovo «BARNEY» ne slijedi \u,već ostaje veliko slovo zbog \u.
1044/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Kako unijeti text u skalarnu varijablu e pa jednostavno,svaki put kada koristite <STDIN> gdje
se očekuje skalarna vrijednost,perl čita tekst sa standardnog ulaza sve do i uključujući newline
karaktera(\n).
$a = <STDIN>; # upiši tekst
chomp($a); # riješi se \n
ili skraćeno:
chomp ($a =<STDIN>); # bez \n
Ispis
Ispis se vrši jednostavno pozivajući 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 dešava ako koristite skalarnu varijablu prije nego što ste ju definirali,ništa posebno,i
svakako ništa fatalno,sve varijable imaju undef vrijednost prije nego što im je išta
dodijeljeno,ta vrijednost je najsličnija 0 kada se koristi kao broj ili kao prazan string kad se
koristi kao string.<STDIN> naprimjer vraća undef vrijednost kada više nema što pročitati
Nizovi i Liste
Lista je uređeni skup skalarnih podataka,a niz je varijabla koja drži listu,svaki element niza je
zaseban skalarna varijabla sa svojom skalarnom vrjednosti,te vrijednosti su uređene što znači
da imaju uređen slijed od najmanje pa do najveće vrijednosti.
Niz može biti prazan ali isto tako može biti velik da napuni svu raspoloživu memoriju sve u
duhu perlove filozofije «bez ograničenja»
Literarna reprezentacija
Lista se sastoji od zarezom odvojenih vrijednosti zatvorenih u zagrade.
(1,2,3) # niz od 3 vrijednosti 1, 2, and 3
("fred",4.5) # dvije vrijednosti, "fred" and 4.5
ne nužno konstantnih:
1045/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
qw= 'qoute word ' koji kreira listu stringova razmake tretirajući kao granicu gdje završava
jedan a počinje drugi string
Deklaracija liste se sastoji od @ pa imena varijable:
@somelist;#dekalracija liste
@amirko(); #deklaracija neinicijalizirane liste
1046/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Dodjeljivanje
Najvažniji je operator dodjeljivanja,koji daje vrijednost varijabli u nizu,= ,perl potom
odlučuje da li je skalarno dodjeljivanje ili nizovno dodjeljivanje:
Ukoliko broj elemenata koji dodijelimo ne odgovara broju varijabli koje čuvaju
vrijednost,desna strana se odbacuje a lijeva strana dobiva vrijednost undef.
List varijabla ukoliko se pojavljuje unutar postojeće liste mora biti zadnja,zbog toga što je
pohlepna i pregazi sve ostale vrijednosti.
Pri dodjeljivanju varijable niza skalarnoj varijabli dobivamo broj elementa u datom nizu
1047/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
duljina se također vraća kada dodjeljujemo listu skalarnoj varijabli,to se zove skalarini
kontekst ili list kontekst ovisno s koje strane jednakosti se nalazi koji operand.
Npr.:
@fred = (4,5,6); # inicijaliziraj @fred
($a) = @fred; # $a=@fred[0]; u $a se nalazi prvi element liste @fred
u prvom primjeru fred je inicijaliziran na (1,2,3) u drugom primjeru se je napravljeno dodjeljivanje listi ($a)
stoga se dodjeljuje prvi element @freda igoririajući sve ostalo sto slijedi.Dodojeljivanje listi je već samo po sebi
vrijednost liste te se može kombinirati sa drugim dodjeljivanjima
@fred = (@barney = (2,3,4)); # @fred= (2,3,4) @barney= (2,3,4)
@fred = @barney = (2,3,4); # isto samo kraće ☺
@fred je zbog toga što kreiramo list varijablu selektirajući dio liste a ne skalarnu vrijednost
npr. $a za dohvaćanje jednog elementa.
1048/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
$c = $fred[$a-1]; # $c = 8
($c) = (7,8,9)[$a-1]; # splice $c=8;
ili
@fred = (7,8,9);
@barney = (2,1,0);
@backfred = @fred[@barney];
# same as @fred[2,1,0] ili ($fred[2],$fred[1],$fred[0]), ili @backfred =(9,8,7)
pokušamo li dohvatiti izvan granica
@fred = (1,2,3);
$barney = $fred[7]; # $barney = undef
indeksirajući izvan dosega automatski proširujemo listu,dajuči nerefrenciranim elementima undef vrijednosti
@fred = (1,2,3);
$fred[3] = "hi"; # @fred = (1,2,3,"hi")
$fred[6] = "ho"; # @fred =(1,2,3,"hi",undef,undef,"ho")
@fred = ("fred", "wilma", "barney", "dino");
print $fred[-1]; # prints "dino"
print $#fred; # prints 3
print $fred[$#fred]; # prints "dino"
1049/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1050/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Reverse funkcija
Reverse funkcija obrće listu argumenata koja joj je proslijeđena,vračajuči 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Sort funkcija
funkcija by_ može biti napisana da radi sa bilo kojom vrstom podataka,ovaj način sortiranja je
u perlu čest stoga perl je predvidio poseban operator «spaceship operator» space ship
operator vrača identične vrijednosti kao i by_number procedura tako da sada možemo pisati.
sub by_number {
$a <=> $b;
}
1052/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Vjerojatno se pitate kako napraviti kombinaciju ili što ako moram sortirati po brojevima i po
karakterima evo jedan od načina,ili sve omoguće kombinacije ova dva izraza.
sub by_mostly_numeric {
($a <=> $b) || ($a cmp $b);
}
ukoliko je rezultat spaceshipa –1 ili 1 ostatak se preskače i povratna vrijednost je –1 ili 1 ali
ukoliko prvi dio izraza vrati 0 drugi dio izraza se potom izračunava.
1053/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1054/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
KONTROLNE STRUKTURE
Izraz koji prelazi jednu liniju može se staviti u {} čineći tako blok izraz
{
prvi_izraz;
drugi_izraz;
treci_izraz;
last_statement;
}
Blok izraz se prihvaća 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 izračunava 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) izvršava se prvi blok naredbi,ako je pak laž slijedi dio koji se nalazi iza else,evo
nekoliko primjera:
0 # pretvara u "0", false
1-1 # = 0, pretvara se u "0", = false
1 # pretvara u "1", true
"" # prazan string = false
"1" # = true
"00" # nije "" ili "0", = true (ova je čudna stoga paziii)
"0.000" # =true (isto ko i gore);
undef # se izračunava u "", = false
1055/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
}
evo jednog primjera maltertiranja korisnika:
1057/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
do {} while/until izraz
do {
statement_1;
statement_2;
statement_3;
} while (some_expression);
ili recimo primjer:
$stops = 0;
do {
$stops++;
print "Slijedeća stanica\n ";
chomp($lokacija = <STDIN>);
} until ($stops > 5 || $location eq 'home');
for izraz
for ( initial_exp; test_exp; re-init_exp ) {
statement_1;
statement_2;
statement_3;
}
for ($i = 1; $i <= 10; $i++) {
print "$i ";
}
foreach izraz
1058/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Ovaj izraz za argument prima listu vrijednosti,i dodjeljuje ih jednu po jednu skalarnoj
vrijednosti,izvršavajuči tijelo za svako uspješno dodjeljivanje.
Npr.:
@a = (1,2,3,4,5);
foreach $b (reverse @a) {
print $b;
}
rezultat je 54321,možete čak i izostaviti $b perl će to tada interpretirati kao da ste specificirali
$_ tako da bi to skračeno mogli pisati.
@a = (1,2,3,4,5);
foreach (reverse @a) {
print;
}
Last,Next,Redo,Labele,&&,||,?:
Ovi izrazi se mogu kombinirati sa svim kontrolnim strukturama
Last označava zadnji izraz u kontrolnoj strukturi te izlazi iz nje ekvivalent break u C
while (<STDIN>) { # read the input lines
if (/^From: /) { # does it begin with From:? If yes...
if (/eriko/) { # it's from Erik!
print "Email from Erik! It's about time!\n";
}
last; # no need to keep looking for From:, so exit
} # end "if from:"
if (/^$/) { # blank line?
last; # if so, don't check any more lines
}
} # end while
1059/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Next označava da se ide na slijedeću iteraciju(izrazi iza next neće se izvršiti) i izlazi iz
unutarnjih {}
while (something) {
firstpart;
firstpart;
firstpart;
if (somecondition) {
somepart;
somepart;
next;
}
otherpart;
otherpart;
# next comes here
}
somestuff;
last;
}
morething;
morething;
morething;
redo;
}
Labele su mjesta u kodu koja označavamo sa IME LABELE:služe za izlaze iz ugniježđenih petlji možete
koristiti next,last redo u kombinaciji s labelama.
OUTER: for ($i = 1; $i <= 10; $i++) {
1060/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1061/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1062/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
HASHEVI
Hash Funkcije
Keys Funkcija
Keys(%hash) jednostavno iz hasha izdvaja vrijednosti ključeva
$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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Values Funkcija
Values funkcija ispisuje vrijednosti u hashu,na isti način kao i funkcija keys
%lastname = (); # force %lastname empty
$lastname{"fred"} = "flintstone";
$lastname{"barney"} = "rubble";
@lastnames = values(%lastname); # @lastnames=(flinstone,rubble) ili (rubble,flinstone);
foreach $val (values %fred) { # za svaki ključ u %fred
print "na $val imamo ključ $fred{$val}\n"; # ispisi vrjednost i ključ
}
Each Funkcija
Ukoliko želite iterirati po hashu možete koristiti keys,ali je each puno efikasnija,ona vraća
par koji se sastoji od ključa i vrijednosti
Funkcija vraća parove dokle ih god ima kada dodje do kraja hasha vraća praznu listu,prilikom
dodjeljivanja novih vrijednosti hashu,funkcija each se resetira i kreće od početka.
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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Hash slice
Kao i liste,u hashevima možemo pristupati više elemenata istovremeno…tzv. slice.
Promotrimo slijedeći primjer:
1065/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Perl daje STDIN STDOUT,STDERR kao tri glavna ulazno izlazna streama
<> Operator
Ovaj operator se ponaša na sličan način 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 pročitati sve linije u prvi.txt
Potom sve linije u drugom.txt ispisivajući ih na ekran,te će vratiti undef tek pošto je pročitao sve linije,ukoliko
mune proslijedimo argumente čita automatski sa STDIN.
1066/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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
%s String
1067/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
REGULARNI IZRAZI
Regularni izraz je ništa drugo nego pattern ili uzorak koji će se testirati na određeni string,to
testiranje može biti uspješno ili neuspješno,ponekad čete željeti nešto pronaći ili nešto
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 pruža set karaktera za manipulaciju.
.number Precision: digits after decimal point for floating-point number, maximum length for string, minimum
length for integer
}
}
Još jedan jednostavan regularni izraz je operator supstitucije
1068/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Sekvenca
ukoliko tražimo sekvencu karaktera možemo pisati
/[abcd]/ # traži sekvencu koja se sastoji od abcd;
/[a.*bcd]/ #traži sekvencu koja počinje s a slijedi bilo što osim \n i završava sa bcd;
Multypliers
operator + želimo li naći sekvencu koja se sastoji od 1 ili više znakova koristimo + operator
operator ? koristimo kada želimo opcionalno pretraživanje
general multiplier sastoji se od para {} sa jednim ili dva broja unutra
Još jedna grupa operator su zagrade ,uz koju morate escapirati s \ i dodat mu odgovarajući int
/fred(.)barney\1/; # matches fred barney tj bilo koji znak u duljini 1 osim \n
#no match fred barney
1069/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
prioriteti
Name Representation
Parentheses ( ) (?: )
Alternation |
PERL Practical Extraction and Report Language koristi regularne izraze kao svoje jako
moćno oružje
Modifiers:
Modifier Meaning
1070/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Modifier Meaning
s Treat string as single line (^ and $ ignore \n, but . matches \n).
Quatifiers
{n,m} {n,m}? Must occur at least n times but no more than m times
Asertiranje
Assertion Meaning
=~ Operator
Target ovog operator može biti bilo koji izraz koji se izračunava u skalarnu vrijednost.
$a = "hello world";
1071/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
$a =~ /^he/; # true
$a =~ /(.)\l/; # also true (matches the double l)
if ($a =~ /(.)\1/) { # true, so yes...
# some stuff
}
ulaz sa <STDIN> se također izračunava 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 način pisanja koda može kod malo složenijih izraza nalikovati na smetnje u vezi stoga
perl omogućava definiranje vlastitog delimitera uz opciju m
/^\/wwwroot\/docs/ # using standard slash delimiter
m@^/wwwroot/docs@ # using @ for a delimiter
m#^/wwwroot/docs# # using # for a delimiter (my favorite)
1072/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Interpolacija varijabli
Regularni izraz je samo varijabla interpolirana prije nego se testira na specijalne karaktere,kao rezultata možete
slagati regularne izraze od izračunatih 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Substitucija
Već smo spomenuli substituciju,razmotrimo sada načine kako ju možemo malo modificirati.
Ukolko želite da zamjena operira na sve moguće matcheve,a ne na samo prvi na koji naiđe
dodajte g.
$_ = "foot fool buffoon";
s/foo/bar/g; # $_ is now "bart barl bufbarn"
možete također koristiti =~,u ovom slučaju odabrana vrijednost mora biti nešto čemu možete
dodijeliti skalarnu vrijednost,npr varijabla ili element liste.
$line = "c:\\;;c:\\windows\\;c:\\windows\\system;";
@fields = split(/;/,$line); # split $line, using ; as delimiter
# now @fields is ("c:\", "", "c:\windows","c:\windows\system")
1074/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
$line = "c:/;c:/windows;c:/windows/system;";
($first, $second, $third, $fourth) =
split(/;/,$line); # split $line, using ; as delimiter # $fourth=undef;
Join Funkcija uzima listu vrijednosti i lijepi ih zajedno sa «naljepnicom» za svaki element
liste na kraj,želite li lijepiti na početak jednostavan trik je dovoljan
$result = join("+", "", @fields); # $fields[1]=« neki_string+»
analogno radi za ljepljenje na kraj
$output = join ("\n", @data, ""); #$dana[1]=«\n neki_string «
1075/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
FUNKCIJE
Funkciju ili proceduru možete definirati bilo gdje u programu ali ju je preporučljivo 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 vrača se zove «povratna vrijednost» i
nalazi se iza riječi return.
sub sum_of_a_and_b {
return $a + $b;
}
Argumenti
1076/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1077/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
}
# some invocations:
@new = bigger_than(100,@list); # @new gets all @list > 100
@this = bigger_than(5,1,5,15,30); # @this gets (15,30)
Perl vam također omogućuje da kreirate privatne varijable koristeći local,no bitnije je
razumjeti razliku između my i local
$value = "original";
tellme();
spoof();
tellme();
sub spoof {
local ($value) = "temporary";
tellme();
}
sub tellme {
print "Current value is $value\n";
}
This prints out:
Current value is original
Current value is temporary
Current value is original
Da smo koristili my umjesto local ,privatno čitanje $value bilo bi moguće jedino unutar
spoof(),ali sa local privatna vrijednost i nije više 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 vrijednošću. Local varijable su u stvari prerušene globalne vaijable,stoga
koristite radije my nego local ne samo da je brže več je i sigurnije.
Use strict kompajlerska direktiva tjera vas da deklarirate varijable prije nego ih počnete
koristiti.
use strict;
my $a; # starts as undef
my @b = qw(fred barney betty); # give initial value
...
push @b, qw(wilma); # cannot leave her out
@c = sort @b; # WILL NOT COMPILE
Use strict je preporučljivo,jer radi brže(varijable deklarirane s my imaju nešto brži pristup
nego obične varijable,jer čete lakše uočiti tipfelere.
1078/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1079/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
FILE HANDLES
Filehandle je u perlu je ime I/O konekcije između Perl procesa i svijeta,Perl omogućava tri
filehandle STDIN,STDOUT,STDERR ukoliko želite otvoriti neki drugi file napisat ćete nešto
ovako
open(FILEHANDLE,"somename");
$a=«c:/\documents/\amir.txt»
open(IN,$a) || die "cannot open $a for reading: $!";
open(OUT,">$b") || die "cannot create $b: $!";
while (<IN>) { # read a line from file $a into $_
print OUT $_; # print that line to file $b
}
close(IN) || die "can't close $a:$!";
1080/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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 značenja
-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)
-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
Recimo da ste učitali 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Field Description
nlink Number of links to file (usually one for Win32 systems - NTFS filesystems may have a value
greater than one)
1082/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1083/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
FORMATI
open(ADDRESSLABEL,">labels-to-print") || die "can't create"; file handle adresslabel -> file labels-to-print
open(ADDRESSES,"addresses") || die "cannot open addresses"; #otvori addrese za čitanje
while (<ADDRESSES>) { # čitaj
chomp; # makni \n
($name,$address,$city,$state,$zip) = split(/:/); razdvoji ih :
# load up the global variables
write (ADDRESSLABEL); # upisi u file labels-to -print
}
($name,$address,$city,$state,$zip)== imenima definiranim u formatu
primjer ispisa u datoteku labels-to-print
===============================
| Stonehenge |
| 4470 SW Hall Suite 107 |
| Beaverton , OR 97005 |
===============================
===============================
| Fred Flintstone |
| 3737 Hard Rock Lane |
| Bedrock , OZ 999bc |
===============================
1084/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Text polja
@<<<<< # pet karaktera poravnanih u lijevo
@>>>>> # pet karaktera poravnanih u desno
@||||| # pet karaktera poravnanih u centar
Brojevna polja
format MONEY =
Assets: @#####.## Liabilities: @#####.## Net: @#####.##
$assets, $liabilities, $assets-$liabilities
.umijesto < koristimo # točka je opcionalna i označava na koliko će se decimala formatirati
Višelinijska Polja
Dopušta formatiranje vrijednosti koje imaju više od jedne linije informacija, taj fileholder se
označava @*
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 odgovarajuća vrijednost mora biti skalarna varijabla ,a ne
izraz koji vrača skalarnu varijablu, razlog tome je što će Perl promijeniti varijablu dok puni
polje.
Prilkom punjenja polja Perl će otrgnuti onoliko riječi koliko stane u polje ,vrijednost te
varijable ostaje sve ono što nije uspio strpati u polje.
1085/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
format PEOPLE =
Name: @<<<<<<<<<<<<< Comment: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$name, $comment
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$comment
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$comment
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$comment
.
Perl ugrabi onoliko riječi koliko stane u $comment,ostatak stavlja u drugi $comment do kraja.
Šta se dešava 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 može zauzeti $comment, mogli bi napraviti 20 kopija
zadnje linije ali perl pretpostavlja da ste lijeni. Koristeći operator ~~,svaka linija koja sadrži
~~ će biti ponavljana uzastopno sve dok ne vrati "" finalno primjer bi izgledao.
format PEOPLE =
Name: @<<<<<<<<<<<<< Comment: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$name, $comment
~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$comment
.
Perl vam omogućava i definiranje tzv Top-of Page-Format koji sprječava 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
.
Default dužina stranice je 60 linija ali je i to moguće promijeniti.
Korištenje select za promjenu file handle.
Povratna vrijednost selecta je string koji sadrži ime prethodno odabranog handlea.
print "hello world\n"; # like print STDOUT "hello world\n";
select (LOGFILE); # select a new filehandle
print "howdy, world\n"; # like print LOGFILE "howdy, world\n";
print "more for the log\n"; # more for LOGFILE
select (STDOUT); # re-select STDOUT
print "back to stdout\n"; # this goes to standard output
primijetite da filehandle poslije selecta ostaje sve dok ga ne pregazimo novim selectom.
ovo neće imati učinka 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Zaključak:
PERL je jezik namijenjen ljudima koji žele brzo obaviti neke stvari ,za koje bi u drugim
jezicima morali rješavati puno teže i duže, PERL je ne samo lagan za upotrebu već on ujedno
koristi i postojeće alate i solucije.
PERL je također bogat jezik nudeći mnoge funkcionalnosti koje su ugrađene u sam
Jezik ,ljudi ostanu iznenađeni 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 došao
kada ga je Microsoft uključio(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 znači da se ne kompajlira već se koristi PERL
interpreter(slično 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 izvršava ,ne samo što omogućava brzo run-
time izvršavanje ,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 ,možete jednostavno razvijati PERL
programe, ne samo sto postoji debugger ,već je samo kompajler dostatan da ukaže na poruku
o grešci,.
Interpreter ne izvršava program ako se program ne iskompajlira ,ovo vas spašava od
interpreterskih noćnih mora gdje se prva polovica programa izvršava 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 možete:
-možete pristupati vašoj bazi podataka(Win32::ODBC)ili da radi s vašim Word procesorom
ili spreedshetom koristeći OLE automation.
-za filtriranje e-maila ,sa slanje e-maila, komunikaciju s FTP i HTTP serverima
1088/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1089/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Tamara Krutman
Ante Penava
PERL
Practical Extraction And Report Language
1090/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
UVOD
Što je Perl?
Povijest Perl-a
Prvu inačicu Perl-a napisao je Larry Wall davne 1987. godine. Wall je tada radio
sustav izvješćivanja pogrešaka prilikom kompajliranja programa. Sustav izvješćivanja
pogrešaka trebao je biti po strukturi jednak Usenet-u. Kako je u to vrijeme awk bio
neprimjeren za takve zadatke, a C jezik presložen, Larry Wall se odlučio na stvaranje
posebnog alata koji bi bio moćan s obradom teksta i stvaranjem izvješća. S vremenom je taj
alat prerastao u programski jezik koje je Wall podijelio s ostalima putem Usenet-a. Tako je
zaživio Perl - interpretorski jezik pisan u C-u i namijenjen samo UNIX platformama.
Jednostavnost, veća brzina izvođenja i fleksibilnost koju je Perl nudio naspram ostalih
jezika u to vrijeme za tu primjenu, učinile su ga vrlo popularnim. Zahvaljujući tome Perl se
brzo razvijao obuhvaćajući sve više novih mogućnosti (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 opće prihvaćenih skriptnih programskih jezika opće namjene. Nije više
ograničen samo na UNIX platforme, već postoji i podrška za druge OS (Windows, Mac,...).
Posebnost Perl-a je u tome što u sebi objedinjuje mogućnosti C, sed i awk programskih
jezika, te UNIX-ovih ljuski.
1091/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
U novije vrijeme Perl se zbog svoje opsežnosti počinje sve više izbjegavati kod mlađih
webmastera, te polagano, unatoč mogućnostima koje se preklapaju sa drugim serverskim
jezicima, gubi utrku na webu.
Namjena Perl-a
Kako se s vremenom razvijao, Perl se nije zadržao samo na procesiranju teksta. Danas
je Perl naširoko primjenjivan za zadatke kao što su: administracija sustava, razvoj
interaktivnih web stranica, meržno programiranje, grafičko programiranje, izrada sistemskih i
običnih aplikacija. Perl se primjenjuje kada je potrebno brzo, jednostavno i efikasno razvijanje
ispitnih okruženja programa ili njihovih prototipova te kada se zahtijeva široka prenosivost.
Perl podržava proceduralno i objektno programiranje. Poput C i C++, Perl nema
striktnu granicu između procedura ili objekata.
Perl je izveden kao modulator, tj. interpreter (prevodi računalu ono što korisnik napiše
na poznat jezik jedinica i nula) Perl-a može se dopunjavati bibliotekama koje mu proširuju
funkcionalnost (vrlo velika baza modula). Baza modula je okupljena oko CPAN mreže (eng.
Comprehensive Perl Archive Network). Perl interpreter nije ograničen samo na određenu
primjenu. U žargonu se za Perl kaže da je "otvoren prema svima, ali nije poseban prema
nekome".
Perl je od samog početka 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 opsežnosti počinje sve više izbjegavati kod mlađih
webmastera, te polagano, unatoč mogućnostima koje se preklapaju sa drugim serverskim
jezicima, gubi utrku na webu.
1092/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Perl je od samog početka razvijen kao jezik na UNIX operativnim sustavima jer koristi
njegove osnovne pozive kernela. Kako je njegova raširenost rasla, tako je s vremenom postao
sastavni dio distibucija UNIX i Linux operativnih sustava. Ipak, distribucije obično ne sadrže
najnovije verzije Perla pa ga je potrebno skinuti s Interneta.
Nakon što smo skinuli izvorni kod, koji dolazi u obliku .tar. archive komprimirane
gzip alatom, kopiramo ga u direktorij po želji I otpakiramo arhivu. Otpakiravanje arhive
izvodi se slijedećom naredbom u ljusci:
Nakon toga slijedi proces kompajliranja koji se najčešće izvodi slijedećim naredbama u ljusci:
$ cd stable
$ ./configure
$ make
1093/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Tražeći po internetu potrebni materijal za pisanje našeg seminara o Perlu pronašli smo
komentare kako je pomoću ActiveState Linux Package-a najlakše instalirati Perl na Linux
platformu, te smo napisali kako se instalira Perl na Linux pomoću ActiveState Linux
Package-a.
1094/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
U ovom dijelu smo opisali tipičnu instalaciju za sve *NIX sisteme. Perl module prvo
moramo skinuti sa Interneta. Nakon što smo to učinili kopiramo ga u određeni direktorij, npr.
cp DBD-Mysql.tar.gz /tmp i otpakiramo ga. To možemo napraviti na dva načina:
1.· tar -xzf DBD-Mysql.tar.gz
2.· gunzip -c DBD-Mysql.tar.gz | tar -xf –
Zatim uđemo u direktorij komandom cd DBD-Mysql i započnemo instalaciju upisivanjem:
· perl Makefile.PL
· make
· make test
· make install
Make test nije obavezan korak, ali nam pomaže da vidimo da li ima pogrešaka prije nego što
instalacija bude završena.
Ako koristimo neki drugi compiler, npr. Gnu CC, onda moramo umjesto make
napisati make CC=gcc. Time prisiljavamo program make da koristi gcc compiler. Ukoliko
koristimo gmake umjesto make, gmake moramo upotrebljavati cijelo vrijeme.
Primjer: - perl Makefile.PL
- gmake CC=gcc
- gmake test
- gmake install
Time je modul instaliran i ako nisu prikazane nikakve greške možemo ga koristiti u
našim skriptama.
Da bi instalirali Perl i module moramo biti root.
Više informacija o modulima možemo naći na stranicama http://www.cpan.org.
1095/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Verziju Perl-a koju ćemo opisivati dolazi od firme ActiveState. Veličina file-a je oko
8.6 MB. Za instalaciju nam treba oko 35 MB slobodnog prostora diska. Opisati ćemo
instalaciju Perl-a na Windows 2000 Service Pack 3.
Prvo skinemo .msi file. Klikom na .msi file nudi nam se da Perl instaliramo u
direktorij C:\Perl (to je standardni Perl direktorij). Perl instalira standardne komponente: perl
program, PerlIS - ISAMI interpreter, PerlSE - Perl ActiveX Scripting Engine, Primjere i
Dokumentaciju. Tijek instalacije je automatski osim par standardnih klikova. Perl će
promjeniti, odnosno dodati svoje Environment Varijable koje nam olakšavaju korištenje.
Zatim resetiramo kompjuter.
Environment varijable možemo naći klikom desne tipke miša na Computer ->
Preferences -> Advanced -> Environment Variables I pod opcijom PATH pronalazimo
tražene Perl varijable. U slučaju da neka varijabla fail treba ih unijeti ručno jer bi morali pisati
puni PATH za Perl skripte.
Sve Perl skripte počinju sa #!Perl Dir. Environment varijble nam skraćuju pisanje Perl
Dir-a. Umjesto Perl Dir-a pišemo #!perl.
Za provjeru da li je instalacija uspješno prošla napravimo kratku Perl skrupitu tako da
napravimo novi file na npr. desktopu i imenujemo ga perl.pl. Otvorimo ga u editoru I
napišemo sljedeći kod u file perl.pl:
#!perl
print "Perl je instaliran";
<>;
Prva linija ovog kratkog programa nam govori gdje je Perl direktorij, druga linija
ispisuje recenicu Perl je instaliran, a treća linija mu govori da MS-DOS prozor drži
otvorenim dok ne pritisnemo ENTER na kompjuteru. Ako se nakon duplog klika miša na file,
prozor otvori i u njemu se pojavi ovaj tekst, Perl je uspjesno instaliran.
U Perl-u se nalazi par najosnovnijih modula, ostale module koji će nam trebati
moramo naći i instalirati.
1096/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1097/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Konvencije Perl-a
Kada se kaže "Perl", pod time se misli na elemente, pravila i definicije koje
objedinjuje taj programski jezik, dok "perl" predstavlja njegovu izvedbu (interpreter).
U smislu Perl kodiranja možemo koristiti termine program i skripta s jednakim
smislom. I jedno i drugo je ispravno.
Perl program je običan tekstualni dokument koji se može pisati klasičnim editorom
teksta (npr. joe na Linux OS, ili Notepad na Windows OS).
Struktura Perl-a
Prvi red Perl programa obično počinje posebnim komentarom koji počinje sa #!. On
služi kao uputa UNIX ili Linux ljusci (npr. bash) da se radi o Perl skripti koju Perl interpreter
treba izvesti.
#!/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 našem slučaju, Perl interpreter se nalazi u
direktoriju /usr/bin.
Kod Windows OS prva linija ne mora biti komentar. Važno je samo da skripta ima
sufiks .pl i da za takav tip datoteke OS poziva Perl interpreter.
Drugi red primjera je izraz koji sadrži poziv Perlove predefinirane funkcije -
operatora. To je print operator koji proslijeđuje tekst unutar navodnika na standardni izlaz
STDOUT, ispisuje ga na monitoru. Svaki Perl izraz mora završavati sa ;.
1099/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
U trećem redu napisan je komentar. Obični komentari u Perlu počinju znakom # iza
kojeg slijedi tekst koji interpreter preskače pri izvođenju. Ti komentari služe za umetanje
teksta koji programeru služe za jednostavnije snalaženje u kodu.
Iz takvog slijeda izvršenja Perl skripte, dolazi se do zaključka da Perl nije efikasan za
male skripte i njihova višestruka pokretanja. Razlog je taj što samo kompajliranje uzima nešto
vremena i resursa prije izvođenja, pa trajanje izvršenja samog programa može biti manje od
trajanja kompajliranja. U tom slučaju je korisnost (omjer između korisnog i ukupno utrošenog
vremena) procesorskog vremena mala.
Kod Perla razlikujemo tri ugrađene vrste podatkovnih struktura: skalari (eng. scalars),
polja skalara (eng. arrays), te asocijativna, združena polja skalara (eng. associative arrays).
1100/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Imena varijabli razlikujemo po početnom znaku koji definira tip varijable i imena varijable.
Njihova veličina je jedino ograničena 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 najčešće korištenih operatora. Njihova namjena je
promjena vrijednosti varijabli. Operatori se dijele s obzirom na tip verijable. Na perlop man
stranicama može se naći više o samim operatorima.
Skalarne varijable
1101/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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 označavaju da se unutar znakovnog niza prepoznaju nazivi varijabli, te
da vrijednost toga niza ovisi o vrijednosti te varijable.
Npr.:
$ime = "Tamara"
$obrazac = "$ime pohadja Sveučilište u Splitu."
# $obrazac postaje " Tamara pohadja Sveučilište u Splitu."
Jednostruki navodnici označavaju da znakovni niz ima fiksnu vrijednost.
Najznačajniji operator znakovnih nizova je chop($ime_varijable) koji briše zadnji
znak niza.
1102/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Polja skalara
Polja skalara su spremnici niza skalara čijim vrijednostima se pristupa putem index-a
(prvi element $array [0], drugi $array [1], …).
Označavaju se kao:
@ime_polja
Pridjeljivanje vrijednosti poljima prikazat ćemo kroz primjere:
@trio = ("Ante", "Tamara", "Jana", "4401");
@trio_gusti = @trio;
Pristup određenom elementu polja izvodi se na slijedeći način:
$trio[3] = "1044";
Time smo promijenili zadnji element polja "4401" u "1044". Indeksiranje elemenata
polja počinje od 0.
Najčešći 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 poèetak 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 briše se zadnji znak
@linija = ;
# jedna linija sa standardnog ulaza pohranjuje se u @linija
1103/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Združena polja skalara, poznata jos kao “hashes” su spremnik koji predstavlja
dvodimenzionalno polje skalara. Svakom elementu polja pristupa se putem jedinstvenih
ključeva prema kojem se razlikuje od ostalih elemenata. Ključevi su također skalari i njihova
bitna karakteristika je u tome da Perl ne garantira njihov redoslijed pri njihvom isčitavanju iz
združenog polja skalara.
Združena polja se označavaju kao:
%ime_zdruzenog_polja
1104/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1105/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
LABELA:
while (uvjetni_izraz) {
izraz_1;
izraz_2;
izraz_3; }
for petlja izvodi blok izraza u vitičastim zagradama sve dok je uvjetni izraz koji
ispituje točan (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 vitičastim zagradama za svaki element polja
@polje, pri čemu je vrijednost tekućeg elementa polja sadržana u varijabli $i.
LABELA: foreach $i (@polje) {
izraz_1;
izraz_2;
izraz_3;
}
1106/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
FUNKCIJE (PODRUTINE)
Kao i mnogi drugi programski jezici i Perl pruža 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, učitati iz nekih drugih file-ova, možemo pozvati funkciju indirektno koristeći
varijablu koja sadrži ime funkcije ili CODE reference.
Funkcije su osnovni element svakog programskog jezika. Najčešće se ponašaju poput
običnih operatora čineći promjenu vrijednosti neke varijable ili vraćajući neku vrijednost koja
se može pridjeliti nekoj drugoj varijabli. Osim toga, u određenom kontekstu funkcije izvode i
kontrolu tijeka izvođenja programa (mijenjajući tijek programa od poziva fukcije, preko
izraza kojima je definirana, pa nazad do točke od kuda je pozvana).
U perlsub man stranicama se nalaze detalji vezani uz podrutine.
Definicija podrutine označava se oznakom sub iza čega slijedi ime funkcije i blok
izraza unutar vitičastih zagrada. Pozivom funkcije izvest će se taj blok izraza.
Npr. :
sub ime_funkcije {
izraz_1;
izraz_2;
izraz_3;
}
1107/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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)
Vraćanje vrijednosti
Podrutina uvijek vraća vrijednost zadnjeg izraza koji je izveden unutar podrutine.
Npr.:
sub aFunction {
izraz_1;
izraz_2;
$a = $b + $c;
}
U primjeru podrutina vraća vrijednost varijable $a. Nakon povratka iz podrutine,
vraćena vrijednost nalazi se u posebnoj varijabli $_.
Argumenti podrutine
1108/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Sve varijable uvijek moraju biti definirane prije nego im se pristupa, a obrnuti
redoslijed označava pogrešku u logici, i u većini slučajeva završava prijavom greške kod
pokretanja.
1109/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Map je funkcija koja za svaki element liste s desne strane, obavlja transformaciju i
prosljedjuje takvu transformiranu listu prema lijevoj strani. Unutar map bloka globalna
varijabla $_ poprima redom vrijednosti liste.
my @arr = map { $_*2 } 0..3;
Tako @arr nakon ovakvog mapiranja sadrzi (0, 2, 4, 6).
Grep je funkcija koja za svaki element liste s desne strane, obavlja provjeru I sukladno
tome prosljeđuje filtriranu listu prema lijevoj strani. $_ opet redom poprima vrijednosti liste.
my @arr = grep { $_%2 } 0...3;
my @arr = grep $_%2, 0...3; # isto
1110/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Regularni izrazi su Perl-ov pojam za znakove ili posebne znakovne (pod) nizove koji
se žele pronaći unutar drugih znakovnih nizova. Regularni izrazi predstavljaju točno
definirane uzorke znakovnih nizova (eng. patterns). Ti uzorci ne služe samo za pronalaženje
tih uzoraka u drugim nizovima, već i za ostale operacije kao što je na primjer zamjena
pronađenog uzorka u nizu nekim drugim znakovnim nizom. Tip operacije ovisi o
primjenjenom operatoru.
Detaljnije i kompletnije o regularnim izrazima može se vidjeti u perlretut i perlre
man stranicama.
Regularni izrazi u Perlu se definiraju na točno određen način. Najuobičajeniji način
definiranja je postavljanjem znakovnog niza (uzorka) unutar znakova /:
/neki_niz_znakova/
/Tamara_98/
Osim znaka / može se koristiti neki drugi ne-alfanumerički znak, samo je potrebno
naglasiti znakom m:
m#uzorak#
m@Tamara_98@
Definirani regularni izraz se pretražuje u preodređenoj varijabli $_. Želi li se regularni
izraz pretraživati unutar neke prethodno definirane varijable, tada se koristi operator =~:
$imena =~ /marko/;
Ukoliko se u varijabli $imena nalazi uzorak "marko", cijeli izraz vraća TRUE (u
suprotnom FALSE). Budući da regularni izrazi vraćaju logički rezultat (TRUE/FALSE)te se
oni većinom koriste kod kontrolnih struktura.
if (/Ante/) {
print "Ante postoji u $_\n";
}
1111/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Oblici uzoraka
Regularni izrazi su uzorci koji općenito 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 alfanumerički znak
1112/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1113/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Operator split() vraća polje skalara (znakovnih nizova) koji se nalaze između
pronađenih uzoraka.
Primjeri:
@var = split(/pattern/, $znak_niz);
@var = split(/pattern/);
1114/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Pristup standardnom ulazu STDIN izvodi se preko <> operatora (eng. diamond
operator). U skalarnom obliku, operator vraća jednu liniju s ulaza, dok u kontekstu polja
operator vraća cijelu datoteku s time da svaki element polja predstavlja jednu liniju.
Primjer:
$a = ; # vraæa liniju
@a = ; # vraæa datoteku
1115/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Rad sa datotekama
Datotekama se pristupa putem posebnih pokazivača (eng. filehandles). Pokazivači su
zapravo spona između datoteke i Perl procesa. Ti pokazivači se moraju povezati s datotekom
koju će oni predstavljati u programu. Tome služi operator open().
1116/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1117/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
SISTEMSKI POZIVI
1118/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Operatori procesa
1119/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
ZAKLJUČAK
1120/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
DODACI
1121/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1122/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1123/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1124/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1125/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1126/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
#!/usr/bin/perl
use Pg;
# niz izraza: opcija=vrijednost opcija1=vrijednost1 ....
# opcije: host, port, options, tty, dbname, user, password
$conn = Pg::connectdb("dbname=fakultet");
# Postavljanje upita
$sql = "SELECT ime,prezime FROM student WHERE indeks=’F-15973’";
$result = $conn->exec($sql);
while (@row = $result->fetchrow)
{
$ime = $row[0]; $prezime = $row[1];
print "ime: $ime, prezime: $prezime\n";
}
Izvođenje:
racunalo> ./primjer.pl
ime: Tamara, prezime: ¡Krutman
1127/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Link it skripta dozvoljava posjetiocima neke Web stranice da dodaju svoju Web
stranicu na tu stranicu koju posjećuju.
Za instalaciju skripte potrebno je editirati linkit.cgi i varijable koje odgovoraraju
potrebama servera. Zatim upload-ati linkit.cgi, links.htm, header.htm i footer.htm na server
upotrebljavajući ASCII prijenos i chmod-ati file-ove ovim redom:
linkit.cgi – 755
links.htm - 777
header.htm – 644
footer.htm - 644
Nakon toga treba pokrenuti skriptu za dodavanje linka da budemo sigurni da li radi.
Ukoliko ne radi treba provjeriti da li su varijable točne, da li smo upload-ali pomoću ASCII
transfera i da li smo chmod-ali file-ove kako treba.
#!/usr/bin/perl
# Variables #
# Url location of the script (http://www.yourserver.com/cgi-bin/linkit.cgi)
$me = "http://www.free-scripts.net/cgi-local/linkit.cgi";
# Absolute location of the html file (/home/yourname/public_html/links.htm
$ab_html = "/www/docs/free-scripts/links/links.htm";
# Absolute location of the header file (/home/yourname/public_html/header.htm
$header = "/www/docs/free-scripts/links/header.htm";
# Absolute location of the footer file (/home/yourname/public_html/footer.htm
$footer = "/www/docs/free-scripts/links/footer.htm";
# DO NOT EDIT BEYOND THIS POINT #
print "Content-type: text/html\n\n";
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<([^>]|\n)*>//g;
1128/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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>
1129/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1130/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1132/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
#!/usr/local/bin/perl
#Change Variables
$count = '/mnt/web/guide/aestheticsurgerycenter/test/count.dat';
$base_url = 'http://www.aestheticsurgerycenter.com/test/';
$your_ip = "0.0.0.0";
$gif = '.gif';
if ($ENV{'REMOTE_ADDR'} eq $your_ip) {
}
else {
print "Content-type: text/html\n\n";
open (COUNT, "$count");
$counter = <COUNT>;
close (COUNT);
open (COUNT, ">$count");
$counter += 1;
print COUNT "$counter";
@indivual = split(//, $counter);
foreach $number (@indivual) {
$output = "<img src=\"$base_url$number$gif\" alt=\"$CNum\">";
print $output;
}
close (COUNT);
}
1133/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Ova skripta kreira obrazac koji pamti svoje stanje svaki put kad je pozvana.
#!/usr/local/bin/perl
print header;
print start_html('A Simple Example'),
h1('A Simple Example'),
start_form,
"What's your name? ",textfield('name'),
p,
"What's the combination?",
p,
checkbox_group(-name=>'words',
-values=>['eenie','meenie','minie','moe'],
-defaults=>['eenie','minie']),
p,
"What's your favorite color? ",
popup_menu(-name=>'color',
-values=>['red','green','blue','chartreuse']),
p,
submit,
end_form,
hr;
if (param()) {
print
"Your name is",em(param('name')),
p,
"The keywords are: ",em(join(", ",param('words'))),
p,
"Your favorite color is ",em(param('color')),
hr;
}
1134/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
print end_html;
#!/usr/local/bin/perl
use CGI;
$query = new CGI;
print $query->header;
print $query->start_html('Popup Window');
if (!$query->param) {
1135/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
} else {
print "<H1>And the Answer is...</H1>\n";
print "Your name is <EM>",$query->param(name),"</EM>\n";
print "<P>The keywords are: <EM>",join(", ",$query->param(words)),"</EM>\n";
print "<P>Your favorite color is <EM>",$query->param(color),"</EM>\n";
}
print qq{<P><A HREF="cgi_docs.html">Go to the documentation</A>};
print $query->end_html;
use GD;
# create a new image
$im = new GD::Image(100,100);
# allocate some colors
$white = $im->colorAllocate(255,255,255);
$black = $im->colorAllocate(0,0,0);
$red = $im->colorAllocate(255,0,0);
$blue = $im->colorAllocate(0,0,255);
# make the background transparent and interlaced
1136/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Ana Babić
PYTHON
1138/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
UVOD
Povijest
Oko 1972. godine pojavio se jezik C, prvi jezk opće namjene. Sedamnaest godina
kasnije Guido van Rossum, istraživač na CWI (Stichting Mathematisch Centrum) u
Nizozemskoj, radi na projektima vezanima uz interpreterskim jezik ABC. Nezadovoljan
nefleksibilnošću tog i sličnih programskih jezika i nedostatkom alata za automatiziranje
dosadnih sistemskih problema, odlučuje se razviti novi programski jezik. Želio je programski
jezik koji bi mu omogućio rješavanje generalnih administratorskih zadaća brzo i fleksibilno,
ali je istovremeno želio iskoristiti snagu sistemskih poziva Amoeba distribuiranog OS-a. I
tako je, krajem 1989. godine, počeo razvijati programski jezik Python, koji je nazvao prema
kultnoj BBC seriji „Monty Python's leteći 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 početku zamislio jezik koji bi bio specifičan 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 pušten interpreter za novi programski jezik, Python, napisan u C-u.
Zbog činjenice da je Python open source aplikacija, danas se uspješno može 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, …)
1139/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1140/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
objekte. Programer koji će koristiti taj objekt jednostavno od objekta zatraži određenu uslugu
i ne zamara se razmišljajući o načinu na koji objekt funkcionira.
Modularnost. Python je moguće koristiti na više načina. Najčešće se kod rastavlja na
više manjih modula koji međusobno mogu "komunicirati". Može se vrlo jednostavno iz
jednog modula pozivati procedure ili koji koristiti objekte drugog modula.. Što je još važnije,
pristup modulima je uvijek isti, bez obzira da li se radi o već ugrađenim modulima iz Python-
ove standardne biblioteke ili o modulu koji ste napravili trenutak prije. Python-ova standardna
biblioteka podržava regularne izraze, generiranje dokumentacije, threadove, baze podataka,
web pretraživače, CGI, ftp, elektroničku poštu, XML, HTML, WAV datoteke, kriptografiju,
GUI (grafičko sučelje) 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 sučelja, koje je
potpuno isto kao i kod Python modula, jednostavno koristiti. To omogućuje da se dijelovi
koda koji predstavljaju usko grlo (vremenski su zahtjevni) ubrzaju i time znatno poboljšaju
cjelokupno izvršavanje programa. Takav način programiranja se podrazumijeva u jezicima
kao što su C i C++, ali je iznimka među skriptnim jezicima.
U python-u je vrlo jednostavno otkriti pogrešku u izvršavanju programa. U slučaju
pogreške u izvođenju programa, moguće je pristupiti stogu programa, "stack trace" će točno
odrediti vrstu i mjesto greške (exception) što omogućuje vrlo lagano lociranje i ispravljanje
pogreške u programu.
Automatsko skupljanje smeća. Curenje memorije ili prerano uništenje objekata u
tradicionalnim jezicima je vrlo čest uzrok "blokiranja" rada programa ili cijelog računala.
Python interpreter sam se brine da se oslobodi memorija koja više nije potrebna – mehanizam
za sakupljanje smeća (garbage collection) je ugrađen u sustav i automatski se pokreće 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 rješavanje problema.
S druge strane, kod automatskog skupljanja smeća, sustav sam procjenjuje kada treba to
sakupljanje započeti i nerijetko se to događa upravo onda ka program obavlja neku zahtjevnu
operaciju. Zato se i kod ugrađenog automatskog sustava za skupljanje smeća treba često paziti
da ne novi objekti ne stvaraju neracionalno.
1141/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1142/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
$ python
Python 2.4 (#4, Dec 10 2004, 19:19:57)
[GCC 2.95.2 20000220 (Debian GNU/Linux)] on linux2
Type "copyright", "credits" or "license" for more information.
IDLE 1.1 -- press F1 for help
>>> print 'hello world'
hello world
>>>
#!/usr/bin/pyhon
# Filename : hello_world.py
print 'hello world'
$ python hello_world.py
1143/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
hello world
Ispis/unos
Unos korisnika je vrlo jednostavno dobiti pomoću raw_input() funkcije
Primjer je samo za unos teksta. Kada želimo raditi s cijelim brojevima, unošeni tekst se
mora konvertirati u integer pomoću funkcije int()
Isto kao i C, Python u naredbi print ima format specifikatore, koji počinju sa %, ima %d
za integere, %s za stringove i %f za realne brojeve.
Komentari
Komentar započinje direktno iza znaka # i nastavlja se do kraja linije.
1144/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
TIPOVI PODATAKA
Postoje dva načina provjere tipa varijabli u programi. Za vrijeme kompajliranja
programa (static typing) ili za vrijeme rada programa (dynamic typing). Python prodržava
dynamic type što znači da nema deklaracija tipa varijabli već da sam program za vrijeme rada
odlučuje koji će tip pridružiti kojoj varijabli. Takav način korištenja 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, dinamičko deklariranje funkcionira tako da svaki program za vrijeme svog
rada pridjeljuje varijablama tipove ovisno o tome koje su im vrijednosti pridružene (operator
pridruživana u Python-u je =). Valjanost tih tipova se provjerava tek kada se te varijable
koriste u operacijama – u tom trenutku se i generiraju greške u slučaju upotrebe operatora koji
nisu dozvoljeni nad tipovima varijabli koje su u izrazu.
Među jezicima koji podržava dinamičko deklariranje, Python je umjereno type-checked.
Impilicitno pretvaranje je definirano za numeričke tipove, npr. dozvoljeno je množiti complex
broj i long integer bez eksplicitnog pretvaranja. Ali nema implicitnog pretvaranja između
numeričkih tipova i stringova (za razliku od Perl-a, u Python se ne može operaciji sa stringom
pridružiti broj.)
Ono što Python ima je ugrađena funkcija eval() koja čita string kao moguću operaciju:
>>> eval('5+6')
11
>>> eval('7*8')
56
1145/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Brojevi
Python podržava četiri tipa brojeva: integer, long integer (mogu biti prezentirani i
oktalno i heksadecimalno), float (realni) i complex (kompleksni).
Primjeri unosa:
Stringovi
String je u Python-u neprekidni niz karaktera između navodnika (jednostrukih ili
duplih).
Evo nekoliko primjera korištenja 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 može doći do brze pomoći za korištenje neke funkcije ili naredbe.
Jednostavno se u interpreter prompt-u napiše help(naredba).
Npr. za pomoć u radu sa stringom:
>>> help(str)
1146/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Operatori
Standardni operatori funkcioniraju u Python-u kao i u bilo kojem drugom programskom
jeziku.
+ - * / % **
Uz standardno zbrajanje, oduzimanje, množenje, cjelobrojno dijeljenje/ostatak
cjelobrojnog dijeljenja Python nudi i operator za potenciranje **.
Python podržava operatore poput *=, +=, -=, /=, ali ne podržava C-ovsko
predinkrementiranje i postinkrementiranje.
Isto tako, Python ima i standardne operator za uspoređivanje.
< <= > >= == != <>
Za različito postoje dva operatora != i <>. Preporuča se korištenje operatora !=.
Isto tako podržani su logički operatori and, or i not. Upotrebljavajući logičke operatore
možemo stvarati izraze poput:
1147/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Naredba
Python implicitno pretpostavlja da fizička linija koda odgovara logičkoj naredbi. Ako se
želi staviti više logičkih naredbi u fizičku liniju odvaja ih se s točka-zarez. U praksi se takav
način pisanja koda izbjegava jer dovodi do nepreglednosti i nečitljivosti št je u suprotnosti sa
Python ideologijom.
Blokovi naredba
Blokovi naredba – grupe naredbi koje se uvjetno izvode ili čije se izvođenje ponavlja (a
ponašaju se poput jedne naredbe) – grupiraju se pomoću uvlaka, za razliku od C-a i C++ gdje
se blokovi grupiraju pomoću vitičastih zagrada. Vrlo je važno paziti na sva prazna mjesta jer
Python-u je svako prazno mjesto ispred naredbe uvlaka. Prazni blok naredbi definira se
ključnom riječju pass.
If-elif-else
If naredba omogućuje grananje toka programa ovisno o tome da li je logički izraz istinit
ili lažan. Ako je vrijednost izraza iza riječi if logička istina, izvodi se if_blok_naredbi, u
protivnom se ispituje izraz iza elif, ako ni on nije točan izvodi se else_blok_naredbi.
if logički_izraz1:
if_blok_naredbi
elif logički_izraz2:
elif_blok_naredbi
else:
else_blok_naredbi
Python nema switch-case naredbu. Svi mnogostruki izbori se rade pomoću if-elif-else
naredbe. Za razliku od C/C++-a to u Python-u nije mukutrpno upravo zbog njegove čiste
sintakse.
#!usr/bin/python
# if_iga_pogadanja.py
1148/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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 raspolaže Python je while petlja. Ona se koristi za ponavljanje
bloka naredbi. While_blok_naredbi će se izvršavati dok god je logički uvjet iza while naredbe
istinit. Blok naredbi iza else će se izvršiti na kraju petlje.
while logički_izraz:
while_blok_naredbi
else:
else_blok_naredbi
else u while petlji redundantan jer zapravo se bilo koja naredba koja dolazi iza while
petlje izvršava nakon što while petlja završi.
#!usr/bin/python
# while_igra_pogadanja.py
broj = 23
stop = False
1149/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
else:
print 'While je gotov.'
print 'Kraj.'
For petlja
Druga petlja kojom raspolaže Python, for petlja je više slična foreach petlji u shell
skriptama nego tradicionalnoj for petlji u većini programskih jezika koja funkcionira kao
brojač. Petlja uzima kao ulaz niz elemenata i obraduje svaki element u bloku naredbi. Niz
elemenata može biti lista, tuple ili string, isto tako to može biti i niz stringova ili brojeva.
#!usr/bin/python
#for.py
for i in range(1,5):
print i
1
2
3
4
#!usr/bin/python
#for_string.py
$ python for_string.py
moji predmeti su:
pin unix nwp mat 2
Predmeti su ispisani svi u istom redu zbor zareza u printu koji označava da se sljedeći
ispis nastavlja u istom redu.
break i continue
1150/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Break naredbom se prekida izvođenje petlje, bez obzira na logički izraz u petlji koji još
uvijek može biti istinit.
Continue naredba uzrokuje skok programa na kraj petlje, ali se petlja nastavlja na
sljedeću iteraciju.
#!/usr/bin/python
#break_continue.py
while True:
s = raw_input('Unesi nešto(izlaz): ')
if s == 'izlaz':
break
if len(s) < 3:
continue
print 'dovoljna duzina'
print 'Kraj'
$ python break_continue.py
Unesi nešto(izlaz): a
Unesi nešto(izlaz): 45
Unesi nešto(izlaz): 123
dovoljna duzina
Unesi nešto(izlaz): izaz
dovoljna duzina
Unesi nešto(izlaz): izlaz
Kraj
1151/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
FUNKCIJE
Ponavljani postupak, blok naredbi koji se često koristi, stavlja se u jednu zasebnu
cjelinu, funkciju i svaki put kad zatreba pokreće pozivom te funkcije. Onom tko poziva
funkciju nije važno što u njoj piše, jedino je važno ono što funkcija prima (argumenti) i ono
što funkcija vraća.
#!usr/bin/python
#prva_funkcija.py
#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 vraća se tamo od kud je funkcija pozvana. Svaka
funkcija implicitno sadrži return naredbu. Ako uz return naredbu ništa nije navedeno funkcija
će vratiti None. None je specijalna vrijednost koja predstavlja ne postojanje vrijednosti. Kada
varijabla nema vrijednosti, ima vrijednost None.
1152/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Pojedina funkcija u svojem radu može za realizaciju željenog algoritma trebati niz
pomoćnih varijabli (objekata)
#!usr/bin/python
#funkcija_lokalna.py
def funkcija(x):
print 'Lokalna varijabla x je',x
x=2
print 'Lokalna varijabla x je',x
x=50
funkcija(x)
print 'x je',x
$ python funkcija_lokalna.py
Lokalna varijabla x je 50
Lokalna varijabla x je 2
x je 50
Python podržava i globalne objekte. Ako se želi u funkciji koristi varijabla definirana
izvan nje koristi se global.
#!usr/bin/python
#funkcija_globalna.py
def funkcija():
global x
x=50
funkcija()
print 'x je',x
$ python funkcija_globalna.py
x prije promjene je 50
x poslije promjene je 2
x je 2
1153/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Podrazumijevani argumenti
#!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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
PYTHON MODULI
Osnovna namjera modula je omogućiti efikasnije programiranje. Moduli su dokumenti
koji sadrže 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 sadrži
funkcije i varijable koje je pisac modula definirao. Python nudi svoju standardnu biblioteku,
koja dolazi sa svakom instalacijom interpretera, u obliku modula. Sadrži vrlo veliku količinu
korisnih modula za rad sa gotovo svime što se može zamisliti.
Većina funkcija za rad sa sistemom dolazi u dva modula: sys (koji podržava rad sa
Python interpreterom) i os (koji podržava rad sa operacijskim sustavom na kojem se Python
interpreter vrti).
sys
#!/usr/bin/python
# argv.py
import sys
1155/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
else:
for filename in sys.argv[1:]:
readfile(filename)
Model se uključuje koristeći import naredbu. U ovom primjeru importali smo sys modul. U
trenutku kad Python interpreter dođe do linije u kojoj piše import sys traži dokument sys.py u
nekom od direktorija koji su u path-u. Ako nađe dokument, naredbe u glavnom bloku tog
modula se izvršavaju i funkcije modula se nakon toga mogu pozivati iz programa.
os
# komenat korisnika
komentar = raw_input('Enter a comment --> ')
if len(komentar) == 0: # da li je komentar unesen
# ime zip dokumenta
odr = danas + os.sep + sad + '.zip'
else:
odr = danas + os.sep + sad + '_' + \
komentar.replace(' ', '_') + '.zip'
# ako nema poddirektorija, kreiraj ga
if not os.path.exists(danas):
os.mkdir(danas)
print 'Uspjesno je kreiran direktorij ', danas
# zip koji se pokrece
zip_naredba = 'zip -qr %s %s' % (odr, ' '.join(izvor))
# pokreni backup
if os.system(zip_naredba) == 0:
1156/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
socket
Da se stvori veza između mašina, 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 vraća ono što je primio, dodajući 'Echo=>' ispred stringa.
import sys
from socket import *
serverHost = 'localhost' # server ime
serverPort = 50007 # slobodni port koji koristi server
1157/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
if len(sys.argv) > 1:
serverHost = sys.argv[1] # ili server iz prvog argumenta
if len(sys.argv) > 2: # ili iz drugog argumenta komandne linije
message = sys.argv[2:] # poruka za svaki argument
if __name__=='__main__':
print 'samo ako se sam pokrecem'
print 'a ne kao modul iz drugog programa'
math i random
>>> import math
>>> math.cos(math.pi / 4.0)
0.70710678118654757
>>> math.log(1024, 2)
10.0
1158/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Korisnički 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
#moj_modul_primjer1.py
print funkcija(4,7)
$ python moj_modul_primjer1.py
28
1159/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
C Python
Kada u programu postoje dijelovi koda koji predugo traju i usporavaju rad programa
python omogućava korištenje modula napisani i kompajliranih u C-u, što uvelike može
ubrzati kritične dijelove koda.
Primjer Hello.c
#include <Python.h>
#include <string.h>
/* module funkcija */
static PyObject * /* vraća objekt */
message(PyObject *self, PyObject *args) /* self neiskorišten 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 važno jedino ako se dinamično učitava u Python */
(void) Py_InitModule("hello", hello_methods);
}
1160/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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 # import C modula
>>> hello.message('svijet') # poziv C funkcije
'Hello, svijet'
>>> hello.message('Ana')
'Hello, Ana'
1161/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
STRUKTURE PODATAKA
Strukture podataka služe spremanju povezanih podataka u kolekciju. Tri su ugrađene
strukture podataka u Python-u – lista, tuple i rječnik.
Lista
Lista je struktura podataka koja sadrži uređenu kolekciju, tj. u listu možeš dodavati niz
objekata koji su međusobno povezani. U listu možeš dodavati, iz nje brisati ili ju pretraživati.
#!usr/bin/python
# lista.py
imena.sort()
print 'sortirana imena su,',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']
1162/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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 neće 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
Rječnik
Rječnik je kao telefonski imenik gdje se može naći broj osoba znajući njihovo ime.
Svakom objektu u rječniku pridružuje se ključ sa vrijednostima. Ključ mora biti jedinstven –
ne može se naći prava osoba ako ih ima više sa istim ključem. Za ključeve se može koristiti
samo nepromjenjive objekte poput stringova, dok se za vrijednosti može 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Unutar objekata postoje dva tipa varijabli – varijable klase i varijable objekta. Razlika
između tih dviju vrsta je u vlasništvu – pitanje je tko je vlasnik tih varijabli – objekt ili klasa?
Varijable klase se dijele između svih objekata (instanci) klase. Varijable objekta su
specifične za pojedinačni objekt i ne dijele se između 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
zagor = Osoba('Zagor')
zagor.ispisImena()
zagor.kolikoIma()
petro = Osoba('Petro')
petro.ispisImena()
petro.kolikoIma()
marija = Osoba('Marija')
marija.ispisImena()
marija.kolikoIma()
$ python objvar.py
inicijalizacija Zagor
moje ime je Zagor
jedina sam osoba ovdje
inicijalizacija Petro
moje ime je Petro
ima 2 ljudi.
inicijalizacija Marija
moje ime je Marija
ima 3 ljudi.
class ClanSkole:
'Bilo koji clan skole'
def __init__(self, ime,godine):
self.ime = ime
1166/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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
1167/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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 piše u datoteku
ovisno o tome u kojem je modu otvorena datoteka. Nakon završetka rada s datotekom
metodom close se ona zatvara.
#!/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
$ python fileobj.py
Ovo je prva linija tekst.
1168/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Pickle
Standardni modul koji omogućava da se bilo koji Python objekt sprema u dokument i
dobavlja kasnije (trajno spremanje objekata). Postoji još jedan modul cPikle koji se ponaša
kao i pickle modul osim što je napisan u C-u pa time puno brži. Korištenje i jednog i drugog
modula je potpuno identično.
#!/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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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 pogreške tj. odstupanja u radu programa. Mogu biti uzrokovane raznim
događajima (pad sistema, nedozvoljeno pisanje po memoriji, dijeljenje s nulom,...) Kada se
detektira takva situacija u python programu podiže se iznimka. Iznimka se zatim prosljeđuje
pozivatelju funkcije koji ju obrađuje. U slučaju da nema koda za obradu iznimke program se
ruši.
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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Ako želimo izvršiti neki dio koda bez obzira je li došlo do greške ili nije koristimo
Try…Finally
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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
ZAKLJUČAK
Čitanje dobrog Python programa izgleda gotovo kao čitanje engleskog. Vrlo je lako
započeti u njemu programirati, a dovoljno je kompleksan da se u njemu mogu programirati i
najteži problemi. Za razliku od većine drugih programskih jezika, ne prisiljava programera da
prihvaća jednu programsku paradigmu i razmišlja o samoj metodi programiranja, već da
razmišlja o rješavanju problema i onog što zapravo želi učiniti s programom.
1172/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Marijan Poljak
INTERPRETERI – TCL/TK
1173/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
UVOD
Općenito o interpreterima
1174/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Uvod u Tcl/Tk
Tcl/Tk dizajnirao je prof. John Osterhont sa Berkley sveučilišta. 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 izvođenje Tcl programa
(skripte), script file prenosi se Tcl interpreteru – wish (npr. wish hello.tcl). Wish se može
koristiti i interaktivno na način da se naredbe unose u command line. Postoji i drugi
standardni Tcl interpreter, tclsh, koji razumije isključivo Tcl jezik. On ne sadrži nikakve
naredbe za Tk korisničko sučelje. Tcl-u je pridružen Tk koji predstavlja Windows toolkit,
jednostavan i efikasan način razvijanja windows aplikacija. Tcl C biblioteka ima jasno i
jednostavno sučelje, sadrži osnovni interpreter i set naredbi koje definiraju varijable, tijek
programa tj. control flow, I/O fileove i procedure. Željena aplikacija može definirati i nove
Tcl naredbe. Ove naredbe su povezane sa C ili C++ procedurama. Skriptni dio ima pristup
shell-u, npr. sposobnost da pokreće druge programe i pristupa file sistemu. Također se može
pozivati direktno u aplikaciju, korištenjem specifičnih Tcl naredbi, koje se definiraju. Sa
razine C programiranja, moguće je pozivati ovakve Tcl skripte.
Postoji mnogo besplatnih Tcl proširenja tj. ekstenzija. Većina ekstenzija uključuje C
biblioteku, koja pruža neke nove funkcionalnosti i Tcl sučelje prema samoj biblioteci. Ipak,
proširenje od najvećeg značaja predstavlja Tk. Tk definira Tcl naredbe kako bi kreirali i
manipulirali widget korisničkim sučeljem. Skriptno orijentirani pristup programiranju
korisničkog sučelja ima tri prednosti. Prvo, razvijanje je brzo jer nema čekanja na duga
povezivanja. Drugo, Tcl naredbe pružaju sučelje višeg nivoa od većine standardnih alata C
biblioteke. Jednostavnija sučelja zahtjevaju manje naredbi kako bi se definirala. Treća
prednost je u činjenici da se korisničko sučelje može jasno izdvojiti od ostatka aplikacije. Na
taj način može se razvijati jezgra aplikacije da bi se naposljetku izgradilo sučelje. Osnovni set
Tk widgeta često je dovoljan za većinu UI potreba, no moguće ih je razvijati pomoću jezika
C, a postoji i mnogo već razvijenih Tk widgeta dostupnih na webu.
1175/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
TCL OSNOVE
Tcl ima jednostavnu strukturu. Svaka linija započinje naredbom, svaka naredba je implementirana kao C funkcija. Jezik ima nekoliko
osnovnih konstrukcija i relativno malo sintakse, što ga čini lakim za učenje. Osnovni mehanizmi vezani su uz stringove i supstitucije
stringova, pa je lako vizualizirati što se zapravo događa u interpreteru. Svakim instaliranjem Tcl-a obično 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 proširen Tk naredbama koje se koriste pri kreiranju i manipuliranju Tk widgeta. Moguće su varijacije ovih programa
ovisno o ekstenziji koja je dodana shellu.
Tcl naredbe
Zadaci aplikacije podjeljeni su u module. Specifični 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 postojećih i novih naredbi čineći tzv. overall aplikaciju. Tcl se sastoji
od nekoliko sintaksnih pravila i skupa naredbi, čineći jezgru. Tcl naredbe sastoje se od jedne
ili više riječi, od kojih je prva ime C funkcije koja će biti pozvana od strane interpretera.
Ostale riječi 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 točka-
zarez , ; , naredba završava. Argumenti naredbe imaju vrijednost stringa. Tcl interpreter ne
prevodi vrijednosti argumenata u naredbi, osim u slučaju supstitucije. Kod Tcl-a sve se
predstavlja stringom, i mora se jasno tražiti evaluacija varijabli i naredbi koje su ugnježđene.
Osnovni model naredbe može biti proširen sintaksom za grupiranje, čime se omogućava
upotreba više riječi u jednom argumentu, te supstitucijom koja se koristi pri programskim
varijablama i pozivanju ugnježđenih varijabli. Grupiranje i supstitucija su jedini mehanizmi
uključeni u Tcl interpreter prije nego što on izvrši naredbu.
1176/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
1177/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
1178/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Tcl Varijable
Druga set naredba u primjeru pridjeljuje varijabli b, vrijednost varijable var. Upotreba znaka $
ujedno je i prvi primjer supstitucije. Varijabla se može obrisati korištenjem naredbe unset:
unset imevar imevar2...
Bilo koji broj imena varijabli može se prenesti unset naredbi. Unset će prijaviti grešku ako
varijabla nije definirana.
Varijable se dijele u tri kategorije: local, global, visible.
Postojanje varijable može se testirati naredbom info exists.
Sljedeća pravila opisuju osnovne mehanizme supstitucija i grupiranja koje Tcl interpreter
izvodi prije pozivanja naredbi:
1179/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
3. Znak kose crte tj. backslash, \ , koristi se za definiranje posebnih znakova. Ovo se
može 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
vitičastim zagradama. Supstitucija se može pojaviti usred riječi, tj. dio riječi može biti
string dok ostatak mogu biti neke od supstitucija. Supstitucije mogu djelovati čak i na
ime naredbe.
5. Grupiranje vitičastim zagradama, {}, sprečava supstituciju. Interpreter uključuje sve
znakove između odgovarajuće lijeve i desne zagrade u grupi. Krajnje vitičaste zagrade
nisu uključene u grupu.
6. Grupiranjem dvostrukim navodnicima, “ ”, dopušta se supstitucija. Interpreter grupira
sve dok ne naiđe na drugi znak dvostrukog navodnika. Sam znak navodnika može biti
uključen u grupu u kombinaciji sa znakom kose crte.
7. Grupiranje se mora izvršiti prije izvršenja supstitucije. Ovo znači da vrijednost
varijabli i rezultati naredbi ne utječu na grupiranje.
8. Supstitucija koja se izvede jednom, izvršava se prije poziva naredbe. Rezultat
supstitucije ne prevodi se drugi put. Ovo pravilo je važno ako vrijednosti varijabli ili
rezultati naredbe sadrže specijalne znakove poput: $, {}, [ ]...
1180/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Matematički izrazi
expr 7.2 / 3
=> 2.4
Naredba expr uzima sve argumente, spaja ih u jedan string, zatim predstavlja string kao
matematički izraz. Nakon što izračuna rješenje, ono se formatira u string i vraća. U
matematičke izraze moguće je uključiti i varijable kao i ugnježđene naredbe. Expr, naravno,
podržava i velik broj ugrađenih matematičkih funkcija.
1181/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
1182/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Tcl Procedure
Prvi argument predstavlja ime procedure koja se definira. Ime procedure može sadržavati bilo
koje znakove, bitno je razlikovati velika i mala slova. Imena varijabli i imena procedura nisu
u međusobnom konfliktu. Sljedeći argument u sintaksi predstavlja listu parametara procedure.
Treći argument je naredba ili obično grupa naredbi koje formiraju tijelo (body) procedure.
Jednom definirana, Tcl procedura koristi se kao bilo koja ugrađena naredba. Rezultat
procedure je rezultat kojeg vraća zadnja naredba u tijelu procedure.
proc diag {a b} {
set c [expr sqrt($a * $a + $b * $b)]
return $c
}
Procedura imena diag izračunava duljinu dijagonale pravokutnog trokuta ako su zadane
ostale stranice. sqrt funkcija je jedna od mnogobrojnih matematičkih funkcija i podržana je
naredbom expr. Vitičaste zagrade grupiraju argumente a i b u jedinstveni argument, koji
sada predstavlja drugi argument naredbe proc. Otvorenom vitičastom zagradom na kraju
drugog argumenta započinje treći argument a ujedno i grupiranje, sve dok se zagrada ne
zatvori. Kao rezultat grupiranja dobiva se sljed naredbi, u obliku trećeg argumenta. Sljedeći
važan učinak vitičastih zagrada oko tijela procedure je da odgađa 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
nepoželjna je supstitucija varijabli tijekom samog definiranja procedure diag. Naredba
proc podržava i dodatne oblike poput definiranja broja varijabli argumenata defniranjem
1183/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
ključne riječi args kao zadnji parametar. Moguće je definirati defaultne vrijednosti za
argumente.
U Tcl-u postoji jedinstveni, globalni opseg (scope) za imena procedura. (za razliku od jezika
C koji dopušta privatne – static procedure). Moguće 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 neće 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. Važno je ipak
naglasiti da je varijable definirane na ovom području potrebno učiniti dostupnim naredbama
unutar procedure. Ista imena varijabli izvan opsega i unutar procedure ne dovode do
konflikta.
Komentari
Znakom kose crte, \ , nastavljamo s komentarom u sljedeći red skripte. Znak ; unutar
komentara nema značaja, komentar se prekida samo prelaskom u novi red.
1184/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
STRINGOVI
String predstavlja osnovni tip Tcl podataka, pa ne iznenađuje činjenica da postoji velik
broj naredbi za manipulaciju stringovima. Uz područje stringova je usko vezan pojam
usporedbe prema uzorku tj. “pattern matching”. Tcl podržava dvije vrste ovakvog
uspoređivanja prema uzorku. Tzv. “Glob matching” predstavlja jednostavno uspoređivanje
kakvo se koristi u mnogim shell jezicima. “Regular expresion matching” je više složeno ali
zato i moćnije.
Osnovna sintaksa Tcl string naredbe:
Prvi argument naredbe string definira što string radi tj. operaciju. Drugi argument je nekakav
string, a mogu postojati i drugi argumenti ovisno o operaciji. Većina string naredbi obično je
vezana uz string funkcije u standardnoj C biblioteci.
1185/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Osim naredbe string postoji čitavi niz drugih naredbi kojima je moguće manipulirati
stringovima. Naredba append je dobar način da se nešto doda na kraj nekog stringa. Radi na
principu pretraživanja sheme alocirane memorije. Tcl alocira dodatni prostor kako bi
omogućio š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 slična C printf funkciji. Naredba formira string prema sljedećoj
specifikaciji:
format spec vrijednost1 vrijednost2.
Argumenti specifikacije mogu sadržavati i ključne riječi ali u tom slučaju ispred ključne riječi
mora stajati znak postotak, %. Oznakom zastavice, flag, definiraju se u naredbi format razna
umetanja znakova i slično.
Scan naredba je nešto poput C sscanf procedure. Scan analizira string prema format
specifikaciji i dodjeljuje vrijednosti varijablama te vraća broj pretvorbi koje su uspješno
obavljene. Naredba ima sljedeću formu:
Specifikacija za naredbu scan je gotovo jednaka kao za naredbu format. Uz naredbu scan
može biti uključena set notacija. Uporabom uglatih zagrada određuje se set znakova. Set
odgovara jednom ili više znakova koji su upisani u varijablu.
String match naredba je primjer tzv. glob-style uspoređivanja.
Postoje tri osnovne konstrukcije korištene u ovakvom glob uzorku:
1. uspoređivanje bilo kojeg broja, bilo kojih znakova (*)
2. uspoređivanje pojedinog znaka (?)
3. uspoređivanje jednog u setu znakova ([abc])
1186/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
1187/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
STRUKTURE PODATAKA
Osnovnu strukturu podataka u Tcl-u čine stringovi. Dodatno, postoje dva tipa struktura
podataka višeg 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 zamišljati kao put od jednog
stringa (indexa) do nekog drugog stringa (određene vrijednosti elementa polja). Pravilo je
sljedeće: nizovi su funkcionalni ako su kratki ili ako se izgrađuje naredba koja će se kasnije
evaluirati. Polja su efikasnija i primjerenija za veće količine podataka.
Nizovi
Naredbom list konstruira se niz iz argumenata, tako da postoji jedan element niza za svaki
argument. To je važna naredba budući osigurava da rezultirajući niz ima odgovarajuću
sintaksu. Ukoliko neki od argumenata sadrži 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 može pozvati sa imenom nedefinirane varijable, koja će u tom slučaju
biti definirana. Naredba concat spaja višestruke nizove u jedinstveni niz.
Naredba llenght vraća broj elemenata niza, lindex vraća pojedini element iz niza,
lrange vraća razmak između elemenata niza.
1188/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Naredba linsert umeće elemente na mjesto u nizu koje je označeno indexom, lreplace
zamjenjuje elemente u nizu novim elementima.
Naredba lsearch vraća index tražene vrijednosti u nizu ili vrijednost –1 ako vrijednost nije
pronađena. Naredbom lsort nizovi se sortiraju. Tri osnovne vrste sortiranja definirane su
opcijama: ascii, integer ili real. Redosljed je određen opcijama increasing i decreasing.
Naredba split uzima string i pretvara ga u niz djeleći ga na označenim mjestima. Naredba
join je inverzna split naredbi, ona spaja elemente nizova.
Poželjno je izbjegavati velike nizove i nizove kojima se freventno pristupa. U tom slučaju
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, može imati bilo
koju vrijednost stringa i može biti rezultat supstitucije neke varijable ili naredbe. Elementi
polja definiraju se naredbom set:
1189/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
elemenata ili ako se vrši iteracija kroz dulji period vremena tada su search operacije
praktičnije od array names naredbe.
Operacije array get i array set koriste se za pretvaranja između polja i niza.
Naredba trace dopušta registriranje naredbe koja će biti pozvana svaki put kada se pristupa
varijabli, kad se modificira ili briše. Druga česta uporaba trace naredbe je osvježavanje
korisničkog widget sučelja kao odgovor na promjenu varijable. Ako postoji više trace naredbi
koje su pridružene određenoj varijabli, one će se pozivati u obrnutom redosljedu; prvo će se
izvršiti naredba koja je zadnja pridružena. Ako postoji trace naredba pridružena polju i
elementu tog polja, prvo se izvršava ona pridružena polju. Informacije o trace naredbama nad
varijablama vraćaju se opcijom vinfo. Naredba trace može biti obrisana opcijom
delete.
1190/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Naredbe ponavljanja u Tcl-u su naredbe: while, foreach i for. Uvjetna grananja vrše
se naredbama if i switch. Dodatne naredbe za kontrolu tijeka programa su break,
continue, return i error. Naredba za manipuliranje greškama je catch.
Naredba tijeka programa često ima tijelo naredbe koje se izvršava kasnije, uvjetno ili u petlji.
U tom slučaju važno je grupirati tijelo naredbe vitičastim zagradama kako bi se izbjegle
supstitucije u vrijeme poziva naredbe. Drugu ugodno svojstvo vitičastih zagrada je da
grupiraju stvari uključujući i prelaske u novi red, šireći naredbe kroz više redova. Naredba
tijeka programa vraća vrijednost zadnje naredbe koju je odlučila izvršiti. Naredbe poput if, for
i while mogu sadržavati boolean izraze.
Switch naredbom moguće je grananje više tijela naredbi ovisno o vrijednosti izraza. Kao
dodatak, izbor je moguć na temelju upoređivanja prema uzorku, isto kao i jednostavnom
usporedbom. Ukoliko odgovaraju višestruki uzorci, evaluira se samo jedan odgovarajući
uzorak.
Foreach naredba vrši loop nad tijelom naredbe dodjeljujući varijable svakoj vrijednosti u
nizu. Tijelo naredbe se izvršava jednom za svaki element u petlji.
While naredba uzastopce testira boolean izraze, a zatim izvršava tijelo naredbe ako je
rezultat različit od 0. Iz razloga što se testni izraz evaluira ponovno, prije svake iteracije petlje
važna je zaštita izraza od bilo kakve supstitucije prije pozivanja while naredbe.
For naredba slična je izrazu for iz jezika C. Naredba uzima četiri argumenta. Prvim se
inicijalizira petlja, drugi definira da li će se tijelo petlje izvršiti, treći argument je naredba
koja će se izvršiti poslije tijela petlje i četvrti argument predstavlja tijelo petlje.
1191/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Catch naredba služi za hvatanje grešaka. U praksi, bilo koja naredba će prijaviti grešku ako
je pozvana sa pogrešnim brojem argumenata ili ako detektira neke posebne greške vezane uz
njezinu implementaciju. Ako se greška ne uhvati ona prekida izvršavanje čitave skripte; zato
je potrebno služiti se catch naredbom.
Catch uzima dva argumenta: prvi je tijelo naredbe, drugi je ime varijable koja će sadržavati
rezultat ili poruku greške ako naredba prijavi grešku.
Error naredba prijavljuje stanje greške koje terminira skriptu ukoliko greška nije uhvaćena
catch naredbom.
Return naredbom vraćamo se iz procedure. Potrebna je ako je povratak nužan prije kraja
tijela procedure ili ako je potrebno vratiti konstantnu vrijednost. Return naredba na kraju
procedure je pitanje stila. Naredba return može biti specificirana opcionalnim argumentima
tipa code, code error, error info... Ove opcije su rijetko u upotrebi, iako omogućuju
izgradnju novih naredbi tijeka programa u Tcl-u.
1192/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
RAD S UNIXOM
Tcl naredbe exec, open, close, read, write, seek, tell, glob,
pwd i cd koriste se u Unix okruženju. Iako su ove naredbe dizajnirane za Unix, one su
također uključene (s nekim modifikacijama) u Tcl portove prema ostalim sustavima poput
DOS-a. Ovakve sposobnosti omogućavaju da se Tcl skriptom spajaju različiti programi u
jedinstveni alat prilagođen različitim potrebama.
Naredba exec
Naredba exec koristi se za pokretanje drugih Unix programa iz naše Tcl skripte.
primjer:
Za razliku od C-shell exec naredbe, tcl exec naredba ne zamjenjuje trenutni proces sa
novim. Exec naredba podržava 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 moguće 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 priključen na standardni input sljedeće naredbe u cjevovodu. Bilo koji
broj programa može biti linkan zajedno u cjevovod. Uz naredbu exec dolazi
podrazumjevana sintaksa za I/O redirekciju.
1193/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Naredba file
Naredba file pruža nekoliko načina za provjeru statusa datoteke u Unix datotečnom
sustavu. Npr. možemo saznati dali datoteka uopće postoji i kojoj vrsti datoteka pripada.
Naredba file može biti u različitim formama.
1194/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
file writable name vraća 1 ako ime ima dozvolu pisanja, inače 0
file lstat name var stavlja stat rezultate linka name u var
file stat name var stavlja stat rezultate od imena u polje var
Nake od formi operiraju nad imenom staze datoteke (pathname); one ne vraćaju informacije o
samoj datoteci. Takve naredbe mogu biti primjenjene nad bilo kojim stringom, nema zahtjeva
da se pathname mora odnositi na postojeću datoteku.
Najopćenitije opcije koje dolaze uz naredbu file su stat i lstat. One uzimaju treći
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.
glavni direktorij.. Taj posao obavlja mkdir program. Greške mogu biti prijavljene na dva
mjesta: ako procedura makedir pronađe tzv. non-directory u pathname-u ili u programu
makedir ako korisnik nema npr. dozvolu za kreiranje direktorija.
1195/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Naredba open postavlja I/O stream bilo za file ili pipeline procesiranje. Osnovna sintaksa je:
Argument what predstavlja ime datoteke ili pipeline specifikaciju sličnu onoj koja se koristi
kod naredbe exec. Argument access može 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 pojašnjenja moguće je pronaći na man stranici vezano uz chmod naredbu.
Povratna vrijednost naredbe open je identifikator za I/O stream; vrijednost je potrebno
pohraniti u varijablu.
1196/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
File se u ovom slučaju otvara za čitanje i pisanje ili stvara ako je potrebno.
Čitanje i pisanje
puts - piše string i newline na output. Naki detalji u vezi puts naredbe ipak su drugačiji.
Naredba puts uzima argument nonewline koji sprečava newline znak koji bi se inače
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), vraća se prazan string. Naredba eof
mora se koristiti kako bi se razlikovala prazna linija od kraja file-a. eof naredba vraća 1 ako
je dosegnut kraj. Naredba gets može pohraniti liniju u imenovanu varijablu i vratiti broj
pročitanih 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 pročitan i vraćen kao količina
byteova koju zauzima.
seek, tell -naredbe koje se koriste za pristup I/O streamu slučajnim odabirom
(random access to I/O stream)
close -naredba koja je važna kao i ostale jer oslobađa operativni sustav resursa
vezanih uz I/O stream. Ako se zaboravi zatvoriti stream, on će biti zatvoren pri izlasku iz
1197/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
procesa. Međutim, ako se radi o dugačkom programu poput Tk skripte to može dovesti do
problema. Naredba close može prijaviti i greške.
Refleksija
Operacija koja se najčešće koristi je info exist. Ako se skripta želi pokretati na različitim
Tcl verzijama potrebno je testirati broj verzije i poduzeti različite akcije u vezi
nekompatibilnosti između verzija.
Tcl shell programi sadrže dnevnik naredbi koje su korištene. Dnevniku se pristupa i on se
kontrolira naredbom history. Uz naredbu history dolazi termin event ID, što
predstavlja index u dnevniku. Moguće je specificirati događaj sa negativnim indexom koji će
1198/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
se izračunavati od kraja dnevnika. Npr. event –1 predstavlja prošli događaj. Mnoge forme
imaju event specifikator postavljen na –1 po defaultu.
U praksi poželjno je iskoristiti mogućnost skraćivanja opcija koje dolaze uz naredbu history,
pa čak i samu naredbu history. Za sve opcije postoje definirane jednoznačne skraćenice, 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 vraćena kao rezultat history operacije. Na ovakav način ponašaju
se operacije event, redo, substitute i words. Ovo ima smisla jer je poželjnije
imati aktualnu naredbu u history, umjesto korištenja naredbe history da bi se dobila
željena naredba.
Radi što efikasnijeg korištenja mogućnosti koju pruža history, ona je podržana dodatnom
posebnom sintaksom (nisu sve history operacije podržane ovakvom sintaksom):
1199/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
% set a 5
5
% set a [expr $a+7]
12
% history
1 set a 5
2 set a [expr $a+7]
3 history
% !2
19
% !!
26
% ^7^13
39
% !h
1 set a 5
2 set a [expr $a+7]
3 history
4 set a [expr $a+7]
5 set a [expr $a+7]
6 set a [expr $a+13]
7 history
1200/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Debugger
1201/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Breakpoint će se pojaviti ako je postavljen uvjet. Breakpoint može sadržavati neku akciju,
nezavisno o uvjetu. Sam pattern je također opcionalan, pa je moguće defimirati breakpoint
koji sadrži samo uvjet ili samo akciju. Ako sadrži samo akciju on će se okidati na svaku
naredbu. Breakpoint se poziva prije nego se naredba izvrši. Naredba bez ikakvih argumenata
vraća listu definiranih breakpointa. Svaki breakpoint ima svoj ID. Brisanje se vrši naredbom b
–N , gdje je N broj breakpointa.
Tkinspect program je Tk aplikacija koja pruža uvid u stanje ostalih Tk aplikacija. Prikazuje
hijerarhiju procedura, varijabli, Tk widgeta. Program se koristi za debugiranje Tk aplikacija.
1202/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
BIBLIOTEKE SKRIPTI
Biblioteke skripti sadrže zajedničku kolekciju korisnih Tcl procedura kako bi bile
korištene u više od jedne aplikacije. Jedan od načina kako izgraditi veliku aplikaciju je
korištenjem jedne kratke glavne skripte i biblioteke dodatnih skripti. Prednost ovakvog
pristupa je u činjenici da se neće učitavati čitavi Tcl kod.
Tcl kod dizajniran za upotrebu u biblioteci iziskuje određena pravila kodiranja. Pravila se
moraju poštivati radi izbjegavanja konflikta između imena u različitim bibliotekama i u
glavnoj aplikaciji, osim toga na taj način je biblioteka lakša za korištenje drugim korisnicima.
Dva su osnovna pravila:
Važna naredba vezana uz Tcl biblioteku je naredba unknown. Svaki put kad interpreter naiđe
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 može se pronaći u init.tcl datoteci Tcl biblioteke. Kako bi se ubrzalo pretraživanje
naredbi koje nedostaju , unknown naredba koristi se indeksom. Prilikom stvaranja biblioteke
skripte mora se generirati index koji će bilježiti koje su procedure definirane u biblioteci.
Procedura auto_mkindex kreira index koji se pohranjuje u datoteci tclIndex koja se nalazi
1203/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
u istom direktoriju kao i datoteke koje čine biblioteku skripte. Dodavanjem procedura ili
mijenjanjem njihovih imena mora se izvršiti i update nad datotekom tclIndex. Jedan od načina
je ponovno stvaranje indexa ako se bilo što u biblioteci promijenilo od zadnjeg generiranja
datoteke tclIndex.
Za korištenje biblioteke skripte potrebno je informirati naredbu unknown gdje da traži. Ona
koristi varijablu auto_path kako bi bilježila listu direktorija za pronalaženje 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
tclIndex kreira po prvi put to osigurava da svaka nova procedura koja se doda biblioteci bude
1204/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
TK OSNOVE
1205/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Hello world u Tk
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 ograničena 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 određuju veličinu slobodnog prostora oko gumba. Posljedica je prikaz glavnog
prozora koji je smanjen do te mjere da sadrži samo gumb i definirano mu proširenje.
1206/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Imenovanje Tk widgeta
Tk koristi sustav imenovanja za widgete, koji reflektira njihovu poziciju u hijerarhiji
widgeta. Root hijerarhije je glavni prozor aplikacije i njegovo ime je jednostavno «.». Slično
pravilima imenovanja za direktorije u Unixu gdje je root direktorij nazvan «/» a zatim se taj
znak koristi za daljnja razdvajanja. Tk koristi «.» na isti način. Svaki widget koji je dijete
glavnom prozoru je imenovan na način sličan ovom: .foo. Dijete widgwet od .foo bio bi
recimo .foo.bar itd.
Postoji i jedan dodatak uz sustav imenovanja. Naime, ako se sučelje mijenja to može
rezultirati promjenom pozicije u widget hijerarhiji pojedinih widgeta kojima se tada mora
mijenjati ime. Ovo se može izbjeći korištenjem varijabli u koje se spremaju imena važnih
widgeta.
Konfiguriranje Tk widgeta
Za specifikaciju atributa widgeta koriste se parovi argumenata. Imena atributa
započinju crticom «-», npr. –text (sljedeći argument je vrijednost tog atributa). Čak i
najjednostavniji Tk widget može imati desetak ili više atributa, dok oni složeniji mogu imati i
više od dvadeset atributa. Prednost kod Tk-a je potreba za specificiranjem samo onih atributa
koji ne zadovoljavaju defaultne vrijednosti. Svaki primjerak widgeta podržava operaciju
configure (skraćeno config) koja je u stanju mijenjati atribute ili vršiti query nad njima.
Sintaksa operacije config koristi iste parove argumenata korištene prilikom kreiranja
widgeta. Tako je npr. moguće promijeniti boju pozadine naredbenog gumba nakon što je on
već kreiran i postavljen na ekran:
Ako se želi izvršiti query nad trenutnom vrijednošću 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Tk naredbe
1208/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
1209/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Ovo sučelje sastoji se od dva gumba, Run It i Quit, entry widgeta u koji se unosi naredba i
text widgeta za prikaz rezultata izvršavanja unix programa. Skripta izvršava program kroz
pipeline.
#!/usr/local/bin/wish -f
# execlog - run a UNIX program and log the output
1210/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
1211/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
1212/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
ZAKLJUČAK
Tcl ima ulogu jezika kojim se konfiguriraju i izgrađuju aplikacije. Tcl je kao skriptni
jezik pogodan za automatiziranje rutinskih poslova.
Korištenjem Tcl interpretera moguće je izgrađivanje aplikacija kao niz jednostavnih operacija
sastavljenih skriptom na način kako to najviše odgovara određenim potrebama. Dopuštena je
kontrola nad aplikacijom od strane drugih programa, čineći aplikacije još funkcionalnijim.
Ono čime se Tcl interpreter razlikuje od drugih shell-ova je sposobnost njegovog ugrađivanja
u aplikacije. Tcl se pokreće na više platformi pa tako postoje verzije za UNIX, Windows i
Macintosh. Povrh svega Tcl je besplatan.
1213/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
Elizabeta Velkavrh
Alja Pavlić-Ravšer
Eliot Karlo Pavletć
DISTRIBUCIJA LINUXA/UNIXA
(Verzije linuxa/ unixa danas u upotrebi)
1214/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Distribucija Linuxa/Unixa
UVOD
Distribucije su zapravo gotovi “paketi” programa koji čine cjeloviti operativni sustav.
Dakle, kada govorimo o distribucijama, mislimo na određeni skup programa i koncepata koji
čine operativni sustav.
Ovaj dio teksta namijenjen je početnicima Linuxa, tj. savjet kako odabrati Linux
distribuciju. Za početak najbolje je odabrati distribuciju po općenitoj potrebi korisnika. Svaka
distribucija je kompletni operacijski sistem, uključujući Linux kernel i sve ″utilitie″ te razne
programe koji su potrebni te spremni za instalaciju i upotrebu. Većina distribucija uključuje
na tisuće programskih paketa, jednostavnih grafičkih sučelja, ″office″ programa i igrica.
Prije samog odabira distribucije, dobro je pažljivo pročitati opis same distribucije te je
usporediti s vlastitim potrebama. Svaka distribucija je namijenjena posebnom tipu korisnika.
Znači, neke su optimalne za funkciju kao serveri, neke optimalne za igrice te neke su
optimalne za ″desktop″ i ″office″ upotrebu.
1215/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
MALO O LINUXU
Linux je slobodan i besplatan operativni sustav sličan Unixu. Linux je stvoren i razvijan
ujedinjenim snagama tisuća hakera entuzijasta širom svijeta povezanih putem Interneta.
Linux je objavljen pod GNU GPL licencom, što znači da je njegov izvorni kod dostupan
svima. Svi GNU programi koji su također potrebni da bi cijeli sustav radio su također pod
slobodnom licencom, a tako i mnogi drugi programi. Zahvaljujući ovome, različiti programeri
razvijaju puno različitih "distribucija" Linuxa, od kojih svaka ima neke posebnosti, iako su
sve jednako funkcionalne. Najpoznatije su Red Hat, Debian, Slackware, SuSE i Mandrake.
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 zašto je AT&T držao licencu na samo ime
Unix dugo vremena, pa su drugi proizvođači iz razloga copyrighta "izmišljali" svakakva
imena, ili bi se Unix pisalo kao Un*x...
AT&T danas za priča nije osobito bitan, ali zbog sveg ovog se Unix, pisan u jednini,
više smatra kao neka "opća imenica", dok govoreći o konkretnim operativnim sustavima treba
govoriti o Unixima, u množini. Linux je jedan od Unixa, besplatan i zadnjih godina jedan od
najpopularnijih. Komercijalne Unixe proizvode mnoge informatičke 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 proizvođači komercijalnih Unixa počinju nuditi
besplatne licence određenim skupinama korisnika, očito potaknuti Linuxovim uspjesima.
Linux je nastao 1991. - u slobodno vrijeme, iz hobija, rad na Linuxu započeo je Linus
Torvalds, tada student na sveučilištu u Helsinkiju. Linus je u međuvremenu postao guru i
1216/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
božanstvo za priličan broj sljedbenika Linuxa koji u njemu vide protutežu ulozi kakvu ima
Bill Gates.
Linus se pravda kako je po njegovom izvorno ime daleke 1991. trebalo biti "Freax"
(Free kao besplatno + X, po grafičkom sučelju Unixa), ali je administrator FTP sitea
sveučilišta u Helsinkiju, preko kojega su se prve beta verzije distribuirale zaključio 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 niži broj verzije), i rad se, uz regrutiranje sve
većeg broja pristalica, ali stalno pod Torvaldsovim vodstvom i nadzorom, nastavio do 1994.,
kad je konačno izbačena 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, brojčana oznaka verzije
bez problema bi bila "napuhana" na 4.0, 5.0, 8.0 ili koliko bi već bilo potrebno.
1217/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
GNU POKRET
GNU projekt je jedan projekt koji je počeo 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 znači da je sustav otvoren i dostupan
svima, zajedno s izvornim kodom.
1218/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Linux distribucije
Mandrake Linux
Mandrake Linux započeo je Gaël Duval, to je
distribucija koja je stekla ogromnu popularnost od
svoje prve pojave u srpnju 1998. Developeri su od Red Hat distribucije promijenili grafičko
radno sučelje u KDE i Gnome, te dodali ″easy-to-use″ instaler, prekidajući tako mit da je
Linux teško instalirati. Mandrake pri hardware detekciji automatsko vrši particioniranje diska
koje je u prednosti, te se od mnogih smatra najboljim u industriji i mnogi su se našli u
Mandrake-u tamo gdje su ostale distribucije zakazale u određenim potrebama.
No, s obzirom na ipak nešto veću složenost Mandrake-a, hardware-ski zahtjevi ove
distribucije su veći. Iz tog razloga preporuča se da računalo na koje se instalira Mandrake
distribucija ima najmanje Pentium procesor, sa barem 32 MB RAM-a , te oko 800 MB (ili
više) slobodnog prostora na disku (nije fiksan zahtjev ovisno o broju paketa npr. može se
prilikom instalacije odabrati samo jedno grafičko sučelje KDE, a ne i GNOME. ). Poželjno je
da nakon instalacije ostane slobodnog prostora na disku (ako je moguće 200 MB).
Kako bi se naknadno mogle dodavati aplikacije koje ne dolaze na instalacijskim CD-
ima (npr. Open Office). Paketi koji nisu odabrani prilikom instalacije, a kasnije zatrebaju,
lako se mogu naknadno dodati korištenjem Software Manager programa.
Mandrake Linux je postala popularna distribucija među novim korisnicima Linuxa, te
među onima koji traže alternativni operacijski sistem. Razvoj ove distribucije je u potpunosti
otvoren i transparentan sa novim paketima koji se nalaze u «cooker» direktoriju na internetu u
svako doba.
Kada se objavi nova verzija, te ulazi kao prikladan za betu, cooker snapshot je prihvaća
kao ″first″ beta. Beta proces testiranja je kratak i intenzivan. Počinjući sa verzijom 9.0, taj
proces je postao duži i temeljitiji. Beta mailing lista je jako zauzeta, ali se može ubrzo dobiti
odgovor na bilo koji problem koji se prijavi.
Rezultati ovakvog razvijanja su pogled unaprijed u prenošenju prava na drugoga, kao
moderna i suvremena Linux distribucija. S obzirom na učestalo mijenjanje korisnici će uočiti
više grešaka i manju stabilnost nego kod drugih distribucija.
1219/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1220/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Debian GNU/Linux
Debian GNU/Linux, započeo je Ian Murdock 1993., te je ishod napora developera da
stvore nekomercijalnu distribuciju visoke kvalitete, možda čak i
najčišću formu od idealista koji su započeli ″free software
movement″.
Debian Linux je lako nadogradiva distribucija, uglavnom
sastavljena od softvera slobodne distribucije iz više različitih
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. Više od
400 održavatelja radi na više od 1500 paketa i poboljšava Debian Linux. Prednosti Debian
Linuxa su njegova nadogradivost, dobro definirane međuzavisnosti paketa i otvoren razvoj.
Profinjeni sustav za pronalaženje grešaka omogućava korisnicima lako prijavljivanje grešaka i
sigurnosnih propusta s kojim se zatim Debian zajednica brzo obračunava.
U bilo koje vrijeme procesa razvitka, tri su osnovna djela u glavnom direktoriju –
″stabilno″, ″testiranje″ i ″nestabilno″ (također poznat kao ″sid″). Kada se pojavi nova verzija
paketa, smještena je u djelu ″nestabilno″i čeka prvo testiranje. Ako prođe dalje, paket se
pomiče u sljedeći dio ″testiranja″, gdje opet prolazi rigorozno testiranje koje može potrajati
mjesecima, nakon toga se proglašava ″stabilno″ stanje. Kao rezultat gore navedenog, ova
distribucija je možda čak i najstabilnija i najpouzdanija, a sigurno dinamična, jer izdanja se
zamrzavaju svaka tri mjeseca, a FTP arhive dnevno osvježuju.
Gentoo Linux
Gentoo Linux je stvoren od Daniela Robbinsa,
prijašnjeg Stampede Linux i FreeBSD developera. Gentoo
Linux je izvorno-bazirana distribucija. Za razliku od
uobičajenih distribucija, Gentoo ne isporučuje već
kompajlirane pakete, nego samo izvorne kodove aplikacija,
koje se onda izravno na korisničkom sustavu prilagođavaju i
kompiliraju. Gentoo je prvi put u stabilnoj verziji pušten u
ožujku 2002.
1221/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
SuSE
SuSE je još jedna kompanija fokusirana na
desktop, korisnicima svih razina, od početnika do
stručnjaka, nudi brz i lagan ulaz u svijet Linuxa i Unixa.
Mogućnosti kao što je instalacija s CD-ROM-a pomoću
izbornika, modularna disketa za dizanje sustava,
priručnik od 400 stranica i S.u.S.E-ov alat za administraciju sustava, YaST (alat za
instaliranje i administriranje koji konfigurira mrežu), omogućavaju brzo instaliranje i početak
rada u Linuxu, te nastavak rada bez problema. S.u.S.E. također nudi niz podržanih X servera
koji podržavaju najnovije grafičke kartice. Dokumentacija koja dolazi sa produktima, je ubrzo
označena kao najkompletnija, najtemeljitija i najupotrebljiva na daleko. Distribucija je
postigla važno tržište 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. Štoviše, SUSE ne osigurava ni jednostavnu instalaciju ISO images, no
profesionalno izdanje je dostupno za instalaciju putem FTP-a, inače oko 1-2 mjeseca poslije
službene verzije.
1222/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Slackware Linux
Slackware Linux, stvoren od Patricka Volkerdinga 1992.,
jest najstarija ″živuća″ Linux distribucija. Ova distribucija ne
nudi grafičke konfigurirane alate, nego više mogućnosti sa
tekst-baziranim instajlerom. Gdje ostale distribucije se trude
razviti easy-to-use sučelje za mnoge uobičajene ″utilitie-e″,
Slackware ne nudi održavanje i sve se još radi kroz
konfiguracijske fajlove. Baš zbog toga, Slackware je jedina
preporučljiva distribucija za one koji žele naučiti više o
Linuxima. Ništa manje zbog toga, Slackware ipak ima magični utjecaj na mnoge. Ova
distribucija je uvelike stabilna i sigurna – vrlo povoljna za razvijanje poslužitelja. Iskusni
Linux administratori smatraju da ova distribucija ima manje bagova, jer koristi pakete
prijašnjih formi, bez previše ″in-house″ unapređivanja, što uzrokuje veće šanse za nove
bagove.
Puštanje novih verzija je dosta rijetko (jedanput na godinu), iako noviji paketi su uvijek
dostupni za ″skidanje″ poslije službenog puštanja. Slackware distribucija je idealna za one
koji su zainteresirani za unutarnje osobine Linuxa. Možda najbolja karakteristika ove
distribucije je ako se naiđe na bilo kakav problem, treba pronaći Slackware korisnika.
Slackware korisnik će sigurno puno prije pomoći neko korisnici drugih distribucija.
Lycoris Desktop/LX
Lycoris je mala, vrlo komercijalna i poprilično ambiciozna distribucija. Osnovana je od
Josepha Cheeka, koji je navodno uz još četvoricu pokrenuo Redmond Linux, 2000.,
Redmond, savezna država Washington, SAD. Današnji Lycoris si je uzeo za cilj sastavljanje
jedne distribucije, koja će na kućnim računalima slijediti aktualne koncepcijske XP-trendove,
te prema tome stvoriti «easy-to-use» distribuciju, koja bi olakšala prelazak sa Windowsa u
Linux i to omogućavala na što bezbolniji način.
Lycoris distribuciju prema tome korisnik može koristiti
slično kao i neko Windows-računalu, koja nužnost dodira
korisnika sa samim operacijskim sustavom svodi na najmanju
moguću mjeru, klonirajući tako My Computer i Network
Neighborhood, kao i atraktivno grafičko sučelje (boje koje korespondiraju s XP-predloškom),
koje jako liči na Windows XP. Isto tako s druge strane ono što nedostaje su brojni alati i
1223/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
programski paketi za razvoj programa na koje su korisnici naviknuti kod gotovo svih drugih
Linux distribucija.
Ova distribucija koja djelomice sadrži elemente zasnovane na Calderinom OpenLinuxu,
podržava 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 godinu-
dvije unazad tržište 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
konačnom oblikovanju. Tako da Lycorisov Desktop/LX je ocijenjen za početnike – vrlo
dobar, pogotovo za prijelaze s MS Windowsa, no za naprednije korisnike ne zadovoljava.
Xandros Desktop
Xandros je kreiran od ostataka Corel Linuxa, sasvim
uspješnog pokušaja približavanja Linuxa mnoštvu 1999., ali
napušten od kompanije kada je naišla na financijske
probleme.
Xandros je kupio distribuciju u kolovozu 2001., te
pustio prvu i jedinu verziju u listopadu 2002.
Xandros Desktop je bez sumnje najpristupačnija distribucija na tržištu, te najbolja
preporuka za one «first-time» Linux korisnike. Dok je broj aplikacija uključenih u
distribuciju ograničen, developeri su ipak osigurali da taj broj radi savršeno. Xandros se
također pobrinuo za samo njihov fajl manager i ostale odgovarajuće komponente. Dostupna
su dva izdanja:
Deluxe ($99) i Standard ($40), jedine razlike između ova dva izdanja su nedostajanje
CrossOver Offica i Plugin-a (kompaktni sloj koji omogućava pokretanje Microsoft Offica i
ostalih Windows produkata na Linux) i NFTS particijskog alata (za Windows XP korisnike)
kod jeftinijeg izdanja.
1224/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
LindowsOS
Lindows.com je započeo Michael Robertson, u listopadu 2001.,
inače osnivač i prijašnji CEO od MP3.com - sitea koji je omogućavao
(legalnu) kupovinu glazbe u MP3 formatu, te promovirao neovisne
bandove, koji su preko njegovih stranica tražili svoju publiku bez
posredovanja izdavačkih kuća..
LindowsOS predstavlja najnoviji pokušaj dovođenja Linuxa na
desktop scenu i njegovog pretvaranja u "pravu" alternativu
Microsoftovim operativnim sustavima, čemu bi trebala pomoći i njegova mogućnost da
pokreće aplikacije pisane za Windowse.
Prvo javno puštanje 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ć korišten u
sličnim projektima, koji LindowsOS-u omogućuje pokretanje aplikacija pisanih za
Windowse. Dodana je također i nova osobina nazvana Click'n'Run - mogućnost instalacije
softvera izravno s Lindows.com web-stranica, kao i pretraživanje, uspoređivanje i kupovinu
softverskih naslova koje nas zanimaju, poboljšana instalacijska procedura - brzina i
jednostavnost instalacije.
Testne verzije (sneak previews, u terminologiji tvrtke) dostupne su, naime, tek
odabranim članovima Lindows Insider zajednice, formirane za pružanje podrške ovom
projektu, čiji članovi za "upad" moraju platiti 99 USD. Ta svota im, međutim, 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 potvrđuju ono što se i do sada znalo o Wineu:
Windows aplikacije i pod ovim sustavom rade sporo, loše i često se ruše.
Kompanijina ogromna marketinška propaganda (glavni razlog tome jest Microsoftova
tužba protiv tvrtke, zbog navodne "krađe" registriranog naziva Windows), no to je rezultiralo
da LindowsOS (i Linux) ubace među glavne medije instalirane na novim računalima
prodanim diljem US-a i UK-a.
1225/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Caldera OpenLinux
Caldera isporučuje OpenLinux 1.2 kao tri proizvoda:
OpenLinux Lite, OpenLinux Base i OpenLinux Standard.
OpenLinux Lite besplatan je proizvod za iskušavanje (Calderin
integrirani Desktop radi samo 90 dana -- potpuno licencirana verzija
desktopa uključena je u proizvode Base i Standard). OpenLinux Lite
može se skinuti s Calderinog FTP servera ili za cijenu isporuke
dobiti na CD-u. Napravljena je i za izdavače knjiga ili softvera koji tako mogu ponuditi
stabilnu komercijalnu distribuciju uz svoje knjige ili programe.
OpenLinux Base sadrži sve što i Lite i potpun je Linux operacijski sustav, s
jednostavnom instalacijom, integriranim Desktopom, Internet klijent i server komponentama i
povezivošću na Internet. OpenLinux Base uključuje i Netscape Navigator te potpunu
dokumentaciju.
OpenLinux Standard uključuje ono što je u Base, kao i više 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. Pomoću Caldere OpenLinux vidjet
ćete cijeli novi svijet moćnog računalstva, čak i moć Unix radne stanice na svom PC-u.
Korištenjem Linux kernela, OpenLinux vam pruža brzinu i stabilnost usporedivu sa sustavima
koji koštaju tisuće dolara. OpenLinux također nudi:
Prava višezadaćnost zbog koje mnogo tekstualnih ili grafičkih aplikacija radi
istovremeno; nijedna aplikacija ne može uzrokovati rušenje druge, kao kod manje robusnih
sustava.
Linux 2.0 kernel pruža iznimno brz TCP/IP pristup Internetu, uz montažne drivere za
uređaje za najdjelotvornije korištenje mogućnosti vašeg sustava.
Jednostavna, brza instalacija s izbornicima i automatskim pronalaženjem vašeg
hardvera čini instaliranje lakim na većini računala. Uključeni Vodič u započinjanju rada
postupke opisuje korak po korak, uz upute ako naiđete na probleme.
Nijedan drugi Linux sustav nema tako potpuno, integrirano grafičko sučelje s
konfiguracijskim alatima i grafičkim editorom. Njegove moćne drag & drop sposobnosti
dolaze podešene s tisućama ikona i opcija aplikacija. Desktop vam nudi prikladno mjesto za
pohranu omiljenih programa i podataka kojima odmah možete pristupiti. Desktop vam pruža:
1226/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Faq
1227/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Adresiranje više od 64MB memorije, koja je kod većine standardnih kernela postavljena
kao gornja granica. Više o tome na: http://FAQ/Linux-FAQ/linux
Najbolja distribucija
″Najbolje″ od bilo čega zavisi o potrebama korisnika. No međutim, diskusija na ovu
temu često se odvija na Usenet-u. Često ova tema je ″vatreni mamac″, no govoriti općenito
gubitak je vremena. Licenca za besplatni software nije dovoljno ograničavajuća, pa uz malo
više iskustva, mogu se obavljati vlastita testiranja.
BSD Unix
Početak BSD-a
Priča o BSD-u, kao i danas najpoznatijim, besplatnim, verzijama istog, FreeBSD,
NetBSD i OpenBSD-u počinje još u studenom davne 1973-te godine, kada su Ken Thompson
i Dennis Ritchie na 'Symposium on Operating Systems Principles' održanom na Purdue
sveučilištu predstavili svoj rad o UNIX operativnom sistemu. Profesor Bob Fabry, sa
1228/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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 isključivo za Net, a komunikacija
među developerima je bila bazirana na chatu i mailu. Njegova glavna odlika je izuzetna
portabilnost (pogledati www.netbsd.org), kompaktan sistem sa odličnim packaging sistemom,
kao i velika pouzdanost.
Njegova velika mana je nedostatak SMP podrške (ako ne računamo nezvanične patch-
eve kao što je podrška za dvoprocesorske VAX mašine), ali je to u neku ruku i logično, pošto
1229/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
FreeBSD
Drugi potomak 386/BSD-a, nastao 1993.godine
razdvajanjem na dva projekta NetBSD i FreeBSD. Za razliku
od NetBSD-a, FreeBSD se razvija za samo 2 arhitekture: i386 i
alpha arhitekture. Pored dobrog security-a, odlikuje se i
fantastičnim performansama, kao i najboljom implementacijom
TCP/IP stack-a što ga čini jednim od omiljenih izbora za web
servere.
U principu, FreeBSD je najpopularnija BSD distribucija i to, osim gore spomenutog
razloga, i zbog toga što ima sjajno odrađen ports sistem za ″update″ i održavanje sistema, kao
i jako logično organiziran sistem u cijelosti (što je generalno odlika svih BSD baziranih
operacijskih sistema).
OpenBSD
Najmlađi BSD izdanak, nastao 1996. godine zahvaljujući
lošem karakteru Theo De Raadt-a jednog od originalnih developera
NetBSD, koji je uslijed neslaganja sa ostatkom NetBSD developera
odlučio napustiti NetBSD projekt i započeti svoj, koji je nazvao
OpenBSD. Zahvaljujući tome što živi u Kanadi, bio je u prilici
zaobići demokratsku 'USA crypto policies' i napraviti operacijski
sistem sa izrazito jakim security-em, kao i sa kriptografijom integriranom u sam sistem, kao i
nečim što se zove ″proactive auditing″, koji se bazira na konstantom 'češljanju' koda samog
kernela i traženjem mogućih exploit-a, pa se često događa da mogući sigurnosni problem je
već otklonjen, prije nego što se on uopće i otkrije. Svakako najimpresivniji operacijski sistem
današnjice sa aspekta security-a.
1230/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Zašto BSD bazirani operacijski sistemi nisu nikada postali jako popularni? Odgovor je
jednostavan, BSD nikada nije ciljao na popularnost, on je jednostavno alat.
Live CD distribucije
4.5.1 Knoppix
Razvijen od Klausa Knoppera, slobodno se može reći 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), mogućnost korištenja i za spašavanje već instaliranih sustava ili
provjeru omrežja, može poslužiti za demonstraciju Linuxa za one, koji ih još nisu vidjeli kao
test prije nabave.
S druge strane, može se u potpunosti koristiti kao Linux distribucija. Kojim se dobiva
potpuno kompatibilan Debianov sustav s vrlo aktualnim paketima, bez zahtjevnosti i
složenosti uobičajeno originalne Debianove instalacije. Sustav je opremljen vrlo dobrim
automatskim prepoznavanjem hardwarea i solidnom podrškom za mnoge grafičke, zvučne i
mrežne kartice, SCSI uređaje i ostalu periferiju, no i bez grafičkih sučelja ima što za ponuditi.
Učinci i brzina sustava dakako mjerodavno ovise o količini raspoložive radne memorije,
brzini CD-pogona i radnim sposobnostima glavnog procesora.
1231/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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
može pokrenuti izravno iz CD-ROM-a. U takav projekt upustio se
nedavno i francuski Mandrake, s vrlo dobrim rezultatima...
Mandrake Move je nastao još prošle godine i zasnovan je na prethodnoj generaciji
Mandrakeove stolne distribucije Mandrake Linuxu 9.2 te mu stoga nedostaju neke od
mogućnosti i neki od programskih paketa koje će donijeti ″desetka″ - na prvi pogled najočitiji
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 više nego dobro. Usmjerenost krajnjem
korisniku vidljiva je iz činjenice da je Mandrake u ovu distribuciju uvrstio samo jedan
program za svaku namjenu: jedno grafičko sučelje (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, grafička kartica, zvučna kartica) je bila gotovo stopostotna. Problemi koje
smo uočili većinom su se svodili na postavljanje previsoke ili preniske rezolucije grafičkog
sučelja, što se može izmijeniti davanjem odgovarajućeg parametra pri pokretanju. Pokretanje
traje nekoliko minuta i odvija se u dvije faze: prva je tekstualna koja podsjeća na pokretanje
nekog instalacijskog programa i koja traje vrlo kratko. Druga faza odvija se u grafičkom
sučelju i traje duže, prije svega zato što je – interaktivna.
1232/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Ograničeni produkti
Na široko se koristi, obuhvaćaju free
RedHat Odlična teh. potpora, izdanje, Siromašna RPM Besplatan je
Fedora Core Puno inovacija multimedijska
podrška
100% besplatan,
lako nadogradiva Nema puno
distribucija, otvoren inovacija kod
Debian razvoj, lako instalacije, DEB Besplatan je
prijavljivanje grešaka Dugo testiranje
novih verzija
1233/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
YaST- vlasništva″
konfiguracijski alati
Izuzetna portabilnost,
kompaktan sistem, Nedostatak SMP - Nije besplatan
NetBSD velika pouzdanost podrške
1234/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Najimpresivniji OS
OpenBSD današnjice sa aspekta - TGZ Samo putem FTP-
security-a a
Hardverska auto-
detekcija, pokreće se Ako se pokreće sa
Knoppix direktno s CD-a, bez CD-a, mala brzina i DEB Besplatan je
potrebe za hard disk izvedba
instalacijom
1235/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
HRID
1236/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Od 21. do 23. travnja 2004. po jedanaesti put održana je središnja godišnja Open Source
i Linux manifestacija u Hrvatskoj. Mjesto radnje odvijala se kao i do sada na Fakultetu
elektrotehnike i računarstva u Zagrebu, a organizatori su Hrvatska udruga za otvorene sustave
i Internet (HrOpen) i Hrvatska udruga Linux korisnika (HULK).
Ove godine predavanja su obuhvaćala zanimljive aktualne teme: od poslovne uporabe
Linuxa u tvrtkama i državnim institucijama, preko lokalizacije, optimalnog korištenja Open
Source baza, SAMBA-e, SNORT-a, uporabe uredskog programskog paketa OpenOffice,
razvoja programske podrške pod GNU licencom, do sigurnih bežičnih mreža pogonjenih
Linuxom, te VoIP rješenja.
Središnja osoba i predavač-uvodničar oba konferencijska dana ovogodišnje
manifestacije bio je g. Ken Coar, dopredsjednik Apache Software Foundation i član izvornog
tima programera Apache Web poslužitelja, čiji je trenutni internetski tržišni udio više od 67%.
″Open Software: Opportunities Abound″ predavanje koje je pokušalo odgovoriti na dva
postavljena pitanja prisutna kod pokretanja tvrtke odnosno posla temeljenog na otvorenoj
programskoj podršci: kako se može zaraditi na nečemu što je besplatno i da li su sve dobre
niše već zauzete.
″Advenced httpd Topics″ tema koja se bavi unutarnjom logikom rada Web poslužitelja
pri obradi nadolazećih zahtjeva za isporukom Web stranica. Ovo je jednoipolsatno predavanje
je bilo namijenjeno prvenstveno programerima koji bi voljeli započeti pisanje vanjskih
(extension) modula za Apache poslužitelj.
1237/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Jednostavno... Linux
1238/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Linux se na računarskoj sceni pojavio kao izdanak Unixa. Kao operativni sistem
(zapravo niz različitih operativnih sistema sličnih osobina), Unix je mnogo stariji od stolnih
računara. Unix je i dalje u širokoj upotrebi iako se danas često koristi i na klijent-server
intranet mrežama.
Povijesno gledano, problem sa Unixom je bila njegova nedostupnost programerima koji
su htjeli da rade sa nečim van računarskih centara velikih poduzeća i univerziteta. Iako su
neke verzije Unixa za PC odavno na raspolaganju, one nikada nisu pružale eleganciju i snagu
operativnih sistema koji stoje na raspolaganju mini i mainframe računarima i današnjim
serverima. Uz to, rane komercijalne verzije Unixa bile su skupe, ponekad skuplje od PC
hardvera za koji su bile namijenjene. Ta nepristupačnost je na kraju dovela do Linuxa, kao da
operativni sistem sličan Unixu postane široko dostupan.
Život Linuxa je započeo u rukama Linusa Torvaldsa, sa helsinškog univerziteta u
Finskoj. Iako je Linux razvijen uz pomoć tisuća programera širom svijeta, Linus Torvalds još
uvijek upravlja razvojem središtem operativnog sistema – njegovom jezgrom (engl. kernel).
Mnogi danas misle kako je Linux operativni sustav poput MS Windows 9x, 2000 ili
NT. Međutim, to nije istina. Linux je kernel odnosno jezgra operativnog sustava. Potrebno je
još nešto osim kernela (jezgre), a to su programi. Nijedan kernel ne može ništa pametno raditi
bez programa. Danas se uz Linux kernel koriste i GNU programi i tada imamo cjeloviti
operativni sustav. Zato je ispravnije koristiti izraz “GNU/Linux sustav” ili skraćeno
“GNU/Linux”.
Lako je tijekom proteklih desetak godina postao Ljubimcem akademske zajednice,
raznih računalnih geekova i rebela te administratora manjih i srednjih mreža, Linux se još
uvijek teško probija u dva najisplativija tržišna segmenta - enterprise segment velikih servera
i računalnih sustava (koji još uvijek čvrsto drže klasični Unixi i serverske verzije Windowsa)
te segment stolnih računala, pogotovo onih u tvrtkama (na kojima je gotovo nemoguće zateći
bilo što drugo osim Microsoftovih operativnih sustava).
Srećom po linuksaše, ova situacija se u zadnje vrijeme lagano mijenja i sve je više tvrtki
spremno razmotriti korištenje Linuxa na mjestima na kojima ovaj operativni sustav sve
donedavno nije imao što tražiti.
Čak i najveći konkurenti priznat će da se Linux sve donedavno nije mogao ravnopravno
nositi s konkurencijom i da su mu jedine prednosti bile cijena i otvorenost izvornog koda.
1239/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
1240/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – 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 korištenje.
1994. Izlazi Linux 1.0, prva "finalna" verzija, koja donosi napredni TCP/IP stack i
stvara podlogu uspješnom serverskom OS-u.
1996. Izlazi Linux 2.0. Pojavljuju se prva grafička okruženja i prve naprednije
aplikacije za Linux.
1998. Pojavljuju se KDE i GNOME. Linux igra ulogu u internetskom boomu kao jedan
od najkorištenijih 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 podršku Linuxu u nekom obliku.
2000. VA Linux za 800 milijuna dolara kupuje mrežu siteova posvećenih 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 iščezavaju
mnoge tvrtke koje su se bavile Linuxom.
2001. Recesija je u punom zamahu. Propadaju mnoge tvrtke koje se bave Linuxom,
preživjeli smanjuju obim poslovanja i otpuštaju radnike. Corel prodaje svoj odjel za razvoj
1241/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Linuxa Xandrosu. Unatoč svemu tome, Linux bilježi uspjehe - sredinom godine se kratko
vrijeme isporučuje na gotovo trećini novih servera. Michael Robertson pokreče Lindows.com
- tvrtku čiji je cilj dovesti Linux na računala kućnih korisnika. Pojavljuje se OpenOffice.org -
besplatni uredski paket zasnovan na Linuxu.
2002. Red Hat Linux bilježi prvi profit. Caldera, SuSE, Connectiva i TurboLinux
pokreću 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 koristeći Linux. Europska komisija naručuje studiju o isplativosti
prelaska IT infrastrukture državne 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 potiče da razmisle o prelasku na Linux.
2003. The SCO Group podiže tužbu protiv IBM-a, optužujući ga za neovlašteno
korištenje SCO-ovog intelektualnog vlasništva i njegovo prenošenje u Linux kernel, tražeći
milijarde dolara odštete. Red Hat Linux nastavlja s profitabilnim kvartalima. Gartner predviđa
da će Linux do kraja godine biti instaliran na desetak posto novoisporučenih servera, što čini
najveći udio u ovom tržišnom segmentu na godišnjoj razini do sad. Gradske uprave nekoliko
njemačkih gradova, uključujući Munchen, objavljuju kako će u potpunosti migrirati na Linux.
Nekoliko velikih korporativnih korisnika, uključujući australsku Telstru, razmišlja o prelasku
na Linux i StarOffice na desktopu zbog visokih cijena Microsoftovih proizvoda. Ford i Audi
počinju s korištenjem Linuxa. Reuters se prebacuje na Linux u poslu vrijednom navodno 200
milijuna USD kroz pet godina. Linux nalazi svoju primjenu u clusterima, superračunalima i
radnim stanicama. Izlaze nove verzije KDE-a, OpenOffice.orga i Sambe. lzlazi kernel 2.6.
Izlaze HRID.office, uredska distribucija Linuxa za hrvatsko tržište, s prevedenim programima
i spellcheckerom na hrvatskom, te Knoppix - inovativna distribucija koja korisnicima
omogućuje isprobavanje Linuxa bez instaliranja na računalo.
1242/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Važni 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
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb
Saša Protulipac
Kompajliranje kernela
1244/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
UVOD
Linux
Linux je operativni sustav nastao kao inicijativa g. Linusa Torvaldsa započeta 1991.
godine. On je prvobitno zamislio projekat kao skroman izdanak Minixa, operativnog sistema
kojeg je napisao Andrew S. Tanebaum. Budući da Linux duguje mnogo svom prethodniku
UNIX-u, moglo bi se reći da je Linux započet davno prije, nekoliko desetljeća ranje, točnije
1969. godine kada je UNIX kao istraživački projekt započet u labaratorijima Bell kompanije
AT&T. Linus Torvalds je napravio revolucionaran korak kada je izvorni kod svog projekta
stavio na Internet i omogućio svakome tko želi da se pridruži razvoju. Danas Linux
predstavlja jezgra, tj. kernel operativnog sustava koja korespondira sa mnogobrojnim
uslužnim programima bez kojih bi rad bio nemoguć. Svi ti programi su većinom kompatibilni
sa svim inačicama UNIX-a, pa iz svega navedenog gotovo bi se moglo reći da je Linux jedna
od inačica UNIX-a.
Kernel
Kao što sam već napomenuo, temeljn dio Linuxa je kernel tj. jezgra operativnog sustava
koja je učitana u memoriju računala i predstavlja kariku koja povezuje hardverske
komponente (procesor, diskove itd.) sa mnogobrojnim uslužnim programima na čijoj strani se
nalaze korisnici. Iako nije jedini, vrlo je važan dio Linuxa operativnog sustava (OS) i zato
mora biti ispravno podešen i prilagođen, jer o njemu ovisi ispravnost i stabilnost rada svih
hardverskih i softverskih komponenti računala.
Danas je izvorni kod Linux-ovog kernela dostupan svakome preko interneta što nam
omogućava da ga preuzmemo, maksimalno prilagodimo i ugradimo u naš Linux operativni
sustav.
1245/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
Samo činjenica da je izišla nova verzija kernela koja je mjesec dana svježija od
postojeće nikako ne bi trebala biti razlog za nadogranju kernela.
1246/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
Najnovije inačice kernela nisu uvijek najbolje rješenje, jer osim najnovijih mogućnosti
mogu donijeti sa sobom još neotkrivene sigurnosne propuste. Ako računalo radi u okružju u
kojem je sigurnost i stabilnost važan čimbenik njega ne bi trebalo stavljati kernel koji je
objavljen tek prije nekoliko dana. Svakako treba prethodno provjeriti kakvi su problemi
vezani uz verziju na koju mislite nadograditi kernel bez obzira koliko je ona stara.
1247/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
Prilikom instlacije Linux-a gotovo se nikad ne instalira izvorni kod kernela iako on
dolazi sa svakom distirbucijom. Svaka distribucija dolazi sa nekoliko gotovih kernela i
velikim brojem gotovih modula. Sam kernel je obično prilagođen tako da podržava većinu
osnovnih komponenti koje se nalaze na pripadajućoj platformi (PC, Mac), sve ostalo se nalazi
u modulima koji se po potrebi pozivaju. Neke općenite stvari o kernelu kao i način na koji se
kernel instalira saznat ćete iz nekoliko narednih poglavlja.
Izvorni kod kernela je skup datoteka pisanih pisanih u C-u i assembler. Uz navedene
datoteke pronaći ćemo još podosta konfiguracijskih i textualnih dokumentacjskih datoteka.
Kompletan kernel (kao i većina ostalih stvari na Linux-u) objavljena je pod GNU licencom.
Izvorni kod kernela dolazi u dvije verzije, stabilnoj (namjenjena korisnicima) i nestabilnoj
(namjenjena za testiranje i razvoj). Prva stabilna verzija kernela (1.0) je objavljena 1994.g.
Verzije kernela se označavaju sa tri broja međusobno odvojenih točkama, u obliku
major.minor.release. Po drugom broju (minor) možemo vidjeti da li se radi o stabilnoj ili
nestabilnoj verziji kernela, tj. sa neparnim brojevima se označavaju nestabilne, a s parnim
stabilne verzije kernela, npr:
2.4.27 - označava stabilnu verziju kernela
2.5.1 - označava nestabilnu verziju kernela
Kad verzija kernela 2.5.x postane dovoljno stabilna za upotrebu, ona se preimenuje u
prvu slijedeću stabilnu verziju, u ovom slučaju to bi bila 2.6.0 koja nastavlja dalje sa
razvojem. Nestabilne verzija kernela je experimentalna i služi za testiranje nekih novih
programskih rješenja, podrška za hardver, posjeduju više noviteta, no nije preporučljiva za
korištenje jer može uzrokovati nenadana rušenja operativnog sustava, gubitke podataka ili
neočekivana ponašanja računala. Nasuprot tome stabilne verzije kernela dobro su testirane,
posjeduju minimalan broj bug-ova i kao takve preporučljive su za upotrebu. Mada bi sve
stabilne verzije kernela trebale biti jednako kvalitetne, praksa pokaže da su neke od njih
"stabilnije" od drugih. Upravo takve verzije kernela često koriste poznatije distribucije Linux-
a unatoč tome što je u vrijeme njihovog izlaska posojala novija verzija.
1248/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
U većini slučajeva nećemo biti zadovoljni ponudom (obično nema novijih inačica
kernela), pa je onda najbolje otići na stranicu
http://www.kernel.org
gdje ćemo pronaći sve do sada izdane verzije kernela. Tu ćemo pronaći izvorni kod arhiviran i
komprimiran u obliku *.tar.gz ili *.tar.bz2 datoteka. Navedena stranica sadrži i dosta linkova
vezanih uz razvoj i korištenje kernela.
1249/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
1250/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
Izvorni kod Debian distribucije Linux-a dolazi u obliku .deb paketa, tj. datoteke oblika
kernel-soruce-2.4.17-1_all.deb gdje su oznake iza verzije kernela vezane za izmjene koje su
rađene na orginalnoj verziji kernela. Instalaciju možemo napraviti sa naredbom u konzoli:
# apt-get install kernel-source-2.4.17
nakon toga dobit ćemo poruku da ubacimo potrebne CD-ROM-ove na kojima se nalazi
distribucija. Nakon instalacije izvorni kod kernela ćemo pronaći u direktoriju /usr/src u obliku
kernel-source-2.4.17.tar.bz2 datoteke. Za završetak instalacije trebati ćemo proći proceduru
opisanu u poglavlju 3.3. Uklanjanje prethodno navedene datoteke možemo napraviti sa
naredbom:
# apt-get remove kernel-source-2.4.17
1251/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
izmjene direktno na datotekama izvornog koda. Za nadogranju izvornog koda kernela verzije
2.4.25 na verziju 2.4.28 trebamo imati sve patcheve koji su u međuvremenu izašli, konkretno:
patch-2.4.26.bz2
patch-2.4.27.bz2
patch-2.4.28.bz2
Naravno umjesto ovih možemo koristiti i patcheve sa .gz ekstezijom. Prilikom
patchiranja uvijek patchiramo redom na prvu slijedeću 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 izvršavamo slijedeću
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.
1252/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
KONFIGURIRANJE KERNELA
- tip platforme ( Intel 3086, Intel 4086, Intel Pentium III, AMD Athlon ...)
- broj procesora (radi li se o jednoprocesorskoj ili višeprocesorsko platformi)
- tipovi čipseta na matičnoj ploči, grafičkoj kartici, mrežnoj kartici, zvučnoj kartici ...
- tipovi sabirnica koje imamo na sistemu (ISA, PCI, AGP ...)
- koje datotečne sustave koristimo (ext2, ext3, reiserfs, FAT32, NTFS ...)
- koje tipove diskova, odnosno koje kontrolere diskova imamo (IDE, ATA, RAID,
SATA, SCSI, DAT ...)
- koje protokole koristimo (TCP/IP, PPP, SLIP ...)
- ...
Također puno informacija o našem hardveru možemo dobiti naredbom
# /sbin/lspci
detalje o tipu procesora kojeg koristimo možemo dobiti naredbom
# cat /proc/cpuinfo
Svi podaci o konfiguraciji izvorog koda kernela trebaju se nalaziti datoteci .config u
osnovnom direktoriju našeg kernela. Navedena datoteka je najobičnija tekstualna datoteka
koja u sebi sadrži podatke o uključivanju ili isključivanju pojedinih opcija kernela, a
generierana je od strane programa config, menuconfig ili xconfig. Ti programi su okružja koja
nam pomažu u snalaženju među mnogobrojnim opcijama. Datoteku .config nakon što je
generirana možemo pogledati sa nekim textualnim editorom, no nije preporučljivo na taj
način raditi izmjene u njoj.
1253/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
Da bi ste mogli pokrenuti xconfig, trebamo biti u nekom od grafičkih okružja (KDE,
GNOME, Afterstep) koji rade pod X Windows-ima. Najprije trebamo pokrenuti konzolu (u X
Windows-ima) i pozicionirati se u direkotrij /usr/src/linux, zatim upisati naredbu:
# make xconfig
koje će pokrenuti sučelje kao što je prikazano na slici 1. Preko tog sučelja pristupamo
pojedinim sekcijama u kojima se nalaze opcije kernela. S obzirom da sada aktualna verzija
kernela 2.6.10 još nije ušla u širu upotrebu, okvirno će biti opisane važnije opcije kernlea
2.4.27.
1254/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
Odabirom bilo koje sekcije otvara se novi izbornik, sličan onome na slici .
1255/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
upravljački uređaj (kontroler) na kojem se nalazi osnovni sistem datoteka i PS/2 miša. Ako
nismo sigurni što pojedina opcija znači, možemo si pomoći odabirom dugemta Help. Neke od
opcija su posivljene i one su nedostupne, da bi smo ju omogućili moramo promjeniti neku od
prethodnih opcija o kojoj ona ovisi. Najbolje je krenuti od prve opcije i odabirom dugmeta
Next prelaziti na slijedeće opcije sve do kraja, tako ćemo biti sigurni da nismo ništa
preskočili. U nastavku redom će biti opisana većina važnijih sekcija i važnije opcije u njima:
Enable loadable module support - Ovdje možemo izabrati želimo li monolitan ili
modularan kernel. Monolitan kernel zanči da će kernel u potpunosti biti u jednom komadu i
prilikom podizanja OS-a čitav se učitava u memoriju, naknadna izmjena kernela ili dodavanje
bilo kakvih modula nije moguće bez ponovnog pokretanja računala. Većinom se koristi za
strogo namjenska računala kad je potrebna velika sigurnost i stabilnost sustava bez čestih
izmjena funkcionalnosti. Najčešće ćemo ipak trabati modularan kernel gdje se samo jedan
osnovni dio učitava prilikom podizanja OS-a, a ostali dijelovi kernela su u obliku modula koje
jednostavno možemo učitavati (pripajati) tijekom rada OS-a sa naredbama:
# insmod ime_modula - ubacuje modul
# rmmod ime_modula - briše 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 dinamičkog učitavanja
modula koji prethodno nisu testirani može doći do rušenja OS-a.
Set version inforation on all module symbols – selektiranjem ove opcije odabiremo
mogućnost učitavanja modula iz starije verzije kernela, poželjno je odabrati N
Kernel module loader – omogućava kernelu da prilikom učitavanja nekog modula koji
ovisi o drugom modulu automatski učita potreban modul, poželjno je staviti Y
1256/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
General setup
Zbog isključivanja nekih opcija iz ove sekcije neke naredne sekcje mogu postati
nedostupne.
Networking support – bez obzira da li je naše računalo spojeno na mrežu ili ne, ovu
opciju je dobro uključiti zbog pravilnog rada nekih aplikacija koje to zahtjevaju.
PCI support – podrška za PCI sabirnicu, uključiti ako imamo PCI sabirnicu (većina
računala 386 i 486 generacije i starija nisu imala PCI sabirnicu)
MCA support – uključiti za za IBM PS/2 računala i laptope koji podržavaju
MicroChannel arhitekturu
PCMCIA/CardBus support - sekcija iza koje se krije obavezno uključiti ako imamo
slotove za priključenje PCMCIA kartica, gotovo na svakom prijenosnom računalo.
1257/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
Block devices
Tu se nalaze opcije vezane uz IDE, Floppy disk, RAID, CD-ROM uređaje i sl.
Normal floppy disk support – uključiti ako imamo floppy disk na računalo (danas ga
imaju gotovo sva računala osim nekih novijih laptopa)
1258/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
Parallel port IDE device support – podrška za IDE uređaje koji se priključuju preko
paralelnog porta (hard diskovi, CD-ROM-ovi itd.). Prilikom odabira ove opcije od nekoliko
nanovo ponuđenih treba specificirati tip uređaja.
Lopback device support – ova opcija omogućava montiranje datoteke (disk image-a)
kao file sitema koju na taj način možemo pregledati prije nego što ju snimimo na CD
RAM disk support – omogućava nam da jedan dio RAM memorije odvojimo i
proglasimo kao file sistem (jasnije rečeno od dijela memorije napravimo brzi hard disk), nije
preporučljivo uključitvati jer usporuje rad računala osim ako nam je nužno
Initial RAM disk support - Podrška za Inital RAM, tj. za RAM disk učitan od strane
boot loader-a i montiran kao osnovni file sistem prjie normalne boot procedure. Tipično se
koristi za učitavanje modula koji su nužni za montiranje stvarnog osnovnog (root) file
sistema, inače je praksa da se takva podrška ne ugrađuje u obliku modula nego u osnovni dio
kernela.
Networking options
Ovo je jedna od najvećih sekcija kernela i slobodno bih mogao reći "ponos" Linux
OS-a, upravo zbog mogućnosti koje su dostupne u ovoj sekciji Linux je postao jako raširen i
prihvaćen u mrežnom okružju.
Packet socket – Uključivanjem ove opcije omogućavamo nekim aplikacijama direktnu
komunikaciju sa mrežnim uređajima (mrežnim karticama itd.)
Unix domain sockets – Omogućava podršku za Unix domain sockets, koji su
standardni mehanizmi za mrežne konekcije. Mnogi progami koriste ove mogućnosti iako
možda nismo spojeni na mrežu, stoga ovu opciju obavezno uključiti.
TCP/IP networking – podrška za TCP/IP protokol, ako namjeravamo koristiti Internet
ili mreže temeljene na TCP/IP protokolu (većina LAN-ova) ovu opciju obavezno uključiti.
1259/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
ATA/IDE/MFM/RLL support
Podrška za ATA/IDE uređaje (tj. za kontrolere na matičnoj ploči koji su zaduženi za
upravljanje hard diskovima, CD-ROM –ovima itd.)
Enhanced IDE/MFM/RLL disk/cdrom/tape/flopy support – ovo obavezno uključiti
osim ako imamo sistem baziran na SCSI diskovima ili ako imamo sistem koji nema hard
diskova.
Boot off-board chipsets first support – neke matične ploče dodatni kontroler uz već
postojeći na matičnoj ploči, ova opcija omogućava da se sistem najprije pokušava podignuti
sa dodatng kontrolera na matičnoj ploči, a tek onda sa osnovnog kontrolera. Ova opcija
ponekad rješava problem koji se desi kada kernel prilikom boot-anja ne uspije pronaći root
particiju (npr. ako nam je root particija na disku koji je spojen na dodatni kontroler na
matičnoj ploči).
Include IDE/ATAPI CDROM support – podrška za CD ROM-ove
SCSI emulation support – omogućava SCSI emulaciju za IDE ATAPI uređaje, a time
korištenje SCSI drajvere za ATAPI uređaje umjeto orginalnih ATAPI drajvera. Korisno
uključiti ako imamo CD snimalicu, USB FLASH stick i sl.
Osim navedenog tu se još nalazi podrška za mnoge tipove kontrolera, odabrati onaj tip
koji odgovara tipu na našem sistemu, ova opcija značajno ubrzava rad diskovlja.
SCSI support
1260/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
Podrška za SCSI uređaje. Danas većina servera ima SCSI kontrolere za rad sa
diskovima.
SCSI support – obavezno uključiti ako nam treba podrška za SCSI
SCSI generic support – korisno uključiti ako imamo CD sinmalicu ili CD-ROM jer
time omogućavamo pristup u "raw" modu (nužno za ripanje audio CD-ova i sl.)
SCSI low-level drivers – podrška za SCSI kontrolere, treba točno znati koji tip
kontrolera posjedujemo i izabrati jedan od ponuđenih.
1261/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
PPP support for sync tty ports – treba uključiti ako koristimo PPP preko
sinhronizirane linije (ADSL, visoko propusne iznajmljene linije T1/E1 i sl.).
SLIP (serial line) support – podrška za Serial Line Internet Protokol, slično kao i PPP,
no PPP se danas više koristi.
Wireless LAN (non-hamradio) – iza ovoga se krije podrška uređaja za Wireless LAN.
Token Ring devices – sekcija za podršku Token Ring-a
PCMCIA network device support – sekcija sa podrškom za PCMCIA mrežne kartice
(većina externih mrežnih kartica za prijenosna računala)
1262/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
HiSax supported cards – u ovom popisu treba pronaći tip kartice koju posjedujemo i
selektirati (uključiti) ju.
Character devices
Virtual terminal – podrška za virtualne terminale, ona nam omogućava da imamo
nekoliko virtualnih terminala u konzoli (prebacujemo se tipkama Alt + F1 ...F6) ili u X
Windows sistemu (Ctrl + Alt + F1 ... F6, izlaz Ctrl + Alt + F7) koji mogu služiti za različite
funkcije, obavezno uključiti.
Support for console on virtual terminal – omogućava praćenje poruka kernela na
nekom od virtualnih terminala.
Support for sharing serial interrupts – omogućava dijeljenje IRQ-a, korisno ako
imamo puno raznih uređaja (kartica) priključeno u našem sistemu, preporučljivo uključiti (da
bi ova opcjia bila dostupna treba uključiti Extended dumb serial driver options)
Unix98 PTY support – podrška za pseudo terminale, novi način kreiranja virtualnih
terminala na Linuxu, obavezno uključiti.
Mice – sekcija u kojoj su dostupne podrške za razne vrste miševa.
Mouse support – podrška za miševe, ali ne serijske (DB-9 ili DB-25 konektor) i ne
USB miševe, uključiti da bi nam bila dostupna opcja PS/2 mouse.
PS/2 mouse – podrška za PS/2 tipove miša (imaju mali okrugli konektor sa 9 pinova,
većina novijih miševa je tog tipa).
Joystick – sekcija sa podrškom za igraće dodatke, podržano je puno toga pa treba
samo odabrati model, ako imamo nešto što nije podržano postoje i generičke opcije. Može se
1263/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
desiti da je ova sekcija nedostupna (posivljena), to je vjerovatno zbog toga što u sekciji Input
core support nije napravljen pravilni izbor.
Multimedia devices
Podrška za razne video i audio multimedijalne dodatke kao što su video kartice, TV
kartice, radio kartice itd.
File systems
Podrška za različite file sisteme (način na koji su podaci zapisani na medij za pohranu
– hard disk, CD-ROM, floppy disk itd.). Većina OS je vezana za jedan ili nekoliko za njega
specifičnih file sistema, za razliku od toga Linux ima podršku za gotovo sve file sisteme (neki
su još u razvojnoj fazi).
Quota support – omogućava ograničenje diskovnog prostora na kojem pojedini
korisnik može raditi, za sada radi samo sa ext2 datotečnim sustavom.
Kernel automonter support – uobičajeno je da se svi uređaji ("device" - diskovi,
particije, mrežni diskovi) moniraju prilikom podizanja OS preko datoteke fstab ili naknadno
ručno sa naredbom mount, uključivanje ove opcije pruža nam mogućnost da se to montiranje
vrši atuomatski kad pokušamo pristupiti direktoriju na kojem bi se trebao nalaziti pripadni
uređaj. Često se primjenjuje za pristup CD-ROM pogonima i dijeljenim diskovima na mreži.
Resiserfs support – napredni datotečni sustav novije generacije, jedan od najbržih
datotečnih sustava na Linux-u koji podržava journalling, zbog tih svojstava koriste ga neke
Linux distribucjie namjenjene za servere.
Ext3 journaling file system support – journaling verzija ext2 datotečnog sustava (koji
je standardni datotečni sustav za Linux), zbog navedene je mogućnosti sporiji ali zato puno
sigurniji od ext2.
DOS FAT fs support – podrška za FAT (MS DOS) i VFAT (Windows 95),
uključivanje ove opcije omogućit će jošnekoliko opcija.
MSDOS fs support – Podrška za MS DOS datotečni sustav, omogućava montiranje i
prisutp MS DOS particijama.
VFAT (Windows-95) fs support – Podrška za VFAT datotečni sustav, omogućava
montiranje i pristup particijama koje koste Windows 95, 98 i NT operativni sistemi.
ISO 9660 CDROM file system support – standardni datotečni sustav za CD-ROM
medije.
1264/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
Microsoft Joliet CDROM extensions – verzija ISO 9660 datotečnog sustava koja
omogućava korištenje 16-bitnog unicode formata.
NTFS file system support (read only) – podrška za MS NTFS datotečni sustava
(Windows NT, 2K i XP), no samo za čitanje, podrška za pisanje je još uvjek u fazi testiranja.
Second extended support - Podrška za ext2 datotečni sustav, koji je standard na
Linux-u.
UDF file system support (read only) - datotečni sustav novije generacije korišten na
CD-ROM i DVD medijima. Omogućava paketni način zapisivanja (korisnik može sa njime
upisivati i brisati podatke kao na hard disku). Za sada je podrška za upisivanje još uvjek u
razvojnoj fazi.
Network File Systems – Iza ovoga se krije sekcija sa podrškom za mrežne datotečne
sustave:
NFS file system support – omogućava pristup klijentima preko mreže dijeljenim
resursima (particije, direktoriji, diskovi) koji se nalaze na NFS serveru.
Provide NFSv3 client support – novija verzija NFS-a, puno otpornija na greške nastale
uslijed pada mreže, prestanka rada NFS servera itd.
NFS server support – omogućava pružanje NFS usluge, tj. dijeljenje resursa (particija,
direktorija, diskova) na mreži, koristi se na serverskoj strani.
Provide NFSv3 server suport – novija verzija NFS-a, puno otpornija na greške nastale
uslijed pada mreže, prestanka rada NFS servera itd., koristi se na serverskoj strani.
SMB file system support (to mount Windows shares etc.) – podrška za SMB (Server
Message Block), protokol koji omogućava platformama baziranim na Windows operativnim
sustavima dijeljenje datoteka i printera. Da bi se mogla koristiti navedena mogućnost na
Linux-u, osim podrške od strane kernela moramo imati instaliranu aplikaciju koja će to
realizirati (programski paket SAMBA). Nije podržan Microsof-ov NetBEUI mrežni protokol
tako da je dijeljenje moguće samo u mrežama zasnovanim na TCP/IP protokolu.
1265/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
Console drivers
VGA text console – omogućava naprednije prikaze u terminalu (standardni je 25
redova X 80 zankova), tj. više znakova i redova, text u boji itd., obavezno uključiti.
Video mode selection support – omogućava da se prilikom podizanja računala prije
nego što boot loader učita kernel inicijalizacijom vga parametra kernela prebacimo u neki
drugi text mod različit od standardnog. Navedeni parametar možemo inicijalizirati u
konfiguracijskim datotekama grub-a, lilo-a ili u konzoli.
Frame-buffer support – podrška za naprednije mogućnosti nekih grafičkih kartica,
većina ih je u razvojnoj fazi.
Sound
U ovoj sekciji se nalazi podrška za zvučne kartice. Većina kartica je podržana,
trebamo pronaći tip čipseta na temelju kojeg je građena naša zvučna kartica i uključiti ga.
Sound card support - obavezno uključiti ako nam treba podrška za zvučnu karticu.
USB support
Podrška za Universal Serial Bus (USB), navedeno je samo nekoliko značajnijih opcija.
U odjeljku USB Host Contrloller Drivers treba odabrati treba odabrati driver koji
podržava naš USB kontroler na sistemu.
Suport for USB – ako želimo na sistemu podršku za USB, ovo obavezno uključiti.
USB Mass Storage support – uključiti ako nam treba podrška za masovnu pohranu
podataka preko USB-a (npr. vrlo popularan FLASH stick)
USB Printer support – podrška za printere koji su na sistem spojeni preko USB-a.
Cryptographic options
1266/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
1267/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
1268/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
1269/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
KOMPAJLIRANJE KERNELA
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 slijedeću naredbu (za kernele 2.6.x ili mlađe ovaj korak možemo preskočiti):
# make dep
Nakon toga slijedi naredba koja je obavezna za sve verzije kernela.
# make clean
Tijekom izvršavanja ovih koraka kao i nekoliko slijedećih na konzoli će biti ispisana hrpa
poruka, treba pričekati neko vrijeme (nekad i po nekoliko desetaka minuta) da zadati proces
završi do kraja.
1270/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
ili
# make zdisk
Kernel će automatski biti snimljen na disketu koja će nam služiti za podizanje OS-a
(obavezno u BIOS-u podesiti boot-anje sistema sa diskete). Može se desiti da nam kompajler
javi da je kernel prevelik za floppy disk, u tom slučaju trebamo rekonfigurirati .config
datoteku i pokušati opcije koje su integrirane u kernel staviti kao module.
Već u ovoj fazi trebalo bi biti moguće podignuti OS sa novim kernelom (još nismo
napravili module pa će neke funkcionalnosti biti nedostupne), kako se to radi pogledajte u
poglavlju 6.
Za monolitne kernele ovaj korak možemo preskočiti. Ako prvi puta kompajliramo
module za verziju izvornog koda kernela koju smo konfigurirali dovoljno je redom upisati
naredbe (naravno iz direktorija /usr/src/linux)
# make modules
# make modules_install
U prvom koraku će biti u procesu kompajliranja izrađeni moduli, a u drugom koraku će
ti moduli biti instalirani u direktorij /lib/modules/x.x.xx gdje je umjesto x oznake verzije
kernela, npr. u našem slučaju će se moduli iskopirati u direktorij /lib/modles/2.4.27. U
navedenom direktoriju moduli će biti organizirani prema funkcionalnosti u poddirektorije.
Osim navedenih direktorija tu se nalazi i simbolički link build na direktorij u kojem se nalzi
naš izvorni kod kernela.
Upravo direktorij /lib/modules/x.x.xx pravi probleme prilikom ponovnog kompajliranja
iste verzije kernela jer se novi moduli pokušavaju prepisati preko starih.
Jedan načina je da prije izdavanja naredbe # make modules_install preimenujemo
direkotrij /lib/modules/x.x.xx u npr. /lib/modules/x.x.xx-old sa naredbom mv.
# mv /lib/modules/2.4.27 /lib/modules/2.4.27-old
Nakon instalacije i testiranja kernela kad se uvjerimo da je sve u redu taj direktorij
možemo obrisati (kao i prethodnu verzija kernela). Kod ovog načina može se pojaviti problem
da nam upravo prilikom kompajliranja OS zatraži neki modul koji se sada nalazi u
preimenovanom direktoriju i zbog toga nije dostupan.
1271/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
Drugi način rješava ovaj problem. Ovdje ćemo se poslužiti malim trikom, uvijek
trebamo na računalu imati drugačiju verziju kernela od postojeće sa kojom ćemo podignuti
OS (naravno i za taj kernel moraju postojati pripadajući moduli u direktoriju
/lib/etc/modules/y.y.yy, y su oznake drugačije 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 također možemo 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 (inače u ovom direktoriju su uvijek
smješteni kerneli). Datoteku bzImage pri tom treba preimenovati u vmlinuz-x.x.xx, gdje je sa x
označena pripadajuća verzija kernela. U našem slučaju datoteka kernela treba imati oblik
vmlinuz-2.4.27. Na tu datoteku trebamo napraviti simbolički 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 također ih treba preimenovati u oblik System.map-x.x.xx i config-x.x.xx, u našem
slučaju u System.map-2.4.27 i config-2.4.27. Ako u diretkoriju /boot imamo simbolički link
config trebamo ga preusmjeriti na našu config-... datoteku, kao i System.map koji trebamo
preusmjeriti na našu System.map-... datoteku.
1272/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
Učitavanje kernela u radnu memoriju radimo pomoću dodatnih programa prilikom boot-
anja sistema, ovdje će biti opisana konfiguracija dva najpopularnija te namjene,a jedan od njih
je vjerovatno već došao sa instalacijom OS-a.
Program lilo (Linux loader) je smješten na nekom od boot sektora hard diska (najčešće
na Master Boot Record-u (MBR). Konfiguracijska datoteka za lilo je lilo.conf i nalazi se u
direktoriju /etc. Primjer datoteke lilo.conf:
# /etc/lilo.conf
boot=/dev/hda # Program za učitavanje (lilo) se instalira u MBR
root=/dev/hda2 # Osnovan particija gdje se nalazi naš Linux OS
install=/boot/boot-menu.b # Prikazuje izbornik za odabir kernela
default=linux # Defaultni kernel ako nismo ništa izabrali
map=/boot/map
delay=20 # Vrijeme odabira sistema, u ovom slučaju 2 sekunde
image=/vmlinuz # Kernel (u našem slučaju link na kernel)
label=linux # Ovo će biti ispisano u izborniku za izbor kernela vmlinuz
read-only
Sve parametre iza znaka jednakosti možemo izmjeniti sukladno našim potrebama. Prilikom
bilo kakvih izmjena u toj datoteci ili promjena linkova na kernele moramo zadati naredbu
# lilo –v
1273/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
da bi promjene bile ažurirane. Ako smo napravili neku grešku prilikm izmjena lilo.conf
datoeke bit će nam prijavljeno prilikom izvšenja ove naredbe. Svaki put kad izvršimo # lilo –v
parametri se nanovo upisuju u MBR, što baš nije poželjno. Grub to rješava na elegantniji
način.
Grub je program nešto mlađe generacije, također je kao i lilo smješten na boot sektor
hard diska, ali ne zahtjeva ažurianje boot sektora prilikom izmjena konfiguracijske datoteke
ili verzije kernela. Njegova konfiguracijska datoteka je /etc/grub.conf, čiji primjer možemo
vidjeti ovjde:
# /etc/grub.conf
default=0
timeout=10 # Vrijeme odabira sistema u sekundama
splashimage=(hd0,0) /boot/grub/splash.xpm.gz # Prikaz uvodnog ekrana iz Splash.xpm.gz
title Linux-old
root(hd0,2)
kernel /vmlinux.old ro root=/dev/hda2
1274/1275
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kompajliranje kernela
ZAKLJUČAK
Kao što se vidi, proces kompajliranja kernela je dosta složen, mada je ovdje obuhvaćen
samo mali broj mogućnosti suvremenih kernela na Linux-u. Vjerovatno će prvi pokušaji biti
bezuspješni i zadati će mnogo glavobolje, no nemojte odustati. Kada uspijete nekoliko puta
uspješno proći navedeni proces i malo bolje istražite područje, vidjet ćete koliko prednosti i
mogućnosti pruža free software. Činjenica da u rukama imate oko 250 MB source-a i da ga
možete prilagoditi svojim potrebama povlači za sobom pitanje gdje je svemu tome kraj.
Upravo se zbog te činjenice Linux danas vrti na uređajima kao što su mobilni telefoni,
priručna računala, komunikacijski sateliti, NASA-ina računala. Ako se malo potrudite već
danas možete stavit novi kernel na računalo koje ima jedan, dva ili možda čak 255 procesora.
☺
1275/1275