Zagreb, 2006.
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/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sadržaj
3/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sadržaj
Sadržaj
4/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sadržaj
5/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sadržaj
6/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
Dražen Hudoletnjak
GNU FILOZOFIJA I
GNU LICENCA
7/2583
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
8/2583
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.
9/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
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.
10/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
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
11/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
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.
12/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
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.
13/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
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
14/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
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.
15/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
kakve zabrane (nesvjesne), odbacuje se čak i ako se ne očekuje problem s tim kriterijem.
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.
16/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
prodaju usluge održavanja. Velik dio se financira iz donacija. Čini se da je to sve sitno, pokret
slobodnog softvera je još uvijek mali i relativno mlad.
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.
17/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
18/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
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.
19/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
GNU programi
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
20/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
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.
21/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
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.
22/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
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.
23/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
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
24/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
Licencu, i sve njene obveze i uvjete za umnažanje, distribuiranje i mijenjanje Programa ili
djela na njemu zasnovanih.
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
25/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
26/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
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.
27/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
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.
28/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
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). :)
29/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca
NAPOMENE
30/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
Dario Miočić
31/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
1. UVOD
Unix je roñen 1969. u New Jersey-u kao rezultat nezadovoljstva zbog povlačenja
AT&T – evog BTL-a (Bell Telephone Labs) iz projekta Multics (Multiplexed Information
and Computing Service) koji je bio združeni pothvat BTL-a, General Electric-sa i MIT-a u
kreiranju operativnog sustava za velika računala s mogučnošću rada više tisuća korisnika
istovremeno.
Očuh Unix-a, AT&T, je imao vrlo stroga „kućna pravila“ za Unix koja su naglašavala
da nema podrške, nema popravaka pogrešaka i da nema autorstva. Stroga pravila AT&T-a su
se suprostavljala osnovnoj ideji Unix-a, ali su takoñer prouzročila jaku suradnju meñu
korisnicima Unix-a. Kao rezultat toga, Unix je ne samo prvi portabilni operativni sustav, nego
i prvi, ako ne i jedini operativni sustav razvijen u meñusobnoj suradnji – pravi otvoreni
sustav.
32/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
2. PORODIČNO STABLO
Korijeni Unix-a sežu do Multics-a, koji će kasnije postići ograničeni uspjeh, no 1969.
Multics je jedva mogao posluživati tri korisnika istovremeno. Ken Thompson, iz BTL-a, je
počeo razvoj igre nazvane Space Travel na Multics-u. Meñutim, kako je izvoñenje Space
Travel-a oduzimalo mnogo procesorske snage računala GE-645, bilo je potrebno naći neko
drugo rješenje.
Slika 1. PDP - 7
33/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
34/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
U ljeto 1970. računalo PDP-11/20 je napokon stiglo. Ubrzo je na njega prenešen Unix.
„Znali smo da se radi o prijevari. Obećali smo razviti program za obradu teksta, a ne
operativni sustav“, ističe Ritchie. Meñutim, program za obradu teksta je bio uspješan i
patentni odjel BTL-a bio je prvi korisnik Unix-a, dijeleći PDP-11/20 sa razvojnom grupom.
Daljnji razvoj Unix-a nastavio se oko nekoliko jednostavnih principa: pisati programe
koji rade jednu stvar i to dobro, pisati programe koji mogu meñusobno razmjenjivati podatke i
pisati programe koji rade sa tokovima znakova (text streams). To su bile osnove univerzalnog
sučelja svih programa.
Slika 3.
Dennis Ritchie (stoji) i Ken Thompson počinju prenositi UNIX na
PDP-11 putem dva Teletype 33 terminala
35/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
Prvo je izradio potrebe za operacijskim sustavom. Zatim je izradio mali set korisničkih
alata: za kopiranje, ispis, brisanje i ureñivanje datoteka; i izradio je shell.
Mislio je na činjenicu da su do sada, svi programi bili pisani koristeći GECOS, a zatim
prebačeni na PDP-7 pomoću papirnate trake. Ali kad je assembler sastavljen, sustav je bio
sposoban podržavati samog sebe.
Kao što je Ritchie na kraju rekao: "Iako je Brian Kernighan tek duboko u 1970-ima
predložio ime UNIX, ali operacijski sustav kojeg znamo danas, se rodio."
Kao i druga legendarna tvorevina čije ime završava isto sa 'x, UNIX je izniknuo iz
pepela multi-organiziranog truda ranih 1960-ih, da bi razvio ovisan vremenski djeljiv
operacijski sustav.
36/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
Zajednički trud nije bio uspješan, no nekoliko ostalih iz Bell Labaratorija pokušalo je
ponovno. Ono što je uslijedilo bio je sustav koji svojim korisnicima nudi radnu površinu koja
je opisana kao ona "neobične lakoće, snage, elegancije... "
Njegova izrada i evolucija vodila je novoj filozofiji izrade računala i bila je nepresušan
izvor izazova i radosti programerima diljem svijeta.
37/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
Sustav kontrolira sve naredbe sa svih tipkovnica i svi podaci se obrañuju, a dopušta
svakom korisniku da misli kako je on jedini koji radi na računalu. To dijeljenje resursa u
realnom vremenu čine UNIX jednim od najsnažnijih operacijskih sustava ikad.
5. ZNAČAJKE UNIX-a
Značajke koje su učinile UNIX hitom su: višezadaćnost, višekorisnički rad,
prenosivost, UNIX programi, rječnici i aplikacijski software.
5.1. Višezadaćnost:
Mnoga računala izvode samo jednu zadaću odjednom. Unix im omogućava da izvode
više stvari odjednom. To je velika stvar za korisnike, jer ne moraju čekati da jedna aplikacija
završi da bi počeli izvoditi drugu.
Računalo ne može reći pisaču da ispiše sve zahtjeve odjednom, ali ono postavi
prioritete čuvajući sve u redu.
38/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
• dodatni alati – koji nisu neophodni za rad UNIX-a, ali pružaju korisniku
dodatne mogućnosti
Alati mogu biti dodani ili oduzeti s UNIX-a, ovisno o potrebnim aplikacijama.
39/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
6. ORGANIZACIJA UNIX-a
UNIX je organiziran na tri nivoa:
6.1. Kernel
Kernel je program koji kontrolira pristup svim fizičkim resursima sistema. Učitava se
u memoriju sistema kod dizanja (boot) i tamo ostaje dok sistem radi.
6.2. Shell
Shell predstavlja sučelje korisnika sa sistemom. Pokreće se kad se korisnik prijavi
(login). Shell promptom obavještava korisnika da je spreman unos komandi. U Unix-u imamo
tri vrste shella: Bourne shell, C-shell i Korn shell.
40/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
On je 1971. prvo pokušao koristiti Fortran na PDP-7, ali je odustao odmah prvi dan.
Radilo je, ali je bilo i problema. Bilo je presporo i jezik kojim je napisano nije bio pravi za
Byte orijentirane strojeve kao što je bio novi PDP-11.
Ritchie je koristio PDP-11 da doda tipove za B, što je uskoro nazvano NB "Novi B",
tada je počeo pisti i kompilaciju za to. Tako je C i nastao iz ova dva jezika, uz dodavanje
struktura bez previše izmjena sintaksi.
Doug McIlroy, tada šef odjela u Computing Science Research Center, dobio je zasluge
za koncept cjevovoda, a Thompson za njihovu izvedbu.
41/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
ovo, kako bi bilo ovo… Sve dok jednog dana nisam došao do sintaksi za shell koja se slagala
sa cjevovodima“, a Ken je rekao „Napraviti ću to.“
„Bio je umoran od svega i nije učinio sve točno onako kako sam ja zamislio. Izmislio
je malo bolju sintaksu, koju imamo i danas. No koristio je moju nespretnu sintaksu.“
„Ubacio je cjevovode u UNIX, notaciju u shell, sve u jednoj noći“, rekao je McIlroy.
Kao što je McIlroy to opisao: “Filozofija koju su svi počeli koristiti bila je -Piši
programe koji rade jednu stvar i rade je dobro. Piši programe koji rade zajedno. Piši programe
koji rade sa linijama teksta, zato jer je to univerzalno sučelje. Sve te ideje moguće da su
postojale i prije cjevovoda, ali su ipak došle nakon njih“.
7.5. Priručnici
Priručnici dolaze često na kraju, nakon što se proizvod napravi. Unix priručnik,
suprotno tome, reflektirao je filozofiju UNIX-a. Čak je upozoravao na greške (bug-ove).
Stil priručnika je bio Ritchiev, ali je McIlroy ubrzo preuzeo njegovu izradu. „Činjenica
da postoji priručnik, na kojem McIlroy inzistira da bude visokog standarda značila je da
inzistira i na visokom standardu za sve programe koji se dokumentiraju“, objašnjava Sandy
Fraser.
Fraser tada član tehničkog osoblja u CSRC-u rekao je da prije nego je program bio
umetnut u priručnik, morao je biti par puta prerañen da bi poštivao standarde. „I povrh svega,
to je vjerojatno prvi priručnik koji je imao odlomak sa greškama (bug-ovima).“
42/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
Kako je nekoliko korisnika izvan razvojne grupe koristilo PDP-11 za obradu teksta,
rasla je potreba da se operativni sustav dokumentira. Rezultat je bio prvi Unix Programmers
Manual koji su napisali Thompson i Ritchie u studenom 1971. Sadržavao je preko 60 naredbi
kao što su: b (compile B program); boot (reboot system); cat (concatenate files); chdir
(change working directory); chmod (change access mode); chown (change owner); cp (copy
file); ls (list directory contents); mv (move or rename file); roff (run off text); wc (get word
count); who (who is one the system).
43/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
44/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
Nekako u isto vrijeme, dva studenta Chuck Haley i Bill Joy dolaze na fakultet.
fascinirani Unix-om, oni počinju unapreñivati Pascal koji je Thompson napravio, tako da je
uskoro prihvaćen kao nastavno pomagalo.
Upravo to što je cijena distribucije bila ista kao i cijena trake na kojoj je distribuirana,
te priznavanje autorstva su najvažnije karakteristike prvih 10 godina Unix-a, a ujedno i razlog
zašto je postao tako popularan. Tipična situacija je sljedeća: nešto je napravljeno u BTL-u i
distribuirano u izvornom kodu. Korisnik u Engleskoj je napravio nešto drugo od toga. Drugi
korisnik u Kaliforniji je unaprijedio englesku verziju i to distribuirao dalje. Ta unaprijeñena
verzija je uključena u sljedeću BTL distribuciju. AT&T-eva politika patenata nije mogla
nikako to kontrolirati, a sustav je postajao sve bolji i sve više upotrebljavan.
45/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
Bill Joy, koji se bavio distribucijom, poslao je 30 kopija BSD-a 1978. godine. Rad na
vi-u doveo ga je do koda za optimizaciju ispisivanja na različitim terminalima. Joy je odlučio
napraviti interpreter za iscrtavanje ekrana na različitim terminalima, te je tako roñen termcap.
Sredinom 1978. već je mnogo toga bilo učinjeno (Pascal je bio dovoljno robustan, a
uključeni su i vi i termcap), tako da je bilo vrijeme za drugu distribuciju BSD-a. Joy je sjeo,
uključio poboljšanja koja su poslali korisnici i poslao 75 kopija 2BSD-a.
46/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
Do tada, Unix se mogao izvoditi samo na DEC PDP računalima. Meñutim, 1977.
Tom Lyon je prenio neke dijelove verzije 6 na IBM 360 u Princetonu. Sljedeće godine Ritchie
i Steve Johnson te Richard Miller su prenijeli Unix na računalo Interdata 8/32 i 7/32. Sustav
nije bio star niti 10 godina, a mogao se izvršavati na različitim mašinama DEC-a i Interdate.
Verzija 7 Unix-a bila je prvi prijenosni Unix.
Unix verzija 7, koju je BTL izdao u lipnju 1979., sadržavala je mnoga unapreñenja:
veliki datotečni sustav, neograničen broj korisnika i povećanu pouzdanost. Bilo je i mnogo
novih komandi kao što su awk, lint, make, uucp, find, cpio i expr. Programmers Manual je
narastao na 400 strana, a pratila su ga dva sveska po još 400 stranica svaki. Ova je verzija
uključivala i potpuni Kernighan i Ritchie C prevodilac, unaprijeñena korisnička ljuska (shell,
sh - Bourne shell) i mnogo include datoteka.
47/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
12. KOMERCIJALIZACIJA
Sljadeća verzija 4.2BSD-a bila je veliki uspjeh. U prvih 18 mjeseci razaslano je više
kopija 4.2BSD-a nego svih prijašnjih BSD-a zajedno. Mnogi komercijalni operativni sustavi
su bazirani na 4.2BSD-u: DEC-ov Ultrix i SUN-ov SunOS su najpoznatiji.
48/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
Zanimljivo je kako su različiti proizvoñači prigrlili ili odbacili Unix. IBM i BTL su
razvili spoj TSS/Unix (time-sharing system) relativno rano, ali to nije imalo utjecaja na IBM.
DEC je ignorirao Unix, dok je Hewlett-Packard, koji je baš kao i IBM i DEC, imao svoj
vlastiti operativni sustav, prigrlio Unix sa velikim entuzijazmom jednako kao i japanci. Na
kraju treba spomenuti i SUN, kod kojeg je razvoj hardware-a i Unix-a bio simbiotski, i koji je
propagirao BSD.
Interno je DEC za Unix imao „NIH“ (skračenica od not invented here – nije izumljeno
ovdje). To što je Unix bio rezultat razvoja BTL-a je bilo dovoljno da odbije DEC-ove
inžinjere. Sve od 1978. za većinu svijeta Unix je značilo „AT&T-ev operativni sustav“ iako je
za AT&T Unix značio „alat za podršku telekomunikacijama“.
Kada je sudac Green odlučio o Baby Bells-ima (poznati slučaj kada se AT&T morao
odvojiti od Bell-a zbog anti-trustovskih zakona koji su na snazi u USA), AT&T je mogao i
službeno izdati Unix pa se pojavio System V. Sredinom i krajem 1980-ih pojavio se veliki
broj komercijalnih dobavljača Unix-a, aplikacija i mnoštvo korisnika. Unix se probio u velike
poslove, Wall Street i pravne firme.
Soalris, HP-UX, AIX, Ultrix i ostale verzije ujedinile su se oko OSF-a. Unix je utjecao
na sve operativne sustave koji se danas prodaju. Prozori, Multitasking i mreže ne bi bile takve
kakve su danas da nije bilo Unix-a. Kao što je to rekao Sunil Des, sa Ciry University, London:
„Tehnički, Unix je jednostavan, koherentan sustav koji nekoliko dobrih ideja iskorištava do
49/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
maksimuma“. Meñutim, neke od ideja nemaju baš ništa sa operativnim sustavima: ima veze
sa dijeljenjem, suradnjom, težnjom korisnika za evolucijom tehnologije koja je bila podržana
od cijelog skupa istraživača i korisnika spremnih na suradnju.
50/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
1978 2BSD Isto kao i BSD uz dodatak vi, termcap, Mail, more i csh (za PDP-11/34)
1980 4BSD Brži file system, job control, pouzdani signali, auto-reboot, delivermail,
Franz Lisp (za VAX-11/750)
1982 4.1b Probna verzija korištena za predavanja na Berkeley-u, fast file system i
novi kod za podršku mreži
1982 4.1c Skoro sve kao i u 4.2 osim nove podrške za signale, od 4.1c je nastao
SunOS
1983 4.2BSD Važna verzija sa novim promjenama, uključuje TCP/IP, ffs, novi system
interface i novu podršku za signale
1986 4.3BSD XNS umrežavanje, poboljšanja 4.2, cache za direktorije, Internet name
server
1988 Net-1 Dio 4.3-Tahoe, uključuje mrežu, C biblioteku, uslužne programe i login
preko mreže, distribuira se anonomnim ftp-om bez zahtjeva za licencom
51/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
1990 4.3- Probna verzija nadogradnji za 4.4BSD: vnode, NFS, OSI podrška,
Reno podržava VAX, Tahoe i HP 9000/300
1991 Net-2 Dio 4.4-Reno, nova podrška za virtualnu memoriju i port na Intelove
procesore 386/486
1993 4.4BSD Potpuno novo napisan susutav da bi se izbjegao AT&T-ev kod, dodana
podrška za Posix i sve iz Reno i Net-2 verzije
1994 4.4-Lite Verzija koja se rješava svog koda na koji je USL/Novell imao primjedbe,
u osnovi identična 4.4BSD
52/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
15. UNIXTIMELINE
Slika 6. Unixtimeline
53/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
16. BIOGRAFIJE
54/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
55/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a
13. REFERENCE
http://www.levenez.com/unix/
http://www.princeton.edu/~mike/expotape.htm
http://www.unix.org/what_is_unix/history_timeline.html
http://virtual.park.uga.edu/hc/unixhistory.html
http://cm.bell-labs.com/cm/cs/who/dmr/hist.html
56/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura UNIX-a
Marijela Napast
STRUKTURA UNIXA
57/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura UNIX-a
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.
58/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura UNIX-a
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,
59/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura UNIX-a
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.
60/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura UNIX-a
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
61/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura UNIX-a
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:
62/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura UNIX-a
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
63/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura UNIX-a
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
64/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura UNIX-a
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
65/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura UNIX-a
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)
66/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura UNIX-a
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
67/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura UNIX-a
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
68/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura UNIX-a
69/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
Andrija Martinović
SHELL
70/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
UVOD
71/2583
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.
72/2583
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:
73/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
74/2583
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.
75/2583
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
76/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
77/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
78/2583
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.
79/2583
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,
80/2583
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
81/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
PRIJAVLJIVANJE SA TERMINALA
82/2583
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.
83/2583
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.
84/2583
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.
85/2583
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
86/2583
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:
87/2583
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
88/2583
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
89/2583
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.
90/2583
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
91/2583
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
92/2583
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.
93/2583
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
94/2583
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
95/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
FUNKCIJE SHELL-A
96/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
97/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
98/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell
99/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Marko Bošnjak-Mehmedović
Hrvoje Hrašek
100/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
1. UVOD
• Kernel - tvori jezgru operativnog sustava i koordinira unutrašnjost sustava kao što su
npr. sistemski resursi
• File system - dio kernela, kontrolira pohranu i pristup podacima. Sličan je VMS file
system-u u tome što ima hijerarhijsku strukturu.
• Commands - naredbe, programi koje zahtjevamo da računalo izvrši.
• Programi (naredbe) koje su nazvane shells, služe kao komandni prevodioci. Oni se
ponašaju kao veza izmeñu Vas i računala, prevodeći izvršne naredbe. Oni su takoñer
programski prevodilački jezici visoke razine.
Iako postoji mnogo UNIX implementacija, imamo dvije porodice shell-ova (ljuski).
Porodica Bourne ljuski i Berkeley/C shell porodica.
101/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
2. SHELLS (ljuske)
U ovom poglavlju govori se o konceptu UNIX ljuski, i kako njima manipulirati.
Poglavlje sadrži informacije o raspoloživim i preporučanim ljuskama i njihovim
karakteristikama. Predstavljen je princip rada ljuske kao programskog jezika za prevoñenje.
102/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
• % za C shell porodicu
• $ za Bourne ili Korn shell-ove
U bilo kojem trenutku možemo pozvati drugu kopiju istog shell-a ili drugi shell tako da
upišemo ime shella kojeg pozivamo u pozivniku (prompt), npr.:
% csh
poziva csh (C shell). Ovaj novi shell, ili "subshell", je smješten iznad našeg trenutačnog shell-
a. Tada je izvršavanje orginalnog shell-a suspendirano (shell se nalazi u stanju hibernacije), i
tada novi shell preuzima kontrolu. Postupkom završavanja rada s novim shellom orginalni
shell se “budi” i preuzima natrag kontrolu.
103/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Ljuska tcsh je zapravo poboljšana csh ljuska. Neke dodatne funkcije tcsh ljuske su:
++
dobro
+
postojeće
-
loše
--
izostavljeno
Podesivost - + ++ + ++
Izvršenje naredbi + + + + ++
Dovršenje -- + ++ + ++
Ureñivanje linija - + ++ - ++
Zamjena naziva + + ++ + ++
Arhiv -- + ++ + ++
Korekcija pravopisa -- -- -- -- +
Postavke odzivnika + + + + ++
104/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Kontrola posla -- + + + +
Kontrola izvedbe + + + + +
Baratanje signalom + + + - -
Shell skripta je dokument koji sadrži slijed naredbi koje mogu biti izvršene od strane
ljuske i kontrole protoka naredbi. Ista sintaksa koristi se za naredbe unutar skripti za
interaktivan unos naredbi.
Iako možemo pisati kompleksne programe koristeći shell jezik, isto tako možemo kreirati
jednostavne shell skripte za pokretanje dugačkih naredbi ili serije naredbi koje možemo
redovito koristit.
U svakoj shell skripti koju pišemo, koristimo i specijalne znakove #! nakon kojih slijedi
ime putanje ljuske, označavajući time početak datoteke. Ovo označava: a) ovo je skripta a ne
naredba za izvršavanje, b) koja se ljuska poziva da bi se pokrenula skripta.
Na primjer::
#!/usr/local/bin/bash
Na početku skripte pozivamo bash da bi je pokrenuli. Znak # pronañen na bilo kojem
mjestu unutra skripte interpretiran je kao početak komentara, I ljuska ignorira sve znakove
izmeñu simbola # i sljedećeg karaktera nove linije.
Moramo imati na umu da u slučaju izvšavanja neke skripte, za njezino izvršavanje
moramo imati dozvolu za primjenjenog korisnika, neobavezno o ljuski koju koristimo. Nakon
što smo postavili odobrenje, ljuska će trebati obnoviti svoju tablicu raspršivanja ("hash table")
da bi uzela u obzir novu skriptu. Tablica raspršivanja je tablica izvršavanja koje prepoznaje
ljuska.
Da bi obavili ove dvije operacije, upisujemo:
% chmod a+x filename
% rehash
Da bi pokrenuli skriput ljuska mora biti u mogućnosti locirati tu skriptu. Ako je njezin
direktorij na našoj putanji, onda samo trebamo upisati ime te datoteke da bi je pokrenuli. U
slučaju da nije, možemo upisati u komandnoj liniji ime datoteke nakon koje slijedi ./ ( ./
eksplicitno govori shell-u da potraži izvršnu datoteku u trenutačnom radnom direktoriju). Isto
možemo postići i upisivanjem pune putanje imena datoteke, što je vjerojatno najteži način da
kažemo ljuski gdje se nalazi skripta. Ovdje ćemo ilustrirati tri načina kako pozvati skriptu :
105/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
% filename
% ./filename
% /full_path/.../filename
Jednom kada ljuska locira skriptu, ona interpretira i izvrši naredbe u datoteci jednu za
drugom.
Poželjno je da očuvamo direktorij $HOME/bin za sve programe i shell skripte, i da
uvrstimo ovaj direktorij u našu putanju. Ljuska koristi ovu varijablu da bi locirala sve naredbe
i izvršne datoteke.
Bitno je imati na umu da se, kao i sve UNIX naredbe koje nisu dio shell-a, datoteka
skripte izvršava u podljusci (subshell) koja je nastala iz osnovne ljuske. Ova podljuska
osigurava bilo koje okruženje za vraijable koje su definirane u skripti iasto kao i bilo koja
shell varijabla definirana u .cshrc or .shrc datoteci (jedna od ove dvije datoteke mogu biti
izvršene automatski prije skripte, ovisno o shellu). Na kraju skripte, kontrola se vraća
osnovnoj ljusci, I bilo koje definiranje nastalo od strane podprocesa nije vraćeno natrag u
osnovni proces.
Za izvršavanje skripte za koju želimo da se se promjene prenesu natrag do osnovne
(parent) ljuske (npr. postavljanje nove shell varijable), sintaksa za izvršavanje se razlikuje. Za
C shell, izvršavanje skripte vršimo pomoću naredbe:
% source filename
Za Bourne shell porodicu:
$ . filename
Naredba source ili . izvršava skriptu u kontekstu našeg trenutačnog precesa, tako
da možemo utjecati na taj proces, u odnosu na normalno izvršavanje naredbi.
Na primjer, nakon što napravimo promjene u našoj .cshrc ili .login datoteci,
možemo koristiti source ili . da je izvršimo unutar login shell-a tako da promjene dobiju
na značenju, odnosno budu prihvaćene.
106/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
• izvršna datoteka koja sadrži objektni kôd nastao kompilacijom izvornog kôda
• izvršna datoteka koja sadrži sekvence shell komandnih linija (shell script)
• unutarnja shell naredba (built-in command)
Prva dva tipa naredbi mogu uključiti standardne UNIX alate, komercijalne proizvide, i
programe napisane od strane korisnika. Sve ljuske dozvoljavaju ujedno i interaktivne unose
naredbi kod kojih su naredbe upisane na tipkovnici i izvršene jedna za drugom, ili skriptne
unose kod kojih se naredbe stavljaju u jednu datoteku koja je nazvana shell script, i izvršavaju
se kada je ta skripta pokrenuta.
Ljuska izvršava naredbe kao procese. Proces je instanca programa koji je u fazi
izvršavanja. Proces može vršiti interakciju sa kernelom na način da poziva dobro definirane
sistemske pozive (system calls). Sistemski pozivi daju upute kernelu za izvršavanje
konkretnih operacija za pozvani program i oni mogu izmjenjivati podatke izmeñu procesa i
kernela. Na primjer, proces moze upotrijebiti sistemski poziv za stvaranje novog procesa i
ukinuti trenutni program koji se izvršava.
Kada se pokrene terminalska razmjena podataka, operacijski sustav pokreće jedan tzv.
izvorni proces (parent process). Kreiranje novog procesa iz već postojećeg procesa naziva se
forking. Ovaj novi proces naziva se child process ili subprocess. Svaki proces ima
jedinstveni identifikacijski broj (PID). Svaki podproces može dalje račvati novi proces i
samim time postati parent. Za proces koji ne prima unos s terminala, bilo da je pokrenut ili
zaustavljen, kaže se da je on u pozadini (background). Naredba ps može se upotrijebiti da
ispišemo status svih aktivnih procesa.
Kada shell-u damo naredbu koja je povezana s odreñenim izvršenjem ili shell skriptom,
ljuska tada stvori ili račva (fork) novi proces koji se naziva podljuska (subshell). Novi proces
pokreće sustav nazav exec koji tada poziva drugi program za izvršavanje naredbe umjesto
trenutačnog procesa (subshell). Sve dok se podproces izvršava u pozadini, početni proces
ostaje “uspavan” dok se ne izvše ili ne zaustave njegovi podprocesi. Tada se kontrola vraća
početnom procesu.
Da bi izvšili većinu ugrañenih naredbi, shell stvara podljusku koja tada direktno izvrši
naredbu (bez sistemskog poziva exec). Za ugrañene naredbe cd, set, alias i source,
trenutni shell izvršava naredbu bez da je stvorena podljuska. Doduše mi možemo natjerati
shell da stvori proces tako da naredbe stavimo u okrugle zagrade. Ovo je ilustrirano
slijedećim primjerom:
% cd /dir1; pwd
107/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Nakon prvog prolaza, samo su echo 'q* $a x' echo "q* $a x" echo qq qqq $a
višeznačnici interpretirani. x
(zbog navodnika (zbog navodnika
nema višeznačnih nema višeznačnih (višeznačnik koji
ekspanzija) ekspanzija) nije pod
navodnicima je
proširen)
Nakon drugog prolaza, echo 'q* $a x' echo "q* foo x" echo qq qqq foo
varijable koje nisu pod x
(zbog navodnika (varijabla $a pod
108/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
109/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
argument(s)
specificira podatke ili unose (uglavnom datoteke) na kojima će se izvršiti operacija;
argumenti su odvojeni praznim prostorom ("white space").
Treba upamtiti da je UNIX osjetljiv na velika i mala slova. Zbog toga se naredbe
moraju unositi u pravilnom zapisu. U većini vremena naredbe se unose malim slovima.
Dijelovi su odvojeni minimalno jednim znakom razmaka Ako argument sadrži prazni
prostor u tom se slučaju argument stavlja izmeñu dvostrukih znakova jednakosti. Normalno,
opcije mogu biti grupirane; npr. kod opcija -lw i -l -w specifikacije su jednake kao u
doljnjem primjeru (wc je primjer naredbe; ispisuje linije, riječi, i/ili broj znakova jedne ili
više datoteka):
% wc -lw file1 file2
% wc -l -w file1 file2
Neke opcije mogu sadržavati argumente i ne postoji neko pravilo mora li izmeñu
opcije i argumenta postojati prazni prostor tj. razmak. U sljedećem primjeru koji pokazuje
FORTRAN naredbu , outputfile je argument od opcije -o:
% f77 -o outputfile program.f
110/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
csh
tcsh
Opoziv naredbi u ljusci tcsh je poprilično jednostavno. Za opoziv naredbi koristimo
strelice gore/dolje na tastaturi, a strelice lijevo/desno mogu biti korištene za pomicanje unutar
naredbi i pozicioniranje na mjesto koje želimo promijeniti.
Algoritam za koregiranje naredbene linije je prisutan u tcsh shell-u. Da bi smo
aktivirali upisuemo:
% set correct=all
Ovom naredbom mi pokrećemo algoritam koji provjerava sve riječi na naredbenoj
liniji. Ako se bilo koji dio linije promijeni, sustav nas upozorava, i daje nam na izbor da li
želimo prihvatiti promjene ili ih odbacujemo.
Na primjer, recimo da upišemo:
111/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
% lz /usr/bin
Sustav će vratiti:
CORRECT ls /usr/bin (y|n|e|a|)?
Gdje je y=yes, n=no, e=edit, i a=abort. Moramo osigurati jedan od ovij odgovora.
Da bi smo isključili koregiranje naredbene linije upisujemo:
% set correct=none
ksh
Ovdje su prisutna dva stila kod opoziva naredbi; emacs i vi. Stil je odreñen u jednom od
dva načina:
Kada je postavljen stil emacs, koristimo uobičajene emacs naredbe da bi prikazali ili
modificirali prethodne naredbe, npr. <Ctrl-p> za predhodnu liniju. Kada je postavljen stil vi,
opoziv naredbe inicira se upisom Escape (ili <Ctrl-[>) tipke. Tada se mogu sve standardne vi
naredbe koristiti.
bash
112/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
4. VAŽNI KONCEPTI
Ovaj dio pokušava pružiti pregled nekoliko važnih koncepata u UNIX-u koji su
mnogo različiti od drugih sustava i stoga mogu biti zbunjujući korisniku koji nema iskustva u
radu s njima. U svrhu postizanja efektivnog korištenja UNIX-a ovi koncepti moraju biti
shvaćeni.
C Shell porodica
113/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Znak Akcija
>&! Preusmjeri standardan izlaz i standardnu grešku; prepiši preko datoteke ako postoji
114/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Znak Akcija
Treba primjetiti da znakovi < i > pretpostavljaju standardni ulaz i izlaz, odnosno, kao
uobičaje, tako da brojevi 0 i 1 mogu biti izostavljeni. Forma naredbe sa preusmjeravanjem
standardnih ulaza i izlaza glasi:
$ command -[options] [arguments] < input file > output file
Preusmjeravanje može biti neuspješno pod nekim okolnostima: 1) ako imamo
postavljenu noclobber varijablu i pokušamo preusmjeriti izlaz na postojeću datoteku bez da
forsiramo prepisivanje preko te datoteke (overwrite), 2 ako preusmjerimo izlaz prema datoteci
za koju nemamo pristup pisanja, 3) ako izlaz preusmjerimo prema direktoriju.
Primjeri:
$ who > names
Preusmjeri standardan izlaz prema datoteci naziva names
$ (pwd; ls -l) > out
Preusmjeri izlaz obje naredbe prema datoteci naziva out
115/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
116/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
4.4 Filteri
Filter je naredba ili program koja uzima svoj ulaz iz standardnog ulaza, šalje svoj izlaz
prema standardnom izlazu, i može biti korištena bilo gdje unutar pipeline-a. Primjeri filtera su
UNIX alati:
Kombinacija UNIX filtera grep, awk, i sort zajedno sa upotrebom cjevovodi vrlo je
moćna.
117/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
grep
Filter grep pretražuje sadržaj jedne ili više datoteka za uzorkom i prikazuje samo one
linije koji odgovaraju traženom uzorku.
awk
awk predstavlja puno više od filtera; to je moćan skener za uzorke i ujedno je jezik za
procesiranje. Unatoč tome što će nam bii potrebno dosta vremena da naučimo kako koristiti
awk, on je vrlo dobro situiran prema zadaćama koje uključuju manipulaciju datoteka. Pomaže
nam da baratamo stvarima za koje bi inače trebali koristiti programski jezik poput C-a ili
C++-a.
awk najbolje radi kada datoteke kojima barata imaju neku strukturu, na primjer
dokument sa zaglavljem ili tablicama. U slučaju da imamo tablice, tzv. razdvajači polja
(razmak, dvotočka, zarezi, tabovi) on može poravnati i prevoditi sadržaje tih polja prema
načinu na koji ih koristimo.
Postoji nekoliko verzija awk-a, i one se razlikuju od platforme do platforme. "Stare"
awk verzije mogu biti awk ili oawk, "novije" awk mogu biti nawk.
Kod nawk filtera, dodatne funkcije pomažu olakšano pisanje velikih skripti. Korištenjem
nawk-a možemo:
• definirati funkcije
• izvršavati UNIX naredbe iz skripte
• procesirati rezultate UNIX naredbi
• procesirati argumente naredbene linije
• lakši rad sa višestrukim ulaznim podatcima
awk izvršava set instrukcija za svaku liniju ulaza. Možemo specificirati instrukcije na
naredbenoj liniji ili možemo napraviti skriptnu datoteku. Ulaz se čita liniju po liniju s
vremena na vrijeme, iz jedne ili više datoteka ili iz standardnog ulaza. Instrukcije moraju biti
zatvorene pod jednostrukim navodnicima da bi ih se zaštitilo od shell-a. (Instrukcije uvijek
sadrže zagrade koje se interpretiraju kao specijalni znakovi od strane shell-a) U primjerima
ćemo koristiti instrukciju print.
118/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
sort
Filter sort slaže linije specificiranih datoteka po abecednom slijedu. Upotrebom opcije
-m može spojiti posložene datoteke ulaza. Sintaksa glasi:
119/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
pokrećemo naredbu:
% sort personnel
da bi smo posložili sadržaj datoteke kao što je dolje napisano:
Filter sort je vrlo lako koristiti. Ako polje nije specoificirano, cjelokupna linija
redstavlja ključ za sortiranje. Posloženi izlaz uobičajeno odlazi prema standardnom izlazu
120/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
5. JOB CONTROL
Svaka naredba koja se da shellu (vrijedi za sve shell osim sh) je posao i dobiva job
number odnosno pripadajući broj. Pojedinačna zapovijed je najjednostavniji posao. Niz
naredbi razdvojenih pomoću smiclone ili komande pipane zajedno čine jedan posao. Skripta
takoñer kreira jedan posao. Posao može sadržavati i više procesa, zato jer je svaka komanda
jedan proces.
Posao ostaje u svom okruženju, npr. trenutnom direktoriju. Ako se kasnije promijeni
direktorij nakon stavljanja posla u pozadinu i onda ponovi nastavi sa poslom u pozadini, naći
ćete se opet u polazišnom direktoriju.
Job control ili kontrola posla omogućava rad na nekoliko poslova istovremeno,
prebacivajući se naprijed i natrag izmeñu njih po želji, takoñer omogućuje pokretanje
zaustavljanje i ubijanje. Kada se pokrene posao, on se po defaultu nalazi u foregroundu
odnosno prvom planu i pridružen terminalu. Posao možete premjestiti u pozadinu tako da se
može pokrenuti novi posao ili se može promatrai neki posao koji se već odvija. U pozdaini se
može odvijati veči broj poslova dok se u prvom planu može odvijati samo jedan. Upotreba
višestrukih prozora na X-terminalma ovu radnju održava transparentnom.
5.1 Prioritet
Prioritet se može kontrolirati sa naredbom
Nice
Primjetimo da postoji i druga nice naredba /bin/nice. To nije ugrañena naredba. Ako
napravite man nice, dobit ćemo informacije i o ovoj.
121/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
U ovom primjeru šaljemo dva posla u pozadinu i u tu svrhu moramo korisiti zagrade:
% (command1; command2) &
Shell ispisuje redak koji nam pokazuje broj posla, njegov process_ID te ga šalje u
pozadinu.
Korištenje
Sljedeći naćin za slanje poslova u pozadinu je korištenje suspend control charatcera ili
tipkovičke kratice koja je načešće dodijeljena kombinacji tipaka CTRL+Z. Ona zaustavlja ili
pauzira trenutni aktivni posao u pozadinu-ne ubija ga.
Nakon što smo zaustavili posao možemo ga nastaviti sa fg naredbom ili ga možemo
pokrenuti u pozadini sa bg naredbom. BG naredbu koristimo ako želimo privremeno
zaustaviti posao da napravimo neki drugi i pritom se želimo vratiti na njega ali na način da se
odvija dalje u pozadini.
Posao u pozadini će stati ako pokuša čitati sa terminala. Ako izlaz nije preusmjeren
pozadinski posao može: slati izlaz na terminal ili biti zaustavljen ako pokuša pisati na
terminal.
Ispis poslova
% jobs [-l]
Ova naredba ispisuje poslove u pozadini, njihov broj, status I naredbu koju
izvršavaju. Plus znak postavljen na izlazu znači da je posao aktivan
odnosno trenutni, dok minus znak označava da je posao “sljedeći”. Oznake
122/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Fg
Bg
Stop
kill
Sve one mogu prihvatit odreñeni argument koji se specifičan za pojedini posao koje se
odvija ili ne moraju imati nikakav argument. Argumenti se mogu pojavit u dvije osnovne
oblika:
1. jednostavan proces sa ID brojem (ključ), ps oznaka
2. forma koja počinje znakom postotka ispred cijelog izraza (%)
Oblik % može biti %- gdje – označava prethodni posao %m gdje n označava broj
posla koji se može dobiti, tj vidjeti pomoću jobs naredbe, %pref gdje pref označava
jedinstveni prefiks imena naredbe i argumenata njezinih poslova, %?str gdje str označava
jedinstvene stringove karakteristične za poedini posao.
Fg naredba
% [fg] %[job]
Fg naredba nije obavezna. Ako posao nije detaljno opisan, trenutni posao se dovodi u
prenji plan, a sljedeći posao postaje sadašnji.
Primjeri:
% fg %5
% %1
% %
BG naredba
123/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Bg stavlja trenutni ili navedeni posao u pozadinu, nastavljajući sa njima ako su bili
zaustavljeni.
STOP naredba:
KILL naredba
% kill %job
AT
Shell čuva podatke o sustavnim varijablama i treuntom radnom direktoriju koji su pod
utjecajem u vrijeme kada se posao zaprimi i omogučava njihovu kasniju raspoloživost kada je
posao pokrenut.
Varijabla vrijeme sadrži 1,2 ili 4 broja. Jedna ili dvije znamenke se podrazumjeva da
označava sate dok 4 znameke predstavljaju sate i minute. Takoñer možemo napisati i u obliku
dvaju razdvojenih parova odvojenih dovtočkom (sati:minute) ili u obliku 24 satnog zapisa
vremena samo tada moramo dodati jos i prefiks am ili pm ovisno o vremenu.Imena poput
noon,midnight,now i next se neće prepoznati.
Datum je ili ime mjeseca iza kojeg slijedi broj dana (opcionalno možemo upisati i
godinu ovojenu zarezom) ili dan u tjednu (napisan u obliku punog imena ili skraćenog na tri
znamaenke).
124/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Rijeći tipa today ili tomorrow se takoñer mogu koristiti. Ukoliko datum nije zadan,
today se posatvlja ako je sat veći od sadašnjeg sata a tomorrow ako je manji.
Inkrement je opcija koju karakterizira broj koji označava minute, dane, tjedne ili godine u
jedini ili množini.
Primjeri:
% at 8
% at 0800
% at 8:00am Jan 24
% at now + 1 minute
At čita iz standardnog ulaza, što znači da upisujete naredbe (prompt može, ali i ne
mora postojati).Kada se završi ulaz se prekida sa CTRL+D nakon kojeg slijedi vraćeni
prijenos.
Takoñer se može preusmjeriti ulaz u datoteku ili u naredbu, kao što se vidi na
primjeru:
Prva linija uzrokuje da csh da pročita linije sce do xxx ili do kraja datoteke. No kako
ne postoji xxx ona će čitati sve dok se ne pritisne CTRL+D. Treći redak pokreće .cshrc. To je
neprlavilna naredba u Bourne shell stoga se po tome može vidjeti da se naredba izvodi u csh.
Primit ćete poruku koja je slična ovoj u primjeru i rezultati će vam biti poslani.
Aout će bit poslan nakon dvije minute. On sadrži listu svih aliasa definiranih u .cshrc
datoteci. Ako skriptu pokušamo pokrenuti koristeći at tada će skrpita bit vraćena u shellu koji
smo specificirali unutar skripte.
Primjer:
% at now + 2 minutes
? script
? <Ctrl-d> (followed by carriage return)
125/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Naredba cron
% crontab [filename]
% crontab [options]
Gdje filename je ime datoteke koja sadrži naredbe koje želimo izvršiti. Ako ne
navedemo datoteku, tada će crontab čitati komande iz standardnog ulaza i to onako kako ih
unosimo, završavajući sa CTRL+D. Naredbe će biti izvedene pod Bourneovim shellom.
Sistemski uslužni program cron čita crontab datoteku i izvodi naredbe. Standardni izlaz i
standardna greška biti će posalni natrag ako nisu preusmjerene.
Cron datoteka sasatoji se od linija koje sadrže po šest polja svaka. Polja su razdvojena sa
razmacima ili tabulatorom. Prvih per su brojevi koji označavaju sljedeće:
• minute (0-59)
• sate (0-23)
• dane mjeseca (1-31)
• mjesece u godini (1-12)
• dane u tjednu(0-6 with 0=Nedjelja)
Ako se upiše zvjezdica umjesto broja, cron će to shvatiti kao zamjenski znak za sve
moguće vrijednosti. Šesto polje cron linije je niz koji izvršava shell u zadano vrijeme
Primjer:
#Myfile
# Run script that archives to 8mm tape for backup.
# Monday-Thursday at 2200 backup everything that has been
# changed. Every Friday at 2200 backup everything.
0 22 * * 1-4 /usr/buckley/daily 1>>/usr/buckley/cron/backup.log 2>&1
126/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
127/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
telnet host
Sustav će zatražiti prvo korisničko ime, a nakon toga i lozinku.
Primjer:
Connecting to host "fsgi01"......success.
login: username
Password:(password is not shown)
IRIX Release 5.2 IP7 fsgi01
Last login: Tue Oct 24 09:27:14 by UNKNOWN@dcdx03.fnal.gov
Terminal Type is xterm
Korisničo ime mora sadržavati mala slova, dok lozinka može koristiti
i velika. Prilikom unosa moramo bitit oprezni jer je UNIX osjetljiv na
velika i mala slova. Ukoliko se prijavimo velikm slovima UNIX će
pretpostaviti da posjedujemo terminal koji ima mogučnost rada samo sa
velikim slovima i imat ćemo ograničene mogučnosti. Ukoliko se to desi tada
je potrebno ulogirati se ponovo ili unijeti naredbu
% stty –lcase
C shell
Bourne Shell
128/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Odjava sa sustava
C shell
% logout
ili
% exit
Bourne Shell
$ exit
or (on some systems):
$ <Ctrl-d>
U Bourenovom shellu, mora se podestit vrijednost varijable PS1. Ovo je varijabla koja
se deklarira i inicijalizira samo prilikom pokretanja shella. Uključuje i datoteku .profile.
129/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
7. SPECIJALNE TIPKE
Kao i svi sustavi Unix posjeduje brojne specijalne tipke odnosno kratice koje obavljaju
odreñene funkcije. Neke važne su backspace kojime poništavamo znak koji smo unijeli, onda
delete ili brisanje cijelog reda kojeg smo unijeli odjedamput ili prekidanje izoñenja naredbi.
Te kratice može odrediti i korisnik i one imaju različite vrijednosti odnosno funkcije zavisno
o shellu, veriji unixa te login datotekama u kojem se izvode.
erase DEL or Briše znak. Backspace and erase one character (the key used depends
backspace on terminal setting). Ponekad, posebno unutar tcl/tk aplikacija, mora
se koristiti <Ctrl-h>.
% stty –a
% tabs
130/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Kada imamo problema sa delete tipkom, potrebno je dodati sljedeći tekst na .profile i
na. Login kako bi ta tipka proradila kako treba na svim treminalim i na svim platformama.
case $TERM in
vt100)
stty erase \^? ;;
xterm)
case "`xdpyinfo | grep 'vendor string'`" in
*DigitalEquipmentCorp*) stty erase \^? ;;
*Network\ Computing\ Devices*) stty erase \^H ;;
*Silicon\ Graphics*) stty erase \^H ;;
*) stty erase \^H ;;
esac
;;
esac
set -o emacs
alias __A='^P'
alias __D='^B'
alias __B='^N'
alias __C='^F'
Primjetimo da ipred slova A, B, C, D predstoji dva znaka podcrtano. Na ta mjestatreba
dodati željeni kontrolni znak, a ne samo carat-P ili carat-B. Ispred konntrolnog znaka
uobičajeno prethode znakovi navoda koji se rezlikuju od editora do editora.
Za ove editore unesite ove naredbe odmah prije umetanja kontrolne znamenke:
vi
131/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
<Ctrl-v>
emacs
<Ctrl-q>
nu/TPU, fermitpu
<Ctrl-v> <Ctrl-v>
EDT+
<Ctrl-[>
NEdit
Za unošenje ovih znakova potrebni je korisiti izbirnik Insert Control Character iz Edit
izbornika.
132/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Primjer:
% command \<CR>
Forward slash znak je znak kojim se označava root direktorij. Kada navodimo ime
puta do neke datotek / znak nam služi za razdvajanje direktorija prem hijrarhiji.
Primjer:
/rootdir/.../userdir/subdir1/subdir2/filename
Postoji više tipova, odnosno vrsti znakova navoda. U skladu s time različita su
značenja pojedinog tipa.
Jednostruki navodnici postavljeni na početak i kraj nekog izraza, stringa. Npr. 'string'
kazuju komandnom interpreteru da string shvati doslovno tj kao cijelinu.
Jednostruke backquotes oko stringa kazuju interpreteru da izvodi naredbu ili naredbe
unutar stringa. Ovo je jednostavan način za spajanje više komandi u jednu i za interaktivne
skripte unutar shella.
Okrugle zagrade
Niz naredbi koje se nalaze unutar okruglih zagrada se izvodi u subshellu. Naredba koja
nije u shellu uvijek se izvodi u posebnom shellu (subshell). Kada se naredba nalazi unutar
zagrada, ona se pokreće u drugom subshellu.
Razdvajanje naredbi.
Semiclone ondosno točka zarez znak služi za razdvajanje naredbi u jednoj komandnoj
liniji.
133/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Primjer:
% command1 ; command2
U ovom primjeru izvodi se prvo prva naredba, a nakon njezinog završetka izvodi se
druga naredba.
Ampersand znak se koristi isto kao i točka zarez, no sa jednom bitnom razlikom, a to
je da ova naredba ne čeka da se naredba jedan izvrši.
Dvostruki ampersand omogučava da se naredba dva izvrši samo ako je naredba jedan
izvršena uspješno.
Piping-cjevovodi
Pipe kazuje naredbi dva da koristi izlaz naredbe jedan kao ulaz. Dvostruki pipe kao i
dvostruki ampresand izvodi se naredba dva samo ako je naredba jedan izvršena uspješno.
134/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
9. UOBIČAJENI IZRAZI
Uobičajeni izraz je niz znakova koji se sastoji od slova, brojki i specijalnih simbola
koji se označavaju sa jednim ili više zankova.
Oni se koriste da formiramo uorke teksta koje želimo naći.
Uobičajeni izraz je definiran da pronañe bilo koji znak koji je definiran za traženje.
Važnije mogučnosti uključuju:
Uobičajene izraze koriste naredbe vi. Grep i awk. Grep označava global regular
expression printer.
.
točka odgovara bilo kojem pojedinačnom znaku
Primjer: . ing odgovara svim znakovima kojima završavaju sa ing
primjer: ab*c odgovara a kojem slijedi 0 ili više b-ova kojima slijedi c,ac,abc
abbbc
.*
odgovara bilo kojem nizu znakova (. Odgovara bilo kojem znako dok * odgovara bilo
kojem broju znakova)
$
postavljen na kraj uobičajenog izraza, odogovarat će kraju onoga što piše na liniji
“
ograničava znakove da se spriječi prevoñenje, tj izvršavanje
\
isključuje specijalno značenje znaka koji slijedi
[]
135/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
[...]
odgovara bilo kojem znaku ili nizu znakova koji se nalazi unutar zagrada
136/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
C shell
% set name=value
Name označava ime varijable, a value znak koji onačava vrijednost koju varijabla
može poprimiti. Ako se u value upiše tekst, tj lista koja sadrži tesktualne simbole tada treba
koristiti zagrade da bi se ispravno definirala ta vrijednost.
Primjer.
Ako se naredba set izda bez argumenata tada će se prikazati sve shell varijable.
Vrijednost pojedine varijable ne može se provjeriti pomoću set name.
% unset name
Da bi se shell varijabla koristila u narebi mora joj prethoditi znak $. Npr $name.
Ovo govori komandnom interpreteru da želite vrijednost varijeble, a ne njezino ime.
Takoñer se može koristiti i $(ime), da se izbjegne mješanje sa ostalim tekstom u naredbi.
% echo $name
Ukoliko je vrijednost lista, tada da bi vidjeli vrijednost n-tog stringa moramo upisati:
137/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
% echo $name[n]
% set name=prepend_value${name}
ili
% set name=${name}append_value
Gdje argument value je interpretirana kao znakovni niz. Ako niz sadrži samo ramake
ili želimo upisati višestruke vrijednosti tada je poželjno uokvirti to sa dvostrukim navodima
(“)
Primjer
Trenutne varijable okoliša mogu se prikazati pomoću setenv narebe bez argumenata.
Ako varijablu okoliša žalimo kortisti unutar naredbe tada joj mora prethoditi znak $ime
Ovo kazuje interpreteru da želimo koristiti vrijednost varijable, a ne ime. Takoñer možemo
koristiti i $(ime) kojim izbjegavamo zabunu dok koristimo teskt u naredbi.
Da bismo dodali ili pridodali vrijednost postoječoj naredbi razlikujemo dva slučaja.
syntax:
% setenv NAME "prepend_value${NAME}"
or
% setenv NAME "${NAME}append_value"
Ako su vrijednsoti koje dodajemo vrijednosti već postojeće varijable tada je potrebno
uokviriti izraz sa zagradama.
138/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Bourneov shell
Bourne shell ne razlikuje varijable okoliša i varijable shella. Kada se shell pokrene on
čita podatke iz tablice okolišnih varijabli, definirajući za svaku posebno shell varijablu
koristeći isto ime pritom i kopira ih. Od te točke pa nadalje shell sradi samo sa shell
varijablama. Ukoliko se vrijednosti shell varijabli promijene one se moraju eksplicitno
eksportirati u pripadajuči okoliš u ono redoslijedu u kojem će procesi vidjeti promjene.
$ unset NAME
Gdje ime(name) je ime varijable, a vrijednost (value) znak koji predstavlja vrijednost
varijable. Ukoliko je niz popunjen prazninama ili se žele upisati višestruke vrijednosti tada je
poželjno niz uokviriti sa dvostrukim navodnicima.
Da bi se shell varijabla koristila u narebi mora joj prethoditi znak $. Npr $name.
Ovo govori komandnom interpreteru da želite vrijednost varijeble, a ne njezino ime.
Takoñer se može koristiti i $(ime), da se izbjegne mješanje sa ostalim tekstom u naredbi.
% echo $name
Da bismo dodali ili pridodali vrijednost postoječoj naredbi razlikujemo dva slučaja.
$ NAME=prepend_value$NAME
or
$ NAME=$NAMEappend_value
139/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
HOME
~/myfile
Je ekvivalent $HOME/myfile.
PATH
Varijabla PATH sadrži listu svih direktorija koje shell koristi prilikom traženja naredbi
koje unosimo na komandnoj liniji. Ako se putanja postavi pogrešno neke naredbe neće
pronaći. Ako unesemo naredbu sa relativnom ili apsolutnom putanjom tada će shell tražiti tu
naredbu samo na toj putanji bez traženja u PATH varijabli.
Ako uključimo u varijablu PATH trenutni radni direktorij “dot” (.) u putanju tada će
shell uvijek prolaziti kroz radni direktorij. To omogučava da pokrenemo izvršne datoteke iz
radnog direktorija unoseći samo ime datoteke.
% setenv LINES n
% setenv COLUMNS n
MANPATH
MANPATH varijabla sadrži listu direktorija koje shell pretražuje u potrazi za man
stranice.
140/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
SHELL
Ova varijabla postavlja vaš defaultni shell. Trenutni shell se utvrñuje zadnjim poljem
lozinke.
Ignoreeof
Ova varijabla postoji u csh,tcsh,ksh i bash. Kada varijablu uključimo, tda ne možemo
izaći iz shella koristeći CTRL-D, tako da se ne može slučajno izaći. Tada moramo koristiti
naredbe exit ili logout da izañemo iz shella.
No clobber
141/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
11. ALIASI
Naredba alias dopušta kreiranje vlastitih imena i izraza za naredbe. Ona zamijenjuje
znakove na komandnoj liniji prema zadanim specifikacijama. Alisa je prepoznat samo od
shella u kojem je definiran.
Nikada se ne preporuča koristiti isti alias kako glasi ime naredbe. U tom slučaju nastat
će greška i UNIX neće tu naredbu izvršiti. Ovo ne predstavlja problem ako vidite poruku o
grešci, meñutim što ako je ne vidimo. Na primjer ako ste navikli koristiti naredbu rm (remove
files) kao alias za rm –i (makni datoteke ali zatraži potvrdu). Stoga kada pokrenemo rm
očekivati ćemo potvrdu. No ako alias nije definiran nćemo dobti poruku i možda ćemo
obrisati datoteke koje ne želimo.
C-shell
Primjeri:
Bourne shell
Alias naredba je podržana na ksh i bash ali ne i na sh. Za Bourne shell moguće je
koristiti i shell funkcije umjesto naredbe alias.
142/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Naredba će ispisati samo list datoteka koje se nalaze u direktoriju. Grep u ovoj naredbi
služi za traženje slova d na kraju svake kolone.
Shell funkcije
Bourne i Korn shell podržavaju shell funkcije koje su vrlo slične shel skriptama u koje
spremamo nekoliko naredbi koje želimo izvršiti kasnije. Shell funkcijama se pristupa mnogo
brže jer su pohranjene u memoriji, a ne u datoteci. Shell i predprocesria prilikom aktiviranja.
Možemo ih koristiti i za aliase.
143/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
12. ZAKLJUČAK
Komanda linija predstavlja najniži oblik unosa naredbe u računalo. Taj način donosi sa sobom
niz prednosti, ali i nedostataka. Unix je specifičan u odnosu na windowse jer posjeduje
mogućnost rada i sa grafičkim sučeljem i komandnom linijom. Komandna linija predstavlja
brži unos naredbe, ali zahtjeva poznavanje velikog broja naredbi. No taj način je ostao i ostat
će primarni način rada sa računalom za porfesionalce i programere, bez obzira na rastući trend
grafičkih sučelja.
144/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line
Marko Pintač
145/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
1. UVOD
Ljuska je program koji interpretira naredbe i ponaša se kao sučelje prema UNIX
operativnom sustavu. Kada se prijavimo za rad u sustavu, ljuska se pokreće u cilju obrade
naših naredbi. Dotična ljuska naziva se login ljuska. Od toga trenutka, svaki put kada
utipkamo naredbu i pritisnemo tipku «Enter», ljuska ispituje naredbu i poduzima
odgovarajuće aktivnosti. Može se koristiti neka svojstva i koncepcije pridružene ljusci za
pisanje programa pod nazivom script ljuske (shell script) ili procedure ljuske. Te programe
lako je konstruirati i testirati. Korisni su u stvaranju naredbi skrojenih za naše osobne potrebe.
146/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Primjer 1.
ls *txt
Ljuska interpretira naredbu tako da najprije stvori popis imena datoteka iz tekućeg direktorija
kojima imena završavaju na txt,a zatim taj popis šalje programu ls, koji ispisuje datoteke na
ekranu.
Ljuska je program. Nije dio jezge ili internih poslova operativnog sustava. Ipak,
vrlo tijesno surañuje s operativnim sustavom.
Možemo napisati program koji će biti korišten kao ljuska.
Korisinici sustava očekuju standardni skup svojstava prisutan u bilo kojoj ljusci.
147/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Koristimo znak «<» za preusmjeravanje ulaza prema naredbi ili programu tako da dolazi
iz datoteke umjesto iz terminala.
Primjer 2.
Želimo li poslati datoteku info nekome čija je adresa marko putem elektronske pošte, umjesto
ponovnog utipkavanja datoteke u mail naredbi, unesemo sljedeću mail naredbu koja koristi
datoteku info fao ulaz (stdin):
Koristimo znak «>» za preusmjeravanje izlaza programa prema datoteci. Umjesto da ode na
ekran, izlaz se pohranjuje u datoteku.
Primjer 3.
Naredba date prikazuje trenutačno vrijeme i datum na ekranu terminala. Ako želimo pohraniti
trenutačni datum i vrijeme u datoteku imena now, unesemo slijedeću naredbu:
Ako datoteka navedena s desne strane znaka > već postoji, tada se njezin novi sadržaj
prepisuje preko starog sadržaja.
Ako želimo dodati informaciju na kraj postojeće datoteke, koristmo simbol «>>».
148/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Primjer 4.
Za dodavanje trenutačnog datuma na kraj datoteke report, unesimo naredbu:
Treba paziti da ne preusmjerimo istu datoteku i kao ulaz i kao izlaz za istu naredbu.
Najvjerojatnije ćemo uništiti sadržaj datoteke.
149/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Dok ljuska interpretira našu naredbu, prepoznaje neke znakove kao znakove za
zamjenu. Kada ih koristimo ne moramo utipkavati cijelo ime datoteke. Znakovi za zamjenu
mogu biti korišteni za prikaz bilo kojeg niza znakova, jednog znaka ili skupine znakova.
Koriste se za dopunu imena datoteka.
Primjer 5.
Ispis svih datoteka koje imaju ekstenziju .txt na ekranu
ls *.txt
Upozorenje:
ls * txt
U ovom primjeru, naredba ls najprije ispisuje datoteke predstavljene zvijezdicom. To znači da
ispisuje sve datoteke, nakon toga naredba ls se pomiče do slijedećeg navoda u popisu datoteka
namjenjenih ispisivanju na ekran (UNIX interpretira razmak izmeñu * i txt kao odjeljivać),
naredba ls obrañuje txt kao ime sljedeće datoteke koju je potrebno ispisati.
150/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
151/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Često imamo potrebu koristiti izlaz jednog programa ili naredbe kao izlaz drugog.
Umjesto unosa svake naredbe odvojeno i pohranjivanja rezultata pomoćne datoteke, možemo
povezati slijed naredbi koristeći kanal(eng. Pipe). UNIX znak za kanal je «|».
Primjer 6.
Želimo li sortirati datoteku allsales i nakon toga je ispisati na pisaču:
sort allsales | lp
Izlaz programa s lijeve strane kanala je poslan kroz kanal i iskorišten kao ulaz za program
zdesna.
Primjer 7.
Ispis na pisaču sortiranog popisa podataka u svim datotekama čija imena počinju sa sales:
152/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Ljuska nam dopušta pokretanje jednog procesa i, prije njegova završetka, pokretanje
drugog. Kada to činimo stavljamo prvi proces u pozadinu. Proces se stavlja u pozadinu
korištenjem znaka & kao zadnjeg znaka u redu koji sadrži naredbu za koju želimo da bude
izvršena u pozadini.
Primjer 8.
Ako unesemo tu naredbu, vidimo broj na ekranu. Taj broj je identifikacijski broj procesa ili
PID(engl. Process Identification) koji smo stavili u pozadinu. PID je način na koji
operativni sustav identificira taj proces.
153/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Ljuska je program koji se pokreće kada se prijavim za rad u sustavu i interpretira naše
naredbe. Služi kao osnovno sučelje izmeñu operativnog sustava i korisnika, mnogi korisnici
poistovjećuju ljusku s UNIXom. Ljuska nije dio jezge operativnog sustava.
Do danas su stvorene mnoge ljuske, ali tri prevladavaju:
Bourne ljuska, C ljuska i Korn ljuska.
Bourne ljuska, poznatija kao sh, izvorna je UNIX ljuska. Dostupna je u svim UNIX
sustavima i smatra se standardnom ljuskom. Izvršni program za tu ljusku je u datoteci /bin/sh.
Kada se koristimo tom ljuskom vidimo prompt $. Posjeduje jake programske mogućnosti.
C ljuska, poznata kao csh. Razvijena je kao odraz činjenice da je rad na računalu
postao u većoj mjeri interaktivan. Izvršni program za tu ljusku je u datoteci /bin/csh. Kada se
koristimo tom ljuskom vidimo prompt %. Sintaksa C ljuske slična je programskom jeziku C.
To je jedan od razloga zašto script programi ljuske napisani za C ljusku često ne mogu raditi
pod Bourne ili Korn ljuskom. Posjeduje svojstva nedostupna Bourne ljsci: mogućnost
ureñivanja naredbi, pregled korištenih naredbi, korištenje aliasa.
Korn ljuska, poznata kao ksh. Razvijena je da bi uključila neke interaktivne osobine C
ljuske zadržavajući programske mogućnosti Bourne ljuske. Kompatibilna je s Bourne
ljuskom. Izvršni program za tu ljusku je u datoteci /bin/ksh. Kada se koristimo tom ljuskom
vidimo prompt $. Uključuje mogućnost ureñivanja naredbi, pregled korištenih naredbi i aliase
naredbi.
Ureñivanje naredbi znači da nakon što utipkate naredbu i prije no što je potvridmo možemo
urediti ili izmjeniti dijelove bez potrebe za ponovnim utipkavanjem najvećeg djela naredbe.
Pregled korištenih naredbi omogućuje nam pogled unatrag na prethodno unesene naredbe i
njihov ponovljeni poziv.
Alias naredbe omogućuju nam zadavanje imena za naredbu.
154/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Primjer 9.
Za zadavanje riječi help kao aliasa, ili alternative, za man:
alias help=man
Primjer 10.
Želimo li popisati imena svih datoteka tekućeg direktorija poredana silaznim redoslijedom
prema vremenu zadnjeg prepravljanja i tu naredbu zamjeniti aliasom timedir:
Postavljanje aliasa iz komandne linije zadržava taj alias samo za tekuću vezu.
Ako želimo da alias bude aktivan svaki put kada se prijavimo za rad u sustavu,
uključimo definiciju aliasa u datoteku .profile ako koristimo Bourne ili Korn ljusku.
Držimo je u datoteci .login ako koristimo C ljusku.
155/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Naredba echo ispisuje na ekranu ono što slijedi iza riječi eecho, SHELL je varijabla sadržana
u ljusci, koja posjeduje ime tekuće ljuske, a $SHELL je sadržaj te varijable.
UPOZORENJE:
Nikada izravno ne ureñujemo datoteku s lozinkama (/etc/passwd). Zbog sigurnosnih svojstava
datoteka s lozinkama trebala bi se obrañivati samo odgovarajućim naredbama.
156/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
SCRIPT DATOTEKA ljuske je skupina jedne ili više naredbi ljuske unutar datoteke. Za
izvoñenje naredbi, potrebno je utipkati ime datoteke.
Prednosti tog pristupa su slijedeće:
Korištenjem varijabli i ključnih riječi, možemo pisati programe koje ljuska može prevesti. To
je korisno jer nam dopušta stvaranje općenitih script datoteka ljuske kojima se mi ili drugi
možemo koristiti u raznim situacijama.
157/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Primjer 11.
Recimo da želimo vidjeti tko je prijavljen u našem sustavu, izvesti program calendar i da nam
se ispiše trenutačno vrijeme i datum, unijeti ćemo ove tri naredbe:
who
calendar
date
Ako ih sve troje stavimo u datoteku po imenu wcd i učinimo tu datoteku izvršnom, dobijamo
script program ljuske koji mi izvodimo kao bilo koju drugu naredbu. Datoteka wcd mora biti
tekstualna datoteka.
Da bi učinili datoteku wcd izvršnom unosimo naredbu:
chmod +x wcd
Naredba chmod mijenja ili postavlja dozvole za datoteku, a operacija +x čini datoteku
izvršnom.
Smještanje naredbi u datoteku i činenje datoteke izvršnom su radnje koje je potrebno izvesti
samo jednom.
Provjera script datoteke ljuske možemo vidjeti kao i sve korake kroz koje prolazi unošenjem
slijedeće naredbe:
sh –x ime_script_datoteke
Naredba sh –x prikazuje sve korake kroz koje script prolazi i korisna je kada želimo ispraviti
pogreške u script datoteci.
158/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Nareba echo nam može služiti za prikaz informativnih poruka o tome što se dogaña u script
datoteci ljuske. Prikazuje svoje argumente, znači sve što slijedi riječ echo, na ekranu.
Zatvaranje niza znakova u navodnike osigurava prikaz svih znakova. Takoñer moožemo
preusmjeriti rezultate naredbe echo u datoteku.
Primjer 12.
echo «Please stand by ...»
Naredba echo kod korisnika stvara osjećaj da se nešto dogaña kada unosi naredbu (dobra
ideja je ako naredba ne daje nikakav izlaz tokom nekoliko sekundi)
Primjer 13.
Unesimo ovaj kod u datoteku wcd:
159/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
3.3. Komentari
Komentari su napomena nama, ili bilo kome tko čita našu script datoteku.
Ljuska ignorira komentare. Oni su važni korisniku.
Znak # ljusci označava početak komentara. Svaki znak od tog znaka do kraja reda je dio tog
komentara. Komentari ni na koji način ne mjenjaju rezultate izvoñenja script datoteke.
160/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Varijabla je objekt kojem je u bilo kojem trenutku pridružena jedna od mnogih mogućih
vrijednosti.
Kontrolna struktura odreñuje način kojim možemo kontrolirati tok izvoñenja script datoteke.
Postoje dva osnovna tipa kontrolnih struktura:
Korištenje vrijednosti varijable je izravno, ali postoje četiri načina pridjeljivanja vrijednosti
varijabli:
• Izravno pridjeljivanje
• Korištenje naredbi read
• Korištenje parametara komandne linije
• Korištenje izlaza naredbe
161/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
ime_varijable=vrijednost_varijable
Primjer 14.
myemail=marko.pintac@zg.htnet.hr
myoffice= «Kućni 23»
cp current /corporate/info/public/sales
Da bi nam bilo lakše to dugačko ime direktorija pridružimo varijabli pod imenom corpsales;
corpsales=/corporate/info/public/sales
162/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
cp current $corpsales
163/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Primjer 15.
Slijedeća script datoteka ljuske proširuje primjer 14. potraživanjem
od korisnika, odreñivanje imena datoteke koja će se kopirati.
corpsales=/corporate/info/public/sales
echo «Enter name of file to copy» # prikaži korisniku
# prompt znak
read filename # uzmi ime datoteke
cp $filename $corpsales # izvrši operaciju kopiranja
164/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Primjer 16.
# Ime: shovars
# Namjena: Pokazati koristenje parametara komandne linije
echo $0
echo $2 $4!
echo $3
Unesimo naredbu:
shovars –s Bok «pogledaj me» Tom
shovars
Bok Tom!
pogledaj me
U tom izlazu, prvi red je ime naredbe (varijabla $0), drugi red su drugi i četvrti argument
(varijable $2 i $4). Zadnji red je treći argument (varijabla $3).
165/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Primjer 17.
Ova script datoteka ljuske briše datoteku, ali je najprije kopira u direktorij /tmp tako da je
možemo dobiti natrag ako nam ponovno zatreba.
# Ime: safrm
# Namjena: kopiranje datoteke u direktorij /tmp i nakon
toga brisanje iz tekućeg direktorija
# Najprije kopiraj $1 u /tmp
cp $1 /tmp
# Sada obrisi datoteku
rm $1
Ako unesemo safrm abc def, samo će datoteka abc biti obrisana iz tekućeg direktorija zbog
toga što script ljuska safrm briše samo varijablu broj 1. Ukoliko $1 zamjenim sa $* i utipkam:
safrm asc dsa sdf xx fdsf, sve četiri datoteke biti će obrisane iz tekućeg direktorija.
166/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Primjer 18.
Pohrana tekućeg direktorija u varijablu mar:
mar='pwd'
Primjer 19.
# Ime: stamp
# Namjena: Promjena imena datoteke: dodavanje danasnjeg
# datuma imenu datoteke
#Postavi td u tekuci datum u obliku mmddgg
td='+%m%d%y'
#Promjeni ime datoteke
mv $1 $1.$td
Tekući datum je postavljen u varijablu td. U zadnjem redu, ova informacija dodana je
varijabli $1. ako je danas 15.10.2005 i koristimo script datoteku ljuske na datoteci myfile,
datoteka će biti preimenovana u myfile.101505.
167/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Naredba env popisuje varijable dostupne u našem radnom okružju. Bilo koja od posebnih
varijabli može se koristiti na isti način kao i bilo koja druga varijabla ljuske.
168/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
3.4.5.1. Home
Odreñuje naš osnovni direktorij. Pri prijavi u sustav, nalazimo se u osnovnom direktoriju. Za
pomicanje u druge direktorije koristimo naredbu cd. Za povratak cd .. .
Kada pišemo script datoteke ljuske koje koriste datoteke osnovnog direktorija, možemo
koristiti naredbu HOME.
Primjer 20.
Umjesto upisivanja naredbe:
grep $number /usr/wrev/sales/data.01
bolje je upisati:
grep $HOME /sales/data.01
3.4.5.2. Path
Primjer 21.
PATH=/bin:/usr/bin/:.,
Kad ljuska interpretira naredbu, najprije će pogledati u direktorij /bin, ako tamo ne može naći
naredbu, pogledati će u direktorij /usr/bin. Točka predstavlja naš tekući direktorij.
Imena naredbama treba dati takva da se razlikuju od imena naredbi sustava.
169/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Primjer 22.
Stavljanje script datoteke ljuske u jedan direktorij i uključiti taj direktorij u varijablu
PATH.To će omogućiti izvoñenje naših script datoteka iz bilo kojeg direktorija u kojem smo
trenutačno.
1. Stvorimo direktorij koji će sadržavati script datoteke ljuske.
Koristimo naredbu mkdir $HOME/bin za stvaranje podirektorija našeg osnovnog
direktorija.
2. Smjestiti svaku script datoteku u taj podirektorij
(mv ime_dat $HOME/bin).
3. Uključiti podirektorij u varijablu PATH naredbom PATH=$PATH:$HOME/bin.
3.4.5.3. Logname
Izbrisati ćemo sve datoteke iz direktorija /tmp koje mi posjedujemo. Da bi to učinili koristimo
u script datoteci naredbu find. Script datoteka sadrži ovu komandnu liniju:
find /tmp –user $LOGNAME –exec rm {} \;
Prvi parametar, /tmp, je direktorij koji treba pretražiti. Opcija –user govori da želimo
pretražiti sve datoteke koje pripadaju zadanom korisniku. Ljuska nadmoješta $LOGNAME
imenom korisnika koje je tog trenutka odreñeno vrijednošću varijable. Opcija –exec
naznačuje da će sljedeća naredba biti primjenjena na sve datoteke pronañene naredbom find.
170/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
171/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Apostrofe (') možemo koristiti kako bismo učinili da ljuska ignorira posebne znakove.
Primjer 24.
Učinak je da su prikazani redovi datoteke kupac koji počinju s Marko. Znak (^) kaže naredbi
grep da traži od početka reda. Ako navod Marko nije u apostrofima, može biti interpretiran
doslovno. Razmak unutar apostrofa neće se prevesti ako postoji.
Dvostruke navodnike koristili bismo da ljuska ignorira posebne znakove, uz iznimku $ i '.
Koristimo obrnutu kosu crtu da bi ljuska ignorirala pojedinačni znak.
172/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Struktura case je struktura odluke koja nam dopušta odabir jednog od nekoliko smjerova
radnji, ovisno o vrijednosti varijable.
Sintaksa naredbe case:
case rijec in
uzorak) naredba(e);;
uzorak) naredba(e);;
..............
esac
Traži se podudarnost parametra rijec s parametrima uzorak, počevši od onog na vrhu popisa.
Naredbe koje će se izvesti ako je parametar rijec podudaran s parametrom uzorak zaključene
su znakovima ;;.
Kraj case strukture označen je riječju esac (unatrag case).
Znak * na mjestu uzorak koristi se za predstavljanje svih drugih parametara koji nisu
eksplicitno navedeni.
173/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Script datoteke ne posjeduju mogućnosti provjere ima li korisnik dozvolu za kopiranje ili
brisanje datoteka, kao i to radi li korisnik s običnom datotekom ili direktorijem. Naredba test
rješava to pitanje, kao i mnoga druga.
Opcija Značenje
Primjer 23.
Za provjeru imamo li dozvolu čitanja za datoteku abc, koristimo naredbu: test !-r abc
174/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Opcija Značenje
-eq Jednak
-ne Nije jednak
-gt Veći od
hour='date +%H'
if test $hour –lt 12
then
echo «Dobro jutro, $LOGNAME»
else
if test $hour –lt 17
then
echo «Dobar dan, $LOGNAME»
else
echo «Dobro veće, $LOGNAME»
fi
fi
175/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Odreñene posebne varijable imaju od ljuske predodreñene vrijednosti zbog pomoći pri
definiranju okružja naše ljuske. Neke od tih varijabli postavlja ljuska. Možemo promjeniti te
definicije i pridjeliti drugim varijablama vrijednosti ureñivanjem datoteke .profile ako
koristimo Bourne ili Korn ljusku, Ako koristimo C ljusku, postavljamo vrijednosti varijabla
ureñivanjem datoteke .login. Ako koristimo Korn ili C ljusku, možemo koristiti mogućnost
definiranja aliasa naredbi. Kada god koristimo naredbu, pokreće se nova ljuska. Ona
naslijeñuje mnoga svojstva ili veći dio okružja, od postojeće ljuske. Potrebno je napomenuti
dvije stvari o novoj ljusci:
• Nova ljuska radi u našem tekućem direktoriju. Naredba pwd vraća vrijednost
koju je davala prije pokretanja ljuske.
• Nova ljuska prima mnoge varijable od postojeće ljuske. Dva su načina za
osiguravanje prenošenja skupa varijabli postojeće ljuske u novu ljusku.
Primjer 26.
today=Thursday
echo $today
# Ime: whatday
echo «Danas je $today.»
today=Petak
echo «Danas je $today.»
176/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
chmod +x whatday
today=Cetvrtak
whatday
echo $today
Danas je .
Danas je Petak.
Cetvrtak
Vidimo da početna varijabla today nije definirana. ( Danas je .). zatim varijabla today ima
vrijednost Petak u ljusci. Kada script whatday završi, vraćamo se u login ljusku i today ima
svoje početno ime Cetvrtak.
Kako bi se varijabli today pridjelila ista vrijednost koju ima u login ljusci kad script whatday
počne s izvršavanjem, koristimo naredbu export. Ta naredba prenosi ili proslijeñuje, varijable
iz jedne ljuske u slijedeće ljuske:
export today
Sada bilo koja ljuska pokrenuta iz login ljuske nasljeñuje vrijednost varijable today. Dodamo
naredbu export prethodnom nizu naredbi kao što je to:
today=Cetvrtak
export today
whatday
echo $today
Izlaz je:
Danas je Cetvrtak.
Danas he Petak.
Cetvrtak
177/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Prenošenje ili naljeñivanje vrijednosti varijabli ide samo u jednom smjeru: iz aktivne ljuske
prema novoj ljusci, nikad natrag, zbog toga što se mijenjajući tekući direktorij unutar jedne
ljuske, vraćamo tamo gdje smo počeli, kada ta ljuska prestaje biti aktivna.
Možemo prenjeti bilo koju varijablu iz jedne ljuske prema drugim ljuskama korištenjem
slijedeće sintakse:
export ime_varijable
Kada mijenjamo vrijednoisti ili postavljamo varijable u datoteci .profile, osiguravamo njihovo
prenošenje(npr. želimo li da varijabla PATH bude: PATH=/bin:/usr/bin:/usr/local/bin:.,
upišemo to u datoteku .profile iza čega mora slijediti; export PATH).
Za promjenu prompta ljuske, moramo postaviti vrijednost PS1 u datoteci .profile. (npr. za
promjenu prompta $ u OK $, unesemo ii datoteku .profile ovaj program:
PS1= «OK $»
export PS1
Promjena u datoteci .profile ili .login ne djeluju dok se ne odjavimo i ponovno prijavimo
za za rad u sustavu.
178/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Ako je naša login ljuska Korn ili C, možemo definirati aliase naredbi. Oni su korisni:
• za definiranje naredbi koje često koristimo, ali za koje ne želimo brinuti oko
pamčenja detalja.
• Ojačavanja našeg radnog okružja skupom korisnih alata.
Za izbjegavanja utipkavanja aliasa naredbi svaki put kada se prijavljujemo za rad u sustavu,
postavimo ih u datoteku .login, ako koristimo C ljusku, ili .kshrc ako koristimo Korn ljusku.
Zatim u datoteci .profile dodajmo red ENV=.kshrc;export ENV. Tada će nam aliasi biti
dostupni svaki put kada smo u login ljusci.
179/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
5.1. Višezadaćnost
Posao UNIX-a je stvaranje privida da kada netko postavi zahtjev, dobiva nepodijeljenu pažnju
sustava. UNIX nadgleda popis (rep) zadataka koji čekaju izvršavanje. Ti zadaci mogu
uključivati korisničke poslove, zadatke operativnog sustava, poštu i poslove u pozadini.
UNIX rasporeñuje odsječke vremena sustava za izvršavanje svakog zadatka. Duljina
vremenskog odsječka potrebnog za svaki zadatak može ovisiti o relativnom prioritetu svakog
zadatka.
UNIX radi na jednom zadatku iz repa neko vrijeme, zatim ga stavlja na stranu da bi počeo
izvršavati drugi, itd. Potom se vraća na prvi zadatak i radi na njemu ponovno. UNIX nastavla
taj ciklus dok ne završi zadatak i izvadi ga iz repa ili dok izvršavanje zadatka nije prekinuto.
U takvoj organizaciji, koja se naziva razdioba vremena (Time Sharing), resursi sustava
dijele se meñu svim zadacima. UNIX koristi razdiobe vremena da bi uskladio naše izravne
naredbe s onima koje se izvršavaju u pozadini.
UNIX ima primarnu odgovornost za detalje rada s više korisnika i više zadataka. Neke
naredbe UNIX-a omogučuju nam odreñivanje kada ćemo pokrenuti posao ili proces. Imamo
mogućnost praćenja naših procesa kao i drugih procesa koji se trenutačno izvršavaju. U nekim
slučajevima možemo promjeniti relativne prioritete poslova i uvijek možemo prekinuti naše
procese.
180/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Naredba Akcija
At Pokreće izvršavanje naredbe u zadano vrijeme
Operativni sustav dodijeljuje informacije procesu kako bi ga sustav mogao pratiti i njime
upravljati.
Proces je program koji se izvršava, ali razlikuje se od programa, on je više, jer program je
samo skup instrukcija. Proces je dinamičan jer koristi resurse aktivnog sustava. Pojedini
UNIX program može pokrenuti nekoliko procesa.
UNIX identificira procese dodjeljivanjem identifikacijskog broja (PID) i pomoću njega ih
prati.
181/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Proces možemo pokrenuti u pozadini tako da nakon naredbe koja će pokrenuti proces stavimo
znak &.
Primjer 27.
Napomena:
Ako koristimo Korn ljusku, id broja posla (engl. job ID) pojavljuje se u zagradama zajedno s
id brojem procesa kad stavimo naredbu u pozadinu. Iako je id broj pridružen procesima u
cijelom sustavu, id broja posla pridružen je samo procesima koji se izvršavaju u trenutačno
aktivnoj ljusci. Izlaz naredbe u pozadini može izgledati ovako za ovaj primjer:
[1] 3146
Pozivamo se na id broj posla korištenjem postotka (%). Za zaustavljanje aktivnog procesa iz
ovog primjera, utipkamo:
kill –9 %1
ili
kill –9 3146
Naša tekuća ljuska je proces roditelj (parent process), a aktivni proces je proces dijete (child
process). Obično proces roditelj čeka završetak jednog ili više njegovih procesa dijece prije
nastavka izvoñenja. Ako želimo da proces roditelj nastavi s radom bez čekanja na završetak
rada procesa djeteteta, moramo dodati znak & na kraju naredbe koja raña proces dijeteta.
182/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Pokretanje višestrukih procesa je moguće i korištenjem jednog ili više kanala u komandnoj
liniji.
Primjer 28.
Ispis na pisaču dugačkog popisa 10 najsviježije izmjenjenih datoteka u našem tekućem
direktoriju.
ls –lt | head | lp
Ta naredba pokreće istodobno tri procesa, i svi su djeca tekuće ljuske. Kanal radi ovako:
naredbe s obje strane okomite crte počinju istodobno. Nijedna nije dijete druge. Obje su djeca
procesa koji se izvršavao kada su stvorene.
183/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Naredbu at koristimo za odreñivanje vremena izvoñenja naredbi. Njome možemo odrediti sat,
datum, ili oboje. Naredba zahtjeva dva ili više argumenta. Moramo zadati barem trenutak u
kojem želimo izvesti naredbu ili više naredbi, i naredbe koje želimo izvesti.
Sažetak naredbi at
Format Akcija
184/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Primjer 29.
Posao ispisuje na pisač sve datoteke direktorija /usr/sales/reports i korisniku imena boss šalje
poštu kojom ga obavještava da je posao izvšen u 1:23 ujutro.
at 1:23 <Return>
lp /usr/sales/reports/* <Return>
echo «Files printed, Bos!» | mailx –s «Job done» boss <Return>
<^D>
Simbol ^Dznači da je <CTRL-d> pritisnut za zaustavljanje procesa. Naredbe koje trebaju biti
rasporeñene naredbom at unose se kao popis naredbi u redu koji slijedi naredbu at. Popis
naredbi zaključen je s <CTRL-d>
Taj odziv naznačuje da će posao biti izveden u 1:23 kao što je i zadano. Broj posla,
756603300.a identificira posao. Ako želimo opozvati posao, činimo to korištenjem broja
pridruženog poslu.
185/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
186/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
187/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Narebu crontab koristimo za ugrañivanje popisa naredbi koje će se redovito izvršavati prema
utvrñenom rasporedu. Naredbe su rasporeñene za izvršavanje u zadanom vremenu. Popis
naredbi koje će se izvršavati prema zadanom rasporedu mora biti uključen u datoteku crontab,
koja je u sustavu ugrañena uz naredbu crontab. Naredba crontab omogućuje nam i gledanje
popisa naredbi uključenih u datoteku i opoziv popisa ukoliko to želimo.
Naredba crontab brine se o smještaju datoteke crontab. Svaki korisnik ima samo jednu
crontab datoteku, stvorenu primjenom naredbe crontab smještenu u direktoriju
/usr/spool/cron/crontabs. Ta datoteka smještena je u direktoriju iz kojeg naredba cron čita.
Ona dobiva ime korisnika. Ako želimo stvoriti datoteku pod imenom mycron, ugrañujemo je
utipkavanjem naredbe: crontab mycron, stvroiti će se datoteka
/usr/spool/cron/crontabs/user_name. (U ovom primjeru datoteka user_name je stvorena, ili
prekrivena sadržajem datoteke mycron, koji može sadržavati navode koji puštaju u pogon
jednu ili više naredbi.)
Da bi korisnik mogao koristiti naredbu crontab, mora biti naveden u popisu u datoteci
/etc/cron.d/cron.allow. Kada uključujemo korisnika u UnixWare pomoću ikone User Setup, on
je u toj datoteci automatski pridodan. Ako uključujemo korisnika iz komandne linije
(naredbom useradd), on se ne pridodaje automatskiu. Kao administrator sustava moramo
uključiti novog korisnika u datototeci cron.allow pomoću tekst editora.
Svaki red u datoteci crontab sadrži vremenski uzorak i naredbu. Naredba je izvršena u zadano
vrijeme. Vremenski uzorak podjeljen je u pet polja odijeljenih praznim mjestima ili
tabulatorima. Bilo koji izlaz koji se obično pojavljuje na ekranu (informacija koja nije
preusmjerena prema stdout ili stderr) poštom je poslana korisniku.
188/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Tablica 7.: Opcije naredbi crontab za popunu polja koja odreñuju vrijeme izvoñenja
Primjer 30.
Da bi smo svakog ponedjeljka u 7:30 sortirali datoteku /usr/wwr/sales/weekly i izlaz poslali
poštom korisniku imena jura koristimo slijedeći unos u datoteci:
Ove naredbe postavljaju minute u 30, sate u 07, dane u bilo koji dan u mjesecu (*), mjesece u
bilo koji mjesec u godini (*), i dane u tjednu u 01.
Polje za naredbe može sadržavati znak za kanal ili bilo što drugo što se može unijeti iz
komandne linije.
Primjer 30.
Da bi smo dobili informaciju koje daje neki program, nazovimo ga stanje_na_burzi u 9:00,
11:00, 14:00 i 16:00 u ponedjeljak, utorak, i četvrtak svakog tjedna, i posebno desteog ožujka
i rujna, koristimo slijedeći unos:
Stavimo naše naredbe u datoteku pod imenom cronposao. Iskoristimo crontab za smještaj
datoteke gdje će je cron moći pronaći, tako da unesemo naredbu:
crontab cronposao
189/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Svaki put kada tako koristimo crontab, bilo koja crontab datoteka koju smo ranije pustili u rad
biti će prekrivena novim sadržajem.
U svim slučajevima crontab radi s crontab datotekom koja ima naše korisničko ime.
190/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Svrha naredbe who je utvrñivanje tko je prijavljen za rad u sustavu. Ona popisuje imena
kojima se korisnici prijavljuju za rad u sustavu, linije terminala i vrijeme prijave korisnika u
sustavu.
191/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Polje Objašnjenje
192/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Primjer 31.
Želimo li sortirati datoteku sales.dat, pohraniti kopiju sortirane datoteke u datoteku sales.srt, i
poslati poštom sortiranu datoteku korisnici sarah, i želimo da se taj posao obavlja u pozadini
unijet ćemo:
sort sales.dat | tee sales.srt | mailx –s «Sorted Sales Data» sarah &
193/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
Naredba ps daje samo približnu sliku statusa procesa jer se stvari tijekom izvoñenja naredbe
mogu promjeniti, kao što se i mijenjaju. Naredba ps daje trenutačnu sliku statusa procesa u
trenutku izvoñenja same naredbe ps. Ta slika uključuje i naredbu ps.
194/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
UNIX nam pruža mogućnost izvršavanja nekoliko procesa istodobno. Takoñer, omogućuje
korisniku ili administratoru sustava kontroliranje izvršavanja procesa. Prednost takve kontrole
vidi se kada trebamo:
• Definirati proces koji nastavlja s izvoñenjem, nakon kraja izvoñenja njegovog
roditelja (naredba nohup)
• Rasporediti procese s prioritetom različitim od prioriteta drugih procesa (naredba nice)
• Zaustaviti ili prekinuti proces (naredba kill)
195/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line
6. ZAKLJUČAK
Seminar opisuje razumjevanje rada UNIX ljuske i rada u UNIX komandnoj liniji. Unutar
njega sam naveo mnogo opisanih primjera i mislim da je lako koristiv kao priručnik za rad s
unix komandnom linijom. Kao literaturu sam koristio internet i knjigu od Que Development
Group:„Using UNIX, Special edition“.
196/2583
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
197/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash
UVOD
echo $SHELL
198/2583
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.
199/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash
200/2583
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).
201/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash
202/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash
203/2583
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
204/2583
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
205/2583
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 .
206/2583
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»)
207/2583
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
208/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash
chsh /bin/bash
209/2583
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]
210/2583
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
211/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash
ispisuje
212/2583
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
213/2583
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
214/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash
Primjer:
215/2583
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.
216/2583
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
217/2583
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:
218/2583
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
219/2583
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.
220/2583
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
221/2583
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
222/2583
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.
223/2583
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
224/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash
225/2583
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»).
226/2583
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
227/2583
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
228/2583
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.
229/2583
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
230/2583
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)
;;
231/2583
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
232/2583
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
233/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash
234/2583
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
235/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje
Marko Vuković
236/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje
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.
237/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje
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.
Npr.:
chmod 555 scriptname (omogućava čitanje i izvršavanje)
ili:
238/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje
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.
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.
239/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje
a=879
echo "vrijednost varijable \"a\" je $a."
240/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje
#!/bin/bash
a=375
hello=$a
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
echo
echo
exit 0
241/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje
Globalne varijable: imaju utjecaj na ponašanje shell-a ili korisničkog sučelja. Generalno,
svaki proces ima svoje okružje, a to je grupa varijabli koje sadrže informaciju na koju se
stanoviti proces odnosi. Sa ovog stajališta shell se ponaša kao bilo koji drugi proces. Svaki
put kad se pokrene shell iznova, on stvara shell varijable koje komuniciraju sa svojim
globalnim varijablama. Svako novo dodavanje ili mijenjanje globalnih varijabli uzrokuje da
shell nanovo postavi svoje okružje i svaki od tzv. "dijete"-procesa biva pod utjecajem takovog
novog okružja. Prostor koji mogu zauzimati varijable je ograničen. Upisivanje prevelikog
broja globalnih varijabla ili onih koje koriste previše memorijskih mjesta može prouzročiti
probleme. Ako se u script kôdu definiraju globalne varijable, one trebaju biti prijavljene u
lokalno okruženje script kôda. To je funkcija naredbe export. Ona se odnosi samo na "dijete"-
procese, dakle na recesivne procese.
Pozicijski parametri: argumenti dodani kôdu iz komandne linije: $0, $1, $2, $3... $0 je ime
kôda, $1 ime prvog argumenta, $2 ime drugog, itd. Poslije devetog, argumenti moraju biti
označeni sa vitičastim zagradama: ${10}, ${11}, ${12}. Posebne varijable $* i $@ isključuju
sve pozicijske parametre.
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.
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.
5. 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.
242/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje
Uvjetna konstrukcija if/then ispituje da li je izlazni status naredbe jednak nuli (budući
da "0" znači uspješno izvršenu naredbu prema pravilima UNIX-a), i ako jest, prealzi u
izvršavanje jedne ili više zadanih naredbi.
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).
6. Petlje i grananje
6.1. 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.
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.
243/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje
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.
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.
244/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje
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.
8. Aritmetičko proširivanje
Aritmetičko proširivanje pruža jednostavan i izravan način obrade aritmetičkih
podataka u kôdu. Prevoñenje znakovnog niza u brojevnu vrijednost je prilično izravno, i
koristi se u kombinaciji sa jednostrukim navodnicima (`...`), dvostrukim zagradama ( ((...)) ),
ili naredbom let. Navest ćemo par primjera aritmetičkog proširivanja u nastavku.
245/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje
z=$(($z+3))
z=$((z+3))
n=0
echo "n = $n" #n=0
9. I/O preusmjeravanje
Uvijek postoje tri osnovne "datoteke" koje su otvorene: stdin (predstavlja tipkovnicu),
stdout (predstavlja ekran) i stderr (predstavlja izlaz za javljanje greške, takoñer ekran). Te, i
mnoge druge otvorene datoteke, mogu biti preusmjerene. Preusmjeravanje obično znači slanje
izlaznog stanja (odreñene datoteke, linije, programa ili čak dijela kôda unutar script-a) prema
ulazu druge datoteke, linije, programa,...
246/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje
Programski odsječci, poput onih sa while, until i for petljama, pa čak i sa if/then
naredbama takoñer mogu sudjelovati u preusmjerivanju ulaza stdin. U nekim slučajevima se
čak i funkcije koriste u tu svrhu. Operator < na kraju bloka kôda osigurava da se provede
redirekcija.
Preusmjeravanje odsječka datoteke stdout ima za posljedicu upisivanje tog istog bloka
u zadanu datoteku. Pametna uporaba I/O preusmjerivanja omogućava komadanje i spajanje
snopova kôda komandnog izlaza, što dalje dovodi do stvaranja reportnih i log datoteka.
247/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje
Ovdje se za preusmjeravanje I/O podataka u podzadatak koristi tzv. pipe operator, tj.
"|".
12. Zaključak
Shell programiranje je principijelno jednostavan način pisanja programa, temeljen na
najjednostavnijim principima programiranja. Podržava klasične UNIX programe, koristi
interne naredbe kako bi se poboljšala efikasnost izvoñenja istih, i slijedi najjednostavniji
princip rada s varijablama. Naravno da kod svakog programskog jezika uočavamo mane, pa
tako je i s ovim.
248/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje
Ako sve zbrojimo i oduzmemo dobili smo razmjerno jednostavan programski jezik,
kompatibilan s jezicima nove generacije, isto kao i raznim shell programskim standardima,
zanimljiv i pristupačan svakom. Takve specifikacije ga i čine danas jednim od najpopularnijih
programskih jezika.
249/2583
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
250/2583
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.
251/2583
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
252/2583
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.
253/2583
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.
254/2583
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.
255/2583
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
256/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C Shell, T C Shell
257/2583
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>
258/2583
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.
259/2583
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.
260/2583
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.
261/2583
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
262/2583
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
263/2583
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
264/2583
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.
265/2583
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.
266/2583
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
267/2583
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
268/2583
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
269/2583
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]
270/2583
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]
271/2583
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
272/2583
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
273/2583
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.)
274/2583
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
275/2583
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.
276/2583
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)
277/2583
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
278/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)
#!/bin/bash
279/2583
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
280/2583
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
281/2583
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
}
282/2583
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”
283/2583
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.
284/2583
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
285/2583
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
286/2583
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
287/2583
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
288/2583
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
289/2583
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
290/2583
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
291/2583
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”
292/2583
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.
293/2583
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
;;
294/2583
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
295/2583
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
296/2583
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
297/2583
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.
298/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
Manuel Vidonis
Zoran Zoričić
REGEX
299/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
300/2583
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.
301/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
MODEL NEURONA:
302/2583
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
303/2583
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.
304/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
305/2583
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.
306/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
. ^ $ * + ? { }[ ] \ | ( )
307/2583
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".
308/2583
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
309/2583
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:
310/2583
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:
311/2583
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:
312/2583
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:
313/2583
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:
314/2583
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:
315/2583
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:
316/2583
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
317/2583
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:
318/2583
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
319/2583
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".
320/2583
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
*/
321/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
PRIMJER:
PRIMJER:
Telefonski brojevi:
322/2583
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:~>
323/2583
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
324/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
325/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
326/2583
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
327/2583
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}
*/
328/2583
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
329/2583
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
330/2583
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
PIN(labosi)
331/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx
DV.F111
zo@linux:~> ex txt
13:15-14:50
PIN(labosi)
DV.F111
332/2583
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.
333/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
Ida Golubić
Dragutin Markulin
334/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
1. UVOD
Kako su sve konfiguracijske datoteke UNIX i Linux sistema tekstualne (na
primjer/etc/passwd), administrator UNIX, odnosno Linux sistema treba poznavati alate za rad
sa tekstualnim datotekama. U nastavku teksta opisane su naredbe za rad sa tekstualnim
datotekama.
Pri korištenju OS Unix potrebno je stvarati nove i ureñivati postojeće datoteke. Mogućnosti
koje nude negrafički urednici teksta u većini zadovoljavaju potrebe Unix korisnika.
Za stvaranje i pregledavanje kraćih datoteka korisnik može koristiti i nekoliko naredbi
sistema. Tu se ubrajaju naredbe cat i more koje se opisuju u slijedećem poglavlju.
Sadržaj tekstualne datoteke najlakše se može pregledati pomoću naredbi cat, more i less. U
zavisnosti od veličine datoteke korisnik će odrediti koji će program koristiti - ukoliko je
datoteka kraća i može se prikazati na jednom ekranu, može se koristiti cat. U suprotnom,
koristi se program less koji prikazuje datoteku sa pauzom nakon svakog punog ekrana.
2.1. cat
Naredba cat služi za povezivanje datoteka i njihovo prikazivanje na standardnom izlazu
(najčešće na ekranu). Ime je dobila na osnovu funkcije koju obavlja - Concatenate and
Append to the Terminal. Sintaksa komande cat je :
$ cat [-s] filename
U ovom obliku naredba cat prikazuje sadržaj datoteke filename na ekranu, bez
zaustavljanja nakon svakog punog ekrana. Korisna opcija programa cat je -s (squeeze blank
lines), kojom se iz prikazanog teksta izbacuje višak praznog prostora, odnosno nikad se ne
prikazuje više od jedne prazne linije.
Sljedeći primjeri pokazuju prikazivanje sadržaja datoteke /etc/resolv.conf i konkatenacije
datoteka /etc/resolv.conf i /etc/networks na ekranu, respektivno:
$ cat /etc/resolv.conf
search internal.vets.edu.yu
nameserver 172.16.32.1
$ cat /etc/resolv.conf /etc/networks
search internal.vets.edu.yu
nameserver 172.16.32.1
localnet 172.16.0.0
2.2. more
Naredba more se koristi za prikazivanje sadržaja datoteke ekran po ekran. U praksi se
najčešće koristi naprednija varijanta (program less), tako da se naredba more navodi iz
povjesnih razloga.
Sintaksa naredbe more je :
$ more filename
Nakon zadavanja naredbe more prikazuje prvi ekran sadržaja datoteke, nakon čega se
koriste tipke <Space> za prikazivanje slijedećeg punog ekrana, <Enter> za prikazivanje
slijedeće linije teksta i q ili Q za napuštanje programa.
335/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
2.3. less
Ova naredba je slična naredbi more, s tim što dozvoljava dvosmjernu navigaciju po datoteci
(unaprijed i unazad). Naredba less ne mora pročitati cijelu datoteku prije nego što prikaže
prvi ekran sadržaja datoteke, tako da u odnosu na editor vi radi brže sa velikim datotekama.
Less koristi datoteku termcap (terminfo na nekim sistemima), tako da se može koristiti na
različitim terminalima.
Sintaksa naredbe less je:
$ less [-[+]ENsS] [-ologfile] filename
Argument filename je ime datoteke čiji sadržaj treba prikazati na ekranu, a značajnije opcije
imaju slijedeće značenje:
-E napušta program kada se doñe do kraja datoteke (EOF - end of file). Ukoliko
se ova opcija ne navede, less se može napustiti interaktivnom naredbom q
(quit) ili slanjem signala za prekidanje izvršenja procesa kombinacijom tipki
<Ctrl-C>;
-N ispisuje redni broj linije na početku svake linije na ekranu;
-s iz prikazanog teksta se izbacuje višak praznog prostora, odnosno nikad se ne
prikazuje više od jedne prazne linije;
-S duge linije se sijeku i onaj dio koji se ne može prikazati prenosi se u novu
liniju na ekranu (wrap text);
-ologfile ukoliko se navede opcija -o, ulazna datoteka se kopira u datoteku logfile.
Ova opcija se može navesti ukoliko je ulazna datoteka pipe.
Naredba less ima veliki skup dodatnih opcija koje radi jednostavnosti opisa naredbe ovdje
nisu navedene. Korisnik koji ne želi stalno navoditi iste parametre, može definirati
promjenjivu okruženja LESS i u njoj pobrojati parametre koji će se proslijeñivati naredbi
less prilikom svakog izvršavanja.
$ export LESS="-options"
Karakteristike terminala koje su neophodne za rad sa ekranom, program less čita iz
promjenjive TERM.
Nakon pokretanja programa less prikazuje prvi ekran sadržaja datoteke, a zatim se koriste
interaktivne komande za navigaciju po sadržaju datoteke i napuštanje programa:
h ili H prikazuje pomoć pri korištenju interaktivnih naredbi
<Space> prikazuje slijedeći ekran sadržaja datoteke
b prikazuje prethodni ekran sadržaja datoteke
<DOWN> prikazuje slijedeću liniju teksta
<UP> prikazuje prethodnu liniju teksta
<RIGHT> horizontalno pomicanje ekrana udesno (ukoliko se ne koristi word wrap)
<LEFT> horizontalno pomicanje ekrana ulijevo (ukoliko se ne koristi word wrap)
F nastoji pratiti kraj datoteke. Opcija je korisna ukoliko se na ekranu prati
sadržaj datoteke u koju neki drugi proces istovremeno upisuje podatke.
(slično naredbi tail - f, koja je opisana u ovom poglavlju).
336/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
337/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
4.1. Naredba wc (word count) se koristi za brojanje znakova, riječi i linija u datoteci.
Opcioni argumenti skip1 i skip2 su ofset u bajtovima od početka datoteka file1 i file2,
338/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
odnosno redni brojevi znakova od kojih se počinje vršiti usporeñivanje. Ofset se navodi kao
decimalni broj.
Naredba cmp vraća slijedeće vrijednosti kao izlazni status:
0 datoteke su identične,
1 datoteke se razlikuju (ovaj slućaj uključuje mogučnost da je jedna datoteka
identična početku druge datoteke),
>1 pojavila se greška.
Izlazni status naredbe cmp je od značaja za shell programiranje. Slijedeći primjer ilustrira
upotrebu naredbe cmp:
$ cmp dat1 dat2
dat1 dat2 differ: char 653, line 18
$ cmp dat1 dat3
cmp: EOF on dat3
$ cmp dat1 dat4
339/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
-a Tretira sve datoteke kao tekstualne i usporeñuje ih liniju po liniju, iako nisu
tekstualne.
-d Mijenja algoritam da možda neñe manji skup promjena. Ovo čini sdiff sporijim,
ponekad puno sporijim.
-H Koristi heuristiku da ubrza rukovanje velikih datoteka koje imaju brojne raštrkane
male promjene.
--ignore-matching-lines=regexp
Ignorira promjene koje umeću ili brišu linije koje se slažu s regexp.
--ignore-space-change
Ignorira promjene u whitespace-u.
-l
--left-column
Ispisuje samo lijevi stupac zajedničkih linija.
--minimal
Mijenja algoritam da možda neñe manji skup promjena. Ovo čini sdiff sporijim,
ponekad puno sporijim.
-o file
--output=file
Stavlja udružene izlazne podatke u datoteku. Ova opcija je potrebna z audruživanje.
-s
--suppress-common-lines
340/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
--speed-large-files
Koristi heuristiku da ubrza rukovanje velikih datoteka koje imaju brojne raštrkane
male promjene.
--text
Tretira sve datoteke kao tekstualne i usporeñuje ih liniju po liniju, iako nisu
tekstualne.
-v
--version
Pokazuje broj inačice sdiff-a.
-w columns
--width=columns
Koristi izlaznu širinu stupca.
-W
Ignorira sav whitespace (odnosno tab znakove i razmaknice). Ova opcija je -w u
diff-u.
341/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
7.1. Naredba pr
Naredba pr priprema tekstualne datoteke za ispis. Priprema obuhvaća: podjelu datoteke na
stranice, numeranje stranica i navoñenje datuma i imena datoteke u zaglavlju.
Slijedeći primjer ilustrira funkcioniranje naredbe pr. Pretpostavljamo da hoćemo ispisati
datoteku /etc/passwd radi analize. Zadajemo sljedeću naredbu:
$ pr /etc/passwd > /tmp/fpasswd
Datoteka /tmp/fpasswd je pripremljena za ispisi može se ispisati naredbom lpr ili
preusmjeravanjem izlaza na štampač (cat /tmp/fpasswd > /dev/lp0). U nastavku teksta dat je
isječak sadržaja datoteke /tmp/fpasswd:
2004-05-04 17:38 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
342/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
...
...
jsmith:x:1029:1029::/home/jsmith:/bin/bash
jknoxville:x:1030:1030::/home/jknoxville:/bin/bash
cpontius:x:1031:1031::/home/cpontius:/bin/bash
Svaka tekstualna datoteka se naredbom split može podijeliti na nekoliko manjih datoteka.
343/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
$ cat mypieceab
I am a genius.
A pure genius.
-f, --prefix=PREFIX
Koristi PREFIX umjesto `xx'
-k, --keep-files
Ne uklanja izlazne datoteke na greškama
-n, --digits=DIGITS
Koristi označene brojeve znamenka umjesto 2.
-z, --elide-empty-files
Uklanja prazne izlazne datoteke.
--help
Prikazuje pomoć i izlaz.
--version
Izlazna verzija informacije i izlaz.
First Line
Second Line
Third Line
Jedan od mogućih načina kojim se može utvrditi da li odreñeni korisnik ima nalog na
344/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
Naredba grep pronalazi string u linijama teksta čak i kad je dio neke druge riječi. Na
primjer, riječ dent se može naći u riječi dental, president, residential i sličnim, tako da grep
na ekranu ispisuje sve linije koje sadrže te riječi.
Korištenjem kompliciranijih oblika regularnih izraza naredba grep može na ekranu prikazati
sve linije koje na primjer sadrže:
- riječ Linux,
- riječi Linux ili LINUX (regularni izraz se formira kao znak U iza koga slijede znakovi
i ili I, zatim n ili N, u ili U i na kraju x ili X),
- bilo koje četiri cifre.
345/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
Regularni izrazi se djele na osnovne (limited) i proširene (extended, full). Osnovni regularni
izrazi su podskup skupa proširenih regularnih izraza.
Primjer ilustrira traženje stringa "only" u datoteci myfile. U ovom slučaju, regularni izraz je
jednostavan niz znakova.
$ grep only myfile
includes only letters. For example, the would match only
Riječ only se pojavljuje samo u jednoj liniji, i ta linija je prikazana na ekranu kao rezultat
izvršenja naredbe grep.
Specijalni znakovi
Odreñeni znakovi imaju specijalno značenje bez obzira na mjesto pojavljivanja u
regularnim izrazima, dok drugi dobijaju specijalno značenje zavisno od mjesta na kome se
nalaze i drugih znakova koji se nalaze prije ili poslije njih.
Znakovi točka (.), zvijezdica, uglate zagrade i backslash (\) smatraju se specijalnim osim
kada se nalaze izmeñu para uglatih zagrada.
Znak carret (^) je specijalan ukoliko je prvi znak u regularnom izrazu ili prvi znak nakon
otvaranja lijeve uglate zagrade.
Znak za dolar ($) je specijalan ukoliko je posljednji znak u regularnom izrazu . Znakovi za
razdvajanje (par slash karaktera //) su specijalni jer razdvajaju regularni izraz. Specijalni
znak kome prethodi backslash smatra se običnim znakom (ecaping).
346/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
Takoñer, može se definirati opseg, odnosno skup znakova koje grep interpretira kao znak r
koji mijenjamo. Na primjer, uzorak [abc12] mijenja bilo koji od znakova, b, c, 1 ili 2.
$ grep 'w[fhmkz]' myfile
Ukoliko je prvi znak u uglatoj zagradi carret, to zna i da grep može interpretirati točku kao
bilo koji znak koji se ne nalazi u navedenom skupu:
$ grep 'w[^fhmkz]' myfile
Opseg se formulira pomoću znaka minus, koji se nalazi izmeñu dva znaka u okviru uglatih
zagrada. Pri tome, ne može se zadati inverzan opseg zamjene, ali se mogu navesti više
opsega u okviru istih zagrada. Na primjer, uzorak [a-zA-Z] odgovara svim velikim i malim
slovima.
$ grep 'w[a-f]' myfile
Ponavljanje znakova
Regularnim izrazom oblika znak \{nmin,nmax\} može se specificirati koliko se puta znak
treba ponoviti. Na primjer, uzorak X\{2,5\} zna i najmanje dva i najviše pet uzastopnih
pojavljivanja znaka X (odnosno XX, XXX, XXXX ili XXXXX). Uzorak X\{2,\} zna i
najmanje dva pojavljivanja znaka X (odnosno XX, XXX, ...., XXX...XXX). Uzorak
X\{4\} znači točno četiri uzastopna pojavljivanja karaktera X
(odnosno XXXX). Slijedi primjer ovog oblika izraza:
$ grep 'p\{2,4\}' myfile
347/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
- traženje linija koje sadrže niz UNIX ili Linux u datotekama file1 i file2:
$ egrep 'UNIX|Linux' file1 file2
- traženje svih linija koje sadrže riječi cat ili cut u datoteci myfile
$ egrep 'c(a|u)t' myfile
348/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
11.1. Naredba tr
-(transform) služi za transformaciju znakova. Naredba kopira stdin na stdout, ali pri tom niz
znakova koji je prvi argument, transformira u niz znakova koji je drugi argument. Zanimljivo
je da ova naredba radi isključivo sa stdin-om, dakle ne prima datoteku kao ulazni parametar.
Sintaksa naredbe;
Primjeri:
349/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
Sintaksa naredbe;
primjer:
- pri ispisu tekstualnih datoteka broj kolona na stranici (podrazumijevana vrijednost je 1)
$ lp -o columns=2 filename
$ lp -o columns=3 filename
-spaja redove iz jedne ili više datoteka u jedan, svi prvi redovi u prvi, drugi
redovi u drugi red ...
Sintaksa naredbe;
primjer:
350/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
- koristi se za izdvajanje dijelova linija iz teksta. Možemo tako iz neke datoteke uzeti samo
neka od polja koja su meñusobno odvojena danim separatorom (opcije –d, -f). Može se,
meñutim koristiti i tako da se iz linija izdvoje samo neke kolone (opcija –c).
Sintaksa naredbe;
-pri čemu je list lista polja koju želimo izdvojiti (u drugom slučaju).
cut -d<separator> -f<lista polja> <lista fajlova - Ispisuje polja koja mu navedemo u listi polja
koja su odvojena zarezom, a separator polja je i mora se navesti pod navodnicima ukoliko
sadrži neke rezervirane znakove.
who am i | cut -d" " -f1 | cut -d! -f2 - Ispisuje samo username.
cat /etc/passwd | grep | cut -d: -f5 - Ispisuje ime i prezime osobe čiji je username .
grep /etc/passwd | cut -d: -f6 | cut -d/ -f1 - Ispisuje se prazan string jer smo stavili da je drugi
separator slash (/).
primjer:
$ cut –f11,5 –d: /etc/passwd -omogućuje da vidimo sva dozvoljena korisnička imena na
sistemu i njihove ID-ove
Sintaksa naredbe;
-i, --initial
Zamijenjuje TAB-ove poslije whitespace-a.
-t, --tabs=NUMBER
Odvaja tab NUMBER znakove posebno, ne 8.
-t, --tabs=LIST
351/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
--help
Prikazuje pomoć i izlaz
--version
Daje informacije o verziji i izlaz.
Sintaksa naredbe;
primjer:
11.7. Naredba join -na izlazu omogućuje spajanje dvije tablice specificirane sa datotekama
file1 i file2
Sintaksa naredbe;
join [-a filenumber | -v filenumber ] [ -1 fieldnumber ] [ -2 fieldnumber ] [ -o list ] [ -e string
] [ -t char ] file1 file2
join [ -a filenumber ] [ -j fieldnumber ] [-j1 fieldnumber ] [ -j2 fieldnumber ] [ -o list ] [-e
string ] [ -t char ] file1 file2
-a filenumber
Pored normalnog izlaza, navodi liniju za svaku neparnu liniju broja datoteke, gdje je broj
datoteke 1 ili 2. Ako su obje -a 1 i -a 2 navedene, sve neparne linije biti će izlazne.
-v filenumber
Umjesto defaultnog (predviñenog) izlaza, navodi liniju samo za svaku neparnu liniju u
broju datoteke, gdje je broj datoteke 1 ili 2. Ako su obje -v 1 i -v 2 navedene, sve neparne
linije biti će izlazne.
-l fieldnumber
Pridružuje brojeve polja datoteci 1. Polja su decimalni pozitivni brojevi počevši sa 1.
-2 fieldnumber
Pridružuje brojeve polja datoteci 2. Polja su decimalni pozitivni brojevi počevši sa 1.
-j fieldnumber
Jednako kao -1fieldnumber -2fieldnumber.
-j1 fieldnumber
352/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
-j2 fieldnumber
Jednako kao -2fieldnumber.Polja su numerirana počevši sa 1.
-o list
Svaka izlazna linija uključuje polja označena u listi. Polja selektirana listom koja se ne
pojavljuju na ulazu biti će tretirana kao prazno izlazno polje. (Vidi opciju -e). Zajedničko
polje se ne ispisuje osim ako se to posebno ne zahtijeva.
-e string
Zamijenjuje prazno izlazno polje sa stringom.
Sintaksa naredbe;
Primjer:
11.9. Naredba tee -kopira sadržaj stdin-a istovremeno u stdout i u datoteke koje su
navedene kao parametri te se najčešće koristi za dupliciranje izraza
Sintaksa naredbe;
353/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
–primjer:
#
# ss2: upotreba komande read
#
echo "Unesite podatak:"
read var1
echo "Uneli ste: $var1"
- upotreba ove naredbe ilustrirana je programom ss2 koji čita ulazni podatak sa tastature u
promjenjivu var1, a zatim ga ispisuje na ekran.
-razlomi linije
Sintaksa naredbe;
-s -ako segment linije ima prazan znak lomi liniju nakon tog znaka
primjer:
fold -5 myfile.txt > newfile.txt – lomi linije datoteke myfile.txt na širinu 5 karaktera i
prusmjerava izlaz u datoteku newfile.txt newfile.txt
354/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell alati za rad sa tekstom
Sintaksa naredbe;
primjer:
355/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
Mario Strinić
VI EDITOR
356/2583
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.
357/2583
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)
358/2583
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.
359/2583
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:
360/2583
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.
361/2583
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)
362/2583
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)
363/2583
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 '...'
364/2583
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.
365/2583
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.
366/2583
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
367/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
368/2583
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:
369/2583
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:
370/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor
Miscellany:
371/2583
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.
372/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
Matko Pejčić
EMACS
373/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
UVOD
Što je Emacs?
374/2583
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.
375/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
376/2583
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
377/2583
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.
378/2583
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.
379/2583
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.
380/2583
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
381/2583
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
382/2583
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.
383/2583
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.
384/2583
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
385/2583
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
386/2583
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.
387/2583
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
388/2583
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.
389/2583
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.
390/2583
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.
391/2583
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.
392/2583
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.
393/2583
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.
394/2583
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.
395/2583
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
396/2583
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.
397/2583
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.
398/2583
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
399/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
400/2583
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.
401/2583
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.
402/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
UVLAČENJE (INDENTATION)
403/2583
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.)
404/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs
405/2583
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
406/2583
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
407/2583
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:
408/2583
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
$
409/2583
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
410/2583
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.
411/2583
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: