You are on page 1of 2583

SVEUČILIŠTE U SPLITU

STRUČNI STUDIJ RAČUNARSTVA – ZAGREB

prof. Pavle Špoljarić

Programski alati na Unix računalima

ZBORNIK SEMINARSKIH RADOVA


2005/2006
Dražen Hudoletnjak • Dario Miočić • Marijela Napast • Andrija Martinović
Marko Bošnjak Mehmetović • Hrvoje Hrašek • Marko Pintač • Siniša Julijan
Marko Vuković • Marijana Ladan-Pelivanović • Predrag Jovanović • Manuel Vidonis
Zoran Zoričić • Ida Golubić • Dragutin Markulin • Mario Strinić • Matko Pejčić
Maja Mehinagić • Nina Žugaj • Tomislav Ščrbak • Franjo Grgec • Ivan Manić
Svjetlana Vedernjak • Frane Gjeldum • Željko Jurković • Goran Grdenić • Dragan Micić
Vitko Stanšec • Matija Mikšec • Davorin Šajnović • Zdravko Smenderovac • Nijaz Ćesir
Domagoj Milaković • Branimir Živković • Tomislav Grgec • Krešimir Hećimović
Janko Rade • Marko Ferk • Rustem Galioulline • Alen Cikač • Yasser Alkhalil • Damir Jajetić
Tomislav Domanovac • Marni Minauf • Nenad Cuca • Ivan Podhraški • Maja Žugaj
Željko Šafar • Damir Šćuric • Goran Jurišić • Krasnodar Krajnik • Vedran Deduš
Vanja Harambuša • Krunoslav Zeman • Boris Ivanišević • Igor Čopec • Matija Čupen
Saša Dragić • Ivan Brčić Neven Kmetić • Majk Jednaković • Jurica Božiković
Usama Kalit • Ivica Fadljević • Igor Novaković • Antun Brezak • Marinko Šimić
Nikolina Javor • Maja Hudorović • Goran Vlahović • Goran Vulić • Adrijana Bazina
Ivan Legin • Daniel Van Schepdael • Vinko Horvatinčić • Dubravko Flis • Dario Dugić
Zvonimir Janković • Jakov Mihaljević • Daniel Novak • Adriana Mihinec • Domagoj Švegelj
Darko Drezga • Berislav Biljaković • Josip Baćani • Tomislav Brebrić • Marina Petrovska •
Dario Benko • Amir Kos • Tamara Krutman • Ante Penava • Mirjana Divčić • Ana Babić •
Marijan Poljak • Nino Knez • Damir Kolić • Igor Rubinić • Martin Fresl • Željko Gobac •
Viktorija Karamarković • Vanja Kramarić • Josip Špendić • Lana Večerić • Ivan Skoković •
Kristijan Živčec • Goran Curkovečki • Tomislav Jagić • Marina Bračun • Elizabeta Velkavrh •
Alja Pavlić-Ravšer • Eliot Karlo Pavletić • Marija Bilić • Marija Rešetar • Saša Protulipac •
Čelebić Gorana • Siniša Mudrinić • Igor Kutanjec • Franjo Bubalo

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

OVAJ ZBORNIK JE POD OPĆOM


GNU LICENCOM OPISANOM U
1. POGLAVLJU
(GNU FILOZOFIJA I GNU LICENCA)

3/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sadržaj

Sadržaj

1. GNU FILOZOFIJA I GNU LICENCA (Dražen Hudoletnjak)


7
2. POVIJEST I NASTANAK UNIX-a (Dario Miočić)
31
3. STRUKTURA UNIXA (Marijela Napast)
57
4. SHELL (Andrija Martinović)
70
5. UNIX COMMAND LINE (Marko Bošnjak Mehmetović, Hrvoje Hrašek)
100
6. Unix COMMAND LINE 2 (Marko Pintač)
145
7. SH I BASH (Siniša Julijan)
197
8. BASH – ADVANCED SHELL PROGRAMIRANJE (Marko Vuković)
236
9. C SHELL, T C-SHELL (Marijana Ladan-Pelivanović)
250
10. SHELL PROGRAMIRANJE (SHELL I BASH) (Predrag Jovanović)
277
11. REGEX (Manuel Vidonis, Zoran Zoričić)
299
12. SHELL ALATI ZA RAD SA TEKSTOM (Ida Golubić, Dragutin Markulin)
334
13. VI EDITOR (Mario Strinić)
356
14. EMACS (Matko Pejčić)
373
15. LOGIN I ID (Maja Mehinagić)
406
16. TELNET I SSH (Nina Žugaj)
416
17. PGP I CA AUTHORITY (Tomislav Ščrbak)
448
18. KERBEROS (Franjo Grgec, Ivan Manić)
469
19. CRON I AT (Svjetlana Vedernjak)
488
20. ARHIVIRANJE NA UNIX RAČUNALIMA (Frane Gjeldum)
524
21. BOOT & SHUTDOWN (Željko Jurković)
541
22. INIT PROGRAM (Goran Grdenić, Dragan Micić)
567
23. LILO i GRUB (Vitko Stanšec, Matija Mikšec)
598
24. UNIX DEVICES, MOUNTING DEVICES (Davorin Šajnović)
628
PARTICIONIRANJE I TIPOVI FILE SYSTEMA
25.
(Zdravko Smenderovac, Nijaz Ćesir )
650
26. STANDARDNA STRUKTURA DIREKTORIJA (Domagoj Milaković)
670
27. AWK I SED (Branimir Živković)
699
28. SED (Tomislav Grgec)
726
29. GCC COMPILER (Krešimir Hećimović)
752

4/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sadržaj

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


774
31. GNU MAKE (Marko Ferk)
792
32. GNU MAKE (Rustem Galioulline)
826
33. PROGRAM PROFILING (Alen Cikač, Yasser Alkhalil)
865
34. CVS – SUSTAV ZA VERZIONIRANJE (Damir Jajetić, Tomislav Domanovac)
906
SUBVERSION – SUSTAV ZA VERZIONIZIRANJE
35.
(Marni Minauf, Nenad Cuca)
946
36. IDE (Ivan Podhraški)
990
37. ECLIPSE (Maja Žugaj, Željko Šafar, Damir Šćuric)
1005
38. PIPE I FIFO (Goran Jurišić)
1034
39. FORK (Krasnodar Krajnik)
1056
40. PROCESI I UPRAVLJANJE PROCESIMA (Vedran Deduš, Vanja Harambuša)
1088
41. SIGNALI (Krunoslav Zeman)
1116
42. FILE, DIRECTORY AND INODE PROGRAMMING (Boris Ivanišević)
1140
43. FORK PROCESI (Igor Čopec)
1159
44. SOCKETS, UNIX DOMAIN, NETWORK (Matija Čupen)
1169
45. TCP/IP (Saša Dragić)
1188
46. TCP/IP API (Ivan Brčić, Neven Kmetić)
1215
47. UDP-USER DATAGRAM PROTOKOL (Majk Jednaković)
1273
48. INETD I TCPD (Jurica Božiković)
1293
49. IP TABLES (Usama Kalit)
1305
50. NETWORK DEVICES I IP NAREDBE (Ivica Fadljević, Igor Novaković)
1369
51. QOS (Antun Brezak, Marinko Šimić)
1406
52. LINUX FIREWALL (Nikolina Javor, Maja Hudorović)
1429
53. INTERNET SERVICES (Goran Vlahović)
1469
54. LDAP (Goran Vulić)
1501
55. DNS I DHCP (Adrijana Bazina, Ivan Legin)
1538
56. DNS I DHCP (Daniel Van Schepdael)
1598
57. BIND9 (Vinko Horvatinčić, Dubravko Flis)
1619
58. RPC – REMOTE PROCEDURE CALL (Dario Dugić)
1661
59. RLOGIN RSH (Zvonimir Janković)
1679
60. X WINDOW SYSTEM (Jakov Mihaljević)
1689

5/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sadržaj

61. WINDOW MANAGER (Daniel Novak)


1698
62. KDE (Adriana Mihinec, Domagoj Švegelj)
1737
63. GTK (Darko Drezga, Berislav Biljaković)
1781
64. GNOME (Josip Baćani, Tomislav Brebrić)
1815
65. UNIX DESKTOP SYSTEM (Marina Petrovska)
1883
66. INTERNET HISTORY (Dario Benko)
1910
67. UVOD U PERL (Amir Kos)
1927
68. PERL – Practical Extraction and Report Language (Tamara Krutman,Ante Penava)
1984
69. PHP (Mirjana Divčić)
2031
70. PYTHON (Ana Babić)
2070
71. INTERPRETERI – TCL/TK (Marijan Poljak)
2105
72. NASTANAK LINUXA (Nino Knez, Damir Kolić)
2146
73. PHP vs. PERL (Igor Rubinić)
2158
74. MYSQL (Martin Fresl, Željko Gobac, Viktorija Karamarković)
2190
75. POSTGRESQL (Vanja Kramarić, Josip Špendić, Lana Večerić)
2241
76. APACHE - WEB SERVER (Ivan Skoković)
2288
77. APACHE (Kristijan Živčec, Goran Curkovečki)
2319
78. SAMBA (Tomislav Jagić, Marina Bračun)
2368
DISTRIBUCIJE LINUX-a / UNIX -a
79. (Elizabeta Velkavrh, Alja Pavlić-Ravšer, Eliot Karlo Pavletić)
2411
80. SAMBA I NFS (Marija Bilić)
2422
81. RPM i DEB PAKETI (Marija Rešetar)
2472
82. KOMPAJLIRANJE KERNELA (Saša Protulipac)
2492
83. WIKIPEDIJA (Čelebić Gorana, Siniša Mudrinić)
2524
84. AJAX (Igor Kutanjec, Franjo Bubalo)
2542

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

računala. Sa slobodnim operacijskim sustavom ponovno se je mogla osnovati zajednica


hakera koji bi slobodno surañivali i izmjenjivali svoje ideje. Zajednica kojoj bi se svatko
mogao pridružiti. Obzirom da je on do tada radio na razvoju operacijskih sustava, imao je
znanja i iskustva da to napravi a osjećao se i izabranim za taj posao. Odlučio je napraviti OS
kompatibilan sa Unixom kako bi bio prenosiv i kako bi dotadašnji korisnici Unixa mogli lako
prijeći na njega. Sljedeći hakersku filozofiju odabrao je ime GNU, kao rekurzivno za "GNU
Nije Unix" (GNU's Not Unix). Shvatio je da naziv "operacijski sustav" ne znači samo kernel
več da to ime uključuje i dodatne stvari kao što su komandne linije, assembleri, kompajleri,
interpreteri, debuggeri, tekst editori i još mnogo toga. Budući da su tadašnji operacijski
sustavi (ITS, Multics, VMS, Unix) imali sve to, on je odlučio da i GNU mora imati sve to.
Znajući točno što hoće, u siječnju 1984. dao je otkaz na MIT-u i počeo pisati GNU softver.
Odlazak iz MIT-a je je bio nužan jer da je ostao, MIT je mogao GNU proglasiti svojim
proizvodom i time bi Stallmanova ideja o slobodnom operacijskom sustavu pala u vodu kao i
ponovno oživljavanje hakerske zajednice. Srećom, profesor Winston, tadašnji šef MIT AI
Laba je dozvolio Stallmanu da nastavi koristiti njihove labose i njihovu opremu. Time je
GNU operacijski sustav od nekakve same ideje postao stvaran projekt i može se reći da je to
stvarni početak svega vezanog uz GNU.

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

Razvoj GNU OS-a

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.

Paralelno s njima, Linus Torvalds je radio na Unix kompatibilnom kernelu kojeg je


objavio na internetu 1991. godine. Nazvao ga je Linux. Negdje 1992. ukomponirali su Linux
u dotad nedovršeni GNU čime je stvoren komplenti slobodni operacijski sustav. Nazvali su ga
GNU/Linux što predstavlja složenicu od "kombinacija GNU sustava sa Linux kernelom". Ta
verzija GNU OS-a je stekla golemu popularnost i danas ju većina ljudi poznaje samo pod
imenom Linux iako je Linux samo dio tog OS-a (njegov kernel).

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

Slobodan (free) softver

Kao što smo do sada vidjeli cijeli smisao GNU pokreta je ideja o slobodi. Ljudi koji
stoje iza GNU pokreta smatraju da je slobodan softver stvar slobode - ljudi trebaju imati
slobodu koristiti softver na bilo koji 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.

Kad se govori o slobodnom softveru, najbolje je izbjegavati termine tipa "besplatan


softver" jer ti termini označavaju cijenu a ne slobodu (ponovno zbog višeznačnosti engleske
rijeći "free"). Na kraju, kriteriji poput ovih do sad nabrojanih u ovoj definiciji slobodnog
softvera zahtijevaju pažljivo razmišljanje prilikom njihove interpretacije. Prilikom odluke da
li neka licenca zadovoljava kriterije kao licenca slobodnog softvera, sudi se prema tim
kriterijima i gleda se da li zadovoljava njihov duh kao i točne riječi. Ako ta licenca sadrži bilo

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.

Zašto slobodan softver

Digitalna informatička tehnologija nam je omogučila lakše kopiranje i modificiranje


informacija. Računala su to olakšala svima nama. No vlasnička prava (copyright) na neki
program su nešto što nam to onemogučava. Vlasnici takvog softvera su jedini koji imaju
pravo kopirati i mijenjati softver koji mi koristimo. Copyright sustav je nastao sa tiskanjem -
tehnologijom za masovno kopiranje. Copyright se dobro uklapa u tu tehnologiju jer
ograničava samo velike izdavače i ne oduzima slobodu čitateljima knjiga. Običan čitač koji ne
posjeduje tiskaru, može kopirati knjige samo tako da ih prepiše i rijetki imaju volju to raditi.
Digitalna tehnologija je mnogo fleksibilnija, kad su podaci u digitalnoj formi, lako se mogu
kopirati i dijeliti drugima. No ta fleksibilnost je u sukobu sa idejom copyrighta. Zbog toga su
uvedene prilično prljave mjere da se nametne copyright na softver. No, što je doista potrebno
društvu da napreduje? Potrebno je da su sve informacije slobodne, nap. program koji se može
čitati, popravljati, prilagoñavati i poboljšavati a ne samo pokretati. Nažalost ono što vlasnici
softvera tipično isporučuju je crna kutija koju ne možemo proučiti ili mijenjati. Društvo
takoñer treba slobodu. Kada program ima vlasnika, korisnici gube slobodu da kontroliraju dio
svog života.

Ekonomski razlozi koje navode vlasnici softvera su pogrešni no ekoneomski problem je


stvaran. Neki ljudi pišu koristan softver čisto iz hobija ili zato što uživaju programirajući
nešto korisno no ako želimo više nego ti ljudi naprave, moramo povečati fond. Već deset
godina ljudi koji razvijaju slobodan softver iskušavaju razne metode kako namaknuti novac.
Dosad je postignut nekakav uspjeh. Neki rade potrebne preinake svog programa zatražene od
klijenata koji im za to plaćaju. Iako bi oni i sami mogli napraviti te preinake ponekad je lakše
platiti autoru da to napravi budući da on već poznaje svoj program. Neki zarañuju tako što

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

Kategorije slobodnog i ne-slobodnog softvera

Ovaj dijagram (napravio Chao-Kuei) objašnjava različite kategorije softvera.

Slobodan softver (free software)


Što je slobodan softver je objašnjeno u tekstu do sada, kratka definicija glasi: slobodan softver
je softver koji dolazi sa dozvolom da ga svatko smije koristiti, kopirati, distribuirati (bilo
izvornu ili modificiranu verziju) besplatno ili uz naknadu. U biti, to znači da takav softver
mora dolaziti sa izvornim kodom.
Ako je program slobodan onda ga se potencijalno može uključiti u slobodan operacijski
sustav kao što je GNU ili neku od slobodnih verzija GNU/Linuxa.
Neke kompanije svoj softver zovu "free" no ne u smislu slobode nego cijene. ("Free" znaći
slobodan ali i besplatan). Zbog toga treba proućiti licencu s kojom takav softver dolazi da se
vidi točno na što se taj pojam odnosi.
Slobodan softver je obično pouzdaniji od ne-slobodnog.

Open source softver


Pojam "open source" više-manje znaći isto što i slobodan softver. Meñutim kriterij koji neki
softver mora zadovoljavati da bi bio open source je nešto blaži, dozvoljene su neke restrikcije
koje u FSF-u smatraju previše ogrničavajućim.

18/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca

Public domain softver


Public domain softver je softver za kojeg ne postoje vlasnička prava. Ako je izvorni kod u
public domain onda je to poseban slučaj non-copylefted slobodnog softvera, što znaći da neke
verzije ili modifikacije možda uopće nisu slobodne.
Ako je samo izvršna datoteka u public domain a source kod nije onda to nije slobodan softver
jer on podrazumijeva da mora biti dostupan izvorni kod. Većina slobodnog softvera nije
public domain, nego na njemu postoje vlasnička prava koja pak daju legalno pravo svima da
koriste slobodno taj program.

Copylefted softver
Copylefted softver je slobodan softver čiji uvjeti distribucije ne dozvoljavaju distributeru
dodavanje nikakvih novih, dodatnih 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.

Non-copylefted free software


Non-copylefted free software dolazi sa dozvolom da se dalje distribuira i modificira ali se
takoñer mogu dodavati i nove restrikcije. Softver koji dolazi na takav način može imati
verzije koje uopće nisu slobodne. Softverske kompanije mogu kompajlirati takav softver sa ili
bez modifikacija i prodavati ga kao vlasnički softver.

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.

The GNU system


GNU sustav je potpun unixoidni operacijski sustav. Sastoji se od hrpe programa i uključuje
sav GNU softver kao i mnogo drugih paketa kao što su X Window System i TeX koji nisu
GNU softver. Budući da je svrha GNU-a da bude slobodan, svaki njegov dio mora biti
slobodan.

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.

Ne-slobodan (non-free) softver


Non-free softver je softver koji nije slobodan. To uključuje "semi-free" softver i vlasnički
softver.

Semi free softver


Semi free softver je softver koji nije slobodan ali dolazi sa dozvolom pojedincima da koriste,
kopiraju, distribuiraju i mijenjaju program za neprofitne svrhe. Etićki je semi-free sofver bolji
od vlasničkog softvera no svejedno stvara probleme jer se ne može upotrijebiti kao dio
slobodnog operacijskog sustava.

Vlasnički (proprietary) softver


Vlasnički softver je softver koji nije niti slobodan (free) niti semi-free. Njegovo korištenje,
redistribuiranje ili modifikacija su zabranjeni ili zahtijevaju posebnu dozvolu.

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

shareware ne dolazi sa dozvolom da ga se instalira i koristi bez da ga se plati, čak niti u


nekomercijalne svrhe.

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

GNU Opća javna licenca - prijevod

GNU OPĆA JAVNA LICENCA

verzija 2, lipanj 1991.

This is an unofficial translation of the GNU General Public License into Croatian. It was not
published by the Free Software Foundation, and does not legally state the distribution terms
for software that uses the GNU GPL--only the original English text of the GNU GPL does
that. However, we hope that this translation will help Croatian speakers understand the GNU
GPL better.
Ovo je 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.

GNU OPĆA JAVNA LICENCA


OBVEZE I UVJETI ZA UMNAŽANJE, DISTRIBUIRANJE I MIJENJANJE
0. Ova Licenca vrijedi za svaki program ili drugo djelo koje sadrži obavijest vlasnika
autorskog prava prema kojoj se ono može distribuirati pod uvjetima ove Opće javne licence.
Pojam "Program" nadalje se odnosi na svaki takav program ili djelo, a "djelo zasnovano na
Programu" odnosi se na Program ili bilo koji rad izveden iz njega po zakonu o autorskim
pravima: dakle, djelo koje sadrži program ili njegov dio, točan ili s promjenama i/ili preveden
na drugi jezik. (Nadalje, prijevod je bez ograničenja uključen u pojam "promjena".) Svakom
korisniku licence obraćamo se kao "vama".
O aktivnostima osim umnažanja, distribucije i mijenjanja ova Licenca ne govori; one su izvan
njenog dosega. Čin pokretanja Programa nije ograničen, a o njegovom rezultatu govorimo
samo ako je sadržaj rezultata takoñer djelo zasnovano na Programu (bez obzira što ga je
stvorio Program). Je li to istina ovisi o funkciji Programa.
1. Smijete umnažati i distribuirati točne kopije izvornog koda Programa kakvog ga dobijete,
na bilo kakvom mediju, ako očigledno i prikladno na svakoj kopiji istaknete odgovarajuću
poruku o autorskim pravima i odricanje jamstava; ostavite nepromijenjenim sve obavijesti
koje se odnose na ovu Licencu i na nepostojanje jamstava; i dajte svakom primatelju
Programa primjerak ove Licence zajedno s Programom.
Smijete naplatiti fizički čin prenošenja kopije i možete po svom izboru ponuditi jamstvo za
naplatu.
2. Smijete mijenjati svoj primjerak ili primjerke Programa ili bilo kojeg njegovog dijela, tako
oblikovajući djelo zasnovano na Programu, i umnažati i distribuirati takve promjene ili djelo
pod uvjetima prethodnog Dijela 1., ako zadovoljavate ove uvjete:
a) Promijenjene datoteke moraju nositi istaknute obavijesti da ste promijenili datoteke i datum
svake promjene.
b) Svako djelo koje distribuirate ili objavite, a koje u cjelosti ili djelomično sadrži ili je
izvedeno iz Programa ili njegovog dijela, mora biti licencirano u cjelosti bez naplate svima
pod uvjetima ove Licence.
c) Ako promijenjeni program, kada je normalno pokrenut, čita naredbe interaktivno, on mora,
pokrenut za takvu interaktivnu uporabu u najuobičajenijem načinu, ispisati ili prikazati
obavijest koja uključuje odgovarajuću poruku o autorskim pravima i obavijest da nema
jamstva (ili drugačiju, koja kaže da vi jamčite) i da korisnici mogu ponovno distribuirati
program pod ovim uvjetima, i objasniti korisniku kako da pročita primjerak ove Licence.
(Iznimka: ako je sam Program interaktivan, ali obično ne ispisuje takvu obavijest, vaše djelo
zasnovano na Programu ne mora ispisati obavijest.)

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

11. POŠTO JE PROGRAM LICENCIRAN BESPLATNO, ZA PROGRAM NEMA


JAMSTVA, U MJERI DOPUŠTENOJ PRIMJENJIVIM ZAKONOM. OSIM AKO JE
DRUKČIJE IZRAŽENO NAPISMENO, VLASNICI AUTORSKIH PRAVA I/ILI DRUGE
STRANKE PROGRAM DAJU "KAKAV JEST" BEZ JAMSTVA BILO KOJE VRSTE,
IZRAŽENOG ILI PODRAZUMIJEVANOG, UKLJUČUJUĆI, ALI NE SAMO NJIH,
PODRAZUMIJEVANA JAMSTVA TRGOVINSKE PRIKLADNOSTI I ODGOVARANJA
ODREðENOJ SVRSI. SVI RIZICI VEZANI ZA KVALITETU I BRZINU PROGRAMA
OSTAJU NA VAMA. AKO SE PROGRAM POKAŽE NEVALJANIM, VI SNOSITE SVE
TROŠKOVE POTREBNOG ODRŽAVANJA, POPRAVLJANJA I ISPRAVLJANJA.
12. NI U KOJEM SLUČAJU, OSIM NUŽNO PO PRIMJENJIVOM ZAKONU ILI
NAGODBOM NAPISMENO, BILO KOJI VLASNIK AUTORSKIH PRAVA, ILI BILO
KOJA DRUGA STRANKA KOJA SMIJE MIJENJATI I/ILI REDISTRIBUIRATI
PROGRAM KAKO JE DOZVOLJENO GORE, NEĆE BITI VAMA ODGOVORAN ZA
ŠTETE, UKLJUČUJUĆI OPĆE, POSEBNE, SLUČAJNE ILI POSLJEDIČNE ŠTETE
PROIZAŠLE IZ KORIŠTENJA ILI NEMOGUĆNOSTI KORIŠTENJA PROGRAMA
(UKLJUČUJUĆI, ALI NE SAMO NJIH, GUBITAK PODATAKA ILI ČINJENJE
PODATAKA NETOČNIM ILI GUBITKE VAS ILI DRUGIH STRANAKA ILI NEUSPJEH
PROGRAMA DA RADI S BILO KOJIM DRUGIM PROGRAMOM), ČAK I AKO JE
TAKAV VLASNIK ILI DRUGA STRANKA UPOZORENA NA MOGUĆNOST TAKVIH
ŠTETA. KRAJ OBVEZA I UVJETA

26/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb GNU filozofija i GNU licenca

Vrste GNU licenci

Postoje tri vrste GNU licenci:


• GNU General Public Licence (GNU GPL)
• GNU Lesser General Public License (GNU LGPL)
• GNU Free Documentation Licence (GNU FDL)

GNU GPL
Koristi se sa 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

GNU pokret je pokrenut iz jednostavog razloga - želje za slobodom, želje da se napravi


nešto pozitivno, nešto od čega će svi imati koristi. Ljudi koji su to gurali imali su težak
zadatak ispred sebe, napraviti slobodan operacijski sustav. Nisu imali neograničena
materijalna sredstva za to, nisu imali ni obečanje da ih novac čeka na kraju tog dugog puta.
Imali su samo znanje i veliku volju. Malo po malo, kako se je sve više ljudi uključivalo u
pokret, uspjeli su doći do svog cilja (iako ne baš onako kako su imali u planu na početku).
Nastao je GNU/Linux. Svijet je dobio slobodni operacijski sustav (u nekim verzijama). Je li
on bolji ili lošiji od drugih? O tome postoje podjeljena mišljenja no to nije važno. Važno je da
je on slobodan što znaći da ako netko smatra da nešto ne valja i da može bolje, ima slobodu to
sam napraviti. To mu je omogućeno time što ima izvorni kod i time što mu GNU licenca pod
kojom dolazi osigurava to pravo.

Druga stvar koja je proistekla iz tog pokreta je pojam slobodan (free) softver. Pokazalo
se da je taj softver u pravilu bolji i pouzdaniji od 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.

Kakva je budučnost GNU pokreta i slobodnog softvera? To je teško pitanje. S jedne


strane imamo velike kompanije sa mnogo novca koje na razne naćine žele zaustaviti slobodan
softver koji je zbog svoje kvalitete postao ozbiljan konkurent njihovim lošim
poluproizvodima, a potpuno je besplatan. Ide se čak tako daleko da se pokušava uvesti patent
na softverske algoritme što je po mom mišljenju totalno apsurdno i glupo, da ne kažem
opasno. Apsurdna je sama ta ideja da se nešto tako apstraktno kao što je znanje, može smatrati
materijalnim dobrom i polagati prava na to. Drugi problem GNU pokreta i slobodnog softvera
je taj što se izdavanjem programa kao slobodnog (pod GNU GPL) ne može obogatiti budući
da svatko tko jednom dodje do programa tako izdanog, može ga dalje distribuirati bez ikakve
naknade autoru. Iako postoje naćini da se i takav softver unovći (donacije, posebne prilagodbe

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.

Kod nekih država (uključujući i Hrvatsku) veliki problem u prihvaćanju slobodnog


softvera je i vrlo razvijena kultura piratsva. U zemljama gdje piratsvo nije tako rašireno
slobodan softver je dobar izbor i zbog svoje cijene (besplatan je). Tamo gdje je piratski
softver normalna stvar, jedina prednost slobodnog softvera je to sto dolazi sa izvornim
kodom, ali ta prednost većini korisnika nije bitna jer samo rijetki imaju znanje to iskoristiti.

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

Materijal i ideje za ovaj seminar sam našao uglavnom na web stranici


http://www.gnu.org ili linkovima koji su postavljeni tamo. Zbog prirode teme, nisam mogao
pisati samo činjenice nego je velik dio rada zapravo stav i razmišljanje jednog čovjeka,
Richarda Stallmana (osim zaključka koji je iskljućivo moje mišljenje o svemu tome). Najveći
problem mi je bio prevoñenje nekih rijeći koje u hrvatskom jeziku nemaju zamjenu ili ako i
imaju, ružno zvuče. Zbog toga sam neke rijeći ostavio u izvornom, engleskom obliku.
Prijevod GNU licence (pod 4.1) sam kopirao takoñer sa http://www.gnu.org jer ja i tako to ne
mogu bolje prevesti a i bilo bi suvišno prevoditi kad prijevod već postoji.

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ć

Povijest i nastanak UNIX-a

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.

Priča o rastu i razvoju Unix-a je priča o jednom od najvećih napredaka u računalnoj


povijesti. Kao što je rekao David Tolbrook : „Unix je omogućio korisnicima stvari koje su
prije bile jednostavno nezamislive“. On takoñer naglašava da Unix nije toliko ogroman
napredak u računarstvu koliko je veliko pojednostavljenje, koje je pokazalo da se relativno
mali operativni sustav može izvršavati na različitim hardverskim platformama, te da može biti
portabilan, neovisan o računalu i pristupačan.

Neke od najvećih prednosti Unix-a ne dolaze od njegove jednostavnosti, nego od


stvarno zajedničkog načina razvoja i evolucije. Umjesto da bude proizvod jednog proizvoñača
sa nekim odreñenim hardverom, Unix je nastao kao rezultat želje pojedinaca da naprave
sustav koji bi bio jednostavan, kojeg bi moglo koristiti više korisnika i koji bi mogao služiti
kao ugodno okruženje za programiranje.

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.

Na sreću, Thompson i Dennis Ritchie su pronašli neiskorišten DEC PDP-7 sa 340


ekranom. Operativni sustav se sastojao samo od assemblera i loader-a, i samo je jedan
korisnik mogao koristiti računalo istovremeno. U takvom ograničenom okružju, dijelovi
jednokorisničkog Unix sustava su brzo razvijeni. Space Travel je napisan ponovo za PDP-7, a
napisani su i assembler i rudimentarni kernel operativnog sustava. Tijekom travnja, svibnja i
lipnja 1969. Thompson je razmišljao o pisanju višekorisničkog sustava datoteka. Iz diskusije
Dennisa Ritchiea, Rudd Canadeya i Kena Thompsona nastao je koncept sustava datoteka koji
je implementiran za dan-dva na računalu PDP-7.

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

Bilo je nekoliko neuspjelih pokušaja da se BTL uvjeri da nabavi novo računalo za


svoju razvojnu grupu (computer research group) zbog toga što je 1969. svako naručivanje
računala podrazumijevalo trošak od 100 000$ ili više. Niti jedan od pokušaja nije uspio sve
dok se Joe Ossanna nije sjetio da predloži kupovinu računala PDP-11 za obradu teksta.
Administracija BTL-a je to smatrala vrijednom investicijom.

34/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a

3. UNIX RAZVOJNI SUSTAV

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

3.1. Unix počinje dobivati oblik


Ono što je Thompson imao na PDP-7 je bio sustav, ali ne baš pravi operacijski sustav.
Tako je za vrijeme ljeta 1969., Thompson počeo implementirati sustav na papiru, koji je
Ritchie nazivao i "sustav od krede", jer je proizašao iz mnogobrojnih diskusija na pločama u
CSRC-u.

"Posvetio sam posebno svaki tjedan operacijskom sustavu, Shell-u, Editor-u, i


Assembler-u da reproducira samog sebe."

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.

3.2. Izgledalo je kao operacijski sustav, skoro


Početna izvedba, "bila je potpuno ispočetka napisana na taj način da je izgledalo kao
operacijski sustav", rekao je Thompson, "sa alatima koji su bili poznati, kao što su assembler,
editor, shell". Sustav, rekao je, "ako se ne održava sam, onda je bar na pragu toga, potpuno
odvojen od GECOS mreže ".

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

3.3. Stvaranje operacijskog sustava UNIX


Nakon tri desetljeća uporabe, UNIX operacijski sustav iz Bell Labaratorija i dalje je
jedan od najsnažnijih i fleksibilnih operacijskih sustava na svijetu. Njegova popularnost
dolazi iz mnogo faktora uključujući sposobnost izvršavanja na raznim strojevima, od mikro
do superračunala i njegovoj prenosivosti, sve to je vodilo tome da ga mnogi proizvoñači
prihvate.

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

Sustav je takoñer prihvatio drugačiji pristup dizajniranju software-a na način da se


problemi rješavaju povezujući manje alate, a ne kreiranjem ogromnih aplikativnih programa.

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

4. PREGLED OPERACIJSKOG SUSTAVA UNIX


UNIX operacijski sustav dizajniran je na način da omogućava programerima da u isto
vrijeme koriste računala i dijele resurse.Operacijski sustav koordinira upotrebu resursa tako
da omogućava jednoj osobi da pokrene program za provjeru pravopisa, dok drugi kreira
dokument, dopušta drugome da ureñuje dokument dok opet netko drugi kreira grafiku, a neko
treći formatira dokument, sve u isto vrijeme, a da korisnici ne znaju za aktivnosti drugih
korisnika.

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.

Iako su UNIX napravili programeri za programere, on pruža snažno i fleksibilno


okruženje, pa ga se može naći i u znanosti, na akademijama, u industriji, u poslovanju...
Mnoge telekomunikacijske sustave kontroliraju administracijski sustavi bazirani na UNIX-u.

Iako je dizajniran za srednje velika računala, operacijski sustav je ubrzo prenesen na


veća, snažnija računala. A kako su osobna računala postajala popularnija, verzije UNIX-a su
se našle i u njima, a i mnoge kompanije proizvode kompjutere bazirane na UNIX-u za
znanstvene i programerske zajednice.

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.

5.2. Višekorisnički rad:


Ista mogućnost koja omogućava višezadaćnost, omogućava i da više korisnika koristi
računalo. Računalo može primati naredbe od više korisnika - ovisno o njegovom dizajnu - za
izvoñenje programa, pristup podacima, ispis dokumenata, sve u isto vrijeme.

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

5.3. Prenosivost sustava


Glavni doprinos sustava UNIX njegova je prenosivost, koja dozvoljava da ga se seli s
jedne marke računala na drugu, s minimalnim promjenama kodova. To je značilo veliku
uštedu u nadogradnji i hardware-a i software-a.

Time se moglo i nadograditi operacijski sustav bez ponovnog unošenja korisnikovih


podataka, a nove verzije UNIX-a bile su kompatibilne i sa starima.

5.4. Unix alati


UNIX dolazi sa stotinama programa koji se mogu podijeliti u dvije klase:

• integralni alati – koji su neophodni za rad kompjutera

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

5.5. Komunikacija Unix-a


E-mail je danas svakodnevnica, ali je na svoje došao tek u poslovnoj zajednici u
posljednjih 10 godina, dok ga korisnici UNIX-a koriste već više desetljeća.

UNIX e-mail je u početku dozvoljavao korisnicima istih računala da komuniciraju


preko njihove mreže. Kasnije su priključeni korisnici na različitim kompjuterima i njima je
dozvoljen e-mail. I na kraju, UNIX sistemi diljem svijeta su spojeni u WWW, desetljećima
prije pojave današnjeg WWW-a.

5.6. Arhive podataka


UNIX kao što je poznato nije razvijen preko noći, onog trena kad je prebačen iz Bell
Labaratorija na sveučilišta, svaki programer započeo je s razvojem programa za UNIX.

Danas postoje stotine programa i aplikacija koje se mogu nabaviti uz postojeće


aplikacije koje dolaze uz UNIX.

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:

• KERNEL – koji se brine o rasporedu izvršavanja zadaća i o spremanju


podataka

• SHELL – koji povezuje i prevodi korisnikove zahtjeve, zove programe iz


memorije i izvršava ih

• Alati i aplikacije koje omogućavaju dodatne funkcije operacijskom sustavu.

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.

Srce operacijskog sustava koje kontrolira hardware i uključuje dijelove računala na


zahtjev programera. Ako damo naredbu (ls) kompjuteru, ono će reći kompjuteru da pročita
sve datoteke u direktoriju sa diska i prikaže ih na ekranu.

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.

6.3. Alati i aplikacije


Postoje stotine alata za UNIX korisnike. Alati su grupirani u kategorije za odreñene
funkcije, kao što su obrada teksta, poslovne aplikacije, programiranje…

40/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a

7. NASTANAK PROGRAMSKOG JEZIKA C

7.1. Od programskog jezika B preko NB do C


Prva verzija UNIX-a je napisana u assemblerskom jeziku, ali Thompson je htio da se
UNIX napiše u nekom višem programskom jeziku.

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.

Drugi dio-prepisivanje UNIX-a u C, bio je sporiji. No, ipak uz mnogo problema i


smišljanja što napraviti uspjelo se i to napraviti-prevesti cijeli operacijski sustav u C.

7.2. Nastanak cjevovoda.


Još jedna inovacija u UNIX-u je bila razvoj cjevovoda, koja je omogućavala
programerima da obavljaju više procesa u isto vrijeme.

Doug McIlroy, tada šef odjela u Computing Science Research Center, dobio je zasluge
za koncept cjevovoda, a Thompson za njihovu izvedbu.

McIlroy je radio na makro-ima kasnih 50-ih i teoretizirao je o povezivanju makro-a


kako bi se eliminirala potreba za korištenjem serija naredbi za jedan rezultat.

“Ako malo promislite o makro-ima”, objasnio je McIlroy, “oni prvenstveno služe za


prebacivanje serija podataka. Vršite unos podataka i iznenada doñete do makro poziva koji
kaže: ”Prestani unositi ovdje i počni unositi ondje.”

7.3. Povratak ploči s kredom za razvoj sintaksa


Dok su Thompson i Ritchie na ploči skicirali sistem podataka, McIlroy je na svojoj
ploči pokušavao skicirati kako povezati procese i koji jezik koristiti za to. To nije bilo lako.
„Sintaktički, nisam bio siguran kako povezati opcije u lanac“, rekao je McIlroy. McIlroy nije
odustao od ideje. U periodu od 1970. do 1972. sam razmišljao „što bi bilo kad bi napravio

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

„Thompson je vidio da argumenti datoteka neće odgovarati ovoj shemi, pa je te iste


noći promijenio sve te programe.“

„Ubacio je cjevovode u UNIX, notaciju u shell, sve u jednoj noći“, rekao je McIlroy.

7.4. Stvaranje filozofije programiranja za cjevovode i alate


Kad je Thompson kreirao cjevovode, on je takoñer ubacio još nešto u UNIX –
filozofiju.

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

Kernighan se složio. Primijetio je da iako unos/ispis prethodi cjevovodima, razvoj


cjevovoda vodi koncepciji alata – softverskih programa koji će se nalaziti u „kutiji s alatima“,
dostupnoj kad ih trebaš. Dodao je da su cjevovodi učinili rad sa softverskim programima
analogno korištenju rimskih brojeva umjesto arapskih.

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

8. UNIX POSTAJE ŠIROKO DOSTUPAN

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

U drugom izdanju, od lipnja 1972. napisano je da je broj instalacija Unix-a narastao na


10. Od tog trenutka nadalje razne verzije koje potiču it New Jersey-a označene su izdanjem
(dokumentacije) i verzijom (diskova ili traka).

U listopadu 1973. Thompson i Ritchie su održali predavanje na Simpoziju o


principima operativnih sustava (SOSP – Symposium on Operating System Principles) i više
ništa nije moglo zaustaviti Unix. Neposredno nakon SOSP-a mnogi su centri tražili kopiju
operativnog sustava. Prvi korisnik koji je dobio sustav je bio Lou Katz sa Columbia
University-a u Manhattan-u.

Objavljivanje SOSP referata u Communications of theACM izazvalo je eksplozivan


porast potražnje Unix-a. U tom trenutku Unix još nije imao ni pet godina.

43/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a

9. SURADNJA MEðU RANIM KORISNICIMA

Odluka pravnika AT&T-a da omoguće obrazovnim institucijama korištenje Unix-a, ali


bez ikakve podrške ili ispravaka grešaka imala je trenutan efekat: natjerala je korisnike da
dijele meñusobno. Dijelili su ideje, informacije, programe, ispravke grešaka i hardverske
trikove. Prvi sastanak Unix User Group-a, koja će kasnije postati Usenix Association, održan
je 15. svibnja 1974. na Columbia's College of Physicians and Surgeons. Pojavilo se
dvadesetak ljudi.

Pravnici AT&T-a takoñer su uskoro odlučili omogućiti još dvjema agencijama


licenciranje Unix-a: Američkoj vladi i The Rand Corporation, istraživačkoj grupi koja se
financirala iz državnog proračuna. To je, meñutim, uzrokovalo porast broja korisnika sa 33 u
1975. godini na 138 u 1976. od kojih je 37 bilo izvan Amerike. 1977. Interactive Systems iz
Santa Monice u Kaliforniji bila je prva kompanija koja je podržala Unix komercijalno.

44/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a

10. BERKELEY SOFTWARE DISTRIBUTION

Jedan od 33 korisnika iz 1975. godine je bio i University of California-Berkeley gdje


je Ken Thompson bio student. On se 1975. odazvao na poziv da održi predavanje i donio,
naravno, najnoviju verziju 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.

Kada su fakultetski Model 33 Teletype terminali zamijenjeni sa ADM-3 ekranskim


terminalima, Joy je zaključio da mu treba nešto više od običnog ed-a (editora koji je dolazio
standardno sa Unix-om). Uzeli su editor em (što zapravo znači „ed za smrtnike“, u originalu
„ed for mortals“) koji je napisao George Coulorius za Queen Mary College u Londonu i od
njega napravili linijski editor ex. Iz ex-a je Joy kasnije razvio vi ekranski editor.

Kada su se vijesti o Haleyevom Joyevom Pascalu proširile, Joy je kreirao Berkeley


Software Distribution. Prva je distribucija ponuñena u ožujku 1978. Sadržavala je Pascal i
editor ex, naplaćivala se 50 dolara, koliko je stajala traka na kojoj je bila snimljena.

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

11. UNIX SE ŠIRI

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.

U trenutku kada je navršavao 10 godina, Unix se upotrebljavao svugdje po svijetu:


1976. instaliran je na univerzitetu u Tokiju, koristio se na nekoliko univerziteta u Australiji,
na mnogim mjestima u Engleskoj, u Norveškoj, Francuskoj, Danskoj, Austriji i Izraelu. Sve to
je postignuto bez promocije ili tehničke podrške.

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

Industrijska primjena Unix-a takoñer je dobila zamah sa pojavljivanjem verzije 7.


Pojavilo se i nekoliko 32-bitnih implementacija (Xenix2 za Intelove 8086 procesore, djelo
Microsofta i Santa Cruz Operation, te portovi za Zilogove Z8000 i Motoroline 68000).
Pojavio se takoñer i 3BSD potaknut pojavom verzije 7. Verzija 8 je preuzela vi i termcap
(Billa Joya) te curses (Kena Arnolda) od BSD-a.

Ali, sa verzijom 7 pojavili su se i prvi problemi. Andy Tanenbaum sa Free University


u Amsterdamu to objašnjava ovako: „Kada je AT&T izdao verziju 7, shvatio je da je Unix
vrijedan komercijalni proizvod, pa je verziji 7 dodao licencu koja zabranjuje proučavanje
izvornog koda u sklopu predavanja na univerzitetima. Mnogi univerziteti su reagirali tako što
su počeli predavati samo teoriju.“

Tanenbaum je odlučio napisati iz početka novi operativni sustav koji bi bio


kompatibilan sa Unix-om, ali bez linije koda AT&T-a. Nazvao ga je Minix. To je bio drugi
klon Unix-a (prvi je bio Idris P.J.Plaugera).

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

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

Uskoro su se pojavile dvije rivalske skupine, Open Software Foundation i Unix


International. Ubrzo su uvučeni sudovi. Unix System Laboratories je tužio Berkeley Software
Design Inc., tvrdeći da je BSDI povrijedio copyright prava i poslovne tajne USL-a. Tužba je
odbijena zbog toga što je AT&T u početku distribuirao Unix u izvornom kodu bez copyright-
a. Pojavile su se još neke tužbe, ali na kraju se sve riješilo, i evolucija se nastavila.

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.

Povijest Unix-a je u početku bila jednostavna, za razliku od zbrke koja nastupa u


trenutku kada se Unix komercijalizirao.

50/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a

14. POVIJEST BSD VERZIJA

Godina Naziv Sadržaj

1977 BSD Unix Pascal, ex (za PDP-11)

1978 2BSD Isto kao i BSD uz dodatak vi, termcap, Mail, more i csh (za PDP-11/34)

1979 3BSD Virtualna memorija, Berkeley utilities (sukladno sa 32V za VAX)

1980 4BSD Brži file system, job control, pouzdani signali, auto-reboot, delivermail,
Franz Lisp (za VAX-11/750)

1981 4.1BSD Automatska konfiguracija, poboljšanje performansi

1982 4.1a Probna verzija za ARPANET čvorove, TCP/IP i sockets

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 4.3- Interne kernel mogućnosti (alokator memorije, debugger, podrška


Tahoe nazivima diskova), poboljšani TCP algoritmi, podrška za CCI Power 6
(Tahoe)

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

16.1 Dennis M. Ritchie

1941 -- Roñen u Bronxvilleu, N.Y.


1963 -- Diplomirao na Sveučilištu Harvard kao
najbolji student iz fizike
1967 -- Zapošljava se u Bell Labs-u, slijedeći svog
oca, Alistaira E. Ritchie, koji je tamo imao dugu
karijeru
1968 -- Prima nagradu od Hardvard sveučilišta za
doprinos matematici
1968 -- Pridružuje se Bell Labs timu koji je radio na
Multics-u, zajedničkom pokušaju Bell Labs-a, MIT-a
i GE-a da razvije glavni računalni operativni sustav
1972 -- Stvara C programski jezik
1983 -- Prozvali su ga Bell Labs momak
1988 -- Primljen je u U.S. National Academy of Engineering
1989 -- Prima, zajedno sa Kenom Thompsonom NEC C&C Nagradu za važan doprinos
računalnoj tehnologiji
1990 -- Imenovan je kao voña Ureda za istraživanje sistemskog software-a u Istraživačkom
centru za računalnu znanost u Bell Labs-u
1995 -- Voña je projekta koji nastoji stvoriti Plan 9 operativni sustav
1996 -- Voña je projekta koji nastoji stvoriti Inferno(TM) operativni sustav
1998 -- Nagrañen je zajedno sa Kennethom Thompsonom sa američkom nacionalnom
medaljom za tehnologiju, za razvijanje UNIX operativnog sustava

54/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Povijest i nastanak UNIX-a

16.2 Kenneth Thompson

1943 -- Roñen u New Orleansu, u državi Louisiani


1943-1960 --Kao sin časnika u američkoj mornarici,
seli se svakih nekoliko godina
1965-1966 -- Diplomirao na Sveučilištu Berkley u
državi Californiji sa odličnim ocjenama iz
elektrotehničkog inženjerstva
1966 -- Pridružuje se uredu za računalna istraživanja u
Bell Labs-u koji je radio na Multics projektu
1969 -- Razvija UNIX operativni sustav
1970 -- Napisao programski jezik B, preteču D.
Ritchievog C-a
1971 -- Prepisao je UNIX sa PDP-7 na PDP-11
1973 -- Ponovno kreira UNIX ali sada pomoću C
programskog jezika
1973 -- Prepisuje dijelove UNIX-a kako bi u njih uključio koncept Douga McIlroysa
cjevovoda
1975-1976 -- Predaje na Berkley Sveučilištu u Californiji
1980 -- "Belle," računalo za igranje šaha koje je izradio zajedno sa Joeom H. Condonom,
pobjeñuje na američkom Svjetskom Računalnom Šahovskom Prvenstvu
1980 -- Primljen u U.S. National Academy of Engineering
1980 -- Primljen je u U.S. National Academy of Science
1983 -- Prozvali su ga Bell Labs momak
1983 -- Primio je zajedno sa Dennisom Ritchiem ACM Turing nagradu
1988 -- Predaje na Sveučilištu u Sydneyu, Australia
1998 -- Nagrañen je zajedno sa Dennisom Ritchiem sa američkom nacionalnom medaljom za
tehnologiju, za razvijanje UNIX operativnog sustava
2000 -- Odlazi u mirovinu iz Bell Labs-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.

OSNOVNA STRUKTURA UNIX OPERACIJSKOG SUSTAVA

Unix je operacijski sustav koji se sastoji od 3 najvažnija dijela: kernela, shella(ljuske) i


datotečnog sustava tj. programa. Strukturu Unixa može opisati slika1.

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

Sistemski pozivi su sučelje izmeñu kernela i korisničkih programa koji se pokreću na


vrhu njega. Korisnici koji rukuju samo s shellom, tekst editorima ili drugim aplikacijskim
programima nemaju potrebu znati mnogo o sistemskim pozivima, ali pravo poznavanje
poziva je najvažnije za Unix programere. Sistemski pozivi su jedini način na koji se može
pristupiti opcijama kernela, kao što je sustav datoteka, mehanizam višezadaćnosti i
meñuprocesno komuniciranje. Sistemski pozivi definiraju ono što je Unix, jer sve ostalo tj.
subrutine i naredbe se grade na toj osnovi. Neki od njih su povezani sa podacima koje
korisnici ne smiju mijenjati. Postavlja se pitanje kako programeri pristupaju sistemskim
pozivima. Ne postoji razlika izmeñu sistemskog poziva i bilo kojeg drugog poziva funkcije.
Npr. sistemski poziv read može se postaviti ovako:

amt = read (fd, buf, numbytes) ;

Implementacija subrutine read varira u raznim oblicima Unixa. Obično je to


asemblerski jezik koji koristi instrukciju stroja dizajniranu točno za sistemski poziv, a nije
direktno izvršiva iz C programa. Danas je pametno pretpostaviti da su sistemski pozivi
jednostavno C subrutine, ali moramo biti svjesni da s obzirom na to da sistemski pozivi ulaze
u promjenu konteksta (od korisnika do kernela i natrag), potrebno je mnogo više vremena
nego za običnu sistemsku subrutinu za koju proces posjeduje svoj adresni prostor. Većina
sistemskih poziva vraća neku vrijednost. U navedenom primjeru poziv read vraća broj bita.
Da bi ukazao na grešku sistemski poziv vraća vrijednost koja se ne može zamijeniti s točnim
podatkom i obično je to –1. Zbog toga bi navedeni primjer trebao biti kodiran na sljedeći
način:

If ((amt= read(fd, buf, numbytes)) == -1)


{ printf(“Read failed\n”) ;
exit (1) ; }

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:

If ((amt= read(fd, buf, numbytes)) == -1)


{
perror (“read”) ;
exit (1) ;
}

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() pokušava pročitati nbytes podataka iz objekta referenciranog deskriptorom


datoteke d u spremnik buf. Ako je poziv uspješan, vraća točan broj pročitanih bita inače vraća
–1 i postavlja globalnu varijablu errno koja pokazuje na grešku. Prvi dio koda pokazuje koje
datoteke moraju biti uključene, a onda je napisana sama deklaracija sistemskog poziva.

int read(int d, char *buf, int nbytes)

Read() uzima 3 argumenta : int koji je nazvan sa d, pokazivač na znak nazvan buf i još
jedan int nazvan nbytes. Read() 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

long time(timep) /* Vraća vrijeme u sistemu */


long *timep; /* Pointer na vrijeme */

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

b) manipulira poviješću naredbi


Shell čuva listu naredbi koje smo upisivali. Ako trebamo ponoviti naredbu, koristimo
strelice da bismo se pomicali gore i dolje po listi.
c) automatski završava linije naredbi
Utipkavanjem djela imena naredbe, naziva datoteke ili direktorija i pritiskom na Tab,
tcsh shell će završiti ostatak imena automatski. Ako shell pronañe više od jednog imena koje
počinje tim slovima čut će se beep što ukazuje na to da je potrebno utipkati još nekoliko slova
prije ponovnog pritiskanja Taba.
d) piše shell skripte
e) definira naredbene aliase
f) editira zajedničke linije

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)

Programi i naredbe komuniciraju s kernelom kako bi se izvršile funkcije koje je


pokrenuo korisnik. Programi su obično grupirani po kategorijama, pa tako npr. imamo
programe koje koristimo za pisanje, programe koje koristimo za programiranje ili programe
koji služe kao poslovne aplikacije. Sistemski programi su najčešće binarni i kompajliraju se
od C izvornog koda. Smješteni su na mjesta kao /bin, /usr/bin, /usr/local/bin, /usr/ucb, idr.
Oni izvode funkcije na koje nas asocira sama pomisao na Unix, kao što su sh, csh, date, who,
more idr. Sve datoteke su grupirane u strukturu direktorija. Sustav datoteka je ureñen prema
hijerarhijskoj strukturi, kao izokrenuto drvo. Vrh hijerarhije se tradicionalno naziva root i
obilježava se s kosom crtom -/.

66/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Struktura UNIX-a

Slika 2 prikazuje strukturu direktorija.

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

U doba nastanka i razvijanja UNIX operativnog sistema, 1970-tih i 1980-tih, računala


nisu bila toliko moćna koliko su danas, tako da nije postojalo grafičko sučelje (GUI). Prvi
ulazno / izlazni ureñaji bili su terminali i teleprinteri. Postojali su (višekorisnički) multiuser
serveri na koje se bilo moguće spojiti putem terminala i moglo se raditi u tekstualnom načinu
rada, komandnoj liniji (CLI), tj. SHELL-u.
I danas je ostalo popularno raditi u shell-u, ne samo zbog povijesnih razloga, nego i
praktičnih. Unix korisnicima je gotovo nezamislivo raditi bez shell-a, tj. terminala. Terminali
su i danas prisutni u raznim ustanovama i poduzećima, nije potreban dodatan software da bi
se dodao još jedan terminal, a važno je napomenuti i da je moguće i osobno računalo koristiti
kao običan terminal.
Nakon logiranja korisnik može raditi u shell-u. Danas u standardnim distribucijama (ne
onima za specijalne namjene) sve češće se korisnik nakon startanja nañe automatski u
grafičkom okruženju - XWindows, tako da terminal niti ne vidi. Naravno, u bilo kojem
trenutku može aktivirati ili terminal ili X-e (npr. Alt+F2).
Dakle, Shell je tekstualno okruženje pomoću kojega korisnik komunicira sa
operacijskim sustavom, po defaultu koristeći tastaturu (kao input) i monitor (kao output).
Korisnik instrukcije zadaje u obliku znakovnih komandi, a shell ima zadatak prevoditi te
komande u instrukcije razumljive OS-u.

71/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell

SHELL

Shell je korisnički program kao i svaki drugi.

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:

SHELL KRATAK OPIS

/bin/sh - jednostavan za korištenje, fleksibilan, sa ugrañenim


Bourne Shell
programskim jezikom. /bin/rsh - reducirana verzija Bourne Shell-a.

/bin/csh - komandni interpreter i programski jezik koji podržava


C Shell
komandni buffer, kontrolu poslova i sintaksu C-like.

/bin/ksh - dodatne mogućnosti u odnosu na Bourne Shell./bin/rksh -


Korn Shell
reducirana verzija Korn shell-a.

/bin/tcsh - unaprjeñena verzija C shell-a. Ima bolje editiranje


Turbo C Shell
komandnih linija, kompletiranje imena fajlova, ponavljanja komandi.

Naravno, postoji daleko veći broj shell-ova, ali o tome kasnije.

73/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell

OSNOVNA STRUKTURA UNIX-A

Na slici je prikazana arhitektura UNIX operativnog sustava. U centru strukture nalazi se


hardware koji opskrbljuje operativni sustav svim potrebnim hardware-skim resursima. Oko
hardware-a se nalazi niz slojeva koji odvajaju korisnika od stroja čineći mu na taj način
komforniji rad na računalu. Prvi sloj oko hardvera je jezgra (kernel) operativnog sistema koje
ima zadatak da više slojeve odvoji od sloja ispod, to jest da ih učini hardware-ski nezavisnim.
Slijedeći sloj čini komandni interpreter (shell). Prvenstveni zadatak ovog sloja jeste
interakcija sa korisnikom (prihvaćanje korisničkih zahtjeva, njihovo interpretiranje i
predavanje nižem sloju (kernelu) na izvršavanje). U najvišem sloju nalaze se različite
komande i korisnički programi čiji je zadatak direktno pružanje specifičnih usluga korisniku.
Na slici (dole), ovaj sloj je podijeljen na vise dijelova. Svaki dio predstavlja skup srodnih
komandi.
Imajući ovo u vidu, može se reći da razumijevanje UNIX operativnog sustava zahtjeva
poznavanje četiri njegove osnovne komponente: kernel, shell, komande i fajl sistem koji nije
eksplicitno prikazan na slici ali je implicitno sadržan u djelu kernela.

Dakle, UNIX OS se sastoji od:


 jezgre (kernel)
 zajedničkih programa
 ljuske (shell)
 viših programskih jezika
 različitih namjenskih programa
Sada ćemo malo detaljnije objasniti kernel i 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

VEZA UNIX-a I LJUSKE

Komunikacija korisnika i ljuske odvija se sljedećim aktivnostima: ljuska značka odziva


(eng. prompt)(%) naredba ljuska. Izlazak iz ljuske rezultira u preuzimanju linije terminala od
strane procesa init i sve ide iz početka (init getty login ). Ljuska pripada grupi korisničkih
programa. Kod operacijskog sustava nema nikakvih privilegija. To znači da svaki korisnik
može odabrati jednu od ponuñenih ljusaka ili (ako ima dovoljno znanja) može napisati
program koji će biti njegova ljuska. UNIX ne propisuje kako će izgledati ljuska. Zbog toga
danas postoji veći broj ljusaka meñusobno različitih po mogućnostima ali s istim globalnim
zadatkom.
Danas su najrasprostranjenije slijedeće ljuske u UNIX-u:
 sh – Stephen Bourne standard shell (Bourne shell)
 ksh – David Korn shell (Korn shell)
 csh – Berkeley C-shell (Bill Joy shell)
 tcsh – poboljšana verzija ljuske csh
 bash – GNU Bourne-Again Shell (kombinacija sh, ksh i csh sukladna s IEEE
Posix Shell&Tools specification (IEEE WG 1003.2)
 rsh (eng. restricted shell) – dozvoljava samo nedestruktivne akcije na UNIX-u
(npr. uporaba za sajmove, predstavljanja, informacije i sl.)
 rsh (eng. remote shell) – ljuska koja omogućuje izvoñenje naredbi na
udaljenim računalima u mreži (TCP/IP)
 ssh (eng. secure shell) – omogućuje sigurnu uspostavu veze preko mreže ali
mogu bit i nešto "egzotičnije", npr.:
 psh – postscript ljuska (akcije posluživača NeWS)
 ocsh – objektna ljuska (napisana pomoću ljuske csh i razvijena u okviru
Gruppe predmeta Računarski sustavi i procesi (RASIP) na FER-u)
 sh4 – (tvrta 4-MATE, Zagreb). Ljuska je napisana u jeziku C uz korištenje
biblioteke curses, namijenjena je korisnicima UNIX-a na običnim terminalima
i omogućuje ugodan rad s datotekama (slično programu Norton u DOS-u).
Općenito za sve ljuske vrijedi pravilo: "Ako u obavljanju zadataka koristimo UNIX-ove
naredbe kao elemente, za njihovo povezivanje u kompleksnu cjelinu potrebno je koristiti
programiranje u jednoj od ljusaka". Ako je za rješenje zadataka potrebno koristiti osnovne

77/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell

strukture i elemente nekog programskog jezika, preporuka je napisati program u jednom od


raspoloživih programskih jezika.
UNIX-ove ljuske imaju i nedostatke: Ne izvode se pretjerano brzo. Programi napisani u
jednoj od ljusaka su tekst datoteke pa se kao takve i raspodjeljuju, a otežan je i sigurnosni
mehanizam (problem bitova setuid i sticky).
Viši programski jezici ( C, Pascal, Fortran, LISP itd.) omogućavaju korisniku izradu
vlastitih programskih aplikacija unutar UNIX okruženja. Različiti namjenski programi (koji
se koriste pod UNIX OS) su programi za dizajniranje, obradu teksta, matematičke proračune
itd.
Dobra strana u ovom suparništvu je u tome što sve ljuske mogu istodobno postojati na
jednoj UNIX-ovoj instalaciji, a na krajnjim korisnicima je da odluče koju će koristiti. Ljuske
sh i csh su sastavni dijelovi gotovo svih inačica UNIX-a, a ostale ljuske su negdje prisutne, a
negdje ih treba dodatno instalirati.
Dva su osnovna načina korištenja ljuske:
 interaktivni rad korištenjem preusmjeravanja i ulančavanja pojedinih
naredaba
 skupna (eng. batch) obrada u kojoj se naredbe čitaju iz datoteke (eng. shell
script).

78/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell

SHELL KAO SKRIPT INTERPRETOR

 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

Da bi se koristile mogućnosti udaljenog računala, potrebno se na njega prijaviti. Da bi ta


prijava bila prijava bila jednaka kao da je računalo lokalno, koriste se dva protokola:
TELNET (virtual terminal protocol) i RLOGIN (Remote Login Protocol).
Prijavljivanje sa terminala (preko serijske veze) i konzole (kada X-i nisu pokrenuti)
osigurava getty program. init pokreće posebnu instancu (kopiju) getty-a za svaki terminal za
koji je dozvoljeno prijavljivanje. getty učitava ime korisnika i pokreće login program koji
učitava šifru korisnika. Ako su korisničko ime i šifra ispravni login pokreće shell.
Shell je tada korisnikova radna okolina; može biti tekstualna, Bourne komandni shell ili
čak grafički shell - X-i...) . Kada shell program završi svoj rad npr. korisnik se odjavi, ili ako
je login prekinuo izvršavanje zbog neispravnog korisničkog imena ili lozinke, init ovo
registrira i pokreće novu instancu getty-a. Kernel ne zna ništa o prijavama jer sve potrebne
poslove obave sistemski programi.

82/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell

SHELL KAO INTERPRETOR NAREDBI

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.

Većina komandi očekuje argumente u sljedećoj formi:

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:

$ ls –la example1.c tulip.o

ovo su ukupno tri argumenta. Prvi je opcija a druga dva su imena fileova. Naredbe
definiraju akcije na UNIX-u. Svaku naredbu jedinstveno 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.

Neki znakovii koji se sa tastature dobivaju kombiniranjem kontrolnih i standardnih tipki


imaju specijalna značenja. Najznačajniji su:

< Ctrl > S -izlaz na ekranu se privremeno zaustavlja.


< Ctrl > Q -izlaz na ekranu se nastavlja.
< Ctrl > D -najjednostavniji način odjavljivanja sa sistema.
< Ctrl > C -prekid procesa.
< Ctrl > Z -privremeno zaustavljanje procesa.

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.

Pisanje više naredbi u jednu liniju

Često se javljaju problemi tokom rada glede zadavanja naredbi. Ako korisnik želi zadati
nekoliko naredbi u jednom redu, odnosno želi jednom komandom narediti 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.

Pisanje jedne naredbe u više linija

Ponekad je potrebno zadati naredbe koje sa svojim argumentima zauzimaju više od


jedne komandne linije u promptu. To često uradi sam terminal ako ima mogućnost
automatskog wrapiranja teksta ali kod nekih tipova terminala to nije slučaj pa je potrebno
manualno prelomiti komandu u više linija:

$ echo ovo može biti predugačak text da bi stao u \


> jednu komandnu liniju

ovo može biti predugačak text da bi stao u jednu komandnu liniju

znak “\” je tzv. backslash karakter. Echo naredba ispisuje tekst na standardni output.
Kao što već spomenuo shell uklanja sve nepotrebne razmake (space caracter) tako da je tekst
ispisan bez velikih razmaka kao u komandnoj liniji. Shell vidi komandu kao string i dijeli ime
programa i argumente 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 ( “ ):

$ echo ’ovo je text sa prevelikim razmacima’

ovo je text sa prevelikim razmacima

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:

$ echo ”moj home direktorij je $HOME”

Uslovno izvršenje komandi

Na osnovu prethodno izvršene komande moguće je usloviti izvršenje druge:

$ ls –l nepostojeći_fajl && echo ova naredba se neće izvršiti

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:

$ ls –l postojeći_fajl && halt

87/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell

izlistati navedeni fajl i ugasiti računar.

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

Uslovna izvršenja su omogućena upotrebom uslovnih iskaza && i || .

&& logičko AND

|| logičko OR

Znak ! ukoliko je napisan ispred i spaceom odvojen od naredbe predstavlja negaciju pa


se može kombinirati sa gore navedenim u svrhu ispunjavanja skoro svih situacija uslovnog
izvršenja. Treba napomenuti da ako se znak ! napiše odmah ispred naredbe bez odvajanja
spaceom to znači da shell treba da izvrši tu naredbu sa istim argumentima sa kojima je zadnji
put bila pozvana:

$ telnet 212.69.23.100

će uspostaviti konekciju sa hostom na toj IP adresi, a ako nakon toga ponovo


pokrenemo telnet:

$ !telnet

učinit će isto, barem će to pokušati.

88/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell

Iniciranje Programa

Kada shell okonča interpretaciju komande onda pokušava inicirati izvršavanje


programa. Jezgra izvršava program ali shell inicira njegovo izvršavanje. Koko bi inicirao
izvršavanje shell pretražuje PATH standardnu varijablu u potrazi za direktorijem koji sadrži
odgovarajuću naredbu i starta subshell da pokrene program. Za razliku od shell-a podshell
može da sam mijenja radni direktorij ali nakon izvršenja naredbe shell ostaje u direktoriju u
kojem je bio kada je pokrenuo program.

Redirekcija INPUT-a i OUTPUT-a

Redirekcija inputa i outputa je zadatak shella. Shell prvo uradi redirekciju pa onda
izvrši komandu. Na primjer želimo da neki listing direktorija sačuvamo u jednom fajlu radi
kasnijeg indeksiranja recimo CD-a punog mp3-jeva:

$ ls –la > listing.txt

Ova komanda će upisati sve fileove u koji se nalaze u aktivnom direktoriju u fajl koji se
zove listing.txt.
Ali da bi naveli 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

u ovom primjeru program ls ne šalje podatke na standardni output nego ih je shell


preusmjerio u standardni input programa wc. Krajnji rezultat je broj linija koji je trebao ls da
ispiše na ekran.

Supstitucija imena fajlova

Uz pomoć shell-a moguće je na jednostavan način koristiti metakaraktere za


manipuliranje većom količinom datoteka. Kao što ste pretpostavljali shell je odgovoran i za
supstituciju. Supstitucija se izvršava prije samog izvršavanja programa:

$ 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

je jedan od načina definiranja varijabli, zapravo najčešće korišteni. Sintaksa je dakle:


ime_nestandardne_varijable, znak_jednakosti, sadržaj. U gore navedenom slučaju varijabla
MOJDIR sadrži string /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

Moguća je i supstitucija imena datoteka pomoću varijabli tipa:

$ ls –a $MOJDIR

ova komanda bi izlistala sve datoteke iz direktorija /home/mozaik.

91/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell

Uslovna supstitucija varijabli

Varijable je moguće definirati uslovno u zavisnosti od toga dali je varijabla definirana


ili ne. To se postiže upotrebom vitičastih zagrada. Ako:

$ echo $MOJDIR

ne vrati nikakav rezultat, komanda:

$ echo ${MOJDIR:-’/home/mozaik’}

$ /home/mozaik

će postaviti vrijednost odnosno neće u koliko je ta vrijednost prije to predefinirana. Ova


vrijednost će ali ostati definirana samo na nivou aktivne komande i poslije toga će se izbrisati.
Ovo je naravno moguće i uraditi na način da varijabla ostane definirana dok je mi opet na
neki način ne predefiniramo ili uništimo:

$ echo ${MOJDIR:= ’/home/mozaik’}

$/home/mozaik

I obrnuto ako je varijabla definirana njenu izmjenu možemo izmijeniti:

$ echo ${MOJDIR:+ ’/home/users/mozaik’}

ali ako varijabla nije predefinirana ostat će takva.

92/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell

Uslovna supstitucija varijabli sa provjerom greške

Ako varijabla prethodno nije setovana sljedeća komanda će vratiti error:

$ echo ${MOJDIR:?}

bash: MOJDIR: parameter null or not set

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.

$# Sadrži broj argumenata proslijeñenih aktualnoj naredbi.

$$ Sadrži process ID aktualnog procesa.

Sadrži exit status posljednje završene naredbe. Programi po svom završavanju


$? vraćaju nulu (zero) ukoliko je proces uspješno okončan a ostale vrijednosti
(nonzero) ako nije. Ali ne moraju svi programi poštovati ova pravila.

$* Sadrži sve argumente proslijeñene programu.

Gdje je n neki integer sadrži odreñen argument po redoslijedu. Tako je $0 sama


$n
naredba bez argumenata, $1 prvi argument, $2 drugi, $3 treći, itd

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

KONTROLA RADNE OKOLINE

Kad login uključi shell postavljaju se i standardne (ili okolinske enviromental)


varijable. Kao što je rečeno pomoću njih se može podešavati radna okolina korisnika. Tako,
na primjer varijabla PATH sadrži listu direktorija u kojima shell automatski traži
egzekutabilne fileove, varijabla TERM sadrži tip terminala, UID user ID, HOST ime mašine,
CPU vrstu procesora, USER ime usera, OSTYPE tip OS-a najčešće linux, itd. Korisnik može
mijenjati ove postavke jednostavno mijenjajući sadržaj standardnih varijabli. Ove postavke se
pohranjuju u shellove konfiguracione fajlove koji opet mogu biti različiti u zavisnosti od
verzije shella, distribucije unix-a, itd.

Environment varijable

Postoje globalne i lokalne (shell) environment varijable. Globalne se definiraju pri


logiranju i kod novih aplikacija, a lokalne se koriste samo u shell-u i ne mogu biti korištene u
drugim procesima.
Popis svih globalnih environment varijabli dobije se naredbom env ili printenv.
Poništavaju se sa unsetenv (C shell), tj. unset (Bourne shell) naredbom.

Primjer:
$ printenv
_=/usr/bin/printenv
MANPATH=/usr/share/man/%L:/usr/share/man:/usr/contrib/man/%L:/usr/contrib/man:/
n
PATH=/usr/bin:/usr/ccs/bin:/usr/contrib/bin:/opt/nettladm/bin:/opt/fc/bin:/opt/.
NAME=ime
COLUMNS=80
EDITOR=vi
LOGNAME=andrija
MAIL=/var/mail/andrija
ERASE=^H
SHELL=/usr/bin/sh

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

Pojašnjenje nekih varijabli:

EDITOR Putanja do defoultnog editora


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

Dodjeljivanje vrijednosti globalnoj varijabli:


$ NAME=ime; export NAME

Dodjeljivanje vrijednosti lokalnoj varijabli:


$ name=ime

Trenutna vrijednost varijable:


$name ili ${name}

95/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell

FUNKCIJE SHELL-A

Primarne funkcije Shell-a su ostvarivanje interakcije korisnika sa jezgrom, a sve u svrhu


sigurnosti datoteka na računalu. Zašto je to tako? Naime Jezgra je takoñer u neku ruku
interpreter odnosno ono prevodi podatke koje dobije od programa procesorske instrukcije
razumljive samo računarskom hardveru. Podatke (instrukcije) koje dobiva kernel su
razumljive samo jezgri i bilo bi gotovo nemoguće da čovjek uči te instrukcije napamet i da ih
onda sam prenosi kernelu. Shell je program koji prevodi zahtjeve za kontrolu sistema kao što
su ažuriranje datoteka na sistemu, administraciju OS-a itd. Od usera se zahtjeva pridržavanje
odreñenih sintaksnih pravila i razumijevanje logike koje se Shell pridržava. Neovisno od vrste
Shell-a svi imaju zajedničke osnovne funkcije:
 Interpretacija komandne linije (Command line interpretation)
 Iniciranje programa (Program Initation)
 Preusmjeravanje Inputa i Outputa (Input Output redirection)
 Lančano povezivanje komandi (Pipeline connection )
 Supstitucija Imena Datoteka (Substitutions of Filenames)
 Upravljanje varijablama (Maintenace of Variables)
 Kontrola radne okoline (Enviroment Control)
 Programiranje skripti (Shell programming)

96/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell

ZAJEDNIČKI FEATURES-I SVIM SHELL-OVIMA

Simbol/ comanda Značenje/akcija

> Redirekcija na izlaz


>> Dodati u file
< Redirekcija na ulaz
<< "ovaj" dokument (redirekcija na ulaz)
| Pipe izlaz.
& Startanje procesa u pozadini
; Separator naredbi u istoj liniji
* Zamijeni bilo koji znak u fajlu
? Zamijeni jedan znak u fajlu
[] Zamijeni bilo koji znak unutar zadanog intervala
() Izvrši u subshell-u.
`` Substitut izlaza uz naredbu
"" Dio quote (mogu i varijable i komande).
'' Cijela quote
\ Quote slijedeće znakove
$var Upotrijebi vrijednost za varijablu
$$ Process id.
$0 Command name.
$n n-ti argument (0<n<9).
$* Svi argumenti kao jedna riječ
# Početak komentara
bg Pozadinsko izvršavanje
break Prekid loop izraza
cd Promjena direktorija
continue Nastavak loop programa

97/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell

Simbol/ comanda Značenje/akcija

echo Prikaži na izlazu (npr. ekran)


eval Evaluiraj argument
exec Izvrši
fg Foreground izvršavanje
jobs Prikaži aktivne procese
kill Terminiraj proces
newgrp Promijeni u novu grupu
shift Shift-aj poziciju parametara
stop Suspendiraj proces u pozadini
suspend Suspendiraj proces u foreground-u
time Vrijeme naredbe
umask Postavi dozvole nad fileom
unset Obriši varijablu ili funkciju
wait Čekaj dok završi proces u pozadini

98/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell

KARAKTERISTIKE RAZLIČITIH SHELL-OVA

Osobina Opis Bourne Korn C

Omogućuje kontrolu izvršavanja scripti pomoću


Kontrola toka Da Da Da
konstrukcija kao sto su petlje uslovne naredbe i sl.

Mogućnost praćenja interrupt i drugih signala koje


Praćenje signala Da Da Da
šalje UNIX.

U cilju povećanja sigurnosti sistema, nekim


Restriktivni shell korisnicima se dodjeljuje shell sa ograničenim Da Da Ne
mogućnostima.

Korisniku stoji na raspolaganju mogućnost da


alias komande preimenuje neke komande ili da vise komande Ne Da Da
ujedini u jednu.

Mogućnost da se više podataka identificira istim


nizovi Ne Da Da
imenom.

Mogućnost da se komande smještaju u buffer,


historija komandi Ne Da Da
kasnije modificiraju i ponovo izvršavaju.

Kompletiranje Mogućnost da se u komandnoj liniji automatski


Ne Da Da
imena fajlova dovrši ime započetog fajla.

Mogućnost obavljanja aritmetičkih operacija nad


Integer aritmetika Ne Da Da
varijablama u scriptama bez UNIX komandi.

Mogućnost praćenja i pristupa poslovima koji se


Kontrola posla Ne Da Da
odvijaju u pozadini.

Editovanje Mogućnost da se prethodna ili tekuća komandna


Ne Da Ne
komandne linije linija modificira tekst editorom.

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

UNIX COMMAND LINE

100/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line

1. UVOD

1.1 Kratka povijest Unixa


UNIX operativni sustav je razvijen kasnih 1960-ih godina prošloga stoljeća, u AT&T
Bell laboratorijima u Murray Hill-u, New Jersy. U popularizaciji UNIX-a veliku ulogu
odigrali su sveučilišta i koledži. Odjel za računalne znanosti (Computer Science Department)
na Kalifornijskom Sveučilištu Berkeley, učinio je toliko značajnih promjena UNIX-a pa je
jedna od dvije najpopularnije verzije koje se danas koriste uppravo nazvana po tom
sveučilištu - Berkeley Software Distribution (BSD) UNIX sustava. Druga velika verzija je
AT&T's UNIX System V. Mnoge implementacije objedinjuju svojstva od oba sustava.

1.2 Značajke i sastavni elementi


Upravo stoga, što je UNIX osnovno bio oblikovan od strane programera koji su ga
koristili za vlastite projekte, jedna od njegovih najjačih značajki leži u tome što on pruža
odličnu softversku razvojnu okolinu. UNIX ima veliki opseg moćnih uslužnih programa i
alata koji pružaju korisniku da lako izgrade svoje sustave i aplikacije. Isto tako sadrži
nekoliko komandnih prevoditelja, koji se nazivaju shells (ljuske) i one se takoñer mogu
koristiti kao programski jezici visoke razine.
UNIX operativni sustav sadrži 4 osnovne komponente:

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

2.1 Uvod u Shell-ove


Kernel (jezgra) predstavlja srž operativnog sustava i u trenutku kada se računalo
“podiže”, kernel se učitava u memoriju. Uobičajeno je da korisnik nikada direktno ne vrši
interakciju sa samim kernel-om. Nakon što se kernel učita u memoriju on nakon toga inicira
učitavanje programskih alata (programi koji su pohranjeni na hard disku).
Jedan od takvih alata je Shell. On je pokrenut u tzv. korisničkom načinu rada i nema
nikakve sistemske privilegije. Shell predstavlja sučelje izmeñu operativnog sustava i
korisnika. On interpretira tj. prevodi naredbe koje korisnik upisuje i time upućuje operativni
sustav na izvršenje te naredbe. Korištenje Shell-a kao programskog jezika za prevoñenje
omogućeno nam je upotrebom Shell skripti.
Kao što je ranije navedeno, postoje dvije porodice shell-ova: prva bazirana na Bourne
shell-u (ova porodica takoñer uključuje Korn (ksh) i Bourne-again (bash) shell-ove), I druga
porodica bazirana na Berkeley/C shell-u.

2.1.1 Odreñivanje trenutačnog Shell-a


Da bi smo odredili koji shell trenutačno koristimo možemo se poslužiti nekima od
sljedećih naredbi za dobivanje ove informacije. Niže su prikazana četiri primjera za csh. Prva
tri , echo, env i finger, će prikazati samo login shell. Ako smo pozvali novi shell onda ove
naredbe neće utjecati na taj novi shell. Naredba ps ispisuje informacije o svim
trenutno aktivnim porcesima.
% echo $SHELL
prikazuje vrijednost naziva varijable koja slijedi nakon znaka $; primjer ispisa: /bin/csh
% env or printenv
prikazuje sva definiranja stanja varijable, uključujući SHELL; primjer ispisa:
SHELL=/bin/csh
% finger your_username
prikazuje korisničke informacije; primjer ispisa:
Login name: username
Directory: /afs/fnal.gov/files/home/room3/{username} Shell:
/bin/csh
I na kraju,
% ps
prikazuje procese, uključujući shell; primjer ispisa:
PID TTY TIME COMD
6264 pts/11 0:03 csh

102/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line

2.1.2 Pokretanje Shell-a


Shell je pokrenut procesom login-a. Novi shell se takoñer može pokrenuti svakim
pozivom terminalskog prozora ili skriptom (shell script). Zadnjim poljem unosa u datoteci
unosa lozinke, odreñeno je koji će shell biti pozvan. U uobičajenom UNIX datotečnom
sustavu sljedećom naredbom možemo prikazati naš unos lozinke:
% grep ^username /etc/passwd
Nakon login-a, proces prijave poziva shell program (npr., /usr/local/bin/tcsh ili
/usr/local/bin/bash) i prebacuje na njega kontrolu. Shell prikazuje upozorenje s kojim
nam daje do znanja da je spremno za naš unos. Osnovna upozorenja UNIX-a su simboli koji
upućuju koji je shell pozvan:

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

2.1.3 Izlaženje iz Shell-a


Da bi smo izašli iz shell-a i vratili se u stanje pozivanja shella, koristimo naredbu
exit. Za svaki subshell ponavljamo naredbu exit da bi se vratili na predhodni; a kada doñemo
do početnog shell-a završava se terminalska emulacija I terminalski prozor je zatvoren I
nestaje. Umjesto naredbe exit možda ćemo morati koristiti <Ctrl-d>.

2.2 Osobine raspoloživih Shell-ova


Ovaj dio je izdvojen iz Shell Choice, A shell comparison (28. rujna 1994.) autora
Arnaud Taddeia iz CERN. Njegov članak na jedanaest stranica sadrži sažeti opis šest
najvažnijih shell-ova i pruža odličnu usporedbu karakteristika meñu njima. Može se pronaći
na sljedećim linku : http://consult.cern.ch/writeup/shellchoice.
Od 6 glavnih shell-ova, četiri su iz porodice Bourne: sh, ksh, bash, i zsh; a dva su iz
porodice Berkeley/C: csh, tsch.
Ljuske koje su trenuačno najnovije su tcsh (Berkeley/C), i bash i zsh (Bourne). One
takoñer predstavljaju ljuske koje su javno dostupne/besplatne (za razliku od onih koje dolaze
od strane isporučitelja (vendor-supported). Javno dostupne ljuske su jednake na svim
platformama.
Neke od zajedničkih osobina novijih shell-ova su:

• specifične pokretačke (startup) datoteke

103/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line

• startup datoteke su iste za bilo koju platformu


• specifične shell varijable
• specifične ugrañene naredbe (built-in commands)

Ljuska tcsh je zapravo poboljšana csh ljuska. Neke dodatne funkcije tcsh ljuske su:

• poboljšan mehanizam okončavanja (programabilan za naredbe,imena datoteka, imane


varijabli, imena korisnika..)
• mogućnost višelinijskog editiranja (editiranje komandne linije korištenjem emacs ili
vi-style ključa povezivanja)
• poboljšana sintaksa ekspresije datoteke
• korekcija pravopisa
• poboljšan odzivnik (prompt)
• prolaženje gore/dolje kroz listu arhiva

Sljedeća sažeta tablica prikazuje vrijednosti svake pojedine ljuske.

++
dobro
+
postojeće
-
loše
--
izostavljeno

Kriterij sh ksh bash csh tcsh

Podesivost - + ++ + ++

Izvršenje naredbi + + + + ++

Dovršenje -- + ++ + ++

Ureñivanje linija - + ++ - ++

Zamjena naziva + + ++ + ++

Arhiv -- + ++ + ++

Preusmjeravanje i cijevi (pipes) + + + + +

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

2.3 Shell Scripts


Kao što je i ranije spomenuto, UNIX ljuska se ,ože koristiti kao programski jezik za
prevoñenje. Osim izvršavanja naredbi ljuske unutar skripte, takoñer možemo:

• kreirati i koristiti varijable


• procesirati (čitati) argumente
• testirati, granati, ponavljati
• vršiti U/I

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

3. ZNAČAJNI KONCEPTI UNIX-a


Ovo poglavlje upoznaje nas sa naredbenom strukturom UNIX-a, kao i s mnogim
važnim naredbama i konceptima. Karakteristike koje su predstavljene u ovom poglavlju čine
jezgru UNIX operativnih sustava, i mnogi od tih alata su vrlo moćni i fleksibilni. Neke od
ovih osobina su specifične samo za ljuske.

3.1 Radno okruženje


3.1.1 Programi, Naredbe i procesi
Program predstavlja izvršnu datoteku. On se poziva na način da unesemo njegovo ime (to
je naredba pridružena izvršavanju), nakon kojeg često slijede opcije, argumenti, i/ili
parametri komandne linije. Shell dozvoljava 3 tipa naredbi:

• 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

Ispisuje /dir1 (nije stvorena podljuska)


% (cd /dir2; pwd)
korištenjem okruglih zagrada stvorena je podljuska, ali su tada naredbe upitne; ispisuje
/dir2. Kontrola se tada vraća osnovnom (parent) procesu.
% pwd
ispisuje /dir1 budući da trenutni proces nije bio pod utjecajem predhodne komandne
linije.
Većina ugrañenih naredbi postoji unutar svih ljuski, ali može biti razlika u
argumentima, opcijama, ili izlaznim formatima izmeñu točno definiranih naredbi pojedinog
shell-a. Neke naredbe za dani shell nisu dostupne na svim platformama.

3.1.2 Interpretacija naredbi od strane shell-a


Kada ljuska primi naredbu, ona ju tumači krz tri (Bourne shell) ili četiri (C shell) prolaza.
Naravno, ako se naredba nalazi aliasu, onda je potreban dodatan prolaz za zamjenu.

• Prvi prolaz za C shell porodicu traži znak ! i zamjenjuje ga s predhodnom naredbom.


• Sljedeći prolaz (prvi prolaz u Bourne shell porodici) zamjenjuje višeznačnik (korišten
u nazivu proširenja i standardnom proširenju).
• Sljedeći prolaz traži znak $ da bi zamijenio imena varijabli sa njihovim
vrijednostima.
• Završni prolaz razdjeljuje elemente komandne linije praznim mjestom da bi došao do
završne, doslovne naredbe koji ljuska mora izvršiti.

Postoje načini da se spriječi tumačenje specijalnih znakova u svakom od prolaza.


Prekodiranje znakova sa kosom crtom (\) radi za sve specijalne znakove; višeznačnici mogu
biti zatvoreni sa jednostrukim ili dvostrukim navodnicima; varijable mogu biti zatvorene sa
jednostrukim navodnicima; a prazna mjesta su ignorirana ako je argument koji ima prazno
mjesto zatvoren sa jednostrukim ili dvostrukim navodnicima.
Da bi ilustrirali operacije koje se izvode u svakom prolazu, u sljedećoj tablici prikazana su
tri primjera koja koriste echo naredbu i jednaki niz podataka, prvo pod jednostrukim, nakon
toga pod dvostrukim navodnicima, i na kraju bez njih. Naredba echo ispisuje nizove
podataka u standardnom ispisu. Pretpostavimo da su datoteke označene s q* zapravo qq i
qqq, i da je vrijednost varijable a je foo.

Naredba--> echo 'q* $a x' echo "q* $a x" echo q* $a x

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

navodnicima ili su pod nema promjena u dvostrukim (varijabla $a bez


dvostrukim navodnicima, varijablama) navodnicima je navodnika je
zamjenjene su sa svojim zamjenjena s zamjenjena s
vrijednostima. vrijednošću) vrijednošću)

Nakon završnog prolaza, echo echo echo


naredbeni niz je slomljen 'q* $a x' q* foo x qq
ovisno o praznim mjestima. (zbog navodnika (zbog dvostrukih qqq
Odvojeni elementi su izlistani naredbeni niz je navodnika naredbeni foo
okomito. tretiran kao niz je tretiran kao x
jedno) jedno)
(nema navodnika;
svaki argument
tretira se odvojeno)

Kada upišemo orginalnu q* $a x q* foo x qq qqq foo x


naredbu, sustav vrati cijeli niz:
.

3.2 Unos naredbe


Naredba UNIX-a predstavlja ugrañena naredbu ili ime izvršne datoteke koju će
operativni sustav učitati i izvršiti. Kada se ukaže odzivnik (prompt) u njega mozemo unijeti
naredbu na način da upišemo ime naredbe I bilo koje opcije, argumente nakon kojih slijedi
potvrda unosa (pritisak na tipku Return).
Treba imati na umu da naredbe UNIX-a nisu konzistentnog formata. Naredbe, formati,
argumenti i opcije mogu varirati kod raznih tipova UNIX-a. Ovdje ćemo biti općeniti što više
je moguće i opcije će biti opisane onako kako su širom prihvaćene.

3.2.1 Oblik naredbe


Osnovni oblik UNIX naredbe je:
% command -option(s) argument(s)
gdje je:
%
standardni csh odzivnik
command
je naredbeno ime UNIX alata ili usluge.
option(s)
odreñuje kako se odvija izvršenje naredbe; opcije skoro uvijek predhode crti (-) i
ispisane su jedna iza druge.

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

3.2.2 Razne karakteristike komandne linije


• Da bi smo ispravili unos možemo koristiti tipku za brisanje (Delete ili Backspace) za
brisanje znakova jedan-po-jedan, ili tipku Kill za brisanje cjelokupne linije
• Ako su naredbe odvojene znakom točka-zarez ( ;) u komandnu liniju tada možemo
unijeti više od jedne naredbe. Naredbe će se tada izvršavati jedna za drugom.
• Ako želimo nastaviti naredbu u novu liniju, možemo ili nastaviti s unosom (bes
pritiska na tipku Return), ili možemo pritisnuti tipku backslash (\) te nakon nje Return
(bez razmaka) i tada nastaviti s unosom u novoj liniji.
• Možemo koristiti okrugle zagrade da grupiramo naredbe. Budući da je podljuska
stvorena za svaku grupu ova mogućnot se može koristiti da bi spriječili promjenu
trenutačnog okruženja. Takoñer se može koristiti za preusmjeravanje svih izlaza od
naredbi kojese smatraju kao grupe.
• Tipkanje unarijed pomaže čak i ako znakovi budu presreteni od strane izlznog
sadržaja.

3.3 Opoziv naredbi


Opiziv naredbi poprilično je različit u pojedinim ljuskama. Jedna zajednička
karakteristika za sve ljuske koje podržavaju opoziv naredbe je mehanizam history. On sadrži
popis naredbi koje su prije već bile unesene i dozvoljava im da se ponovno budu izvršene.
Varijabla history, koja je postavljena na neki broj u vremenu logiranja u start-up datotekama,
odreñuje broj naredbi koje su spremljene u listu. Varijabla savehist specificira koliko se
naredbi može spremiti za našu sljedeću sesiju nakon što napravimo log out. Naredbom
history prikazujemo popis spremljenih naredbi:
% history

Pojedinačno ćemo prodiskutirati sljedeće ljuske: csh, tcsh, i bash/ksh. Za


ljusku sh ne postoji naredba s kojim bi pozvali takav mehanizam.

110/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line

csh

Za ovu ljusku ne postoji editiranje izvorne komandne linije.


Vrlo je jednostavno napraviti opozivanje history naredbi koristeći standardnu csh
sintaksu. Koristimo sljedeće naredbe.

!! Ponovno izvrši prethodnu naredbu

!n Ponovno izvrši naredbu n iz history popisa

!text Ponovno izvrši zadnju naredbu koja počinje sa text

!?text? Ponovno izvrši zadnju naredbu koja sadrži text

Na primjer, da bi ponovno izvršili 4. naredbu iz history popisa, upisujemo:


% !4
i da bi ponovno izvršili zadnju naredbu koja počinje sa ls:
% !ls
Znak dolara ($) može biti korišten za opozivanje zadnje riječi naredbe. !$ čini supstituciju
zadnje riječi zadnje naredbe
Na primjer, možemo provjeriti sadržaj od myfile.f i onda ga and then prevesti
korištenjem sljedeće sekvence naredbi:
% less myfile.f
% f77 !$
Nekoliko zgodnih karakteristika možemo koristiti tokom ovakvog opoziva naredbi a
one su: pregled - preview (p) i zamjena - substitute (s). Da bi zamijenili niz naredbi u
prethodnoj naredbi I pregledali ga prije izvršavanja, koristimo sljedeću sintaksu:
% !:p:s/oldstring/newstring
Da bi dobili isto za naredbu nth u history popisu, koristimo:
% !n:p:s/oldstring/newstring
Za izvršavanje nakon pregleda (i/ili zamjene), jednostavno upišemo:
% !!

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:

• U datoteku .profile ili .shrc uključujemo linijsku postavku -o editor u


bilo kojoj datoteci, gdje je editor ili emacs ili vi (ovo ima prednost ako su donje
varijable drugačije postavljene)
• Postavimo ili EDITOR ili VISUAL okruženje varijable jedom od ovih editora

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

Oba stila, csh i ksh za opoziv naredbe su podržana.

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.

4.1 Putanja (path)


Kada izdamo naredbu shell program analizira komandnu liniju i onda je ili odmah
direktno izvrši ili traži izvršnu datoteku s tim imenom u bilo kojem direktoriju koji su
specificirani kao naša pretraživačka putanja - search path, koja je kontrolirana varijablom
PATH. Ako datoteka nije pronañena niti u jednom direktoriju pretraživačke putanje, tada nam
ljuska javlja da naredba nije pronañena. Datoteka se možda nalazi negdje na našem disku, al
nije na putanji stoga ju ljuska ni ne može naći
Za csh porodicu, naša .login datoteka sadrži set path liniju za varijablu ljuske
path. Možemo maknuti znak komentara iz linije (#) i uključimo dodatne direktorije u
prikazanom formatu:
set path=($path /dir1 /dir2... )
Ili možemo promijeniti okruženje varijable PATH (takoñer u .login), na način:
setenv PATH "${PATH}:/dir1:/dir2"
Za sh porodicu, mičemo komentar i dodajemo nove direktorije u PATH liniju u našoj
.profile datoteci:
PATH=$PATH:/dir1:/dir2...
Pored svega, ako dodamo izvršnu datoteku u jedan od direktorija u našoj
pretraživačkoj putanj, može se desiti da ćemo se morati odjaviti (log out) i ponovno prijavit
(log in), ili ćemo morati ponovno napraviti unutarnje tablice koje korsiti shell sa naredbama
rehash (csh) ili hash (sh).

4.2 Standardno preusmjeravanje ulaza i izlaza


Ljuska i mnoge UNIX naredbe uzimaju svoje unose iz standard input-a (stdin),
pisane izlaze iz standard output-a (stdout), I pisane greške izlaza iz standard error-a
(stderr). Po osnovnom postavljanju, standardni ulaz je spojen sa terminalskom tipkovnicom
a standardni izlaz I greška sa terminalskim ekranom.
Način na koji možemo indicirati kraj datoteke na standardnom ulazu ili terminalu je
pomoću <Ctrl-d>.
Preusmjeravanje U/I-a, na primjer prma nekoj datoteci, postiže se specificiranjem odredišta na
komandnoj liniji upotrebom tzv. redirection metacharacter-a nakon kojeg slijedi željeno
odredište.

C Shell porodica

Neke od formi preusmjeravanja za C shell porodicu su:

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

>& Preusmjeri standardan izlaz i standardnu grešku

< Preusmjeri standardan ulaz

>! Preusmjeri standardan izlaz; prepiši preko datoteke ako postoji

>&! Preusmjeri standardan izlaz i standardnu grešku; prepiši preko datoteke ako postoji

| Preusmjeri standardan izlaz na drugu naredbu (pipe)

>> Pridodaj standardni izlaz

>>& Pridodaj standardni izlaz i standardnu grešku

Forma naredbe sa standardnim preusmjeravanjem ulaza i izlaza glasi:


% command -[options] [arguments] < input file > output file
Ako koristimo csh i ne raspolažemo sa noclobber varijabilnim postavkama, onda
ćemo korištenjem > i >& za preusmjeravanje izlaza, prepisati sve postojeće datoteke koje
koriste to ime. Upotrebom varijable noclobber sprječavamo da se to dogodi. Korištenjem
znakova >! i >&! uvijek forsiramo datoteku da bude prepisana. Da bi smo pridodali izlaz
nekoj postojećoj datoteci koristimo znakove >> i >>& .
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
% pwd; ls -l > out
Preusmjeri izlaz od ls naredbe samo prema datoteci koja je nazvana out
Preusmjeravanje ulaza može biti vrlo korisno, na primjer ako imamo napisan
FORTRAN program koji očekuje ulaz s terminala ali mi ga želimo čitati iz datoteke. U
sljedećem primjeru, myprog, program koji je napisan da čita standardni ulaz i ispisuje
standardni izlaz, preusmjeren je da čita myin i piše myout:
% myprog < myin > myout
Možemi potisnuti preusmjeravanje izlaza i/ili grešaka tako da ih šaljemo prema null
device-u, /dev/null. Primjer prikazuje preusmjeravanje izlaza i greški:

114/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line

% who >& /dev/null


Za preusmjeravanje standardne greške i izlaza prema različitim datotekama, možemo
koristiti grupiranje:
% (cat myfile > myout) >& myerror

Bourne Shell porodica

Bourne shell koristi ddrugačiji format za preusmjeravanje koji uključuje brojeve.


Brojevi se odnose opisne brojeve datoteka (0 standardni ulaz, 1 standardni izlaz, 2 standardna
greška). Na primjer, 2> preusmjerava opisnu datoteku 2, ili standardnu grešku. &n je sintaksa
za preusmjeravanje na specifičnu datoteku otvaranja. Na primjer, 2>&1 preusmjerava 2
(standardna greška) prema 1 (standardi izlaz); ako je 1 bio preusmjeren prema datoteci, 2 isto
tamo odlazi. Drugi opisni brojevi datoteka su dodijeljeni sekvencijalno drugim otvorenim
datotekama ili mogu biti eksplicitno napomenuti u shell skripti. Neke forme za
preusmjeravanje u Bourne shell porodici su:

Znak Akcija

> Preusmjeri standardan izlaz

2> Preusmjeri standardnu grešku

2>&1 Preusmjeri standardnu grešku prema standardnom izlazu

< Preusmjeri standardni ulaz

| Pipe-aj standardni izlaz prema drugoj naredbi

>> Pridodaj na standardni izlaz

2>&1| Pipe-aj standardni izlaz i standardnu grešku prema drugoj naredbi

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

$ pwd; ls -l > out


Preusmjeri izlaz od ls naredbe samo prema datoteci koja je nazvana out
Preusmjeravanje ulaza može biti vrlo korisno, na primjer ako imamo napisan
FORTRAN program koji očekuje ulaz s terminala ali mi ga želimo čitati iz datoteke. U
sljedećem primjeru, myprog, program koji je napisan da čita standardni ulaz i ispisuje
standardni izlaz, preusmjeren je da čita myin i piše myout:
$ myprog < myin > myout
Možemi potisnuti preusmjeravanje izlaza i/ili grešaka tako da ih šaljemo prema null
device-u, /dev/null. Primjer prikazuje preusmjeravanje izlaza i greški:
$ who 2> /dev/null
Za preusmjeravanje standardne greške i izlaza prema različitim datotekama, možemo
koristiti grupiranje (treba primjetiti da grupiranje nije potrebno u Bourne shell-u):
$ cat myfile > myout 2> myerror

4.3 Cijevi (pipes)


UNIX koristi koncept cjevovoda (pipe) da bi povezao standardni izlaz jednog
programa direktno sa standardnim ulazom drugog programa. Ovo je specificirano na način da
se dvije naredbe odvoje sa pipe operatorom, znakom okomite crtice (|). Općenito, format
izgledao ovako:
% command1 | command2 | ...
gdje, naravno, svaka naredba može imati argumente u opcije. Da bi shell implementirao pipe-
ove naredbi, on razdjeljuje stvara (fork) višestruke procese. Na primjer ako pokrenemo
naredbu:
% history | more
shell dva puta dijeli proces; prvi (grandchild) pokreće history, a drugi (child) pokreće more
(cjevovod završava nakon pridodavanja desnog deskriptora datoteke prema desno), I početni
(parent) shell čeka da proces bude završen. Naredba history, koja je ugrañena,
impementirana je direktno u prvi (grandchild) shell proces, dok naredba more zahtjeva exec
sistemski poziv.
Naredba tee može se koristiti za slanje izlaza prema datoteci isto kao prema nekoj
drugoj naredbi.
% who | tee whoout | sort
Ovo stvara datoteku naziva whoout koji sadrži orginalni who izlaz. Takoñer sortira
who izlaz i šalje ga prema standardnom izlazu, odnosno terminalnom ekranu. Sljedeći primjer
šalje (nesortirani) who izlaz prema datoteci i ekranu:
% who | tee whoout

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:

• more (and less)


• grep
• awk
• sort

Kombinacija UNIX filtera grep, awk, i sort zajedno sa upotrebom cjevovodi vrlo je
moćna.

more and less

Filter more dozvoljava nam da prikažemo izlaz na terminalu ekran po ekran.


Pritiskom na tipku Spacebar prelazimo na sljedeći ekran, a tipkom q izlazimo.
Filter less je mnogo fleksibilnija varijanta standardnog UNIX alata more. Naredba
less ispisuje izlaz (npr. odreñene datoteke) na terminalu ekran po ekran isto kao i naredba
more, ali ujedno i dozvoljava pomicanje prema nazadbut u datoteci (pritiskom na tipku b
vracamo se nazadza cijeli ekran) kao i pomicanje prema naprijed. Isto tako možemo izvršiti
pomicanje za odreñen broj linija umjesto cijele stranice. Za pregled datoteke pomoću less
filtea, upišemo:
% less [options] [filename]...
Nakon prikaza stranice s informacijama, more i less prikazuju znak dvotočke (:) kao
odzivnik na dnu ekrana i čekaju se daljnje instrukcije.

LESS(1) UNIX System V LESS(1)


NAME
less - opposite of more
SYNOPSIS
less [-[+]aABcCdeEimMnqQuUsw] [-bN] [-hN] [-xN] [-[z]N]
[-P[mM=]string] [-[lL]logfile] [+cmd]
[-ttag] [filename]...
OPIS
Less je program sličan programu more (1), ali on dozvoljava pomicanje
unazad unutar datoteke, ali ujedno u pomicanje prema naprijed.
Nadalje, less ne treba čitati cijelu ulaznu datoteku prije početka, pa
stoga s velikim ulaznim datotekama pokreće se brže nego neki tekstualni
editori poput vi (1). Less koristi termcap (ili terminfo na nekim
sustavima), pa se može izvršavati na raznolikim terminalima. Takoñer
postoji ograničena podrška za kopiju (hardcopy)
:

117/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line

Možemo tražiti uzorke u datoteci unoseći /pattern na less odzivniku. Za nastavak


pretraživanja istog uzorka koristimo kosu vrtu (/). Daljnja prednost je u tome što less ne mora
čitati kompletnu ulaznu datoteku prije početka izvršavanja, pa stoga s velikim ulaznim
datotekama pokreće se brže nego neki tekstualni editori poput vi.

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.

Neke karakteristike awk filtera:

• mogućnost pregleda tekstualne datoteke koja je napravljena od zapisa i polja u


tekstualnoj bazi
• upotreba varijabli za manipuliranje bazama podataka
• upotreba aritmetičkih i string operatora
• upotreba uobičajenih programerskih grañi kao što su petlje ili uvjeti
• mogućnost stvaranja formatiranih izvještaja

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

Za naredbenu liniju, sintaksa glasi:


% awk 'instructions' files
Uzmimo kao primjer, da datoteka test sadrži samo liniju Hello, world. Naredba:
% awk '{ print }' test
stvara izlaz:
Hello, world
Višestruke naredbene linije mogu se unositi na način da odvojimo naredbe
navodnicima ili upotrijebimo mogućnost više-linijskog ulaza Bourne shell-a. awk programi
uglavnom su smješteni u datoteci gdje mogu biti testirani i modificirani. Sintaksa za pozivanje
awk-a sa datotečnom skriptom glasi:
% awk -f 'script' files
gdje -f indicira da je slijedi ime datoteke skripte.
awk interpretira svaku liniju ulaznih podataka kao zapis, a svaku riječ na toj liniji,
razgraničenu praznim mjestom ili tabom, kao polje. Ova polja možemo pozvati kao dijelove
ili kao procedure. $0 predstavlja cjelokupnu ulaznu liniju; $1, $2, ... upućuju na poziciju
individualnih polja na ulaznoj liniji. Kao primjer, recimo da datoteka personnel sadrži popis
zaposlenika tj. njihovih imena, prezimena i adresa. Naredba:
% awk '{ print $1}' personnel
proizvesti će izlaz tipa:
John
Alice
Mary
Eric
Da bi upotrijebili karakteristiku poklapanja uzoraka awk filtera, trebamo biti upoznati
sa metaznakovima koji se koriste u uobičajenim izrazima. Uzorak je zatvoren unutar kosih
crta (/) na naredbenoj liniji ili u skripti. Kada awk pročita ulaznu datoteku, tada pokušava
spariti svako pravilo poklapanja uzoraka unutar skripte. Samo one linije koje se poklapaju sa
odreñenim uzorkom su objekti aktivnosti. Ako nikakava aktivnost nije specificirana, linija
koja se poklapa s uzorkom se ispiše (izvršavanje print je standardna aktivnost).
Pretpostavimo da je u našem personnel primjeru, Alice iz Illinoisa (IL) i Eric iz
Iowa-e (IA). Da bi dobili kompletan zapis sa uzorcima IL ili IA, možemo izdati naredbu:
% awk '/I./{print}' personnel
gdje se metaznak . poklapa sa bilo kojim jednim znakom. Jednostavnije možemo napisati:
% awk '/I./' personnel
i dobili bi isti rezultat u oba slučaja:
Alice Jones 834 S. Jefferson St., Batavia, IL 60510
Eric Smith 24 Birch St., Albert City, IA 50510

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

% sort [options] [field-specifier] [filename(s)]


Na primjer, počinjemo sa sadržajem datoteke personnel:

John Smith 75 South Ave., Denver, CO 80145


Alice Jones 834 S. Jefferson St., Batavia, IL 60510
Mary Fahey 901 California St., San Francisco, CA 94121
Eric Smith 24 Birch St., Albert City, IA 50510

pokrećemo naredbu:
% sort personnel
da bi smo posložili sadržaj datoteke kao što je dolje napisano:

Alice Jones 834 S. Jefferson St., Batavia, IL 60510


Eric Smith 24 Birch St., Albert City, IA 50510
John Smith 75 South Ave., Denver, CO 80145
Mary Fahey 901 California St., San Francisco, CA 94121

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

N je vrijednost s kojom se smanjuje ili povečava prioritet. Vrijednosti se kreću od 1 do


19, pri čemu je početna vrijednost 10. Što je veća nice vrijednost to je prioritet procesa manji i
on se sporije odvija. (Postajete ljubazniji prema ostalim korisnicima). Ako nije broj zadan
komanda nice sama stavlja prioritet na 4. Ako je zapovijed izostavljena vrijednost je
postavljena za trenutni shell. Ako je zapovijed zadana ona se odvija prema zadanom prioritetu
u sub-shellu. Nice se može korsititi da se smanji prioritet naredbe ili shella koji traži velike
zahtjeve od sistema ali trenutno nije prijeko potreban.

Primjetimo da postoji i druga nice naredba /bin/nice. To nije ugrañena naredba. Ako
napravite man nice, dobit ćemo informacije i o ovoj.

5.2 Pozadina, prvi plan odgoñeni poslovi


Poslovi se mogu odvijati i u pozadini tako da možete obavljati druge zadatke u prvom
planu. Poslovi se uvijek nalaze u jednom od ova tri stanja: odvijaju se u prvom planu, odvijaju
se u pozadini ili su odgoñeni. Svaki posao koji se namjerava pokretati u pozadini mora imati
definiran izlaz i greske u datoteku.

Postoje dva načina za stavljanje posla u pozadinu:

121/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line

1. Korištenje & posebnog znaka (metachartater)

Jedan od načina da se posao pokrene u pozadini je da dodamo ampersand metakarakter na


kraj komandne linije.

U prvom primjeru standardni izlaz preusmjeren je u datoteku:


% command > output-file &

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.

Kada se posao u pozadini završi, to se ispisuje prije sljedećeg prompta(tako da poruka


ne prekida trenutni aktivni posao).

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.

Sljedeća komanda se koristi da se uskladi:


% stty [-]tostop

Minus označava negaciju, što znači da će pozadinski posao nastavit se izvršavati i


kada pokuša pisati na izalz terminala i da će se njegov izalz prikazati na eranu terminala.
No, svaki program koji pokuša promijeniti ovaj mod bit će sprijećen kad nije u trenutno
aktivan ili tostop nije postavljen.

Ispis poslova

Naredba jobs ispisuje listu trenutno aktivnih 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

trenutni I sljedeći odnose se na naredbu fg. Opcija -1 ispisuje I process


ID.

Naredbe koje se koriste za kontroliranje poslova.

Postoji nekoliko naredbi koje se koriste za kontroliranje poslova,a to su:

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 naredba može se koristiti za pomicanje poslova iz pozadine u prednji plan:

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

Ovom naredbom postavljamo posao broj 5 u prednji plan

% %1

Ovom naredbom postavljamo posao broj 1 u prednji plan

% %

Ovom naredbom postavljamo trenutni posao u prednji plan

BG naredba

123/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line

Nakon što zaustavimo posao u prednjem planu možemo ga ponovo pokrenuti u


pozadini sa bg naredbom.

Bg stavlja trenutni ili navedeni posao u pozadinu, nastavljajući sa njima ako su bili
zaustavljeni.

U sljedećim primjerima job stoji kao oznaka job number


% bg %[job]

STOP naredba:

Služi za zaustavljanje poslova slično kao I suspend control character

KILL naredba

Odgoñeni ili pozadinski posao možete prekinuti sa ovom naredbom.

% kill %job

5.3 Rasporeñivanje redoslijeda poslova: at i cron naredbe


Unix raspolaže dvjema metodama za pokretanje poslova u odreñeno vrijeme.

AT

AT je prva metoda. Ona omogučava korisniku da postavi posao u red čekanja za


kasnije izvršavanje.
Format naredbe je:

% at time [date] [+increment]

At izčitava naredbe iz standardnog izlaza. Standardni izlaz i standardni greška bit će


poslani kasnije ako nisu preusmjereni.

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:

% at now + 1 hour < myscript

At se izvršava u Bourneovom shellu po defaultu. Ako vam je ta naredba potrebna i u


drugom Shell, precizije u C shellu onda se koristi slijedeći odlomak:

% /bin/csh << xxxxx


? at now + 2 minutes
? source .cshrc
? alias > aout
? <Ctrl-d> (followed by carriage return)

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.

warning: commands will be executed using /bin/sh


job 826157640.a at Wed Mar 6 18:14:00 1996

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)

Redak script označava datoteku koja sadrži liniju #!/bin/csh na početku.


Naredbe u skripti će biti izvršene u csh.

125/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line

Naredba cron

Druga metoda za pokretanje poslova u odreñeno vrijeme je crontab nareba.


Napravljena je za poslove koji se moraju obavljati redovito, npr. Jednom po noći, jednom u
tjednu itd. Primjetimo da cron kao i at koristi bourneov shell za rad tako da izlaz mora biti
specificiran korištenjem sintakse za bouneov shell. Skripte će se izvoditi u ono shellu koji je
naveden u skripti. Ako nije navedena niti jedna sell po defaultu se koristi Bourneov shell.

Oblik naredbe cron je:

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

Naredba može poprimiti i sljedeće opcije:


-r miče crontab datoteku
-l ispisuje sadržaj crontab datoteke

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

0 22 * * 5 /usr/buckley/weekly 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

Ova naredba će izvršiti inkrementalni backup od ponedjeljka do četvrtka i potpuni back up u


22 sata u petak.

127/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line

6. ZAPOČINJANJE RADA NA UNIX SUSTAVU


6.1 Prijavljivanje na sustav
Postoje dva osnovna načina za prijavljivanje na UNIX sustav:

1. Prijava direktno na radnu stanicu


2. Prijava putem mreže

telnet host
Sustav će zatražiti prvo korisničko ime, a nakon toga i lozinku.
Primjer:
Connecting to host "fsgi01"......success.

IRIX System V.4 (fsgi01)

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

There are no available articles.


<fsgi01>

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

Kada se prijavimo na sustav, pokreće se serija skripti za prijavu koje definiraju


funkcionalnost terminala i postavljaju okoliš.

Prilikom prijave sustsav će ispisati:

Terminal Type is {termtype}

Gdje argument tretype označava najbolju pretpostavku od kuda ste se


prijavili.

C shell

C shell pokreće dvije datoteke prilikom prijave. To su .cshrc i


.login. Te dvije datoteke se nalaze u polazišnom direktoriju..

Bourne Shell

128/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line

U Bourne shell pokreću se .profle i .shrc datoteke. One se nalaze u


polazišnom direktoriju. Ponekad ksh pokreće .kshre umjesto .shrc.

Odjava sa sustava

Naredbe za odjavu su drugačije za C i Bourneov shell. No za svaki je


moguće kreirati .logout skriptu i korisiti je umjesto standarnih naredbi.
Ako na vašem sustavu koristite AFS tada je najbolje izdati naredbu unlog
prije odjave.

C shell

Odjaviti se možemo na dva načina:

% logout
ili
% exit

Ukoliko imamo pokrenute procese bit ćemo obaviješteni da su ti


poslovi zaustavljeni. Kontrolna znamenka eof , koja je uobičajeno
postavljena CTRL+D je uobičajeni način da se odjavimo sa UNIX sustava.

Bourne Shell

U bourneovom shell takoñer postoje dva načina, a to su:

$ exit
or (on some systems):
$ <Ctrl-d>

6.2 UNIX prompt


Nakon što se uspješno ulogiramo dobit ćemo prompt. Defaultni UNIX prompt obično
pokazuje početni shell. Uobičajeno % označava C, dok $ označava Bourne shell.

Defaultni prompt se može promijenti nmijenjajući start up datoteke.

U csh, uključen je . login datoteka.

set prompt='newprompt '

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.

export PS1; PS1="newprompt "

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.

Neke uobičajene kratice za sve sisteme su:

Ime Znak Funkcija

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

werase <Ctrl-w> Briše zadnju upisanu riječ

kill <Ctrl-x> Briše upisanu liniju

intr <Ctrl-c> Prekida program koji se trenutno izvodi

rprnt <Ctrl-r> Ponovno ispisuje linij

flush <Ctrl-o> Zaustavlja izlaz iz terminala

susp <Ctrl-z> Zaustavlja program koji se trnutno iuzvodi i sprma ga u pozadinu

stop <Ctrl-s> Zaustavlja prikaz, za nastavak potrebno je pritisnuti start tipku

start <Ctrl-q> Nastavlja prikaz nakon što je pritisnuta stop tipka

eof <Ctrl-d> Šalje programu eof znak

Da bi se dobio ispis trenutnih podešenja na svom terminalu potrebno je upisati


sljedeću naredbu:

% stty –a

Unix se pouzdaje u hrdwaresku tabulatorku komandu, no ako iz nekog razloga


tabulator ne radi kako treba ili kako mi želimo moguće je promijeniti to pomoću tab naredbe.
Ukoliko tab naredbu napišemo u ovom obliku

% tabs

130/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line

Dobit ćemo standardno podešenje tabulatora koje na UNIX sistemima iznosi 8


razmaka.

Posebne napomene za Backspace i delete tipke

U nekim posebnim okolnostima postavke tipkovince potrebno je izdati odreñene


setove naredbi kako bi backspace tipka radila kako je zamišljeno.

% stty erase "^?"


% stty intr "^C"
% stty kill "^X"

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

Posebne napomene za korištenje strelica za korisnike ksh

Da bi koristili tipke odnosno strelice gore dolje i time omogučili editirranje u


komandnoj liniji kao i opoziv naredbi moramo uključiti sljedeće linije i .arc datoteku

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

8. SPECIJALNI ZNAKOVI (Metacharacters)


Kose crte \-backslsh i / forward slash

Backslash se koristi u komandnoj liniji za maskiranje specijalnog značenja znaka koji


slijedi nakon njega (bez razmaka izmeñu njih) tako da interpreter komandne linije shvaća taj
znak doslovno. Naziva se još i znak za navoñenje.

Primjer:

% command \<CR>

Ova naredba uzrokuje da se ignorira prijenos i istovremeno dopušta da unoste


komandu na liniju.

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

Navodnici i okrugle zagrade

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.

Dvostruki navodnici postavljeni ispred i iza stringa „string“ kazuje takoñer


interpreteru da string uzima kako je napisan, no omogućava prikazivanje varijabli koje slijede
sa $ znakom.

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:

1. Podudaranje pojedinačnog znaka ili niza znakova


2. podudaranje bilo kojeg proizvoljnog znaka
3. podudaranje bilo koje klase znakova
4. podudaranje zadanih uzoraka samo na početku i na kraju komandne linije
5. podudaranje bilo kojeg alternativnog uzorka

Uobičajene izraze koriste naredbe vi. Grep i awk. Grep označava global regular
expression printer.

Popis uobičajenih izraza:

.
točka odgovara bilo kojem pojedinačnom znaku
Primjer: . ing odgovara svim znakovima kojima završavaju sa ing

• predstavlja 0 ili više ponavljanja prethodnog znaka

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

Primjer: ay odogovara ay na kraj u linije. Today

Postavljen na početak izraza, odgovara početku linije

Primjer T odgovara T na početku linije.


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

uglate zagrade odreñuju klase znakova

[...]
odgovara bilo kojem znaku ili nizu znakova koji se nalazi unutar zagrada

Primjer: [bB]ill odgovara bill ili Bill

136/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb UNIX command line

10. SHELL VARIJABLE I VARIJABLE OKOLIŠA


Svaki proces na UNIXU odvija se u posebnom okolišu. Okoliš se sastoji od varijabli
okoliša od kojih svaka ima dodijeljenu vrijednost. Kada se prijavimo na sustav on kreira
odreñene login datoteke. One se inicijaliziraju tablicama koje sadrže te varijable za svaki
proces. Kada se te datoteke proslijede shelu ta tablica postaje dostupna shellu. Kada glavni
proces pokrene podrñeni proces, taj podreñeni proces je kopija je nadreñenog procesa.
Okolišne varijable se najčešće zadaju velikim slovima.

10.1 Shell varijable


Shell sadrži set varijabli koje se nazivaju shel varijablama. Ove varijable uzrokuju da
shell radi na odreñeni način. Shell varijable su lokalne za shel u kojemu se i definiraju. One su
nevidljive za procese. Zadaju se malim slovima za C-shell i velikim za Bourne shell.

C shell

C shell explicitno razlikuje shell i okolišne varijable. Shell varijable se definiraju


pomoću set naredbe i briše se pomoću unset naredbe. Glavna svrha .cshrc datoteke je da
definira takve varijable za svaki proces.
Primjer.

% set name=value

Ova naredba definira ili mijenja već postojeću varijablu.

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.

% set name=(value1 value2 value3)

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.

Za brisanje ili promjenu vrijednosti shell varijabli koristimo naredbu

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

Da bismo vidjeli vrijednost pojedine varijable koristimo naredbu echo:

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

Uglate zagrade su obavezne i ne dodaje se razmak izmeñu imena i otvorenih zagrada.


Ako želimo upisati novu vrijednosti varijable postojećoj shell varijabli tada koristimo sljedeću
sintaksu.

% set name=prepend_value${name}
ili
% set name=${name}append_value

Kada se shell pokrene on inicijalizira automatski 4 varijable i sadrže iste vrijednosti


kao i pripadajuće varijable okoliša. To su user, term, home i path. Ukoliko se bilo koja
varijabla promjeni promijenti će se i pripadajuće varijable okoliša.

10.2 Vrijable okoliša


Varijable okoliša se postavljaju pomoću setenv naredbe, a prikazuju se pomoću
printenv ili env naredbe ili pomoću echo naredbe. Neke varijable okoliša se postavljaju
automatski.

Formati naredbi su:


% setenv [NAME value]
% unsetenv NAME

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

% setenv NAME "value1 value2 ..."

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

% setenv NAME "${NAME}${XYZ_VAR}"

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.

Shell varijable se definiraju pomoću izjava za dodjijeljivanje, a poništavaju se pomoću


unset naredbe.

Oblik izjave dodjeljivanja je:

$ NAME=value[; export NAME]

U ovoj naredbi ne smije biti razmaka izmeñu znaka jednako.

Oblik unset naredbe je:

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

$ NAME="value1 value2 ..."

Vrijednosti svih sadašnjih varijabli se mogu prikazati pomoću set naredbe.

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.

Da bismo vidjeli vrijednost pojedine varijable koristimo naredbu echo:

% 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

10. 3 Važne varijable


DISPLAY

Ako želimo koristiti X-window aplikaciju, varijabla okoliša $DISPLAY se mora


postaviti točno. Ovisno o tipui terminala koji koristimo moramo pronaći tu varijablu.

UNIX radna stanica na lokalnom prozoru, pokrećemo funame –n da dobijemo naziv.

HOME

Home direktorij je na vrhu grane u datotečnom sustavu. Odreñen je najčešće sa


korisničkim imenom. Vrijednost varijable HOME predstavlja putanja vašek home direktorija.
Naredba cd bez argumenata vraća nas na početak tj. $HOME. U svim shellovim osim sh, kada
se koristi znak tilda u proširenju imena datoteke proširit će vrijednost varijable.
Primjer:

~/myfile

Je ekvivalent $HOME/myfile.

~{username} je ekvivalent $HOME direktoriju trenutnog korisnika.

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.

LINES and COLUMNS

Ove varijable kontroliraju broj linija i kolona koje se prikazuju na ekranu.

CSH sintaksa je:

% setenv LINES n
% setenv COLUMNS n

Mijenjajući vrijednost argumenta n mijenjamo vrijednost linija i kolona.

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

Ova varijabla postoji u csh,tcsh,ksh i bash. Kada je inicijalizirana, ova varijabla


sprečava da slučajno prepišemo datoteku kada preusmjerimo izlaz. Takoñer sprečava da
kreiramo datoteku kada želimo dodati izlazu nekonzistentnu datoteku.

Noclobber nema utjecaja na cp ili mv. Korisna je samo kod preusmjeravanja.

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

Format naredbe alias je:

% alias [new [old]]

Kada se unese nova (new) naredba ona zamijenjuje staru

Primjeri:

% alias ll='ls -l'

Zamijenjuje naredbu ls –l sa ll. To znači da kada unesemo ll izvršit će se naredba ls –l

% alias dir='ls -l | grep ^d'

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.

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.

Format naredbe alias je:

% alias name = 'alias_contents'

% alias ll='ls -l'

Zamijenjuje naredbu ls –l sa ll. To znači da kada unesemo ll izvršit će se naredba ls –l

% alias dir='ls -l | grep ^d'

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č

UNIX COMMAND LINE

145/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line

1. UVOD

1.1. Razumijevanje unix ljuske

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.

Ako koristimo GUI sučelje, za dobivanje komandne linije i pokretanje ljuske,


otvorimo prozor Terminal.

146/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line

2. PROUČAVANJE UNIX LJUSKE

Ljuska interpretira svaku naredbu koju utipkamo i proslijeñuje je operativnom sustavu.


Kada se prijavimo za rad u UNIX sustavu, automatski se pokreće program pod nazivom login
ljuska. Izvršava se neprestano nadgledajući io prevodeći naše programe.

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.

Posao ljuske je dohvaćanje naredbi, njihovo interpretiranje i osiguravanje pokretanja


odgovarajućih programa.

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

2.1. Preusmjeravanje ulaza i izlaza

Mnogi programi očekuju ulazne podatke od terminala ili s tipkovnice. UNIX


predstavlja unos preko tipkovnice datotekom pod imenom stdin. Predstavlja izlaz terminala
datotekom pod imenom stdout. Možemo preusmjeriti ulaz i izlaz tako da umjesto dolaska s
terminala ili odlaska na terminal, ulaz dolazi iz datoteke ili se izlaz u datoteku šalje.

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

mail marko < info

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:

date > now

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:

date >> report

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

2.2. Dopuna imena datoteka znakovima za zamjenu

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.

2.2.1. Zvijezdica kao znak za zamjenu

Koristimo zvjezdicu (*) za zamjenu bilo kojeg niza znakova.

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.

Zvijezdica se može koristiti bilo gdje u nizu znakova.


Primjer: zvijezdica kao opasan znak za zamjenu
Naredba rm * briše sve datoteke u našem direktoriju! Uobičajena pogreška je slučajno
brisanje svih datoteka kada imamo namjeru izbrisati skupinu datoteka s istim prefiksom ili
sufiksom. Ako unesemo rm * txt, UNIX najprije briše sve datoteke, a zatim pokušava obristi
datoteku imena txt. U tom trenutku nema više ni jedne datoteke. Zbog sigurnosti koristimo
argument –i uz naredbu rm ako želimo koristiti zvijezdicu za dopunu imena datoteka.
Naredba rm –i *txt tražiti će dozvolu za brisanje svake datoteke.

150/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line

2.2.2. Sažetak znakova za dopunu imena datoteka

Tablica 1.: «Wild cards»

Sažetak znakova za dopunu imena datoteka


Znak Primjer Značenje

Predstavlja jedan znak. Primjer ispisuje na


ekranu datoteku čija su imena oblika sales.yy
? ls sales.9?
gdje yy predstavlja godinu
(sales.90,sales.91,..)

Predstavlja jedan znak zadanog opsega.


[] rm sales.9[0-3] Primjer briše skupinu datoteka čija su imena
sales.90,sales.91,sales.92,sales.93.

Predstavlja bilo koju skupinu znakova osim


točke kada je to prvi znak u imenu datoteke.
* Cat sles*>allsales
Primjer pohranjuje redom u datoteku allsales
sve datoteke kojima imena počinju sa sales.

151/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line

2.3. Povezivanje procesa kanalima

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

Kanalima možemo povezati nekoliko procesa.

Primjer 7.
Ispis na pisaču sortiranog popisa podataka u svim datotekama čija imena počinju sa sales:

cat sales* | sort | lp

152/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line

2.4. Izvršavanje procesa u pozadini

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.

sort sales > sales.sorted &

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

2.5. Pogled u različite ljuske

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

aliasi mogu biti korišteni za naredbe koje imaju argumente.

Primjer 10.
Želimo li popisati imena svih datoteka tekućeg direktorija poredana silaznim redoslijedom
prema vremenu zadnjeg prepravljanja i tu naredbu zamjeniti aliasom timedir:

alias timedir=″ls -art″

naredba ls služi za popisivanje datoteka; argument –a odreñuje sve datoteke, argument –t


sortira po vremenu zadnje promjene,i argument –r reda datoteke obratnim, silaznim
redoslijedom.

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

2.6. Dostupne ljuske?

Želimo li doznati kojom se ljuskom koristimo, unesemo naredbu:


echo $SHELL

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.

Da bi vidjeli da li je C ljuska dostupna unesemo: csh.


Ako vidimo postotak (%) kao prompt, C ljuska je dostupna i aktivna (exit za povratak u
prethodnu ljusku).Za ostale ljuske analogno, za Korn unesimo ksh i vidimo prompt ($).
Login ljuska odreñena je u datoteci sa lozinkama. Identifikacija svakog korisnika
predstavljena je zapisom ili redom u datoteci koja odreñuje šifre. Zadnje polje u zapisu
odreñuje našu login ljusku.
Za promjenu te ljuske, moramo to izmjeniti. Prelazak na drugu ljusku relativno je
jednostavan.

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

3. RAD S UNIX LJUSKAMA

Ljuska prihvaća naredbe, interpretira ih i odreñuje operativnom sustavu način


izvoñenja naredbi koji smo zadali.

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:

 Ne moramo prepisivati niz naredbi


 Odreñujemo korake potrebne za postizanje cilja samo jedanput
 Pojednostavljujemo rad sebi i drugima

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

3.1. Stvaranje script datoteke ljuske

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

3.2. Naredba echo

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

prethodna naredba prikazuje slijedeći red na ekranu terminala:

Please stand by ...

Slijedeća naredba smješta Please stand by ... u datoteku messg:

echo «Please stand by ...» > messg

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:

echo «Let's see who is on the system.»


who
echo «Any appointments?»
calendar
date
echo «Finished»

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

3.4. Pisanje programa korištenjem ljuski

Da bi smo napisali program korištenjem ljuski, moramo poznavati varijable i kontrolne


strukture.

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:

 Struktura odlučivanja (if..then..else, case, ...)


 Iterativne strukture ili petlje (for, while)

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

3.4.1. Korištenje izravnog pridjeljivanja

Metoda izravnog pridjeljivanja vrijednosti ima slijedeći oblik:

ime_varijable=vrijednost_varijable

Ako vrijednost_varijable sadrži praznine, zatvorite vrijednost


navodnicima.
Ljuska vraća vrijednost varijable kad god opazi $ koji slijedi ime
varijable.

Primjer 14.

myemail=marko.pintac@zg.htnet.hr
myoffice= «Kućni 23»

echo «My email adress is $myemail»


echo «My office is $myoffice»

Pretpostravimo da moramo učestalo kopirati datoteke u direktorij /corporate/info/public/sales.


Za kopiranje datoteke current u taj
direktorij, moramo unijeti naredbu:

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

Sada za kopiranje datoteke current u taj direktorij, koristimo ovu


naredbu (PUNO KRAĆU!)

cp current $corpsales

Ljuska zamjenjuje $corpsales vrijednošću varijable corpsales, a zatim izvršava naredbu za


kopiranje.

163/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line

3.4.2. Korištenje naredbe read

Naredba read uzima slijedeći red ulaza i pridjeljuje ga varijabli.

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

Naredba read zaustavlja script i čeka na ulaz s tipkovnice.

164/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line

3.4.3. Korištenje parametara komandne linije

Kada ljuska interpretira naredbu, svakom članu komandne linije


pridružuje ime varijable. Članovi komandne linije su nizovi znakova
odvojeni prazninama ili tabulatorom.
Varijable pridružene članovima komandne linije su $0, $1, $2, ...,
$9. Tih deset varijabli odgovaraju mjestima članova u redu. Ime
naredbe je $0, prvi argument ili parametar je $1, itd.

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

Izlaz script datoteke ljuske je slijedeći:

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

3.4.4. Korištenje izlaza naredbe

Varijabli možemo pridjeliti rezultat izvršene naredbe.

Primjer 18.
Pohrana tekućeg direktorija u varijablu mar:

mar='pwd'

Naredba sa značenjem mora biti okružena apostrofima.

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

3.4.5. Posebne varijable ljuske

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.

Tablica 2.: varijable koje definiraju okružje

Varijable koje definiraju okružje


Ime varijable Značenje

HOME Puno ime staze do našeg osnovnog direktorija

PATH Direktoriji u kojima ljuska traži naredbe

SHELL Ime tekuće ljuske

MAIL Puno ime staze do našeg poštanskog sandučića

LOGNAME Naše ime kojim se prijavljujemo za rad u sustavu

TZ Vremenska zona za naredbu date


PS1 Prompt sustava
TERM Tip terminala koji koristimo

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

Razlozi zašto je to bolje napraviti su:


• Lakše je čitati komandnu liniju
• Ako je naš osnovni direktorij promjenjen, naredba i dalje radi
• $HOME uvijek predstavlja osnovni direktorij onog tko koristi naredbu. Ako napišemo
naredbu korištenjem $HOME, drugi je isto mogu koristiti.

3.4.5.2. Path

Varijabla PATH popisuje direktorije u kojima ljuska traži naredbe.


Ljuska pretražuje direktorije redoslijedom kojim su popisani.

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

Primjer 23. Korištenje 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

# Kopiranje datoteka u direktorij /tmp, brisanje iz tekućeg


direktorija, čisćenje direktorija /tmp i konačno slanje pošte
korisniku
# Najprije ćemo kopirati sve parametre u direktorij /tmp
cp $* /tmp
# Obriši datoteke
rm $*
# Stvaramo datoteku koja će sadržavati poruku koja će biti
# poslana elektronskom poštom
# Ime datoteke je msg praćeno identifikacijskim brojem
# procesa, npr. msg1208
msgfile=/tmp/msg$$
# konstruiramo poruku za slanje poštom
date > $msgfile
echo «Filovi će biti obrisani iz /tmp» >>$msgfile
# Dohvati iz direktorija tmp popis datoteka koje će biti
# obrisane
# -mtime +10 dohvaća sve datoteke koje nisu bile
# promjenjene 10 ili više dana, -print prikazuje imena.
find /tmp –user $LOGNAME –mtime +10 –print >>$msgfile
# Obriši datoteke iz direktorija /tmp
find /tmp –user $LOGNAME –mtime +10 –exec rm {} \;
# Pošalji poruku poštom
mail $LOGNAME <$msgfile
# Očisti
rm $msgfile

Program rm koristi se za brisanje pronañenih datoteka. Par vitičastih zagrada


predstavlja položaj imena svih datoteka proslijeñenih naredbi rm. Zadnja dva znaka, \
;, potrebna su naredbi find (korištenje obrnute kose crte za proslijeñivanje znaka
programu bez prevoñenja od strane ljuske).

171/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line

3.4.6. Korištenje posebnih znakova u programima ljuske

Apostrofe (') možemo koristiti kako bismo učinili da ljuska ignorira posebne znakove.

Primjer 24.

grep '^Marko ' kupac

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

3.4.7. Programiranje pomoću kontrolnih struktura

Unutar ovog poglavlja nećemo se detaljno upoznavati sa korištenjem kontrolnih struktura


poput kontrolne strukture case, if..then..else..fi. i iterativnih struktura poput petlji for i while
petlje koje nam služe u programiranju jer se svaki programer susreo s tim naredbama unutar
jednog od programskih jezika u kojem je radio poput Pascala, C-a ...

3.4.7.1. Kontrolna struktura case

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

3.4.8. Korištenje naredbe test

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.

Tablica 3.: Mogućnosti korištenja naredbe test s datotekama

Mogućnosti korištenja naredbe test s datotekama

Opcija Značenje

-f Uspješno ako datoteka postoji i ako je to obična datoteka

-d Uspješno ako je datoteka direktorij


-r Uspješno ako datoteka postoji i može se čitati
-s Usješno ako datoteka postoji i nije prazna

-w Uspješno ako datoteka postoji i u njoj se može pisati

-x Uspješno ako datoteka postoji i ako je izvršna

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

Tablica 4.: Mogućnosti korištenja naredbe test za usporeñivanje brojeva

Mogućnosti korištenja naredbe test za usporeñivanje brojeva

Opcija Značenje
-eq Jednak
-ne Nije jednak

-ge Veći od ili jednak

-gt Veći od

-le Manji od ili jednak


-lt Manji od

Primjer 25.: Prikaz pozdrava tijekom dana

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

4. PRILAGODBA LJUSKE UNIX-A POTREBAMA


KORISNIKA

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

Pretpostavimo da naredba echo ispisuje Thursday. Sada pretpostavimo da upisujemo i


izvodimo slijedeću script datoteku ljuske koja se zove whatday:

# 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

Sada unesimo slijedeće:

chmod +x whatday
today=Cetvrtak
whatday
echo $today

Slijedeći redovi pojaviti će se na ekranu:

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

4.1. Dodjeljivanje aliasa naredbi

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. UPRAVLJANJE VIŠESTRUKIM PROCESIMA

UNIX je višekorisnički i višezadaćni operativni sustav.

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

Tablica 5.: Naredbe za kontrolu višekorisničkih i višezadaćnih mogućnosti

Naredbe za kontrolu višekorisničkih i višezadaćnih mogućnosti

Naredba Akcija
At Pokreće izvršavanje naredbe u zadano vrijeme

Batch Izvšava naredbe kada opterećenost sustava to dopušta

Cron Izvršava rasporeñene naredbe


Kill Zaustavlja procese

Nice Prilagoñava prioritet procesa prije početka izvoñenja

Dopušta procesima nastavak izvršavanja nakon naše odjave iz


Nohup
sustava
Ps Ispisuje informacije o procesima
Renice Prilagoñava prioritet procesa koji je već pokrenut
Who Prikazuje korisnike prijavljene u sustavu

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

5.2. Pokretanje višestrukih procesa


5.2.1. Pokretanje procesa u pozadini

Proces možemo pokrenuti u pozadini tako da nakon naredbe koja će pokrenuti proces stavimo
znak &.

Primjer 27.

$lp report.txt $ <RETURN>


3146
$

3146 je identifikacijski broj procesa pokrenutog naredbom lp.

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

5.2.2. Korištenje kanala za pokretanje višestrukih procesa

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

5.3. Korištenje naredbi za rasporeñivanje

Naredbe za rasporeñivanje korisne su za izvoñenje zadataka u vremenu kada sustav nije


prezauzet. Dobre su za izvoñenje script datoteka ljuske za vanjske usluge, poput pretraživanja
baza podataka u vremenu kada je to najeftinije.

5.3.1. Izvršavanje naredbi u zadano vrijeme korištenjem naredbe


at

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.

Tablica 6.: Sažetak naredbi at

Sažetak naredbi at

Format Akcija

Izvoñenje posla u zadani sat (hh) i minutu


at hh:mm
(mm)

Izvoñenje posla u zaadani sat i minutu,


at hh:mm month day year
mjesec, dan, i godinu

at –l Popis rasporeñenih poslova

at –r job_id Opoziv posla s brojem job_id

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>

Nakon završetka naredbe at vidimo:


Job 756603300.a at Wed Dec 21 01:23:00 2005

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

5.3.2. Izvršavanje dugačkih zadataka pomoću naredbe batch

Naredba batch dopušta operativnom sustavu odabir najprikladnijeg vremena za izvršavanje


procesa. Kada rasporeñujemo posao naredbom batch, UNIX počinje rad na procesu i radi na
njemu kad god opterećenje sustava nije preveliko, kao i oni pokrenuti korištenjem naredbe at.
Korisno je naredbe koje želimo izvršiti pomoću naredbe at ili batch staviti u datoteku kako ih
ne bi morali ponovno utipkavati. (npr. želimo li koristiti batch za rasporeñivanje naredbi iz
datoteke getdone, unesemo: batch<getdone).
Format naredbe batch ovog je oblika: unesemo popis naredbi u redu iza naredbe batch. Popis
naredbi zaključuje se s <Ctrl-d>.

186/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line

5.3.3. Rasporeñivanje izvoñenja naredbi pomoću naredbi cron i


crontab

Naredbe at i batch bazirane su na osnovi jednokratnog izvoñenja. Za rasporeñivanje naredbi


ili procesa na osnovi redovitog izvršavanja, koristimo posredno program cron. Vremena i
datume kada želimo izvršiti naredbu odreñujemo u datoteci crontab. Vremena mogu biti
izražena u minutama, satima, danima, mjesecima ili danima u tjednu.
Program cron pokreće se samo jednom, kada se sustav boota.
Obični korisnici ne bi smjeli imati dozvolu izravnog izvršavanja programa cron. Cron bi
trebao biti naveden u script datoteci ljuske kao jedna od naredbi koja se izvršava prilikom
bootanja sustava, administrator sustava ne bi trebao pokretati cron utipkavanjem njegovog
imena.
Jednom pokrenut cron(chronograph), provjerava repove za izvršavanje at poslova. Provjerava
i imaju li obični korisnici ili administrator sustava poslove rasporeñene cron datotekama.
Ne postoji li posao kojeg br trebalo obaviti, cron prelazi u neadekvatno stanje (stand by), budi
se svake minute provjeravajući ima li naredbi koje treba izvršiti.
Cron koristi vrlo malo resursa sustava.
U sustavima najčešće su datoteke crontab pohranjene u direktoriju /usr/spool/cron/crontabs.

187/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line

5.3.3.1. Sastavljanje rasporeda periodičnog izvršavanja poslova


naredbom crontab

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.

Sintaksa naredbi koje unosimo u datoteku:


Prva pet polja rezervirana su za definiranje vremena, moramo navesti svih pet polja, a
koristimo zvijezdicu u koliko neko želimo ignorirati.
minute sati dan_u_mjesecu mjesec_u_godini dan_u_tjednu naredba
U datoteci crontab možemo imati koliko god želimo unosa i odrediti vrijeme izvoñenja za
svaki od njih.

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

Opcije naredbi crontab za popunu polja koja odreñuju vrijeme izvoñenja


Polje Raspon vrijednosti
Minute 0 do 59
Sati 0 do 23 (ponoć je 0)
dan_u_mjesecu 1 do 31
Mjesec_u_godini 1 do 12
dan_u_tjednu 0 do 6 (nedjelja je 0)

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:

30 07 * * 01 sort /usr/wwr/sales/weekly |mailx –s «Weekly Sales» jura

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:

09,11,14,16 10 03,09 01,02,04 stanje_na_burzi

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.

Naredba crontab ima tri opcije:

• -e otvara našu datoteku korištenjem tekst editora


• -r briše crontab datoteku iz direktorija crontabs
• -l ispisuje sadržaj trenutačno aktivne crontab datoteke

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

5.4. Praćenje procesa u višezadaćnom okružju

5.4.1. Utvrñivanje tko radi u sustavu naredbom who

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.

Korištenje zaglavlja u popisu korisnika

Opcije koje možemo koristiti u okviru naredbe who:


• -u Popisuje samo korisnike koji su trenutačno prijavljeni za
rad u sustavu
• -H Prikazuje zaglavlje iznad svakog stupca
Tablica 8.: Navodi koji se pojavljuju u zaglavlju.

Format izlaza naredbe who


Polje Opis
NAME Popisuje imena kojima se korisnici prijavljuju za rad u sustavu
LINE Popisuje liniju ili korišteni terminal
TIME Popisuje vremena prijave korisnika za rad u sustavu
Popisuje sate i minute od poslijednje aktivnosti na dotičnoj liniji.
Točka (.) se ispisuje ako je aktivnost nastupila tijekom zadnje
IDLE
minute vremena sustava. Ako je proteklo više od 24 sata od zadnjeg
korištenja linije, ispisana je riječ old.
PID Popisuje identifikacijski broj procesa korisnikove login ljuske.
Popisuje sadržaj polja za komentare ako su komentari uključeni u
COMMENT
/etc/inittab ili ako postoje veze putem mreže.

191/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line

5.4.2. Izvješće o statusu procesa korištenjem naredbe ps

Naredba ps izvještava o statusu procesa. Možemo je koristiti za utvrñivanje koji procesi su


aktivni, da li su završeni, imaju li poteškoća, koliko dugo se izvršavaju, koje resurse koriste,
koji relativni prioritet imaju, koji im je PID. PID je potreban ako želimo prekinuti proces.
Bez opcija, naredba ps pospisuje PID svakog procesa vezanog uz našu trenutačno aktivnu
ljusku.

5.4.2.1. Nadgledanje procesa pomoću naredbe ps

Uobičajena svrha naredbe ps je nadgledanje poslova koji se izvršavaju u pozadini i drugih


procesa u sustavu.

Tablica 9.: Zaglavlja izlaza naredbe ps

Zaglavlja izlaza naredbe ps

Polje Objašnjenje

PID Identifikacijski broj procesa

TTY Terminal s kojeg je proces pokrenut

Ukupno vrijeme izvršavanja procesa izraženo u minutama


TIME
i sekundama

COMMAND Ime izvršavane naredbe

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 &

Za nadgledanje izvršavanja ovog procesa, unijet ćemo naredbu ps i vidjeti:

PID TTY TIME COMMAND


16390 tty02 0:15 sort
16489 tty02 0:00 mailx
16492 tty02 0:00 ps
16478 tty02 0:00 sh
16491 tty02 0:06 tee
16480 tty02 96:45 cruncher

193/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Unix command line

Tablica 10. Najčešće korištene opcije naredbe ps

Najčešće korištene opcije naredbe ps


Opcija Akcija
Prikazuje informacije o svim procesima, ne samo o onima pokrenutim
-e
s našeg terminala
-f Prikazuje potpuni popis
-l Prikazuje dugačak popis

Ograničava popis na podatke o vremenu izvoñenja procesa pokrenutih


s terminala navedenih u popisu tlist (primjer da bio popisali procese
-t tlist
pokrenute s terminala (npr. tty01 i tty02), koristimo slijedeću naredbu:
$ ps –t «01 02» <RETURN>)

Želimo li nadgledati sve procese u sustavu i dobiti potpuni popis


(primjer povezivanje naredbe kanalom s naredbom grep $LOGNAME,
-ef
procesi koji pripadaju našem korisničkom imenu biti će prikazani, dok
će svi drugi procesi biti izbačeni iz popisa: ps –ef | grep $LOGNAME)

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

5.5. Uspostava kontrole nad višestrukim procesima

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

Prva stvar s kojom se korisnici susreću na UNIX/LINUX operativnom sistemu je


command shell ili ljuska. Shell je termin za tekstualno okruženje pomoću kojega korisnik
komunicira sa sistemom koristeći se tastaturom (input) i monitorom (output). Korisnik
instrukcije sistemu zadaje u vidu znakovnih naredbi.
Izvorni UNIX System Shell poznat pod imenima sh ili Bourne shell tokom godina
doživio je mnogo nadogradnji tako da danas postoji više inačica shell-a (csh, tcsh, bash, ksh,
psh, zsh) od kojih svaka nudi odreñena poboljšanja u odnosu na standardni sh shell.
Uobičajeni shell u Linux operacijskom sustavu je bash (Bourne Again Shell) i svi
daljnji primjeri odnositi će se većinom na bash ili sh shell.
Ako niste sigurni koji shell program koristi vaša distribucija, ukucajte sljedeće:

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

BOURNE AGAIN SHELL

Bourne Again Shell dobio je ime po Steve Bourne-ovom shell-u i kreiran je za


korištenje u GNU projektu. GNU projekt je započet od strane Richarda Stallmana, iz Free
Software Fondation (FSF) sa ciljem stvaranja Unix kompatibilnog sistema i zamjene svih
komercijalnih Unix programa sa slobodno distribuiranim programima. Na ovaj način nismo
samo dobili besplatne programe već i novi koncept, tzv. copyleft. Copyleft je zapravo licenca,
a programi koji su napravljeni pod tom licencom mogu biti slobodno distribuirani.
Bash ljuska je bila razvijena kako bi postala standardna ljuska na GNU sistemu i prvi
put je objavljena u Nedjelju 10. Siječnja l988. godine. Brian Fox je napisao originalnu verziju
i nastavio rad u sljedećoj dekadi. U ranoj l989. godini pridružio mu se i Chet Ramey, koji je
ovoj ljusci dao velik doprinos u rješavanju mnogih greški te dodavanjem mnogih opcija. Chet
Ramey je kasnije zamijenio Briana Foxa i postao voña projekta. Prateći GNU principe, sve
verzije bash-a poslije 0.99 su slobodno dostupne iz FSF. Danas je bash standardni shell na
Linuxu a besplatna verzija je široko korištena na Unix operativnim sistemima.

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

Osnovni principi u Unixu:


 Portabilan – napisan u C programskom jeziku
 Dostupan za široki spektar računala – od malih desktop računala do velikih
superračunala
 Vrlo dobar i pouzdan operativni sustav
 Programsko okružje je vrlo bogato i produktivno

Filozofija iza Unix sistema


 Programi sa jednostavnim input/output sučeljem
 Programi su kreirani kao mali nezavisni moduli
 Vrlo velika mogućnost kombiniranja više programa – izlaz jednog
programa postaje ulaz drugog (pipe).
 Programi su pisani u C(C++) programskom jeziku kao i sam operacijski
sustav i vrlo su dobro integrirani u sustav.

«Sve u Unix sustavu je datoteka » - B.W. Kernighan

Tipovi datoteka:
 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

Standardna struktura direktorija na Unix sustavima:

202/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash

UNIX FILE SYSTEM

Ovdje ću nabrojati neke od važnijih direktorija te njihov sadržaj:

/bin binarni podaci (programi - komande)

/dev ureñaji (devices)


/dev/null nul-device
/dev/tty terminal ureñaji

/lib lib datoteke

/include include header datoteke

/home korisnički home direktoriji

/usr korisničke datoteke


/usr/bin korisničke binarne datoteke (programi)
/usr/bin/openwin X windows datoteke
/usr/lib korisničke lib datoteke
/usr/include
/usr/local lokalne host datoteke

/tmp temp direktorij

/sbin administratorski alati

Path (staza, put do odreñene datoteke na Unix sustavu)

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

203/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash

• Relativni dir1/dir2/ – gleda se od sadašnjeg direktorija


../ – nadreñeni direktorij (parent)
~/ – home direktorij ~user
– user-ov home direktorij

Nekoliko naredbi za prikaz i manipulaciju datotekama

ls [options] [dir dir ...] – daje listu datoteka u direktoriju

opcije –a –l –F –R ....

pwd – ispisuje radni direktorij

cd[dir] – mijenja radni direktorij

df – traži disk
du – ispisuje iskorištenost prostora na disku

mkdir dir – stvara novi direktorij


rm file.... – briše file ili čak cijelo stablo direktorija

cp file1 file2..... target – kopira datoteke

mv file1 file2..... target – premješta datoteke


cat [file1 file2...] – prikaz datoteka

more file1 file2.... – prikaz datoteka stranu po stranu

file file... – doznaje tip datoteke

tail file ... – prikazuje zadnji dio datoteke

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 –k keyword - daje listu man stranica u uključujući i ključne riječi

A kako bismo potražili više informacija o samoj man naredbi?

Jednostavno: man man

Ovo je primjer prikaza na ekranu nakon upisa naredbe:

man ls

da biste mogli pregledati stranu po stranu :

man ls | more

205/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash

LS(1) FSF LS(1)


NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by default). Sort entries
alphabetically if none of –cftuSUX nor --sort.

-a, --all
do not hide entries starting with .

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


AUTHOR
Written by Richard Stallman and David MacKenzie.
REPORTING BUGS
Report bugs to <bug-fileutils@gnu.org>.
COPYRIGHT
Copyright (C) 2001 Free Software Foundation, Inc. This is free software; see the
source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.
SEE ALSO
The full documentation for ls is maintained as a Texinfo manual. If the info and
ls programs are properly installed at your site, the command info ls should give you
access to the complete manual.

ls (fileutils) 4.1 March 2002 LS(1)

206/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash

UNIX TEXT EDITORI

 vi – standardni Unix editor (staromodan)


 emacs i xemacs – GNU (free software) editor i njegova X windows verzija
 jed – mala emacs varijanta
 textedit – openwin editor
 dtpad – CDE text editor

Što se rada u shelu tiče najkorišteniji su vi i emacs.

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

Shell je samo program i s obzirom na to postoje više različitih verzija:

• Bourne shell (sh) – dostupan na svim Unix sustavima


• C shell (csh) – shell sa C sintaksom
• TC shell (tcsh) – ukratko kao C shell sa emacs stilom command editing-a
• Korn Shell (ksh) – novi shell standard, unaprijeñeni Bourne shell – emacs ili vi stil
command editing-a
• Bourne Afain Shell (bash) – spoj C i Korn shell – kompatibilan sa Bourne shell-om

Defaultni shell – specificiran je u /etc/passwd datoteci. Kao što sam spomenuo na


početku, ako želite saznati u kojem shell-u radite utipkajte:

echo $SHELL

208/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash

Razni shell-ovi se pozivaju različitim naredbama (naravno, ako su instalirani):

sh, bash, ch, tcsh...

exit - napušta pokrenuti shell

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

chsh /bin/bash

Usporedbu, što može koji shell možemo vidjeti ovdje:

209/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash

UPOTREBA SHELL NAREDBI

Opći model:

command [options] [arguments]

wc –l file

korištenje više opcija: ls –aF

korištenje više argumenata: cat file1 file2 file3

Korištenje regularnih izraza:

? zamjenjuje jedan znak (character)

* zamjenjuje nula ili više znakova

[nnn] zamjenjuje bilo koji od znakova u uglatim zagradama

[!nnn] zamjenjuje sve znakove osim onih u uglatim zagradama

[n-m] zamjenjuje bilo koji znak u zadanom rasponu

Primjer:

ls [fF]ile[0-3]

mogući ispisi: File0 file0 File1 file1 File2 file2

*(Više o regularni izrazima s primjerima možete pročitati u seminaru «Regular


expresions» kolega Manuela Vidonisa i Zorana Zoričića)

210/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash

OSTALI SPECIJALNI ZNAKOVI KOJE SHELL INTERPRETIRA

;&()|\^~%{}$#´″'@*?[]!<Return><Space><Tab>

Evo nekoliko primjera:

# komentira karakter

; ponavljanje više komandi u jednoj liniji

cd .. ; pwd

'command' expandira komandu npr.:

echo ″Radni direktorij je 'pwd'″

ispisuje

Radni direktorij je /home/user

Kako koristiti specijalne znakove?

\ prima slijedeći znak kakav je, bez interpretiranja

'.........' prima cijeli izraz bez interpretiranja

″....″ expandira samo znakove $ ' !

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

echo \' '\ /$&' \'

ispisuje

' \ /$& '

212/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash

PREUSMJERAVANJE STANDARDNOG ULAZA I IZLAZA


(REDIRECTING)

Mnoge komande u Unix shell-u uzimaju ulaz sa standardnog ulaza (tipkovnica) i šalju
podatke na standardni izlaz (monitor).

Primjer: sort
1
3
2
^D(EOF- End Of File)
1
2
3

Preusmjeravanje standardnog izlaza:

cat a.txt b.txt prikazuje datoteke a.txt i b.txt na standardnom izlazu

cat a.txt b.txt > c.txt preusmjerava standardni izlaz u datoteku c.txt

cat c.txt >> d.txt preusmjerava standardni izlaz i dodaje na kraj datoteke d.txt

Preusmjeravanje standardnog ulaza:

mail user <pismo.txt

213/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash

POVEZIVANJE (ULANČAVANJE) KOMANDI (PIPING)

Kada bismo npr. željeli saznati broj datoteka u direktoriju morati bismo napisati
otprilike slijedeće:

ls > lista ; wc < lista

dakle prvo bismo ispis komande ls spremili u datoteku lista, a potom bismo istu
datoteku stavili na standardni ulaz naredbe wc. Umjesto kreiranja datoteke lista mogli bismo
standardni izlaz komande ls direktno spojiti na standardni ulaz komande wc. Tu nam pomaže
mehanizam pipe-ove (cjevovoda).

ls | wc kao da smo pomoću cijevi povezali izlaz ls sa ulazom wc komande.

Možemo koristiti i više pipe-ova kako bismo povezali (ulančali) više komandi

ls dir1 dir2 dir 3 | sort | lp

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

Komandni alias-i ili kako definirati vlastitu komandu

• U različitim shell-ovima se različito zadaju.

Općenito

alias ime definicija (csh, tcsh)

alias ime=definicija (sh, ksh, bash)

214/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash

Primjer:

alias ll=″ls –l″


alias l=″ls -F″
alias rm=″rm -i″

alias – prikaz svih aliasa

unalias ime – briše alias

215/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash

COMMAND HISTORY I COMMAND EDITING

Općenito, tcsh i bash shell-ovi su pogodniji za command editing od csh shell-a

sh(Bourne shell) nema command editing.

Procesi

Svaka komanda pozove program i 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.

Kako da vidimo te procese?

ps – prikazuje trenutne procese

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:

PID proces ID – jedinstveni cijeli broj

TT procesu pridružen terminal

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

TIME vrijeme procesora koje je koristio proces

COMMAND ime komande koja je pokrenula proces

Osim na normalan način, proces se može izvršavati i u pozadini:

foreground i background

Zamislite da ste zadali Unix sustavu procesorski zahtjevan i dugotrajan posao. Za


vrijeme procesiranja shell je zauzet (nema prompta dok se proces ne završi) i vi ne možete
dalje raditi na računalu. Da bi se izbjegle takve situacije, takvi procesi se stavljaju da rade u
pozadini, dok vi dalje nastavljate svoj rad normalno.

Kako se proces stavlja u pozadinu ?

Općenito:

command &
[1] 276

Komanda je započela izvršavanje, ID procesa je vraćen i shell je spreman primiti novu


komandu.

217/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash

Suspendiranje foreground procesa – proces ulazi u stanje stopped :

^Z
[stopped]

Stavljanje procesa započetog u foregroundu u background:

^Z
bg

Stavljanje background procesa u foreground:

fg [process -id]

Ubijanje procesa:

kill [-9] process –id ...

218/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash

ENVIROMENT I SHELL VARIJABLE

Standardne Unix varijable se dijele u dvije kategorije, enviroment i shell varijable. Shell
varijable se odnose sa na momentalnu instancu shell-a pa su stoga i kratkoga vijeka.
Enviroment varijable imaju 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.

Radno okruženje je definirano setom enviroment varijabli.

Evo popisa najvažnijih enviroment 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

Kada želimo vidjeti stanje neke varijabli pišemo:

echo $ime_varijable

Primjer:

echo $PATH
.:/user/openwin/bin:/user/local/bin:/user/bin

Postavljanje enviroment varijabli na neku vrijednost (različito u raznim shell-ovima):

setenv name value -csh i tcsh

export name=value - sh i bash

Primjer:

setenv EDITOR emacs - csh i tcsh

export EDITOR=emacs - sh i bash

Postavke varijabli mogu se spremiti u datoteke .login ili u alternativnu .*shrc (.shrc,
.bshrc, .cshrc, .tcshrc) datoteku te se kasnije mogu referirati na već prikazan 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

Shell varijable su slične enviroment varijablama, ali se za razliku od njih ne prenose iz


child procesa.

Definiranje shell varijabli ( takoñer različito u raznim shell-ovima):

set name=value (csh, tcsh)


set name=(value1 value2 value3)

name=value (sh, bash)

argv vrlo su važni shell programerima (komandni argumenti)


cwd trenutni radni direktorij
home Staza do home direktorija (ime home direktorija)
path lista direktorija koji sadržavaju komandne programe
prompt tekst string koji se prikazuje prije unosa komandi (prompt)
shell Vaš login shell
status kod koji pokazuje stupanj uspješnosti prijašnjih komandi
term tip terminala koji koristite

Primjer – podešavanje prompta:

prompt="$cwd \> "


/home/user >

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

prompt="Bok $LOGNAME, kaj ima novo \>"


Bok Janica, kaj ima novo > - ako Janica koristi Unix

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

Primijetite kako smo definirali novu vrijednost varijable PATH.

Nova vrijednost varijable PATH je '.:' plus stara vrijednost varijable PATH plus ':'
plus vrijednost varijable HOME plus '/bin', gdje se plus koristi kao znak za konkatenaciju.

Varijable u kombinaciji sa ostalim tekstom moraju se odvojiti vitičastim zagradama:

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

VAŽNE SISTEMSKE DATOTEKE

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.

Što gdje staviti? (općenito)

.shrc ili .bshrc


• sve definicije shell varijabli, osim path varijable – bolje je koristiti export PATH
(enviroment varijabla)
• alias komande
• umask komandu
• ostale komande koje trebaju biti izvršene za svaku instancu shell-a
.login

• export komande (uključujući gore navedenu PATH)


• kommande koje treba izvršiti samo jednom (prilikom logina) npr. stty, mesg,limit
• komande koje generiraju output

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

grep – nañi string

Sintaksa:

grep [-bchilnsvw] [-e izraz] [ime_datoteke....]

• Čita datoteke ili standardni ulaz


• traži specificirani izraz (patern) u svakoj liniji
• šalje rezultate na standardni izlaz

Primjeri:

grep user /etc/passwd - traži string user u datoteci /etc/passwd

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

grep –v Unix datoteka - prikaži sve linije koje ne match-aju Unix

Neke korisne opcije:

-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

Regularni izrazi za grep:

c bilo koji ne specijalni znak


\c isključi svako specijalno interpretiranje znaka c
^ početak linije
$ kraj linije
[....] bilo koji znak u rasponu
[^....] bilo koji znak van raspona
. bilo koji znak
r* nula ili više ponavljanja r
r+ jedno ili više ponavljanja r

225/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash

AWK PROGRAMSKI JEZIK

AWK – autori Aho, Weinberger i Kernighan


 awk je programski jezik pogodan za manipuliranje textom i za kreaciju
izvještaja

Verzije:
 awk – originalna verzija
 nawk – (new awk) – poboljšani awk-a
 qawk – gnu awk – poboljšani nawk

 dostupan je na Unix sustavima, a postoji i verzija za DOS

Primjer:

cat adresar.txt
John Doe 021-336699
Jane Doe 021-332211
John Smith 021-112233

awk ´
{print "Ime: ",$1,$2," Telefon: ",$3}
´adresar.txt

Ime: John Doe Telefon: 021-336699


Ime: Jane Doe Telefon: 021-332211
Ime: John Smith Telefon: 021-112233

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

Kreiranje i pokretanje shell skripte:

Iskoristite neki od tekst editora da biste kreirali skriptu:

emacs ime_datoteke ili


vi ime_datoteke

Kad ste završili sa radom u editoru dodajte dozvolu za izvršavanje:

chmod u=rwx ime_datoteke ili


chmod +x ime_datoteke

Pokrenite skriptu:

./ime_datoteke

Prva linija u skripti mora definirati shell:

#!/bin/sh Bourne shell

#!/bin/csh C shell

#!/bin/tcsh TC-shell

#!/bin/bash BASH shell

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

echo «Datum i vrijeme: »


date
echo
echo «Vase korisnicko ime je: $(whoami) \n»
echo «Trenutno se nalazite u \c»
pwd

Izlaz:

Datum i vrijeme:
Sun Feb 15 23:35
Vase korisnicko ime je: user

Trenutno se nalazite u: /home/user

Specijalne shell varijable:

$1-$9 - argumenti
$0 - ime komande
$# - broj argumenata
$? - exit status zadnje pokrenute komande
$$ - PID trenutne instance shell-a
$! - PID zadnje komande pokrenute u pozadini
$* - string koji 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

• pomiče argumente - $n+1 postaje $n

Primjer:

demo_shift skripta:

echo "arg1=$1 arg2=$2 arg3=$3"


shift
echo "arg1=$1 arg2=$2 arg3=$3"

$ demo_shift jedan dva tri cetiri


arg1=jedan arg2=dva arg3=tri
arg1=dva arg2=tri arg3=cetiri

Evaluiranje shell varijabli

Definicija Opis

$var Expandira vrijednost varijable var

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

$(var=nesto) ako je definirana, vrijednost od var; inače nesto i $var je setirana na


nesto.
$(var?poruka) ako je definirana, vrijednost od var, inače ispiši poruku i izañi iz shella.
Ako je poruka prazna ispiši standardnu poruku.

$(var+nesto) Ako je definirana var, vrijednost od nesto, inače ništa

229/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Sh i Bash

Za čitanje korisničkog unosa koristimo komandu read.

echo "Unesite svoje ime"


read ime
echo "Dobro dosli na labos $ime"

if – then – else – fi

if [uvjet]
then razne_komande # if uvjet je zadovoljen (true)
else razne_komande # if uvjet nije zadovoljen (false)
fi

if.......
then....
elif....
......
fi

Primjer (provjera je li traženi korisnik logiran):

user=$1 # ulazni parametar


if who | grep –s $user > /dev/null
then
echo "$user je logiran"
else
echo "$user nije logiran"
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

• testiranje za datoteke i varijable

if [! –f $FILE]
then
if test "$WARN"= "yes"
then
echo "$FILE ne postoji"
fi
fi

Test uvjeti:

-e datoteka istina ako datoteka postoji


-d datoteka istina ako je datoteka direktorij
-f datoteka istina ako je datoteka obična datoteka
-L datoteka istina ako je datoteka simbolički link
-r[wx] datoteka istina ako datoteka ima dozvolu za čitanje [pisanje, pokretanje]
-z string istina ako je string nul-string
-n string istina ako string nije null-string
str1=str2 istina ako su str1 i str2 isti
str1!=str2 istina ako su str1 i str2 različiti
n1 –eq n2 istina ako su brojevi n1 i n2 jednaki
(ostale ključne riječi: -ge, -gt,-le, -lt, -ne)

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

for var in list–of–words


do
commands
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 – do – done & until – do – 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

KREIRANJE NOVIH PROCESA

exec – pokretanje novog programa u istom procesu – preko memorijskog prostora


starog
procesa prepisuje se novi
fork – kreiranje novog procesa – fork vraća status 0 child procesu i ostale
vrijednosti parent
procesu

Kao najčešći primjer za exec i fork uzima se slijedeće:

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ć

BASH – ADVANCED SHELL


PROGRAMIRANJE

236/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje

1. Uvod – zašto shell programiranje?


Sposobnost rada sa shell scripting-om je nužno svakom tko želi biti razumno efektivan
sistem-administrator, čak i ako nije stručan u pisanju script datoteka. Shvatimo to ovako: kad
se Linux računalo starta, ono pokreće script kôd u /etc/rc.d sa svrhom da nanovo postavi
konfiguraciju sustava i početnih usluga. Detaljno poznavanje ovog startup script kôda je
važno prilikom analiziranja ponašanja cjelokupnog sustava, i ako je to moguće: modificiranja
istog.

Pisanje script kôda nije teško za naučiti, budući da script kôd može biti upisan u
memorijske sekcije veličine jednog byte-a, i takoñer postoji razmjerno malen set operacija i
naredbi koje su specificirane kao shell, koji nije teško shvatiti. Sintakse su jednostavne i
izravne, slične onima koje pozivaju ili povezuju razne segmente kôda u komandnoj liniji.
Postoji još i nekolicina pravila koja se takoñer moraju naučiti. Većina kraćih kôdova radi
besprijekorno prvi put, a i otklanjanje grešaka kod dužih vrši se kratko i izravno, ali samo
zbog jednostavnosti kôda, budući da BASH ne sadrži nikakve debugging programe. No, o
tome kasnije.

Shell script kôd je "brza i prljava" metoda stvaranja prototipova složenih aplikacija.
Mogućnost rada čak i sa ograničenom funkcionalnošću često se smatra korisnom prvom
stranicom u razvoju projekta. Na ovaj način, struktura aplikacije se može testirati i
isprobavati, prije nego što se konačno kôdira u C++, Java-i ili Perl-u.

Shell scripting se drži klasične UNIX filozofije razbijanja složenih projekata u


jednostavnije podzadatke, i povezivanja komponenti i segmenata kôda. Mnogi smatraju ovaj
pristup boljim, ili barem estetskijim pristupom u rješavanju problema, od korištenja jednog od
"sve-u-jednom" jezika nove generacije (Perl), koji funkcioniraju na način da bude pristupačan
svakom korisniku, a što traži od zahtjevnijeg korisnika prilagoñavanje svojeg načina
razmišljanja odgovarajućem programskom alatu.

237/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje

2. Osnovni principi rada u BASH-u


U ovom ću seminaru opisati BASH, što je akronim za "Bourne-again shell" i
prestavlja prošireni dodatak na klasični shell scripting koji je razvio Stephen Bourne. BASH
je de facto postao standard shell scripting-a na svim varijantama UNIX-a. Većina principa
kojima ću se baviti u ovom seminaru takoñer je povezana i sa ostalim verzijama shell
scripting-a, kao što su Korn shell (od kojeg potječu neke karakteristike BASH-a) i C shell i
njegove razne varijante.

2.1. Primjer: kôd za "čišćenje" log datoteka u /var/log


U ovom najjednostavnijem primjeru, kôd nije ništa drugo doli lista sistemskih naredbi
pohranjena u datoteci. Ako ništa drugo, onda ovaj način barem štedi vrijeme i trud prilikom
svakog ponovnog pretipkavanja tih naredbi kod svakog novog pozivanja istih:

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

U ovom primjeru nema 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.

2.2. Izvršavanje script kôda


Nakon što je kôd napisan, možemo ga izvršiti naredbom sh scriptname, ili alternativno
bash scriptname (nije preporučljivo korištenje sh <scriptname, budući ovaj način efektivno
onemogućava čitanje iz ulazne biblioteke stdin unutar script kôda). Puno sigurnije je napraviti
da script kôd direktno izvršiv sa naredbom chmod.

Npr.:
chmod 555 scriptname (omogućava čitanje i izvršavanje)

ili:

chmod +rx scriptname (omogućava čitanje i izvršavanje


svim korisnicima),

chmod u+rx scriptname (omogućava čitanje i izvršavanje


samo autoru kôda).

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.

Za zadnji korak, nakon testiranja i eventualnog otklanjanja grešaka, korisnik bi se


mogao odlučiti za pomicanje datoteke u /usr/local/bin (kao root direktorij), tako da omogući
pristup datoteci (kôdu) na način da bude izvršna i dostupna u cijelom sustavi. To se odnosi na
sve korisnike. Datoteka se jednostavno ozvršava pozivanjem: scriptname [ENTER] iz
komandne linije.

2.3. Otklanjanje grešaka (debugging)

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

3. Uvod u varijable i parametre


Poznavanje rada sa varijablama čini jezgru svakog programiranja kao što i one čine
jezgru svakog programskog jezika. Pojavljuju se u aritmetičkim operacijama i kvantitativnim
zadatcima, radu sa znakovnim nizovima, i nezamjenjive su u radu sa simbolima. No, varijabla
nje ništa više od memorijske lokacije ili seta memorijskih lokacija koje sadrže nekakvu
informaciju.

3.1. Referenciranje varijabli


Ime varijable je oznaka za njenu vrijednost, informaciju koju drži ista. Referenciranje
vrijednosti jedne varijable se zove supstiticija varijable.

Ime i vrijednost varijable su dvije sasvim odvojene karakteristike varijable. Ako je


varijabla1 ime varijable, tada je $varijabla1 referenca (adresa) na varijablu, dakle na
informaciju koju ona sadrži. Jedini put kad se varijabla pojavljuje bez reference, bez prefiksa
$, jest kad je deklarirana ili pridružena, kad nije postavljena, kad se koristi u "export" načinu
rada ili u posebnim slučajevima kad avrijabla predstavlja signal. Pridruživanje može biti sa '='
znakom, u naredbi read i na početku petlje.

Zatvaranje referencirane vrijednosti pod dvostrukim navodnicima (" ") se ne


sukobljava sa zamjenom varijabli. Ovaj način se zove djelomični navod, nešto kao "slabi
navod". Korištenje jednostavnih navodnika (' ') koristi ime varijable doslovce, i supstitucija
nije moguća. Ovo se naziva puni navod, negdje spominjan i kao "jaki navod".

Primjeti se da je $varijabla1 zapravo jednostavnija forma od ${varijabla1}. U


kontekstu gdje sintaksa $varijabla1 rezultira greškom, preporuča se korištenje duže forme.

3.2. Deklaracija varijabli

Deklaracija varijabli se koristi sa operatorom pridruživanja '=' (bez korištenja razmaka


prije i poslije znaka). Dotični operator se može koristiti u svrhu pridruživanja ili testiranja,
ovisno o kontekstu.

3.2.1. Primjer: jednostavna deklaracija varijable

U ovom odsječku je prikazan najednostavniji način pridruživanja vrijednosti nekom


imenu varijable:
echo

a=879
echo "vrijednost varijable \"a\" je $a."

let a=16+5 #pridruzivanje koristenjem 'let'


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

240/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje

3.2.2. Primjer: deklaracija i referenciranje varijable

Slijedeći programski odsječak pokazuje kako se deklariraju varijable i potom kako se


vrši zamjena:

#!/bin/bash

a=375
hello=$a

echo hello

echo $hello #identicno kao i: echo ${hello}

echo "$hello"
echo "${hello}"

echo

hello="A B C D"
echo $hello # ispis: A B C D
echo "$hello" # ispis: A B C D

echo

echo '$hello' # ispis $hello


# ovdje uocavamo efekte
# razlicitih tipova navoda

echo

exit 0

3.3. BASH varijable: bez tipa

Za razliku od mnogih ostalih programskih jezika, BASH ne segregira svoje varijable


po "tipu". U originalu, BASH varijable su znakovni nizovi, ali, ovisno o kontekstu, BASH
dozvoljava cjelobrojne operacije i usporedbe varijabli. Ključni faktor je da li vrijednost
varijable sadrži znamenke.

3.4. Posebne vrste varijabli

Definiramo tri vrste varijabli:

Lokalne varijable: vidljive su samo unutar odsječka kôda ili fukcije

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.

4. exit i exit status

4.1. Naredba exit

Naredba exit se može koristiti za prekidanje izvršenja kôda, kao u programu u C-u.
Takoñer može vratiti vrijednost, koje je neophodna u izvršavanju "roditelj"-procesa.

4.2. exit status

Svaka naredba vraća izlazni status znan kao exit status (negdje u literturi je označen i
kao return status). Uspješno izvršena naredba vraća nulu (0), dok neuspjela naredba vraća broj
različit od nule koji uglavnom označava broj greške (engl. error code). Uspješno izvršene
UNIX naredbe i programi vraćaju nulu kao izlazni status nakon uspješnog kompletiranja, iako
postoji i par iznimaka.

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

5.1. Uvjetne konstrukcije

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.

Takoñer postoji i poseban operator "[" (lijeva uglata zagrada). On je sinonim za


naredbu test i postoji isključivo zbog razloga efikasnosti. Ova naredba prihvaća zadane
argumente kao izraze usporedbe ili ispituje fajlove, te vraća izlazni status usporedbe (0 za
istinito, 1 za pogrešno). if naredba takoñer može ispitivati i exit status bilo koje naredbe, ne
samo produkt usporedbe.

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.

Konstrukcije case (in)/esac i select tehnički ne predstavljaju petlju, budući da ne


iteriraju izvršavanje odreñenog programskog odsječka. Meñutim, one, poput petlji, diktiraju
smjer izvršenja programa, ovisno o uvjetima zadanima na početku ili kraju bloka. Naredba
case (in) obavlja grananje na jedan od nekolicine programskih odsječaka, ovisno o uvjetu.
Služi kao prečica za višestruke if/then/else konstrukcije, i pokazala se izuzetno korisnom pri
stvaranju menija. Konstrukcija select, koja je usvojena iz Korn shell-a, je još jedna alatka za
stvaranje menija.

6.2. Ugnježñene petlje

Ugnježñena petlja je petlja unutar petlje, tj. unutarnja petlja u bloku vanjske petlje. Tu
se dešava da prvi prolaz kroz vanjsku petlju pokreće i unutarnju, koja se izvršava do kraja.
Slijedeći prolaz kroz vanjsku petlju opet aktivira unutarnju. Ovo se ponavlja dok se vanjska
petlja ne izvrši do kraja. Naravno, naredbom break možemo u svakom dijelu vanjske ili
unutarnje petlje utjecati na prijevremeni prekid iterativnog procesa.

243/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje

6.2.1. Primjer: ugnježñena petlja


for a in 1 2 3 4 5 #vanjska petlja
do
echo "stavi $outer u vanjsku petlju."
echo "----------------------"
inner=1 #resetiraj inner

for b in 1 2 3 4 5 #unutarnja petlja


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

let "outer +=1" #povecaj brojac outer za 1


echo
done #kraj vanjske petlje

7. Interne naredbe (builtin-ovi)


Builtin (engl. builtin – ugrañeno) je naredba koja je sadržana unutar BASH-ovog seta
naredbi, dakle doslovce ugrañena u programski jezik. One postoje isključivo zbog efikasnosti
– izvršavaju se brže od eksternih naredbi, koje obično zahtijevaju račvanje posebnog procesa,
ili zbog toga što odreñene builtin naredbe trebaju izravan pristup samom jeziku.

Kad se neka naredba ili shell inicijaliziraju zbog izvršavanja nekog podzadatka, taj
proces se zove račvanje. Novi proces koji je nastao se naziva "dijete", a proces koji je
pokrenuo račvanje "roditelj". Dok "dijete" - proces obavlja svoj posao, "roditelj" je još u
postupku izvršavanja.

Generalno gledano, BASH builtin naredba ne kreira podzadatak, sve dok se izvršava
unutar nekog kôda. Eksterni sustav naredbi ili nekakav filter unutar kôda obično znaju
generirati podzadatke.

Builtin je takoñer sinonim za sistemsku naredbu istog imena, meñutim BASH ju


interno reimplementira. Npr. BASH naredba echo nije isto što i /bin/echo, iako je ponašanje
tih dviju naredbi skoro identično.

Postoje još i ključne riječi. To su razne riječi i interpunkcijski znakovi. One imaju
posebno značenje za shell, i neke predstavljaju granice programskih odsječaka sintakse nekog
kôda. Npr. sve uvjetne konstrukcije i ono što ide uz njih predstavljaju ključne riječi. Slično
kao i builtin-ovi, ključna riječ je implementirana u BASH-u, ali za razliku od builtin naredbe,
ona sama po sebi nije naredba, već dio veće komandne strukture.

Ni kod pregleda internih naredbi se BASH ne razlikuje previše od ostalih jezika.


Nabrojimo neke I/O naredbe koje su implementirane u ovom jeziku: echo, printf, read, zatim

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.

Recimo nešto i o eksternim naredbama, a u kontekstu internih naredbi. Standardne


UNIX naredbe čine shell script kôd svestranijim. Vrlina BASH-a jest kombiniranje internih
naredbi sa jednostavnim konstrukcijama programa. Standardnih naredbi ima više vrsta.
Možemo ih podijeliti po karakteru, po načinu rada, po složenosti... Po složenosti se dijele na:
osnovne (ls, cat, chmod,...), te složene naredbe (expr, find, xargs,...). Po načinu rada na
naredbe za rad sa vremenom i datumom, za procesiranje teksta, za rad sa datotekama, za
matematičke operacije, itd.

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.

8.1. Aritmetičko proširivanje sa jednostrukim navodnicima

Često se koristi u kombinaciji sa naredbom expr.

8.1.1. Primjer: Aritmetičko proširivanje sa jednostrukim


navodnicima

z = `expr $z + 3` #naredba expr vrsi prosirivanje

8.2. Aritmetičko proširivanje sa dvostrukim zagradama i


naredbom let

Upotreba dvostrukih zagrada u aritmetičkom proširivanju je potisnula korištenje


jednostrukih navodnika, koje je praktički izvan upotrebe i zbog sve većeg korištenja naredbe
let u istom kontekstu.

245/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje

8.2.1. Primjer: Aritmetičko proširivanje sa dvostrukim


zagradama

z=$(($z+3))
z=$((z+3))

#takodjer se mogu definirati operacije unutar


#dvostrukih zagrada

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

((n += 1)) #povecaj n za 1


echo "n = $n" #n=1

8.2.2. Primjer: Aritmetičko proširivanje sa naredbom let


let z = z+3
let "z=z+3" #navodnici dopustaju upotrebu razmaka,
#ovdje naredba let zapravo izvrsava
#aritmeticku usporedbu, a ne prosirivanje

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

Svakom otvorenom fajlu se pridružuje njegov pokazivač (engl. file descriptor –


jednostavan broj koji operativni sustav pridružuje otvorenoj datoteci zato da ju može pratiti.
Pojednostavljena verzija pokazivača na datoteku u C-u.). Standardni pokazivači za stdin,
stdout i stderr su 0, 1 i 2. Za dodatne otvorene datoteke, ostaju nam pokazivači od 3 do 9.
Ponekad se ti dodatni pokazivači koriste za dohvat jedne od standardnih datoteka, dakle kao
privremena duplicirana veza. Ovo pojednostavljuje vraćanje u normalni način rada poslije
kompleksnog preusmjeravanja i miješanja datoteka.

246/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje

9.1. Naredba exec

Upotreba naredbe exec <ime_datoteke preusmjerava stdin prema nekakvoj datoteci.


Od te točke nadalje, svi podaci vezani uz stdin dolaze ravno iz te datoteke, za razliku od svog
normalnog izvora (obično unos iz tipkovnice). Ovo omogućava metodu čitanja datoteke liniju
po liniju i eventualno raščlanjivanje svake linije unosa korištenjem naredbe sed i/ili awk.

Slično tome, naredba exec >ime_datoteke preusmjerava stdout u željenu datoteku.


Ovim postupkom se šalju svi izlazni podaci u spomenutu datoteku. I/O preusmjeravanje je
takoñer pametan način da se izbjegnu problemi koji se javljaju kad su neke varijable
nedostupne, tj. unutar nekog subshell-a.

9.2. Preusmjeravanje odsječaka kôda

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.

10. Podzadatci (Subshell-ovi)

10.1. Definicija podzadatka


Učitavanje shell datoteke ili kôda aktivira još jedan segment komandnog procesora.
Kao što se zadane naredbe interpretiraju u komandnoj liniji, slično se dešava i u procesu
izvršavanja seta naredbi u datoteci. Svako pokretanje shell script kôda je, općenito,
podzadatak nekog procesa "roditelja", početnog procesa iz kojeg je račvanjem nastao.
"Roditelj" proces je vidljiv na konzoli ili xterm sučelju. Meñutim, shell script proces takoñer
može i stvarati podzadatke. Takvi podzadatci se izvršavaju paralelno, što kao posljedicu daje
izvršavanje više procesa istodobno.

U globalu, eksterna naredba u nekom dijelu kôda može generirati podzadatak, i to


tamo gdje BASH builtin naredba to ne može. Ali, zbog ovog nedostatka, builtin naredbe se
izvršavaju efektivnije i brže od svojih eksternih alternativa.

247/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje

10.1.1. Primjer: paralelno učitavanje i izvršavanje procesa

#spajanje i sortiranje oba seta listi istodobno


#ivrsavanje u pozadini osigurava paralelnu obradu

(cat list1 list2 list3 | sort | uniq > list123) &


(cat list4 list5 list6 | sort | uniq > list456) &

wait #ne pokreci slijedecu naredbu dok se


#podzadatci nisu izvrsili

diff list123 list456

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

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.

Konkretno u BASH shell scripting-u jednostavnost je u drugom smjeru mana, ali ne


koliko je vrlina, nasreću. BASH ne koristi nikakve debugging programe, težak je za
prepoznavanje i otklanjanje grešaka, što je, proporcionalno s veličinom kôda, isto toliko i veći
problem. Osim toga, postoje i situacije u kojima nije preporučljivo koristiti Shell scripting:

Intenzivni zadatci, pogotovo tamo gdje je brzina neophodna


Zadatci sa složenim matematičkim operacijama
Zadatci koji zahtjevaju prenosivost izmeñu radnih platformi
Složene, strukturirane aplikacije
Kritične backup aplikacije
Situacije gdje je prijeko potrebna sigurnost, gdje moramo garantirati čvrst integritet sustava,
kao i zaštitu od upada, provala i kompjuterskog vandalizma
Operacije sa izvršnim datotekama (BASH je ograničen na serijski pristup podatcima, a i to
samo u djelomično nespretnom i neefektivnom redak-po-redak načinu rada)
Zadatci sa multidimenzionalnim poljima
Zadatci sa strukturnim fajlovima, kao što su povezane liste ili stabla
Zadatci kreiranja ili manipuliranja grafikom ili GUI-em (Graphics User Interface – Grafički
modelirano sučelje od strane korisnika)
Zadatci koji zahtjevaju izravan pristup sistemskom hardveru
Zadatci koji zahtjevaju izravan pristup port-ovima ili I/O utorima
Aplikacije zatvorenog kôda

248/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Bash – Advanced Shell Programiranje

Ukoliko se korisnik nañe u jednoj od gore spomenutih situacija, pametnije je iskoristiti


jedan od jezika nove generacije: Perl, Tcl, Python, Ruby ili čak i C, C++ i Java-u. Čak i onda
stvaranje prototipa aplikacije kao shell script kôda može biti koristan korak razvoja kôda.

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.

13. Popis korištene literature

Internet website – www.tldp.org/LDP/abs/abs-guide.pdf

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

START-UP FAJLOVI C SHELL-A

Start-up datoteke C shell-a su .cshrc i .login. Datoteke .login i .cshrc izvršavaju se u


toku login procedure, znači prilikom svakog pokretanja shell-a. Nalaze se u HOME
direktoriju korisnika. Prva se izvršava iz login programa koji obavlja autorizaciju korisnika.
Kada je autorizacija uspješno završena sam login program starta shell korisnika. Slično kao
login, shell izvršava svoju start-up datoteku. Ove start-up datoteke služe za inicijalno
automatsko izvršavanje odreñenih naredbi, definiranje aliasa, varijabli radne okoline i sl.
Razlika izmeñu .login i .cshrc datoteke je ta što se .login izvršava prva i to prije startanja
shell-a, ali to obično nije značajno. Korisniku se preporučuje dodavanje svojih definicija u
.cshrc datoteku. Komande set i setenv koristimo za inicijalizaciju varijabli, set se koristi za
shell a setenv još i za bilo koju podljusku. C shell koristi simbol ~ za označavanje direktorija
u path-u, npr. ~/.cshrc ili za specifikaciju drugih korisničkih login direktorija npr.
~username/.cshrc.

Primjer .cshrc datoteke:

# ! /bin/csh
# Sample .cshrc file
setenv EXINIT 'set smd sw=4 wm=2'
set history=50
set savhist=50
set ignoreeof noclobber
if ($?prompt) then
set prompt='[\!] % '
alias f finger -R
alias lo logout
endif

252/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C Shell, T C Shell

Primjer .login datoteke


#!/bin/csh
# Sample .login file
stty erase ^H intr ^C susp ^Z
echo "Welcome to Wiliki\!"
frm -s n

Primjer .logout datoteke


#!/bin/csh
# Sample .logout file
echo -n "Logged out of Wiliki "
dat

Komandne linije C shell-a

Shell naredbe su linije sastavljene od jedne ili 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.

command options arg1 arg2 ... < Enter >

Opcije obično počinju crticom (-).

Primjer -ls naredbe za listanje sadržaja direktorija:


-ls
-ls -a -l

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

set prompt=" % m % / % "

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.

Nastavljanje i razdvajanje naredbi

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


;

Nastavljanje naredbe u više redova. Primjer:

\ % cat *.* \ <Enter>


grep "srce" | \ <Enter>
more <Enter>

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

Prilikom rada na UNIX-u često se susrećemo sa naredbama koje imaju komplicirane


nazive. Ponekad naredbe koje često koristimo sadrže mnogo opcija i argumenata koji se
moraju navesti. Tada se koristimo aliasima.
Pomoću aliasa dugačke naredbe tj. naredbe s puno argumenata i opcija možemo skratiti
ili im dati druga jednostavnija imena. Aliasi se mogu definirati u naredbenoj liniji ili .cshrc
datoteci koristeći formu:

alias novoime=naredba

Znači novoime je alias za naredbu po imenu 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.

Varijable okoline programa definiramo sa:

setenv ime vrijednosti

Varijable same ljuske se postavljaju sa:

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 var = (srce.c srce.o)

echo "Type yes or no?"


set yes_no=($<)

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

Najznačajnije predefinirane i ugrañene shell varijable

argv argumenti iz komandne linije


cwd trenutni direktorij
home HOME direktorij
Ako je setovana, shell će ignorirati <Ctrl> D sa terminala. Sprječava se
ignoreeof
neželjeni logout
Lista datoteka gdje shell provjerava da li je pristigla pošta. Ako je prva
mail riječ u mail broj onda je to interval na koliko se provjerava pristizanje
pošte.
noclobber Ako je setovana nije dozvoljeno prepisivanje datoteka redirekcijom
path lista direktorija gdje shell traži naredbe

String koji se pojavljuje na terminalu kada je shell spreman da primi


narednu naredbu. ! se zamjenjuje rednim brojem komandne linije. Obično
prompt
se postavlja na slijedeću vrijednost:

set prompt= "hostname'\!%"


user korisničko ime, startamo sa $USER
term tip terminala koji koristimo, startamo sa $TERM
shell Puno ime trenutnog shell-a, startamo sa $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

Povijest naredbi je mogućnost smještanja naredbi u bafer, njihovo kasnije modificiranje


i ponovno izvršavanje. Znači shell pamti prethodno unesenu naredbu i omogućava da se ista
ponovno pozove. Po izlasku iz shell-a, lista se upisuje u ~/.history i tako biva zapamćena
izmeñu dva login procesa.
Sa history i savehist varijablama moguće je postaviti broj prethodno izvršenih naredbi
koje će biti opet pozvane. Primjer spremanja 100 zadnjih naredbi u shellu i 50 zadnjih naredbi
u .cshrc koje će biti pozvane sljedećim loginom.

set history=100 savehist=50

Prethodne naredbe moguće je pozvati i korištenjem ugrañenih history varijabli.

History substitution

!! Prethodna naredba. Primjer:

% !! < Enter>

Izvršava ponovno prethodnu naredbu.


!n Naredbena linija broj n. Broj n se može otkriti sa history
!-n Naredbena linija sa brojem za n manji od trenutnog
!string Zadnja naredbena linija koja počinje stringom. Primjer:

% c proba.c pr.c obj. o -o proba -lm


...
% !c
!?string? Zadnja naredbena linija koja sadrži string.

!n* Svi argumenti n-te naredbene linije. Ako se ne zada n podrazumijeva se


prethodna linija. Primjer:

258/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C Shell, T C Shell

% c proba.o pr.o obj.o -o proba


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

Kontrola poslova (Job control)

Kontrola poslova je mogućnost praćenja i pristupa poslovima koji se odvijaju u


pozadini.

& Izvršavanje naredbe u pozadini (background). Primjer:


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

% infinite
< Ctrl > Z
% bg
fg [%job] Naredba za prebacivanje procesa iz pozadine u radni (foreground). Primjer:
% infinite &
% fg % infinite
stop [%job] Prekida proces koji se 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

U C shell-u jedino što možemo napraviti sa signalima je hvatanje signala SIGNIT

Pozivanje funkcije

Funkcije u shell script-ovima kao i u višim programskim jezicima predstavljaju osnovno


sredstvo modularizacije programa.
Postoje dva načina definiranja funkcija:

function ime {
naredbe
}
ili
ime ( ) {
naredbe
}

Funkcije se pozivaju jednostavnim navoñenjem imena i argumenata iza imena ukoliko


takvi postoje.

Primjer pozivanja funkcije main:


Prototip prema kojem se poziva funkcija main svakog programa u UNIX-u je:

int main(int argc, char *argv[], char *envp[]);

argc je broj argumenata navedenih kod poziva programa, a argv je niz od argc
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:

int main(void) { ... }

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.

Standardni ulaz i izlaz

Velika snaga UNIX-a je u preusmjeravanju ulaza i izlaza naredbi u datoteke (time i na


sve vanjske jedinice), kao i meñusobno spajanje ulaza i izlaza više naredbi. Svaka naredba
ima:
 standardni ulaz u program (stdin, tastatura,0)
 standardni izlaz iz programa (stdout, monitor,1)
 standardni izlaz za greške iz programa (stderr, monitor,2)

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

Preusmjeravanje izlaza naredbi za rezultate (stdout):


>
date > now

Dodavanje na kraj postojeće datoteke


>>
ps -ef >> proba

Preusmjeravanje izlaza naredbi za pogreške (stderr):


>&
ls abc>& er2 upisuje u stvorenu datoteku

>>&

dodavanje na kraj postojeće datoteke


ls abc >>& er1

Preusmjeravanje ulaza naredbi (stdin):


<
cat<.login čita iz postojeće datoteke

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

Jedna od moći komandne linije je mogućnost korištenja piping-a. Korištenje ove


tehnike u terminalu je dobar trik, a predstavlja i olakšanje pri radu. Piping je takoñer široko
raširena metoda meñu C programerima. Bez pipinga, da bi napravili jednostavne zadatke
morali bi pisati velike količine koda.
U osnovi piping čini proces pokretanja neke naredbe i slanje njenog izlaznog rezultata
na drugi program ili datoteku, tj. zapisivanje u tu datoteku. Zamislimo da imamo tekst
datoteku u tekućem direktoriju koja sadrži mnogo linija teksta sadržanih od riječi TUX, a
zatim jednu rečenicu koja će sadržati riječ TUX i riječ Uni.

grep TUX datoteka_1.txt

Rezultat će biti izlistan na ekranu, a sačinjavat će pretragu za rečenicama koje sadrže


riječ TUX.

Ako napišemo

grep TUX datoteka_1.txt > tux_recenice.txt

rezultat možemo vidjeti u datoteci tux_recenice.txt. Znači, rezultat naredbe grep je


redirektiran i zapisan u datoteku tux_recenice.txt. Dio naredbe " >tux_recenice.txt" govori
shell-u da napravi novu datoteku tux_recenice.txt i u nju zapiše rezultat naredbe grep, umjesto
da sve izlista na ekran. Ukoliko datoteka s tim imenom već postoji rezultat naredbe grep biti
će zapisan preko sadržaja te datoteke.
Ako umjesto znaka > stavimo znak >>, sadržaj već postojeće datoteke će ostati isti, a
rezultat će biti dodan na zadnju liniju teksta.
Prava moć pipinga je kada jedan program može čitati output nekog drugog programa.
Ako napišemo

grep TUX datoteka_1.txt | grep Uni

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

Redirekcija i piping u višestrukoj kombinaciji mogu činiti čuda.

Specijalni znaci u C shell-u (Pattern Matching)

Shell i neki tekst procesori dozvoljavaju zamjenu meta-karaktera ili wild cards
specijalnim znacima.
? Zamjenjuje samo jedan znak. Primjer:
% ls prim?.c
prim1.cprim2.c
% ls ?ead Ispisuje sve datoteke koji imaju 4 znaka i koji 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

{ string..} Grupiranje. Primjer:


% ls { x *y* ?z* }
x myfile yourfile xza yza
~home Trenutni direktorij korisnika
~user Home direktorij odreñenog korisnika

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.

. Zamjenjuje bilo koji znak


* Zamjenjuje nulu
$ Označava kraj linije

Proces kreiranja i izvršavanja C shell scripta

Zahvaljujući script-ovima, komandni jezik ljuske može se smatrati nekom vrstom


programskog jezika, riječ je o jeziku koji se interpretira, a ne kompilira. Zaista, jezik ljuske
ima razne osobine koje inače susrećemo kod običnih programskih jezika: mogućnost
testiranja uvjeta (istina/laž), uvjetno izvršavanje komandi (if), višestruko izvršavanje komandi
(for i while petlje), prebacivanje argumenata iz komandne linije u "program" (script).
Shell scriptovi se uglavnom koriste za poslove administriranja UNIX sistema, dakle za
upravljanje resursima i procesima, za pretraživanje i ažuriranje sistemskih datoteka i sl.
Uz pomoć VI (ili nekog drugog tekst editora) formiramo script. Ako prva linija počinje
sa # onda se radi o C shell scriptu. U suprotnom, script se tretira kao Bourne shell script.

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

-v ispisuje linije skripta koje se izvršavaju


-x ispisuje naredbe koje se izvršavaju

ili:
% chmod +x script_name
% script_name args...

Argumenti naredbene linije

Argumenti iz naredbene linije prenose se u script varijable argv.

Primjer: Ekvivalentno:
echo $argv echo $*

echo $argv[2] echo $2

Kontrola toka

Omogućuje kontrolu izvršavanja scripta pomoću konstrukcija kao što su petlje, uvjetne
naredbe i sl.

IF (izvršava niz naredbi ako je uvjet istinit)

if (izraz) then if (izraz) then


naredba naredba
endif else if (izraz) then
naredba

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

SWITCH (ovisno o ispunjenosti uvjeta izvršava se jedan od nekoliko zadanih nizova


naredbi)
switch ($var) switch($1)
case strl1: case -p:
naredba lp $2
breaksw breaksw
... case -c:
case strn: cc -c $2
naredba breaksw
breaksw case -l:

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

FOREACH (izvršava niz naredbi odreñeni broj puta)


foreach var name (wordlist) foreach arg ($*)
naredba echo $arg
end end

WHILE (izvršava niz naredbi dok god je uvjet istinit)


while (izraz) set i=1
naredba set j=10
end while ($i<=$j)
echo Nešto
@i++
end

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

Mogućnost obavljanja aritmetičkih operacija nad varijablama u scriptu bez UNIX


naredbi

Aritmetičke operacije Logičke operacije

+ zbrajanje << pomicanje u lijevo


- oduzimanje >> pomicanje u desno
* množenje | ili operacija
/ dijeljenje ^ ekskluzivno ili
% dijeljenje po modulu & I operacija
++ inkrementiranje
-- dekrementiranje

Logički operatori

== Istinito ako je lijevi string jednak desnom


!= Istinito ako lijevi string nije jednak desnom
=~ Istinito ako lijevi string odgovara stringu sa desne strane s tim što su
univerzalni znaci dozvoljeni ($file =~ *.c).
!~ Istinito ako lijevi string ne odgovara stringu s desne strane. Univerzalni znaci
su i ovdje dozvoljeni
<Istinito ako je broj s lijeve strane manji od desnog
<= Istinito ako je broj s lijeve strane manji ili jednak broju s desne strane
>Istinito ako je broj s lijeve strane veći od desnog
>= Istinito ako je broj s lijeve str. veći ili jednak desnom
|| Logičko ili
&& Logičko i
{command} Istinito ako je naredba uspješno završena

269/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C Shell, T C Shell

Neke najznačajnije ugrañene naredbe C-Shella

Bez argumenata prikazuje sve definirane aliase i njihove izraze. Samo sa


alias
name printa alias sa tim imenom. Kompletna naredba definira novi alias
[name[expression]]
pod imenom name.

bg [%job] Prebacuje proces u pozadinu

cd [name], chdir
Promjena trenutnog direktorija
[name]

Ispisuje words na standardnom izlazu. S opcijom -n sprječava se prelazak


echo [-n[words...]]
u novu liniju

exit [status] Izlazak iz shell-a sa statusnom linijom

fg [%job] Vraćanje procesa iz pozadine

history

jobs [ l ] Daje listu poslova. Sa -l dobiva se detaljnija lista.

kill

nohup [command Izvršava naredbu ignorirajući signale. Naredba se ne može prekinuti ni


[args...]] kada se korisnik koji je startovao odjavi sa sistema.

Preračunava tabelu direktorija u promjenjivoj path. Neophodno jedino


rehash
kada se dodaju nove naredbe dok smo prijavljeni u sistem.

repeat count
Ponavlja naredbu count puta.
command [args...]

setenv name value Postavlja varijable okoline (USER,PATH se postavljaju automatski)

Pomjera riječi u varijable u lijevo. Prva riječ se gubi. Anko nije definirano
shift [varijable]
ime varijable, korist se argv.

source [-h] Izvršava drugi script. Sa -h opcijom naredbe iz scripta se ne izvršavaju


filename nego samo umeću history u listu.

stop [%job]

Briše postavljene aliase čija imena odgovaraju patternu.


unalias pattern
Npr. unalias * briše sve.

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

Briše varijable okoline čija imena odgovaraju patternu. unsetenv* briše


unsetenv pattern
sve.

Komentari i izlaz

Sve od # do kraja linije smatra se komentarom. Izlaz iz shella sa statusom status:

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)

T shell odnosno Tenex shell je poboljšana i potpuno kompatibilna verzija C shell-a. T C


shell je komandni interpreter kojeg koristimo i kao interaktivni login shell i kao shell script
komandni procesor. Uključuje:
 Editiranje komandne linije
 Nadzor login/logout procedure
 History nadopunu
 Periodično izvoñenje naredbi
 Ispravljanje gramatičkih pogreški (pravilno pisanje riječi)
 Rad s dugačkim listama argumenata

Start-up Tcsh
Tcsh

Interaktivan Neinteraktivan

Login No-Login

Interaktivni i neinteraktivni Tcsh

Ukoliko je T-C-Shell povezan sa standardnim ulazom i izlazom( s virtualnom


konzolom) tada se radi o interaktivnom shellu. Interaktivni Bash podijeljen je u login Tcsh i
No-login Tcsh. Tcsh radi kao login-shell, kad se starta eksplicitno opcijom >>-l<< ili kada je
prvi argument (znači argument 0) >>-<<.
Login-shell najprije izvršava naredbe iz sistemskih datoteka >>/etc/csh.cshrc<< i
>>/etc/csh.login<<. Redoslijed je različit obzirom na verziju koja se koristi. Najčešće se
promatra datoteka ~/.tcshrc, ako ne postoji onda se promatra ~/.cshrc. Ukoliko postoji
redoslijed izgleda ovako: ~/.history, ~/.login i ~/.cshdirs.

272/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C Shell, T C Shell

Login i Logout script

Prilikom startanja tcsh izvršavaju se slijedeće scripte:

/etc/csh.cshrc

/etc/csh.login (samo kao login shell)


/etc/environment (samo kod AIX kao login shell)

$HOME/.tcshrc

logout

/etc/csh.logout
$HOME/.logout

Posebnost tcsh je i autologout mehanizam.

user@sunce>tcsh -l
sunce/home/user>set autologout =1
#Nakon 1 min. ne dogañanja ništa
user@sunce>auto-logout

Podešavanje prompta

set prompt = " --%T %n % ~--\n$"

Kod tc shell-a postoje 3 vrste prompta

1. prompt1: Kazuje da tcsh očekuje novu naredbu

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.

Editiranje komandne linije

Mogućnost da se prethodne ili trenutne komandne linije modificiraju tekst editorom.


Tcsh posjeduje mogućnost editiranja komandne linije i history. Mnoge verzije tcsh po
defaultu koriste emacs komandnu liniju editiranja, meñutim moguće je i postavljanje vi
editora.

bindkey -v primjer za vi-editor


bindkey -e primjer za emacs-editor

Kompletiranje imena fajlova i liste

Mogućnost da se u naredbenoj liniji automatski dovrši ime započetog fajla.


Shell je obično u mogućnosti dopuniti riječ ako je napisana samo skraćenica. Npr.
upišemo samo dio riječi 'ls/usr/lost' i pritisnemo tab tipku kako bi pokrenuli complete-word
komandni editor.
Shell će sam dopuniti ime fajla '/usr/lost/' u '/usr/lost+found/' i u ulaznom baferu
nepotpuni naziv zamijeniti punim

Primjer:

echo $ar[tab]
echo $argv (ukoliko niti jedna druga varijabla ne počinje sa ar.)

Isto tako moguće je upisivanjem '^D' kako bi pokrenuli delete-char-or-list-or-eof


komandni editor ispisati nadopunu riječi. Shell ispisuje moguću nadopunu korištenjem
ugrañene ls -F i reprinta prompt i nedopunjenu komandnu liniju.

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

Ako je postavljen autolist onda to izgleda ovako:

>set autolist
>nm/usr/lib/libt[tab]
libtermcap.a@libtermlib.a@
>nm/usr/lib/libterm

Definiranje listi

% set x = aaa bbb ccc


% echo $x $#x $x[1]
aaa 1 aaa

% set x = "aaa bbb ccc"


% echo $x $#x $x[1]
aaa bbb ccc 1 aaa bbb ccc

% set x = (aaa bbb ccc)


% echo $x $#x $x[1]
aaa bbb ccc 3 aaa

Broj riječi u listi definiramo sa $#var

275/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb C Shell, T C Shell

Ispravljanje gramatičkih pogrešaka

Shell je u mogućnosti korigirati imena datoteka, naredbi i imena varijabli. Pojedine


riječi je moguće ispraviti uz pomoć spell-word komandnog editora. Ispravna shell varijabla
postavlja sena 'cmd' kako bi ispravili ime naredbe.

Primjer:

>set correct =cmd


> lz/usr/bin
CORRECT>ls/usr/bin (y|n|e|a)?

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.

Automatsko periodično izvoñenje komandi

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

Što je shell i vrste shell-a?

Shell je program koji je posrednik (sučelje) izmeñu korisnika i operativnog sustava,


prihvaća naredbe od strane korisnika i izvršava ih sistemskim pozivima prema kernelu (jezgri
operativnog sustava), te vraća rezultat operacije.
Postoji nekoliko vrsta shell-ova: Bourne shell (sh),C shell (csh),Korn shell (ksh), TC
shell (tcsh),Bourne Again Shell (bash).Bash shell je primarni shell na Unix računalima.

Kako se pokreće shell?

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

Primarne funkcije shell-a su ostvarivanje interakcije korisnika s kernelom,a sve u svrhu


sigurnosti datoteka na računalu.Kernel (jezgra) je u neku ruku interpreter odnosno on prevodi

278/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)

podatke dobivene od programa u procesorske instrukcije razumljive samo hardware-u.Bilo bi


gotovo nemoguće da čovjek uči te instrukcije kako komunicirao s jezgrom.Shell je dakle
program koji prevodi korisničke zahtjeve za upravljanje nad sustavom.Od korisnika se
zahtjeva poštivanje odreñenih sintaksnih pravila i razumijevanje logike funkcioniranja sustava
koje se shell strogo pridržava.Neovisno od vrste Linux-ovog shella svi imaju zajedničke
osnovne funkcije:
 interpretacija komandne linije (command line interpretation)
 iniciranje programa (program initation)
 preusmjeravanje ulaza i izlaza (input output redirection)
 lančano povezivanje komandi (pipeline connection)
 supstitucija imena datoteka (substitution of filenames)
 upravljanje varijablama (maintenace of variables)
 kontrola radne okoline (enviroment control)
 programiranje skripti (shell programming)

Što je shell skripta?

Izvršna datoteka koja se sastoji od niza shell naredbi,skripta se ponaša kao


program,naredbe se izvršavaju sekvencijalno.Svaki od postojećih shellov-a ima svoj skriptni
jezik,postoje sličnosti ali i razlike.
Skriptni jezici se sastoje od kontrolnih struktura,shell naredbi,varijabli i izraza.
Ako je skripta napisana nekim skriptnim jezikom da bi ju pokrenuli mora se koristiti
odgovarajući shell.
Prva linija skripte specificira odgovarajući shell.

Na primjer za Bourne Again Shell (bash):

#!/bin/bash

Skripte se pišu u nekom od tekstualnih editora Vi, Emacs npr.

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

Skriptu prije pokretanja moramo učiniti izvršnom,naredba koja nam to omogućuje je


naredba chmod.

chmod a+x ime_skripte


poziv skripte: bash ime_skripte

Postavljanje dozvola za izvršavanje skripte

chmod naredba i opcije

chmod mijenja dozvole za datoteku ili direktorij

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”

poziv skripte: skripta05 danas je “padao snijeg”

rezultat: Prvi unijeti argument je:danas


Drugi unijeti argument je:je
Treći unijeti argument je:padao snijeg

Varijable

U shellu varijable nemaju tipove,mogu sadržavati brojeve,znakove i nizove znakova.Ne


moraju se čak ni deklarirati.Vrijednosti se pridružuju varijablama pomoću
“=”operatora.Korištenje vrijednosti varijable nam omogućava specijalni operator $ ispred
imena varijable.Imena varijabli mogu sadržavati znakove,brojeve i podvlaku,ne smiju
sadržavati rezervirane znakove shell-a kao što su uskličnici,& ampersand ili razmaci koji se
koriste za odvajanje naredbi i razdvajanje naredbe i argumenata.

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
}

jednom definirana funkcija se poziva imenom i parametrima.

282/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)

ime_funkcije [ param1 param2 param3 ]

Ulaz i izlaz skripte echo,read

Naredba echo šalje podatak na standardni izlaz,a naredba read upisuje podatak u
varijablu.

primjer 04:
#!/bin/bash
echo Unesite 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.

Aritmetičke shell operacije: naredba let

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

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

Operatori naredbe let:

Aritmetički operatori Funkcija

* 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

Pomoću naredbe test možemo usporeñivati cjelobrojne vrijednosti, stringove,te


obavljati logičke operacije. Naredba se sastoji od ključne riječi test,iza koje se navode
vrijednosti koje se usporeñuju,a izmeñu njih je option ključna riječ koja odreñuje tip
usporedbe.Option se može smatrati operatorom,ali se zapisuje slovnom oznakom ispred koje
je znak minus.npr –eq.Vraća izlazni status 0 ako je usporedba točna.

Sintaksa: test vrijednost1 –option vrijednost2

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]

Opcije i operatori naredbe test:

Usporedba cjelobrojnih vrijednosti: Funkcija

-gt veće od
-lt manje od
-ge veće ili jednako
-le manje ili jednako
-eq jednako
-ne različito

Usporedba nizova znakova

-z testiranje za prazan niz znak


-n testiranje za vrijednost
= jednakost
!= nejednakost
Str da li je vrijednost stringa null

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)

Sintaksa: if naredba then


naredbe
else
naredbe
fi

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)

echo –n “Molim Vas unesite opciju:”


read var
if [ "$var”= s ]
then
ls –s
else
ls –l
fi

Petlje: while,until,for-in,for

Bash shell posjeduje kontrolne strukture petlje koje nam 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.

Sintaksa for-in: for varijabla in Sintaksa while: while naredba do


lista-vrijednosti naredbe
do done
naredbe
done

Sintaksa until: until naredba do Sintaksa for: for varijabla do


naredbe naredbe
done done

For-in petlja

For-in petlja je pogodna i za manipulaciju s datotekama.Možemo koristit specijalne


znakove za generiranje imena datoteka kao listu vrijednosti u for-in petlji.Na primjer
specijalni znak * generira listu svih datoteka u direktoriju, *.c sve datoteke s ekstenzijom .c

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

poziv skripte: bash uarg main.c lib.c io.c

A možemo i eksplicitno pozivati argumente pomoću for-in i jedne od specijalnih


Varijabli $* ili $@. Struktura for-in će posebno pozivati svaki argument I dodjeljivati
vrijednost for-in varijabli.Postoji razlika jer $* će pozivati svaku riječ posebno i ako su riječi
navedene pod navodnicima.

primjer 18:
#!/bin/bash
echo “Unijeli ste $# argumenata”
for var in $*
do
echo $var
done

poziv skripte: bash numarg jedan “dva tri” četiri

izlaz: Unijeli ste 3 argumenta


jedan
dva
tri
četiri

Dakle,ako želimo da se argumenti u navodnim znacima tretiraju kao jedan


argument,koristimo $@.

primjer 18:
#!/bin/bash
echo “Unijeli ste $# argumenata”

292/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Shell programiranje (shell i bash)

for var in “$@”


do
echo $var
done

poziv skripte: bash numarg jedan “dva tri” četiri

izlaz: Unijeli ste 3 argumenta


jedan
dva tri
četiri

Logičke naredbe && i | |

Logičke naredbe izvršavaju logičke operacije na dvije naredbe shella.

Sintaksa: naredba && naredba


naredba | | naredba

U slučaju logičkog I (&&),ako su obje naredbe uspješno izvršene,uspješna je i logička


naredba i vraća izlazni status 0.Za logičku ILI naredbu ako je barem jedna od naredbi
uspješno izvršena,uspješna je i logička ILI (| |) naredba i vraća izlazni status 0.Logičke
naredbe nam služe za testiranje uvjeta u kontrolnim strukturama.

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

Korištenje preusmjeravanja i pipe operacija s kontrolnim strukturama

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.

Sintaksa: naredba1 | naredba2

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 strukture: trap

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.

Sintaksa: trap ‘naredbe’ brojevi-signala

Trap struktura je osmišljena za upravljanje vanjskim dogañajima koji remete rad


programa.Najuobičajeniji je primjer signala prekida kojeg obično šalje korisnik pritiskujući
CTRL-C.Ako za vrijeme izvršavanja programa pritisnemo CTRL-C program će se
zaustaviti.Kad god se program prekine na ovakav način,postoje akcije koje možemo
poduzeti.Obično je to izlazak iz programa s vrijednošću greške.Sustav svakom dogañaju
dodjeljuje odreñen broj.

-broj signala za CTRL-C je 2

primjer 21:
#!/bin/bash
trap ‘echo Prekid program; rm cdat; exit 1’ 2

for var in *.c


do
cp $var mybackup/$var

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

Naredba trap se može koristiti za sprečavanje zaustavljanja programa zbog nekih


vanjskih dogañaja.Na primjer,pretpostavimo da ne želimo dati mogućnost korisniku da sam
zaustavi program s CTRL-C; želimo ignorirati sve vanjske dogañaje.Naredba trap može
presrest dogañaj CTRL-C i spriječiti zaustavljanje programa.To se može izvesti unošenjem
skupa praznih jednostrukih navodnika na mjestu prvog argumenta naredbe trap. ( trap ‘ ‘ 2 )

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)

Početak regularnih izraza

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.

Neuronske mreže možemo klasificirati prema:


 broju slojeva,
 vrsti veza izmeñu neurona,
 vrsti obučavanja neuronskih mreža,
 smjeru prostiranja informacija,
 vrsti podataka.
Neuronske mreže u informatici imaju veliku primjenu, služe za:
 prepoznavanje oblika,
 prepoznavanje govora,
 prepoznavanje rukopisa,
 kompleksne proračune i procjene,
 predviñanje cijena na burzi,
 vremenske prognoze,
 kompresiju podataka, itd.

Kod realizacije neuronskih mreža na računalima, situacija otprilike izgleda tako da za


jedan neuron treba jedan procesor. Neuron je laički opisan kao procesor s lokalnom
memorijom. Pošto su regularni izrazi izvedeni iz neuronskih mreža, možemo pretpostaviti da
regularni izrazi na jednoprocesorskim sustavima zahtijevaju veliku količinu procesorskog
vremena.

301/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

MODEL NEURONA:

u1..n – ulazni podaci


w1..n – težinski koeficijenti
f( ) – funkcija
i– izlazni podatak

Nekoliko godina kasnije matematičar Stephen Kleene je te modele formalno


matematički opisao. Nazvao ih je regularni skupovi.
Kleene je razvio jednostavnu notaciju (sustav znakova) za izražavanje regularnih
skupova koju je nazvao regularni izrazi.
Sredinom prošlog stoljeća, 50-ih i 60-ih godina, regularnim izrazima su se bavili i
matematičari. Robert Constable je napisao dobar priručnik za matematički naklonjene
stručnjake:
"The role of finite automata in the development of modern computing theory".

RegEx je poseban jezik koji omogućava inteligentno usporeñivanje stringova, temelji


se na matematičkoj teoriji jezika, determinističkih i nedeterminističkih konačnih automata.
Prednost regEx – a je u tome što se usporedba stringa ne vrši, ali i može, prema nekom
fiksnom stringu.
Usporedba stringa vrši se prema nekom uzorku koji predstavlja odreñeni skup različitih
strigova ili znakova.
Kao rezultat usporedbe dobivamo sve one stringove koji u sebi imaju odreñeni uzorak.
Uzorak se odreñuje pomoću zamjenskih znakova (metacharacters) i posebnih nizova
(special sequences).
Jezik regularnih izraza koristi se u Unix OS, a koriste ga razni programi i okoline:

302/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

Zamjenski znakovi u raznim okolinama i programima:

Program ili okolina . [] ^ $ \( \) \{ \} ? + | ()

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

Kratki opis nekih programa koji koriste regEx - e:


awk:
awk [-fscript-name] [-Fc] [inline-script] [params] [filename]
awk pretražuje ulaznu datoteku (ili stdin) i traži linije ili polja koje zadovoljavaju uzorke te izvršava pridružene operacije.
Uzorci i akcije se zadaju u komandnoj liniji (inline-script) ili datoteci (script-name).
Omogućava referenciranje linije ili bilo kojeg polja u liniji.

303/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

grep, egrep, fgrep:

grep [options] PATTERN [FILE....]

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.

egrep == grep –E ...


fgrep == grep –F ...

više informacija: man grep

sed:
Supstitucija u sed-u: sed 's/uzorak1/uzorak2/ ' file

sed je stream editor i služi za izvoñenje osnovnih tekstualnih transformacija na


svom ulazu.
sed se razlikuje od drugih editora po tome što za ulaz može primiti datoteku ili tok
podataka (pipeline).
više informacija: man sed

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

vi txt1 – pokretanje vi editora i ureñivanje txt1 datoteke


:q! – izlaz iz vi editora bez spremanja podataka

vi u ex modu nam omogućava korištenje supstitucije.


ex txt1
"txt1" 4L, 246C
Entering Ex mode. Type "visual" to go to Normal mode.
:q!

više informacija: man vi

305/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

Kratki pogled na regEx – generator

Postoje dvije vrste regEx generatora: text – directed engines, regEx – directed engines.
Jeffrey Friedl ih je u knjizi "Mastering regular Expressions" nazvao DFA i NFA engines.
Razlika 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 je nestrpljiv u svom nastojanju da napravi pogodak."

RegEx – directed generator uvijek vraća najljeviji pogodak

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

Zamjenski znakovi (Metacharacters):

. ^ $ * + ? { }[ ] \ | ( )

 . zahvaća bilo koji znak


 ^ označava početak reda
 $ označava kraj reda
 * traži se nula ili više zadanih (Kllene star)
 + traži se jedan ili više zadanih
 ? traži se nula ili jedan znak
 { } koristi se kada želimo odrediti neko ponavljanje
 [ ] koristi se kada želimo odrediti listu znakova koje tražimo, ili neki
raspon znakova [.-.]. Zamjenski znakovi unutar uglatih zagrada imaju
drugačije značenje (više o tome kasnije).
 \ koristi se kad želimo isključiti specijalnu namjenu zamjenskog znaka,
ili kod specijalnih nizova
 | koristi se kad želimo postaviti alternativni odabir
 ( ) koristi se za grupiranje izraza; izrazi se grupiraju i privremeno čuvaju u
memoriji, možemo ih referencirati s \1, ... .. .. .,\9

Količnici * + ? {min, max} (Quantifieres)

Potrebno je znati da su količnici pohlepni (greedy).


Općenito pohlepni algoritmi su oni koji uvijek uzimaju prvo rješenje, a ponekad prvo
rješenje nije najbolje, što u RE znači vraćanje unazad.
Količnici imaju minimalni i maksimalni broj pokušaja zahvaćanja nekog znaka.
Na primjer, regularni izraz ca*t će zahvatiti "ct" (0 'a' znakova), "cat" (1 'a' znak),
"caaat" (3 'a' znaka), i tako dalje.
Generator regEx-a će kod količnika *, +, {} ('*' – 0 ili više, '+' – 1 ili više, {min} – min
ili više) forsirati što više pogodaka, zato ih zovemo pohlepnima.
U izrazu *2 string "abcdrefghfds789254gfhh2568975hujkhfed" RE prvo prolaze do
kraja stringa, a tek onda pokušavaju usporediti broj 2.

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

Backtracking je posljedica pohlepnosti nekih zamjenskih znakova (*,+,{}); on uvijek


vraća najdesniji pogodak (njegovo je kretanje s desna na lijevo).
Pohlepnost možemo isključiti tako da iza svakog pohlepnog zamjenskog znaka pišemo
'?' . "*?" "+?" "{min, max}?" "??".
Sada je situacija malo drugačija. Uzmimo zadnji primjer: regEx .*?2 i string
"abcdrefghfds789254gfhh2568975hujkhfed". Regularni izraz sada nakon svakog znaka s
kojim je imao pogodak pokušava usporediti broj 2. Zahvaćeni string će sada biti
"abcdrefghfds7892".

Korak po korak primjer:


Regularni izraz a[bcd]*b, zahvaća slovo a, nula ili više slova iz liste [bcd], i na kraju
b.
Usporedimo to sa stringom "abcbd"

Korak Pogodak Objašnjenje


1 a Zahvaća 'a'
2 abcbd Zahvaća [bcd]*, ide daleko koliko može, a to je do kraja stringa
Pokušava zahvatiti b, pošto je trenutna pozicija kraj stringa, imamo
3 Promašaj
promašaj
4 abcb Povratak na početak, tako da [bcd]* zahvati jedan znak manje
5 Promašaj Pokušava b ponovo, trenutna pozicija je zadnji znak, a to je "d"
6 abc Ponovno natrag, tako da [bcd]* zahvaća samo "bc"
Ponovno pokuša s b.Ovaj put znak na trenutnoj poziciji je "b", znači
7 abcb
uspijeva

308/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

Specijalni nizovi (Special Sequences):

\d \D \w \W \b \B \s \S \< \> \A \Z

 '\d' zahvaća jednu znamenku


 '\D' isključuje znamenku
 '\w' zahvaća slovo, broj ili '_'
 '\W' isključuje bilo koje slovo, broj ili '_'
 '\b' zahvaća riječi koje imaju odreñene znakove na rubovima riječi
 '\B' isključuje riječi koje imaju odreñene znakove na rubovima riječi
 '\s' zahvaća bilo koji white space
 '\S' isključuje bilo koji white space
 '\<' početak riječi
 '\>' kraj riječi
 '\A' početak stringa
 '\Z' kraj stringa

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)

sintaksa zamjenskih znakova:

 . zahvaća bilo koji znak

A.A Zahvaća bilo koji troslovni niz znakova koji počinje i završava s A.

PRIMJER:

A.A zahvaćeni stringovi: nezahvaćeni stringovi:


AA A A
AbA AbbA
ABA A__A
AzA AokoA
A.A A.LA

 ^ označava početak reda

^Koliko je sati zahvaća liniju koja počinje stringom "Koliko je sati"


^\d zahvaća liniju koja počinje brojem

PRIMJER:

^Koliko je sati zahvaćeni stringovi: nezahvaćeni stringovi:


"koliko je sati .. .." "Koliko je sada sati"

^\d zahvaćeni stringovi: nezahvaćeni stringovi:


1ds _987h
0ABD d0d

310/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

 $ označava kraj reda

\d$ zahvaća liniju koja završava brojem


\.$ zahvaća liniju koja završava točkom

PRIMJER:

\d$ zahvaćeni stringovi: nezahvaćeni stringovi:


An52 dkkd
Bell1 bell
_5 6_
\.$ zahvaćeni stringovi: nezahvaćeni stringovi:
eto. marko.hr

 * traži se nula ili više zadanih == {0,}

D\d*A zahvaća string koji izmeñu znakova D i A nema nijednu ili ima više
znamenki

PRIMJER:

D\d*A zahvaćeni stringovi: nezahvaćeni stringovi:


DA DBA
D0123A D1CA
D01A-KT DB23A

311/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

 + traži se jedan ili više zadanih == {1,}

D\d+A zahvaća string koji izmeñu znakova D i A ima jednu ili više znamenki

PRIMJER:

D\d+A zahvaćeni stringovi: nezahvaćeni stringovi:


D1A DA
D0123A D1CA
D01A-KT DB23A

 ? nula ili traži se jedan znak == {0,1}

25?6 zahvaća string koji poslije 2 nema nijedan ili ima jedan broj 5 i završava sa 6

PRIMJER:

25?6 zahvaćeni stringovi: nezahvaćeni stringovi:


256 2556
26 236
256adf 2d8

 { } koristi se kad želimo odrediti neko ponavljanje

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:

2(5{2, 4})9 zahvaćeni stringovi: nezahvaćeni stringovi:


2559 259
255559 255555555559
255596 250559

312/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

 [ ] koristi se kada želimo odrediti listu znakova koje tražimo

^[abc] zahvaća svaku liniju koja počinje slovima a, b ili c


^[A-Z] zahvaća svaku liniju koja počinje velikim slovom

PRIMJER:

^[abc] zahvaćeni stringovi: nezahvaćeni stringovi:


ako je zakon
bGet Bget
cuker Car

^[A-Z] zahvaćeni stringovi: nezahvaćeni stringovi:


A aS
Guru luk
Pas 23pc – TF

 \ koristi se kad želimo isključiti specijalnu namjenu zamjenskog znaka ili


kad želimo uključiti specijalnu namjenu nezamjenskog znaka

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

\.\*.*\\ zahvaćeni stringovi: nezahvaćeni stringovi:


.*asdasd\ .8995\
.*\ .*AAA

313/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

 | koristi se kad želimo postaviti alternativni odabir

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:

rib(a | e) zahvaćeni stringovi: nezahvaćeni stringovi:


zaribati ribolov
ribež stribor

(c|C) $ zahvaćeni stringovi: nezahvaćeni stringovi:


Tko je u dv.C tko je u dv.C ?
Gdje je Wc c.

 ( ) koristi se za grupiranje izraza

(\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:

(\w\.)(.\d) zahvaćeni stringovi: nezahvaćeni stringovi:


_.d5 Dd5
A.D4 d.dd

314/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

sintaksa specijalnih nizova

 '\d' zahvaća jednu znamenku

'\d' = [0-9]

\d\d\.0\d\* zahvaćeni su oni stringovi koji imaju niz: dvoznamenkasti broj


zatim točku i 0 te nijednu ili više znamenki

PRIMJER:

\d\d\.0\d\* zahvaćeni stringovi: nezahvaćeni stringovi:


22.05 D22g056
g22.0 22.988
22.088A c8.089

 '\D' isključuje znamenku

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

^\D\d\d zahvaćeni stringovi: nezahvaćeni stringovi:


_22dlf 555fhdj
g33_.c h5.tz

315/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

 '\w' zahvaća slovo, broj ili '_'

'\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\d\d\w zahvaćeni stringovi: nezahvaćeni stringovi:


5556as s5aff
d99d456 7aaa

 '\W' isključuje bilo koje slovo, broj ili '_'

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

\d\W\d zahvaćeni stringovi: nezahvaćeni stringovi:


26 2a5
2.6 222

316/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

 '\b' zahvaća riječi koje imaju odreñene znakove na rubovima riječi

[0-9]\b zahvaća sve "riječi" koje kao prvi i zadnji znak imaju broj

PRIMJER:

[0-9]\b zahvaćeni stringovi: nezahvaćeni stringovi:


0fshdf0 ad9
1g9 _99s
987 99dl.

 '\B' isključuje riječi koje imaju odreñene znakove na rubovima riječi

[0-9]\B zahvaća sve riječi koje nemaju znamenku kao prvi i zadnji znak

PRIMJER:

[0-9]\B zahvaćeni stringovi: nezahvaćeni stringovi:


adf 123
pl89pp 1vf.

 '\s' zahvaća bilo koji white space

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]

^\s zahvaća sve linije koje počinju white spaceom

PRIMJER:
- za primjer smo odredili da točka označava početak linije
- početak linije ->' . '

^\s zahvaćeni stringovi: nezahvaćeni stringovi:


. Ides u ducan.. .idem

 '\S' isključuje bilo koji white space

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

^\S zahvaća sve linije koje ne počinju white spaceom

PRIMJER:
- za primjer smo odredili da točka označava početak linije
- početak linije ->' . '

^\S zahvaćeni stringovi: nezahvaćeni stringovi:


.idem . Ides u ducan..

 '\<' početak riječi

9\< zahvaća sve riječi koje počinju brojem 9

PRIMJER:

9\< zahvaćeni stringovi: nezahvaćeni stringovi:


9idem a9cd
945 899

318/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

 '\>' kraj riječi

A\> zahvaća sve riječi koje završavaju slovom A

PRIMJER:

A\> zahvaćeni stringovi: nezahvaćeni stringovi:


1233A 1233
DA Da

 '\A' početak stringa

PRIMJER:

\A... zahvaća prva tri slova nekog stringa

\A... zahvaćeni stringovi: nezahvaćeni stringovi:


Tada se zbilo... f\n

\A zahvaća početak stringa isto kao ^, samo što ^ uvijek zahvaća nakon \n

 '\Z' kraj stringa

PRIMJER:

...\Z zahvaća zadnja tri slova nekog stringa

...\Z zahvaćeni stringovi: nezahvaćeni stringovi:


Tada se zbilo...\n f\n

\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

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

foo(?=bar) vs. foobat

Najprije se usporeñuje prvi dio regEx-a "foo" sa stringom "foobat". Usporedba se


izvršava kao što smo objasnili.
Imamo poklapanje "foo" s prva tri slova stringa "foobat". Nakon toga kreće regEx
generator s drugim dijelom usporedbe "bar" vs. "bat". Imamo dva pogotka, ali 'r' ne pogaña 't'
pa imamo promašaj.

foo(?=bar) vs. "foobar" Pogodak! Generator zahvaća foo jer se iza nalazi bar.

\t(?=MATEMATIKA) Tražimo pogodak na liniji:

MATEMATIKA MATEMATIKA 2 TALIJANSKI ...


Pogodak na matematici 2.

(?!regEx) da li se ispred NE nalazi ...

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

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

(?<=a)b vs. "thingamabob"

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.

(?<!regEx) da li se iza ne nalazi ...

(?<!a)b vs "cab" promašaj.


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

Primjena regularnih izraza na nekim uniX alatima

EGREP

PRIMJER:

Datoteka tel_imenik
/*
Ana, Ban 3398-000
Alex, France 5598-999
Indi, Car 8895-977
Elvis, Potrag 9989-771
Marko, Zeus 1189-001
Zoran, Yevs 9987-573
*/

egrep "^A" tel_imenik

321/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

Ana, Ban 3398-000


Alex, France 5598-999

PRIMJER:

egrep "[xX]" tel_imenik

Alex, France 5598-999

egrep ' ( Indi|Elvis) ' tel_imenik

Indi, Car 8895-977


Elvis, Potrag 9989-771

PRIMJER:

zo@linux:~> cat srijeda


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

Telefonski brojevi:

zo@linux:~> cat srijeda


3893-464

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

Floating point + int:

zo@linux:~> cat srijeda


2566.56555
25985526.322
256.325
6596
56...5544
256.3.
256.23
.32
zo@linux:~> egrep -E '^[0-9]+\.?[0-9]+$' srijeda
2566.56555
25985526.322
256.325
6596
256.23
zo@linux:~>
Ako želimo samo floating point brojeve:

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

ZORAK LOGOUT 05.02.2004. 09:09


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

MANU login & logout za 1 mjesec.

zo@linux:~> egrep -E '^MANU[^\D\S]*(0.\.01\.2004\.)' lg

MANU LOGIN 01.01.2004. 12:00


MANU LOGOUT 01.01.2004. 23:58
MANU LOGIN 03.01.2004. 23:30
MANU LOGOUT 04.01.2004. 12:47
zo@linux:~>

MANU login & logout za 2 mjesec.

zo@linux:~> egrep -E '^MANU[^\D\S]*(0.\.02\.2004\.)' lg

MANU LOGIN 05.02.2004. 09:08


MANU LOGOUT 05.02.2004. 10:59
zo@linux:~>

Sve aktivnosti u 23 satu u 01 mjesecu bilo koji dan.

325/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

zo@linux:~> egrep -E '^[^\D\S]*(0.\.01\.2004\..)(23)' lg

MANU LOGOUT 01.01.2004. 23:58


GNO LOGOUT 02.01.2004. 23:59
EXI LOGIN 03.01.2004. 23:15
EXI LOGOUT 03.01.2004. 23:29
ZORAK LOGIN 03.01.2004. 23:29
MANU LOGIN 03.01.2004. 23:30
ZORAK LOGIN 04.01.2004. 23:00
zo@linux:~>

Svi Logout-ovi u 23 satu u 01 mjesecu bilo koji dan.

zo@linux:~> egrep -E'LOGOUT[^\D\S]*(0.\.01\.2004\..)(23)'


lg
MANU LOGOUT 01.01.2004. 23:58
GNO LOGOUT 02.01.2004. 23:59
EXI LOGOUT 03.01.2004. 23:29
zo@linux:~>

Svi login-ovi setera.

zo@linux:~> egrep -E '^SETER.?LOGIN[^\D\S]*(1([0-


9]?)\.02\.2004\..)' lg

SETER LOGIN 10.02.2004. 08:00


SETER LOGIN 13.02.2004. 08:08
zo@linux:~>

Svi logout-ovi setera.

zo@linux:~> egrep -E '^SETER.?LOGOUT[^\D\S]*(1([0-9]?)\.02\.2004\..)' lg

326/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

SETER LOGOUT 12.02.2004. 09:05


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

PRIMJER:

E-mail addr filter.

zo@linux:~> cat ma2

mali_fl@pl_hr
mali_fl@@pl_hr
jhjh??@dfd_pl
hjlsll_@ww
mali.pes@yoki.hr
mali-.pes@xor.mg.
mali-.pes@xor.mg.hl
mali....pes@xor.mg
.mali.pes@yahoo.com
ernest.flego@malibu.23
endel.fdu@kos.de.ff.dd
ma-Exvest@net.hr

zo@linux:~> egrep -E '(^([a-zA-Z0-9-_])+)\.?[a-zA-Z0-9-


_]*[@]{1}([a-zA-Z0-9]+)\.{1}([a-zA-Z]{2,10})(?(\.)[a-z-A-Z]{2,3}|[a-zA-Z]{0,3})'
ma2

mali.pes@yoki.hr
mali-.pes@xor.mg.hl
ma-Exvest@net.hr

IP addr filter

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:~> awk -f awk_ f1

marko puzla 5 kocke 0


darko on 7 kocke 0
narav tezak 4 marke 0
Broj duznika: 3

zo@linux:~>

Ili

zo@linux:~> awk '$5 ~/[0]/ {print $0} $5 ~ /[0]/


{lines++}END{print "Broj duznika:",lines} ' f1

marko puzla 5 kocke 0


darko on 7 kocke 0
narav tezak 4 marke 0
Broj duznika: 3

zo@linux:~>

vi – supstitucija u vi ex modu

PRIMJER:

zo@linux:~> cat sub1

function(x+1,x,x+2)

zo@linux:~> ex sub1

"sub1" 2L, 14C


Entering Ex mode. Type "visual" to go to Normal mode.

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

zo@linux:~> cat sub1

function(x,x+1,x+2)

PRIMJER:

zo@linux:~> cat sub2

Marko Blazevic, Parduk, HR, 10000 Zagreb


Melten Bukrest, SmartNet, SLO,21100 Ljubljana
Jadranka Muzic ,APL ,HR, 21000 Split
Gonar Tenser, Siemens,HR ,42000 Varazdin
Drago Mio,Endor-Soft ,BIH, 50000 Sarajevo

zo@linux:~> ex sub2

"sub2" 6L, 212C


Entering Ex mode. Type "visual" to go to Normal mode.

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

zo@linux:~> cat sub2

Marko Blazevic, HR, 10000 Zagreb, Parduk


Melten Bukrest, SLO,21100 Ljubljana, SmartNet
Jadranka Muzic ,HR, 21000 Split,APL
Gonar Tenser,HR ,42000 Varazdin , Siemens
Drago Mio,BIH, 50000 Sarajevo,Endor-Soft

330/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

zo@linux:~> ex sub2

"sub2" 6L, 212C


Entering Ex mode. Type "visual" to go to Normal mode.

:%s/[\t]*,[\t]*/,/g
:wq

//g[opcionalan] ako želimo da se izraz primijeni na cijelu liniju, //inače samo na prvi
pogodak

zo@linux:~> cat sub2

Marko Blazevic,HR,10000 Zagreb,Parduk


Melten Bukrest,SLO,21100 Ljubljana,SmartNet
Jadranka Muzic,HR,21000 Split,APL
Gonar Tenser,HR,42000 Varazdin,Siemens
Drago Mio,BIH,50000 Sarajevo,Endor-Soft

zo@linux:~>

zo@linux:~> cat txt

16:30-19:00 - - 16:30-18:00 16:30-18:00 8:00-9:35


MAT II MAT II NWP TALIJANSKI
DV.F101 DV.F101 DV.F101 DV.F02

19:00-21:20 - - 18:10-21:20 18:10-21:20 9:45-13:05


EKONOMIKA UNIX NWP(labosi?) PIN
DV.F101 DV.F101 DV.F112 DV.F02

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

"txt" 12L, 301C


Entering Ex mode. Type "visual" to go to Normal mode.
:%s/MAT/MATEMATIKA/g
MATEMATIKA II MATEMATIKA II NWP TALIJANSKI
:wq

zo@linux:~> cat txt


16:30-19:00 16:30-18:00 16:30-18:00 8:00-9:35
MATEMATIKA II MATEMATIKA II NWP TALIJANSKI
DV.F101 DV.F101 DV.F101 DV.F02

19:00-21:20 18:10-21:20 18:10-21:20 9:45-13:05


EKONOMIKA UNIX NWP(labosi?) PIN
DV.F101 DV.F101 DV.F112 DV.F02

13:15-14:50
PIN(labosi)
DV.F111

zo@linux:~> cat txt1

Kako bismo ubrzali stranicenje, trebamo podršku hardvera - asocijativnu memoriju.


TLB je hardverski ureñaj koji kesira polja tabele stranica.
Postoje specijalne instrukcije kojima OS može upravljati TLB-om.
Tipična veličina TLB-a je 8-2048 ulaza.
zo@linux:~> ex txt1

"txt1" 4L, 246C


Entering Ex mode. Type "visual" to go to Normal mode.

332/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb RegEx

:%s/TLB/Translation Look-Aside Buffer/g


3 substitutions on 3 lines
:wq

zo@linux:~> cat txt1

Kako bismo ubrzali stranicenje, trebamo podršku hardvera - asocijativnu memoriju.


Translation Look-Aside Buffer je hardverski ureñaj koji kesira polja tabele stranica.
Postoje specijalne instrukcije kojima OS može upravljati Translation Look-Aside
Buffer-om.
Tipična veličina Translation Look-Aside Buffer-a je 8-2048 ulaza.

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

Shell alati za rad sa tekstom

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.

2. Pregledavanje sadržaja tekstualne datoteke

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

g prikazuje se prva linija datoteke

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

G prikazuje se posljednja linija datoteke


N prikazuje se n-ta linija datoteke (korisnik unosi broj linije)
= prikazuje broj linije i postotak pročitanog sadržaja datoteke
q ili Q napuštanje programa less.
Dodatno, za program less može se definirati ulazni predprocesor (input preprocessor).
Predprocesor je izvršni program (ili shell skript) koji obrañuje datoteku prije nego što je
less prikaže na ekranu. Ulazni predprocesor definira se promjenjivom LESSOPEN. Primjer
ulaznog predprocesora je program gzip kojim se može izvršiti dekompresija tekstualne
datoteke prije prikazivanja na ekranu.
Slijedeći primjer prikazuje korištenje naredbe less:
$ less /etc/passwd
$ ls /etc/ | less

3. Prikazivanje početka i kraja datoteke (naredbe head i tail)

3.1. Naredba head


Naredba head na standardnom izlazu prikazuje početak datoteke.
Sintaksa naredbe je:
$ head [-n] filename
Opcijom –n, gde je n cjelobrojna vrijednost, korisnik odreñuje broj linija koje naredba head
treba da prikaže na ekranu (ukoliko se ne navede, podrazumijeva se 10).

3.2. Naredba tail


Za razliku od naredbe head, čija upotrebna vrijednost nije velika, naredba tail se češće
koristi. Tail prikazuje kraj datoteke na standardnom izlazu. Značenje opcije –n je identično
kao i za naredbu head - korisnik odreñuje broj linija koje naredba tail treba prikazati na
ekranu (ukoliko se ne navede, podrazumijeva se 10).

Sintaksa naredbe tail je:


$ tail [-n] [-f [--pid=PID]] file
Opcije -f i --pid imaju slijedeće značenje: -f nalaže programu tail da prati rast datoteke
(follow), a ukoliko se navede i --pid=PID, naredba završava rad sa završetkom rada procesa
PID. Sa ovim opcijama, naredba tail se može iskoristiti za praćenje podataka koje neki
program upisuje u datoteku.
Slijedeći primer pokazuje korištenje naredbi head i tail:
$ head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
$ tail -3 /etc/passwd
rt8900:x:888:890::/home/rt8900:/bin/bash
rt93799:x:889:891::/home/rt93799:/bin/bash
nrt2700:x:890:892::/home/nrt2700:/bin/bash

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. Brojanje znakova, riječi i linija

4.1. Naredba wc (word count) se koristi za brojanje znakova, riječi i linija u datoteci.

Sintaksa naredbe je:


$ wc [-cwl] filename
Bez opcija naredba prikazuje sve tri vrijednosti, dok se opcijama -c, -w i -l specificira
prebrojavanje znakova (bajtova), riječi ili linija. Datoteka /etc/protocols je iskorištena radi
ilustracije upotrebe naredbe wc:
$ wc -c /etc/protocols
1748 /etc/protocols
$ wc -w /etc/protocols
297 /etc/protocols
$ wc -l /etc/protocols
44 /etc/protocols
$ wc /etc/protocols
44 297 1748 /etc/protocols
Naredba wc je korisna u raznim situacijama - pomoću nje se jednostavno može odrediti
ukupan broj korisnika sistema, ili broj datoteka u direktoriju:
$ wc -l /etc/passwd
78 /etc/passwd
$ ls -w /etc | wc -l
145

5. Usporeñivanje sadržaja datoteka

Najčešće korištene naredbe za usporeñivanje datoteka su cmp (compare) i diff (difference).

5.1. Naredba cmp


Naredba cmp usporeñuje dvije datoteke i prikazuje rezultat usporeñivanja na standardnom
izlazu (ekran). Ukoliko se ne navede opcija -s, program cmp:
- ne ispisuje ništa na ekranu ukoliko su datoteke jednake,
- ukoliko su datoteke različite prikazuje broj znakova i linije u kojoj je pronañena prva
razlika. Ukoliko je jedna datoteka ista početku druge datoteke, cmp prikazuje poruku
da je pri usporeñivanju stigao do kraja jedne datoteke, prije nego što su pronañene
razlike.
Sintaksa naredbe cmp je:
$ cmp [-l | -s] file1 file2 [skip1 [skip2]]
gdje su file1 i file2 datoteke koje se usporeñuju. Opcije imaju slijedeće značenje:
-l prikazuje broj svakog znaka koji se razlikuje i oktalnu vrijednost ASCII
koda tog znaka,
-s ne prikazuje rezultat na ekranu, već samo vraća izlazni status (silent).

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

5.2. Naredba diff


Naredba diff je moćniji od programa cmp. Diff, kao što i samo ime kaže pronalazi sve
razlike izmeñu datoteka.

Sintaksa naredbe diff je:


$ diff [options] from-file to-file
U najjednostavnijem obliku komanda diff usporeñuj sadrža datoteke from-file sa sadržajem
datoteke to-file. Ukoliko je from-file direktorij, uporeñuju se datoteke from- file/to-file i to-
file (slično se postupa i ako je to-file direktorij). Ukoliko su oba parametra direktoriji, diff
uporeñuje datoteke sa istim imenima iz ovih direktorija. Ovo uporeñivanje nije rekurzivno,
osim ako se navede opcija -r.
Opcije koje se tiču detekcije razlika u sadržaju datoteka su:
-i diff ignorira razlike izmeñu malih i velikih slova
-w diff ignorira sav whitespace (odnosno tab znakove i razmaknice)
-b diff ignorira sve blanko karaktere kojima se završava linija u datoteci.
U ostale opcije spadaju:
--brief diff samo prijavljuje da li su datoteke različite ili ne
-r rekurzivno uporeñivanje datoteka po poddirektorijima
-y rezultat uporeñivanja prikazuje se u dve kolone (side-by-side).
Naredba diff vraća slijedeće vrijednosti kao izlazni status:
0 datoteke su identične
1 datoteke se razlikuju
>1 pojavila se greška.
Izlazni status naredbe diff je od značaja za shell programiranje. Slijedeći primjer pokazuje
upotrebu naredbe diff:
$ diff letter1.txt letter2.txt
2c2

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

< Please go away.


---
> Please go away now.
4c4
< This is dr. Jackyl !
---
> This is mr. Hyde !
$ diff -y letter1.txt letter2.txt
I do not want to talk to you. I do not want to talk to you.
Please go away. | Please go away now.
Hey ! Hey !
This is dr. Jackyl ! | This is mr. Hyde !

5.3. Naredba sdiff


Naredba sdiff spaja dvije datoteke i interaktivno šalje rezultat u outfile.

-a Tretira sve datoteke kao tekstualne i usporeñuje ih liniju po liniju, iako nisu
tekstualne.

-b Ignorira sav whitespace (odnosno tab znakove i razmaknice).

-B Ignorira promjene koje umeću ili brišu prazne linije.

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

-i Ignorira promjene velikih i malih slova, smatra ih istima.

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

Ne ispisuje zajedničke linije.

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

6. Ureñivanje sadržaja datoteka

Ureñivanje sadržaja datoteka po odreñenom kriteriju (sort)

6.1. Naredba sort


Sadržaj tekstualnih datoteka se naredbom sort može urediti u rastućem ili opadajućem
redosljedu. Ureñivanje se vrši po alfanumeričkom kriteriju ili po mjesecima u godini.

Sintaksa naredbe sort je:


$ sort [OPTION]... [FILE]...
Naredba sort vrši "sortiranje" linija datoteka navedenih parametrom FILE i ispisuje
konkatenaciju sortiranog teksta na standardni izlaz. Rezultat izvršenja ove naredbe se može
redirekcijom preusmjeriti u datoteku. U podrazumjevanom stanju, sort vrši alfanumeričko
ureñivanje u rastućem redosljedu, po prvoj koloni.
Opcije kojima se može modificirati kriterij ureñivanja su:
-b sort ignorira blanko karaktere na početku linije
-f sort ne pravi razliku izmeñu malih i velikih slova
-M sortiranje se vrši po mjesecima u godini (nepoznat < JAN < FEB < ... <
DEC)
-r inverzno sortiranje
+N definira kolonu tekstualne datoteke po kojoj se vrši sortiranje (+1 zna i
ureñivanje na osnovu druge kolone, +2 na osnovu treće i tako redom). Opcija
je korisna za ureñivanje tekstualnih tabela.

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

U ostale značajnije opcije spadaju:


-oFILE ureñen tekst se upisuje u datoteku FILE umjesto na ekran (slićno redirekciji
izlaza)
-tSEP definira se karakter koji predstavlja separator kolona, odnosno karakter kojim
su kolone odvojene (podrazumjevani karakter je razmaknica)
Slijedeći primjeri ilustriraju upotrebu naredbe sort za:
- alfanumeričko ureñivanje teksta
$ cat fullnames
Johnny Knoxville
Steve O
Chris Pontius
$ sort fullnames
Chris Pontius
Johnny Knoxville
Steve O
$ sort –r +1 fullnames
Chris Pontius
Steve O
Johnny Knoxville

- ureñivanje tabele po mjesecima u godini, sa definiranjem separatora kolona (:)


$ cat birthdays2
Jordan:FEB 13 1979
Smith:JAN 11 1980
Cooling:SEP 12 1950
Wotson:DEC 09 1965
Forsth:MAR 22 1977
$ sort -M +1 -t: birthdays2
Smith:JAN 11 1980
Jordan:FEB 13 1979
Forsth:MAR 22 1977
Cooling:SEP 12 1950
Wotson:DEC 09 1965
7. Priprema tekstualnih datoteka za ispis (pr)

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

2004-05-04 17:38 /etc/passwd


steveo:x:1032:1032::/home/steveo:/bin/bash
rdunn:x:1033:1033::/home/rdunn:/bin/bash
...
...

8. Podjela tekstualnih datoteka (split)

8.1. Naredba split

Svaka tekstualna datoteka se naredbom split može podijeliti na nekoliko manjih datoteka.

Sintaksa naredbe split je;

$ split condition inputfile prefix


gdje su:
condition uslov podjele datoteka
inputfile datoteka koja se dijeli
prefix prefiks na osnovu kojeg se formiraju nove datoteke.
To znači da program split dijeli datoteku inputfile na osnovu nekog uslova (broj bajtova ili
linija po jednom djelu), pri ćemu dijelove formira sa slijedećim imenima: prefixaa,
prefixab, prefixac, ..., prefixba, prefixbb, ...
Ukoliko je potrebno oformiti djelove veličine n bajtova koristi se slijedeća sintaksa:
$ split -bn inputfile prefix
Ukoliko je potrebno oformiti dijelove koj će u sebi sadržati n linija, koristi se slijedeća
sintaksa:
$ split -ln inputfile prefix
Na primjer, pretpostavimo da imamo datoteku myfile, čiji je sadržaj:
Hi !
My name is Wile E. Coyote.
I am a genius.
A pure genius.
Zadajemo naredbu split u slijedećem obliku:
$ split -l2 myfile mypiece
Nakon toga će se formirati datoteke mypieceaa i mypieceab čiji su sadržaji:
$ cat mypieceaa
Hi !
My name is Wile E. Coyote.

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.

8.2. Naredba csplit


-b, --suffix-format=FORMAT use
Koristi sprintf FORMAT umjesto %D.

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

-s, --quiet, --silent


Ne ispisuje veličinu izlaznih datoteka.

-z, --elide-empty-files
Uklanja prazne izlazne datoteke.

--help
Prikazuje pomoć i izlaz.

--version
Izlazna verzija informacije i izlaz.

9. Uklanjanje duplikata linija iz datoteke (uniq)


Naredba uniq iz tekstualne datoteke uklanja sve duplikate linija, odnosno izbacuje sve
konsekventne identične linije, osim prve u nizu. Rezultat izvršenja prikazuje se na ekranu a
po potrebi se može preusmjeriti u datoteku.
$ cat duplicates
First Line
Second Line
Second Line
Third Line
$ uniq duplicates > noduplicates
$ cat noduplicates

First Line
Second Line
Third Line

10. Traženje teksta u datoteci

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

sistemu ili ne je pretraživanje datoteke /etc/passwd. Ukoliko se datoteka provjerava


programom less, a na sistemu postoji veliki broj korisničkih naloga, ova procedura može
potrajati. Jednostavniji i brži način kojim se to može izvesti je korištenje naredbe grep.
Naredba grep traži navedeni uzorak teksta u svim linijama datoteke i na ekranu prikazuje
one linije u kojima je uzorak nañen.
Sam naziv grep je skraćenica od izraza Global Regular Expression Print: grep izvršava
globalnu pretragu datoteke, traži regularni izraz (Regular Expression) i ispisuje na ekranu
linije u kojima je taj izraz pronañen.
Za ispravno korištenje naredbe grep neophodno je elementarno poznavanje regularnih
izraza, koji se, izmeñu ostalog, koriste i za pronalaženje teksta u datoteci. Regularne izraze
koriste naredbe grep i egrep; treći program iz tog paketa, fgrep radi samo sa nizovima
znakova.

10.1. Regularni izrazi (regular expressions)


Regularni izraz je niz običnih i specijalnih znakova.
U obične znakove ubrajaju se:
- sva slova i brojevi
- tilda (~), obrnuti navodnik ('), znak uzvika (!), znak "at" (@), mrežica (#), podvlaka
(_), minus (-), znak jednakosti (=), dvotočka (:), točka-zarez (;), zarez (,), slash znak
(/).
U specijalne karaktere ubrajaju se:
- backslash znak (\)
- točka (.)
- zvijezdica (*)
- uglate zagrade ([) i (])
- carret znak (^)
- znak za dolar ($).
U najjednostavnijem obliku regularni izraz uključuje samo obične znakove i tada se naziva
string (niz znakova).

10.2. Naredba grep

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.

Jednostavan oblik naredbe grep


U najjednostavnijem obliku, sintaksa naredbe grep je:
$ grep RE filename
gdje je RE regularni izraz koji se traži u datoteci filename.
U nastavku teksta se radi ilustracije rada programa grep koristi slijedeća datoteka:
$ cat myfile

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

Zamjena jednog znaka


Točka (.) u regularnom izrazu govori naredbi grep da taj znak interpretira kao bilo koji
drugi, osim prelaska u novu liniju.
Na primjer:
$ grep 'w.r' myfile
Napomena: regularni izraz w.r mora se staviti izmeñu apostrofa (jednostrukih navodnika -
single quotes). Ukoliko se to ne učini, shell će interpretirati izvjesne specijalne znakove kao
shell specijalne znakove, tako da se naredbi grep u nekim slučajevima mogu proslijediti
nekorektni regularni izrazi.

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

Ponavljanje regularnih izraza


Znak zvjezdica (*) označava nula, jedno ili više ponavljanja nekog regularnog izraza. Na
primjer, uzorak X* se interpretira: prazan string, X, XX, XXX, XXX...XXX. Ukoliko je
potrebno jedno ili više ponavljanja, regularni izraz se formira kao XX*, što se interpretira
kao X, XX, XXX, XXX...XXX.
Na primjer,
$ grep 'p*' myfile
prikazuje cijelu datoteku myfile, dok:
$ grep 'pp*' REfile
prikazuje sve linije koje sadrže jedno ili više uzastopnih pojavljivanja slova p.

Usporeñivanje početka i kraja linije teksta


Ukoliko se znak carret (^) navede kao prvi znak regularnog izraza znači uzorak se
usporeñuje sa početkom linije. Na primjer, ^[Tt]he odgovara svim linijama datoteke koje
počinju stringom the ili The:
$ grep '^[Tt]he' myfile
Ukoliko se znak za dolar ($) navede kao posljednji znak regularnog izraza, uzorak se
usporeñuje sa krajem linije. Na primjer, [Tt]he$ odgovara svim linijama koje se završavaju
nizovima znakovaa The ili the:
$ grep '[Tt]he$' 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

Primjer složenog regularnog izraza


Standardni američki format datuma je niz znakova formiran na slijedeći način: ime mjeseca
s velikim početnim slovom (najmanje tri znaka - May, najviše devet znakova - September),
razmak, jedna ili dvije cifre za dan, zarez, razmak, četiri cifre za godinu. Regularan izraz se
formira na slijedeći način
[A-Z][a-z]\{2,8\} [0-9]\{1,2\}, [0-9]\{4\}
i odgovara nizovima znakova tipa: August 16, 2004.

Najčešće korištena naredba iz grep paketa je grep.


Kompletna sintaksa naredbe grep je:
$ grep [options] LRE [file(s)]
gdje je LRE osnovni regularni izraz (Limited Regular Expression), a file(s) skup datoteka u
kojima se uzorak traži. Od značajnijih opcija spominjemo slijedeće:
-c grep prikazuje broj linija u kojima je nañen uzorak,
-h grep ne prikazuje imena datoteka ukoliko se pretraživanje vrši u nekoliko
datoteka,
-i grep ignorira razlike izmeñu velikih i malih slova,
-n prije svake linije grep će prikazati i redni broj linije u datoteci.

10.3. Naredba egrep


Naredba egrep dozvoljava upotrebu proširenih regularnih izraza. Sintaksa naredbe je slična
sintaksi naredbe grep:
$ egrep [options] FRE [files]
gdje je FRE prošireni regularni izraz (full, limited regular expression). Ovi regularni izrazi
predstavljaju proširenje skupa osnovnih regularnih izraza slijedećim operatorima:
RE+ traži se jedno ili više pojavljivanja regularnog izraza RE,
RE? traži se jedno ili nijedno pojavljivanje regularnog izraza RE,
RE1 | RE2 traži se regularan izraz RE1 ili regularan izraz RE2. Znak pipe (|) se ponaša
kao logički ILI operator,
(RE) grupira se veći broj regularnih izraza.
Slijedeći primjeri ilustriraju
- traženje linija koje sadrže najmanje dva uzastopna velika slova u datotekama file1 i
file2:
$ egrep '[A-Z][A-Z]+' file1 file2

- 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

10.4. Naredba fgrep


Naredba fgrep na ekranu prikazuje sve linije datoteke ili grupe datoteka koje u sebi sadrže
zadati niz znakova. Za razliku od naredbi grep i egrep, fgrep interpretira svaki znak u nizu
kao običan znak. Fgrep ne podržava rad sa regularnim izrazima, i u nekim slučajevima je
pogodniji za rad (na primjer, ukoliko se traži niz oblika "C:\A*.txt").

Sintaksa naredbe fgrep je:


$ fgrep [options] string [files]
Naredba koristi iste opcije kao i naredbe grep i egrep.

11. OSTALE NAREDBE

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;

tr [-c] [-d] [-s] [string1] [string2]

Primjeri:

tr b B < infile > outfile

tr a-z A-Z < infile > outfile

tr -d '\001-\010\013-\037\177-\377' < infile > outfile

Neke korisne opcije:

-c zamjenjuje set znakova zadanih sa string1

-d briše sve ulazne znakove specificirane sa string1

-s zamjenjuje instancu ponavljanih znakova sa jednim znakom

string1 prvi string za zamjenu

string2 string koji zamjenjuje prvi string

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

11.2. naredba columns

-primjenjuje se za ispis teksta u pravilno formiranim stupcima

Sintaksa naredbe;

column [-tx] [-c columns] [-s sep] [file ...]

Neke korisne opcije:

-c prikazuje širinu kolona

-s specificira set znakova za delimitiranje kolona za –t opciju

-t determinira broj kolona koje sadrži izlaz

-x puni kolone prije punjenja redova

primjer:
- pri ispisu tekstualnih datoteka broj kolona na stranici (podrazumijevana vrijednost je 1)
$ lp -o columns=2 filename
$ lp -o columns=3 filename

11.3. naredba paste

-spaja redove iz jedne ili više datoteka u jedan, svi prvi redovi u prvi, drugi
redovi u drugi red ...

Sintaksa naredbe;

paste [OPTION]... [FILE]...

Neke korisne opcije:

-d, --delimiters=LIST reuse characters from LIST instead of TABs

-s, --spaja serijski jednu datoteku umjesto paralelno

primjer:

%paste –s –d” \n” welcome.msg

11.4. cut naredba

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;

cut –flist [-ds] [-s] [datoteka1...]


cut –clist [datoteka1...]

-pri čemu je list lista polja koju želimo izdvojiti (u drugom slučaju).

Neke korisne opcije:

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: -f5 - Isto kao prethodni primjer.

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

11.5. expand naredba

-TAB-ove zamijeni razmacima

Sintaksa naredbe;

expand [ -t tablist ] [-tabstop] [-tab1, tab2,. . ., tabn] [ file ... ]

Neke korisne opcije:

-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

Koristi zarezom odvojene lista odreñenih tabulatorskih pozicija.

--help
Prikazuje pomoć i izlaz

--version
Daje informacije o verziji i izlaz.

11.6. unexpand naredba -razmake zamijeni TAB-ovima

Sintaksa naredbe;

unexpand [ -a ] [ -t tablist ] [ file ...]

primjer:

% unexpand login.expand >login.unexpand

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

Neke korisne opcije:

-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

Jednako kao -1fieldnumber.

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

11.8. Naredba printf -radi ispis na izlaz

Sintaksa naredbe;

printf format [ argument]

Neke korisne opcije;

Format - opis formata za ispis

Argument - stringovi koji će biti ispisani na standardni ispis

Primjer:

printf "hello" – prikazuje hello na izlazu.

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;

tee datoteka1 [datoteka2...]

Neke korisne opcije;

-a - dodaje na datoteku, umjesto inicijalnog brisanja

-i - zanemari interrupt signale

--help - prikaže help

--version - prikaže verziju


Primjer:

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: ls-al| tee izlaz| wc-l; cat izlaz

11.10. naredba read


- naredba read se koristi za čitanje ulaznih podataka sa tipkovnice i memoriranje
unijete vrijednosti u promjeljivu. Dodatno, to je jednostavan i dobar način da se u
razvojnoj fazi ubace prekidne točke u program i na taj način kontrolira njegovo izvršavanje.

Sintaksa komande read je:


$ read varible1, varible2,...varibleN

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

11.11. naredba fold

-razlomi linije

Sintaksa naredbe;

fold [ -bs ] [-w width | -width] [file]

Neke korisne opcije:

-b -broji širinu u bajtovima

-s -ako segment linije ima prazan znak lomi liniju nakon tog znaka

-w width | -width -specificira maksimalnu duljinu linije u koloni. Difoltna vrijednost je 80

-file - path datoteke koja se lomi

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

11.12. naredba comm

- nalazi linije zajedničke dvjema datotekama

Sintaksa naredbe;

comm [-1] [-2] [-3 ] file1 file2

Neke korisne opcije:

-1 -izostavlja izlazne kolone koje imaju linije iste kao file1

-2 -izostavlja izlazne kolone koje imaju linije iste kao file

-3 -izostavlja izlazne kolone koje imaju duplicirane linije u file1 i file2

file1 -ime prve datoteke za komparaciju

file2 -ime druge datoteke za komparaciju

primjer:

% comm sort1 sort2 -komparira sort1 i sort2

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

VI je „screen based“ editor, najčešće korišten na UNIXoidima. Osnovni razlog


uspješnosti VI editora su mnoga svojstva koja pomažu programerima, ali i mnoštvo
mogućnosti koje nudi u, nazovimo, svakodnevnom editiranju file-ova. Česta je pojava da ga
početnici izbjegavaju upravo zbog mnoštva mogućnosti koje nudi.
Osim VI-a postoje još dva standardna UNIX editora, to su:
 ed – linijski orijentiran editor, prilično kompliciran za uporabu
 ex –linijski editor – praktično jednakih mogućnosti kao i VI

Startanje:

VI pruža mogućnost kreiranja novih ili editiranja „starih“ dokumenata“.


Naredba za pokretanje je:

VI [filename] (filename je opcionalan)

Ukoliko se prilikom pokretanja ne navede ime file-a potrebito je prilikom snimanja dati
ime. Prilikom prvog pokretanja ekran je ispunjen tildama (~) s lijeve strane ekrana. Na dnu
(ukoliko je naveden filename) pisat će nešto poput:

„filename“ lines 21, 400 characters (ime file-a, broj linija i broj znakova)

Ukoliko file nije postojao pisat će nešto poput:

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

VI editor ima dva moda rada:


 komandni
 insert

Komandni mod:

Omogućuje unos komandi i manipulaciju tekstom. Za ulazak u komandni mod potrebito


je pritisnuti dirku Escape (Esc)(prilikom startanja VI se i nalazi u komandnom modu).
Pojavit će se „:“ u očekivanju komande. Naredbe su obično duge jedan (1) ili dva (2) znaka.
Za prelazak u insert mode koriste se naredbe „a“ i „i“.
Format naredbi je:

[count] komanda [where]

Count je broj koji 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

 x briše znak pod kursorom (count za obrisati count znakova)


 q napuštanje VI editora (ukoliko je dokument mijenjan dobit ćemo
upozorenje)
 q! napuštanje bez snimanja (nema upozorenja)
 w snimanje (može se navesti iza w ime file-a)
 wq snimiti i napustiti

Text baferi u VI

VI ima 36 bafera sa spremanje dijelova teksta i bafer 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:

“mdd – znači koristi bafer m i obriši trenutnu liniju ili


“mp – kopira sadržaja bafera m(uradi „paste“)

Sječenje (cut) teksta

Naredba koju obično koristimo za sječenje (cut) texta je d.

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)

Naredbe za lijepljenje su p i P. Jedina razlika meñu njima je u relativnoj poziciji


kursora gdje lijepe. p lijepi specificirani ili opći bafer poslije pozicije kursora, dok P p lijepi
specificirani ili opći bafer prije pozicije kursora. Specifiranje counta prije paste naredbe lijepi
tekst count puta.

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.

Na primjer: :set sw=5 (podesit će pomak na 5).

Naredbe za indentaciju:

<< Pomiče trenutnu liniju na lijevo za širinu jednog pomaka


>> Pomiče trenutnu liniju na desno za širinu jednog pomaka

Posebno zgodna osobina VI editora je to što omogućuje provjeru koda za „visećim“


zagradama. Naredba % će tražiti lijevu pripadajuću zagradu.

Pretraživanje riječi i znakova:

VI posjeduje dva načina pretrage:


 po znakovima
 po riječima

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.

Gore navedene naredbe f i F, te t i T mogu biti ponovljene koristeći ; ili , gdje: ;


ponavlja pretragu u istom smijeru, dok , to radi u obrnutom smijeru.

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

Moguće je podesiti način na koji se VI ponaša i to se radi naredbom :set.


Edit opcije raspoložive naredbom set:

noautoindent magic noshowmatch


autoprint mesg noshowmode
noautowrite nmodelines noslowopen
nobeautify nonumber tabstop=8
directory=/tmp nonovice taglength=0
nodoubleescape nooptimize tags=tags
/usr/lib/tags
noedcompatible paragraphs=IPLPPPQPP LIpplpipnpbp term=xterm
noerrorbells prompt noterse
noexrc noreadonly timeout
flash redraw timeoutlen=500
hardtabs=8 remap ttytype=xterm
noignorecase report=5 warn
keyboardedit scroll=11 window=23
keyboardedit! sections=NHSHH HUuhsh+c wrapscan
nolisp shell=/bin/csh wrapmargin=0
nolist shiftwidth=8 nowriteany

Nekim od ovih opcija je potrebito dodijeliti vrijednost sa =, dok su druge set ili not set.

Primjer:

:set autoindent - Ova opcija će osigurati da svaka 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

SKRAĆENICE I MAPIRANJE DIRKI:

Veoma korisna naredba u VI-u je naredba skraćivanja naredbi (abbreviate command).


Naredba izgleda ovako:

:ab string thing to substitute for

Primjer:

Ako smo otkucali nešto poput „Pero Peric huuuuuuuuuuuuuum“ i ne želimo to stalno
ponavljati možemo napisati:

:ab Pe Pero Peric huuuuuuuuuuuuuum


Sada kad otkucamo Pe pojavit će se: Pero Peric huuuuuuuuuuuuuum

Skraćenice se mogu ukinuti. Naredba za to je unabbreviate.


U prethodnom primjeru bi bilo: :una Pe
Za listu skraćenica otkucati: :ab.

Druga veoma korisna naredba je naredba za mapiranje.Postoje dvije vrste mapiranja u


komandom i u insert modu. Ove dvije komande su:
:map
:map!
Mapiranje radi slično skraćenicama, da se sekvenca tipki i potom sekvenca za zamjenu.

EXINIT Environment Variabla and the .exrc file:

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 koristite /bin/sh or /bin/ksh koristite ovu naredbu:


export EXINIT
EXINIT='...'

Umjesto ... stavite naredbu koju želite, na primjer za C shell:


setenv EXINIT 'set ai nu wm=3'

Ako želite staviti 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.)

Upozorenja vezana uz rad na radnim stanicama:

Na dvije stvari treba paziti kada radimo sa radnim stanicama(workstations):


 editiranje istog file-a u isto vrijeme u više puta
 promjena veličine ekrana.

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:

Rezanje(cutnig), lijepljenje(pasting) i brisanje(deleting)

 “ – specifiranje bafera koji se koristi


 D – briše od trenutne pozicije do kraja linije
 P – lijepi sadržaj bafera prije trenutne pozicije kursora
 X – briše znak prije kursora
 d – briše do where (pogledati modove rada)
 p - lijepi sadržaj bafera poslije trenutne pozicije kursora
 x – briše znak na kom je kursor

Umetanje teksta

 A – dodaje na kraj trenutne linije


 I – ubacuje na početak linije
 – ulazi u insert mode u novu liniju iznad trenutne pozicije kursora
 i – ulazi u insert mode, znakovi će biti ubacivani prije trenutne pozicije
kursora
 - ulazi u insert mode u novu liniju ispod trenutne pozicije kursora

Kretanje kursora unutar file-a

 Ctrl + B – skrola nazad jednu stranicu. Count skrola navedeni broj stranica
 Ctrl + D – skrola naprijed pola prozora. Count skrola broj linija
 Ctrl + F – skrola naprijed jednu stranicu. Count skrola navedeni broj stranica
 Ctrl + H – 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

 Ctrl + M – pomiče kursor na prvi znak slijedeće linije


 Ctrl + N - pomiče kursor dole jednu liniju u istoj koloni. Count pomiče
navedeni broj linija dolje
 Ctrl + P – Pomiče kursor gore jednu liniju u istoj koloni. Count pomiče
toliko linija gore
 Ctrl + U – Skrola nazad pola prozora. Count skrola toliko linija.
 $ - pomiče kursor na kraj trenutne linije. Count pomiče na kraj slijedećih
linija
 % - pomiče kursor na mjesto parne zagrade
 ^ - pomiče kursor na prvi „non-whitespace“ znak
 ( - pomiče kursor na početak rečenice
 ) – pomiče kursor na početak slijedeće rečenice
 { - pomiče kursor na prethodni paragraf.
 } – pomiče kursor na slijedeći paragraf
 | - pomiče kursor na kolonu specificiranu sa count
 + - pomiče kursor na prvi non-whitespace znak u slijedećoj liniji
 - pomiče kursor na prvi non-whitespace znak u prethodnoj liniji
 _ - pomiče kursor na prvi non-whitespace znak u trenutnoj liniji
 0 (Nula) – pomiče kursor na prvu kolonu trenutne linije
 B – pomiče kursor nazad jednu riječ preskačući punktuaciju
 E – pomiče kursor na kraj riječi preskačući punktuaciju
 G – ide na broj linije specificiran sa count, ako count nije zadan onda ide na
kraj file-a
 H – pomiče kursor na prvi non-whitespace znak na vrhu ekrana
 L – pomiče kursor na prvi non-whitespace znak na dnu ekrana
 M – pomiče kursor na prvi non-whitespace znak na sredini ekrana
 W – pomiče se naprijed na početak riječi preskačući punktuaciju
 b – pomiče kursor nazad jednu riječ. Ako je kursor na sredini riječi, pomiče
kursor na prvi znak te riječi
 e – pomiče kursor naprijed jednu riječ. Ako je kursor na sredini riječi,
pomiče kursor na zadnji znak te riječi
 h – pomiče kursor na lijevo jedan znak
 j – pomiče kursor dolje jednu liniju
 k – pomiče kursor gore jednu liniju

368/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor

 l – pomiče kursor na desno jedan karakter


 w – pomiče kursor naprijed jednu riječ. Ako je kursor na sredini riječi
pomiče kursor na prvi znak slijedeće riječi

Kretanje kursora po ekranu

 Ctrl + E – skrola naprijed jednu liniju. Count skrola toliko linija


 Crtrl + Y – skrola nazad jednu liniju. Count skrola toliko linija
 z – ponovo iscrtava ekran sa slijedećim opcijama:
 “z<return>“ stavlja trenutnu liniju na vrh ekrana.
 “z“ stavlja trenutnu liniju na centar ekrana
 “z-“ stavlja trenutnu liniju na dno ekrana

Ako se stavi count prije z-a on mijenja trenutnu liniju u specificiranu. Npr. 18z stavlja
liniju 18 na centar ekrana.

Zamjena teksta:

 C – mijenja do kraja linije od trenutne pozicije kursora


 R – mijenja znakove na ekranu sa setom znakova unesenih sa Escapeomey.
 S – mijenja cijeli liniju
 c- mijenja sve dok cc ne promjeni trenutnu liniju. Count mijenja navedeni
broj linija.
 R – mijenja jedan znak pod kursorom. Count mijenja navedeni broj znakova
 s – mijenja jedan znak pod kursorom i ide u insert mode. Count mijenja broj
znakova. $ će biti stavljen na zadnji znak zamjene

369/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor

Traženje teksta ili znakova:

 , - ponavlja zadnje f, F,t ili T naredbu u obrnutom redoslijedu


 / - pretražuje file prema dole tražeći string specificiran poslije /
 ; - ponavlja zadnju f, F, t ili T naredbu
 ? – pretražuje file prema gore tražeći string poslije znaka ?
 F – pretražuje trenutnu liniju unatrag tražeći znak specificiran poslije F
naredbe. Ako pronañe pomiče kursor na tu poziciju.
 N – ponavlja zadnju pretragu zadanu sa / ili ? ali u obrnutom smjeru
 T – pretražuje trenutnu liniju nazad tražeći znak specificiran poslije T
naredbe i pomiče se na kolonu pošto je pronañe
 f – pretražuje trenutačnu liniju tražeći znak specificiran poslije f naredbe.
Ako nañe pomiče kursor na danu poziciju
 n – ponavlja zadnju pretragu zadanu sa / ili ?
 t – pretražuje trenutačnu liniju tražeći znak specificiran poslije t naredbe i
pomiče se na kolonu prije znaka ako je pronañen

Formatiranje znakova/linija

 ~ mijenja „case“ znaka po kursorom


 < - pomjera linije do „where“ prema lijevo za jednu širinu pomaka
 << pomjera trenutnu liniju na lijevo i može biti specificirano sa count
 - pomjera linije do „where“ prema desno za jednu širinu pomaka
 << pomjera trenutnu liniju na desno i može biti specificirano sa count
 J – spaja trenutnu liniju sa slijedećom. Counr spaja navedeni broj linija

Snimanje i izlaz:

 Ctrl + \ - napušta VI mode i odlazi u EX mode. EX editor je linijski editor na


kom je baziran Vi editor. Komanda za povrat nazad je :vi
 Q – napušta VI i odlazi u EX mode
 ZZ – napušta editor, snima ako ima izmjena

370/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb VI editor

Miscellany:

 Ctrl + G – Prikazuje ime file-a i status


 Ctrl + L – Čisti i ponovo iscrtava ekran
 Ctrl + R –Ponovo iscrtava ekran uklanjajući pogrešne linije
 Ctrl + [ - Escape tipka. Odgaña prethodno danu komandu
 Ctrl + ^ - ide nazad na prethodno editirani file
 ! – izvršava shell naredbu.
 & - ponavlja prethodnu :s naredbu
 . – ponavlja zadnju naredbu koja je promijenila file
 : - početak tipkanja EX editor naredbi. Naredba je izvršena kad user otipka
return
 @ - ispisuje naredbu spremljenu u baferu
 U – vraća trenutnu liniju u stanje koje je bilo prije no što je kursor ušao u
liniju
 m – označava trenutnu poziciju sa znakom specificiranim poslije m naredbe
 u – vraća zadnju promjenu napravljenu na filu. Ponovno u će negirati
prethodno u

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?

Emacs je besplatan, portabilan, nadogradivi tekst editor.


Besplatan znači da je izvorni kod (source code) za Emacs dostupan svima sa pristupom
internetu te se može besplatno kopirati i redistribuirati. Portabilan znači da se Emacs može
pokrenuti na nizu strojeva i radi na nizu operativnih sustava tako da se slobodno možete
pouzdati u činjenicu da možete koristiti isti program za ureñivanje teksta neovisno kojim
strojem se služite. Sa riječi nadogradivi opisuje se treća, ali vjerojatno najvažnije
karakteristika Emacs-a. Ne samo da možete prilagoditi sve mogućnosti Emacs-a tako kako
vama najviše odgovara, već možete isprogramirati Emacs da radi stvari koje njegovim
kreatorima nisu uopće pale na pamet.
Zbog svega ovoga Emacs je izuzetno popularan i uspješan program. Jedini popularniji
tekst editor koji se koristi na Linux i Unix strojevima je sveprisutni vi. Ali Emacs nije samo
program za obradu teksta. Ako koristite jedan od mnogih poznatijih programskih jezika,
Emacs vjerojatno sadrži „mod“ koji omogućuje lako editiranje koda u tom jeziku.
Kompajliranje, debagiranje , direktna interakcija sa interpreterom, skakanje po kodu na bilo
koju poziciju označenu simbolom (funkcija ili ime varijable), sve su to opcije koje pisac koda
može koristiti u Emacsu.
Emacs takoñer sadrži programe za čitanje pošte (mail readers), za čitanje vijesti (news
readers),www, gopher i FTP klijente, „spell checking“ i psihologa (Rogarian therapist-probati
obavezno)
Emacs je većinom napisan u Lisp programskom jeziku, a u jezgri se nalazi Lisp
interpreter napisan u C-u. Samo osnovni dijelovi Emacsa su napisani u C-u.
Emacs je stvoren prije dvadeset godina tako da postoji more različitih „add-on“ paketa,
od kojih vam većina omogućuje stvari o kojima kreator Emacsa nije ni sanjao.

374/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs

Varijacije Emacsa i kako je sve počelo

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.

Kako doći do Emacs editora?

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

TEORIJA I PRAKSA TIPKOVNICE


I SKUPOVA ZNAKOVA

Jedan od prvih problema sa kojim se početnici na Emacs-u susreću je tipkovnica i skup


znakova. Budući da je portabilan, Emacs ne može znati kakvom tipkovnicom se vi služite i
koje sve tipke ta tipkovnica sadrži. Sve Emacs komande su 8-bitni ASCII znakovi, meñutim
neke tipkovnice imaju tipke koje ne odgovaraju nekom odreñenom ASCII znaku. To je
naročito slučaj na PC i Macintosh tipkovnicama kada su spojene na Unix stroj preko nekog
posredničkog ili telekomunikacijskog programa. U tom slučaju, jedini podaci koji teku
izmeñu tipkovnice i Unix stroja su 8-bitni ASCII bajti.
Na primjer, tipična PC tipkovnica ima tipke označene sa PAGE UP i HOME,
strelicama, funkcijske tipke itd. Ne samo da sve ove tipke nemaju ASCII vrijednosti, već
uopće ne generiraju ASCII znake. PC ih može prepoznati kroz „scan codes“, ali što se dogaña
kada ste spojeni na Unix stroj preko telekomunikacijskog programa i pretisnete neku od ti
tipki?
Jedna od slijedećih stvari se dogodi, ovisno o telekomunikacijskom programu:
 Uopće se ne pošalje ASCII znak
 Jedan ASCII znak se pošalje, ali to je obično obavezan znak koji se razlikuje
od jednog telekomunikacijskog programa do drugog
 Pošalje se neka izlazna sekvenca
Može se čak dogoditi da telekomunikacijski program mijenja vrijednost koju odreñena
tipka pošalje čak i kod tipki koje imaju pridruženu ASCII vrijednost!!! (Control-@ je čest
problem).
I na kraju još i operativni sustav može zamutiti stvari dodatno. Emacs očekuje da mu je
cijeli ASCII znak skup dostupan, ali može se dogoditi da OS uzurpira neke znake. Najbolji
primjer su control-S i control-Q koji se nekad koriste za kontrolu toka. To su važne Emacs
komande i morate biti sigurni da ih vaš telekomunikacijski ili bilo koji drugi program nije
oduzeo (Emacs se sam pobrine za OS) .
Kod svega gore navedenog Emacs je nemoćan. On samo vidi 8-bitne znake koje mu
dostavlja OS. Ali ako dobro razumijete vaš telekomunikacijski program nećete imati
problema sa Emacs-om i tipkama.

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

U nastavku teksta koristiti će se standardna Emacs notacija za opisi utipkavanja:

 C-x Za bilo koji x, znak je Control-x


 M-x Za bilo koji x, znak je Meta-x (više o Meta znakovima u
nastavku teksta).
 C-M-x Za svaki x, znak je Control-Meta-x.
 RET Tipka povratka (zapravo C-m).
 SPC Razmaknica
 ESC Tipka izlaza, odgovara joj C-[

377/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs

NAREDBENA STRUKTURA EMACS-A

Za Emacs svaka udarac tipke je naredba, čak i jednostavni tipke kao A ili z (ispis
znakova) su naredbe za umetanje. Znakovi koji ne 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

Prefiksne ili složene tipke

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:

 C-c Koristi se za naredbe koje su specifične za odreñeni „mod“ tako da bi se


mogle koristiti za različite naredbe ovisno o kontekstu. To su najvarijabilnije
Emacs naredbe.
 C-h Koristi se za Help naredbe
 C-x Ovaj prefiks se najčešće koristi za naredbe za manipulaciju datoteka,
prozora i meñuspremnika.

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.

Korištenje produženih naredbi (extended commannds)

Logičan zaključak svega gore navedenog je da čak i najveći Emacs zaljubljenik ne


može znati sve naredbe. Neke naredbe se koriste vrlo rijetko, i obično je lakše naći dugo ime
naredbe (koristeći info, Emacs-ov online sustav za pomoć) i utipkati ga direktno.
Postoji jedna Emacs naredba koja se koristi za izvršavanje bilo koje druge naredbe: M-
x. Kada upišete M-x Emacs vas traži da upišete dugo ime naredbe i onda ju izvrši.

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

DATOTEKE, MEðUSPREMNICI I PROZORI


(FILES, BUFFERS AND WINDOWS )

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.

Naredbe za manipulaciju datotekama

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

meñuspremnik, naziva se po datoteci i inicijalizira se sa kopijom datoteke. U oba slučaja


trenutni prozor prikazuje meñuspremnik.

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

Naredbe za manipulaciju meñuspremnika

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

Naredbe za manipulaciju prozorima

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

Za ući u Emacs jednostavno utipkajte:

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

i pokrenete Emacs sa inicijalnom datotekom

Za izlaz iz Emacsa koristite naredbu C-x C-c (koja je vezana za save-buffer-kill-emacs).


Ponuditi će vam se spremanje meñuspremnika i izlaz iz Emacsa.
Emacs možete i suspendirati (u Unix-su to znači zaustavljanje programa i stavljanje ga
u pozadinu) koristeći naredbu C-x C-z (koja je vezana za suspend-emacs). Kako ga ponovo
pokrenuti ovisi o vašem shell-u, ali je vjerojatno temeljeno na fq naredbi.

Naredbe za samo-umetanje (self inserting commands)

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

Linija moda (The Mode Line)

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:

 Stanje meñuspremnika. Da li je promijenjen, nije promijenjen ili je read-


only.
 Ime datoteke koju ureñujete.
 Glavni mod.
 Dio datoteke koju vidite na ekranu:
All Vidite cijelu datoteku
Top Vidite vrh datoteke
Bot Vidite dno datoteke
Percentage NN% pokazuje postotak datoteke iznad vrha prozora

Mali meñuspremnik (The Minibuffer)

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.

Duge linije (Long Lines)

Emacs ne prekida linije automatski, osim ako to od njega ne zatražite. Po defaultu


ostavlja linije onoliko duge koliko vi pišete. A što je još važnije ne dira vaše duge linije u
datotekama (neki editori kao stari vi su rezuckali linije).
Možda se čini dosadnim da morate udariti return na kraju svake duge linije, ali to je
zapravo defaultna postavka samo za neke modove. Razlog za to je taj što je Emacs editor za
programere, a svaki editor koji umeće prekide linija bez da mu vi to kažete nije dovoljno
pouzdan da se u njemu editira kod. U modovima za ureñivanje teksta, Emacs umeče prekide
linija za vas.

Prekidanje i poništavanje (Interrupting and Abortiong)

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

Emacs ima ugrañeni „hypertext documentation reader“, Info. Da bi ga pokrenuli


otipkajte C-h i ili M-x info RET. On sadrži svoj vlastiti tutorial. Tutorial pretpostavlja da
poznajte Emacs otprilike koliko je opisan u ovom dokumentu.

Beskonačni Undo i Redo

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.

Backups i Auto Save Mode

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

Emacs nudi više mogućnosti nadogradnje (completion. To znači da Emacs pokušava


završiti vaša parcijalno otipkana imena datoteka, imena naredbi, itd. DA bi pozvali
completion pritisnite TAB.

388/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs

Davanje argumenata naredbama

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.

Citiranje znakova koji su vezani kao naredbe (Quoting


characters That Are Bound As Commands)

Ponekada trebamo umetnuti controlni znak u datoteku. Ali kako da umetnemo ESC
kada je koristimo kao prefiks naredbu? Odgovor jr: koristimo quoted-insert koji je vezan za
C-q. C-q rdi kao prefiks naredba na 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

Onemogućene naredbe (Disabled Commands)

Neke naredbe koje su vrlo zbunjujuće za početnike su po defaultu onemogućene. Kada


pozovete onemogućenu naredbu pojavljuje se prozor sa dokumentacijom za tu naredbu i nude
vam se tri mogućnosti

 Razmak- da probate naredbu jednom i ostavite ju onemogućenom


 Y- da ju probate i omogućite (nema upita kod ponovnog korištenja)
 N- da ne učinite ništa (naredba ostaje onemogućena)

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

KRETNJE I OBJEKTI (MOTION AND OBJECTS)

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.

E kao end (kraj), a A kao početak abecede.

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.

Stranice su u većini modova odvojene sa C-l.

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

BRISANJE, UBIJANJE I VRAĆANJE


(DELETING, KILLING AND YANKING)

Emacs-ove naredbe za brisanje su takoñer bazirane na gore navedenim tekstualnim


objektima. Ali prvo da se razjasni terminologija: brisanje (deletion) označava brisanje teksta
iz meñuspremnika bez spremanja; većina naredbi za brisanje radi na malim dijelovima teksta.
Ubijanje (killing) označava spremanje obrisanog teksta tako da ga se poslije može vratiti
(yanking).
Ubijeni tekst je spremljen u kill-ringu. Kill-ring sadrži zadnjih N ubijanja (kills). N je
po defaultu 30, ali to se može promijeniti promjenom kill-ring-max varijable. Kill-ring se
ponaša kao fifo struktura kod ubijanja, poslije 30-tog ubojstva (kill) prvo se briše. Za razliku
od toga, kod vraćanja (yanking) kill-ring se ponaša kao krug (možete vraćati stvari cirkularno
kao po krugu). kill-ring-max se ne odnosi na veličinu teksta (u bajtima) koju možete spremiti
u kill-ring (veličina je neograničena), već na broj ubojstava.

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

Naredbe forward-kill-paragraph i backward-kill-paragraph postoje, ali po defaultu nisu


vezane za neke odreñene tipke.

Stranice

Ne postoje naredbe za ubijanje stranica

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

Ne postoje naredbe za ubijanje funkcija (defun).

Produžena ubojstva (Extended Kills)

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

KOPIRANJE I POMICANJE TEKSTA

Emacs nema potrebu za posebnim naredbama za pomicanje i kopiranje teksta (već smo
ih naveli!!!). Za pomicanje teksta, jednostavno ga ubijte i vratite negdje drugdje. Za kopiranje
ubijte tekst i odmah ga vratite. 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

TRŽENJE I ZAMJENA (SEARCH AND REPLACE)

Emacs sadrži niz neobičnih i poprilično složenih naredbi za pronalaženje i zamjenu.


Najvažnija je incremental search. To izvršava naredba isearch-forward, koja je vezana za C-s;
ona traži inkrementalno, jedan po jedan znak, kako vi upisujete string koji tražite
(search string). To znači da često Emacs nañe ono što vi tražite prije nego što vi upišete cijeli
string. Da bi prekinuli pretragu, jednostavno pritisnite RET ili otipkajte bilo koju Emacs
naredbu (što će izazvati prekid pretrage i izvršenje naredbe). Možete tržiti slijedeće
poklapanje sa C-s ili obrnuti pretragu sa C-r; DEL koristite za brisanje i promjenu onoga što
tražite.

Naredba isearch-backward, koja je vezana za C-r radi na isti način, ali traži unazad.

Sa vremena na vrijeme možda poželite tražiti ne-inkrementalno. To možete učiniti


utipkavanjem C-s RET text RET, gdje je text, onaj tekst koji tražite.

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

Najvažnija naredba za zamjenu je query-replace (vezana za M-8). Ova naredba će od


vas zatražiti tekst za zamjenu i tekst koji želite zamijeniti te će potom izvršiti zamjenu unutar
trenutno aktivnog meñuspremnika. Naredba query-replace je interaktivna, nakon svakog
pronalaska ponuditi će vam slijedeće mogućnosti:

SPC Izvrši zamjenu


DEL Nemoj izvršiti zamjenu

399/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs

RET Zaustavi query-replace, ne izvršivši zamjenu


ESC isto kao i RET
. Izvrši zamjenu i zaustavi query-replace
! izvrši zamjenu i sve druge zamjenu u unutar meñuspremnika bez daljnje interakcije

Postoji još podnaredbi, ali one zahtijevaju dodatno poznavanje Emacsa.

Postoji još naredbi za zamjenu koje bi trebali pobliže upoznati: replace-string


(jednostavna,neuvjetovana zamjena), replace-regexp i query-replace-regexp (kole rade sa
regularnim izrazima) i tags-query-replace (zamjenjuje sve identifikatore u kolekciji source
datoteka).

Naredba query-replace, kao i sve ostale naredbe za zamjenu, po defaultu prepoznaje


velike i male znakove. Na primjer, ako zamjenjujete foo sa bar i naletite na Foo, Emacs će
Foo zamijeniti sa Bar.

400/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs

OZNAKE I REGIJE (THE MARK AND THE REGION)

Emacs može manipulirati unaprijed odreñenim dijelovima teksta, a ne samo tekstualnim


objektima. To se radi na način da se odredi regija teksta; mnoge naredbe će se odnositi na tu
regiju.
Regija je tekst izmeñu točke (point) i oznake (mark). Point je u biti Emacs-ov termin za
kursor. Mark se postavlja sa naredbom C-@ (set-mark-command). Ta naredba postavlja mark
točno tamo gdje je point sa tim da sada point možete pomaknuti i tako dobiti regiju.
Svaki meñuspremnik ima svoj point i mark, dakle i svoju regiju. (moguće je da
meñuspremnik uopće nema mark i tako nema ni regiju).
Regija postoji nevezano uz to da li je prvo doñe mark ili point, postavite ih kako vama
odgovara. Regija je obično nevidljiva, ali ako vrtite Emacs na nekom programu sa prozorima
možete je učiniti vidljivom sa M-x (transient-mark-mode)
Mnoge naredbe koje pomiču point na neku veću udaljenost (npr. M-< ili C-s)
postavljaju mark na mjesto sa kojeg su krenule. Natpis „Mark set“ će se pojaviti u echo area
kada se to dogodi.
Kada koristite Emacs pod nekim sustavom kao X možete se poslužiti mišem za
označavanje regije, ali mnogi korisnici Emacsa preferiraju držati ruke non-stop na tipkovnici,
te koristiti naredbe za pomicanje.
Postoje neke posebne naredbe dizajnirane samo za to da postave regiju oko nekog
interesantnog dijela teksta.

M-@
mark-word. Postavlja regiju oko 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

Sada smo odredili regiju. Što možemo sa njom učiniti?

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.

Postoji još mnogo drugih naredbi.

402/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Emacs

UVLAČENJE (INDENTATION)

U modovima za programske jezike, Emacs koristi TAB tipku za automatsko uvlačenje


linije, sukladno sa pravilima za uvlačenje koja vrijede za dotični jezik. Na primjer u C modu
Emacs prepoznaje if, while, switch, do, for, funkcije itd. , te uvlači tekst ovisno o potrebi.
Dakako u većini jezika pravila za uvlačenje nisu striktno odreñena, pa Emacs dozvoljava da ih
svako odredi kako mu odgovara.

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.

Neki glavni modovi

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

ŽELITE LI ZNATI VIŠE?

Za s daljnje informacije o Emacs-u pregledajte:

• GNU Emacs Frequently Asked Question List


• Info
• news grupe
♦ gnu.emacs.help
♦ comp.emacs
♦ gnu.emacs.announce
♦ alt.religion.emacs
♦ gnu.emacs.sources

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

UNIX sistem je višekorisnički (multi-user) operativni sistem. To znači da više od jedne


osobe može koristiti sistem u isto vrijeme. Sistem može opsluživati više od jednog korisnika
isto kao što može da izvršava više procesa u isto vrijeme za jednog korisnika. Višekorisnička
osobina omogućava da grupa korisnika radi zajedno, dijeleći informacije i zajedničke
programe na sistemu. Ako se UNIX nalazi na osobnom računalu, može postojati samo jedan
korisnik koji može koristiti višeprocesnu (multi-tasking) osobinu i pokretati više procesa
istovremeno.

Prijavljivanje na UNIX sistem

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:

Welcome to the UNIX System


login:

Da bismo se prijavili na UNIX utipkamo naše korisničko ime i pritisnemo <ENTER>.


Primjećujete da dok pišemo korisničko ime, ono što tipkamo je istog trena prikazano na
ekranu. Kada utipkamo naše korisničko ime pod kojim nas UNIX raspoznaje sistem zahtjeva
da unesemo i lozinku:

Welcome to the UNIX System


login: student
password: maja

za razliku od imena korisnika, prilikom unošenja lozinke na ekranu ne vidimo karaktere


koje utipkavamo na tastaturi. To je učinjeno radi veće sigurnosti jer lozinka pomoću koje
dobivamo dozvolu za rad treba služiti samo danom korisniku zbog mogućih zloupotreba.
Nakon uspješnog prijavljivanja na ekranu se pored ostalog i pojavljuje prompt-jedan ili više
karaktera koji nam kazuju da je UNIX spreman da primi i izvrši naredbu. Često je prompt #
za specijalne korisnike kao što je root,sysadm.... ili $ za obične korisnike.
U slučaju da pogriješimo prilikom unošenja imena korisnika ili lozinke, ponovno se
pojavljuje poruka login:. Isto tako, ime i lozinka moraju se unijeti u odreñenom vremenskom
intervalu, najčešće 60 sekundi. Ako je taj terminal premašen, postupak se mora ponoviti

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

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

STARTANJE UNIX SHELLA

Na slici 1 je prikazan postupak startanja shell-a prilikom prijavljivanja korisnika na


sistem. Svaku terminalsku liniju nadgleda po jedan getty proces čiji je zadatak da starta
program login koji radi provjeru imena korisnika i lozinke. Kada se korisnik ispravno
identificirao, program login starta odgovarajući shell prema informaciji koja se nalazi u
konfiguracijskom file-u /etc/passwd.

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

Definiranje korisnika i file /etc/passwd

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:

 Tradicionalni način – u /etc/passwd file-u


 Opis korisnika je u /etc/passwd file-u, dok se lozinke i dodatne informacije
nalaze u /etc/shadow file-u
 Pomoću NIS/NIS+ centralizirane baze podataka za sve u mreži

Svaki korisnik koji se može prijaviti na UNIX sistem definiran je jednom linijom u
/etc/passwd file-u:

# cat /etc/passwd
root:x:0:1:0000-Admin(0000):/:
daemon:x:1:1:0000-Admin(0000):/:
bin:x:2:2:0000-Admin(0000):/usr/bin:
sys:x:3:3:0000-Admin(0000):/:
adm:x:4:4:0000-Admin(0000):/var/adm:
uucp:x:5:5:0000-uucp(0000):/usr/lib/uucp:
...
student:x:107:15:maja:/home/student:/bin/csh
#

Polja u /etc/passwd file-u su odvojena znakom '':'' i uvijek moramo navesti svih šest
separatora. Značenje pojedinih polja /etc/passwd file-a prikazano je na slici 2.

POLJE OPIS

Ime korisnika Ime pod kojim se korisnik prijavljuje na sistem

Šifrirana lozinka (crypted password). Ako stoji x tada se opis lozinke


Lozinka
čuva u file-u /etc/shadow

UID Jedinstveni redni broj korisnika (User IDentiity) na UNIX sistemu.

412/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Login i ID

Super korisnik uvijek ima UID=0. Ostali korisnici imaju UID počevši
od 101 ili 201

Redni broj glavne grupe (Group IDentitiy) kojoj pripada dani korisnik
GID
odgovara definiciji grupe u /etc/group

Uporaba se razlikuje zavisno od verzije UNIX-a. BSD UNIX koristi


GCOS polje to polje za smještanje podataka o korisniku, koje dobijemo kasnije
naredbom finger

Direktorij gdje se nalazi korisnik poslije prijavljivanja na sistem.


Home direktorij
Naziva se i login direktorij

Ime programa koji se koristi kao interpreter naredbi. Ako je


Inicijalni shell
izostavljeno podrazumijeva se standardni Bourne Shell (/bin/sh)

Ime korisnika se obično zadaje malim slovima, dužine do osam karaktera i ne smije
započinjati brojem. Korisnici koji se prijavljuju na UNIX sistem mogu biti pojedinci ili drugi
UNIX sistemi (uucp na primjer).
Šifrirana lozinka se kao rezultat jednosmjernog algoritma smješta u drugo polje
/etc/passwd file-a, ako se radi o tradicionalnom načinu. Poslije zadavanja teksta lozinke, prvih
osam karaktera se kombinira sa ključem od dva karaktera, nakon čega se dobiva šifrirana
lozinka dužine 13 karaktera. Svaki puta kad se korisnik prijavljuje na sistem, lozinku koju
unese, šifrira se na isti način i usporedi sa šifriranom lozinkom koja se čuva u /etc/passwd
file-u. Ako je dano polje prazno, tada korisnik prilikom prijavljivanja ne mora zadati lozinku.

student maja student

Slika 2

413/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Login i ID

Pojedini sistemi čuvaju u /etc/passwd file-u pored lozinke i podatke o trajanju valjanosti
lozinke i druge informacije. Ti podaci se sastoje od zareza '','' kao separatora i 4 karaktera.
Dodaju se na kraj lozinke koristeći sljedeće oznake:
''.'' = ''0'' : ''/'' = ''1'' ; ''0-9'' = ''2-11'' ; ''A-Z'' = ''12-37'' ; ''a-z'' = ''36-63''.
Prvi karakter nakon zareza predstavlja maksimalni broj tjedana valjanosti lozinke.
Drugi karakter predstavlja minimalni broj tjedana izmeñu dvije izmjene lozinke. Ako su
oba karaktera nule (''..''), korisnik mora izmijeniti lozinku prilikom prvog sljedećeg
prijavljivanja. Ako je drugi broj veći od prvoga, tada samo super korisnik može izmijeniti
danu lozinku. Ostala dva karaktera predstavljaju broj tjedana kada je lozinka posljednji put
promijenjena, počevši od 1.siječnja 1970. godine. Inicijalni podaci o intervalima vremena
ubacuju se ručno pomoću vi editora.
Ako želimo privremeno zabraniti prijavljivanje nekom korisniku tj. da zaključamo
(lock) njegov račun, tada dodajemo ''LK'' ispred šifrirane lozinke u odgovarajućem polju.

UID kod svih UNIX sistema u mreži koji koriste NFS treba biti isti. Kod sistema koji
koriste NIS/NIS+ , taj problem je automatski riješen. Korisnik nobody je vlasnik file-ova koje
nije kreirao super korisnik, te im nitko ne može pristupiti. Korisnik noaccess služi za
prijavljivanje udaljenih korisnika čije je ime ''root''.

GID se koristi za utvrñivanje dozvola za pristup file-ovima koje se primjenjuju na


danog korisnika. Kao što je poznato, svaki file ima tri vrste dozvola: za vlasnika, članove
grupe kojoj pripada vlasnik i ostale korisnike.

GCOS polje na UNIX sistemu zadajemo u xxxx-Ime (yyyy) formatu i služi za


smještanje GCOS broja računa (xxxx) i boksa (yyyy). Na BDS sistemu ovo polje zadajemo u
formatu ''Ime Prezime, komentar''.

Home direktorijima je mjesto u file sistemu gdje se login program postavlja prije
startanja shell-a. U home direktorijima nalaze se svi inicijalizirani scriptovi. Informacija o
home direktoriju nalazi se u shell promjenjivoj HOME, koju korisnik nakon prijavljivanja
može promijeniti.

Inicijalni shell može biti sh,csh,ksh,bash,tesh ili uucico (koristi se kod UUCP
komunikacije).

414/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Login i ID

Naredbe za rad s lozinkama

NAREDBE OPIS

passwd korisnik Promjena lozinke danog korisnika

Lozinka vrijedi 84 dana i ne smije se mijenjati prvih 7


passwd –x 84 –n 7 korisnik
dana.

Korisnik se može prijaviti na sistem ali ne može


passwd –x 7 –n 10 korisnik
mijenjati lozinku.

Poručuje korisniku da kod sljedećeg prijavljivanja


passwd –f korisnik
promijeni lozinku.

passwd –x –1 korisnik Isključuje vremensku kontrolu trajanja lozinke.

passwd -w 14 korisnik Prikazuje upozorenje da lozinka ističe za 14 dana.

passwd -1 korisnik Privremena zabrana prijavljivanja danog korisnika.

Ukida privremenu zabranu prijavljivanja danog


passwd -u korisnik
korisnika.

415/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

Nina Žugaj

TELNET I SSH

416/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

UVOD

Za pristupanje nekom udaljenom računalu putem lokalne ili Internet mreže, neovisno o
mreži, potrebno je koristiti protokole, pomoću kojih se može uspostaviti veza s udaljenim
računalom.
Telnet i SSH dva su takva protokola, koja omogućavaju spajanje i rad na nekom
udaljenom računalu.
Telnet je servis (program, a ujedno i naziv protokola), koji omogućuje pristup nekom
udaljenom računalu emulacijom terminala, a SSH je kriptirani protokol što znači da su svi podaci koji se šalju i

primaju kodirani, tj. sigurni od presretanja i čitanja.

Iako imaju istu funkciju (remote pristup računalima) i iako je SSH vrlo sličan telnetu,
zbog potencijalne ranjivosti telneta, SSH se pokazao daleko sigurniji, te se telnet polako
povlači iz upotrebe.
Takoñer, u odnosu na FTP (File Transfer Protocol) ili tradicionalne BSD R-naredbe (R-
commands) - rlogin, rsh i rcp, SSH je sigurniji, a u njegove dvije implementacije SSH1 i
SSH2, ispravljeni su neki propusti. Većina njih se svodi na manje bugove, no bilo je i
nekoliko ozbiljnih sigurnosnih propusta. Najopasniji od dosad zloupotrebljavanih propusta
omogućava udaljenom napadaču korištenje računala kao root.
I protokol SSH1 se pri odreñenim konfiguracijama pokazao potencijalno ranjivim na
sesije koje se dekriptiraju tijekom transfera. Zato se savjetuje, kad god je to moguće,
korištenje jačeg protokola SSH2, jer su neke slabosti SSH1 ispravljene u protokolu SSH2.
Telnet i SSH rade na različitom portu:

telnet 23 / tcp
SSH 22 / tcp

Neovisno o vrsti protokola, da bi se korisnik spojio na neko udaljeno računalo mora na njemu imati otvoren korisnički račun
(account).

Telnet i SSH servisi baziraju se, kao i većina mrežnih servisa, na klijent-poslužitelj
modelu. Klijent uspostavlja vezu s poslužiteljskim računalom na kojem je pokrenut telnet
odnosno SSH daemon (tipično telnet na portu 23, a SSH na portu 22), nakon čega slijedi
razmjena podataka odnosno naredbi izmeñu tih računala.

417/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

TELNET

Upotreba TELNETA za pristup udaljenim računalima

Korištenjem protokola telnet omogućuje se interaktivan rad na nekom udaljenom


računalu.
Naredba telnet je standardna u svim implementacijama TCP/IP-a (Transmission Control
Protocol / Internet Protocol) i neovisna je o operacijskom sustavu. Tako je protokol telnet
ugrañen u program Telnet koji je standardni dodatak OS Windows. Takoñer naredba telnet
osnovni je alat za prijavljivanje na daljinu pod Linuxom/Unixom.

Telnet pripada grupi emulatora terminalskog rada, što znači da on omogućava lokalnom
računalu da uspostavi vezu s udaljenim računalom, a nakon uspostave veze oponaša rad
terminala, tj. prilikom izvoñenja operacija ne koriste se procesor i periferije lokalnog računala
već udaljenog računala. Osobno računalo (računalo korisnika) se u tom slučaju ponaša kao
obični terminal (koji ne posjeduje sekundarnu memoriju i procesor) kojeg i emulira telnet.

Da bi mogli koristiti resurse računala kojem pristupamo, na njemu treba imati otvoren
korisnički račun. Nakon otvaranja veze s udaljenim poslužiteljem pojavljuje se prozor koji
zahtijeva od korisnika da se prijavi za rad i to unosom korisničkog imena (logina) i šifre
(passworda). Nakon upisa istih korisnik može izvoditi naredbe i operacije na udaljenom
poslužitelju. U slučaju pogrešno upisanih podataka pojavljuje se obavijest o greški i
mogućnost ponovnog pokušaja. Ukoliko se šifra upiše krivo više od tri puta korisnički račun
obično se automatski zaključava iz sigurnosnih razloga.

418/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

Premda neki sustavi pružaju mogućnost prijave kao gosta, takva je mogućnost rijetka
zbog sigurnosnih razloga.
Telnet korisnicima omogućuje i prijavljivanje na njihova vlastita računala iz udaljenih
lokacija, takoñer unošenjem korisničkog imena i šifre. Na taj način korisnici mogu
provjeravati e-mail, ureñivati datoteke i pokretati programe na svojim uobičajenim
računalima kao da su na njih prijavljeni lokalno. To se, meñutim, može učiniti u okružju koje
se temelji na terminalima, jer se za to ne može koristiti sustav X Windowsa. Telnet pruža
samo emulaciju terminala za uobičajene terminale poput DEC VT-100, koji ne podržavaju
grafička okružja poput X Windowsa. Znači da je veza koju telnet omogućuje ograničena na
korištenje naredbenog sučelja pri radu.

Komponente ostvarivanja telnet veze

Tradicionalni mrežni servisi kao što su telnet, ftp, rsh i dr., iako vrlo praktični i
jednostavni za korištenje, ujedno sadrže i jedan veliki nedostatak – imaju implementiran vrlo
nizak nivo sigurnosti, budući da se u vrijeme njihova nastanka nije previše pažnje obraćalo na
sigurnost računalnih sustava.
Komunikacija nije kriptirana, te su moguće zlouporabe od strane neovlaštenih ili
zlonamjernih korisnika.
U današnje vrijeme kada sigurnosni aspekt predstavlja jedan od najvažnijih elemenata
svake računalne mreže taj problem svakodnevno dolazi sve više do izražaja.

419/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

Inherentne slabosti kod takvih mrežnih servisa neovlaštenim korisnicima omogućuju


vrlo jednostavan dolazak do povjerljivih korisničkih informacija te prisluškivanje kompletnih
mrežnih sesija izmeñu klijentskog i poslužiteljskog računala. Takoñer ne postoji nikakav
mehanizam koji bi omogućio meñusobnu autentikaciju (authentication) računala, što
neovlaštenim korisnicima omogućuje lažiranje mrežnih sesija, te lažno predstavljane pod
imenom drugih računala.
Upravo gore navedeni elementi bili su podloga za nastanak SSH protokola i programa
koji ga implementiraju, kako bi se na taj način korisnicima omogućilo sigurno komuniciranje
s udaljenim računalima.
Osnovna sintaksa za telnet je sljedeća:

telnet [hostname]
=> hostname je ime udaljenog računala. Ako ime udaljenog
računala nije navedeno, telnet se pokreće u svom interaktivnom načinu rada, a ako je ime
udaljenog računala navedeno, telnet odmah pokušava započeti sesiju.

Telnet prihvaća nekoliko argumenata naredbenog retka:


-d
=> uključuje otkrivanje grešaka
-a
=> pokušava automatsko prijavljivanje
-n tracefile
=> uključuje praćenje i podatke iz praćenja sprema u datoteku
pod tracefile
-e escape_char
=> odreñuje da znak za izlazak iz sesije bude escape_char
-l user
=> korisničko ime user šalje udaljenom sustavu za automatsko
prijavljivanje. Ovaj argument automatski uključuje i argument -a.
port
=> ukazuje na broj porta koji treba koristiti za spajanje na
udaljeni sustav. Ovaj se argument koristi za odreñivanje različitih mrežnih programa. Ako
nije naveden, telnet se spaja na unaprijed zadani telnet port.

420/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

Dakle, telnet sesiju korisnik pokreće utipkavši telnet, nakon čega slijedi ime računala na
koje se želi spojiti. Telnet zatim vraća poruku Trying i neku IP adresu (gdje je neka IP adresa
adresa računala koje je navedeno).
Ako se telnet uspješno spoji na računalo (što znači da je to računalo uključeno i da
mreža nije isključena), Linux/Unix će izvijestiti Connected to ime računala i zatim će reći da
je znak za izlazak iz sesije neka odreñena kombinacija tipki. Znak za izlazak odreñuje i
kombinaciju tipki koju treba utipkati za prelazak iz terminalske sesije u telnetov interpretator
naredbi. Tamo korisnik prelazi ako naredbe želi izravno slati programu telnet, a ne u sesiju na
udaljenom računalu.
Nakon što se telnet uspješno spojio na udaljeni sustav bit će prikazana prijavna
informacija i sustav će zatražiti unos korisničkog imena i šifre. Pod pretpostavkom da
korisnik ima valjano korisničko ime i šifru, uspješno će se prijaviti i tada može interaktivno
raditi na udaljenom sustavu.
Na kraju rada svakako se treba odjaviti. Telnet zatim izvijesti da je udaljena sesija
zatvorena i korisnik se vraća se u naredbeni redak lokalne ljuske.

Primjer telnet sesije iz Linux računala koje se spaja na Linux računalo:

U navedenom primjeru Escape character is '^]'. Dakle, telnet dojavljuje da ulogu


escape znaka ima Control+]. Pritiskom na tu kombinaciju tipki prelazi se u interaktivni rad s
telnet programom, na što upućuje prompt: telnet>

421/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

U interaktivnom radu telnet raspoznaje slijedeće naredbe, čiji se popis dobije


navoñenjem naredbe help:

close
=> prekid trenutno spojene veze
display
=> prikaz parametara
mode
=> promjena načina rada: line-by-line (utipkani sadržaj retka
prvo se prikazuju na lokalnom računalu, nakon čega se odjednom šalje udaljenom računalu)
ili character-at-a-time (većina pritisnutih tipki šalje se neposredno udaljenom računalu)
open hostname [port]
=> povezivanje s udaljenim računalom. Inicijalno: port 23.
quit
=> napuštanje telneta
send
=> prijenos posebnih znakova ( naredbom "send ?" dobije se
detaljniji opis).
set
=> postavljanje parametara ("set ?" za detaljniji opis).
status
=> prikaz trenutnog statusa
toggle
=> izmjena parametara ("toggle ?" za detaljniji opis).
z
=> privremeni prelazak u novu ljusku (shell) na lokalnom
računalu
?
=> prikaz pomoći

Povratak u Unix ljusku obavlja se pritiskom na tipku <Enter>.


Za završetak rada s telnetom i prekidanje veze s udaljenim računalom dovoljno je
napraviti odjavu rada (logout).

422/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

SSH

SSH (Secure Shell = sigurna ljuska) je mrežni servis koji korisnicima omogućuje
uspostavu sigurnog komunikacijskog kanala izmeñu dva računala putem nesigurne računalne
mreže.
SSH servis svoj rad bazira na korištenju kombinacije simetrične i asimetrične
kriptografije, te metoda enkripcije koje omogućuju sigurniji prijenos podataka računalnom
mrežom.
Trenutno postoje dvije verzije SSH protokola, SSH1 i SSH2.
SSH2 je novija verzija, koja sadrži odreñena poboljšanja u odnosu na stariju verziju.

Originalna verzija SSH protokola razvijena je od strane Finske kompanije SSH


Communications Security Corp , koja je na odreñeni način zaštitila svoj proizvod, te samim
time ograničila mogućnosti njegovog korištenja.
Kao rezultat toga nastala je open-source implementacija istog protokola pod imenom
OpenSSH, koja se danas najčešće koristi, te će kao takva biti opisana u nastavku seminara.

423/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

KRIPTOGRAFIJA I ENKRIPCIJA PODATAKA

Kako je već spomenuto SSH servis koristi enkripciju podataka u svrhu njihove zaštite
od neautoriziranog pristupa.

U ovom dijelu biti će vrlo kratko iznesene osnovne napomene vezane za kriptografiju i
enkripciju podataka, kako bi se omogućilo lakše razumijevanje načina na koji SSH protokol
implementira sigurnost.
Postoje dvije osnovne grupe algoritama za enkripciju podataka:
 simetrični algoritmi - bazirani na jednom tajnom ključu
 asimetrični algoritmi - bazirani na tajnom i javnom ključu
Za enkripciju ili dekripciju podataka, osim samog algoritma, potrebno je poznavati i
ključ (key) na temelju kojeg algoritam provodi kriptiranje podataka.
Ovisno u koju od gore navedenih grupa algoritam spada, ovisi na koji će se način
provoditi enkripcija odnosno dekripcija podataka.
Kod simetrične kriptografije isti ključ se koristi i za kriptiranje i dekriptiranje podataka.
Pošiljatelj kriptira podatke tajnim ključem i tako kriptiranu poruku šalje na odredište.
Primalac poruke istim tajnim ključem može dekriptirati poruku odnosno doći do njenog
pravog sadržaja.

Slika: Simetrična kriptografija

Odmah se primjećuje jedan veliki nedostatak ove grupe algoritama, a to je taj da se i


pošiljatelj i primatelj na neki način moraju dogovoriti oko tajnog ključa koji će koristiti za
komunikaciju. Proces dogovora oko tajnog ključa predstavlja poseban problem, budući da je

424/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

razmjenu ključeva potrebno obaviti nesigurnim putem (mail, telefon ili sl.) što može ugroziti
privatnost ključa.
Prednost algoritama ove skupine je ta da su iznimno brzi što je glavni razlog njihove
učestale primjene. Najpoznatiji predstavnici ove grupe algoritama su DES (Data Encryption
Standard), IDEA, 3DES, Blowfish i dr.

Asimetrični algoritmi svoj rad baziraju na korištenju dva ključa umjesto jednoga. Svaki
korisnik u tom slučaju posjeduje svoj tajni i javni ključ. Ključevi su meñusobno kompatibilni
na taj način da se poruka kriptirana jednim ključem može dekriptirati samo drugim ključem
istog korisnika.
Tajni ključ je strogo povjerljiv i poznat je samo njegovom vlasniku, dok se javni ključ
slobodno distribuira svim korisnicima s kojima se želi komunicirati ovim putem.
Postupak razmjene podataka u tom slučaju je sljedeći:
 pošiljatelj poruku kriptira javnim ključem primatelja poruke koji je svima
poznat i dostupan
 primatelj poruku dekriptira svojim tajnim ključem koji je poznat jedino
njemu

Slika: Asimetrična kriptografija

Na taj način svatko svakome može poslati enkripcijom zaštićenu poruku pod uvjetom
da je poznat javni ključ primatelja poruke i time je omogućena sigurna i jednostavna razmjena
podataka izmeñu dva korisnika.

425/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

Takoñer, uklonjen je i problem razmjene ključeva koji se javljao kod simetrične


kriptografije. Najpoznatiji predstavnik ove skupine algoritama je RSA algoritam koji se
ujedno koristi i kod SSH protokola.
Nedostatak ove metode su nešto veći zahtjevi na procesorsku snagu računala, odnosno
nešto duže trajanje postupka enkripcije podataka.

Moderne metode enkripcije za svoj rad koriste kombinaciju simetrične i asimetrične


kriptografije.
Algoritmi asimetrične kriptografije koriste se na početku sesije za sigurno dogovaranje
tajnog ključa koji će se kasnije koristiti za kriptiranje samih podataka korištenjem nekog od
simetričnih algoritama. Na taj način postižu se optimalne performanse algoritma budući da su
iskorištene prednosti obje metode: sigurnost i brzina.

Upravo ovakav koncept iskorišten je i kod SSH protokola gdje se razmjena i dogovor
oko tajnog ključa sesije obavlja asimetričnim RSA algoritmom, da bi se u sljedećoj fazi tako
dogovoreni ključ koristio za simetričnu enkripciju podataka koji se razmjenjuju izmeñu
udaljenih računala.

426/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

SSH PROTOKOL

Osnovne karakteristike SSH protokola su:


 smanjene mogućnosti provoñenja DNS i IP spoofing napada, u kojima
neovlašteni korisnik pokušava ostvariti neautorizirani pristup računalnim
resursima udaljenog sustava lažiranjem IP adresa i DNS imena računala
 implementirane metode autentikacije računala bazirane na RSA algoritmu
simetrične kriptografije
 mogućnost preusmjeravanja proizvoljnih TCP/IP portova preko sigurnog
SSH komunikacijskog kanala (POP, FTP i dr.)
 prije bilo kakve razmjene podataka izmeñu dva računala provodi se
kompletan postupak meñusobne autentikacije klijenta i poslužitelja, čime se
bitno smanjuje mogućnost provoñenja bilo kakvog napada na SSH servis
 jednostavna upotreba programa koji implementiraju SSH protokol

Uspostava veze izmeñu dva računala SSH protokolom može se podijeliti u nekoliko
faza:
 U prvoj fazi klijent i poslužitelj razmjenjuju podatke o inačici protokola koji
će se koristiti, obavlja se identifikacija korištenih SSH programskih paketa,
provjerava se ispravnost veze i sl. U ovoj fazi enkripcija podataka još se ne
koristi.
 U sljedećoj fazi klijent i poslužitelj dogovaraju se o tajnom ključu i
algoritmu koji će se koristiti u daljnjim fazama komunikacije. Nakon ove
faze dogovoren je ključ sesije i protokol koji će se koristiti za kriptiranje
podataka. Svi podaci razmijenjeni izmeñu klijenta i poslužitelja nakon ove
faze biti će kriptirani na dogovoreni način.
 Slijedi treća faza u kojoj se klijent autenticira kod poslužitelja kako bi se na
taj način utvrdio identitet klijenta odnosno provjerile ovlasti pristupa za tog
klijenta. Ukoliko je sve prošlo u redu prihvaća se sesija izmeñu klijenta i
poslužitelja nakon čega je moguća sigurna razmjena podataka.

SSH podržava nekoliko načina autentikacije korisnika od kojih je najsigurnija ona koja
koristi RSA algoritam. Postoje metode bazirane na .rhost i host.equiv datotekama koje su

427/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

naslijeñene od rsh i njemu sličnih servisa, no iz sigurnosnih razloga ne preporučuje se


korištenje ovih metoda.
Najjednostavnija i vrlo često korištena metoda autentikacije je ona koja se bazira na šifri
korisnika. Pristup je identičan kao i kod većine drugih mrežnih servisa s osnovnom razlikom
što se ovdje korisnički podatci (korisničko ime i šifra) šalju mrežom kriptirani. U nastavku će
biti opisani osnovni postupci koje je potrebno obaviti kako bi se omogućilo korištenje SSH
servisa.

428/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

INSTALACIJA, KONFIGURACIJA I KORIŠTENJE


KLIJENTSKOG DIJELA SSH APLIKACIJE

 SSH komercijalna verzija dostupna je na http://www.ssh.com/.


 Programski paket Openssh moguće je skinuti na matičnoj web stranici openssh
projekta http://www.openssh.com/. Iako dolazi u distribucijama nekih Unix sustava (na
Debian i Linux Mandrake platformama), čime je olakšan postupak njegove instalacije,
ukoliko se program instalira zasebno, instalacija programa zahtjeva Zlib
(http://www.gzip.org/zlib/) biblioteku te OpenSSL (http://www.openssl.org/) programski
paket.

Korištenje osnovnih mogućnosti Openssh programa je vrlo jednostavno, što je bio jedan
od osnovnih ciljeva prilikom razvijanja ovog servisa.

Nakon što je program instaliran moguće se odmah spojiti na bilo koje udaljeno računalo
na kojem je instaliran SSH poslužitelj i na kojem korisnik ima otvoren valjani korisnički
račun.
Dovoljno je u naredbenom retku upisati naredbu:
# ssh -l <korisničko_ime> <ime-računala>
nakon čega će se korisniku prikazati poruka koja govori da se radi o pokušaju spajanja
na nepoznato računalo. Od korisnika se traži potvrda za nastavak postupka spajanja, čime ga
se upozorava da se prvi puta pokušava spojiti na udaljeno računalo.
The authenticity of host [hostname] can't be established.
Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
Are you sure you want to continue connecting (yes/no)?
Slijedi postupak unosa korisničke šifre za korisničko ime definirano -l parametrom i
ukoliko se unese valjana šifra korisnik je sigurnim SSH kanalom spojen na udaljeno računalo
na kojem može dalje raditi, tj. time se završava proces uspostave SSH sesije s poslužiteljem.

Ukoliko se prilikom pokušaja spajanja navede nepostojeće korisničko ime (putem -l


opcije), SSH poslužitelj neće prijaviti grešku o nepostojanju korisnika, već će korisnika
zatražiti da unese šifru za istoga.

429/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

Na ovaj način SSH neovlaštenom korisniku onemogućuje pregledavanje postojećih


korisničkih računa na udaljenom računalu, budući da se ne primijeti razlika izmeñu pokušaja
spajanja na SSH poslužitelj s regularnim i neregularnim korisničkim imenom. Ovakav pristup
je sasvim poželjan sa stanovišta sigurnosti, budući da se ne želi neovlaštenom korisniku
omogućiti dolazak do liste postojećih korisnika na udaljenom računalu.

U ovom slučaju kompletan se proces autentikacije korisnika bazira isključivo na


njegovoj šifri, te se na ovaj način može spojiti svatko tko zna odgovarajuće korisničko ime i
šifru bilo kojeg korisnika sustava. Ukoliko korisnička šifra na bilo koji način bude
kompromitirana SSH autentikacija ovim putem gubi smisao. Zato se drugi način spajanja na
SSH poslužitelj bazira na RSA autentikaciji, odnosno na korištenju javnog i tajnog ključa
korisnika.

Kod ovog pristupa klijent poslužitelju u prvoj fazi postupka autentikacije šalje poruku
koja izmeñu ostalih informacija sadrži i podatak o njegovom javnom ključu koji želi koristiti
za autentikaciju. Poslužitelj u svojoj internoj bazi provjerava da li ima podatak o istom
korisniku, te ukoliko ima vraća korisniku znakovni niz (chalenge) koji je kriptiran javnim
ključem tog korisnika.
Nakon toga klijent mora dekriptirati primljenu vrijednost te vratiti odgovor poslužitelju,
koji će potvrditi uspješnu dekripciju primljene vrijednosti.
Budući da je dekripciju moguće obaviti jedino pomoću tajnog ključa istog korisnika,
poslužitelj prihvaća sesiju i autenticira korisnika.
U ovom slučaju poslužitelj nikada ne traži šifru korisnika budući da je kompletni proces
autentikacije obavljen na temelju javnog i tajnog ključa korisnika.
Da bi se omogućio ovakav proces autentikacije klijent prvo mora generirati svoj par
tajni/javni ključ, te nakon toga kopiju javnog ključa pohraniti na poslužitelju.

U svrhu generiranja parova javni/tajni ključ korisnika koristi se ssh-keygen program


koji dolazi u paketu s openssh programom. Zadavanje naredbe
# ssh-keygen
rezultirati će kreiranjem javnog i tajnog ključa korisnika pod čijim je ovlastima zadana
gore navedena naredba.

430/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

Prilikom postupka generiranja ključeva korisnik će biti upitan da unese tzv. passphrase
niz koji pruža dodatni nivo zaštite kod korištenja SSH servisa i koji se može jednostavno
shvatiti kao šifra za korisnikov par ključeva.
Iako nije obavezno definiranje ovog niza (moguće je ostaviti prazan niz, tj. samo
pritisnuti <Enter>), korisnicima se iz sigurnosnih razloga preporučuje korištenje istoga.

Trenutno postoje dvije verzije SSH protokola, SSH1 i SSH2. Zbog toga je moguće ssh-
keygen programu proslijediti -t parametar kojim se definira za koji algoritam se želi stvoriti
par ključeva:

ssh-keygen -t rsa1
=> koristi se za SSH1 verziju protokola

ssh-keygen -t dsa i
ssh-keygen -t rsa
=> koriste se za SSH2 verziju protokola

Budući da datoteke koje sadrže ključeve korisnika sadrže različita imena, za svaki od
algoritama moguće je generirati zaseban par ključeva. Na taj način omogućuje se spajanje na
različite SSH poslužitelje odnosno izbjegavanje eventualnih problema s kompatibilnošću
software-a izmeñu klijenta i poslužitelja.
Ključevi generirani bilo kojom od navedenih opcija nalaze se u $HOME/.ssh
direktoriju korisnika, gdje se uvijek za svaki algoritam stvaraju dvije datoteke od kojih jedna
sadrži javni ključ, a druga tajni ključ korisnika. Imena su im identična s jedinom razlikom što
javni ključ sadrži ekstenziju .pub.
Primjeri:

id_rsa
=> datoteka koja sadrži tajni ključ korisnika za SSH2 verziju
protokola koja koristi RSA algoritam za enkripciju
id_rsa.pub
=> datoteka koja sadrži javni ključ korisnika za SSH2 verziju
protokola koja koristi RSA algoritam za enkripciju

431/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

id_dsa
=> datoteka koja sadrži tajni ključ korisnika za SSH2 verziju
protokola koja koristi DSA algoritam za enkripciju
id_dsa.pub
=> datoteka koja sadrži javni ključ korisnika za SSH2 verziju
protokola koja koristi DSA algoritam za enkripciju
identity
=> datoteka koja sadrži tajni ključ korisnika za SSH1 verziju
protokola koja koristi RSA algoritam za enkripciju
identity.pub
=> datoteka koja sadrži javni ključ korisnika za SSH2 verziju
protokola koja koristi RSA algoritam za enkripciju

Nakon generiranja odgovarajućih ključeva posebnu pažnju treba posvetiti ovlastima


koje su pridijeljene pojedinim datotekama. Sve datoteke koje ne sadrže nastavak .pub sadrže
tajni ključ korisnika, te kao takve ne smiju biti dostupne nikome osim samome korisniku ( -
rw------- ovlasti).
Nepažljivo pridjeljivane ovlasti datotekama koje sadrže tajni ključ korisnika mogu
ozbiljno ugroziti sigurnost SSH sustava.

Kao što je već spomenuto, nakon generiranja vlastitog para tajni/javni ključ, kopiju
javnog ključa klijent mora pohraniti na poslužitelju na kojeg se želi spajati.
Ukoliko se koristi SSH1 verzija protokola potrebno je identity.pub javni ključ kopirati u
$HOME/.ssh/authorized_keys datoteku na udaljenom računalu, a ukoliko se koristi SSH2
verzija protokola potrebno je kopirati ključ id_rsa.pub ili id_dsa.pub u
$HOME/.ssh/authorized_keys2 datoteku udaljenog računala.
Nakon što je stvorena odgovarajuća $HOME/.ssh/authorized_keys ili
$HOME/.ssh/authorized_keys2 datoteka potrebno je ispravno postaviti ovlasti tih datoteka
kako bi se veza mogla uspješno uspostaviti. Potrebno je zadati naredbu:
# chmod 644 .ssh/authorized_keys .ssh/authorized_keys2
što će rezultirati -rw-r--r-- ovlastima, koje svim korisnicima sustava dozvoljavaju
čitanje ovih datoteka.

432/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

Ukoliko je sve dobro podešeno potrebno je još samo pokrenuti proces spajanja SSH
protokolom na udaljeno računalo:
# ssh <ime_računala>
nakon čega je korisnik automatski prijavljen u sustav ukoliko je sve prošlo u redu za
vrijeme postupka autentikacije korisnika.

Ukoliko je korisnik definirao passphrase niz prilikom generiranja para tajni/javni ključ,
biti će potrebno unijeti taj niz ukoliko se želi uspostaviti veza s udaljenim računalom. Na ovaj
način dodatno je zaštićen korisnikov par ključeva, budući da je osim poznavanja tajnog ključa
u ovom slučaju potrebno i poznavati passphrase niz definiran prilikom postupka generiranja
ključeva čime se dodatno podiže sigurnosni nivo SSH sustava.

U $HOME/.ssh direktoriju korisnika koji koristi SSH servis postoji i datoteka pod
imenom known_hosts. Ona sadrži listu svih računala s kojima je klijentski dio SSH aplikacije
ikada komunicirao, zajedno s njihovim identifikacijskim oznakama (ssh_host_key), što
omogućuje dodatnu identifikaciju udaljenog računala s kojim se želi uspostaviti sesija.
Ssh_host_key je ključ koji sadrži svako računalo s instaliranim SSH servisom i generira
se prilikom instalacije programskog paketa. Koristi se u svrhu meñusobne identifikacije
računala koja meñusobno komuniciraju SSH protokolom.

Prilikom prvog spajanja na udaljeni SSH poslužitelj aplikacija će javiti da ne poznaje


udaljeno računalo te će korisnika tražiti potvrdu za nastavak uspostave veze. Ukoliko korisnik
odgovori potvrdno uspostavit će se veza s udaljenim računalom, nakon čega će to računalo
biti zapisano u known_hosts datoteku zajedno s njegovim ssh_host_key.pub ključem
primljenim od strane udaljenog računala. Svaki naknadni pokušaj spajanja na isto računalo
neće prijavljivati tu poruku budući da je računalo zabilježeno u spomenutu datoteku zajedno
sa svojom identifikacijom.
Ovakav pristup smanjuje mogućnost provoñenja raznih napada na SSH servis, budući da
će pokušaj spajanja na računalo čiji ssh_host_key ne odgovara ključu koji je pohranjen u
known_hosts datoteku za to računalo, rezultirati neuspjehom.

SSH klijent može se pokrenuti s odgovarajućim parametrima čime se može preciznije


utjecati na način njegovog rada. Ove opcije potrebno je koristiti ukoliko se žele iskoristiti
naprednije mogućnosti SSH servisa.

433/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

Neke od opcija koje je moguće proslijediti SSH programu u obliku argumenata su:

-c
=> definira se simetrični algoritam koji će se koristiti za
enkripciju podataka. Moguće vrijednosti ovog parametra su: des, blowfish i 3des. Inicijalna
vrijednost je 3des, budući da se isti smatra optimalnim. Blowfish je nešto manje sigurniji od
3des algoritma ali je zato znatno brži, dok je des algoritam ovdje moguće navesti isključivo iz
razloga kompatibilnosti sa SSH1 verzijom protokola, a iz sigurnosnih razloga ne preporučuje
se njegovo korištenje.
-f
=> zahtjeva se od ssh klijenta da radi kao pozadinski proces.
Ova se opcija vrlo često koristi u slučajevima kada se želi uspostaviti sigurni SSH kanal
izmeñu dva računala, koji će se kasnije iskoristiti za tuneliranje drugih TCP protokola.
-g
=> dozvoljava se udaljenim računalima spajanje na lokalno
preusmjereni port. Ova opcija takoñer je vezana za mogućnost korištenja preusmjeravanja
portova.
-l
=> definira se korisničko ime (-l kao login) korisnika, pod kojim
se želi spojiti na udaljeno računalo.
-p
=> definira se port udaljenog računala na koji će se klijent
aplikacija spajati. Inicijalno je to port 22.
-x i -X
=> onemogućuje se ili omogućuje preusmjeravanje X11 sesija
peko sigurnog SSH kanala.
-C
=> omogućuje se kompresija podataka koji se prenose SSH
kanalom, a nivo kompresije može se definirati CompressionLevel parametrom u
konfiguracijskoj datoteci klijent programa.
-v

434/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

=> omogućuje se tzv. verbose mod rada u kojem program


ispisuje detaljne poruke vezane za svoj rad. Ova opcija koristi se u slučaju otklanjanja grešaka
kod SSH servisa.
-F
=> definira se konfiguracijska datoteka SSH klijent aplikacije.
Ova opcija definira se u slučaju kada se ne želi koristiti inicijalna config datoteka klijenta.
-L port:host:hostport
=> definira se port port koji će se na lokalnom računalu
preusmjeravati putem SSH kanala na port hostport udaljenog računala host. Ova opcija koristi
se u svrhu preusmjeravanja proizvoljnih TCP portova preko SSH sigurnog kanala.
-R port:host:hostport
=> definira se port port na udaljenom SSH poslužitelju koji će
biti preusmjeren na port hostport lokalnog računala host. Opcija koja se takoñer koristi za
preusmjeravanje portova preko sigurnog SSH kanala.
-1
=> forsira se korištenje SSH1 verzije protokola.

-2
=> forsira se korištenje SSH2 verzije protokola.

Konfiguracijska datoteka SSH klijenta

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

435/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

Konfiguracijski parametri mogu se definirati za svako računalo na koje se želi spajati


tako da se navede ključna riječ Host koja definira na koja se sva računala parametri odnose.
Navedeni parametri vrijede sve do sljedeće ključne riječi Host nakon koje se navede parametri
za sljedeću vezu.
Na taj način moguće je definirati različite parametre sesije za spajanje na različita
udaljena računala. Ovo može biti vrlo korisna opcija, pogotovo ukoliko korisnik posjeduje
korisničke račune na više različitih SSH poslužitelja.

436/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

POSLUŽITELJSKI DIO SSH APLIKACIJE

Osnovni zadaci SSH poslužitelja su da osluškuje mrežne zahtjeve SSH klijenata, da


provodi odgovarajuće postupke autentikacije klijenata, da kriptira podatke na dogovoreni
način, te da omogući klijentu korištenje svih mogućnosti SSH servisa.

Konfiguracija SSH programa poslužitelja nalazi se u /etc/ssh/sshd_config


konfiguracijskoj datoteci.

Pokretanje SSH poslužitelja potrebno je omogućiti prilikom svakog podizanja sustava,


što je moguće postići dodavanjem odgovarajućih start skripti u /etc/rc direktorij.
Neki od brojnih konfiguracijskih parametara s kojima je moguće pokretati program su:

-b
=> definira se veličina ključa kojeg poslužitelj generira prilikom
instalacije. Inicijalno je to 768 bitova.
-d
=> pokretanje moda za otklanjanje grešaka. Ukoliko se zada ova
opcija sustav će u log datoteke bilježiti sve akcije vezane za rad poslužitelja, a ujedno će se i u
konzoli generirati odgovarajuće poruke što olakšava otklanjanje grešaka.
-f
=> ukoliko se ne želi koristiti inicijalna /etc/ssh/ssh_config
datoteka definira se konfiguracijska datoteka iz koje se čita konfiguracija.
-g
=> definira se vrijeme koje se klijentu dozvoljava za izvršavanje
postupka autentikacije. Ukoliko se klijent ne autenticira za to vrijeme poslužitelj prekida
sesiju s klijentom. Inicijalna vrijednost ovog parametra je 600 sekundi.
-h
=> definira se datoteka iz koje se čita javni ključ poslužitelja.
Ovaj parametar potrebno je definirati u slučajevima kada se sshd program pokreće pod
ovlastima drugog korisnika budući da isti nema ovlasti pristupa ssh_host_key datoteci koja
inicijalno sadrži ovu vrijednost. U tom slučaju korisnik definira vlastitu datoteku kojoj ima
pristup, te je nakon toga navede kao parametar sshd poslužitelju.

437/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

-i
=> ovaj parametar definira se u slučajevima kada se sshd
program pokreće putem inetd poslužitelja. U principu se ovakav pristup ne preporučuje,
budući da se na taj način nešto usporavaju performanse sustava.
-p
=> definira se mrežni port na kojem poslužitelj osluškuje
zahtjeve klijenta. Na ovaj način moguće je ssh daemon programu zadati bilo koji port koji će
se koristiti za uspostavu mrežnih sesija. Inicijalno je to port 22.

Konfiguracijska datoteka SSH poslužitelja

Kako je već ranije spomenuto sshd program svoju konfiguraciju čita iz datoteke
/etc/ssh/ssh_config (osim ukoliko nije drugačije definirano -f parametrom).
U toj datoteci moguće je definirati brojne ključne riječi kojima se utječe na rad sshd
poslužitelja, a neke od njih su:

AllowGroups
=> parametar koji se koristi za definiranje grupe korisnika koja
ima prava pristupa SSH poslužitelju. Moguće je navesti više korisničkih grupa, pri čemu se
iste odvajaju razmakom. Inicijalno je dozvoljeno spajanje korisnika bez obzira kojoj grupi isti
pripada. Moguće je korištenje wildcard znakova * i ? za preciznije definiranje liste
korisničkih grupa.
AllowUsers
=> slično kao i AllowGroups parametar, samo što se odnosi na
korisnike, a ne na grupe korisnika.
AllowTCPForwarding
=> ovaj parametar omogućuje tuneliranje ostalih protokola
preko SSH sigurnog kanala. Inicijalno je postavljen na vrijednost "yes".
Banner
=> parametar koji je omogućen samo kod SSH2 verzije
protokola, a definira datoteku čiji će se sadržaj prikazati korisniku prilikom uspostave veze s
udaljenim računalom.

438/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

Chipers
=> definiraju se grupe algoritama koje se mogu koristiti za
kriptiranje podataka. Moguće je definirati sljedeće algoritme: aes128-cbc, 3des-cbc, blowfish-
cbc, cast128-cbc i arcfour. Moguće je definirati više algoritama pri čemu se isti u tom slučaju
odvajaju zarezom.
CheckMail
=> definira se da li sshd poslužitelj mora provjeravati mail
korisnika prilikom njegovog spajanja. Inicijalna vrijednost ovog parametra je "no".
Deny Groups i Deny Users
=> parametri kojima se na sličan način kao i kod AllowGroups i
AllowUsers omogućuje zabrana pristupa SSH servisu. Korištenjem ovih parametara moguće
je vrlo precizno definirati kojim korisnicima je omogućeno korištenje SSH servisa.
IgnoreRhosts
=> onemogućuje se autentikacija korisnika na temelju .rhosts i
hosts.equiv datoteka. Inicijalna vrijednost ovog parametra je "yes", budući da se ovaj način
autentikacije smatra manje sigurnim.
IgnoreUserKnownHosts
=> definira se da li sshd poslužitelj uzima u obzir known_hosts
datoteku prilikom procesa autentikacije korisnika. Inicijalna vrijednost ovog parametra je
"yes".
PaswordAuthentication
=> definira se da li je korisniku dozvoljeno prijavljivanje na
sustave na temelju korisničke šifre. Inicijalna vrijednost ovog parametra je "yes".
PermitRootLogin
=> definira se da li je dozvoljeno prijavljivanje pod korisničkim
računom administratora sustava. Inicijalna vrijednost ovog parametra je "yes". Moguće je
definirati sljedeće vrijednosti ovog atributa: yes, no, forced-commands-only (omogućuje
prijavljivanje administratora na temelju njegovog para tajni/javni ključ) i without-password
(bez korisničke šifre).
Port
=> definira se mrežni port na kojem sshd poslužitelj osluškuje
zahtjeve. Inicijalno je to port 22.

439/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

Protocol
=> definira se verzija protokola koju koristi sshd program
poslužitelj. Moguće vrijednosti ovog atributa su 1 i 2.
PubkeyAuthentication
=> definira se da li je dozvoljena autentikacija korisnika na
temelju para javni/tajni ključ. Inicijalna vrijednost ovog parametra je "yes".
ReverseMappingCheck
=> vrlo korisna opcija sa stanovišta sigurnosti, kojom se od sshd
poslužitelja zahtjeva da provjeri IP adresu i ime računala s kojeg zahtjev dolazi. Na ovaj način
pruža se dodatna zaštita od IP i DNS spoofing napada u kojima neovlašteni korisnik lažira IP
adresu ili ime računala s kojeg konekcija dolazi, kako bi na taj način ostvario neautorizirani
pristup resursima drugog sustava.
RhostsAuthentication
=> definira se da li je moguća autentikacija samo na temelju
.rhosts ili hosts.equiv datoteka. U normalnim okolnostima ne preporučuje se korištenje ove
metode budući da se smatra manje sigurnom. Iz sigurnosnih razloga inicijalna vrijednost ovog
parametra je "no".
RhostsRSAAuthentication
=> definira se da li je dozvoljena autentikacija korisnika na
temelju .rhosts ili hosts.equiv datoteka u kombinaciji s RSA autentikacijom. Ova metoda nešto
je sigurnija u odnosu na prethodno navedenu, ali je takoñer iz sigurnosnih razloga vrijednost
ovog parametra postavljena na vrijednost "no".
RSAAuthentication
=> definira se da li je dozvoljena autentikacija korisnika na
temelju RSA algoritma, odnosno na temelju para javni/tajni ključ korisnika. Inicijalna
vrijednost ovog parametra je "yes", budući da se ovaj mehanizam autentikacije smatra prilično
sigurnim.
Subsystem
=> definira se dodatni vanjski podsustav (npr. sftp podsustav za
prijenos datoteka). U tu svrhu potrebno je navesti ime podsustava koji se želi koristiti.
Inicijalno ovdje nije naveden niti jedan podsustav.

440/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

X11Forwarding
=> omogućuje se preusmjeravanje X11 protokola putem
sigurnog SSH kanala. Inicijalno je ova mogućnost isključena.

Pomoću ovih parametara moguće je vrlo precizno definirati ponašanje SSH daemon
programa.

Authorized_keys datoteke

Kako je već ranije spomenuto authorized_keys datoteka sadrži popis javnih RSA
ključeva svih korisnika koji se SSH protokolom žele spajati na SSH poslužitelj pomoću svog
para tajni/javni ključ. Kod SSH1 verzije protokola ta datoteka nosi ime authorized_keys, dok
kod SSH2 verzije ta ista datoteka nosi ime authorized_keys2. Na istom sustavu moguće je
koristiti obje datoteke ukoliko se želi da poslužitelj jednako podržava SS1 i SSH2 verzije
protokola.
Svaki redak ove datoteke sadrži jedan javni ključ (RSA ili DSA, ovisno o korištenom
algoritmu enkripcije) korisnika.
Znak # kao i većini drugih slučajeva predstavlja početak komentara te se kao takav
ignorira.
Za datoteku $HOME/.ssh/authorized_keys osim što je na raspolaganju korisniku u
čijem se home direktoriju nalazi, takoñer se preporučuje da bude dostupna administratoru
sustava. U nju će korisnici kopirati svoj javni ključ za SSH1 verziju protokola, ili preciznije
rečeno identity.pub datoteku.
U datoteku $HOME/.ssh/authorized_keys2 korisnici kopiraju ključeve vezane za SSH2
verziju protokola, odnosno id_rsa.pub i id_dsa.pub datoteke.

/etc/ssh_host_key, /etc/ssh_host_dsa_key, /etc/ssh_host_rsa_key datoteke

Navedene datoteke sadrže privatne ključeve tog računala. Slično kao što i svaki korisnik
posjeduje svoj par javni/tajni ključ, tako i svako računalo koje koristi SSH servis ima svoj
zasebni par ključeva. Ove datoteke iz tog razloga moraju imati ovlasti koje samo

441/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

administratoru sustava omogućuju njihovo pregledavanje i mijenjanje. Sshd program se iz


sigurnosnih razloga neće htjeti pokrenuti ukoliko su ovlasti ovih datoteka krivo postavljene.
/etc/ssh_host_key.pub, /etc/ssh_host_dsa_key.pub, /etc/ssh_host_rsa_key.pub
datoteke

Navedene datoteke sadrže javne ključeve računala na kojem se nalaze. Za razliku od


tajnog ključa opisanog u prethodnoj stavci ova datoteka može biti dostupna ostalim
korisnicima. Njezin sadržaj se takoñer generira korištenjem ssh-keygen naredbe.

etc/ssh_known_hosts i $HOME/.ssh/known_hosts datoteke

Ove datoteke koriste se u slučajevima kada se proces autentikacije provodi na temelju


.rhosts datoteke u kombinaciji sa RSA postupkom. Javni ključ računala koje se žele spojiti se
mora nalaziti u ovoj datoteci ukoliko se želi uspješno uspostaviti veza sa SSH poslužiteljem.
Iste datoteke klijent SSH aplikacija koristi kako bi provjerila identitet udaljenog računala na
koje se pokušava spojiti. Ukoliko se u ovome koraku primijete bilo kakve neregularnosti
sesija se prekida.

/etc/hosts.allow i /etc/hosts.deny datoteke

Datoteke kojima se može točno kontrolirati dozvola pristupa pojedinim servisima


instaliranim na istom računalu. Datoteke se koriste u kombinaciji sa tcp_wraper programskim
paketom u svrhu povećane kontrole pristupa pojedinim TCP mrežnim servisima.

$HOME/.rhosts datoteka

Ova datoteka sadrži razmakom odvojene vrijednosti korisničko ime - ime računala, i svi
tako navedeni korisnici sa navedenog računala mogu se spojiti na to računalo bez navoñenja
korisničke šifre.
Korištenje .rhosts datoteke naslijeñeno je od starijih mrežnih servisa kao što su rsh, i
rlogin koji se danas više ne koriste. Iz navedenog odmah se može zaključiti zašto se
korisnicima nikako ne preporučuje korištenje ovakvog mehanizma autentikacije, budući da je

442/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

isti prilično nesiguran. Ukoliko se želi omogućiti ovakav način autentikacije, to je potrebno
eksplicitno navesti u konfiguracijskoj datoteci sshd poslužitelja.

$HOME/.shosts datoteka

Shosts datoteka je posebno odreñena datoteka koja obavlja ulogu .rhosts datoteke, s
jedinom razlikom da se koristi isključivo za ssh servis.

/etc/hosts.equiv datoteka

U ovoj datoteci navedena su imena računala koja se mogu spojiti na dotično računalo
bez odgovarajuće korisničke šifre, pod pretpostavkom da korisnik ima isto korisničko ime na
oba računala.
Slično kao i kod .rhost datoteke korisnicima se iz sigurnosnih razloga ne preporučuje
korištenje ove datoteke u svrhu autentikacije udaljenih korisnika.

/etc/shosts.equiv

Isto kao i /etc/hosts.equiv, samo što datoteka vrijedi isključivo za SSH servis.

443/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

OPĆENITO O PREUSMJERAVANJU
TCP PORTOVA I SFTP

Preusmjeravanje portova, popularno zvano tuneliranje, je mehanizam koji korisniku


omogućuje preusmjeravanje inače nesigurnog TCP prometa preko sigurnog SSH
komunikacijskog kanala.
Na ovaj način moguće je proizvoljne, inače nesigurne (nekriptirane) mrežne servise kao
što su POP, IMAP, SMTP, telnet i dr., preusmjeriti preko SSH kanala te ih na taj način zaštiti
od neovlaštenog promatranja.
Na sljedećoj slici prikazan je princip na kojem se bazira tuneliranje protokola preko
SSH sigurnog kanala:

Slika: Tuneliranje protokola

Princip je sljedeći:
 SSH klijentu potrebno je reći koji se port na lokalnom računalu želi tunelirati kroz
sigurni SSH kanal, i na koji port udaljenog računala se taj promet želi preusmjeriti. U tu svrhu
koristi se već prije spomenuta -L opcija ssh klijenta.
 Nakon toga kompletni promet lokalnog računala koji se šalje na u prethodnoj fazi
definirani port biti će putem sigurnog SSH kanala preusmjeren na sshd poslužitelj navedenog
udaljenog računala.
 Sshd poslužitelj prima kriptirani promet na SSH portu 22 i prosljeñuje ga servisu na
port koji je u prvom koraku definiran kod ssh klijenta.
 Servis vraća odgovor na primljeni zahtjev, te ga prosljeñuje sshd poslužitelju, koji ga
putem SSH kanala vraća klijentskom dijelu aplikacije.

444/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

 SSH klijent prima odgovor i prosljeñuje ga servisu koji je inicirao sesiju.


Općenita sintaksa naredbe kojom se omogućuje tuneliranje, tj. preusmjeravanje
protokola je:
# ssh -f -L [local port]:[full name of remote host]:[remote port] [some command]
Parametar -f nije obavezan, ali ga je poželjno navesti kako bi kreirani ssh tunel radio
kao pozadinski proces. Na taj način nakon uspostave SSH tunela omogućuje se oslobañanje
konzole, te je moguće zadavanje drugih naredbi.
Ukoliko se ne proslijedi parametar -f nakon uspostave SSH kanala korisnik će morati
preći u drugu konzolu ukoliko želi izvršavati naredbe na lokalnom računalu.
Parametar -L služi za definiranje parametara postupka tuneliranja, odnosno za
definiranje portova koji će biti preusmjereni. Prilikom proizvoljnog odabira porta preporučuje
se uzimanje nekog visokog porta koji nije korišten od strane nekih drugih aplikacija, tj.
uzimanje nezauzetog porta. Lista portova koji su zauzeti od strane drugih programa može se
naći u datoteci /etc/services.
Ukoliko se ssh klijent želi pokretati kao pozadinski proces (parametar -f) neophodno je
na kraju naredbe zadati naredbu koju će poslužitelj izvršiti nakon prihvaćanja sesije, npr.
naredbu sleep koja ujedno korisniku daje dovoljno vremena da se klijent aplikacijom servisa
koji se tunelira (telnet, FTP) spoji na udaljeno računalo. Naredba sleep kao argument prima
broj sekundi koji će udaljeni proces biti spreman prihvatiti zahtjev klijenta.
Tuneliranje telnet servisa teoretski nema previše smisla, budući da je SSH sam po sebi
sigurna zamjena za telnet servis. Moguće je bilo koji TCP protokol tunelirati kroz SSH kanal
(POP, POP3, IMAP, FTP i sl.). Protokoli koji su najveći kandidati za SSH preusmjeravanje
su oni koji ne implementiraju nikakve mehanizme zaštite podataka.
Tuneliranje FTP protokola (FTP slično kao i telnet servis podatke mrežom šalje u
čistom tekstualnom obliku) na način kako je to gore opisano nešto je kompleksnije u odnosu
na ostale protokole kao što su telnet, POP, NNTP i dr. Razlog je taj što FTP konekcija koristi
dva porta za komunikaciju, jedan kontrolni i jedan podatkovni, a stvar se dodatno komplicira
budući da postoje dva moda rada FTP protokola aktivni i pasivni.
Sftp je program koji dolazi u paketu s openssh programskim paketom, a omogućuje
sigurnije korištenje FTP protokola pomoću SSH protokola. Korištenje sftp programa
preporučuje se svim korisnicima kao sigurnija zamjena za tradicionalni FTP servis, a
korištenje programa je vrlo jednostavno, budući da su sve naredbe naslijeñene od običnog
FTP protokola.

445/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

SCP

S openssh programskim paketom dolazi i scp program.


Scp (Secure Copy) program omogućuje sigurno kopiranje datoteka izmeñu lokalnog i
udaljenog računala. Sigurno kopiranje datoteka bazira se na korištenju SSH protokola,
odnosno kriptiranju podataka koji se prenose računalnom mrežom.
Osim sigurnosti koju nude, dodatna prednost sftp i scp programa je ta što ne zahtijevaju
instalaciju dodatnih programa poslužitelja na udaljenom računalu. Razlog tomu je taj što oba
programa svoj rad baziraju na SSH protokolu, te kao takvi koriste sshd poslužitelj.
Korištenje scp naredbe vrlo je slično korištenju klasične cp Linux/Unix naredbe s
jedinom razlikom što se kopiranje odvija izmeñu udaljenih računala.
Primjeri:

# scp local_dir/filename myname@host:remote_dir


=> Gore navedena naredba rezultirati će kopiranjem datoteke
filename unutar lokalnog direktorija local_dir u direktorij remote_dir na udaljenom računalu
host. Myname parametar definira korisničko ime korisnika na udaljenom računalu.
# scp local_dir/* myname@host:remote_dir
=> Slično kao i u prethodnom primjeru, samo što se kopira
kompletni sadržaj direktorija local_dir.
#scp /home/peric/* peric@test2:/home/peric
=> Kopiranje sadržaja home direktorija korisnika peric sa
lokalnog računala test1, u home direktorij istog korisnika na računalo test2
WinSCP je besplatni programski paket za Windows operativne sustave (Win
95/98/NT/2000/ME/XP), koji omogućuje kopiranje datoteka izmeñu lokalnog i udaljenog
računala.
Program svoj rad bazira na ranije spomenutom SCP (Secure Copy) protokolu koji dolazi
kao dio ssh paketa. Podržane su obje verzije SSH protokola (SSH1 i SSH2), te autentikacija
korisnika na temelju RSA para javni/tajni ključ odnosno šifre korisnika.
Da bi se moglo uspješno WinSCP klijent aplikacijom uspostaviti veza s udaljenim
računalom, potrebno je na njemu imati pokrenut sshd program poslužitelj, budući da se
kompletna veza odvija putem SSH protokola.

446/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Telnet i SSH

ZAKLJUČAK

Tehnologija i znanost munjevitom brzinom grabe naprijed, a najbrže od svih se


razvijaju znanosti i tehnologije vezane uz računala. Svaki napredak ima svoje prednosti i
nedostatke.
U mrežnim okolinama, dok distribuirano računarstvo uzima sve više maha, te se više ne
može vjerovati u dobronamjernost korisnika sustava, kontrola pristupa i autentikacija
korisnika postaju nužan uvjet.

U ovom seminaru dan je kratki pregled osnovnih karakteristika telnet i SSH protokola,
te neke od mogućnosti njihove primjene. Opisani su temeljni programski paketi neophodni za
korištenje SSH protokola, kao i osnovni postupci njihove konfiguracije.

Može se zaključiti da je osnovna namjena SSH protokola da omogući kreiranje sigurnih


sesija izmeñu dva računala. Na taj način uklanja se najveći nedostatak mrežnih servisa kao što
su telnet i sl., a to je nezaštićenost prijenosa podataka.
Podaci se kod takvih protokola prenose računalnom mrežom u čistom tekstualnom
obliku što neovlaštenim korisnicima omogućuje jednostavan dolazak do povjerljivih
korisničkih informacija. Upravo zato se svim korisnicima preporučuje prelazak na sigurnije
implementacije istih servisa, tj. korištenje SSH protokola.
Iz istih razloga poseban je naglasak dan upravo sigurnosnim svojstvima ovog protokola,
što je ujedno i njegova najveća snaga.

447/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

Tomislav Ščrbak

PGP i CA authority

448/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

1. UVOD

U doba kada je prijenos i razmjena digitalnih podataka putem mreže (TCP/IP


protokolom, Internetom ili Ethernetom) postala normalna pojava i podaci postali sve vrijedniji
pokazala se je potreba za zaštitom tih podataka. Naime, pošto se za prijenos poruka (podatka)
putem elektroničke pošte koristi SMTP protokol (Simple Mail Transfer Protocol) kojim je
definiran prijenos poruka u tekstualnom obliku i adrese pošiljatelja koja ga identificira dodana
takoñer u tekstualnom formatu poruci. Zbog takvoga načina prijenosa tu poruku je lagano
presresti, pročitati sadržaj i promjeniti podatak o pošiljatelju poruke. Na taj način narušena je
privatnost pošiljaoca i primaoca, pogotovo ako se radi o važnim i dragocjenim dokumentima.
Treba znati da je SMTP protokol nastao 80 godina prošlog stoljeća u doba kada je bilo
malo korisnika Interneta i elektroničke pošte, ali u današnje vrijeme kada se putem
elektroničke pošte prijenose vrijedni poslovni i privatni dokumenti, a odreñeni pojedinci žele
te podatke presresti i doći do odreñenih informacija. Pokazala se je potreba za zaštitom tih
podataka, odnosno potreba za sigurnom mrežnom komunikacijom pomoću protokola za
enkripciju i digitalno potpisivanje poruka, koje ću dalje detaljno obraditi.
U današnje vrijeme najpoznatiji način enkripcije je pomoću OpenPGP standarda, a
njegove najpoznatije verzije su PGP (Pretty Good Privacy) i GnuPG (GNU Privacy Guard)
programi.

449/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

1.1. Nastanak PGP-a

Tvorac PGP (Pretty Good Privacy) programa je čovjek po imenu Phil R.


Zimmermann, koji je i napisao prvu verziju programa 1991. godine. Program je nastao kao
odgovor na raspravu u američkom Senatu kada je predložen prijedlog novoga zakona, prema
kojemu bi svi proizvoñači sigurne opreme za komunikaciju trebali ugraditi u svoje proizvode
mogučnost da državna vlast može po potrebi dešifrirati zaštičeni oblik komunikacije.
Prijedlog nije nikada zaživio kao važeči zakon, ali je inspirirao Phila R. Zimmermanna da
napiše PGP. Osnovna zadača programa je zaštita elektronske pošte.
Nakon što je napisao prvu verziju programa, program se je ubrzo našao na internetu i
proširio izvan krugova SAD-a. Ovime je Phil Zimmermann prekršio zakon o izvozu
kriptografskog softvera i uslijedile su mnoge tužbe. Takoñer je imao i problema s tvrtkom
RSA Data Security čije je algoritam upotrebio bez plaćanja licence. Godine 1997. pojavila se
prva legalna inačica PGP-a.

1.2 Nešto o kriptografiji

Kada je Julije Cezar slao poruke svojim generalima, nije vjerovao svojim nositeljima
poruka. Pa je zbog toga svako slovo A u svojoj poruci zamjenio s slovom D, a s slovo B s E i
tako dalje. Zbog toga načina pisanja poruka, samo oni koji su znali pravilo pomaka slova za 3
mjesta su znali vratiti poruku u izvorni oblik (odnosno pročitati).
And so we begin.
Kriptografija je znanstvena disciplina koja se bavi proučavanjem metoda za slanje
poruka u takvom obliku da ih može pročitati samo onaj kojemu su namjenjene. Osnovni
zadatak kriptografije je da omogući sigurnu komunikaciju i prijenos podataka izmeñu dvije
strane (pošiljaoca i primaoca) koji komuniciraju preko nesigurnog komunikacijskog kanala,
bilo to preko mreže(Internetom ili Ethernetom) ili putem telefonske linije i to tako da tu
informaciju nemože pročitati nitko osim osobe kojoj je ta informacija poslana.

450/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

Osnovni ciljevi kriptografije:


 Tajnost podataka: da podacima smiju
pristupiti samo oni koji imaju ovlasti.
 Integritet podataka: da se može otkriti
neovlaštena promjena podataka.
 Provjera integriteta: dokazivanje da su
stranke koje komuniciraju zaista one koje
tvrde da jesu.
 Neosporivost: onemogućava sudioniku
komunikacije da zaniječe svoje prethodne
poruke.

1.3. Enkripcija i dekripcija

Podatke (tekst ili nekakva druga informacija) koje možemo razumjeti i pročitati bez
nekih velikih problema nazivamo plaintext ili otvoreni tekst.

Slika 1.1. Primjer enkripcije i dekripcije podataka

Enkripcija (eng. Encryption) je postupak koji se sastoji od toga da se otvoreni tekst


(eng.plaintext ) pomoću kriptografskog algoritma pretvori u nerazumljiv tekst, odnosno

451/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

kriptirani podatak (eng. Chipertext, šifrat) koji je svima nerazumljiv osim primatelju, kojemu
je namijenjen.
Postupak kojim se šifrirani podatak (chipertext) vraća u prvobitni oblik (plaintext) zove
se dekripcija podataka ili eng. decryption.
Kriptografski algoritam je matematička funkcija koja se koristi u enkripciji i dekripciji
podataka. Kriptografski algoritam radi u kombinaciji s ključem (riječ, broj , neki izraz) da
šifrira otvoreni tekst , odnosno plaintext. Isti plaintext se pomoću različitih ključeva može
šifrirati u različiti ciphertext (šifrirani tekst). Sigurnost šifriranog teksta ovisi o dvije stvari: o
kvaliteti kriptografskog algoritma i o tajnosti ključa pomoču kojega smo izvršili enkripciju.
Kriptografski algoritam, plus svi moguči ključevi i protokoli tvore kriptosustav (eng.
cryptosystem). PGP je kriptosustav.

Postoje dvije metode enkripcije:


 Simetrična enkripcija i
 Asimetrična enkripcija

1.4 Simetrična kriptografija

Simetrična kriptografija ili kriptografija putem tajnoga ključa je postupak u kojemu se


za šifriranje i dešifriranje dokumenata koristi isti kriptografski ključ. Prednost ovakvih
algoritama je velika brzina šifriranja i dešifriranja. Mana ove vrste kriptografije je ta da nije
pogodna za razmjenu poruka izmeñu dva entitea, jer postoji problem sigurnog dostavljanja
zajedničkog ključa, ali je dobra za zaštitu jednog entiteta . Postupka kriptiranja i dekriptiranja
prikazan je na slici 1.2.
Najpoznatiji algoritmi simetrične kriptografije DES (Data Encryption Standard), IDEA
(International Data Encryption Algorithm), RC5, 3DES,.......

452/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

Slika 1.2. Primjer simetrične kriptografije putem tajnog ključa

1.5. Asimetrična kriptografija

Asimetrična kriptografija ili kriptografija putem javnoga ključa umjesto jednoga ključa
za kriptiranje koristi par ključeva: jedan tajni te jedan javni (privatni) ključ. Potpuno je
svejedno koji se od dva ključa koristi za šifriranje, ali za dekriptirnje se mora koristiti
odgovarajuči ključ iz istoga para. Javni ključ se javno objavi, dok tajni ključ ostaje u tajnosti.
Na taj način poruke se mogu slati bez prethodne razmjene ključeva, jer bilo tko može šifrirati
poruku s javnim ključem. Ali dešifrirati je može samo osoba kojoj je namijenjena, jer ona
posjeduje tajni ključ s kojom poruku može dekriptirati i vratiti u izvorni oblik. Dobra strana
ovoga algoritma je ta omogućava digitalno potpisivanje dokumenata.

Najpoznatiji algoritmi asimetrične kriptografije RSA algoritam (koristi se u svim


važnim načinima ostvarivanja sigurne komunikacije: PGP, SSL, S-HTTP,...), DSA (Digital
Signature Algoitam) i DSS (Digital Signature Standard)

453/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

Slika 1.3. Primjer asimetrične kriptografije putem javnog ključa

454/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

2. PGP (Pretty Good Privacy)

2.1. Što je to PGP?


PGP je jedan od najpopularnijih i najraširenijih načina zaštite sadržaja elektronske
pošte. Koristi se vrlo pouzdanim kriptografskim algoritmima:

 RSA za kriptiranje putem javnoga ključa


 IDEA za simetričnu kriptografiju putem tajnoga ključa.

Ima razrañen sistem deponiranja javnih i tajnih ključeva u vlastite malene baze podataka te
povrh svega pruža mogučnost kompresije podataka. Može se koristiti za ciljano kriptiranje
elektronske pošte jednom ili više korisnika, te za digitalni potpis elektronske pošte. Pisan je u
C – u ( kritični dijelovi u strojnom jeziku ) i prenesen je na velik broj platformi i operativnih
sistema računala. Najpoznatija verzija na Linux/Unix računalima je GnuPg (GNU Privacy
Guard).
Program je pouzdan, te nudi niz mogučnosti:

 Kriptiranje/dekriptiranje poruka,
 Autorizaciju putem digitalnog potpisa
 Kompresiju podataka i
 Kompatibilnost po SMTP, POP3 i MIME standardima
komunikacije putem elektronske pošte.

Digitalne potpise kreira putem RSA tajnog dijela ključa te MD5 algoritma uz ubačenu
dodatnu informaciju o vremenu kreiranja potpisa.

2.2. Kako PGP radi

PGP je hibridni kriptosustav. Hibridni kriptosustav je zbog toga jer pri svojemu radu
(zaštiti podataka) koristi kombinaciju najboljih odlika simetrične i asimetrične kriptografije.
Simetričnu enkripciju kako smo i prije kazali koristi, jer je brža od asimetrične enkripcije, ali
kod simetrične enkripcije postoji problem prijenosa ključa ( ako se ključ presretne, podaci se
mogu dešifrirati i pročitati ). Kada se ova dva načina spoje zajedno(simetrična i asimetrična
enkripcija) dobijemo dobar efekt: brzu enkripciju i siguran način prijenosa ključa. To je zbog
toga jer se ključ prenosi šifriran.
Pošto je osnovna uloga PGP zaštita podataka prilikom prijenosa putem mreže, PGP se
ne sastoji samo od kriptografskih algoritama, nego od više cijelina i zbog toga se naziva
kriptosustav.
Prilikom svojega rada (postupka zaštite podataka) PGP radi: kompresiju podataka,
generiranje simetričnoga ključa ( eng. session key ), enkripciju podataka, enkripciju
privremenog ključa ( eng. session key ) i slanje šifriranog podatka.

455/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

2.2.1. Kompresija podataka

Kompresiju podataka PGP će izvršiti iz dva razloga (ako mu ne kažemo drugačije).


Prvi razlog je manja količina podataka koje želimo poslati putem mreže, te brži prijenos
podataka, a drugi razlog je veča sigurnost podataka koje šaljemo. Sigurnost podataka koje
šaljemo kompresirane je veće zbog toga jer se metode za razbijanje kriptografske zaštite
temelje na prepoznavanju pojedinih dijelova u podacima. Ako su podaci prije slanja bili
kompresirani otežano je raspoznavanje pojedinih dijelova, a time i povečana sigurnost.
Kompresiju podataka PGP vrši pomoču ZIP algoritma.

2.2.2. Kriptiranje podataka

Nakon kompresije podataka, PGP kreira simetrični ključ (eng. session key ) koji se
generira samo jednom, odnosno taj ključ će biti upotrebljen samo jednom. Za svaku sljedeću
poruku generira se novi ključ. Taj ključ je slučajno generirani broj koji je nastao nasumičnim
pomicanjem miša i udaraca tipke po tastaturi.

Slika 1.4. Način kriptiranja podataka putem PGP-a.

Ovaj simetrični ključ ( eng. session key ) koji je nastao slučajno, vrlo dobro i brzo kriptira
otvoreni tekst (na slici 1.4. moja tajna poruka) pomoču simetričnog algoritma, koji ima vrlo
dobre preformanse koje smo več spomenuli ranije kod opisa simetrične enkripcije. Prilikom
kriptiranja (enkripcije) koristi se jedan od simetričnih algoritama IDEA, AES, CAST – 128,
Triple – DES i drugi. Najčešće korišteni algoritam je IDEA (International Data Encryptio
Algorithm) algoritam. Nakon što smo kriptirali otvoreni tekst, ključ s kojim smo izvršili
enkripciju trebalo bi sigurno dostaviti primatelju da bi mogao izvršiti dešifriranje, odnosno
dekripciju i pročitati našu tajnu poruku. Sada je ostao samo problem kako sigurno dostaviti
ključ primatelju s kojim smo izvršili enkripciju. Taj problem je riješen na način da naš

456/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

simetrični ključ ili session key kriptiramo s javnim ključem primatelja, pomoču asimetričnog
algoritma RSA. Nakon ovoga postupka, kriptirana poruka se kao paket šalje zajedno s
kriptiranim ključem za njezino dekriptiranje primatelju. Cijeli postupak je detaljno objašnjen
na slici 1.4.

2.2.3. Dekriptiranje podataka

Postupak dekriptiranja ili dekripcija podataka je obrnut od upravo opisanog postupka


za kriptiranje podataka. Nakon što je primatelj primio paket (kriptirana poruka + kriptirani
simetrični ključ), primatelj pomoću svojega tajnoga ključa kojega zna samo on, prvo izvrši
dekripciju nad kriptiranim simetričnim ključem. Nakon što je dekriptirao simetrični ključ,
sada je tek primatelj spreman da pomoču toga simetričnoga ključa dekriptira zaštičenu poruku
koju je primio. Nakon dekripcije poruke ostalo je samo da se izvrši dekompresija podataka i
sada primatelj može čitati ili raditi nekakve radnje s podacima.

Slika 1.5. Način dekriptiranja podataka putem PGP-a.

PGP kako smo i vidjeli koristi dva algoritma pri svojemu radu, simetričnu enkripciju i
asimetričnu enkripciju. Simetričnu enkripciju koristi zbog brzine enkripcije podataka, jer je
1000 puta brža od asimetrične (otprilike). Asimetričnu koristi za sigurnu razmjenu ključeva
putem mreže. Kombinacijom ova dva algoritma postiže veliku sigurnost u radu.

457/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

2.3. Ključevi

Ključ je neka vrijednost koja radi s kriptografskim algoritmom da bi se proizveo


šifrirani tekst (eng. chipertext). Ustvari to su jako veliki brojevi, a veličina im se mjeri u
bitovima, npr. 1024 bita je dosta veliko. Ustvari što je veči ključ koji koristimo, time je i
sigurnost naše poruke veča. PGP program sprema ključeva na lokalni hard na našem računalu
i to u dvije datoteke. Jedna za privatne ključeve, a jedna za javne ključeve. Te datoteke se
nazivaju eng. keyrings.

2.4. Digitalni potpis

Osim jako dobre zaštite podataka kriptografskim algoritmima, PGP nudi još jednu
mjeru sigurnosti, a to je digitalni potpis. Digitalni potpis omogučava primatelju poruke da
provjeri autentičnost pošiljatelja (odnosno da zna da je dobio poruku od osobe od koje je i
trebao),te da provjeri da je sadržaj poruke koju je dobio ostao nepromjenjen. Ukratko rečeno
digitalni potpis nam omogučava autentičnost i intengritet podataka, tj. ukoliko se naknadno
izmjeni sadržaj poruke, digitalni potpis neće biti više valjan. Pritom ne samo da je i sadržaj
osiguran od namjernog krivotvorenja, nego je i osiguran od nenamjernih promjena koje mogu
nastupiti prilikom prijenosa po mreži. Prilikom kreirnja digitalnog potpisa nad nekom
porukom ugrañuje se i vrijeme kada je ta poruka potpisana. Sve ove kvalitete i odlike je jako
teško je postiči konvencionalnim potpisivanjem rukom.

Način digitalnog potpisivanja

Pošiljatelj podatke koje želi poslati potpisuje pomoću svojega privatnog ključa, a
primatelj provjerava autentičost podataka pomoću javnoga ključa pošiljatelja. Ako primatelj
uspije dekriptirati poruku pomoću pošiljateljevog javnoga ključa, onda je poruka ok.

Pošiljateljev
Pošiljateljev javni ključ
privatni ključ

Potpisana Poruka je
poruka
poruka OK

potpisivanje provjera autentičnosti

Slika 1.6. Digitalno potpisivanje.

458/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

2.5. Hash algoritam

Hash algoritam je poseban skup matematičkih operacija kojima se iz dokumenta


generira jedinstven sažetak koji se još zove i hash kod ili otisak poruke (eng. message
digest).Korisna karakteristika takvoga otiska je činjenica da je nemoguče proizvesti dva
različita dokumenta za koje će hash algoritam proizvesti jednak otisak i gotovo je nemoguće
iz poznatog otiska ponovno kreirati izvorni dokument. Na taj način je moguče iz istoga
dokumenta generirati dva otiska, i ako su otisci jednaki, to je dokaz da su generirani iz istoga
dokumenta. Hash algoritam se najčešće koristi za zaštitu podataka od neovlaštenih promjena
tijekom prijenosa.

Prilikom izrade digtalnog potpisa PGP se služi hash algoritmom ili hash funkcijom
pod imenom MD5 (Message Digest 5). Na slici 1.6. prikazan je rad hash funkcije.

Digitalno
potpisana poruka
s privatnim
ključem

pošiljatelj poruka

otisak poruke

hash funkcija

Potpisivanje s
privatnim ključem

poruka s
digitlnim
primatelj potpisom

Slika 1.7. Prikaz rada hash funkcije i digitalnog potpisivanja.

Kako smo i vidjeli na slici prednost načina rada s hash funkcijom je taj da se je smanjila
količina podataka, jer potpisivamo samo otisak poruke, a ne cijelu poruku kao što je
objašnjeno u poglavlju 2.4. i na slici 1.6.

459/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

3. CA AUTHORITY

3.1. Infrastruktura javnog ključa (PKI)

PKI ( eng. Public Key Infrastructure) je tehnologija koja se temelji na šifriranju


javnim ključem, digitalnom potpisu i sustavu certifikata, postala je industrijskim standardom
za sigurnost elektroničkog poslovanja. PKI pruža sigurno povezivanje javnoga ključa i
korisnika. Cilj je bio dizajnirati infrastrukturu koja bi omogućavala korisnicima
uspostavljanje putova certificiranja (eng. certification paths) koji sadržavaju više od jednoga
ključa. Kreiranje putova certificiranja ili zvanih lanci povjerenja uspostavljaju certifikacijski
centri (eng. Certification Authority - CA). Lanac povjerenja je niz CA-a. CA-i izdaju,
opozivaju i arhiviraju certifikate. Delegacija povjerenja počinje s glavnim CA-om (engl. root
CA), koji je poznat u svakom čvoru u infrastrukturi. Povjerenje se takoñer uspostavlja izmeñu
bilo koja dva povezana CA-a.
CA će certificirati identitet PKI entiteta (jedinstveno ime) i javni ključ tog entiteta. CA
provodi autentifikaciju korisnika i odgovoran je za čuvanje korisničkog imena i pripadajućeg
javnoga ključa. Svaki CA mora biti entitet kojemu se vjeruje, barem u granicama koje
propisuje sigurnosna politika Centra za certifikaciju sigurnosne politike (eng. Policy
Certification Authority - PCA). CA mora stvoriti certifikate, certificirati javne ključeve,
raspodjeliti javne ključeve i sadržavati listu opozvanih certifikata (engl. Certificate
Revocation Lists - CRL). Centar za certifikaciju sigurnosne politike PCA je specijalni CA
koji kreira politiku postavljanja odgovornosti, ta politika definira funkcije i odgovornosti
CAa. Zadaci PKI –a su pronalaženje i razvijanje tih funkcija.

Dijelovi infrastrukture javnog ključa:

 Centar za odobravanje sigurnosne politike (engl. Policy


Approval Authority -PAA) je korijen infrastrukture
upravljanja certifikatima. Taj autoritet je poznat svim
entitetima, a obavlja sljedeće funkcije: kreira politiku i
proceduru koju entiteti u infrastrukturi moraju slijediti,
objavljuje svoj javni ključ, obavlja identifikaciju i
autentifikaciju svakog podreñenog PCA-a, generiranje
certifikata podreñenih PCA-a, itd...
 Centar za certifikaciju sigurnosne politike (engl. Policy
Certification Authority -PCA)
 Certifikacijski centar (engl. Certification Authority - CA)
čija je funkcija stvaranje, objavljivanje, opoziv, i
arhirviranje cetifikata koji povezuju korisnikov identitet s
korisnikovim javnim ključem ili drugih CA-a s sigurnosnom
politikom PCA i PAA. Najvažnija stvar CA je pridjeljivanje
pravoga ključa pravoj osobi.
 Registracijski centar (engl. Organisational Registration
Authority – ORA ili RA) je sučelje izmeñu korisnika i CA-a.
Glavna funkcija koju obavlja je identifikacija i
autentifikacija korisnika uime CA i dostavljanje certifikata,
kojega je generirao CA, krajnjem korisniku. Funkcije koje
obavlja ORA su sljedeće: obavljanje identifikacije i

460/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

autentifikacije korisnika, slanje korisnikovih identifikcijskim


podataka zajedno s korisnikovim javnim ključem CA-u u
potpisanoj poruci, primanje novoga certifikata od CA-a,
dostavljanje javnoga ključa CA-a i javnoga ključa njegovih
prethodnika korisniku, primanje zahtjeva za opozivom
certifikat i verificiranje valjnosti zahtjeva.

3.2. Digitalni certifikat

Digitalni certifikat je elektronički dokument kojom se potvrñuje identitet fizičke ili


pravne osobe, a izdaju ga za to ovlaštene organizacije (primjerice VeriSign, Mountain View).
Ustvari to je certifikat kao i u stvarnome svijetu koji ima svrhu da nekome ili nečemu dokaže
da je netko ono što tvrdi za sebe da je ili da netko drugi za njega tvrdi da je on ono za što se
prestavlja. Sigurnost podataka iz digitalnog certifikata temelji se na primjeni asimetričnih
algoritma za kriptiranje, pri čemu izdane isprave sadržavaju tajni ključ za dešifriranje, a
šifriraju se javnim ključem agencije koja je izdala certifikat.
Javni ključ se koristi za šifriranje poruke namijenjene vlasniku certifikata ili za provjeru
njegovog digitalnog potpisa. Standarzirani format certifikata odreñen je standardom X.509 i
ima odreñeno vrijeme važenja. Stoga se mora redovito pratiti i svaki put programski
provjeravati trenutno stanje javno objavljene liste povučenih certifikata (odnosno onih koji su
prestali važiti) koju digitalno potpisuje i objavljuje agencija ovlaštena za dodjelu certifikata.

Digitalni certifikat se u osnovi sastoji od tri stvari:


 Javnog ključa
 Certifikata (korisničkog ID i drugih informacija o korisniku)
 Jednoga ili više digitalnih potpisa.

Certifikati se koriste kada je potrebno razmjeniti javne ključeve. Za malu grupu ljudi, koja
želi sigurno komunicirati lako je razmjeniti ključeve preko CD-a ili drugačije. Ali za veliki
grupu korisnika i sigurnu razmjenu ključeva treba osigurati skladištenje i sigurnu razmjenu
ključeva pomoču PKI infrastrukture.

U kriptosustavu kao što je PGP postoji potencijalna opasnost da neka treča osoba svoj javni
ključ podmetne kao javni ključ neke druge osobe, te da onda presretne i dekriptira podatke
namjenjene osobi za koju je pošiljatelj smatrao da je vlasnik podmetnutog ključa. Da bi se to
spriječilo PGP koristi digitalne certifikate. Koristi ih zbog provjere da li dotični ključ pripada
osobi kojoj i treba pripadati.
Uloga digitalnih potpisa na digitalnom cerfifikatu je potvrda kako je istinitost informacija
sadržanih u certifikatu potvrñena od strane jedne ili više pouzdanih osoba.
Digitalni certifikati distribuiraju se pomoću poslužitelja certifikatima (eng. Certificate Server)
i PKI. Poslužitelj certifikatima je ustvari baza podataka koja korisnicima omogućava pristup i
pohranjivanje javnih ključeva. Glavna odlika ovog sustava distribucije digitalnih certifikata je
postojanje certifikacijskog opunomoćenika (eng. Certification Authority - CA). Riječ je o
osobi, odjelu, tvrtki,državnoj instituciji ili nekom drugom obliku koja izdaje digitalne

461/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

certifikate, kao što policijska uprava izdaje putovnice i osobne karte. S takvim načinom rada,
smanjena je zloupotreba digitalnih certifikata.

Kod PGP poznajemo dvije vrste formata certifikata i to su PGP format i X.509 format. PGP
format se sastoji od nekoliko dijelova, ali nije ograničen s njima : broj verzije PGP, certifikat
o korisnikovu javnome ključu i algoritmima koji se koriste, certifikat o korisniku (ID
korisnika,ime,..), digitalni potpis korisnika, datum i rok trajanja (kada je izrañen i do kada
vrijedi), predefinirani algoritmi korištenja. Jedna stvar koja je karakteristična za PGP format
certifikata je da nema ograničenja kada se govori o broju osoba koje će potvrditi identite neke
osobe. PGP format možemo načiniti sami, dok X.509 moramo zatražiti od CA (Certification
Authority).

3.3. X.509 format certifikata

Kada dvije strane koje se ne poznaju otprije žele komunicirati na siguran način
najbolje rješenje je korištenje asimetrčnog šifriranja i digitalnog potpisa. Ipak, prije sigurne
komunikacije strane trebaju razmijeniti svoje javne ključeve, a tu se postavlja sljedeće pitanje:
kad strana A prima javni ključ od strane B, kako može biti sigurna da joj strana B neće
podmetnuti neki tuñi ključ, ili da netko pri prijenosu neće presresti i izmijeniti ključ.
Odgovor na ovo pitanje nudi infrastruktura javnog ključa (Public Key Infrastructure– PKI).
Osnovna ideja jest uvoñenje treće strane kojoj vjeruju i strana A i strana B. Ta treća strana se
naziva certifikacijski centar (Certification Authority - CA). Ono je zaduženo da pojedincima
(organizacijama) izdaje certifikate koji predstavljaju dokaz da neki javni ključ pripada tom
pojedincu (organizaciji). Standard koji propisuje sadržaj takvog certifikata je izdao ITU-T pod
nazivom X.509.
X.509 je često upotrebljavan format certifikata. Prema tome se, teoretski , certifikati
stvoreni za jednu aplikaciju mogu iskoristiti u bilo kojoj aplikaciji koja udovoljava X.509
standardu. Ipak u praksi tvrtke razvijaju se proširenja X.509 certifikata koja nisu
kompatibilna.
Certifikat zahtjeva validaciju pripadnosti javnoga ključa nekoj osobi. Kod X.509 certifikata
validaciju uvijek obavlja CA ili netko odreñen od strane CA.

Prema standardu,X.509 certifikat sadrži (najvažnije stavke su podebljane):

 broj verzije formata certifikata


 serijski broj certifikata jedinstven za odreñeni CA
 ime algoritma koji je korišten u digitalnom potpisu certifikata
 jedinstveno ime CA-a koja izdaje certifikat
 period ispravnosti certifikata
 jedinstveno ime korisnika kojemu se certifikat izdaje
 javni ključ korisnika
 digitalni potpis sadržaja certifikata

CA svojim digitalnim potpisom sadržaja certifikata potvrñuje da osobni podaci koji su


sadržani u jedinstvenom imenu korisnika odgovaraju javnom ključu. Kada dvije strane koje se
ne poznaju otprije žele komunicirati na siguran naćin, one će prvo razmijeniti certifikate. Ako
obje strane imaju certifikate potpisane od strane istog CA-a, svaka strana će provjeriti

462/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

digitalni potpis na certifikatu i tako se uvjeriti da je on valjan. Budući da strane vjeruju tom
CA, vjerovat će i certifikatu kojeg je ono potpisalo.

Slika 1.8. X.509 certifikat

3.3.1 X.500

X.509 certifikati koriste X.500 kreiranje jedinstvenih imena (engl. Distinguished


Naming - DN) samo za identifikaciju korisnika i izdavača. Informacija pohranjena u X.500
imeniku se sastoji od više unosa. Svaka stavka je pridružena osobi, organizaciji ili ureñaju
koji ima jedinstveno ime (DN). Stavka za pojedinog korisnika može sadržavati ime, prezime,
e-mail, telefonski broj,... Svi X.500 unosi imaju jedinstvenu strukturu imenovanja koja se
zove DIT (engl. Directory Information Tree).

3.4. Uspostava povjerenja

Ako nam osoba koja nam je poslala poruku nemože potvrditi da je to ona sama
napisala, onda mi moramo vjerovati nekome drugome da je poruka istinita. O tome nam
govori uspostava povjerenja meñu korisnicima. Imamo nekakav CA i njemu možemo
vjerovati do neke granice broja korisnika , a kada prijeñemo taj neki broj, moramo imati
drugačiji način validacije i zbog toga CA ima pravo praviti nešto što se zove META-
INTRODUCER (nova strana kojoj vjerujemo i ona nam predstavlja novi CA). Prvi puta
korišteno je u PGP. META-INTRODUCER nemaju sva prava kao CA i nemogu stvarati nove
META-INTRODUCER-e. U X.509 okruženju oni se zovu root CA.

463/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

Postoje tri različita modela uspostave povjerenja, a to su:


 Direktni model,
 Hijerarhijski model i
 Mrežni model.

Direktni model je najjednostavniji model, jer točno znamo od koje osobe smo dobili ključ,
kao što je i prikazano na slici 1.9.

Slika 1.9. Direktni model

Kod hijerarhijskog modela kao što je i prikazano na slici 1.10. svi vjeruju serveru koji
imenuje svoje pomoćnike. Odnosno kod ovoga modela važno je povjerenje u server.

Slika 1.10. Hijerarhijski model

Mrežni model koristi oba opisana načina, s mogučnošću da korisnik odabere kome će
vjerovati.

464/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

3.5. PKI u Republici Hrvatskoj

Infrastrukturu javnoga ključa u RH obavlja FINA PKI. Ta je tvrtka Nacionalni CA za


Republiku Hrvatsku (NCARH).

NCARH provodi sljedeće funkcije:


 Generiranje vlastitih ključeva uporabom sigurnih programa;
 Izdavanje samopotpisujućeg certifikata;
 Publiciranje NCARH certifikata u NCARH X.500 imeniku;
 Osiguranje pristupa pouzdanim stranama:
1. informacijama o certifikatima objavljenim u NCARH X.500 imeniku;
2. javnim ključevima vezanim uz operativne certifikata koji se nalaze u
NCARH X.500 imeniku;
 Provoñenje svojih operacija na učinkovit i pouzdan način i u skladu sa NCARH
certifikacijskom politikom (engl. Certification Policy – CP);
 Izdavanje unakrsnih certifikata (engl.cross-certificate) glavnim CA-ima u skladu s
registracijskim procesima opisanim u NCARH CP-u;
 Objavljivanje izdanih certifikata u NCARH X.500 imeniku;
 Opoziv certifikata u skladu s procesima opoziva opisanim u NCARH CP-u;
 Evidentiranje svih detalja o opozvanim certifikatim u CRL-u u NCARH X.500
imeniku;
 Provoñenje redovite revizije unutarnje sigurnosti;
 Provoñenje revizije usklañenosti glavnih CA-a pri obnavljanju certifikata.

Davatelji usluga u FINA PKI-u su:

 Centar za upravljanje sigurnosnom politikom


 Certifikacijski centar (CA)
 Registracijski centar
 Repozitorij
 Arhiva

465/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

4. GnuPG PROGRAM

4.1. Što je GnuPG

GnuPG (GNU Privacy Guard) ili GPG je program koji je nastao kao open source
alternativa PGP alatu. GPG ne koristi algoritme koji podliježu bilo kakvim softverskim
patentima. Program podliježe GPL licenci, pa ga je moguće slobodno koristiti, kopirati,
modificirati i distriburirati. Instalacijski paket se može pronači na adresi
http://www.gnupg.org, osnovna verzija programa pokreče se iz konzole, ali postoje i grafička
sučelja koja olakšavaju korištenje programa. Najpoznatija verzija programa s grafičkim
sučeljem za Windows operacijski sustav je WinPT ( Windows Privacy Tools), taj programa
takoñer podliježe GPL licenci.

4.2. Rad s GnuPG programom

U ovome poglavlju biti će kratko opisan rad s GnuPG programom na Linux


operacijskom sustavu. Prvi korak koji trebamo učiniti je da trebamo generirati par ključeva
koji će se koristiti kod asimetrične enkripcije. U GnuPG alatu to se radi pomoću naredbe:
#gpg --gen-key
Nakon ovoga postupka pojavi se izbornik u kojemu trebamo izabrati parametre za generiranje
ključa, takoñer trebamo upisati e-mail, ime, izabrati algoritam pomoću kojega ćemo izvršiti
asimetričnu enkripciju, veličinu ključa, itd. Kada smo to sve popunili pomoću slučajnih
vrijednosti generira se ključ. Generirani ključ se može ispisati naredbom:
# gpg --armor --export
armor – odreñuje dali će ključ biti zapisan u tekstualnom ili binarnom formatu.

Ako želimo provjeriti autentičnost ključeva to možemo izvršiti s naredbom:


# gpg –fingerprint

Šifriranje datoteke radi se s naredbom:


# gpg --recipient[primatelj] --armor --encrypt[naziv_datoteke]
Izlaz ove naredbe biti će nova datoteka s nastavkom .asc (naziv_datoteke.asc), da u naredbi
nismo stavili opciju armor izlaz bi bio binarna daoteka. Da bi se naredba izvršila moramo u
bazi imati javni ključ osobe kojoj želimo poslati datoteku.

--------BEGIN----------

GHSDbdcdb/ddb343brhjchjjdjcd57534vHBHB55r5++4er477edenbcoadchdGGjjHlGjdjd8377
530++ldidfi/7dvGFgjsbmcj77efde908reskmcddfvfvn++++dd+gpbfrfgKJjfdnVTGCRDUYXC
VBSDFGBBVCAsxfdsgc93872137/77u

--------END------------

1.11. Primjer šifrirane datoteke:

466/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

Dešifriranje datoteke vrši se pomoću naredbe:


# gpg --decrypt[naziv_datoteke]

Dešifrirana poruka će biti ispisana na standardni izlaz, a to je ekran, a možemo poruku


spremiti i u datoteku preusmjeravanjem standarnog izlaza.

Potpisivanje poruke radimo s naredbom:


# gpg --sign [naziv_datoteke]
Nakon ovoga datoteka se s potpisom sprema u novu datoteku s ekstenzijom .gpg.

Autentičnost digitalnog potpisa provjeravamo s naredbom:


# gpg --verify [naziv_datoteke]

Da bi skratili pisanje naredbi u konzoli, šifriranje poruke i digitalno potpisivanje možemo


izvesti s jednom naredbom:
#gpg --encrypt --sign [naziv_datoteke]

467/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb PGP i CA authority

5. REFERENCE

Literatura s Interneta

http://www.pgp.net

http://www.its.caltech.edu/its/security/users/pgp.shtml

http://www.pgpi.org/doc

http://www.pgpi.org/doc/pgpintro

http://www.gnupg.org

www.fina.hr

http://pks.carnet.hr

www.carnet.hr

PKI diplomsli rad, Ivica Katić

468/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

Franjo Grgec
Ivan Manić

KERBEROS
SUSTAV ZA AUTENTIFIKACIJU I AUTORIZACIJU

469/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

1. UVOD

Razvojem mreža i distribuiranih računalnih sustava, korisnici i administratori počeli su


se suočavati s raznim opasnostima specifičnim za takve sustave. Da bi se onemogućili napadi
ili im se barem smanjio broj, razvijeni su sustavi koji nude usluge autentifikacije
(authentication), autorizacije (authorization) i baratanja podacima vezanim uz korisničke
račune (accounting).

Naslov sugrerira da je u ovom radu riječ o “sigurnim” metodama autentifikacije, u


smislu oslanjanja na (složene) razmjene poruka i korištenje kriptografije. One su
suprotstavljene metodama koje se uvjetno mogu nazvati “nesigurnim” ili nedovoljno sigurnim
za umrežene sustave, kao što je npr. par korisničko ime-lozinka koji se prenosi kroz mrežu u
jasnom tekstu (nelriptiran).

Jedan od prvih takvih sustava bio je Kerberos. Razvijen na MIT-u sredinom


osamdesetih godina ovog stoljeća, poslužio je kao uzor za velik broj sličnih sustava.

Europska sigurnosna arhitektura kompatibilna s Kerberosom nazvana SESAME, sustavi koji


omogućuju indirektnu suradnju autentifikacijskih usluga i aplikacija (poput autentifikacije
zasnovane na modulima – PAM), te rješenja koja se mogu nazvati alternativom, odnosno
konkurencijom Kerberosu (Sun SecureRPC, vatrozidovi, SSL itd).

470/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

2 MREŽNA OKOLINA I NJENI NEDOSTACI


2.1 Opasnost, nesigurnost i prijetnje u mrežnoj okolini
Prijetnja se definira kao okolnost (circumstance), stanje (condition) ili dogañaj (event)
koji može naškoditi osoblju ili mrežnim resursima u obliku uništavanja (destruction),
razotkrivanja (disclosure) ili modifikacije podataka, uskrate usluge (denial of service),
prijevare (fraud) i zlouporabe (abuse)

U otvorenom računalnom mrežnom okruženju, radne stanice ne mogu biti pouzdane kod
prezentiranja identiteta svojih korisnika mrežnim uslugama. Većina lokalnih mreža (LAN)
zasnovana je na Ethernetu, koji prenosi informacije izmeñu računala u blokovima znakova
zvanim paketi. Svaki paket ima u zaglavlju adresu primatelja i pošiljatelja. Kako su ti sustavi
su bazirani na “pristojnosti” i “dobrim namjerama”, nitko ne bi smio mijenjati adrese ili
sadržaj paketa niti krivotvoriti svoj identitet. U prošlosti, kad su mreže bile u nastanku, tvorila
su ih prvenstveno velika UNIX računala. Nije bilo lako fizički priključiti vlastita računala na
mrežu. Nitko osim administratora sustava nije imao ovlaštenja za predstavljanje pod drugim
imenom ili prisluškivanje paketa. No, u osamdesetim godinama radne stanice su postale
široko dostupne i počelo se s masovnijim umrežavanjem. Osnovne pretpostavke o povjerenju
postale su upitne. To naročito dolazi do izražaja u lokalnim mrežama, gdje su računala
priključena na isti fizički vod te nema zapreka da bilo koji paket bude pročitan od bilo kojeg
računala u lokalnoj mreži

Posljedica navedenog je nemogućnost da primatelj bude siguran tko je poslao primljeni


paket, te su umreženi sustavi ugroženi na više načina:

• prisluškivanjem (eavesdropping attack) – napadač može čitati pakete koji su


namjenjeni nekom drugom računalu te na taj način doći do osjetljivih informacija

• lažnim predstavljanjem – napadač konfigurira računalo da se ono pretvara da je neko


drugo i na taj način vara druga računala koja mu “vjeruju” ili se pak predstavlja kao neki
korisnik (npr. provalivši na njegov korisnički račun)

• modifikacijom paketa (packet modification) – paketi namijenjenu nekom drugom


sustavu se presreću i njihov sadržaj se mijenja, ponekad se i uništavaju

• ponovnim odašiljanjem snimljenih starih paketa (packet replay) – komunikacija se


prisluškuje, odaslani paketi se snime i upotrijebe kasnije; vrlo ozbiljna prijetnja u slučaju kad
aplikacije razmjenjuju autentifikacijske poruke, jer napadač može odašiljanjem ispravnih, ali
starih paketa s ispravnih autentifikacijskim porukama dobiti pristup sustavu ili nekim
njegovim resursima

Za ilusutraciju i lakše razumijevanje može poslužiti nekoliko primjera. Prvi neka bude
klasičan klijent-poslužitelj protokol: telnet. Kad se netko telnetom prijavljuje za rad na
udaljenom računalu, šalje svoje korisničko ime i lozinku. Oboje se prenosi kroz lokalnu
mrežu kao i bilo koji drugi paket, tako da ga bilo koje drugo računalo može (u zloj namjeri)
pročitati. U principu, prijenos paketa preko čitave mreže ne smeta računalima, jer ih računala

471/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

ignorira ako nisu namijenjeni njima. Problem je u tome što se sučelja lokalnih mreža mogu
vrlo lako preprogramirati da čitaju svaki paket. Svi takavi programi nisu stvoreni niti
pokrenuti s lošim namjerama, jer analizatori mreža rade na taj način. Opasnost leži u tome što
se takvi programi mogu zlouporabiti za prisluškivanje mrežnog prometa bez znanja (a
moguće i na štetu) ostalih korisnika.

Za ovakvo nešto napadač mora imati privilegije administratora, što je bila glavna
zapreka i zaštita u počecima mreža. No danas je relativno je lako prigrabiti te privilegije na
nekoj od mnogobrojnih radnih stanica ili se ilegalno priključiti na sam fizički vod (vampirski
priključak, vampire transceiver).

Skup “r” (remote) naredbi (rlogin, rsh i rcp) je još jedan primjer slabe točke u
mrežnoj sigurnosti, proizašle iz dobre namjere. Program rlogin prijavljuje korisnika na
udaljeno računalo, rsh (remote shell) se spaja na udaljeni sustav i izvršava specificiranu
naredbu, a rcp kopira datoteke izmeñu sustava. Tvorci su željeli korisnicima olakšati
snalaženje u svijetu velikih domaćinskih računala (hosts), omogućujući im da se s nekih
računala prijave rad na drugim, udaljenim računalima (remote hosts) bez lozinke. Ta udaljena
računala nazvana su pouzdanim domaćinskim računalima (trusted hosts). Bilo koje računalo
na kojem korisnik ima korisnički račun (account) s istim korisničkim imenom može se
proglasiti pouzdanim domaćinskim računalom (trusted host) navoñenjem u datoteci
.rhosts. Korisnik može imati takvu datoteku na bilo kojem računalu na kojem ima
korisnički račun. Na taj način željelo se olakšati rad time što se lozinka traži samo kod prijave
na neko od tih računala i omogućuje automatska prijava za rad na bilo kojem pouzdanom
domaćinu. Korisnik ne gubi vrijeme upisujući lozinke kad se poželi prijaviti na neko drugo
računalo. Dovoljno je znati lozinku na jednom od računala, umjesto pamtiti sve lozinke.
Logika kojom su se autori rukovodili bila je: ako znaš lozinku, ti si autentificiran; računala u
.rhosts datoteci vjeruju jedno drugom polazeći od principa da nitko od njih ne može biti
kompromitiran; ako te jedno računalo autentificiralo, ostala mogu vjerovati njegovoj izjavi.
Ako napadač uspije prikriti svoj originalni identitet i predstaviti se kao netko drugi, omogućen
mu je nesmetan i lak pristup sustavu jer mu ovaj “vjeruje”.

No ovaj pristup ima i svojih (uvjetno rečeno) pozitivnih strana: kako se ne zahtjeva
lozinka za pristup, ona se ne može saznati prisluškivanjem. Ali taj princip upravo je i glavni
problem: ne može se vjerovati radnom računalu (host) ni korisnicima na njemu.

Programi rexec i rexecd omogućuju udaljeno izvršavanje (remote execution). Za


razliku od “r” komandi, ne koristi se mehanizam pouzdanih domaćinskih računala (trusted
hosts). Klijent šalje poruku u jasnom (nekriptiranom) tekstu koja sadržava korisničko ime,
lozinku i naredbu koja se treba izvršiti. Zlonamjernik treba samo pročitati nezaštićene podatke
iz paketa.

Neke od slijedećih postavki mogu smanjiti rizike :

• ograničiti pristup – da bi se zaštitili od prisluškivanja, ne smije se dopustiti napadaču


da uopće dobije pristup mreži (zaključavanje opreme u ormare u posebnim sobama,
onemogućiti pristup s priključaka koji se inače ne koriste itd)

• ograničiti fizičku dostupnost mrežnog voda radi zaštite od ilegalnih fizičkih priključaka

472/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

• ako je moguće, uporabiti optička vlakna – teže je priključiti se na njih

• uporaba enkripcije – ako napadač ne poznaje sustav enkripcije niti ključ, praktično mu
je nemoguće razumjeti ono što prisluškuje ili slati krivotvorene pakete

• uporaba podmreža – svaka s vlastitim domenama i poslužiteljima, s ograničenim


dijeljenim resursima i sl. (da bi se smanjila opasnost ukoliko bude provaljeno na neko od
računala)

2.2 Autentifikacija u distribuiranim sustavima


Od suvremenog mrežnog okružja danas se zahtjeva da kontrolira pristup samoj mreži,
da kontrolira pristup resursima i uslugama koje pruža mreža i da može provjeriti pružaju li
mehanizmi za kontrolu tih pristupa odgovarajuću zaštitu .

U mrežnom okružju može se govoriti o tri vrste pristupa ili prijava za rad. Prva je
lokalna prijava. Korisnik se autentificira lokalnom sustavu (zvanom klijent), najčešće
lozinkom. Druga je prijava na udaljeni sustav (remote login): korisnik se s lokalnog sustava
prijavljuje na udaljeni, npr. telnetom. Treća vrsta pristupa koja zahtjeva autentifikaciju je
klijent/poslužitelj zahtjev.

Provjera korisnikovog identiteta pomoću lozinke, uobičajena u tradicionalnim


računalnim sustavima, pokazala se neprikladnom za mrežno okruženje. Lozinka se može lako
saznati prisluškivanjem. Time nije zadovoljena osnovna pretpostavka da samo korisnik zna
svoju lozinku. Korištenjem autentifikacijskih protokola implementiranih kao usluge u
računalnoj mreži, može se eliminirati veliki broj potencijalnih sigurnosnih rupa.

Protokol se može definirati kao precizno odreñen slijed koraka u komunikaciji i


proračunavanju, a sastoji se od komunikacijskih i izračunskih koraka. Komunikacijski korak
prenosi poruke od jednog principala (pošiljatelj) do drugog principala (primatelj). Izračunski
korak (computation step) osvježava ili nadopunjava (updates) unutarnje stanje principala.
Komunikacijski korak je npr. “korisnik šalje ime poslužitelju”, a izračunski “poslužitelj treba
izračunati nešto iz lozinke”. Prilikom završetka mogu se identificirati dva različita stanja:
jedno koje predstavlja uspješnu autentifikaciju i drugo koje predstavlja neuspjeh .

Principali su sustavi koji se koriste da se autentificira korisnik poslužitelju ili usluzi.


Svaki sustav definira neki skup principala. Neki od najčešćih su:

• korisničko ime (username)– identitet korisnika

• ime domaćinskog računala (hostname) – identitet domaćinskog računala (host)

• klijent (client) – računalo koje zahtjeva uslugu od nekog radnog (domaćinskog)


računala u ime korisnika

• poslužitelj (server)– domaćinsko računalo koje pruža usluge

473/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

U distribuiranim sustavima u mreži mora postojati dio s informacijama koje se koriste za


autentifikaciju korisnika. To može biti poseban poslužitelj, obično nazvan autentifikacijski
poslužitelj ili poslužitelj za dodjelu ključeva – key distribution server . On sadržava bazu
podataka u kojoj su pohranjeni javni, privatni ili tajni ključevi korisnika, klijenata i
poslužitelja. Oni moraju vjerovati da su informacije koje dobivaju iz te baze istinite, tj. takav
poslužitelj je pouzdana treća strana (trusted third party). Tajni podaci (poput ključeva i
lozinki) se privremeno pohranjuju u nekom dijelu računala (klijenta, poslužitelja ili oba), što
znači da moraju postojati mehanizmi za njihovu zaštitu.

Autentifikacijski sustavi u distribuiranim okolinama temelje se na uporabi kriptografskih


tehnika da bi se napadačima dalo malo ili nimalo informacija koje bi oni mogli zlouoprabiti.
Informacije koje se koriste za autentificiranje principala imaju oblik ulaznica ili certifikata.
Ulaznice same po sebi ne potvrñuju autentifikaciju. Udružujući ih s nekim oblikom
autentifikatora (autheticator) potvrñuje se identitet dajući vremensku referencu uporabe, tj.
vremenski okvir ili okno (time-frame) unutar kojeg su valjane. Ulaznice istječu (tj. postaju
nevaljane) da bi se spriječila uporaba prije ili poslije željenog vremena. Ona može biti
zlouporabljena od napadača samo unutar vremena svoje valjanosti. Kreira ih pouzdan
(trusted) principal.

U ulaznicama se obično pojavljuje:

• lozinka principala

• javni ključ principala, poznat svima

• privatni ključ, poznat samo korisniku, čini par s javnim ključem

• tajni ključ, dijeljen izmeñu dva principala, s relativno dugim vremenom valjanosti

• konverzacijski (conversion) ključ, obično ograničen na duljinu trajanja sjednice


(session) ili valjan odreñen broj sati, dijeljen izmeñu dva principala

2.2.1 Autentifikacija
Autentifikacija je proces verificiranja identiteta sudionika koji je generirao neke podatke
i integriteta podataka. Principal (principal) je strana čiji se identitet utvrñuje, a verifikator
(verifier) je strana koja zahtjeva jamstvo o principalovom identitetu. Integritet podataka je
jamstvo da su primljeni isti podaci koji su generirani.

Autentifikacijski mehanizmi razlikuju se u jamstvima koja pružaju: neki potvñuju da je


podatke generirao principal u nekom trenutku u prošlosti, neki da je principal bio nazočan kad
su podaci bili poslani. Mehanizmi se razlikuju i u broju verifikatora: neki podržavaju jednog
verifikatora po poruci, neki višestruke verifikatore. Treća razlika je da li mehanizmi
podržavaju nerazdvajanje (non-repudiation), mogućnost verifikatora da dokaže trećoj strani
da je poruku proizveo s principalom .

Budući da ove razlike djeluju na performanse, važno je razumjeti zahtjeve aplikacije


kod izbora metode.

474/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

Najkonvencijalniji višekorisnički sustavi traže da se korisnik identificira prije nego


koristi usluge. U okruženju koje se sastoji od mreže koja povezuje klijente s uslugama,
mrežna usluga ima odgovarajuću potrebu za identificiranjem i autentificiranjem korisnika. Za
razliku od višekorisničkih sustava, gdje zaštitni zid razdvaja operacijski sustav od korisnika,
radna stanica je potpuno pod kontrolom korisnika. On može modificirati njen operacijski
sustav ili čak zamijeniti samo računalo. To rezultira nemogućnošću oslanjanja mrežne usluge
na operacijski sustav radne stanice kad ona obavlja autentifikaciju.

Povjerljivost ili zaštita tajnosti (confidentiality) je zaštita informacije od razotkrivanja


subjektima kojima ta informacija nije namjenjena. Većina jakih autentifikacijskih metoda
opcionalno nude i povjerljivost.

Tri su glavna tipa autentifikacije u distribuiranim sustavima :

• autentifikacija sadržaja poruke (message content) – moguće je provjeriti da li je


primljena poruka uistinu ona koja je poslana; postiže se kriptografskim sumiranjem sadržaja
(cryptographic checksum) zvanim MAC (Message Authentication Code) ili korištenjem
digitalnog potpisa pomoću javnog ključa (public-key digital signature)

• autentifikacija porijekla poruke (message origin) – može se utvrditi da je stvarni


pošiljatelj onaj za kojeg se u poruci tvrdi da je pošiljatelj, npr. uporabom simetričnog
kriptosustava (zahtjeva treću stranu kojoj oba sudionika vjeruju); u asimetričnom
kriptosustavu uporaba javnog ključa ili digitalnog potpisa dokazuje porijeklo

• autentifikacija općenitog identiteta (general identitiy) – može se utvrditi da je identitet


principala onaj koji se tvrdi

Autentifikacija nije nešto što je samo sebi svrha, nego vrsta alata, a osnovna joj je
namjena zaštita od lažnih zahtjeva za vezom.

2.2.2 Autorizacija
Autorizacija je proces kojim se utvrñuje da li principal ima dozvolu za izvoñenje neke
operacije. Obično se provodi nakon što je principal autentificiran te se može temeljiti na
informacijama koje su lokalne za verifikatora ili na autentificiranim iskazima drugih.

Kerberos autentifikacijski model daje samo potvrdu identiteta klijenta koji zahtjeva
uslugu. Sam po sebi ne daje nikakve informacije da li je klijent autoriziran, da li ima dozvolu
koristiti tu uslugu.Tri su forme u kojima bi se autorizacija mogla integrirati u Kerberos model:

• Kerberos baza podataka – mogla bi sadržavati autorizacijske informacije za svaku


uslugu; ulaznice za uslugu dodjeljuju se autoriziranim korisnicima te usluge

• posebna autorizacijska usluga (separate authorization service) – održava se


autorizacijska lista informacija za svaku uslugu i dozvoljava se klijentu da pribavi
zapečaćeni (sealed) certifikat; krajnjoj usluzi bi se pokazao taj certifikat

475/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

• svaka usluga bi mogla održavati vlastite autorizacijske informacije – uz opcionalnu


pomoć usluge koja sprema dijeljene javne liste i pribavlja certifikate o članstvu u javnoj
listi

Prva opcija stavlja veliku, dinamički nadopunjavanu bazu podataka nasuprot maloj,
rijetko mijenjanoj, koja sadrži dobro čuvanu bazu enkripcijskih ključeva. Ovo rješenje
zahtjeva kompromis izmeñu operacijskih parametara (npr. veličina memorije) i fizičke
sigurnosti. Primjenjujući ju, sve aplikacije mogu koristiti jedan model autorizacije.

Drugo rješenje odjeljuje autorizacijsku bazu podataka od autentifikacijske, te se time


olakšava odvojena administracija. Rezultat je jednostavnija i manja autentifikacijska usluga,
što bi ju trebalo učiniti pouzdanijom i sigurnijom. Posljedica je izvanredna kompleksnost (i
time moguća krhkost) protokola u interakciji izmeñu klijenta i usluga (autentifikacijskih,
autorizacijskih i ciljnih).

Kerberos autorizacijski model baziran je na principu da svaka usluga najbolje zna tko bi
trebali biti njeni korisnici i koji bi oblici autorizacije bili prikladni.

476/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

3. KERBEROS KAO MREŽNA USLUGA


Kerberos je mrežni autentifikacijski sustav koji se koristi u fizički nesigurnim mrežama.
On je treća strana kojoj oba sudionika u “razgovoru” vjeruju i on potvrñuje identitet svakog
od njih. Dokazivanjem identiteta sprečava se prisluškivanje i napad ponovnim korištenjem
starih paketa (replay attack). Ne oslanja se ni na autentifikaciju koju nudi operacijski sustav
na radnom računalu (host), niti na mrežnu adresu.

Kerberos je sustav koji traži unos lozinke samo jednom (single sign-on), na početku
sjednice (session). Ona se ne prenosi preko mreže nego se klijentskom računalu prepušta
manipuliranje lozinkom. Osjetljivi (tajni) podaci se mrežom prenose kriptirani. Za dekripciju
je potrebno znanje lozinke tog korisnika, jer se njegov tajni ključ izračunava iz lozinke.

Kerberos je razvijen s ciljem da se omogući mrežnim aplikacijama siguran način


identifikacije. Proces započinje klijent, odnosno u Kerberos terminologiji principal. On
pokreće razmjenu poruka izmeñu triju strana da bi se kontaktirana strana (poslužitelj) uvjerila
u klijentov identitet. Ta potvrda identiteta ima oblik ulaznice, koja identificira klijenta, i
autentifikatora (autenticator), koji služi da se ulaznica validira i spriječi ponovna uporaba
stare ulaznice (replay) od strane napadača. Ulaznica je valjana samo u odgovarajućem
intervalu, zvanom razdoblje valjanosti (lifetime). Kad razdoblje valjanosti istekne, ulaznica
istječe (postaje nevaljana). Ukoliko se žele daljnje usluge, treba zatražiti novu ulaznicu.
Valjana ulaznica može se koristiti (svaki put uz svježi autentifikator) proizvoljan broj puta,
sve dok ne istekne (postane nevaljana).

Polazna točka je pretpostavka da svaki paket koji putuje kroz mrežu može biti pročitan,
modificiran ili ubačen po volji. Kerberos dopušta procesu koji radi u ime principala da dokaže
svoj identitet verifikatoru (nekom poslužitelju) bez slanja podataka koji bi dozvolili napadaču
ili verifikatoru da se kasnije pretvara da je principal . Takoñer, podacima je osiguran integritet
toka (detekcija modifikacije) i tajnost (osiguranje od neautoriziranog čitanja) uporabom
kriptografskih metoda . Treba primjetiti da Kerberos štiti samo lozinke i druge povjerljive
informacije, a ne sve podatke koji prolaze kroz mrežu. Tako će npr. Kerberos verzija FTP-a
kriptirati korisničko ime i lozinku, ali ne i sadržaj datoteka koje se prenose.

Rad je zasnovan na opskrbljivanju principala (klijenata ili usluga) ulaznicama i tajnim


kriptografskim ključevima za sigurnu komunikaciju. Ulaznice se koriste da se principali
identificiraju drugim principalima. Korištenjem serije kriptiranih poruka verifikatoru se
dokazuje da klijent radi u korist odreñenog korisnika. Glavni cilj je podrška i jednosmjerne
(one-way) i uzajamne (mutual) autentifikacije principala

Uzajamna autentifikacija i sigurna komunikacija izmeñu principala u otvorenoj mreži


provodi se tako da Kerberos proizvodi tajne ključeve za podnositelje zahtjeva i osigurava
mehanizam sigurnog prosljeñivanja tih ključeva kroz mrežu. Sam po sebi ne ne osigurava
autorizaciju ni manipuliranje korisničkim računima (accounting). Ti su aspekti bili u
početnom planu jednako važni kao i autentifikacija, no u daljnjim planovima su postali
pomalo zanemareni

Da bi se mogle iskoristiti pogodnosti i sigurnost koju Kerberos pruža, aplikacije se


trebaju zamjeniti “kerberiziranim” verzijama, tj. verzijama koje razumiju i surañuju u

477/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

Kerberos protokolu. Distribucije Kerberosa donose kerberizirane verzije najpopularnijih


aplikacija, kao što su rlogin, telnet, ftp itd.

Kerberos nudi različite nivoe zaštite, dopuštajući aplikacijskom programeru da odabere


onaj koji smatra prikladnim u odnosu na zahtjeve aplikacije. Neke aplikacije traže da se
autentičnost provjeri samo na početku i smatraju da daljnje poruke s te adrese dolaze od
autentificirane strane (npr. to radi mrežni datotečni sustav u MIT mreži). Druge aplikacije pak
zahtjevaju autentifikaciju svake poruke, ne mareći da li je poruka razotkrivena ili ne. Za njih
Kerberos nudi “sigurne poruke” (safe messages, KRB_SAFE). Najviši nivo predstavljaju
“privatne poruke” (private messages, KRB_PRIV), gdje je svaka poruka i autentificirana i
kriptirana. Koriste se npr. za slanje lozinki preko mreže .

Kerberos poslužitelj bavi se samo visoko osjetljivim informacijama, poput lozinki,


ključeva i sl. Informacijama koje nisu osjetljive u smislu sigurnosti (prava imena, telefon itd.)
bavi se drugi poslužitelj, Hesiod poslužitelj. Informacije s tog poslužitelja mogu se
nekriptirane slati preko mreže (npr. finger programom želi se saznati ime nekog korisnika
ili njegov broj telefona).

Važno je napomenuti da Kerberos pretpostavlja da se komunikacija odvija izmeñu


pouzdanih računala i nepouzdane mreže. Ako je računalo nepouzdano (npr. operacijski sustav
modificiran), Kerberos je bespomoćan. Ako napadač ukrade lozinku, može oponašati tog
korisnika jer je lozinka temeljni dokaz identiteta korisnika u Kerberosu. Ako je sigurnost
Kerberos poslužitelja ugrožena, cijelo područje (realm) kojem taj poslužitelj pruža usluge je
ugroženo.

Praktički gledano, Kerberos se uglavnom koristi u protokolima aplikacijskog sloja (ISO


OSI referentni model, sloj 7), npr. telnet ili FTP, da bi se osigurala sigurnost korisnika i
računala. Rjeñe se koristi kao implicitni autentifikacijski sustav toka podataka ili RPC
mehanizam (ISO OSI model sloj 6). Takoñer, može biti korišten i u nižim slojevima za
sigurnost izmeñu čvorova, u protokolima poput IP-a, UDP-a ili TCP-a (ISO OSI model
slojevi 3 i 4), iako su te implementacije jako rijetke .

Kako mnogi “glupi” terminali i većina X-terminala ne razumiju Kerberos protokol,


njihovi kabelski spojevi ostaju neosigurani i podložni napadima.

478/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

4. KERBEROS PROTOKOL
Kerberos je dizajniran na principu distribucije ključeva koji su razvili Needhan i
Schroeder. Ključ je baza autenifikacije, koristi se za enkripciju i dekripciju poruka. Time se
eliminira potreba za dokazivanjem posjedovanja osjetljivih informacija samim njihovim
otkrivanjem. Da bi se neki subjekt autentificirao Kerberosu, jedna od dvije stvari se treba
dogoditi :

1. korisnik treba u nekom trenutku unijeti tajni podatak


2. tajni podatak treba biti pohranjena negdje u računalu
Usluga za Kerberos V4 je dostupna na UDP portu 750. Za V5 usluga je dostupna na portu
88, a administracija na 749.

479/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

5. KERBEROS BAZA PODATAKA


Baza podataka unutar Kerberos poslužitelja ima slogove za svakog principala (svaki
korisnik i usluga) poznatog unutar tog područja (realm). U bazi su pohranjene slijedeće
informacije:

• principalski identifikator (principal identifier), uključujući instancu identifikatora


(instance identifier)

• principalov tajni ključ (lozinka)

• datum istjecanja

• datum zadnje promjene sloga

• identitet principala koji je zadnji mijenjao slog

• maksimalno razdoblje valjanosti ulaznica (lifetime) koje se dodjeljuju dotičnom


principalu

• atributi

• implementacijski podaci, nevidljivi izvana: verzija ključa (key version) i verzija glavnog
ključa (master key version), te pokazivač na stare vrijednosti tog sloga; različiti ključevi mogu
biti povezani s istim principalom, pa se svakom ključu pridružuje verzija

Tajni ključ mora ostati tajan. Ta se polja u bazi reverzno kriptiraju (reversibly encipher)
glavnim ključem (master key) autentifikacijskog poslužitelja. Tako kriptirani ključevi mogu
se mrežom poslati pomoćnim (slave) poslužiteljima, bez poduzimanja nekih rigoroznih mjera
zaštite prijenosa. Glavni ključ ne sprema se u bazi, nego se njime upravlja odvojeno.

Autentifikacijski poslužitelj može sebe autentificirati alatima za rad s bazom (kao što je
npr. kadmin) pomoću stash datoteke.

Kerberos bazu podataka za neko područje nadopunjuje i njome upravlja jedan KDBM
(Kerberos Database Management) poslužitelj. Autentifikacijske zahtjeve obrañuje jedan ili
više KKDS poslužitelja (Kerberos Key Distribution Server), svaki s identičnom kompletnom
kopijom Kerberos baze. Kako svi KKDS poslužitelji imaju iste podatke, bilo koji od njih
može obraditi bilo koji autentifikacijski zahtjev. Klijent može s liste KKDS poslužitelja
odabrati onaj koji mu je najbliži u smislu topologije mreže. Razdioba odgovornosti izmeñu
KDBM i KKDS poslužitelja ne znači da to moraju biti različita domaćinska računala (host) –
svi mogu raditi i na samo jednom računalu. Svrha razdiobe je pojednostavljenje
nadopunjavanja baze i poboljšanje performansi. Sve operacije KKDS poslužitelja u odnosu na
bazu svode se na čitanje (read-only), a KDBM služi da bi oni primili nadopune za svoje
kopije baze.

480/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

Prilikom kopiranja baze iz KDBM u KKDS poslužitelje, koristi se Kerberos uzajamni


(mutual) autentifikacijski protokol, te se razmjeni siguran enkripcijski ključ izmeñu KDBM i
dotičnog KKDS poslužitelja. Podaci se prenose običnim FTP protokolom, no nikakve lozinke
niti ikakvi osjetljivi podaci ne šalju se u čistom tekstu. Uporabom kontrolnog sumiranja
(checksum) zapečaćenog (sealed) sjedničkim ključem kontrolira se integritet podataka.
Integritet prenesenih podataka KKDS provjerava izračunavanjem kontrolne sume i
usporedbom dobivene s poslanom. Ako se slažu, tek tada se njegova baza nadopunjuje.

Iako se spremaju samo osnovni podaci (bez brojeva telefona ili sl.), baza može biti
prilično velika ukoliko je broj korisnika velik. Kerberos sučelje za upravljanje podacima u toj
bazi može se upotrijebiti na dva načina:

1. ručno, skupom alata s radne stanice administratora sustava (ako je broj korisnika u
području malen)
2. automatizirano, SMS sustavom (Service Management System) za veći broj korisnika
U oba slučaja održavanje se vrši preko mreže, koristeći autentificirane sigurne veze.

Dodavanje novog korisnika nije veliki problem ako se radi o malom broju novih
korisnika. Jednostavno se traži da potencijalni korisnik doñe do administratora s
dokumentima i administrator mu otvara korisnički račun. No ako je taj broj veći (npr. studenti
koji su tek upisali prvu godinu na sveučilištu), tad je takvo rješenje vrlo neprikladno. SMS
sustav nudi alternativno rješenje: automatiziranu prijavu.

Bit automatizirane prijave je da korisnik sam odabire principalski identifikator (principal


identifier) i pridruženu lozinku bez uključivanja administratora sustava u taj postupak. SMS
poslužitelj dobiva listu potencijalnih novih korisnika (novih studenata). Novi korisnik
prijavljuje se radnoj stanici kao neautentificirani korisnik, te stupa u interakciju s
registracijskim programom. Ta aplikacija uzima ime, identifikacijski broj, predloženi
principalski identifikator i lozinku, te se spaja s SMS poslužiteljem i provjerava slažu li se
dano ime i identifikacijski broj studenta (nešto pout PIN-a za bankomat karticu) s onim
unesenim u listu. Ako se slažu, SMS daje sjednički ključ za dodavanje novog korisnika.
Aplikacija otvara kriptiranu komunikacijsku vezu s Kerberos poslužiteljem da bi se dodao tog
principala u bazu. Kerberos poslužitelj provjerava da li se dotični principal već nalazi u bazi
korisnika. Ako ne, dodaje se i postupak uspješno završava.

Ovakav pristup ima i slabu stranu. Netko tko zna ime i studentski identifikacijski broj
nekog novog studenta može se prijaviti kao taj student i raditi pod njegovim imenom. No
sustav će registrirati pokušaj registriranja već registriranog principala te će odbaciti ponovnu
registaciju. To može biti znak da je netko izvršio prevaru. Pravi korisnik tada se javlja
administratoru koji može promijeniti lozinku u bazi.

Promjena lozinke moguća je samo uz početnu (initial) ulaznicu.

481/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

5.1 Pretvaranje UNIX baza lozinki korisnika u Kerberos


bazu.
Korisničke lozinke u UNIX sustavima obično se nalaze u datotekama /etc/passwd ili
/etc/shadow i kriptirane su funkcijom bez inverza. Za pretvaranje u Kerberos bazu treba
znati prave lozinke korisnika. Ključevi u Kerberos bazi rezultat su primjene druge funkcije na
korisnikovu lozinku.

Svatko bi se mogao upitati zašto se ne koristi ista funkcija i za jedno i za drugo.


Odgovor je da se rezultat funkcije u Kerberosu koristi kao ključ za kriptiranje osjetljivih
podataka koji se prenose izmeñu korisnika i Kerberos poslužitelja, umjesto da se od korisnika
traži da sami unesu taj ključ. Korisničkom lozinkom i dobivanjem ključa iz nje bave se
Kerberos klijenti, a ne Kerberos poslužitelj. Lozinka korisnika ne putuje mrežom te ju nitko
neće na taj način saznati. Problem je ipak što napadač koji ne mora znati lozinku nego je
dovoljno da zna ključ da bi se uspješno autentificirao kao korisnik. Zbog toga bi bilo jako loše
ako bi se koristile predvidljive vrijednosti, npr. onaj sadržaj u bazama podataka s lozinkama
korisnika računala prije konverzije. Kako svatko može vidjeti tu datoteku, ključ svakog
korisnika bio bi de facto javno objavljen!.

Rješenje postoji, no onako kako se intuitivno željelo. Treba postaviti registracijski


mehanizam koji dobiva korisnikovu UNIX lozinku kad on pokrene neku aplikaciju, te ju
usporeñuje s lozinkom spremljenom u datoteci na računalu na koje se korisnik prijavio. Ako
se slažu, program registrira tu lozinku kod Kerberos poslužitelja.

Problem koji se ovdje je nužnost autentificiranja registracijskog programa Kerberosu


kao administratora da bi program mogao registrirati korisnikovu lozinku. Ukoliko se to ne
dozvoljava, program mora biti u mogućnosti da se autentificira odvojenoj administratorskoj
registracijskoj usluzi.

482/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

6. SESAME (EUROPSKI KERBEROS ZA UNIX SUSATVE )


Dosadašnji sigurnosni mehanizmi u UNIX sustavima oslanjali su se na brojne
individualne aplikacije ograničene na jedno područje, npr. SSL za Internet preglednike
(browsers), PGP za poštu itd. Rezultat takvog pristupa bio je nedostatak suradnje meñu
aplikacijama, dupliciranje usluga, složena administracija i veća potencijalna ranjivost.

SESAME (A Secure European System in A Multivendor Environment) je sveobuhvatna


sigurnosna arhitektura, kompatibilna s Kerberosom (ali nije Kerberos), koja omogućuje
jednostranu ili uzajamnu autentifikaciju. Koristi kriptografske metode s javnim ili tajnim
ključevima, zaštitu podataka u komunikaciji, kontrolu pristupa zasnovanu na ulogama (role-
based access control), prosljeñivanje prava (rights delegation), višedomensku (multi-domain)
podršku i uslugu praćenja, odnosno kontrole (audit). Zbog svog sveobuhvatnog obujma
sigurnosnih usluga, SESAME je vrlo prikladno rješenje za osiguravanje praktično svih UNIX
aplikacija na uniforman način.Standardizacijski dio posla obavila je ECMA (European
Computer Manufacturers Association).

Projekt je nastao u prvoj polovici devedesetih godina zbog nepostojanja proizvoda sličnog
Kerberosu u Europi (jer Kerberos podliježe strogim američkim zakonima o izvozu
kriptotehnologije). U suradnji kompanija Bull, ICL i Siemens, uz djelomičnu potporu
Europske komisije, razvijen je sustav koji implementira protokole i za autentifikaciju i za
upravljanje kontrolom pristupa (management of access control).

Ova arhitektura kompatibilna je s Kerberosom u smislu da može posluživati Kerberos


principale. Namjena je bila učiniti SESAME javno dostupnim, no američke vlasti nisu htjele
dozvoliti ugradnju Kerberos koda u takav sustav (jer se Kerberos smatrao oružjem zbog
kriptografske zaštite). Zato su autori napisali svoju implementaciju dijelova koji pružaju
usluge Kerberos principalima.

Slika1.SESAME arhitektura

483/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

6.1 Kerberos i SESAME


Kerberos i SESAME sustav imaju puno zajedničog i nude slične usluge. Oba su
sigurnosni sustavi koji korisnicima omogućuju sigurno jednostruko (single sign-on)
prijavljivanje i korištenje usluga u mreži. Korisnici se autentificiraju davanjem lozinke, a
nakon toga dobivaju ulaznicu koju mogu iskorisiti za pristupanje poslužiteljima u mreži
(SESAME ulaznica još sadrži i prava pristupa). Oba sustava temeljena su na klijent-
poslužitelj modelu. Postoje autentifikacijski poslužitelj, poslužitelj za dodjelu ulaznica i
aplikacijski poslužitelji. Ti poslužitelji posjeduju tajne kriptografske ključeve koji im služe za
zaštitu vjerodajnica i autentifikacijskih podataka na putu kroz mrežu, što znači da korisnici
ne šalju lozinku kroz mrežu.

Mats Persson i Ulf Lindbergh su u sklopu jedne radionice s područja primjenjene


sigurnosti u mrežnim sustavima na sveučilištu u Linkopingu odlučili ispitati kompatibilnost
SESAME i Kerberos arhitekture.

Uporabili su besplatnu implementaciju Kerberosa 5 za Linux poznatu pod imenom


Heimdal. Kerberos ulaznicu za dodjelu ulaznica (TGT), koju su dobili od Kerberos
poslužitelja, poslali su SESAME poslužitelju za dodjelu ulaznica (KDS), a SESAME ulaznicu
su poslali Kerberos poslužitelju za dodjelu ulaznica (TGS).

Kao zaključak navode da “izgleda” da SESAME podržava Kerberos 5 protokol, te da


“vjerojatno” može obrañivati zahtjeve Kerberos aplikacija. Usto, zaključuju da SESAME
može vršiti autentifikaciju u Kerberos stilu. Smatraju da su sustavi “vjerojatno kompatibilni”
zbog toga što “podržavaju GSS API sučelje”.

Da se podsjetimo, autori SESAME sustava su od početka željeli kompatibilnost s


Kerberosom, tako da se mogu posluživati Kerberos klijenti. Sve ekstenzije su prilagoñene
korištenju unutar Kerberos implementacije, koja je predviñala da će neki sustavi unositi svoja
proširenja koje neće svi poslužitelji razumijeti. Zbog toga je implementacija Kerberos
poslužitelja napravljena tako da oni ignoriraju proširenja koja ne razumiju (u ovom slučaju
proširenja koja unosi SESAME poslužitelj). Persson i Lindbergh mogli su samo potvrditi
kompatibilnost SESAME arhitekture sa Kerebrosom u smislu sposobnosti pružanja usluge
Kerberos klijentima.

484/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

6.2 Linux verzija


Prenošenje SESAME arhitekture (originalno razvijene za AIX sustave) na Red Hat
Linux platformu.

Sigurnosni poslužitelj (DSS) uključuje KDS, AS i PAS poslužitelje, te kontrolnog


(audit) daemona. Aplikacijski poslužitelj (application server) ima PVF i kontrolog daemona,
te treba kontrolirati pristup aplikacijama. Aplikacijski klijenti (application clients) trebaju
imati samo kontrolnog (audit) daemona. DSS se može ponašati i kao aplikacijski poslužitelj,
a bilo koji aplikacijski poslužitelj može se ponašati i kao aplikacijski klijent.

SLIKA 2. SESAME domena

Implementiravši verzijom za Red Hat Linux, autori su sezamizirali NFS (Network File
System), XDM (X Display Manager), telnet, RPC (Remote Procedure Calls) i “r” komande
za dotičnu implementaciju.

Slika2. prikazuje komponente implementirane Linux domene. Sigurnosni poslužitelj sadrži


autentifikcijski poslužitelj (AS, za autentifikaciju korisnika), PAS poslužitelj (Privilege
Attribute Server, za opskrbljivanje korisnika vjerodajnicama), KDS poslužitelj (Key
Distribution Server, za generiranje sjedničkih ključeva i ulaznica koje koriste aplikacije), te
kontrolni poslužitelj (Audit Server, za prikupljanje kontrolnih informacija preko mreže).
Aplikacijski poslužitelji imaju vlastite PVF komponente (Privilege Verification Facility) koje
provjeravaju valjanost korisničkih vjerodajnica izdanih u obliku PAC (Privilege Attribute
Certificate) certifikata. Aplikacijski klijent (u ovom slučaju XDM) se autentificira
sigurnosnom poslužitelju i dobiva PAC certifikat. Slika takoñer pokazuje da se aplikacijski
poslužitelji mogu ponašati kao aplikacijski klijenti, dozvoljavajući korisnicima pristup
klijentskim komponentama dok su na istom računalu pokrenute poslužiteljske komponente.
Certificate Authority komponenta izrañuje certifikate, te ne bi smjela biti spojena na mrežu.

XDM je aplikacija koja omogućuje prijavu korisnika na računalo i uspostavu X Window


sjednice (session) s tim računalom. Sezamizirana verzija traži od korisnika unos korisničkog
imena i lozinke prilikom prijave (poput obične verzije) te izbor uloge (role) s koju korisnik
želi preuzeti nakon prijave. Korisnik se ne prijavljuje na lokalno računalo, nego na sigurnosni

485/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

poslužitelj. Ne autentificira ga XDM, nego SESAME. Ukoliko korisnik ima korisnički račun
na aplikacijskom klijentu i autentifikacija je pozitivna, korisnik je prijavljen na računalo.
Ukoliko ga nema, SESAME stvara privremeni račun i daje XDM programu PAC certifikat.
Taj certifikat koriste aplikacijski klijenti da bi autentificirali korisnika udaljenim
poslužiteljima. Certifikat se uništava prilikom odjave.

Klijentski program (telnet) šalje korisnikov PAC certifikat (umjesto lozinke)


poslužiteljskom programu (telnetd). Poslužiteljski program šalje potvrdu o primitku ukoliko
je certifikat prihvaćen, te svoje vjerodajnice ukoliko se traži uzajamna autentifikacija.

Slika 3. sezamizirani telnet

486/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Kerberos

7. ZAKLJUČAK
Autentifikacijski mehanizmi takoñer imaju svojih mana i ne štite od svih opasnosti u
mrežnom okružju, jer su dizajnirani s namjerom da se suprotstave samo odreñenim
opasnostima, usredotočuju se na odreñene aspekte. Prioriteti se mijenjaju s vremenom, nastaju
nove prijetnje i sustavi evoluiraju ili ih se odbacuje. Svaki nudi bolji rezultat u nekom
području od svih ostalih, no niti jedan nije savršen

487/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Cron i AT

Svjetlana Vedernjak

CRON I AT

488/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Cron i AT

1 CRON

1.1 Upoznavanje sa automatskim upravljanjem


Automatizacija prilikom rada sa bilo kojim operativnim sustavom je bitna jer ubrzava i
olakšava izvršavanje naredbi, rad sustava i omogućava bolju kontrolu nad izvoñenjem.
Sustav se održava na način da nema potrebe za zaustavljanjem sustava tijekom održavanja ili
izvršavanja nekoga rada nad sustavom. Cron i at nam omogućavaju automatizaciju naredbi ili
nekih funkcija, njih možemo pokrenuti automatski tako da im odredimo u koje vrijeme je
potrebno da se one pokrenu i izvrše.
Sustav zahtijeva održavanje npr.:

• Dnevno
o uklanjanje nekorištene ili nepotrebne core dokumente
o uklanjanje dokumenta ili direktorija koji se više ne koriste iz /tmp direktorija
o nadgledanja disk prostora u korisničkim home direktorijima
• Tjedno
o izvršavanje provjere na filesystemu
o provjeravanje dugih procesa koji se izvršavaju
o čišćenje dokumenata koji primaju log informacije
• Mjesečno
o izrada mjesečnih izvještaja
o lociranje velikih dokumenata koji se više ne koriste

Posao svakog sistem administratora ili programera Unixa je da održavaju sistem u


ispravnom radu, u tome im pomažu automatizirani procesi i automatizirane naredbe koje rade
posao provjere koji bi oni inače obavljali ručno. Programeri (administratori) kreiraju skripte
koje sustav može izvršiti u odreñeno vrijeme svakog tjedna, dana ili mjeseca. Ovisno o tome
što mu programer upiše. Automatizacija takoñer uključuje pojednostavljenje interaktivnih
zadataka tako što se mogu kreirati skripte ili programi. Zadaci koji se ponavljaju i koji su
komplicirani su dobri kandidati i za pojednostavljivanje i za automatizaciju.
Mnogi korisnici UNIX sustava imaju standardni proces logiranja za poruke, kojega
radi syslog daemon. Zato što skoro svi UNIX administratori smatraju da bi se trebalo
omogućiti održavanje logiranih podataka i resursa. Korisnici su najdinamičniji dio sustava

489/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Cron i AT

zato što su najveći uzrok svih promjena koji se na sustavu dogañaju. Okolina UNIX-a se treba
uskladiti sa načinom na koji korisnici koriste sustav.
Primjer može biti UNIX računalo koje podržava razvojnu okolinu (znači
programiranje u nekom programskom jeziku, C najčešće). Korisnici pišu i testiraju programe,
i najčešće rade velike greške zbog kojih se dokumenti povećavaju ili naprave program koji
„uznemiri“ računalo. Sistem administrator (programer) mora imati mogućnost za ispravljanje
„uznemiravanja“ prije nego oni sruše sustav ili postanu beskorisni. Sistem administrator bi
trebao biti unaprijed svjestan problema, prije nego li ga korisnik doživi.
Što se može automatizirati? Što treba biti automatizirano? To su pitanja za sve sistem
administratore za bilo koju namjenu sustava. Neki kažu da bi trebalo automatizirati sve. Neke
je zadatke lako ukomponirati u automatizaciju pogotovo ako se ti zadaci lako uklapaju u
skripte. Neki se interaktivni zadaci ne mogu tako jednostavno uklopiti, kao npr. dodavanje
korisnika. Mogu se napraviti skripte koje pojednostavnjuju te funkcije. Skripte mogu
poboljšati funkcije i biti usklañenije sa okolinom. Par zadataka se lako mogu automatizirati,
nadgledanje procesa, potraga za dokumentom (file search) i moguće uklanjanje i
distribuiranje dokumenata po mreži. Ostali zadaci uključuje ove koji mogu biti
pojednostavljeni tako da korisnici mogu lakše koristiti alate koji omogućavaju funkcionalnost
UNIX okolini, uključujući slanje poslova printeru ili generiranje korisničkih izvješća za
servise.

1.1.1 Automatsko izvoñenje programa


UNIX dozvoljava automatsko izvoñenje programa i pozadinsko izvoñenje programa,
to mu omogućuju cron, at i batch naredbe.
- cron - omogućava izvoñenje naredbi u pravilnim razmacima, periodički u zadano vrijeme,
cron dolazi od grčke riječi „chronos“ koja znači vrijeme.
- at – omogućava izvoñenje naredbi samo jednom u zadano vrijeme
- batch – je file u kojemu se nalazi više naredbi, koje se pokreću jedna za drugom
Npr. Crontab se koristi za izradu backup-a svako jutro u 2 sata, a at se koristi da nas podsjeti
na sastanak kasnije u neko doba u danu.

490/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Cron i AT

2 CRON

2.1 Cron i crontab


Ispravan mu je naziv „cron daemon“. Cron je automatski „tajmer“. Koristi se na UNIX
ili Linux operacijskim sustavima za izradu zadataka u odreñenim intervalima bez intervencije
svaki put kada se ti zadaci trebaju izvršavati. Postavi se vrijeme sata i zaboravi. Cron daemon
izvršava posao.
Cron daemon se nalazi na mjestu gdje se svi vremenski dogañaji pokreću.
Pokrenut je pod sistemskom inicijalizacijom i ostaje aktivan dokle god sustav radi u multi-
user modu.
Cron se budi svaku minutu i istražuje sve spremljene konfigurirane dokumente, koji se
zovu crontabs, za provjeru svakoga za naredbe koje bi mogle biti sljedeće za izvršavanje u
neko odreñeno vrijeme. Neki sustavi imaju limite za broj zadataka koje se mogu obaviti kroz
jednu minutu. Najbolji za spomenuti, zbog malog broja, je SGI IRIX 5.3 zbog svog limita od
25 poslova.
Cron sprema unose u cron tablicu crontab. On je uglavnom lociran u /etc direktoriju.
Svaki korisnik sustava može imati svoj crontab koji se nalazi u /var/spool/cron/. Da bi
koristili korisnikov crontab unos, treba se ulogirati u sistem za tog odreñenog korisnika i
upisati crontab –e. Defaultni je editor za crontab –e naredbu editor „VI“. za onoga tko nije
upoznat sa VI editorom može se promijeniti defaultni editor tako da se pokrene naredba
export VISUAL ='editor'. Naravno da se treba zamijeniti editor sa najdražim text editorom, ili
naučiti se služiti sa VI-jem.
Osim što pokreću naredbe svake minute, neki cron daemoni takoñer provjeravaju da li
je vrijeme spool direktorija nadograñeno (update). Ako je update-ano, cron će provjeriti
modifikaciju vremena na svim crontabovima i ponovo pročitati one koji su bili modificirani.
Ostali cron daemoni provjeravaju nove crontab dokumente kada se prvi put inicijaliziraju i
kada se naredbe crontab ili at izvrše. Ali zbog tog načina se smanjuje vrijeme koje se troši na
to da se primijeti promjena u spool direktoriju.
„Crontab(CRON TABle)“ je tekstualni dokument koji sadrži seriju cron funkcija.
Cron pretražuje crontab spool direktorij za crontab dokumente. Ti dokumenti su nazvani
prema korisničkim računima.

491/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Cron i AT

Npr. ako je sistem administrator logiran u korijen (root), račun kreira crontab tablicu.
Nazvat će se root i stavit će se u crontab spool direktorij. Ako Ana Anić čije je korisničko ime
ana, kreira crontab dokument, naziva se ana u crontab spool direktoriju.
Sve naredbe izvršene pomoću crona trebale bi raditi tiho bez outputa. Zato što cron radi
kao odvojeni posao, nema terminala da na njemu ispiše poruke. Ali uvijek postoji mogućnost
da skripta ili naredba proizvede output ili možda neke error poruke. Cron hvata sve outpute u
standard out ili u standard error koji nije bio ponovo poslan u file tj. redirektan. Uhvaćeni
output je bačen u mail file i poslan je korisniku od kojega je potekla naredba ili u root folder.
Hvata errore bez da prisiljava cron da pukne ili prestane sa radom.

2.1.1 Što cron može raditi?


Želite li poslati vaše e-mail tečajeve pretplatnicima u 11:30 na večer, postavit ćete cron
na vaš server. I vaš cron manager šalje jedan e-mail svaki dan u 23:30 dokle god ne pošalje
sve mailove.
- Ako ih želite poslati nedjeljom, možete to postaviti sa vašim cronom.
- Možete ga postaviti tako da izbriše na vašim stranicama članove kojima je istekao račun.
- Možete ga postaviti tako da šalje update-ove vašim pretplatnicima sa vašeg mailing list
managera.
-Možete provjeriti vaše linkove na drugim web stranicama u link exchange programima.

2.1.2 Može li vaš website koristiti cron?


Jeste li vidjeli tekstualni link poput „Cron Manager“ ili „Cron jobs“? Ako ste ih vidjeli
na vašem serveru tada on može koristiti cron. Uvijek je najbolje pitati administratora
poslužitelja sve detalje vezane uz korištenje cron-a toga odreñenog poslužitelje. Neki
poslužitelji omogućuju korištenje cron-a bez da imaju njegovo grafičko sučelje. Tada mu se
treba pristupiti preko Telneta. Ako koristite virtualne poslužiteljske domene tada vaš cron
treba postaviti vaš sistem administrator.

2.1.3 Komponente crona


Kada se cron daemon pokrene, on čita različite crontab tablice iz crontab direktorija,
najčešće je to /usr/spool/cron/crontabs. Za kreiranje ili promjenu crontab dokumenta koristi
se crontab –e naredba koju ćemo još spominjati kasnije. Sada se nalazimo u tekst editoru sa

492/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Cron i AT

kopijom trenutnog crontab dokumenta ako on postoji, ili je tekstualni editor prazan ako ne
postoji taj dokument.
Svaki crontab unos je pojedinačna linija koja se sastoji od šest polja koja su odvojena sa
razmaknicama (space). Treba odrediti minute kada se naredba treba izvršiti, sa brojevima od 0
do 59 u prvom polju, sat se odreñuje od 0 do 23 u drugom polju, dan u mjesecu od 1 do 31 u
trećem polje, mjesec od 1 do 12 se upisuje u četvrto polje, bilo koji dan u jednu od 0 do 6 se
upisuje u peto polje. U šesto se polje upisuje naredba koja se treba izvršiti.
Na prvi se pogled može primijetiti da može doći do konflikata ili redundantnosti zato
jer postoji dva „dnevna“ polja – dan u mjesecu i dan u tjednu. Ali zapravo je to samo
primjena dva različita vremenski ureñena algoritma. Za primjer, želimo da nas cron podsjeti
na sastanak svakoga utorka ili na stizanje plaće svakog 15-og dana u mjesecu. Unosom znaka
asterisk (*) u polje dana koji se ne koristi, mogu se koristiti oba dnevna polja ako želimo da se
naredba izvrši15-og u mjesecu kao i svaki utorak. Opseg se odreñuje sa crticom. Ako se želi
odrediti od 8-og do 15-og dana u mjesecu tada se upisuje 8-15 u treće polje. Ako ne želimo
označiti opseg već samo naznačiti dva dana tada ih razdvajamo sa zarezima, pr. 1,15, znači
prvi i 15-i u mjesecu. Za odreñivanje svih vrijednosti polja upisuje se asterisk (*) u polje.
(Ako se želi odrediti svaki dan upisuje se asterisk u oba dnevna polja).
Nakon editiranja crontab dokumenta, treba ga spremiti ili izaći iz editora. Dokument
koji je kreiran se nalazi u crontab direktoriju. Za pregled trenutnog crontab-a, koristi se
crontab –l. Za brisanje crontab-a koristi se crontab –d .
Superkorisnik može obrisati svakom korisniku njegov crontab sa: crontab-d username
Treba se biti pažljiv kod prijenosa crontab-a na druge sustave, najpametnije je pročitati
uputstva svakoga sustava.
Znači prvih pet polja kazuju cron daemonu kada da pokrene naredbu, koja se nalazi u
šestom polju.
Prvih pet polja takoñer mogu koristiti bilo koji od sljedećih formata:

• Znak asterisk (*) koji odgovara svim vrijednostima.


• Jedan integer koji odgovara točnoj vrijednosti
• Lista integera odvojena zarezom, koja odgovara jednoj od izlistanih vrijednosti.
• Opseg integera odvojenih sa crticom, koja odgovara vrijednostima unutar opsega.

493/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Cron i AT

Polje Vrijednost Opis


minute 00-59 točna minuta kada se cron izvršava
hour 00-23 sat u danu kada se cron izvršava (0 je ponoć)
day 01-31 dan u mjesecu kada se cron izvršava
month 01-12 mjesec u godini kada se cron izvršava
dan u tjednu kada se cron izvršava (nedjelja = 0,
weekday 00-06 ponedjeljak =1, utorak = 2, srijeda = 3, četvrtak
= 4, petak = 5, subota = 6)
command Special završava sekvencu naredbe koju treba izvršiti
Tablica 2.1. Komponente crona

2.2. Primjeri kako postaviti cron


Ako imate instaliran cgi script u vašem cgi bin direktoriju koji se zove members.cgi i
želite pokrenuti taj program svaku noć u 23:30 kao u gornjem primjeru. Tada se trebaju
postaviti sljedeće crontab linije:
30 23 * * * /home/username/www/cgi-bin/members.cgi
30-predstavlja minutu rada crona
23-predstavlja sat u danu
* predstavlja svaki dan, mjesec, tjedan i vikend
Želite li postaviti cron job svake subote oko ponoć u 11.30 PM, to se postavlja ovako:
30 23 * * 0 /home/username/www/cgi-bin/members.cgi
0- predstavlja subotu
Ako želite cron job da se pokrene u 1:00 i u 2:00 AM, postavite ga ovako:
* 1,2 * * * /home/username/www/cgi-bin/members.cgi
cron se sada pokreće svaki dan, svaki mjesec i svaki tjedan
Ako gornji primjer želite da se pokreće samo od ponedjeljka do petka postavit se:
* 1,2 * * 1-5 /home/username/www/cgi-bin/members.cgi
Ovaj unos šalje string WAKE UP na device/dev/console na početku svakoga sata,
svaki dan, svaki mjesec.
0 * * * * echo "WAKE UP" 2>&1 /dev/console
Ovaj unos pokreće kalendar koji podsjeća korisnike na praznike i ostale važne
dogañaje na početku sata, na početku dana svaki dan u mjesecu.

494/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Cron i AT

0 0 * * * calendar –
Ovaj unos pokreće naredbu checkdaemon i šalje mailove izlazu naredbe u root
direktorij. Naredba se pokreće 10, 20, 30, 40 i 50 minuta nakon sata svaki dan u mjesecu.
10,20,30,40,50 * * * * /adm/checkdaemon 2>&1 | /bin/mail -s "CRON:Check" root
Ovaj unos omogućava da se backup skripta pokrene svako jutro u 4:12, a sljedeća
linija uzrokuje da korisnik jones dobije mail za šest dana u travnju mjesecu kao podsjetnik da
su taxe due. Generalno je dobra ideja da se cron naredbe izvršavaju u neko vrijeme poput
ovoga kada ne opterećuje sistem tijekom normalnog rada.
12 4 * * * /usr/local/bin/backup
5 3 10-15 4 * echo "taxes due" | mail jones
Ako mu se ne naznači redirekt na standardnu grešku ili standardni izlaz, oni se mailaju
vlasniku crontab dokumenta nakon što se izvede naredba. U gornjem primjeru ako se korisnik
jones ne može pronaći, vlasniku stiže mail sa standardnom greškom.
* * * * * /sbin/ping -c 1 192.168.0.1 > /dev/null
Ova linija pokreće „ping“ naredbu svake minute, svakoga sata, svakoga dana, svakoga
mjeseca. Standardni izlaz je redirektan na /dev/null tako da nećemo dobiti e-mail ali
dozvoljava da nam se pošalje poruka o grešci ako se dogodi. Ako ne želimo nikakav e-mail
mijenjamo naredbu u : "/sbin/ping -c 1 192.168.0.1 > /dev/null 2>&1"
0 0,12 1 */2 * /sbin/ping -c 192.168.0.1; ls -la >>/var/log/cronrun
Ovaj red pokreće „ping“ i „Ls“ naredbu u svakih 12 sati ujutro i 12 sati u noći, pvoga dana
svakoga drugog mjeseca. Takoñer stavlja izlaz naredbe u file /var/log/cronrun.
0 2 1-10 * * du -h --max-depth=1 /
Ova linija pokreće naredbu za korištenje diska da dobavi veličinu direktorija u 2 sata ujutro
od prvog do desetog datuma svakog mjeseca. E-mail se šalje korisniku.
Postavljanje pokretanja naredbe svakih 5 minuta:
Minute Hour Day Month Day of Week Minute Hour Day Month Day of Week

Every 5 All All All All */5 * * * *

jednostavno sučelje složenije sučelje

Pokretanje godišnje, točno u ponoć prvog siječnja:


Minute Hour Day Month Day of Week Minute Hour Day Month Day of Week
Midni
0 1 Jan All 0 0 1 1 *
ght
jednostavno sučelje složenije sučelje

495/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Cron i AT

Pokretanje mjesečno, u 2:15, petog svakog mjeseca:


Minute Hour Day Month Day of Week Minute Hour Day Month Day of Week

15 2AM 5 All All 15 2 5 * *


jednostavno sučelje složenije sučelje

Pokretanje tjedno, 4:32PM svakog četvrtka:


Minute Hour Day Month Day of Week Minute Hour Day Month Day of Week

32 4PM All All Thu 32 16 * * 4


jednostavno sučelje složenije sučelje

Pokretanje dnevno, u 12:45 svakog jutra:


Minute Hour Day Month Day of Week Minute Hour Day Month Day of Week
Midni
45 All All All 45 0 * * *
ght
jednostavno sučelje složenije sučelje

Pokretanje svaki sat, 24 minuta nakon svakog sata:


Minute Hour Day Month Day of Week Minute Hour Day Month Day of Week

24 All All All All 24 * * * *


jednostavno sučelje složenije sučelje

Pokretanje 52 minute nakon sata svakih 4 sata (znaći: 12:52AM, 4:52AM, 8:52AM…)

Minute Hour Day Month Day of Week Minute Hour Day Month Day of Week
Every
52 All All All 52 */4 * * *
4
jednostavno sučelje složenije sučelje

Pokretanje 8, 22 I 47 minuta nakon sata u 2AM I 2PM (znači: 2:08AM, 2:22AM,


2:47AM, 2:08PM, 2:22PM, 2:47PM) svakog trečeg mjeseca.

Minute Hour Day Month Day of Week Minute Hour Day Month Day of Week
Jan,
8,
2AM, Apr,
22, All All 8,22,47 2,14 * */3 *
2PM Aug,
47
Dec
jednostavno sučelje složenije sučelje

496/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Cron i AT

2.2.1 Postavljanje cron-a:


Ako se nañete u jednoj od ovih situacija:
1. Izrada prve crontab funkcije.
2. Već imate crontab file na vašem serveru koji pokreće jednu ili više cron funkcija za vas.
Bilo koja od ovih dviju situacija se može riješiti sa dvije metode.

2.2.1.1 Metoda jedan: Korištenje crontab managera


Ako imate crontab manager na vašem webpanelu bit će lako postaviti crontab funkciju.
Kliknite na ikonu da bi otvorili cron manager. Vidjet ćete jedan okvir poput mjesta za tekst
gdje možete unijeti perl file path koji želi pokrenuti cron job.

Slika 2.2.1.1. Podešavanje crona

Vaš cron manager se može razlikovati od ovoga ali u osnovi je lako postaviti cron job u
svakome manageru. Možete koristiti i metodu dva, ali je bolje koristiti metodu jedan.

2.2.1.2 Metoda dva: Postavljanje 'cron.txt' file i provjera


korištenjem Telneta
Kako to napraviti?
Općenito u četiri koraka:

• Kreirati cron.txt
• Upload
• Instalirati txt file kao cron file sa naredbom 'crontab cron.txt'
• Provjeriti cron file

497/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Cron i AT

Cron naredbe:

crontab filename
Instalira filename kao vaš crontab file. Na mnogo sistema, ova naredba se
jednostavno izvršava kao crontab filename.

crontab -e
Editira vaš cronteb file ili kreira crontab file ako on već ne postoji.

crontab -l
Prikazuje vaš crontab file.

crontab -r
Uklanja vaš crontab file.
crontab -v
Prikazuje posljednji put kada ste editirali crontab file. (ova opcija nije dostupna na
svim sustavima).

1. Otvorite notepad na vašem računalu i napišite cron job prateći uputstva objašnjena u
gornjem tekstu „Komponente crona?“
Npr. Ako želite napisati cron job ovako:
30 23 * * * /home/username/www/cgi-bin/members.cgi
Nakon ispisa toga koda pritisnite return (enter) tako da prazna linija bude ispod cron job
linije.
2. Uvijek koristite apsolutni put do naredbene linije. Ugasite „WordWrap“ u notepadu.
3. Spremite file kao 'cron.txt'. uploadaj ga u vaš root directorij ('/'). Ili upitajte vašeg web
poslužitelja gdje uploadati cron file. Upload u ASCII modu.

Slika 2.2.1.2. Postavljanje cron.txt-a

498/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Cron i AT

4. Poveži se sa svojim serverom uz pomoć Telnet-a, Primjeri su vam dostupni na ovoj adresi
http://www.cgi-installation-guide.com/
5. U command promptu upišite - crontab cron.txt
Pritisnite Enter i ratit će vas u command prompt.
Upišite (Small L):
crontab -l
Pritisnite Enter.
Vidjet ćete listu cron jobova koje ste unijeli u cron.txt i to je to.

Slika 2.2.1.3. Provjera cron filea

2.3 Savjeti u postavljanju cron joba

Treba pitati administratora poslužitelja o svemu vezano uz postupke za koje niste


sigurni. Treba provjeriti cron s vremena na vrijeme. Pr. namjestite cron da šalje e-zine u
11:30 PM. Zatim se pretplatite tako da možete vidjeti radi li ili ne. Kasnije možete otkazati
pretplatu. Bitno je provjeriti ga.
Ako kreirate cron file po prvi put i uploadate ga na server, napravite to u ASCII modu
Ako namještate script path u vašem rasporedu, path (put) mora biti formiran od vašeg
poslužiteljskog roota. NE vaš domain path.
Ex:/home/user/www/cgi-bin/scriptname.cgi
je točno.
http://www.yourdomain.com/cgi-bin/scriptname.cgi
je netočno.

499/2583
Sveučilište u Splitu Programski alati na Unix računalima
Stručni studij Računarstva – Zagreb Cron i AT

Imena scripti u UNIX-u su osjetljiva na razliku izmeñu velikih i malih slova. Stoga
budite pažljivi kod unošenja scriptnih imena.
Ako kreirate cron.txt file i uploadate, ne smijete koristiti razmake unutar 1-5
komponenti. Osim izmeñu njih (Pr. 10,30 * * * * je točno, netočno je 10 ,30 * * * *)
Cron nije potrebno resetirati nakon svake promjene zato jer on automatski provjerava
jeli došlo do promjena.
Cron šalje emailove svaki put kada se pokrene. Kako to zaustaviti?
Dodaj ovaj tag na kraju vašeg cron joba:
>/dev/null 2>&1
Uzimajući gornji primjer vaš cron job izgleda poput ovoga:
30 23 * * * /home/username/www/cgi-bin/members.cgi>/dev/null 2>&1

2.3.1 Konfiguracijski dokumenti


Konfiguracijski dokumenti koji se koriste za kontroliranje cron operacija se zovu
crontab dokumenti ili cron tablice. Ti fajlovi sadrže informaciju o vremenu, datumu i naredbi
koja se treba izvršiti. Različite verzije Unixa čuvaju cron i podržavaju dokumente na
različitim lokacijama i mogu koristiti malo drugačiji format.

IRIX 5.3
/usr/lib/cron glavni cron direktorij

/usr/lib/cron/FIFO koristi se kao zaključani file

/usr/lib/cron/log informacije o računu

/usr/spool/cron spool area<