Advertisement
garnettkg

OS2

Nov 22nd, 2015
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Strana 2 / 9
  2. OS2 Vežba 1
  3. VIŠER 2014.
  4. Uvodne napomene
  5. Operativni sistemi 2, V semestar, VIŠER.
  6. Profesor:
  7.  Borislav Đorđević, bora@impcomputers.com
  8. Saradnik:
  9.  Borislav Krneta, borak@viser.edu.rs
  10. Strana 3 / 9
  11. OS2 Vežba 1
  12. VIŠER 2014.
  13. Sadržaj laboratorijskih vežbi
  14. 1. UVOD
  15.  Uvodna priča.
  16.  Uvodni test. Provera znanja sa OS1 koje je neophodno za OS2.
  17. 2. FILE MANAGMENT
  18.  Rad sa komandama za kreiranje, kopiranje, brisanje i pomeranje datoteka i direktorijuma.
  19.  Hard linkovi i simbolički linkovi
  20.  Pretraživanje direktorijuma (find)
  21.  Pretraživanje tekstualnih datoteka (grep)
  22. 3. ARHIVIRANJE I BACKUP
  23.  Tar, tar+gzip, tar+bzip2
  24.  cpio
  25. 4. NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA (PROGRAMERSKI ČAS)
  26.  Vektorsko čitanje i pisanje (writev, readv)
  27.  Brzi prenos podataka (sendfile)
  28.  Čitanje sadržaja simboličkih linkova (readlink)
  29.  Zaključavanje datoteka (fcntl)
  30.  Prikazivanje informacija iz i-node strukture datoteka (stat)
  31. 5. DISKOVI I FAJL SISTEMI
  32.  Blok uređaji i diskovi, particije
  33.  Administriranje fajl sistema - kreiranje, aktiviranje, fsck
  34.  Aktivno stablo
  35. 6. KOLOKVIJUM # 1
  36.  Obuhvata gradivo sa vežbi 2-5
  37. 7. SHELL PROGRAMIRANJE
  38.  Kako se piše i pokreće shell program; C program vs shell script
  39.  Promenljive, kako ih proslediti shell skriptu, šta je izlazni status komande
  40.  Upotreba navodnika
  41.  Osnovne komande (read, expr, test, ...)
  42.  If struktura i petlje
  43.  Shell proširenja
  44. 8. PROCESI - IPC (PROGRAMERSKI ČAS)
  45.  Deljiva memorija
  46.  Mapirana memorija
  47.  Neimenovani pipe
  48.  Preusmeravanje standardnog ulaza, izlaza i izlaza za greške
  49.  FIFO
  50. 9. MREŽA
  51.  Mrežno okruženje i konfiguracione datoteke za mrežno okruženje
  52. Strana 4 / 9
  53. OS2 Vežba 1
  54. VIŠER 2014.
  55.  Konzolni programi za administraciju
  56.  Mrežni servisi
  57.  NFS
  58.  Administracija mreže iz YaST-a
  59.  Šta je i kako radi socket mehanizam (programerski)
  60. 10. UREĐAJI I PROC FS (PROGRAMERSKI ČAS)
  61.  Tipovi uređaja, označavanje uređaja, hardverski i specijalni uređaji
  62.  Sistemski pozv ioctl
  63.  /proc sistem datoteka - dobijanje informacija iz /proc
  64.  /proc - upisi procesa
  65.  /proc - informacije o hardveru
  66.  /proc - informacije o FS
  67.  /proc - statistika sistema
  68. 11.BOOT I SHUTDOWN
  69.  Boot - procedura, šta se dešava
  70.  Nivoi izvršavanja i rc skripte
  71.  Administracija runlevel-a i servisa iz YaST-a
  72.  Prijavljivanje na sistem
  73.  Shutdown procedura
  74. 12.SECURITY
  75.  sudo
  76.  gnupg
  77.  iptables
  78. 13.KOLOKVIJUM # 2
  79.  Obuhvata gradivo sa vežbi 7-12
  80. Strana 5 / 9
  81. OS2 Vežba 1
  82. VIŠER 2014.
  83. Knjige i dokumentacija za pripremu pismenog ispita
  84. Knjige:
  85. Za korišćenje i administraciju Linux-a:
  86.  Borislav Đorđević, Dragan Pleskonjić, Nemanja Maček, „Operativni sistemi: UNIX i Linux“.
  87. Viša elektrotehnička škola, Beograd (2004.), ISBN 86-85081-03-3.
  88. Za sistemsko programiranje:
  89.  Borislav Đorđević, Marko Carić, Dragan Pleskonjić, Nemanja Maček, „GNU/Linux sistemsko
  90. programiranje“, Visoka škola elektrotehnike i računarstva, Beograd (2007.), ISBN 978-86-
  91. 7982-009-9.
  92. Za pripremu ispita (Linux administracija):
  93.  Borislav Đorđević, Dragan Pleskonjić, Nemanja Maček, „Operativni sistemi: zbirka rešenih
  94. ispitnih pitanja i zadataka“, Viša elektrotehnička škola, Beograd (2005.), ISBN 86-85081-15-
  95. 7.
  96.  Borislav Đorđević, Dragan Pleskonjić, Nemanja Maček, „Operativni sistemi: teorija, praksa i
  97. rešeni zadaci“, Mikro knjiga, Beograd (2005.), ISBN 86-7555-274-2. NAPOMENA: Ova knjiga
  98. sadrži i teorijski deo koji ovaj kurs većim delom pokriva.
  99. Dokumentacija:
  100.  PDF dokumenti sa vežbi u okviru kursa na Moodle sistemu.
  101. Strana 6 / 9
  102. OS2 Vežba 1
  103. VIŠER 2014.
  104. Način polaganja ispita
  105. Uslov za izlaz na ispit
  106. Uslov za izlazak na ispit su odbranjene laboratorijske vežbe. Da bi ste odbranili laboratorijske
  107. vežbe, potrebno je na svakoj odbrani sakupiti minimum 50 % od maksimalnog broja poena.
  108. Odbrane vežbi
  109. Za odbrane vežbi, predviđena su dva testa (nakon pređene svake od dve glavne celine gradiva, u
  110. računarskoj laboratoriji škole. Na prvoj odbrani može se ostvariti do 5 poena i na drugoj do 5 poena.
  111. Kolokvijumi
  112. Kao glavne provere znanja, predviđena su dva kolokvijuma (nakon pređene svake od dve glavne
  113. celine gradiva) ili završni ispit, u računarskoj laboratoriji škole. Na prvom kolokvijumu može se
  114. ostvariti do 35 poena i na drugom do 35 poena, ili na završnom ispitu do 70 poena.
  115. Strana 7 / 9
  116. OS2 Vežba 1
  117. VIŠER 2014.
  118. Uvodni test
  119. Namena ovog testa je da proverite koliko ste gradiva iz OS1 zapamtili ili zaboravili. Preporuka je da
  120. test probate da uradite sami, ukoliko ne možete nečega da se setite, pokušajte da rešite problem
  121. čitajući PDF-ove iz OS1.
  122. 1. Kreirajte jedan novi korisnički nalog koristeći "User Accounts".
  123. Parametri naloga su:
  124.  korisničko ime: korisnik1
  125.  lozinka: 1Password2
  126. 2. Kreirajte jedan novi korisnički nalog iz komandne linije komandom useradd.
  127. Parametri naloga su:
  128.  korisničko ime: korisnik2
  129.  lozinka: 1Password2
  130.  home direktorijum: /home/korisnik2 (NAPOMENA: koristite opciju -d /home/korisnik2
  131. komande useradd za dodelu home direktorijuma korisniku)
  132. Proverite da li je korisniku dato puno ime. Ako nije, dodelite mu ime Drugi Korisnik (komanda
  133. chfn).
  134. Proverite da li je korisniku napravljen home direktorijum. Ako nije:
  135.  kreirajte ga
  136.  iskopirajte u njega profil (kopiranje kompletnog sadržaja iz /etc/skel)
  137.  dodelite vlasništvo korisniku nad kompletnim sadržajem home direktorijuma (komanda
  138. chown)
  139.  postavite prava pristupa nad home direktorijumom tako da vlasnik ima sva prava, grupa
  140. pravo čitanja i izvršavanja a ostali nikakva prava
  141. 3. Koristeći komandu chage postavite parametre lozinke za korisnički nalog korisnik1 tako da:
  142.  nalog nikad ne ističe, ali se zaključava nakon 7 dana neaktivnosti (-I inactivity)
  143.  korisnik mora da promeni lozinku na svakih 40 dana (-M maximum)
  144.  10 dana nakon promene lozinke korisnik ne sme ponovo da menja lozinku (-m minimum)
  145.  20 dana nakon promene lozinke korisnik dobija upozorenje da će mu lozinka isteći za 20
  146. dana (-W warning)
  147. 4. Kreirajte grupu korisnici i u nju učlanite korisnike korisnik1 i korisnik2.
  148. Za kreiranje grupe koristite komandu groupadd a korisnike učlanite komandama usermod -G.
  149. 5. Prijavite se u konzoli kao korisnik1 komandom su.
  150. Strana 8 / 9
  151. OS2 Vežba 1
  152. VIŠER 2014.
  153. 6. Komandom file odredite kojeg su tipa datoteke /etc/hosts, /bin/cp, /etc.
  154. 7. Na svom home direktorijumu kreirajte praznu datoteku.
  155. 8. Podesite umask tako da se pri kopiranju ukida pravo čitanja grupi i sva prava ostatku sveta.
  156. 9. Iskopirajte tu praznu datoteku i proverite prava pristupa kopije.
  157. 10.Dodelite kopiji pravo čitanja i izvršavanja za ostatak sveta.
  158. 11. Prijavite se na konzolu kao root i poklonite datoteku drugom korisniku.
  159. 12.Kojom komandom ćete pročitati sadržije i-nodea za direktorijum /etc?
  160. 13.Kreirajte jednu praznu datoteku i dajte joj pravo izvršavanja. Poklonite datoteku korisniku
  161. korisnik2. Podesite flegove tako da se pri izvršavanju ove datoteke ona uvek izvršava sa
  162. akreditivima korisnika kome je poklonjena.
  163. 14.Napišite C program koji prikazuje pid procesa i proces roditelja. Prevedite program i
  164. pokrenite ga.
  165. 15. Izlistajte sve procese na sistemu (procese svih korisnika)
  166. Strana 9 / 9
  167.  
  168. Strana 2 / 15
  169. OS2 Vežba 2 VIŠER 2014.
  170. Preporučuje se da pročitate
  171. Borislav Đorđević, Dragan Pleskonjić, Nemanja Maček, Operativni sistemi: UNIX i Linux, VETŠ 2004.
  172. Poglavlje 5 - Rad sa datotekama iz komandne linije (91. strana).
  173. Strana 3 / 14
  174. OS2 Vežba 2 VIŠER 2014.
  175. Praktični zadaci
  176. 1. Pokretanje virtuelne mašine.
  177. Kreirajte novi korisnički nalog koristeči "User Accounts" ili iz odgovarajuće shell komande.
  178. Parametri su sledeći:
  179.  username: smerbrojIndeksa (npr: nrtd912)
  180.  password: 1Password2
  181.  full name: Vaše ime
  182.  home direktorijum: /home/smerbrojIndeksa (npr: /home/ nrtd912)
  183.  shell: /bin/bash
  184. Odjavite se sa sistema.
  185. Prijavite se na sistem kao novokreirani korisnik.
  186. Pokrenite terminal.
  187. 2. Određivanje sistemske putanje
  188. Odredite maksimalnu dužinu sistemske putanje (PATH): getconf PATH_MAX
  189. Prikažite vašu sistemsku putanju na ekranu: echo $PATH
  190. Da li možete da izvršavate komande koje se nalaze:
  191.  u vašem home direktorijumu
  192.  u /bin direktorijumu
  193.  u /sbin direktorijumu
  194. Pretpostavite da se vaš home direktorijum NE nalazi u sistemskoj putanji i da se u njemu nalazi
  195. izvršna binarna datoteka program. Kako ćete u Bourne Again Shell-u pokrenuti ovu datoteku?
  196. Prijavite se privremeno kao root korisnik: su -
  197. Odredite sistemsku putanju. Da li root može da izvršava komande iz /sbin i /usr/sbin
  198. direktorijuma ?
  199. Preuzmite stari identitet: exit
  200. Strana 4 / 14
  201. OS2 Vežba 2 VIŠER 2014.
  202. 3. Redirekcija ulaza/izlaza
  203. Šta radi sledeća komanda: ls -l /etc
  204. Probajte da izlaz prethodne komande preusmerite u datoteku etclist: ls -l /etc >etclist
  205. Pogledajte sadržaj datoteke etclist: cat etclist
  206. Šta radi sledeća komanda: mount
  207. Probajte da izlaz prethodne komande preusmerite u datoteku mountlist: mount >mountlist
  208. Pogledajte sadržaj datoteke mountlist: cat mountlist
  209. Zadajte sledeću komandu: ls -l /qwertz
  210. Preusmerite standardni izlaz za greške komande ls -l /qwertz u datoteku error.txt sledećom
  211. komanom: ls -l /qwertz 2>error.txt
  212. Pogledajte sadržaj datoteke error.txt: ls -l error.txt
  213. Obrišite datoteke koje ste kreirali: rm etclist mountlist error.txt
  214. 4. Pipeline komandi
  215. Potrebno je prebrojati sve datoteke u osnovnoj grani direktorijuma /etc. Jedan od načina na koji se
  216. to može učiniti je sledeći:
  217.  preusmerite izlaz komande ls -l /etc (koja ispisuje jednu datoteku direktorijuma /etc u svakoj
  218. liniji na ekranu) u neku datoteku: ls -l /etc >etc1.txt
  219.  prebrojite linije datoteke: wc -l etc1.txt
  220. Drugi način je da iskoristite komandni pipeline: ls -l /etc | wc -l
  221. Drugi primer gde je pipeline neophodan je bilo koja Linix komanda koja proizvodi veliki output.
  222. Komanda koja prikazuje sadržaj etc direktorijuma (ls -l /etc) je dobar primer. Izlaz takve komande
  223. možete videti stranu po stranu ako uradite sledeće stvari:
  224.  preusmerite izlaz komande ls -l /etc (koja ispisuje jednu datoteku direktorijuma /etc u
  225. svakoj liniji na ekranu) u neku datoteku: ls -l /etc >etc2.txt
  226.  pregledajte datoteku viewer-om less: less etc2.txt
  227. Drugo rešenje je da povežete te dve komande u pipeline: ls -l /etc | less
  228. Obrišite datoteke koje ste kreirali: rm etc1.txt etc2.txt
  229. 5. Upotreba joker-a *, ?, []
  230. Pređite na direktorijum /bin: cd /bin
  231. Strana 5 / 14
  232. OS2 Vežba 2 VIŠER 2014.
  233. Prikažite sve datoteke čije ime počinje na slovo a: ls -l a*
  234. Prikažite sve datoteke čije ime počinje slovima ch: ls -l ch*
  235. Šta prikazuje: ls -l ??mod
  236. Šta prikazuje: ls -l [a-d]*
  237. Vratite se na home direktorijum: cd
  238. 6. Upotreba alias-a
  239. Prikažite sve alias-e za tekućeg korisnika: alias
  240. Napravite alias et kao “ls -l /etc | less”: alias et=”ls -l /etc | less”
  241. Napravite alias mn kao “mount”: alias mn=”mount”
  242. Probajte aliase: et
  243. Probajte aliase: mn
  244. Poništite aliase: unalias et
  245. Poništite aliase: unalias mn
  246. 7. Ponavljanje i editovanje komandi
  247. Namerno pogrešno otkucajte neku komandu, na primer lls: lls -l /etx
  248. Vratite komandu iz bafera (strelica na gore) pa je ispravite i izvršite: ls -l /etc
  249. Gde se čuvaju komande otkucane u prošlosti?
  250. Pogledajte sadržaj datoteke .bash_history u home direktorijumu: less ~/.bash_history
  251. 8. Kompletiranje imena datoteke
  252. Otkucati “cat /etc/pas” pa pritisnite <tab> - od Linuxa dobijate kompletirano ime /etc/passwd
  253. Sta znači ako tab ne radi: ili ima vise opcija, ili nema nijedne. Na primer: “cat /etc/pa” <tab>
  254. 9. Dobijanje pomoći
  255. Probajte da dobijete pomoć za neku komandu na sledeće načine:
  256.  mkdir --help
  257.  man mkdir
  258.  info mkdir
  259. Isprobajte ovo za nekoliko raznih komandi. Ukoliko niste sigurni za komandu, imate pretraživač na
  260. osnovu ključnih reči: apropos partition
  261. Strana 6 / 14
  262. OS2 Vežba 2 VIŠER 2014.
  263. 10. Lokatori komandi
  264. Pronađite sve informacije o položaju datoteke cp: whereis cp
  265.  Pronaci gde se nalazi manual page programa insmod: whereis -m insmod
  266.  Pronaci gde se nalazi source datoteke find: whereis -s find
  267.  Pronaci gde se nalazi izvršna datoteka grep: whereis -b grep
  268. Uporedite komande: whereis insmod i which insmod
  269. 11. Ispitivanje sadrzaja datoteke
  270. Odredite tipove sledećih datoteka:
  271.  /etc/hosts: file /etc/hosts
  272.  /bin/cp: file /bin/cp
  273.  /dev/hda: file /dev/hda
  274. Napomena: Ukoliko vam se pojavi error: No such file or directory, prijavite se na sistem
  275. kao root, pokrenite terminal i ukucajte komandu: fdisk -l kako biste proverili da li je
  276. /dev/sda, ukoliko jeste, u daljem radu umesto hda kucajte sda.
  277. Napravite jedan simbolički link pa primenite komandu file na njega:
  278.  Kreirajte link: ln -s /tmp tmp1
  279.  Pogledajte kako link izgleda: ls -l
  280.  Proverite tip: file tmp1
  281.  Obrišite ga: rm tmp1
  282. Probajte sledeću komandu: file /dev/hda{,1,2,9,10,11}
  283. Probajte sledeću komandu: file -s /dev/hda{,1,2,9,10,11}
  284. 12. Prikazivanje čitljivih karaktera iz binarne datoteke
  285. Probajte komandu: strings /bin/rm
  286. 13. Komanda cp – jednostavno kopiranje, pristupna prava originala i kopije i vrednost
  287. umask parametra
  288. Kreirajte jednu datoteku u svom home direktorijumu: touch original
  289. Strana 7 / 14
  290. OS2 Vežba 2 VIŠER 2014.
  291. Postavite prava pristupa za datoteku original na 775: chmod 775 original
  292. Postavite vrednost promenljive umask tako da odseca prava write i execute kategorijama group i
  293. others sledećom komandom: umask 033
  294. Iskopirajte datoteku: cp original kopija
  295. Pogledajte šta piše u i-nodeovima originala i kopije: ls -l original kopija
  296. Uporedite pristupna prava originala i kopije. Koji su bitovi ukinuti ?
  297. Postavite vrednost promenljive umask na vrednost 022: umask 022
  298. Obrišite obe datoteke: rm original kopija
  299. 14. Komanda cp – kopiranje jedne datoteke iz drugog direktorijuma u tekući, sa
  300. promenom imena datoteke,vlasnički odnosi originala i kopije
  301. Iskopirajte jednu datoteku čiji je vlasnik korisnik root u svoj home: cp /bin/cp my_cp
  302. Pogledajte šta piše u i-nodeovima originala i kopije: ls -l /bin/cp my_cp
  303. Uporedite vlasničke odnose originala i kopije. Kom korisniku i kojoj grupi je dodeljena kopija?
  304. (hint: pogledajte koja je primarna grupa korisnika “korisnik”)
  305. Obrišite datoteku my_cp: rm my_cp
  306. 15. Upotreba džokera za kopiranje datoteka iz jednog direktorijuma u drugi
  307. Kreirajte dva direktorijuma u svom home direktorijumu: mkdir src dst
  308. Kreirajte nekoliko datoteka u direktorijumu src zadajući redom sledeće komande:
  309.  pređite na direktorijum src: cd src
  310.  kreirajte datoteke: touch a1 a2 a3 a4 a5 b1 b2 b3 b4 b5 c1 c2 c3 c4 c5
  311.  vratite se na svoj home direktorijum: cd
  312. Iskopirajte u direktorijum dst sve datoteke koje počinju na slovo a: cp src/a* dst/
  313. Sada probajte da Iskopirate u direktorijum dst sve datoteke koje počinju na slovo “b”, ali tako da
  314. im promenite prvo slovo u “d” (npr b1 se kopira u d1, b2 u d2...): cp src/b* dst/d*
  315. Da li ste u tome uspeli?
  316. Ako niste, probajte da kopirate datoteku po datoteku i da joj pri tom menjate ime:
  317.  cp src/b1 dst/d1
  318.  cp src/b2 dst/d2-RC5
  319.  cp src/b3 dst/d31
  320. Strana 8 / 14
  321. OS2 Vežba 2 VIŠER 2014.
  322.  cp src/b4 dst/d41
  323.  cp src/b5 dst/d5-tux
  324. 16. Još malo priče o džokerima i njihovoj primerni na komandu za listanje sadržaja
  325. direktorijuma
  326. Prikažite sve datoteke u direktorijumimu dst: ls -l dst
  327. Prikažite sve datoteke u direktorijumu dst čije je ima dužine dva karaktera: ls dst/??
  328. Prikažite sve datoteke u direktorijumu dst čije ime počinje na “d”: ls dst/d*
  329. Prikažite sve datoteke u direktorijumu dst čije ime počinje na “d” i dužine je 2 karaktera: ls dst/d?
  330. Prikažite sve datoteke u direktorijumu dst u čijem je imenu drugi karakter “2”: ls dst/?2*
  331. Obrišite kompletne direktorijume dst i src: rm -rf src dst
  332. 17. Odredite potrebne i dovoljne uslove da nešto iskopirate
  333. Kreirajte dva direktorijuma u svom home direktorijumu: mkdir dir1 dir2
  334. Kreirajte datoteku u direktorijumu src: cp /etc/passwd dir1/file1
  335. Dodelite sva prava nad direktorijumima vlasniku (tj. sebi): chmod 777 dir1 dir2
  336. Dodelite sva prava nad datotekom vlasniku (tj. sebi): chmod 777 dir1/file1
  337. Probajte da iskopirate datoteku: cp dir1/file1 dir2/file2
  338. Da li ste uspeli? Zašto?
  339. Obrišite kopiju: rm dir2/file2
  340. Ukidajte redom prava nad datotekom dir1/file1 i utvrdite koja su vam prava neophodna nad
  341. izvorišnom datotekom da bi ste mogli da izvršite kopiranje:
  342.  Pravo čitanja “r” izvorišne datoteke:
  343. o ukinite pravo “r”: chmod u-r dir1/file1
  344. o probajte da iskopirate: cp dir1/file1 dir2/file2
  345.  ako je kopiranje uspešno (proverite sa ls dir2), obrišite kopiju: rm dir2/file2
  346.  ako ne prodje to pravo, potrebno je dodelite ponovo sebi pravo “r”: chmod u+r
  347. dir1/file1
  348.  Pravo upisa “w” u izvorišnu datoteku: *** few commands missing ***
  349.  Pravo izvršavanja “x” izvorišne datoteke: *** few commands missing ***
  350. Strana 9 / 14
  351. OS2 Vežba 2 VIŠER 2014.
  352. Ukidajte redom prava nad direktorijumom dir1 i utvrdite koja su vam prava neophodna nad
  353. direktorijumom u kome se nalazi izvorišna datoteka da bi ste mogli da izvršite kopiranje:
  354.  Pravo čitanja “r” izvorišnog direktorijuma: *** few commands missing ***
  355. o ukinite pravo “r”: chmod u-r dir1
  356. o probajte da iskopirate: cp dir1/file1 dir2/file2
  357.  ako je kopiranje uspešno (proverite sa ls dir2), obrišite kopiju: rm dir2/file2
  358.  ako ne prodje to pravo, potrebno je dodelite ponovo sebi pravo “r”: chmod u+r dir1
  359.  Pravo upisa “w” u izvorišni direktorijum: *** few commands missing ***
  360.  Pravo izvršavanja “x” izvorišnog direktorijuma: *** few commands missing ***
  361. Ukidajte redom prava nad direktorijumom dir2 i utvrdite koja su vam prava neophodna nad
  362. odredišnim direktorijumom da bi ste mogli da izvršite kopiranje:
  363.  Pravo čitanja “r” odredišnog direktorijuma:
  364. o ukinite pravo “r”: chmod u-r dir2
  365. o probajte da iskopirate: cp dir1/file1 dir2/file2
  366.  ako je kopiranje uspešno (proverite sa ls dir2), obrišite kopiju: rm dir2/file2
  367.  ako ne prodje to pravo, potrebno je dodelite ponovo sebi pravo “r”: chmod u+r dir2
  368.  Pravo upisa “w” u odredišni direktorijum: *** few commands missing ***
  369.  Pravo izvršavanja “x” odredrišnog direktorijuma: *** few commands missing ***
  370. Zapišite sva prava koja su vam neophodna nad izvorišnom datotekom, direktorijumom u kojem se
  371. ona nalazi i odredišnim direktorijumom da bi ste mogli da izvršite kopiranje datoteke.
  372. Obrišite direktorijume dir1 i dir2: rm -rf dir1 dir2
  373. 18. Neki parametri komande cp
  374. Kreirajte direktorijum u svom home direktorijumu: mkdir dir1
  375. Kreirajte datoteku u direktorijumu src: cp /etc/passwd dir1/file1
  376. Probajte ponovo da iskopirate istu datoteku: cp /etc/passwd dir1/file1
  377. Šta sistem prijavljuje ? Utvrdite da li je to interaktivni ili forsirani režim.
  378.  interaktivno (postojeća datoteka se prepisuje bez pitanja): cp -i /etc/passwd dir1/file1
  379.  forsirano (sistem pita pre prepisivanja postojeće datoteke): cp -f /etc/passwd dir1/file1
  380. Probajte “verbose” režim kopiranja:
  381.  “non-verbose” (podrazumevano, ne ispisuje poruke na ekranu): cp /etc/passwd dir1/file2
  382.  “verbose” (mora se naglasiti, ispisuje se poruke na ekranu): cp -v /etc/passwd dir1/file3
  383. Probajte “rekurzivno” kopiranje, tj . kopiranje kompletnog sadržaja direktorijuma ili cele grane
  384. stabla.
  385. Strana 10 / 14
  386. OS2 Vežba 2 VIŠER 2014.
  387. Napravite dva odredišna direktorijuma: mkdir dir2 dir3
  388. Iskopirajte sadržaj /etc u direktorijum dir2: cp -r /etc/* dir2/
  389. Iskopirajte direktorijum /etc kao granu u direktorijum dir3: cp -r /etc dir3/
  390. Pregledajte sadržaj direktorijuma etc, dir2 i dir3: ls -l /etc dir2 dir3)
  391. Ustanovite razliku između prethodne dve komande.
  392. Obrišite podddirektorijume dir2 i dir3 sa tekuće grane: rm -rf dir2 dir3
  393. 19. Komanda mv – pomeranje jedne datoteke, grupe datoteka i direktorijuma
  394. Kreirajte dva direktorijuma u svom home direktorijumu: mkdir src dst
  395. Kreirajte nekoliko datoteka u direktorijumu src zadajući redom sledeće komande:
  396.  pređite na direktorijum src: cd src
  397.  kreirajte datoteke: touch a1 a2 a3 a4 a5 b1 b2 b3 b4 b5 c1 c2 c3 c4 c5
  398.  vratite se na svoj home direktorijum: cd
  399. Pomerite datoteku a1 u direktorijum dst: mv src/a1 dst/
  400. Pomerite datoteku a2 u direktorijum dst i promenite joj ime: mv src/a2 dst/a2_v1.01
  401. Promenite ime datoteke a3 u c6: mv src/a3 src/c6
  402. Pomerite grupu datoteka kojima ima počinje na “b” u direktorijum dst: mv src/b* dst/
  403. Probajte da pomerite grupu datoteka i da im promenite ime: mv src/c* dst/d*
  404. Da li ste uspeli u tome?
  405. Probajte da pomerite ceo poddirektorijum: mv src dst/
  406. Da li ste uspeli u tome?
  407. Obrišite poddirektorijume src i dst: rm -rf src dst
  408. 20. Komanda mv – šta se dešava sa vlasničkim odnosima i pristupnim pravima
  409. datoteka koju pomerate
  410. Kreirajte dva direktorijuma u svom home direktorijumu: mkdir src dst
  411. Kreirajte datoteku u direktorijumu src: touch src/file1
  412. Pogledajte prava pristupa i vlasničke odnose datoteke src/file1: ls -l src/file1
  413. Pomerite datoteku file1 u direktorijum dst: mv src/file1 dst/
  414. Pogledajte prava pristupa i vlasničke odnose datoteke src/file1: ls -l dst/file1
  415. Odredite šta se desilo sa vlasništvom i pravima pristupa.
  416. Obrišite direktorijume src i dst: rm -rf src dst
  417. Strana 11 / 14
  418. OS2 Vežba 2 VIŠER 2014.
  419. 21. Komanda mv – potrebni i dovoljni uslovi za izvršenje komande mv
  420. Kreirajte dva direktorijuma u svom home direktorijumu: mkdir dir1 dir2
  421. Kreirajte datoteku u direktorijumu src: cp /etc/passwd dir1/file1
  422. Dodelite sva prava nad direktorijumima vlasniku (tj. sebi): chmod 777 dir1 dir2
  423. Dodelite sva prava nad datotekom vlasniku (tj. sebi): chmod 777 dir1/file1
  424. Koristeći sličan postupak kao u poglavlju 17. odredite prava koja su potrebna da bi korisnik
  425. pomerio datoteku. Potrebno je da ispitate prava koja imate nad izvorišnim i odredišnim
  426. direktorijumom i samom datotekom.
  427. Kada završite, obrišite direktorijume dir1 i dir2: rm -rf dir1 dir2
  428. 22. Komanda rm – brisanje datoteka i poddirektorijuma
  429. Kreirajte dve datoteke, direktorijum i u njemu još dve datoteke:
  430.  touch a1 a2 b1 b2; mkdir dir1; touch dir1/c1 dir1/c2
  431. Probajte da obrišete dve datoteke sa fiegom -i: rm -i a*
  432. Probajte da obrišete dve datoteke sa flegom -f: rm -f b*
  433. Probajte da obrišete direktorijum (koji nije prazan) komandom rmdir: rmdir dir1
  434. Jeste li uspeli u tome?
  435. Probajte ovako: rm -rf dir1
  436. 23. Komanda rm – potrebni uslovi za brisanje datoteke
  437. Kreirajte direktorijum u svom home direktorijumu: mkdir dir1
  438. Kreirajte datoteku u tom poddirektorijumu: cp /etc/passwd dir1/file1
  439. Dodelite sva prava nad direktorijumom vlasniku (tj. sebi): chmod 777 dir1
  440. Dodelite sva prava nad datotekom vlasniku (tj. sebi): chmod 777 dir1/file1
  441. Koristeći sličan postupak kao u poglavlju 17. odredite prava koja su potrebna da bi korisnik
  442. obrisao datoteku. Potrebno je da ispitate prava koja imate nad direktorijumom u kome se datoteka
  443. nalazi.
  444. Kada završite, obrišite direktorijum dir1: rm -rf dir1
  445. Strana 12 / 14
  446. OS2 Vežba 2 VIŠER 2014.
  447. 24. Hard linkovi
  448. Postavite umask na 027: umask 027
  449. Napravićete hard link datoteke /etc/passwd u svom home direktorijumu.
  450. Pogledajte broj linkova originalne datoteke: ls -l /etc/passwd
  451. Napravite hard link: cp -l /etc/passwd hard_passwd
  452. Pogledajte i-nodove za obe datoteke: ls -l /etc/passwd hard_passwd
  453. Uporedite, vlasnika, grupu i prava pristupa hard linka i originalne datoteke.
  454. Pogledajte broj linkova datoteke i linka: ls -l /etc/passwd hard_passwd
  455. Obrišite link: rm hard_passwd
  456. Pogledajte broj linkova originala nakon brisanja linka: ls -l /etc/passwd
  457. 25. Simbolički linkovi
  458. Napravićete simbolički link na datoteku /etc/passwd u svom home direktorijumu.
  459. Pogledajte broj linkova originalne datoteke: ls -l /etc/passwd
  460. Napravite simbolički link : cp -s /etc/passwd sym_passwd
  461. Pogledajte i-nodove za obe datoteke: ls -l /etc/passwd sym_passwd
  462. Obratite pažnju na deskriptor simboličkog linka lrwxrwxrwx. Da li je umask “ukinuo” neka prava?
  463. Uporedite, vlasnika, grupu i prava pristupa hard linka i originalne datoteke.
  464. Pogledajte broj linkova datoteke i linka: ls -l /etc/passwd sym_passwd
  465. 26. Kopiranje sa flegom -d
  466. Probajte kopiranje sa -d flegom: cp -d sym_passwd d_passwd
  467. Probajte kopiranje bez -d flega: cp sym_passwd no_d_passwd
  468. Pogledajte kontekst za originalnu datoteku, simboličku link i dve kopije koje ste dobili i utvrdite šta
  469. se dešava kada kopirate simbolički link sa -d flegom, a šta se dobija kada kopirate link bez -d
  470. flega.
  471. ls -l /etc/passwd sym_passwd d_passwd no_d_passwd
  472. Obrišite datoteke i linkove koje ste napravili: rm sym_passwd file_d file_no_d
  473. 27. Rad sa direktorijumima – parametri komande ls
  474. Šta prikazuju sledeće dve komande:
  475.  ls /etc
  476. Strana 13 / 14
  477. OS2 Vežba 2 VIŠER 2014.
  478.  ls -l /etc
  479. Opcija -a (prikazuje skrivene datoteke):
  480.  izlistajte sadržaj: ls -l /tmp
  481.  prikažite i skrivene datoteke: ls -al /tmp
  482. Opcija -d (prikazuje kontekst direktorijuma umesto sadržaja):
  483.  prikažite kontekst: ls -ld /tmp
  484. Prikažite i-nodove sledećih datoteka: ls -i /bin/cp /tmp
  485. Probajte sadžaj direktorijuma po dubini (recursively): ls -R /usr
  486. Dereferenciranje linkova:
  487.  Prikažite kontekst linka: ls -l /dev/cdrom
  488.  Prikažite kontekst originala (dereferenciranje): ls -lL /dev/cdrom
  489. Probajte da prikažete veličine datoteka u čitljivijem formatu: ls -lh /boot
  490. Probajte da prikažete datoteke u direktorijumu /etc i da ih sortirate po veličini: ls -l -sort=S /etc
  491. 28. Navigacija po aktivnom stablu – komanda cd
  492. Pozicioniranje na home direktorijum: cd . Proverite gde ste pozicionirani: pwd
  493. Pozicioniranje na roditeljski direktorijum: cd .. . Proverite gde ste pozicionirani: pwd
  494. Pozicioniranje na direktorijum /etc: cd /etc . Proverite gde ste pozicionirani: pwd
  495. Relativna putanja do /usr: cd ../usr . Proverite gde ste pozicionirani: pwd
  496. 29. Kreiranje direktorijuma – komanda mkdir
  497. Pređite na home: cd
  498. Kreirajte jedan direktorijum: mkdir newdirectory
  499. Kreirajte stablo: mkdir 1/11/111
  500. Proverite šta je prethodna komanda napravila, tj čemu služi fleg [26].
  501. Obrišite direktorijum: rmdir newdirecory
  502. Obrišite stablo: rm -rf 1
  503. Napomena: Ukoliko se prilikom kreiranja stabla pojavi error: No such file or directory, potrebno je
  504. zadati komandu u drugačijem obliku: mkdir -p 1/11/111
  505. Strana 14 / 14
  506. OS2 Vežba 2 VIŠER 2014.
  507. (-p, --parents no error if existing, make parent directories as needed )
  508. 30. Pretrazivanje direktorijuma – komanda find
  509. Prijavite se na sistem kao root.
  510. Pronađite sve datoteke:
  511.  kreirane pre manje od 3 dana, pocev od /home: find /home -ctime -3 -print
  512.  vece od 100KB a manje od 500KB, pocev od /boot: find /boot -size +100k -size -500k
  513. -print
  514.  koje pripadaju grupi bin, pocev od /bin: find /bin -group bin -print
  515.  koje pripadaju korisniku “smer_brojIndeksa (npr: nrtd912)”, pocev od /home:
  516. find /home -user smer_brojIndeksa -print
  517.  sa pravima pristupa rw-r-----, pocev od /etc: find /etc -perm 640 -print
  518.  sve karakter uređaje u direktorijumu /dev: find /dev -type c -print
  519.  koje imaju tacno po 2 linka, pocevsi od /sbin: find /sbin -links 2 -print
  520.  sve datoteke ciji inode ima vrednost 50: find / -inum 50 -print
  521. Pitanje: kako ćete naći sve hard linkove jedne datoteke?
  522. Pitanje: kako ćete jednom komandom pronaći sve datoteke koje pripadaju jednom korisniku i
  523. obrisati ih?
  524. Odjavite se sa sistema: logout
  525. 31. Cleaning and housekeeping.
  526. Ugasite virtuelnu mašinu.
  527. Strana 15 / 14
  528.  
  529.  
  530. OS2 NRTD, Veţba 3 - ARHIVIRANJE I BACKUP
  531. © Borislav Đorđević, Borislav Krneta, Mina Kamberović, VIŠER 2014.
  532. Strana 2 / 13
  533. Teorijski deo
  534. Preporučuje se da pročitate
  535. Borislav Đorđević, Dragan Pleskonjić, Nemanja Maček, Operativni sistemi: UNIX i Linux, VETŠ 2004. Poglavlja: 9 - Arhiviranje i backup (265. strana) 12 - Instalacija softverskih paketa (318. strana)
  536. Najčešće korišćeni arhiver. Radi sa magnetnom trakom, disketama i sa arhivama u okviru datoteka.
  537. Sintaksa komande tar je: tar komanda [opcije] ime_arhive lista_datoteka
  538.  tacno jedna komanda je obavezna, a opcije se navode ukoliko su potrebne (najčešće jesu)
  539.  ime arhive je ime datoteke ili nod za uređaj
  540.  lista datoteka se zadaje u jednostavnom obliku file1,... fileN, dir1,... dirN, a upotreba dţokera je dozvoljena.
  541. Komande:
  542.  -c kreiranje nove arhive
  543.  -t listanje sadrţaja arhive
  544.  -x ekstrakcija datoteka iz arhive (extract).
  545.  -r bezuslovno aţuriranje (append) - datoteka se dodaje na kraj arhive
  546.  -u uslovno aţuriranje (update) - datoteka se dodaje na kraj arhive ako je novijeg datuma u odnosu na postojeću kopiju datoteke u arhivi
  547.  --delete brisanje datoteka iz arhive - datoteka se u arhivi označi kao da je obrisana i dalje se ne koristi prilikom listanja ili ekstrakcije, iako fizički postoji u arhivi. Datoteka se ne moţe obrisati iz arhive koja se nalazi na magnetnim trakama
  548. Opcije:
  549.  -f arch specificira datoteku ili uređaj na kome treba kreirati arhivu, odnosno na kome se nalazi arhiva
  550.  -M kreira višemedijumsku arhivu (multi-volume archive)
  551.  -p čuva prava pristupa datoteka
  552.  -P čuva apsolutnu putanju, odnosno ne briše vodeći /, koji se podrazumevano uklanja
  553.  -v opširno opisuje status prilikom izvršenja tar komande
  554.  -w interaktivni rad (od korisnika se zahteva potvrda za svaku akciju)
  555.  --verify provera ispravnosti arhive nakon upisa u nju,
  556. OS2 NRTD, Veţba 3 - ARHIVIRANJE I BACKUP
  557. © Borislav Đorđević, Borislav Krneta, Mina Kamberović, VIŠER 2014.
  558. Strana 3 / 13
  559.  - I FILE arhiviraju se datoteke pobrojane u datoteci FILE
  560.  -X FILE datoteke pobrojane u datoteci FILE se ne arhiviraju
  561.  -Z uključuje kompresiju arhive pomoću programa compress
  562.  -z uključuje kompresiju arhive pomoću programa gzip
  563.  --ignore-failed-read u slučaju oštećenja arhive, tar komanda prestaje sa radom. Ukoliko je ova opcija navedena, arhiviranje se nastavlja nakon oštećenja.
  564. Kreiranje arhive (komanda c)
  565. Navodi se ime arhive (datoteke ili uređaja) i lista datoteka koje će biti uključene u tu arhivu. Na primer:
  566.  tar cvf /dev/rst0 myfile - arhivira datoteku myfile na magnetnu traku
  567.  tar cvf myfile.tar myfile - arhivira datoteku myfile u arhivu myfile.tar
  568. Argumenat cfv ima sledeće značenje:
  569.  c je kreiranje nove arhive
  570.  v obezbeđuje poruke o izvršenju komande na ekranu
  571.  f specificira da je prvi sledeći argumenat ime tar arhive, odnosno uređaja (preporučuje se da, ukoliko je arhiva realizovana u formi datoteke, ima ekstenziju .tar.)
  572. Arhiviranje svih datoteka osim onih koje su pobrojane u nekoj datoteci (na primer, exclude.list - u ovom slučaju to su datoteke file1, file2, tempdata i datoteka u kojoj je smeštena lista - exclude.lst):
  573. $ cat exclude.list
  574. exclude.list
  575. file1
  576. file2
  577. tempdata
  578. $ tar cvfX mydata.tar exclude.list *
  579. Kombinacija tar+find:
  580. $ find -newer lastmod -print >> include.list
  581. $ tar cvf mydata.tar -I include.list
  582. OS2 NRTD, Veţba 3 - ARHIVIRANJE I BACKUP
  583. © Borislav Đorđević, Borislav Krneta, Mina Kamberović, VIŠER 2014.
  584. Strana 4 / 13
  585. Arhive koje kreira tar uključuju: vlasničke odnose (na osnovu UID i GID), prava pristupa i vremena koja opisuju pristupe i modifikacije. Kada se datoteke raspakuju iz arhive, ovi atributi se prenose iz arhive u datoteke.
  586. Listanje sadržaja arhive (komanda t)
  587. tar tf - prikazuje imena datoteka koje se nalaze u arhivi
  588. tar tvf - prikazuje i ostale atribute
  589. Listanje se koristi za pregledanje sadrţaja arhive i određivanje punog imena datoteke koje je neophodno za ekstrakciju pojedinačnih datoteka iz arhive.
  590. $ tar tf myfiles.tar
  591. 1.txt
  592. acme/
  593. acme/1.txt
  594. $ tar tvf myfiles.tar
  595. -rw-rw-r-- nm/nm 20 2003-10-24 15:42:06 1.txt
  596. drwxrwxr-x nm/nm 0 2003-10-24 11:08:17 acme/
  597. -rwxrwxr-x nm/nm 125 2003-10-24 11:07:50 acme/1.txt
  598. Ekstrakcija datoteka (komanda x)
  599. Ukoliko se ne navede lista datoteka, vrši se ekstrakcija cele arhive.
  600. Ukoliko se navede lista, iz arhive se izvlače pojedinačne datoteke, grupe datoteka i direktorijumi.
  601. $ tar xvf myfiles.tar
  602. Arhiviranje i kompresija
  603. gzip komprimuje datoteku a.a u datoteku a.a.gz pri čemu se čuvaju vlasnički odnosi, prava pristupa i vreme poslednje modifikacije. Kompimovane datoteke se mogu vratiti u originalni oblik pomoću programa gunzip, odnosno gzip -d. Sadrţaj kompresovanih tekstualnih datoteka moţe se pregledati sa zcat i zless bez prethodne dekompresije. Program gzip ne radi arhiviranje - svaka datoteka se kompresuje odvojeno. Komprimovane arhive pravi sprega tar+gzip.
  604. OS2 NRTD, Veţba 3 - ARHIVIRANJE I BACKUP
  605. © Borislav Đorđević, Borislav Krneta, Mina Kamberović, VIŠER 2014.
  606. Strana 5 / 13
  607. Arhiviranje: cpio (copy in and out)
  608. cpio sluţi za:
  609.  arhiviranje datoteka u cpio formate arhiva
  610.  prenos čitavih stabala datoteka sa jednog mesta na drugo.
  611. cpio ima 3 načina rada (specificiraju se obaveznom komandom i,o ili p):
  612.  copy-out: cpio arhivira datoteke, odnosno kopira ih u arhivu.
  613. cpio -o[opcije] >arhiva <lista
  614. Parametar lista je tekstualna datoteka, u kojoj je u svakoj liniji navedena jedna datoteka.
  615. cpio se moţe spregnuti sa find ili ls koje će kreirati listu datoteka za cpio komandu
  616.  copy-in: cpio vadi datoteke iz arhive
  617. cpio -i[opcije] <arhiva
  618. Ukoliko se navedu pojedinačne datoteke onda će samo one biti raspakovane iz arhive.
  619. Specijalan oblik (copy-test) koji lista sadrţaj arhive je: cpio -it[opcije] <archiva
  620.  copy-pass: cpio kopira datoteke u odredišni direktorijum
  621. Datoteke pobrojane u datoteci lista kopiraju se u odredišni direktorijum:
  622. cpio -p[opcije] /odredišni_direktorijum <lista
  623. VAŢNA NAPOMENA: Tar NE MOŢE da arhivira nodove. Tar format se ne moţe koristiti za specijalne datoteke (blok ili karakter uređaji) Cpio MOŢE da arhivira i kopira nodove.
  624. GNU cpio program podrţava rad sa tar arhivom. Prilikom ekstrakcije iz arhive cpio automatski prepoznaje tip arhive.
  625. Opcije:
  626.  -A datoteke se dodaju na kraj arhive (opcija funkcioniše jedino u izlaznom reţimu rada)
  627.  -B veličina ulazno-izlaznog bloka postavlja se na 512x10=5120 bajtova. U protivnom, komanda radi sa blokom veličine 512 bajtova, što negativno utiče na performanse
  628.  -c isto što i "-H newc", koristi se novi SVR4 format arhive
  629.  -C IOSIZE veličina ulazno-izlaznog bloka postavlja se na IO-SIZE bajtova
  630.  -d direktorijumi se kreiraju uvek kada je to potrebno
  631. OS2 NRTD, Veţba 3 - ARHIVIRANJE I BACKUP
  632. © Borislav Đorđević, Borislav Krneta, Mina Kamberović, VIŠER 2014.
  633. Strana 6 / 13
  634.  -F file zadaje se ime arhive, što je ekvivaletno sa >file
  635.  -m vreme poslednje modifikacije se čuva prilikom kreiranja novih datoteka
  636.  -t copy-test mode, odnosno listanje sadrţaja arhive (radi samo u ulaznom reţimu)
  637.  -u bezuslovno kopiranje/arhiviranje. Do transfera dolazi bez obzira koja je datoteka novija
  638.  -v obezbeđuje prikazivanje statusa, odnosno prikazuje datoteke koje se kopiraju
  639.  -H FRMT specificiranje formata arhive: bin (stari binarni format), newc (novi prenosivi SRV4 format koji podrţava sisteme datoteka sa više od 65536 i-node čvorova), crc (novi prenosivi SRV4 format sa proverom ispravnosti zapisa), tar (stari tar format), ustar (POSIX.1 tar format).
  640. Kako se koristi cpio?
  641. U copy-out reţimu, cpio kreira arhivu i kopira datoteke u nju, npr: cpio –ocvB >arh1 <lista1
  642.  copy-out reţim (–o), arhiva se kreira u vidu datoteke pod imenom arh1, u arhivu se kopiraju sve datoteke navedene u datoteci lista1, na ekranu prikazuju poruke o izvršenju komande (-v). Koristi se podrazumevani bin format, a veličina I/O bloka je 5120 bajtova (-B).
  643. U copy-in reţimu, cpio lista arhivu ili kopira jednu ili više datoteka iz arhive u FS, npr: cpio –iv <arh1
  644.  copy-in reţim (-i), ekstrakcija svih datoteka iz arhive arh1, na ekranu se prikazuju poruke o izvršenju komande.
  645. Oblik komande koji se preporučuje za copy-in reţim: cpio –ic(t)vd(u)mB <arhiva
  646.  Flegovi t i u se zadaju po ţelji, a ostali argumenti se gotovo redovno koriste.
  647. Primer copy-test reţima (listanje sadrţaja arhive, argument –it): cpio –itv <arh1
  648. U copy-pass reţimu, cpio kopira datoteke u odredišni direktorijum, pri čemu se direktorijumi kopiraju
  649. rekurzivno, odnosno po dubini. Na primer: cpio –pdumv /home/jsmith/new <lista2
  650.  U ovom primeru datoteke koje su pobrojane u datoteci lista2 kopiraju se na direktorijum /home/jsmith/new, kopiranje je bezuslovno (fleg u), komanda prikazuje poruke o izvršenju na ekranu (fleg v), a vreme poslednje modifikacije datoteka se čuva (fleg m).
  651. OS2 NRTD, Veţba 3 - ARHIVIRANJE I BACKUP
  652. © Borislav Đorđević, Borislav Krneta, Mina Kamberović, VIŠER 2014.
  653. Strana 7 / 13
  654. Korišćenje cpio povezano sa ls ili find:
  655.  arhiviranje svih datoteka sa tekuće grane u arh1: ls -1 | cpio –ocvB >arh1
  656.  arhiviranje celog direktorijuma dir1 u arh1: find dir1 -print | cpio –ocvB >arh2
  657.  alternativni oblik prethodne komande: find dir1 -cpio -ocvB >arh2
  658. Praktični zadaci
  659. 1. Pripremite sistem za rad
  660. Kreirajte novi korisnički nalog koristeči "User Accounts" ili iz odgovarajuće shell komande. Parametri su sledeći:
  661.  username: smer_brojIndeksa (npr: nrtd912)
  662.  password: 1Password2
  663.  full name: Vaše ime
  664.  home direktorijum: /home/smer_brojIndeksa (npr: /home/ nrtd912)
  665.  shell: /bin/bash
  666. Odjavite se sa sistema.
  667. Prijavite se na sistem kao novokreirani korisnik.
  668. Pokrenite terminal.
  669. 2. tar: kreiranje i uslovno/bezuslovno ažuriranje arhive
  670. Na home direktorijumu treba napraviti tri datoteke (a.a, b.b i c.c) i upisati neki tekst u njih. Zatim se ove tri datoteke arhiviraju u simulacionu datoteku proba.tar. Nakon kreiranja arhive, izlistati sadrţaj arhive pomoću tar tvf komande. Zatim se sa postojećom arhivom demonstrira komanda za aţuriranje u i komanda za dodavanje na kraj r. Najpre će se isprobati –u (update) komanda u dva slučaja: u prvom slučaju ukoliko su sve datoteke (a.a, b.b i c.c) nepromenjene, a u drugom slučaju ukoliko se promeni sadrţaj samo jedne datoteke, na primer a.a. Potom će se isprobati r komanda, dodavanjem nepromenjene datoteke b.b komandom –r (append). Obratititi paţnju gde se u arhivi nalaze nove datoteke!
  671. OS2 NRTD, Veţba 3 - ARHIVIRANJE I BACKUP
  672. © Borislav Đorđević, Borislav Krneta, Mina Kamberović, VIŠER 2014.
  673. Strana 8 / 13
  674. Na svom home direktorijumu pripremite tri datoteke koje ćete arhivirati:
  675. cd
  676. ls -l / >a.a
  677. cp /etc/passwd b.b
  678. cp /etc/hosts c.c
  679. Kreirajte arhivu i u nju dodajte te tri datoteke: tar cvf proba.tar a.a b.b c.c
  680. Izlistajte sadrţaj arhive: tar tvf proba.tar
  681. Pokušajte da aţurirate arhivu sa nepromenjenom datotekom: tar uvf proba.tar a.a
  682. Izlistajte sadrţaj arhive: tar tvf proba.tar
  683. Da li je transfer izvršen, tj. da li je u arhivi nešto promenjeno? [1.]
  684. Promenite sadrţaj datoteke a.a komandom: cp /etc/fstab a.a
  685. Aţurirajte arhivu sa datotekom sa promenjenim sadrţajem: tar uvf proba.tar a.a
  686. Izlistajte sadrţaj arhive: tar tvf proba.tar
  687. Odredite gde se u arhivi nalazi datoteka a.a sa novim sadrţajem. Da li je stara datoteka a.a izbrisana? [2.]
  688. Bezuslovno dodajte identičnu datoteku u arhivu: tar rvf proba.tar b.b
  689. Izlistajte sadrţaj arhive: tar tvf proba.tar
  690. Obrišite datoteku c.c sa tekućeg direktorijuma: rm c.c
  691. Izvucite datoteku c.c iz arhive: tar xvf proba.tar c.c
  692. Obrišite datoteke: rm a.a b.b c.c proba.tar
  693. Zaključak:
  694.  datoteka se uvek dodaje isključivo na kraj arhive
  695.  komanda -u dodaje datoteke pod uslovom da su izmenjene,
  696.  komanda -r uvek dodaje datoteke, bez obzira na to da li su izmenjene ili ne.
  697. OS2 NRTD, Veţba 3 - ARHIVIRANJE I BACKUP
  698. © Borislav Đorđević, Borislav Krneta, Mina Kamberović, VIŠER 2014.
  699. Strana 9 / 13
  700. 3. tar: ekstrakcija datoteka iz arhive
  701. Prilikom ekstrakcije, ime datoteke mora da se navede onako kako je navedeno u arhivi, uključujući i putanju ukoliko je ima. Datoteka se zove a, ali se u arhivi nalazi sa putanjom svoje roditeljske grane dir1. Primer ilustruje bezuspešan pokušaj ekstrakcije datoteke a po imenu, i uspešan pokušaj ekstrakcije iste datoteke sa navođenjem putanje pre imena.
  702. Pripremite datoteke:
  703. cd
  704. mkdir dir1
  705. cp /etc/fstab dir1/a.a
  706. cp /etc/passwd dir1/b.b
  707. cp /etc/hosts dir1/c.c
  708. Napravite arhivu i u nju dodajte datoteke: tar cvf proba1.tar dir1/a.a dir1/b.b dir1/c.c
  709. Uklonite originalne datoteka: rm dir1/*
  710. Probajte da izvučete datoteku a iz arive bez navođenja putanje: tar xvf proba1.tar a.a
  711. Jeste li uspeli u tome? [3.] Izlistajte sadţaj direktorijuma dir1: ls –l dir1
  712. Probajte sad to isto, ali navedite putanju: tar xvf proba1.tar dir1/a.a
  713. Jeste li uspeli u tome? [4.] Izlistajte sadţaj direktorijuma dir1: ls –l dir1
  714. Obrišite direktorijum dir1: rm -rf dir1
  715. 4. tar: arhiviranje celog direktorijuma
  716. Za arhiviranje celog direktorijuma dovoljno je navesti ime direktorijuma u listi datoteka tar komande, a tar će arhivirati čitavo stablo po dubini sa svim pripadajućim datotekama. Za potrebe ovog primera potrebno je na home direktorijumu napraviti direktorijum dir1 i u njemu tri datoteke (a.a, b.b i c.c). Arhivirati ceo direktorijum dir1 u simulacionu datoteku arh1.tar. Obrisati dir1 sa home direktorijuma, a potom raspakovati arhivu arh1. Kreirati dir2 na home direktorijumu, preći na dir2 i u njemu raspakovati arhivu arh1. Pogledati gde su datoteke raspakovane.
  717. OS2 NRTD, Veţba 3 - ARHIVIRANJE I BACKUP
  718. © Borislav Đorđević, Borislav Krneta, Mina Kamberović, VIŠER 2014.
  719. Strana 10 / 13
  720. Priprema direktorijuma i datoteka:
  721. cd
  722. mkdir dir1
  723. cp /etc/fstab dir1/a.a
  724. cp /etc/passwd dir1/b.b
  725. cp /etc/hosts dir1/c.c
  726. Arhiviranje celog direktorijuma: tar cvf arh1 dir1
  727. Izlistajte sadrţaj arhive: tar tvf arh1
  728. Obrišite original: rm dir1/*
  729. Ekstrakcija celog direktorijuma: tar xvf arh1 dir1
  730. Ekstrakcija celog direktorijuma na drugo mesto (dir2):
  731. mk dir2
  732. cd dir2
  733. tar xvf ../arh1 dir1
  734. Pregledajte kako su raspakovane datoteke:
  735. cd
  736. ls -l dir1
  737. ls -l dir2
  738. ls -l dir2/dir1
  739. Obrišite direktorijume dir1 i dir2: rm -rf dir1 dir2
  740. Zaključak:
  741.  prilikom ekstrakcije arhive treba obratiti paţnju na tekuću poziciju, odnosno tekući direktorijum.
  742.  direktorijumi koje arhiva sadrţi biće kreirani u njemu, ukoliko tamo već ne postoje
  743.  u novonastale (i/ili postojeće) direktorijume biće raspakovane odgovarajuće datoteke
  744. OS2 NRTD, Veţba 3 - ARHIVIRANJE I BACKUP
  745. © Borislav Đorđević, Borislav Krneta, Mina Kamberović, VIŠER 2014.
  746. Strana 11 / 13
  747. 5. tar: arhiviranje i gzip kompresija
  748. Za potrebe ovog primera na home direktorijumu treba napraviti tri datoteke (a.a, b.b i c.c). Arhivirati ih u simulacionu datoteku proba.tar bez kompresije, potom u simulacionu datoteku proba.tar.Z uz korišćenje programa compress, i na kraju u simulacionu datoteku proba.tar.gz uz korišćenje programa gzip. Uporediti veličine novonastalih arhiva. Obrisati datoteke a.a, b.b i c.c i raspakovati jednu kompresovanu arhivu.
  749. Priprema datoteka:
  750. cd
  751. cp /etc/fstab a.a
  752. cp /etc/passwd b.b
  753. cp /etc/hosts c.c
  754. Kreiranje arhiva bez kompresije: tar cf proba.tar a.a b.b c.c
  755. Kreiranje arhiva sa gzip programom: tar cfz proba.tar.gz a.a b.b c.c
  756. Izlistajte sadrţaj direktorijuma i uporedite veličine arhiva: ls -l
  757. Obrišite polazne datoteke: rm a.a b.b c.c
  758. Ekstrakcija datoteka iz komprimovane arhive: tar xvfz proba.tar.gz
  759. Obrišite datoteke i arhive: rm a.a b.b c.c proba.*
  760. 6. cpio: copy-in i copy-out (kreiranje arhive, listanje i ekstrakcija)
  761. Na home direktorijumu treba napraviti tri datoteke (a.a, b.b i c.c) i upisati neki tekst u njih. Zatim se kreira lista datoteke lista1 koja će sadrţati te tri datoteke, a potom se na bazi liste obavi arhiviranje u datoteku proba1. Nakon toga treba obrisati datoteke a.a, b.b, c.c i lista1. Arhivu treba testirati, a zatim je raspakovati.
  762. Priprema datoteka:
  763. cd
  764. cp /etc/fstab a.a
  765. cp /etc/passwd b.b
  766. cp /etc/hosts c.c
  767. OS2 NRTD, Veţba 3 - ARHIVIRANJE I BACKUP
  768. © Borislav Đorđević, Borislav Krneta, Mina Kamberović, VIŠER 2014.
  769. Strana 12 / 13
  770. Kreiranje liste:
  771. cat >lista
  772. a.a
  773. b.b
  774. c.c
  775. <CTRL-D>
  776. Kreiranje arhive (copy-out): cpio –ocvB >proba1 <lista1
  777. Brisanje datoteka koje ste arhivirali: rm a.a b.b c.c lista1
  778. Testiranje arhive (copy-test): cpio –itvB <proba1
  779. Ekstrakcija kompletne arhive: cpio –ivB <proba1
  780. Provera šta je izvađeno iz arhive: ls -l
  781. Obrišite sve što ste napravili: rm a.a b.b c.c proba1
  782. 7. cpio: cpio, ls i find
  783. Na home direktorijumu treba napraviti tri datoteke (a.a, b.b i c.c) i upisati neki tekst u njih. Datoteke treba arhivirati u arhivu proba2 pomoću pipeline mehanizma komande ls i cpio, a zatim u arhivu proba3 pomoću pipeline mehanizma komandi find i cpio.
  784. Priprema datoteka:
  785. cd
  786. cp /etc/fstab a.a
  787. cp /etc/passwd b.b
  788. cp /etc/hosts c.c
  789. Kreiranje arhive (pipeline ls i cpio): ls -1 | cpio –ocvB >proba2
  790. Kreiranje arhive (pipeline find i cpio): find . –print | cpio –ocvB >proba3
  791. Listanje sadrţaja arhiva:
  792. cpio –itvB <proba2
  793. cpio –itvB <proba3
  794. Obrišite sve što ste napravili: rm a.a b.b c.c proba2 proba3
  795. OS2 NRTD, Veţba 3 - ARHIVIRANJE I BACKUP
  796. © Borislav Đorđević, Borislav Krneta, Mina Kamberović, VIŠER 2014.
  797. Strana 13 / 13
  798. 8. cpio: kopiranje direktorijuma u copy-pass režimu
  799. Na home direktorijumu treba kreirati dva direktorijuma dir1 i dir2, a u direktorijumu dir1 poddirektorijum dir1/dir11. Zatim kreirati datoteke dir1/a.a i dir1/dir11/b.b. Kopirati u copy-pass reţimu sadrţaj direktorijuma dir1 u dir2 i rekurzivno izlistati sadrţaj direktorijuma dir2.
  800. Kreiranje direktorijuma i datoteka:
  801. cd
  802. mkdir –p dir1/dir11 dir2
  803. cp /etc/fstab dir1/a.a
  804. cp /etc/hosts dir1/dir11/b.b
  805. pređite na dir1: cd dir1
  806. copy-pass reţim: find * –print | cpio –pdum ~/dir2
  807. Listanje dir2: ls –R ~/dir2
  808. Da li je cpio iskopirao kompletnu direktorijumsku strukturu? [5.]
  809. 9. Cleaning and housekeeping.
  810. Prijavite se na sistem OS2. Pokrenite terminal. Obrišite korisnika korisnik i njegov lični direktorijum:
  811.  userdel smer_brojIndeksa (npr: nrtd912)
  812.  rm -rf /home/smer_brojIndeksa (npr: /home/ nrtd912)
  813. Ugasite virtuelnu mašinu.
  814.  
  815.  
  816.  
  817. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  818. Strana 1 / 20
  819. Uvod
  820. U prethodnom semestru obradili smo primere za sistemske pozive open, read, write, lseek. U
  821. ovom predavanju daćemo dopunu sa primerima za sledeće sistemske pozive za:
  822.  vektorsko čitanje i pisanje (writev, readv)
  823.  brzi prenos podataka (sendfile)
  824.  čitanje sadržaja simboličkih linkova (readlink)
  825.  zaključavanje datoteka (fcntl)
  826.  prikazivanje informacija iz i-node strukture datoteke (stat)
  827.  proveru prava pristupa (access)
  828. Vektorsko čitanje i pisanje
  829. Poziv write uzima kao argumente
  830.  deskriptor datoteke u koju se upisuje
  831.  pokazivač na početak bafera podataka
  832.  dužinu tog bafera
  833. Poziv write upisuje kontinualnu oblast memorije u deskriptor datoteke. Program će ponekad trebati da zapiše nekoliko stavki podataka, a svaka se nalazi u različitim delovima memorije. Da bi koristio jedan write poziv, program mora ili da kopira sve stavke podatka u kontinualni deo memorije, a to dovodi do dodatnih CPU-memorijskih ciklusa, ili bi program morao da napravi više write poziva, što je takoĎe neefikasno.
  834. Za neke aplikacije, višestruki write pozivi su neefikasni ili nepoželjni. Na primer, kada pišemo na mrežni soket, dve write funkcije mogu da pruzrokuju da dva paketa budu poslata kroz mrežu, a ti isti podaci, mogu biti poslati u jednom paketu, preko jednog poziva write.
  835. Poziv writev omogućava vam da više diskontinualnih regiona memorije upišete u deskriptor datoteke u jednoj operaciji. Ovo se naziva vektorsko pisanje (vector write). Ono što treba dodatno da uradimo, prilikom korišćenja poziva writev, je to da moramo da podesimo strukturu podataka, specificiranjem početka i dužine svakog dela memorije. Ova struktura podataka se naziva niz (array)
  836. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  837. Strana 2 / 20
  838. elemenata strukture iovec. Svaki element specificira jedan deo memorije za upis, pri čemu polja iov_base i iov_len odreĎuju početnu adresu dela memorije i njenu dužinu. Ako unapred znate kolika vam oblast treba, možete prosto da deklarišete niz promenljivih strukture iovec; ako broj regiona može da varira, onda morate da dodelite dinamički niz.
  839. Ulazni parametri funkcije writev su:
  840.  deskriptor datoteke u koju se upisuje
  841.  niz elemenata strukture iovec
  842.  broj elemenata u nizu
  843. Povratna vrednost je ukupan broj upisanih bajtova.
  844. Program write-arg.c (listing 1) upisuje argumente sa komandne linije u datoteku, koristeći jedan writev poziv. Prvi argument je ime datoteke, a drugi i svi ostali argumenti se upisuju u datoteku sa tim imenom, i to svaki u posebnom redu. Program alocira niz sa elementima structure iovec koji je ima duplo više elemenata od broja argumenata koji se upisuju – za svaki argument program upisuje tekst svojih argumenata, kao i karakter za novi red. Pošto ne znamo unapred broj argumenata, niz se alocira korišćenjem funkcije malloc. #include <fcntl.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/uio.h> #include <unistd.h> int main (int argc, char* argv[]) { int fd; struct iovec* vec; struct iovec* vec_next; int i; /* Trebaće nam "bafer" koji sadrži karaktere za novi red. Koristite uobičajene char promenljive za to */ char newline = '\n'; // Prvi argument u komandnoj liniji je ime datoteke
  845. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  846. Strana 3 / 20
  847. char* filename = argv[1]; /* Preskačemo prva dva elementa sa liste argumenata. Element 0 je ime programa, a element 1 je ime datoteke */ argc -= 2; argv += 2; /* Dodeljivanje niza elemenata iovec. Trebaju nam po dva za svaki element liste argumenata, jedan za sam text, a drugi za novi red */ vec = (struct iovec*) malloc (2*argc*sizeof (struct iovec)); // Petlja preko liste argumenata, pravljenje iovec upisa vec_next = vec; for (i = 0; i < argc; ++i) { // Prvi element je tekst samog argumenta vec_next->iov_base = argv[i]; vec_next->iov_len = strlen (argv[i]); ++vec_next; /* Drugi red je jedan karakter za novi red. U redu je ako višestruki elementi iz niza struktura iovec pokazuju na isti deo memorije*/ vec_next->iov_base = &newline; vec_next->iov_len = 1; ++vec_next; } // Pisanje argumenata u datoteku fd = open (filename, O_WRONLY | O_CREAT); writev (fd, vec, 2 * argc); close (fd); free (vec); return 0; }
  848. Listing 1 (write-arg.c) Pisanje liste argumenata u datoteku koristeći writev
  849. Prevedite program i pokrenite ga navodeći output file kao argument.
  850. $ gcc –o write-arg write-arg.c
  851. $ ./write-arg outputfile "bora" "marko" "dragan" "nemanja"
  852. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  853. Strana 4 / 20
  854. Deklarišemo izlaznu datoteku pod imenom outputfile i tri tekstualna niza koji su ulazni argumenti za writew funkciju.
  855. Rezultat izvršavanja programa je:
  856. $ cat outputfile
  857. bora
  858. marko
  859. dragan
  860. nemanja
  861. Brzi prenosi podataka
  862. Sistemski poziv sendfile, omogućava efikasan mehanizam kopiranja podataka iz jednog deskriptora datoteke u drugi. Deskriptori mogu biti otvoreni za disk datoteke, sokete ili druge ureĎaje.
  863. Da bi se kopiralo iz jednog deskriptora datoteke u drugi, program dodeljuje bafer fiksne veličine, kopira neke podatke iz jednog deskriptora u bafer, a zatim iz istog bafera, upisuje u drugi deskriptor, a to ponavlja sve dok svi podaci ne budu kopirani. Ovo je neefikasno i po pitanju vremena i prostora, zato što zahteva dodatnu memoriju za bafer i pravi suvišnu kopiju podataka u baferu.
  864. Korišćenjem funkcije sendfile, posrednički bafer se eliminiše.
  865. Poziv sendfile ima sledeće ulazne parametre:
  866.  deskriptor datoteke u koji treba da se upisuje
  867.  deskriptor datoteke sa koga se čita
  868.  pokazivač za promenljivu pomeraja (offset), koja ukazuje odakle treba da počne iz ulazne datoteke
  869.  broj bajtova koje treba prebaciti.
  870. Pomeraj (offset) promenljiva sadrži pomeraj u ulaznoj datoteci od koga čitanje treba da počne (0 označava početak datoteke) i ova promenljiva se ažurira se na poziciju u datoteci, nakon transfera. Vrednost koju sendfile vraća je broj prebačenih bitova. Uključite <sys/sendfile.h> u vaš program
  871. ako se koristi funkcija sendfile.
  872. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  873. Strana 5 / 20
  874. Program copy.c (listing 2) je jednostavna ali veoma efikasna primena kopiranja datoteka.
  875. Kada se ovaj program pozove sa dva imena za datoteke na komandnoj liniji, program kopira sadržaj prve datoteke u drugu. Program koristi fstat da odredi veličinu izvorne tj. prve datoteke u bajtovima. #include <fcntl.h> #include <stdlib.h> #include <stdio.h> #include <sys/sendfile.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> int main (int argc, char* argv[]) { int read_fd; int write_fd; struct stat stat_buf; off_t offset = 0; // Otvaranje ulazne datoteke read_fd = open (argv[1], O_RDONLY); // Dobijanje veličine ulazne datoteke fstat (read_fd, &stat_buf); /*Otvaranje izlazne datoteke za upis, sa istim dozvolama kao za ulaznu datoteku*/ write_fd=open(argv[2], O_WRONLY | O_CREAT, stat_buf.st_mode); // Brzo kopiranje sendfile (write_fd, read_fd, &offset, stat_buf.st_size); // Zatvaranje datoteka close (read_fd); close (write_fd); return 0; }
  876. Listing 2 (copy.c) Kopiranje datoteke pomoću sendfile
  877. Prevedite i pokrenite program.
  878. $ gcc –o copy copy.c
  879. $ ./copy /etc/termcap /tmp/termcap.1
  880. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  881. Strana 6 / 20
  882. Deklarišemo ulaznu datoteku /etc/termcap i izlaznu datoteku /tmp/termcap.1. Prva datoteka predstavlja nešto veću datoteku na operativnom sistemu Linux, a /tmp direktorijum je izabran zato što korisnik tamo ima pravo da upisuje svoje datoteke.
  883. Rezultat izvršavanja programa je:
  884. $ ls –l /tmp/termcap.1
  885. Videćete novokreiranu datoteku termcap.1 koju je kreirao sistemski poziv sendfile. Uporedite vremena. Prvo ćemo obrisati datoteku:
  886. $ rm /tmp/termcap.1
  887. Merimo vreme za klasičnu cp komandu
  888. $ time cp /etc/termcap /tmp/termcap.1
  889. Potom ćemo ponovo obrisati datoteku
  890. $ rm /tmp/termcap.1
  891. Merimo vreme za klasičnu copy program koji koristi sendfile sistemski poziv
  892. $ time ./copy /etc/termcap /tmp/termcap.1
  893. Uporedite ta dva vremena.
  894. Sistemski poziv sendfile može biti iskorišćen na mnogim primenama da bi se kopiranje učinilo efikasnijim. Jedan dobar primer je na Web serveru ili nekom drugom mrežnom daemonu, koji prenosi sadržaj datoteke, preko mreže do klijent programa. Zahtev se obično prima sa soketa klijent-kompjutera. Server program otvara lokalnu datoteku da bi dobio podatke i upisuje sadržaj datoteke na mrežni soket. Korišćenje funkcije sendfile može znatno da ubrza ovu operaciju. Treba preduzeti i druge korake da bi se mrežni transfer učinio što efikasnijim, kao što je pravilno postavljanje soket parametara. Ali ovo je van teme ove lekcije.
  895. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  896. Strana 7 / 20
  897. Čitanje sadržaja simboličkih linkova
  898. Sistemski poziv readlink obezbeĎuje ime objekta na koji pokazuje simbolički link. Uzima tri argumenta:
  899.  putanju do simboličkog linka
  900.  bafer koji prima putanju do datoteke na koju pokazuje link, original datoteke (target)
  901.  dužinu tog bafera.
  902. Poziv readlink ne stavlja null karakter (‘\0’) koji označava kraj stringa, u ovom slučaju u bafer, koji sadrži ime originalne datoteke (target). Ali umesto toga, readlink vraća broj karaktera koji upisuje u bafer, tako da je upis oznake kraja bafera krajnje jednostavan (samo dodate nulu).
  903. Ako prvi argument za readlink pokazuje na datoteku koja nije simbolički link, readlink postavlja vrednost errno na EINVAL i vraća vrednost -1.
  904. Program print-symlink.c (listing 3) prikazuje put do datoteke na koju pokazuje simbolički link (simbolički link se unosi preko komandne linije). #include <errno.h> #include <stdio.h> #include <unistd.h> int main (int argc, char* argv[]) { char target_path[256]; char* link_path = argv[1]; // Pokušaj da se pročita ono na šta pokazuje simbolički link int len = readlink (link_path, target_path, sizeof (target_path)); if (len == -1) { // Poziv je propao if (errno == EINVAL) // Ovo nije simbolički link fprintf (stderr, "%s nije simbolicki link\n", link_path); else // U pitanju je drugi problem; ispisi generičku poruku perror ("readlink"); return 1; }
  905. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  906. Strana 8 / 20
  907. else { // Niz target_path se mora završiti NULL karakterom target_path[len] = '\0'; printf ("%s\n", target_path); // Ispišite je return 0; } }
  908. Listing 3 (print-symlink.c) Prikaz puta do datoteke na koju pokazuje simbolički link
  909. Prevedite program:
  910. $ gcc –o print-symlink print-symlink.c
  911. Evo primera kako možete napraviti simbolički link i iskoristiti program print-symlink da ga pročitate: $ ln -s /usr/bin/wc my_link
  912. $ ./print-symlink my_link
  913. /usr/bin/wc
  914. Zakjučavanje
  915. Sistemski poziv fcntl je način da se pristupi nekim naprednim operacijama na deskriptorima datoteka. Prvi argument za fcntl je deskriptor otvorene datoteke, a drugi je vrednost koja označava koja operacija treba da bude izvršena. Za neke operacije, fcntl uzima dodatni argument. Ovde ćemo opisati jednu od najkorisnijih fcntl operacija, zaključavanje datoteka (file locking). Pogledajte fcntl man stranu, za informacije o ostalim operacijama.
  916. Fcntl sistemski poziv omogućava programu da postavi zaključavanje za čitanje (read-lock) ili zaključavanje za upis (write-lock) na datoteku, što je u nekoj meri slično mutex semaforima. Zaključavanje za čitanje (read lock) se postavlja na deskriptor datoteke sa koga se može čitati, a zaključavanje za upis (write-lock) se postavlja na deskriptor datoteke u koji se može pisati. Više od jednog procesa može držati zaključavanje za čitanje (read-lock) na istoj datoteci u isto vreme, ali samo jedan proces može držati zaključavanje za upis (write-lock). Ista datoteka ne može biti zatvorena (zaključan) i za čitanje i za pisanje.
  917. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  918. Strana 9 / 20
  919. Zapamtite da zaključavanje zapravo ne sprečava ostale procese od otvaranja datoteke, čitanja iz nje ili pisanja po njoj, sem ako i oni takoĎe ne traže zaključavanje sa fcntl.
  920. Da bi se postavilo zaključavanje (lock) na datoteku, prvo napravite i anulirajte strukturu flock. Postavite l_type polje strukture na F_RDLCK za zaključavanje za čitanje (read-lock) ili F_WRLCK za zaključavanje za upis (write-lock). Zatim pozovite fcntl, sa tri ulazna argumenta:
  921.  deskriptor te datoteke
  922.  F_SETLCKW je operacijski kôd
  923.  pokazivač na struct flock promenljivu.
  924. Ako neki drugi proces drži zaključavanje koje sprečava primenu novog zaključavanja, fcntl se blokira dok se to zaključavanje ne ukloni.
  925. Program lock-file.c (listing 4) otvara datoteku za pisanje, a njeno ime se daje u komandnoj liniji, a onda se zaključavanje za upis (write-lock) postavlja na tu datoteku. Program čeka da korisnik pritisne taster <enter>, a onda otključava i zatvara datoteku. #include <fcntl.h> #include <stdio.h> #include <string.h> #include <unistd.h> int main (int argc, char* argv[]) { char* file = argv[1]; int fd; struct flock lock; printf ("Otvaranje datoteke %s\n", file); // Otvaranje deskriptora datoteke. fd = open (file, O_WRONLY); printf ("Zakljucavanje\n"); // Inicijalizacija flock strukture. memset (&lock, 0, sizeof(lock)); lock.l_type = F_WRLCK; // Postavljanje zabrane pisanja (write lock) na datoteku. fcntl (fd, F_SETLKW, &lock);
  926. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  927. Strana 10 / 20
  928. printf ("Zakljucano! Pritisni Enter za otkljucavanje... "); // Čeka na Enter. getchar (); printf ("Otključavanje\n"); // Otključavanje lock.l_type = F_UNLCK; fcntl (fd, F_SETLKW, &lock); close (fd); return 0; }
  929. Listing 4 (lock-file.c) Postavlja zabranu pisanja korišćenjem fcntl
  930. Prevedite i pokrenite program navodeći ime datoteke /tmp/test-file kao argument:
  931. $ gcc -o lock-file lock-file.c
  932. $ touch /tmp/test-file
  933. $ ./lock-file /tmp/test-file
  934. Otvaranje datoteke /tmp/test-file
  935. Zakljucavanje
  936. Zakljucano! Pritisni Enter za otkljucavanje...
  937. Onda u drugom prozoru pokušajte da pokrenete lock-file, ponovo na istoj datoteci.
  938. $ ./lock-file /tmp/test-file
  939. Otvaranje datoteke /tmp/test-file
  940. Zakljucavanje
  941. Primetimo da je druga instanca blokirana dok pokušava da zaključa datoteku. Vratite se na prvi prozor i pritisnite Enter. Dobićete poruku:
  942. Otključavanje
  943. Program koji je otvoren u drugom prozoru odmah dobija šansu da obavi zaključavanje za upis (write-lock).
  944. Ako želite da se fcntl ne blokira, ako poziv ne može da dobije zaključavanje koji ste tražili, koristite F_SETLK umesto F_SETLKW. Ako se zaključavanje ne može postići, fcntl odmah vraća –1.
  945. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  946. Strana 11 / 20
  947. Linux obezbeĎuje još jednu primenu zaključavanja datoteka pozivom flock. Primena fcntl ima jednu veliku prednost: radi sa NFS datotekama (ukoliko je NFS server relativno nov i ispravno konfigurisan). Ako imate pristup preko dve mašine koje aktiviraju isti sistem datoteka preko NFS, možete ponoviti prethodni primer koristeći dve različite mašine. Pokrenite lock-file na jednoj mašini, specificirajući datoteku na NFS i pokrenite ga ponovo na drugoj mašini, specificirajući istu datoteku. NFS budi drugi program kada se zaključavanje na upis oslobodi, od strane prvog programa.
  948. Informacije iz i-node strukture datoteke
  949. Korišćenjem poziva open i read, možete videti sadržaj datoteke. Ali šta je sa ostalim informacijama? Na primer, pozivanje ls -l prikazuje, informacije kao što su veličina datoteke, poslednje promene u datoteci, dozvole i vlasnika datoteke.
  950. Funkcija stat nam daje te informacije o datoteci. Funkcija stat ima dva ulazna argumenta:
  951.  putanja (path) do datoteke koji vas zanima
  952.  pokazivač na promenljivu tipa struct stat
  953. Ako stat odradi sve uspešno, onda vraća vrednost 0 i popunjava polja sa informacijama o
  954. datoteci, u suprotnom, stat vraća vrednost -1.
  955. Ovo su najkorišćenija polja u strukturi stat:
  956.  st_mode sadrži prava pristupa te datoteke.
  957. kao dodatak na prava pristupa, st_mode koduje tip datoteke u svojim višim bitovima.
  958.  st_uid i st_gid sadrze ID vlasnika datoteke i grupe kojoj datoteka pripada.
  959.  st_size sadrži veličinu datoteke, u bajtovima.
  960.  st_atime sadrži vreme kada je poslednji put bilo pristupano toj datoteci (pisanje ili čitanje)
  961.  st_mtime sadrži vreme kada je ta datoteka poslednji put bila promenjena.
  962. Ovi makroi proveravaju vrednost polja st_mode da bi odredili koju vrstu tj. tip datoteke je analizirao vaš sistemski poziv stat. Makro ocenjuje da je to istina (true, tj. 1), ako je datoteka odreĎenog tipa.
  963.  S_ISBLK (mode) - blok ureĎaj
  964.  S_ISCHR (mode) - karakter ureĎaj
  965.  S_ISDIR (mode) - direktorijum
  966. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  967. Strana 12 / 20
  968.  S_ISFIFO (mode) - fifo
  969.  S_ISLNK (mode) - simbolički link
  970.  S_ISREG (mode) - regularna datoteka
  971.  S_ISSOCK (mode) - soket
  972. Polje st_dev sadrži glavni (major) broj i sporedni (minor) broj hardverskog ureĎaja, preciznije drajvera, kojima blok ili karakter datoteka odgovara. Glavni (major) broj ureĎaja se pomera ulevo za osam bitova, a sporedni (minor) broj ureĎaja, obuhvata osam najmanje značajnih bitova. Polje st_ino sadrži inode broj datoteke, pri čemu inode locira datoteku u sistemu datoteka.
  973. Ako pozovete stat na simbolički link, stat prati link i vi možete dobiti informacije o datoteci na koji taj link pokazuje, ali ne i o samom simboličkom linku. Zbog takvog rada, S_ISLINK nikada neće biti istinit (true) kao rezultat stat. Koristite lstat funkciju, ako ne zelite da pratite simbolički link, zato što ova funkcija dobija informacije o samom linku a ne o njenom originalu. Ako pozovete lstat na datoteku, koja nije simbolički link, onda ona ima isti rezultat kao stat. Pozivanjem funkcije stat, na prekinuti link (link koji pokazuje na nepostojeću ili nepristupačnu originalnu datoteku), kao rezultat se pojavljuje greška, dok se pozivanjem funkcije lstat greška ne prijavljuje.
  974. Ako već imate otvorenu datoteku za čitanje ili pisanje, pozovite fstat umesto stat. Poziv fstat uzima deskriptor datoteke kao njegov prvi argument umesto putanje.
  975. Program read-file.c (listing 5) prikazuje funkciju koja alocira dovoljno veliki bafer, da prihvati sadržaj datoteke i onda ga učitava u bafer. Funkcija koristi fstat da odredi veličinu bafera, koja je potrebna za alociranje, a takoĎe se proverava da li je to regularna datoteka. #include <fcntl.h> #include <stdio.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #include <stdlib.h> /* Učitava sadržaj FILENAME u novododeljeni bafer. Veličina bafera je sačuvana u *LENGTH. Vraća bafer, koji korisnik mora da isprazni. Ako makro ne odgovori da je datoteka regularna, on vraća NULL vrednost. */ char* read_file (const char* filename)
  976. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  977. Strana 13 / 20
  978. { int fd; struct stat file_info; char* buffer; size_t* length = malloc(sizeof(size_t)); // Otvara datoteku fd = open (filename, O_RDONLY); // Uzimanje informacija o datoteci fstat (fd, &file_info); *length = file_info.st_size; // Obratite pažnju da li je u pitanju regularna datoteka if (!S_ISREG (file_info.st_mode)) { // Nije, znaci odustani close (fd); return NULL; } // Dodeljivanje dovoljno velikog bafera da primi sadržaj datoteke buffer = (char*) malloc (*length); // Učitavanje datoteke u bafer read (fd, buffer, *length); // Završavanje close (fd); return buffer; } int main(int argc, char *argv[]) { char *filename = argv[1]; char *buffer = read_file(filename); printf("Bafer je:\n%s\n", buffer); }
  979. Listing 5 (read-file.c) Učitavanje datoteke u bafer
  980. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  981. Strana 14 / 20
  982. Prevedite program read-file.c
  983. $ gcc -o read-file read-file.c
  984. Pokrenite program na test datoteci /etc/hosts:
  985. $ ./read-file /etc/hosts
  986. Bafer je:
  987. 127.0.0.1 localhost
  988. 172.20.3.100 linux.site linux
  989. Izlistajte sadržaj datoteke /etc/hosts koristeći naredbu cat i uporedite sadržaj:
  990. $ ./read-file /etc/hosts
  991. 127.0.0.1 localhost
  992. 172.20.3.100 linux.site linux
  993. Provera prava pristupa datoteci
  994. Sistemski poziv access odreĎuje da li pozivni proces ima prava pristupa datoteci. Može da proveri bilo koju kombinaciju read, write i execute prava, a takoĎe proverava postojanje datoteke.
  995. Poziv access ima dva ulazna argumenta.
  996.  Prvi je putanja do datoteke koji treba da se proveri.
  997.  Drugi je bit (bitwise) ili simbolička vrednost R_OK, W_OK i X_OK, koja odgovara read, write, i execute dozvoli.
  998. Povratna vrednost je 0 ako proces ima sve specificirane dozvole. Ako datoteka postoji, ali pozivni proces nema specificirane dozvole, access vraća –1 i postavlja errno na vrednost EACCES (ili na vrednost EROFS, ako se dozvola za upis proverava za datoteku u read-only sistemu datoteka).
  999. Ako je drugi argument F_OK, access prosto proverava postojanje datoteke. Ako ona postoji, vrednost koja se vraća je 0; ako ne postoji, ta vrednost je –1 i errno je postavljena na vrednost ENOENT. Zapamtite da errno može biti postavljen na EACCES, ako se bilo kom direktorijumu u putanji datoteke ne može pristupiti.
  1000. Program check-access.c (listing 6) koristi sistemski poziv access da proveri postojanje datoteke i proveri read i write dozvole. Potrebno je u komandnoj liniji dati ime datoteke, koja se proverava.
  1001. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  1002. Strana 15 / 20
  1003. #include <errno.h> #include <stdio.h> #include <unistd.h> int main (int argc, char* argv[]) { char* path = argv[1]; int rval; // Provera postojanja datoteka rval = access (path, F_OK); if (rval == 0) printf ("%s postoji\n", path); else { if (errno == ENOENT)printf ("%s ne postoji\n", path); else if (errno == EACCES) printf ("ne mogu da pristupim %s \n", path); return 0; } // Provera read dozvola rval = access (path, R_OK); if (rval == 0) printf ("%s moze da se cita\n", path); else printf ("%s ne moze da se cita\n", path); // Proverava write dozvolu rval = access (path, W_OK); if (rval == 0) printf ("U %s moze da se pise\n", path); else if (errno == EACCES) printf ("U %s ne moze da se pise (nema w dozvole)\n", path); else if (errno == EROFS) printf ("U %s ne moze da se pise (read-only FS)\n", path); return 0; }
  1004. Listing 6 (check-access.c) Provera dozvole pristupa datoteci
  1005. Prevedite program check-access.c
  1006. $ gcc -o check-access check-access.c
  1007. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  1008. Strana 16 / 20
  1009. Pokrenite program na test datoteci /etc/hosts:
  1010. $ ./check-access /etc/hosts
  1011. /etc/hosts postoji
  1012. /etc/hosts moze da se cita
  1013. U /etc/hosts ne moze da se pise (nema w dozvole)
  1014. Na primer, da bi se proverile pristupne dozvole za datoteku README na CD-ROM medijumu, primenite sledeće:
  1015. $ ./check-access /mnt/cdrom/README
  1016. /mnt/cdrom/README postoji
  1017. /mnt/cdrom/README moze da se cita
  1018. U /mnt/cdrom/README ne moze da se pise (read-only FS)
  1019. Rad sa direktorijumima
  1020. Par operacija nad direktorijumima koje mogu da budu korisne su:
  1021.  getcwd nam daje trenutni radni direktorijum. Ima dva argumenta, bafer i dužinu tog bafera.
  1022. getcwd kopira putanju trenutnog radnog direktorijuma u bafer.
  1023.  chdir menja radni direktorijum u kojem se trenutno nalazite, na putanju koju stavite kao ulazni argument.
  1024.  mkdir kreira novi direktorijum. Njegov prvi argument je putanja gde će se nalaziti taj novi direktorijum. Drugi argument su prava pristupa za taj novi direktorijum. Interpretacija prava pristupa je ista kao kod trećeg argumenta za funkciju open i modifikuju se na isti način preko umask procesa.
  1025.  rmdir briše direktorijum. Njegov argument je putanja do direktorijuma.
  1026. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  1027. Strana 17 / 20
  1028. Čitanje sadržaja direktorijuma
  1029. GNU/Linux obezbeĎuje funkcije za čitanje sadržaja direktorijuma. Iako one nisu direktno vezane za U/I funkcije nižeg nivoa, objašnjavamo ih jer su često korisne u raznim aplikativnim programima.
  1030. Da bi pročitali sadržaj direktorijuma, pratite sledeće korake:
  1031.  Pozovite opendir funkciju, zadajući putanju direktorijuma koji želimo da ispitamo. Funkcija opendir vraća DIR* identifikator, koji ćete da koristite za pristup sadržaju direktorijuma. Ako se pojavi neka greška, funkcija vraća NULL.
  1032.  Pozovite readdir sa ponavljanjem, prosleĎući DIR* identifikator koji ste dobili sa opendir. Svaki put kada pozovete readdir, on vraća pokazivač na strukturu dirent koji odgovara sledećem direktorijumskom ulazu. Kada stignete do kraja sadržaja tog direktorijuma, readdir vraća NULL vrednost. Struktura dirent koju dobijate od funkcije readdir, ima polje d_name, koje sadrži ime direktorijumskog ulaza.
  1033.  Pozovite closedir, prosleĎujući DIR* identifikator, da bi završili operaciju listanja.
  1034. Uključite <sys/types.h> i <dirent.h> ako koristite ove funkcije u svom programu.
  1035. Zapamtite da ako želite da sadržaj direktorijuma bude poreĎan u odreĎenom redosledu, to morate sami da uradite.
  1036. Program listdir.c (listing 7) ispisuje sadržaj direktorijuma. Direktorijum može biti zadat u komandnoj liniji, ali ako nije zadat, program koristi trenutni radni direktorijum. Program prikazuje tip i putanju svake datoteke, tj svake stavke u direktorijumu koristeći sistemski poziv lstat funkciji get_file_type. #include <assert.h> #include <dirent.h> #include <stdio.h> #include <string.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> // Vraća string koji opisuje tip datoteke
  1037. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  1038. Strana 18 / 20
  1039. const char* get_file_type (const char* path) { struct stat st; lstat (path, &st); if (S_ISLNK (st.st_mode)) return "simbolicki link"; else if (S_ISDIR (st.st_mode)) return "direktorijum"; else if (S_ISCHR (st.st_mode)) return "karakter uredjaj"; else if (S_ISBLK (st.st_mode)) return "blok uredjaj"; else if (S_ISFIFO (st.st_mode)) return "fifo"; else if (S_ISSOCK (st.st_mode)) return "socket"; else if (S_ISREG (st.st_mode)) return "regularna datoteka"; else // Neocekivano. Mora da bude jedan od navedenih tipova. assert (0); } int main (int argc, char* argv[]) { char* dir_path; DIR* dir; struct dirent* entry; char entry_path[PATH_MAX + 1]; size_t path_len; if (argc >= 2) dir_path = argv[1]; // Ako je direktorijum zadat kao argument, koristite ga else dir_path = "."; // U suprotnom koristi trenutni direktorijum // Kopira putanju direktorijuma u entry_path strncpy (entry_path, dir_path, sizeof (entry_path)); path_len = strlen (dir_path); // Ako se putanja direktorijuma ne završava kosom crtom, ona se dodaje if (entry_path[path_len - 1] != '/') { entry_path[path_len] = '/'; entry_path[path_len + 1] = '\0'; ++path_len; }
  1040. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  1041. Strana 19 / 20
  1042. // Pocetak operacije listanja direktorijuma dir = opendir (dir_path); while ((entry = readdir (dir)) != NULL) { const char* type; strncpy (entry_path + path_len, entry->d_name, sizeof (entry_path) – path_len); // Određivanje tipa datoteke (stavke u direktorijumu) type = get_file_type (entry_path); // Ispisivanje tipa i punog imena sa putanjom printf ("%-18s: %s\n", type, entry_path); } // Sve gotovo closedir (dir); return 0; }
  1043. Listing 7 (listdir.c) Ispis liste direktorijuma
  1044. Prevedite i izvršite program listdir.c, deklarišite ulaznu datoteku i demonstrirajte sistemske pozive za direktorijume.
  1045. Prevedite program listdir.c i pokrenite ga navodeći direktorijum /dev kao argument.
  1046. $ gcc -o listdir listdir.c
  1047. $ ./listdir /dev
  1048. directory : /dev/.
  1049. directory : /dev/..
  1050. socket : /dev/log
  1051. character device : /dev/null
  1052. regular file : /dev/MAKEDEV
  1053. fifo : /dev/initctl
  1054. character device : /dev/agpgart
  1055. ...
  1056. OS2, Vežba 4 - NAPREDNI SISTEMSKI POZIVI ZA RAD SA DATOTEKAMA
  1057. Strana 20 / 20
  1058. Da bi ovo proverili, možete koristiti komandu ls u istom direktorijumu. Navedite –u infikator da bi naložili ls da ne sortira, i specificirajte –a indikator da bi uzrokovali da trenutni direktorijum (.) i roditeljski direktorijum (..) budu uračunati.
  1059. $ ls -lUa /dev
  1060. total 124
  1061. drwxr-xr-x 7 root root 36864 Feb 1 15:14 .
  1062. drwxr-xr-x 22 root root 4096 Oct 11 16:39 ..
  1063. srw-rw-rw- 1 root root 0 Dec 18 01:31 log
  1064. crw-rw-rw- 1 root root 1, 3 May 5 1998 null
  1065. -rwxr-xr-x 1 root root 26689 Mar 2 2000 MAKEDEV
  1066. prw------- 1 root root 0 Dec 11 18:37 initctl
  1067. crw-rw-r-- 1 root root 10, 175 Feb 3 2000 agpgart
  1068. ...
  1069. Prvi karakter svakog reda koji prikazuje komada ls je tip ulaza.
  1070.  
  1071.  
  1072. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1073. Teoretski deo
  1074. Shell program (shell script) je datoteka koju čini niz Linux komandi koje se mogu izvršavati
  1075. sekvencijalno ili povezati strukturama kao što su uslovni skokovi i petlje.
  1076. Primer shell programa (datoteka ss1 na tekućem direktorijumu):
  1077. # ss1: jednostavan shell program (ovo je komentar)
  1078. clear
  1079. echo "Goodbye, Cruel World !"
  1080. <CTRL-D>
  1081. Pokreće se na jedan od sledeća tri načina
  1082. Ako se skript nalazi u tekućem
  1083. direktorijumu koji nije u
  1084. sistemskoj putanji:
  1085. $ chmod a+x ss1
  1086. $ ./ss1
  1087. Ako se skript nalazi u nekom
  1088. direktorijumu koji jeste u
  1089. sistemskoj putanji (videti echo
  1090. $PATH):
  1091. $ chmod a+x ss1
  1092. $ ss1
  1093. Bez eksplicitnog dodavanja
  1094. prava “x”:
  1095. $ /bin/bash ss1
  1096. Komandni interpreter interpretira i izvršava program (nema compiler-a, linker-a itd...). Program se
  1097. izvršava u:
  1098.  komandom interpreteru naznačenom u prvoj liniji programa na sledeći način: #!/bin/bash
  1099.  tekućem komandom interpreteru ukoliko ništa nije naznačeno
  1100. Promenljive
  1101. Omogućavaju čuvanje podataka u RAM memoriji. Bash promenljive se ne deklarišu za specifični tip
  1102. podataka - dovoljno je dodeliti vrednost promenljivoj i ona će biti alocirana prema toj vrednosti. U
  1103. Bourne Again Shellu, promenljive mogu sadržavati brojeve, karaktere ili nizove karaktera. Na Linux
  1104. sistemima postoje dva tipa promenljivih:
  1105.  sistemske promenljive – OS ih kreira i održava; ne preporučuje se promena njihovog sadržaja;
  1106. definišu se strogo velikim slovima
  1107.  korisnički definisane promenljive (User defined) – kreiraju ih korisnici; definišu se malim
  1108. slovima
  1109. Strana 1 / 18
  1110. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1111. Sistemske promenljive mogu se videti pomoću komandi:
  1112.  set (prikazuje sve promenljive)
  1113.  echo $IMEPROMENLJIVE (prikazuje sadrzaj jedne promenljive) – na primer, echo $PATH
  1114. Prilikom dodele vrednosti promenljivim:
  1115.  ime promenljive: alfanumeričkim karakterom ili donja crta ‘_' praćeno sa više alfanumeričkih
  1116. karaktera
  1117.  imena promenljivih su (kao i imena datoteka) osetljiva na velika i mala slova (case sensitive)
  1118.  ime promenljive uvek ide s leve strane znaka jednakosti
  1119.  između znaka jednakosti i imena promenljive i znaka jednakosti i vrednosti ne sme biti blanko
  1120. karaktera
  1121. br=10 # ispravno
  1122. 10=br # neispravno - vrednost na levoj strani
  1123. $ br= 10 # neispravno - prazni karakteri
  1124. Vrednost korisnički definisane promenljive se može videti komandom echo, npr: echo $br
  1125. echo
  1126. Prikazuje tekst ili vrednost promenljive na ekranu.
  1127. Sintaksa komande je: echo [opcije] [string, promenljive...]
  1128.  Opcija -n znači da se nakon izvršenja echo komande kursor ne prebacuje u novi red
  1129.  Opcija -e omogućava interpretaciju sledećih karaktera u kombinaciji sa obrnutom kosom crtom
  1130. Navodnici
  1131.  "Double Quotes". Sve što se nalazi u ovim navodnicima gubi originalno značenje (osim \ i $).
  1132.  'Single quotes'. Sve što je zatvoreno jednostrukim navodnicima ostaje nepromenjeno.
  1133.  `Back quote`. Izraz zatvoren obrnutim navodnicima tretira se kao komanda koju treba
  1134. izvršavati.
  1135. Strana 2 / 18
  1136. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1137. Na primer, ukoliko korisnik želi da na ekranu prikaže tekući datum navešće izraz date sa obrnutim
  1138. navodnicima:
  1139. $ echo "Današnji datum : date" # tretira date kao string
  1140. Today is : date
  1141. $ echo "Današnji datum : `date`" # tretira date kao komandu
  1142. Today is : Fri Apr 2 16:30:35 CEST 2004
  1143. expr
  1144. Naredba expr koristi se da obavi jednostavne aritmetičke operacije.
  1145. Sintaksa komande je: expr op1 operator op2
  1146.  op1 i op2 su celi brojevi
  1147.  operator: “+” sabiranje, “–” oduzimanje, “\*” množenje1, “/” (deljenje), “%” ostatak po modulu
  1148.  op1, op2 i operator moraju da budu razdvojeni blanko karakterima jer su to parametri
  1149. komande.
  1150. Na pimer:
  1151. expr 1 + 3 # ispisuje: 4
  1152. expr 20 % 3 # ispisuje: 2
  1153. echo 6+3=`expr 6 + 3` # ispisuje: 6+3=9
  1154. echo 6+3="expr 6 + 3" # ispisuje: 6+3=expr 6 + 3
  1155. Naredba expr se kao parametar komande echo zadaje u obrnutim navodnicima, a ne u dvostrukim
  1156. ili
  1157. jednostrukim. Samo u tom slučaju echo posmatra expr kao komandu, a ne kao običan string.
  1158. read
  1159. Koristi se za:
  1160.  čitanje ulaznih podataka sa tastature i upis unete vrednosti u promenljivu
  1161.  ubacivanje prekidnih tačake u program u fazi razvoja radi kontrole izvršavanja
  1162. 1 Za množenje se koristi \*, a ne *, pošto je * džoker
  1163. Strana 3 / 18
  1164. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1165. Sintaksa komande read je: read varible1, varible2,...varibleN
  1166. Primer: skript čita ulazni podatak sa tastature u promenljivu var1, a zatim ga ispisuje na ekran.
  1167. echo "Unesite podatak:"
  1168. read var1
  1169. echo "Uneli ste: $var1"
  1170. Prosleđivanje parametara shell skriptu
  1171. Posmatrajte komandu: rm file1 file2 file3
  1172. Ovde je rm ime komande, a argumenti su imena datoteka koje korisnik želi da obriše. Komandni
  1173. argumenti se na isti način mogu zadati i shell programu. Na primer, za shell program scriptus, koji je
  1174. pozvan pomoću sledeće komandne linije, prvi komandni argument je arg1, drugi arg2, a treći arg3:
  1175. scriptus arg1 arg2 arg3
  1176. U shell programu se argumentima komandne linije pristupa pomoću sledećih promenljivih:
  1177.  vrednost promenljive $0 je ime programa (u ovom slučaju scriptus)
  1178.  vrednost promenljive $1 je prvi komandni argument (u ovom slučaju arg1)
  1179.  vrednost promenljive $2 je drugi komandni argument (u ovom slučaju arg2)
  1180.  vrednost promenljive $3 je treći komandni argument (u ovom slučaju arg3)
  1181.  vrednost promenljive $# je broj komandnih argumenta (u ovom slučaju dva)
  1182.  $* se proširuje u `$0,$1,$2...$9` (što je u ovom slučaju arg1, arg2, arg3).
  1183. Na primer:
  1184. # ss3: korišćenje argumenata komandne linije
  1185. echo "Ukupan broj argumenata komandne linije: $#"
  1186. echo "0-ti argument je ime programa $0, a je prvi argument je $1"
  1187. echo "Svi argumenti su redom: $*"
  1188. Strana 4 / 18
  1189. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1190. Izlazni status komande
  1191. Nakon izvršenja Linux komande vraćaju vrednost na osnovu koje se može odrediti da li je komanda
  1192. izvršena uspešno ili ne:
  1193.  ako je povratna vrednost 0, komanda je izvršena uspešno.
  1194.  ako je povratna vrednost različita od 0 (veća od 0), komanda se nije uspešno završila, a broj
  1195. predstavlja neku vrstu dijagnostičkog statusa koja se naziva izlazni status.
  1196. Da bi se odredila ova vrednost koristi se sistemska promenljiva $?
  1197. Konstrukcija if
  1198. U najkompleksnijem obliku sintaksa if komande je:
  1199. if test-commands;
  1200. then
  1201. consequent-commands;
  1202. [elif more-test-commands;
  1203. then
  1204. more-consequents;]
  1205. [else alternate-consequents;]
  1206. fi
  1207. Posmatrajte sledeći program (datoteka proba):
  1208. if rm $1
  1209. then
  1210. echo "Datoteka $1 je uspešno obrisana"
  1211. fi
  1212. Program se pokreće pomoću komande bash proba filename. Ako komanda rm pronađe datoteku
  1213. filename i uspešno je obriše, njen izlazni status je 0, te će se izvršiti naredba ispod then (tj.
  1214. Naredba echo “Datoteka $1 je uspešno obrisana”). U protivnom, izlazni status je različit od 0, i
  1215. komanda se izvršava.
  1216. Strana 5 / 18
  1217. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1218. $ bash proba nepostojeca_datoteka
  1219. rm: cannot remove `nepostojeca_datoteka': No such file or directory
  1220. $ bash proba postojeca_datoteka
  1221. Datoteka postojeca_datoteka je uspešno obrisana
  1222. Naredba test
  1223. Posmatrajte i program pozitivan (prikazuje upotrebu naredbe test):
  1224. if test $1 -gt 0
  1225. then
  1226. echo "$1 je pozitivan broj"
  1227. fi
  1228. Program se pokreće komandom: bash pozitivan arg, gde je arg numerička vrednost.
  1229. $ bash ss5 5
  1230. 5 je pozitivan broj
  1231. $ bash ss5 -4
  1232. Pomoću komande test, odnosno [ expr ] mogu se upoređivati celi brojevi, upoređivati nizovi karaktera
  1233. i može se odrediti da li datoteka postoji, da li je regularna, izvršna, itd.
  1234. Sledeći matematički operatori se koriste za upoređivanje celih brojeva:
  1235. Operator Značenje if test if [ ]
  1236. -eq jednakost (5=6) if test 5 -eq 6 if [ 5 -eq 6 ]
  1237. -ne nejednakost (5 != 6) if test 5 -ne 6 if [ 5 -ne 6 ]
  1238. -lt strogo manje od (5<6) if test 5 -lt 6 if [ 5 -lt 6 ]
  1239. -le manje od ili jednako (5<= 6) if test 5 -le 6 if [ 5 -le 6 ]
  1240. -gt strogo veće od (5>6) if test 5 -gt 6 If [ 5 -gt 6 ]
  1241. -ge veće od ili jednako (5>=6) if test 5 -ge 6 If [ 5 -ge 6 ]
  1242. Za upoređivanje nizova koriste se sledeći operatori:
  1243.  string1 = string2 da li je niz string1 jednak nizu string2
  1244. Strana 6 / 18
  1245. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1246.  string1 != string2 da li je niz string1 različit od niza string2
  1247.  string1 da li je string1 definisan i ako jeste da li nije NULL
  1248.  -n string1 da li string1 nije NULL
  1249.  -z string1 da li je string1 NULL
  1250. Komandom test takođe se mogu izvršiti testovi nad datotekama i direktorijumima:
  1251.  -s file da li datoteka ima neki sadržaj
  1252.  -f file da li datoteka postoji, da li je obična a ne direktorijum
  1253.  -d dir da li direktorijum postoji, i da li nije obična datoteka
  1254.  -w file da li je datoteka sa pravom upisa
  1255.  -r file da li je datoteka bez prava upisa (read-only)
  1256.  -x file da li je datoteka izvršna
  1257. Dodatno, u komandi test mogu se koristiti logički testovi za kombinovanje dva ili više uslova
  1258. istovremeno:
  1259.  ! expression logička negacija
  1260.  exp1 -a exp2 logička AND funkcija
  1261.  exp1 -o exp2 logička OR funkcija
  1262. Ostale značajnije konstrukcije i petlje
  1263.  case-esac (ilustrovano zadatkom 12)
  1264.  while petlja (ilustrovano zadatkom 13)
  1265.  until petlja (ilustrovano zadatkom 14)
  1266.  for petlja (ilustrovano zadatkom 15)
  1267.  select konstrukcija (ilustrovano zadatkom 16)
  1268. Shell proširenja
  1269. Opisujemo samo neka najznačnija shell proširenja; postoje i neka druga proširenja i njih ovde
  1270. preskačemo; o njima ćete naći dosta informacija u knjizi ili na Internetu.
  1271. Proširenje preko zagrada:
  1272. echo a{d,c,b}e
  1273. Strana 7 / 18
  1274. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1275. ade ace abe
  1276. Na primer:
  1277. chown root /home/{jsmith/{ss1,ss2},nmacek/{data,ss3}}
  1278. proširuje se u:
  1279. chown root /home/jsmith/ss1
  1280. chown root /home/jsmith/ss2
  1281. chown root /home/nmacek/data
  1282. chown root /home/nmacek/ss3
  1283. Tilda proširenje:
  1284. $ whoami
  1285. jsmith
  1286. $ cd ~/data
  1287. $ pwd
  1288. /home/jsmith/data
  1289. $ cd ~jim
  1290. $ pwd
  1291. /home/jim
  1292. Komandna zamena:
  1293. $ x = `date`
  1294. $ echo $x
  1295. Thu Apr 15 09:53:44 CEST 2004
  1296. $ y = `who am i;pwd`
  1297. $ echo $y
  1298. nmacek pts/0 Apr 15 09:40 (nicotine.internal.vets.edu.yu) /home/nmacek
  1299. Sledeće dve komande ilustruju simpatičnu upotrebu komandne zamene (komande rede identičnu
  1300. stvar, u principu možete da koristite i jedan i drugi način zamene):
  1301. gzip ` find / -name ‘*.bak’ –print `
  1302. gzip $( find / -name ‘*.bak’ –print )
  1303. Strana 8 / 18
  1304. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1305. Praktični zadaci
  1306. 1. Pokretanje virtuelne mašinu.
  1307. Kreirajte novi korisnički nalog koristeči "User Accounts" ili iz odgovarajuće shell komande. Parametri
  1308. su sledeći:
  1309.  username: smer_brojIndeksa (npr: nrtd912)
  1310.  password: 1Password2
  1311.  full name: Vaše ime
  1312.  home direktorijum: /home/smer_brojIndeksa (npr: /home/ nrtd912)
  1313.  shell: /bin/bash
  1314. Odjavite se sa sistema.
  1315. Prijavite se na sistem kao novokreirani korisnik.
  1316. Pokrenite terminal
  1317. 2. Kreiranje shell programa
  1318. Koristeći bilo koji editor teksta (vi, jed, joe, cat>, nano, pico, emacs, ...) napravite jednostavan
  1319. shell program ss1 koji briše sadržaj ekrana i ispisuje jednu rečenicu. Ilustrovaćemo to na primeru jed
  1320. editora.
  1321.  zadajte komandu: joe ss1
  1322.  unesite sledeći tekst u editor:
  1323. # ss1: jednostavan shell program
  1324. clear
  1325. echo "Moj prvi shell program !"
  1326.  snimite datoteku – pritisnite <F10>, otvorite meni File (pritisnite Enter) i odaberite Save
  1327.  napustite editor teksta – pritisnite <F10>, otvorite meni File (pritisnite Enter) i odaberite Exit
  1328. Probajte da pokrenete program na sledeće načine i za svaki neuspeli pokušaj objasnite zašto
  1329. program niste uspeli da pokrenete:
  1330.  Zadajte komandu: ss1
  1331.  Zadajte komendu: ./ss1
  1332. Strana 9 / 18
  1333. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1334.  Zadajte komandu: bash ss1
  1335.  Zadajte sledeće dve komande: chmod +x ss1
  1336. ./ssh1
  1337. Šta znači ako shell-script počinje linijom #!/bin/bash ?
  1338. Obrišite program ss1 komandom: rm ss1
  1339. 3. Sistemske promenljive
  1340. Zadajte sledeću komanu: set | less
  1341. Na osnovu njenog rezultata odredite: tekući komandni interpreter, putanju do vašeg home
  1342. direktorijuma, sistemski putanju, vaše korisničko ime, tekući direktorijum i izraz koji definiše odzivni
  1343. znak.
  1344. Prikažite vrednost promenljive PATH – u čemu je razlika između komandi echo PATH i echo $PATH
  1345. 4. Korisnički definisane promenljive
  1346. Zadajte sledeće četiri komande: (1.) br =10 (2.) br= 10 (3.) br = 10 (4.) br=10
  1347. Objasnite zašto su prve tri komande neispravne.
  1348. Definišite promenljive x i y koje će imati vrednosti 10 i abc respektivno i prikažite njihove vrednosti na
  1349. ekranu u istom redu. Zadajte sledeće komande:
  1350. x=10
  1351. y=abc
  1352. echo $x $y
  1353. Proverite u čemu je razlika između komande echo x i komande echo $x
  1354. 5. Komanda echo i upotreba navodnika
  1355. Zadajte sledeću komanu: echo -e "Linux\n\t\tRulez\n"
  1356. Objasnite čemu služi parametar -e i kontolni karakteri \n i \t ?
  1357. Zadajte sledeće komande i probajte da odredite funkciju obrnutih navodnika:
  1358. date
  1359. echo “Today is : date"
  1360. Strana 10 / 18
  1361. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1362. echo 'Today is : `date`'
  1363. echo “Today is : `date`”
  1364. 6. Komanda expr i shell aritmetika
  1365. Odredite kako se komandi expr navode parametri. Zadajte sledeće komande i odredite koja na
  1366. ekranu ispisuje zbir dva broja:
  1367. (1) expr 1+3 (2) expr 1 +3 (3) expr 1+ 3 (4) expr 1 + 3
  1368. Odredite pomoću kojih se navodnika komanda expr pravilno koristi u sprezi sa komandom echo.
  1369. Koja komanda vraća pravi rezultat aritmetičke operacije?
  1370. echo 6+3=`expr 6 + 3`
  1371. echo 6+3="expr 6 + 3"
  1372. Malo složeniji primer upotrebe je ugnežđivanje expr komandi. Sledeća komanda određuje vrednost
  1373. izraza (7*2)%3:
  1374. expr `expr 7 \* 2` % 3
  1375. 7. Čitanje vrednosti sa tastature – komanda read
  1376. Koristeći bilo koji editor teksta unesite sledeći tekst u datoteku ss2 na tekućem direktorijumu:
  1377. # ss2: upotreba komande read
  1378. clear
  1379. echo -e "Unesite vrednost a:\c"
  1380. read var1
  1381. echo -e "Unesite vrednost b:\c"
  1382. read var2
  1383. echo "a + b = $var1 + $var2 = `expr $var1 + $var2`”
  1384. Pokrenite program komandom: bash ss2 i isprobajte ga.
  1385. Obrišite datoteku: rm ss2
  1386. 8. Podsetnik (engl. reminder) – komande grep, wc i sort
  1387. Koristeći bilo koji editor teksta unesite sledeći tekst u datoteku proba na tekućem direktorijumu:
  1388. Strana 11 / 18
  1389. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1390. Second line of the text file
  1391. Wile E. Coyote
  1392. Third line of the text file
  1393. B.C.D.E
  1394. First line of the text file
  1395. A.B.C.D
  1396. Objasnite šta rade sledeće komande (poslužite se slobodno man stranicama ako niste sigurni):
  1397. wc -l proba
  1398. sort proba
  1399. grep line proba
  1400. grep -c line proba
  1401. cat proba | grep line | wc -l
  1402. cat proba | grep line | sort
  1403. Obrišite datoteku proba.
  1404. 9. Prosleđivanje parametara shell programu
  1405. Koristeći bilo koji editor teksta unesite sledeći tekst u datoteku ss3 na tekućem direktorijumu:
  1406. # ss3: koriscenje argumenata komandne linije
  1407. c=`expr $1 + $2`
  1408. d=`expr $c % 26`
  1409. echo "$1 + $2 mod 26 = $d"
  1410. Pokrenite program komandama:
  1411. chmod +x ss3
  1412. ./ss3 12 15
  1413. Šta program vraća kao rezultat?
  1414. Obrišite program komandom rm ss3
  1415. 10. Izlazni status komande
  1416. Ispitati status izvršenja sledećih komandi i na osnovu njega odredite da li se komanda uspešno
  1417. izvršila (ako je izlazni status 0, sve je OK, ako je 1 ili viši, komanda je izvršena sa greškicom): [11].
  1418. Strana 12 / 18
  1419. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1420. (1) Pokušaj upisa u direktorijum /bin bez root privilegija
  1421. touch /bin/ss1
  1422. echo $?
  1423. (2) Prikazivanje tekućeg datuma
  1424. date
  1425. echo $?
  1426. 11. Konstrukcija If-fi i naredba test
  1427. Koristeći bilo koji editor teksta unesite sledeći tekst u datoteku ss4 na tekućem direktorijumu:
  1428. #!/bin/bash
  1429. # ss4: Da li je argument pozitivan ili negativan broj ?
  1430. if [ $1 -gt 0 ]
  1431. then
  1432. echo "$1 je pozitivan broj"
  1433. elif [ $1 -lt 0 ]
  1434. then
  1435. echo "$1 je negativan broj "
  1436. elif [ $1 -eq 0 ]
  1437. then
  1438. echo "Argument je nula"
  1439. else
  1440. echo "$1 nije numericki argument"
  1441. fi
  1442. Dodajte pravo izvršavanja chmod +x ss4 i pokrenite program na četiri nacina:
  1443. ./ss4 1
  1444. ./ss4 -3
  1445. ./ss4 0
  1446. ./ss4 a
  1447. Na kraju obrišite program ss4 komandom: rm ss4
  1448. Strana 13 / 18
  1449. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1450. 12. Struktura case-esac
  1451. Koristeći bilo koji editor teksta unesite sledeći tekst u datoteku ss5 na tekućem direktorijumu:
  1452. #!/bin/bash
  1453. # ss5: koriscenje case strukture
  1454. if [ -z $1 ]
  1455. then
  1456. echo "*** Unesite korisnicko ime ***"
  1457. exit 1
  1458. fi
  1459. echo -n "Obavestenje o korisniku sistema: "
  1460. case $1 in
  1461. "jsmith") echo "John Smith, jr.";;
  1462. "coyote") echo "Wile E. Coyote, genius";;
  1463. "student") echo "Anonymous";;
  1464. *) echo "*** Nepostojeci korisnik ***";;
  1465. esac
  1466. Dodajte pravo izvršavanja chmod +x ss5 i pokrenite program na četiri nacina:
  1467. ./ss5
  1468. ./ss5 jsmith
  1469. ./ss5 coyote
  1470. ./ss5 student
  1471. ./ss5 cvrle
  1472. Na kraju obrišite program ss5 komandom: rm ss5
  1473. 13. While petlja
  1474. Koristeći bilo koji editor teksta unesite sledeći tekst u datoteku ss6 na tekućem direktorijumu:
  1475. #!/bin/bash
  1476. # ss6: tablica množenja realizovana while petljom
  1477. echo "Program prikazuje tablicu mnozenja za dati broj"
  1478. if [ $# -eq 0 ]
  1479. Strana 14 / 18
  1480. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1481. then
  1482. echo "Greska - numericki argument nije naveden"
  1483. echo "Sintaksa : $0 broj"
  1484. exit 1
  1485. fi
  1486. n=$1
  1487. i=1
  1488. while [ $i -le 10 ]
  1489. do
  1490. echo "$n * $i = `expr $i \* $n`"
  1491. i=`expr $i + 1`
  1492. done
  1493. Dodajte pravo izvršavanja chmod +x ss6 i pokrenite program na četiri nacina:
  1494. ./ss6
  1495. ./ss6 6
  1496. ./ss6 -4
  1497. ./ss6 cvrle
  1498. Na kraju obrišite program ss6 komandom: rm ss6
  1499. Strana 15 / 18
  1500. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1501. 14. Until petlja
  1502. Koristeći bilo koji editor teksta unesite sledeći tekst u datoteku ss7 na tekućem direktorijumu:
  1503. #!/bin/bash
  1504. # ss7: upotreba until petlje
  1505. c=20
  1506. until [ $c -lt 10 ]
  1507. do
  1508. echo c = $c
  1509. let c-=1
  1510. done
  1511. Pokrenite program komandom: bash ss7
  1512. Obrišite program ss7 komandom: rm ss7
  1513. 15. For petlja
  1514. Koristeći bilo koji editor teksta unesite sledeći tekst u datoteku ss8 na tekućem direktorijumu:
  1515. # ss8: upotreba for petlje
  1516. if [ $# -eq 0 ]
  1517. then
  1518. echo "Greška - numerički argument nije naveden"
  1519. echo "Sintaksa : $0 broj"
  1520. echo "Program prikazuje tablicu množenja za dati broj"
  1521. exit 1
  1522. fi
  1523. n=$1
  1524. for i in 1 2 3 4 5 6 7 8 9 10
  1525. do
  1526. echo "$n * $i = `expr $i \* $n`"
  1527. done
  1528. Strana 16 / 18
  1529. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1530. Dodajte pravo izvršavanja chmod +x ss8 i pokrenite program na četiri nacina:
  1531. ./ss8
  1532. ./ss8 5
  1533. ./ss8 -3
  1534. Na kraju obrišite program ss6 komandom: rm ss8
  1535. 16. Struktura select
  1536. Koristeći bilo koji editor teksta unesite sledeći tekst u datoteku ss9 na tekućem direktorijumu:
  1537. opcije="pozdrav kraj"
  1538. select op in $opcije;
  1539. do
  1540. if [ "$op" = "kraj" ];
  1541. then
  1542. echo OK.
  1543. exit
  1544. elif [ "$op" = "pozdrav" ];
  1545. then
  1546. echo Linux Rulez !
  1547. else
  1548. clear
  1549. echo Opcija ne postoji.
  1550. fi
  1551. done
  1552. Dodajte pravo izvršavanja chmod +x ss9
  1553. Pokrenite program komandom ./ss9 i isprobaje opcije 1 i 2.
  1554. Na kraju obrišite program ss6 komandom: rm ss9
  1555. 17. Proširenje preko zagrada
  1556. Probajte sledeće: echo /home/{jsmith/{mp3,video},coyote/{food,bomb}}
  1557. Šta se ispisalo na ekranu?
  1558. Strana 17 / 18
  1559. OS2, Vežba 5 - DISKOVI I FAJL SISTEMI
  1560. 18. Tilda proširenje
  1561. Pređite na svoj home direktorijum: cd
  1562. Na svom home direktorijumu kreirajte neki poddirektorijum: mkdir mydir
  1563. Pređite na /etc direktorijum: cd /etc
  1564. Kako možete jednom skraćenom komandom preći na /home/korisnik/mydir?
  1565. Probajte sa: cd ~/mydir
  1566. Proverite gde se nalazite: pwd
  1567. Vratite se na home direktorijum: cd
  1568. Obrišite mydir: rmdir mydir
  1569. 19. Komandna zamena
  1570. Isprobajte komandnu zamenu pomoću sledećih komandi:
  1571. x=`date`
  1572. echo $x
  1573. y=`ls -ld /etc`
  1574. echo $y
  1575. 20. Cleaning and housekeeping.
  1576. Prijavite se na sistem OS2. Pokrenite terminal. Obrišite korisnika korisnik i njegov lični direktorijum:
  1577.  userdel smer_brojIndeksa (npr: nrtd912)
  1578.  rm -rf /home/smer_brojIndeksa (npr: /home/ nrtd912)
  1579. Ugasite virtuelnu mašinu.
  1580. Strana 18 / 18
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement