LAKI PINGVINI<>
082017<><>

Filesystem Hierarchy Standard (2)

Datoteke, atributi, dozvole

Ko je ko u sistemu fajlova?

U prošlom broju smo se dotakli teme organizacije fajl-sistema pod Linuksom, gde smo pokušali na da jednostavan način objasnimo jednu od stvari koje dosta zbunjuju nove korisnike tog operativnog sistema, a koji su ranije koristili Windows. U ovom broju ćemo pokušati da objasnimo još neke stvari koje se po načinu realizacije razlikuju od onoga što gledamo na Windowsima.

Sve je fajl

Što se Windowsa tiče, stvar je jednostavna i jasna. Fajl-sistem se sastoji od fajlova (datoteka) i direktorijuma (foldera) pomoću kojih se fajlovi organizuju u logičke celine. Linuks ima malo drugačiju filozofiju (ili drugačiju arhitekturu operativnog sistema), pa pod fajlove ne ubraja samo tipične datoteke sa podacima (txt, doc, mp3, jpg), već i sve ono što ima formu niza binarnih informacija. Stoga, Linux čak i tastaturu predstavlja kao datoteku, pošto se njen ulaz tretira kao niz karaktera. Pod fajlove ulaze i hard-diskovi, kernel strukture podataka, štampači, serijski portovi, programi za emulaciju terminala i dosta drugih stvari. Hardverski uređaji se kod Linuxa logički dele u dve grupe fajlova. Prva se odnosi na uređaje koji rade sa nizovima karaktera, dok se druga grupa odnosi na takozvane blok uređaje, u koje najčešće spadaju jedinice masovne memorije, kao što su hard-diskovi ili fleš memorije. Naziv su dobili po tome što se na tim uređajima podaci čitaju i pišu u blok formatu, a ne direktnom manipulacijom pojedinačnih bajtova.

Linuks generalno poznaje tri vrste fajlova: standardne fajlove, direktorijume i specijalne fajlove.

Prve dve kategorije nije potrebno predstavljati, pa ćemo se baviti samo specijalnim fajlovima. U njih spadaju:

• Kanali ili cevi (p) predstavljaju specijalni tip fajlova koji funkcionišu po principu bafera FIFO (First In First Out). Njihovim korišćenjem možemo odrediti da izlaz sa jednog procesa ide na ulaz drugog. U pitanju su fajlovi koji se često koriste za razmenu podataka između različitih programa ili između različitih procesa u okviru jednog programa.

• Soketi (s) su još jedan od „egzotičnih” tipova fajlova koje srećemo u Linuksu. Obavljaju sličnu funkciju kao kanali, samo što se ovde radi o dvostranoj komunikaciji. Iako se radi o fajlovima koji su vidljivi unutar fajl-sistema, njima jedino mogu pristupati procesi sa kojima su povezani.

• Linkovi (l) imaju funkciju da ukazuju na poziciju nekog fajla u fajl-sistemu, slično kao što to rade prečice (Shortcuts) u Windowsu. Linuks razlikuje dve vrste linkova. Prvi se nazivaju simboličkim linkovima i sadrže lokaciju fajla na koji se pozivaju. Drugi tip linkova su hard linkovi i oni u okviru indeksnog deskriptora dodatno nose zapis o fajlu na koji ukazuju. Izmene urađene bilo na originalu ili na hard linku biće prikazane bez obzira na to koji od njih pozivamo. Isto tako, ukoliko obrišemo originalni fajl, hard link će preuzeti njegovu funkciju.

• Blok uređaji (b) i karakter uređaji (c) su ukratko objašnjeni u prethodnom delu testa.

Atributi fajl-sistema

Kao što Windows ima sopstvene atribute fajlova kojima se pristupa komandom attrib (vuče koren iz DOS-a), tako i Linux ima svoje, a njima se pristupa preko komande chattr (change attributes). Uz njenu pomoć možemo na jednostavan način promeniti stanje željenog atributa. Uz chattr treba spomenuti i komandu lsattr (list attributes), čija je funkcija da prikaže trenutno stanje atributa u nekom direktorijumu. Ilustracije radi, izvršili smo ovu komandu nad direktorijumom /bin i dobili smo podatke prikazane na ilustraciji (gore desno).

Sintaksa komande je prilično jednostavna:

chattr [-RVf] [-v verzija] [atribut] fajlovi...

Opcioni parametri [-RVf] ukazuju da se atributi menjaju rekurzivno u okviru direktorijuma i da se simbolički linkovi preskaču (-R), a da program ispisuje opširan komentar tokom rada (-V), kao i da se preskaču poruke o greškama (-f). Parametar [-v] postavlja verziju fajla, dok se postavljanje atributa obavlja preko parametra [atribut] tako što uz slovo atributa koristimo i karaktere -+=. Znak minusa pred atributom znači da se atribut briše, dok plus označava njegovo setovanje. Znak jednakosti govori sistemu da su navedeni atributi jedini koje će fajl ili folder imati. Spisak atributa navodimo u tabeli (dole).

 
Fajlovi sa postavljenim atributom „a” se mogu otvoriti samo u modu za dodavanje podataka, ukoliko korisnik poseduje administratorska prava, odnosno ako je super user (su). Funkcija atributa „c” je slična onoj koja se kod Windowsa nalazi u okviru opcije Properties kontekstnog menija i njene podopcije Advanced. Takve fajlove kernel automatski kompresuje, dok korisnik koji ima pristup ima osećaj da se radi o nekompresovanim fajlovima. Sistemi koji podržavaju Ext2 particije imaju komandu dump, sa funkcijom bekapa fajlova. Kada ta komanda u svom radu naiđe na fajl koji ima postavljen atribut „d”, ona ga preskače i nastavlja sa radom. Svi fajlovi kreirani na particijama tipa Ext4 imaju setovan atribut „e”, što se može videti i na našoj ilustraciji. Jedan od najčešće korišćenih fajl atributa krije se pod slovom „i” i uz njegovu pomoć administratori sistema mogu onemogućiti brisanje željenih fajlova. Fajlovi sa atributom „j” na sistemima sa Ext3 particijom prvo zapisuju podatke o fajlu u žurnal i tek posle toga se vrši zapisivanje u sam fajl. Kod fajla sa atributom „s”, prilikom brisanja podataka, prvo se vrši „nulovanje” blokova koje on zauzima na disku, što će onemogućiti čitanje podataka iz obrisanog fajla. Prilikom zapisivanja fajlova sa atributom „t”, ne vrši se dodavanje blokova za povezivanje sa drugim fajlovima na kraju fajla. Reč je o tehnici koja se naziva tail merging i koja omogućava stvaranje velikih memorijskih blokova korišćenjem onih manjih, što omogućava znatne uštede prostora na disku. Fajlovi koji su označeni atributom „u” se prilikom procesa brisanja ostavljaju neobrisani.

Zadavanjem atributa „A” se sprečava zapisivanje podataka o vremenu pristupa fajlu. Atribut „S” govori sistemu da podatke zapisuje na disk direktno, bez keširanja. Slična je situacija i kod atributa „D”, koji radi istu stvar, ali sa direktorijumima. Objašnjenje rada atributa „I” prevazilazi okvire ovog teksta, što važi i za onaj sa oznakom „T”.

Primer korišćenja može da izgleda ovako:

sudo chattr -R +i /sbin /usr/sbin

Parametar -R daje instrukciju da komanda obradi sve fajlove rekurzivno i da zabrani brisanje fajlova u direktorijumima gde su smešteni sistemski binarni fajlovi (ovi fajlovi se inače veoma retko brišu). Ukoliko nakon ovoga komandom lsattr izlistamo sadržaj direktorijuma, videćemo da pored svakog fajla (gde je to bilo moguće) postoji setovan atribut „i”.

Dozvole i vlasništvo

 
Nije nikakva novost da sistem dozvola za rad sa fajlovima i direktorijuma zbog svoje sintakse plaši neiskusne korisnike Linuxa. U pitanju je moćan višekorisnički operativni sistem u kojem je potrebno precizno razgraničiti šta pojedinci i grupe mogu da rade sa određenim fajlovima i direktorijumima. Iako je dosta posla moguće odraditi preko grafičkog korisničkog interfejsa, često je u praksi potrebno posegnuti za komandnom linijom. Zato ćemo pokušati da na jednostavan način objasnimo rad sa ovim podsistemom.

Shell komanda ls (list) služi za prikazivanje sadržaja fajlova u direktorijumu. Sa dodatkom parametra -l dobijamo dosta detaljniju informaciju:

root@FAS:~# ls -l /etc

total 976

-rw-r--r-- 1 root root 2981 Sep 1 2015 adduser.conf

-rw-r--r-- 1 root root 45 Sep 1 2009 adjtime

drwxr-xr-x 2 root root 4096 May 30 02:13 alternatives

Ovde smo prikazali samo prve tri stavke (od 976) iz direktorijuma /etc. Rezultat rada komande se može podeliti na sedam logičkih celina (tabela desno):

Sada se koncentrišemo na prvu kolonu, koja za prvi prikazani fajl izgleda ovako:

-rw-r--r--

Šta ovo predstavlja? Reč je o načinu na koji Linux (UNIX, BSD, OS X, Android...) prikazuje dozvole za rad sa fajlom. Dalje delimo rezultat na sastavne delove:

Prvo polje koje označava tip fajla ima oznaku „-” kada se radi o standardnom fajlu, „d” ako je reč o direktorijumu i „l” kada se radi o linku. Ostale ređe korišćene vrednosti se nalaze u pratećoj tabeli.

Polje „vlasnik” prikazuje da vlasnik fajla (u našem slučaju root) ima pravo na čitanje (r), pisanje (w), ali da nema dozvolu za izvršavanje (x), što je i logično pošto nije reč o izvršnom, već fajlu sa podacima. Polje „grupa” nam ukazuje da član grupe koji nije vlasnik može samo da čita fajl (r), što se odnosi i na polje „svi korisnici”.

Dozvole se postavljaju komandom chmod, koja ima sledeći format:

chmod [opcije] dozvole[,dozvole] fajl1 [fajl2 ...]

Opcije su iste kao u primeru komande chattr, dok se dozvole mogu zadavati kako u oktalnom, tako i u simboličkom režimu. Davnih sedamdesetih godina kada je nastao UNIX, često se koristilo predstavljanje brojeva u oktalnom brojnom sistemu, odnosno, ciframa 0-7.

Uzmimo, na primer, fajl dokument.txt koji treba da ima maksimalne dozvole za vlasnika, kao i zabranu izmene podataka u fajlu za pripadnike grupe i sve ostale korisnike. Ako pogledamo prateću ilustraciju, videćemo da zbir svih oznaka za prvu trijadu iznosi 7. Druga i treća trijada nemaju mogućnost zapisivanja u sadržaj fajla, pa im je zbir jednak broju pet. Pošto je u pitanju tekstualni fajl, mogli smo mirne duše postaviti broj 4, pošto „x” ima puni smisao samo kod izvršnih datoteka. Dakle, naša komanda chmod bi imala sledeći oblik:

Chmod 755 dokument.txt

Svih sedam mogućih vrednosti su prikazane u sledećoj tabeli:

Postoji i varijanta kada se koriste četiri broja i u tom slučaju prvi od njih predstavlja specijalne flegove koje ovde nećemo obrađivati.

Nekima se opet više dopada simbolički režim komande chmod, kada se umesto brojeva koriste oznake. Naš prethodni primer u tom slučaju bi izgledao ovako:

chmod u=rwx,go=rx dokument.txt

Prvo da objasnimo oznake.

Kao što vidimo, prvo se vlasniku fajla (u) dodeljuje vrednost rwx, a zatim korisnicima grupe i ostalima dodeljujemo pravo čitanja i izvršenja, a oduzimamo pravo pisanja. Istu stvar smo mogli da postignemo sa:

chmod a=rwx,go-w moj_dokument.txt

gde smo prvo svim korisnicima dodelili sva prava (a=rwx), a zatim grupi i ostalima oduzeli pravo zapisivanja (go-w). Umesto „a”, mogli smo da koristimo „ugo”, a umesto znaka „=”, u ovom slučaju bi mogao da posluži i „+”. Znak „+” označava dodeljivanje dozvole, „-” njeno oduzimanje, dok „=” dodeljuje vrednost koja sledi iza njega.

Uz komandu za dodeljivanje prava pristupa, često se koristi komanda chown (change owner), čiji je zadatak da promeni vlasništvo nad nekim fajlom ili direktorijumom. Nećemo se detaljnije baviti njenom sintaksom, već ćemo predstaviti tri oblika koji se najčešće koriste:

chown [opcije] vlasnik fajl

chown [opcije] vlasnik:grupa fajl

chown [opcije] vlasnik:grupa direktorijum

Prvi oblik menja vlasnika fajla, drugi vlasnika i grupu, dok treći menja vlasnika i grupu direktorijuma. Primer za ovu poslednju varijantu bi mogao da izgleda ovako:

chown -hR igor:grupa2 /podaci

Opcija -R govori da se vrši rekurzija kroz direktorijum /podaci, -h forsira promenu simboličkih linkova, vlasnik fajla postaje korisnik igor kao član grupe „grupa2”.

• • •

Nadamo se da smo ovim tekstom uspeli da demistifikujemo još jednu temu koja od Linuxa pravi babarogu. Videli smo da ovaj operativni sistem ima veoma sofisticiran sistem rada sa atributima fajlova i pravima vlasništva nad njima, ali da uopšte nije teško maksimalno iskoristiti taj potencijal, kako se to na prvi pogled može učiniti.

Igor S. RUŽIĆ

 
Filesystem Hierarchy Standard (2)
Šta mislite o ovom tekstu?
Kazam Screencaster 1.4.5
Notepadqq 1.0.1
Arduino: Alatke za programiranje
Arduino Nano
Home / Novi brojArhiva • Opšte temeInternetTest driveTest runPD kutakCeDetekaWWW vodič • Svet igara
Svet kompjutera Copyright © 1984-2018. Politika a.d. • RedakcijaKontaktSaradnjaOglasiPretplata • Help • English
SKWeb 3.22
Opšte teme
Internet
Test Drive
Test Run
PD kutak
CeDeteka
WWW vodič
Svet igara



Naslovna stranaPrethodni brojeviOpšte informacijeKontaktOglašavanjePomoćInfo in English

Svet kompjutera