GNU/Linux - 1. deo - Uvod
Uvod
Free as in free ....
Pre ili kasnije, na ovaj ili onaj način, većina korisnika računara dođe u kontakt sa pojavom Linux-a (markantnog i sada već prilično popularnog operativnog sistema), * kao i sa pojavom drugih programa otvorenog koda, i nije preterano reći da prvi susret sa open-source softverom (a neretko i sledećih nekoliko susreta), kod zainteresovanih pojedinaca izaziva čuđenje.
Jedan deo korisnika, prema 'besplatnom' softveru gaji neodređenu podozrivost opšteg tipa (koja se najčešće može svesti na pitanje: "kako nešto što je besplatno može imati ikakvu pravu vrednost?!"), dok, sa druge strane, ima i onih koji unapred znaju da slobodni softver otvorenog koda ima vrednost (i te kako), ali se onda pitaju - zašto se takav softver plasira bez želje za zaradom od prodaje licenci?!
Naravno, na početku se postavljaju i razna druga pitanja, i stoga ćemo se kroz nekoliko članaka pozabaviti fenomenom slobodnog softvera, kako sa tehničke strane, tako i sa sociološke (jer zaista jeste u pitanju veoma interesantna pojava, doslovno globalnih razmera).
Diskutovaćemo o tome kako su nastajali sami softverski alati, kao i o tome kako se izrodila sjajna i plemenita ideja o slobodnom softveru i (naravno), pokazaćemo kako se open-source softver, pokrenut na Linux-u, može upotrebiti za kodiranje i razvoj programa i sajtova.
Slobodni softver - šta je to?
U najprostijem smislu, pojam slobodnog softvera (eng. Free and Open Source Software), označava programe otvorenog koda koji se mogu slobodno preuzimati, koristiti i - po želji (budući da je izvorni kod dostupan) - menjati u skladu sa različitim potrebama, uz poštovanje određenih pravila o kojima ćemo pisati u nastavku.
Pre svega, pomenimo sam Linux * - stabilan, pouzdan i veoma kvalitetan operativni sistem otvorenog koda, neopterećen nepotrebnim dodacima, dostupan za preuzimanje i slobodno korišćenje, bez restrikcija kakve korisnicima obično nameću komercijalni programi.
Osim toga što je je nezanemarljivo pouzdaniji i sigurniji od popularnih komercijalnih rešenja za desktop korisnike, Linux je takođe i znatno udobniji za svakodnevnu upotrebu (kada se novi korisnik navikne na okruženje koje nije toliko sklono da korisnike "drži za ruku", ali - i na to ćemo se osvrnuti kasnije).
Linux u današnje vreme jeste "legitimno popularan" među korisnicima desktop i laptop računara, međutim, tržišni uslovi utiču na to da operativni sistemi kao što su Windows i MacOS, ipak (tj. "i dalje"), budu nezanemarljivo popularniji.
Sa druge strane, Linux je zastupljeniji i popularniji na web serverima (prema konzervativnim procenama, smatra se da Linux pokreće više od dve trećine web servera), * Linux pokreće gotovo sve superkompjutere i, naravno, ne možemo zaboraviti da pomenemo Android - operativni sistem za mobilne telefone, koji je zasnovan (upravo) na Linux-u.
Pored Linux-a, prisutno je i nekoliko drugih (ali objektivno ipak manje popularnih) operativnih sistema, od kojih pre svega treba pomenuti OpenBSD i FreeBSD, veoma pouzdane operativne sisteme koji se najčešće koriste na serverima.
Naravno, prisutan je i veliki broj korisničkih programa i softverskih paketa različitih namena (i uglavnom je u pitanju softver veoma visokog kvaliteta, koji je takođe razvijan kroz ideje o otvorenosti koda i slobode korišćenja softvera).
Razlika između "slobodnog" i besplatnog softvera
Pošto smo u uvodu koristili zajedno odrednice slobodno i besplatno (u vezi sa softverom koji je tema članka), red je da dodatno pojasnimo: sam pojam slobodnog softvera podrazumeva pre svega slobodu u korišćenju i neskrivanje mehanizama programa od krajnjeg korisnika.
Programi koji su glavna tema članka, svakako jesu i besplatni, međutim, u svemu je najbitnija sloboda korišćenja, dok je prethodno navedena "besplatnost", u širem kontekstu - prilično sporedna.
Naravno, ne može se nikako zanemariti da se 'neplaćanjem' softvera ostvaruju značajne uštede, i upravo je 'potencijalna ušteda', nešto što je mnoge navelo u vode Linux-a, BSD-a (ili samo nekog konkretnog korisničkog programa koji je u datom trenutku dobro došao umesto određenog komercijalnog rešenja za čiju nabavku nije bilo sredstava), međutim, to što se softver ne plaća, samo je mali deo 'šire slike' i (da se još jednom osvrnemo na univerzalno prihvaćeni stav iznet u prethodnom pasusu), ukoliko se neko usmeri samo na aspekt besplatnosti - može se smatrati da je ozbiljno 'promašio poentu'.
Može se takođe reći da 'nezvanični maternji jezik IT industrije' (engleski), ne pomaže mnogo u otklanjanju nedoumica, jer dobro je poznato da na engleskom govornom području "slobodu" i "besplatnost" označava ista odrednica - "free".
U ranim godinama razvoja slobodnog softvera (da bi se zainteresovanima pojasnilo o čemu se zapravo radi), skovana je popularna krilatica "free as in freedom of speech, not free beer", a danas pojedinci pokušavaju da korišćenjem pojma "libre software", otklone nedoumice vezane za to da li je određeni softverski paket samo besplatan, ili je u pitanju softver otvorenog koda. Međutim, u praksi - u velikoj većini slučajeva (najčešće, već pri prvom susretu) - veoma je jasno da li se radi o softveru koji samo "ne treba platiti" - ili je u pitanju otvorenost koda i sloboda korišćenja u skladu sa principima koji su tema članka.
Kako se razvija open-source softver
Kada smo već kod principa, osvrnućemo se na ovom mestu na jedan od najvažnijih (ranije navedenih) principa slobodnog/open-source softvera - na slobodu izmene izvornog koda, što u praksi funkcioniše na jedan od sledećih načina:
- moguće je uspostaviti saradnju sa autorom originalnog softvera (naravno, uz pristanak autora)
- moguće je kreirati sopstvenu verziju programa ('nadogradnju'/'fork'), uz (pismeno) uvažavanje svih prethodnih autora (što je regulisano konkretnom licencom za plasiranje slobodnog softvera koju je prvobitni autor izabrao).
Naravno, bilo koji open-source projekat, može biti i samostalno delo određenog pojedinca ("od početka pa nadalje"), međutim - bar kada su u pitanju projekti iole većeg obima - najčešće dođe do određenog vida saradnje između pojedinaca i/ili organizacija, i upravo je saradnja (kao što smo takođe ranije nagovestili), mehanizam koji u velikoj meri doprinosi razvoju softvera i otkrivanju tehničkih nedostataka i sigurnosnih propusta (a možemo reći i da je u pitanju pojava koja - u najvećem broju situacija - doprinosi sveopštem razvoju kreativnosti i podstiče dobre odnose među programerima).
Nazovite nas naivnim, ili nekim drugim imenom (ako baš želite), pri čemu smo sasvim svesni poteškoća sa kojima se realizacija ideja o slobodnom softveru susretala tokom godina (a nažalost, susreće se i dalje), ali, sama činjenica da nekoliko decenija unazad veći broj programera međusobno sarađuje i bavi se razvojem softvera koji je za korišćenje dostupan svim zainteresovanim pojedincima i organizacijama (što predstavlja više nego potrebnu antitezu korporativnom duhu koji je zavladao velikim softverskim kompanijama koje su odavno zaboravile ideje o "lepoti, veličini i slobodi uma i duha" na koje su se - makar naizgled - oslanjale i pozivale u svojim počecima) - ipak uliva nadu za civilizaciju kojoj pripadamo.
Da li je slobodni softver (zapravo) u stanju da zameni komercijalne programe?
Popularnost GNU/Linux distribucija počela da doživljava pravu ekspanziju pre petnaestak godina (tj. sredinom prve decenije 21. veka), usled pojave brzog interneta, sve nižih cena CD i DVD diskova koji omogućavaju upis i (naravno), usled pojave lako dostupnih prenosnih USB uređaja sa znatnim smeštajnim kapacitetima. Veća dostupnost instalacionih medija (u prethodno pomenutom periodu), bila je propraćena i sve češćom pojavom tekstova koji su posvećeni GNU/Linux-u i slobodnom softveru uopšte, pri čemu je jedan od relativno čestih motiva u pomenutim napisima bila i tvrdnja da slobodni softver može u potpunosti zameniti komercijalne programe.
Možemo odmah reći da je takav stav (onomad), ipak bio previše optimističan, ali, u međuvremenu je ostvaren primetan napredak. Situaciju ćemo (naravno) posmatrati iz sadašnje perspektive, i pošto smo naveli da slobodni softver sam po sebi jeste veoma kvalitetan (ostavljamo vam da sami ustanovite da li smo vas išta "prevarili" po tom pitanju), utvrdićemo i u kojoj meri je slobodni softver (zapravo) u stanju da zameni skupi komercijalni softver (pogotovo pakete za profesionalnu upotrebu, iza kojih stoje ogromna ulaganja i decenije razvoja)?
Kratak odgovor mogao bi biti - "u velikoj meri, ali, ne baš skroz", međutim, sledi ipak opširnija diskusija ....
Objektivni kvalitet slobodnog softvera
U većini slučajeva, pojedinci i firme mogu preći na Linux i open-source programe (krajnje 'bezbolno'), ali, ponekad (u određenim situacijama) - nije tako, i stoga, u smislu upotrebljivosti, open-source softver možemo okvirno podeliti u sledeće tri kategorije:
- programi opšteg tipa / za svakodnevne potrebe
- široko rasprostranjeni softver za profesionalnu upotrebu
- usko specijalizovani programi za profesionalnu upotrebu
Programi iz prve kategorije (sam OS, uslužni programi opšte namene i sl), sasvim lako se mogu nositi sa odgovarajućim komercijalnim programima, a često ih i prevazilaze (ako nas pitate - veoma daleko). :)
Kada su u pitanju programi iz druge kategorije iz gornje klasifikacije, to jest, office paketi i uobičajeniji alati namenjeni programerima: kompajleri, interpretatori, baze podataka, IDE okruženja, napredni editori teksta namenjeni kodiranju (jedna od naših omiljenih tema kojoj ćemo zasigurno posvetiti zaseban članak), LSP serveri i drugi pomoćni alati za razvoj softvera i web stranica - korisnicima su (takođe) dostupni brojni paketi izuzetnog kvaliteta (pri čemu su neki paketi korisnicima već poznati iz Windows i MacOS okruženja, a ima i onih koji su svojstveni samo Linux okruženju).
Međutim, u određenim oblastima industrije (III kategorija iz gornje kategorizacije), situacija nije baš skroz povoljna za korisnike open-source softvera.
Na primer, kada je u pitanju softver koji se koristi u oblasti industrijskog i grafičkog dizajna, a pogotovo kada je u pitanju usko specijalizovani softver za kontrolu industrijskih procesa i sl. (softver koji ipak zahteva mnogo više vremenskih i materijalnih resursa za razvoj, u odnosu na ono što open-source zajednica može 'iznedriti' u ovom trenutku), open source softver još uvek 'kaska' iza komercijalnih rešenja bar pomalo (ponekad i "malo više"), ali, open-source programi drže se sasvim prihvatljivo i u navedenim oblastima (i vremenom sve više i više napreduju).
Naravno, ne može se prenebreći ni činjenica da kada govorimo o vlasničkom softveru (koji se po funkcionalnosti poklapa sa open-source softverom iz III kategorije), govorimo zapravo o softverskim paketima u čiji je razvoj uloženo više decenija i više (desetina) milijardi dolara ili evra.
Mogućnost prelaska na open-source softver
Pre svega, jasno je iz prethodnog izlaganja da se mnogi profesionalni korisnici koji tek biraju softver za određene poduhvate, u današnje vreme mogu u potpunosti opremiti open-source programima, to jest, u takvim okolnostima ne postoji prava dilema (u praktičnom smislu).
Nasuprot navedenom, ako ste deo velike poslovne organizacije koja je (kao što vrlo često biva), duboko ukorenjena u svojoj vezanosti za određeni vlasnički/licencirani softver - pa samim tim i pojedinci koji su zaposleni u takvoj organizaciji, praktično moraju koristiti "propisani" softver (ako žele da ostanu funkcionalni u okviru sistema), prelazak, u praktičnom smislu - najverovatnije jeste (suviše) težak.
Međutim, za neke druge korisnike koji već upotrebljavaju vlasnički softver, ali nisu previše vezani za isti (pogotovo ako su u pitanju freelanceri i manji nezavisni timovi), legitimna mogućnost izbora najčešće postoji - pod uslovom da open-source softver obezbeđuje dovoljno funkcionalnosti - pa svakako vredi razmisliti o tome da li se isplati i dalje koristiti (vlasnički) softver koji je (možda) po pitanju tehničkih karakteristika objektivno napredniji - ali zato podstiče (ponekad i krajnje zabrinjavajuću), zavisnost korisnika od softvera?!
Ako imate izbor i pri tom vodite računa o svojoj (duhovnoj/intelektualnoj/softverskoj/poslovnoj) slobodi - nemojte se mnogo dvoumiti.
Na ovakve teme osvrtaćemo se povremeno u narednim člancima, dok ćemo se u nastavku ovog članka (u najvećoj meri), vratiti isključivo na 'tehnikalije'.
Istorija GNU/Linux distribucija, UNIX-oliki operativni sistemi uopšteno
Ako u idejnom smislu, iza GNU/Linux distribucija stoji zamisao o slobodi upotrebe softvera, u tehničkom smislu, iza svega stoji jedan poznat, uvažen i dobro projektovan operativni sistem (i naravno, mnogo dobre volje) ....
Kratak istorijat UNIX-a
Početkom 70-ih godina 20. veka, u Belovim Laboratorijama (odeljenje za istraživanje i razvoj pri kompaniji AT&T, Nju Džerzi, SAD), razvijen je operativni sistem UNIX - verovatno najuticajniji operativni sistem u istoriji računarske tehnike.
U okviru ogromne kompanije koja se bavila održavanjem telefonske mreže SAD-a (i u tom smislu je imala svojevrstan monopol, što je kompaniji donosilo prihode i status, a mnogim istraživačima u okviru kompanije, izvesnu slobodu i ugled), manji tim programera predvođen Kenom Tompsonom * i Denisom Ričijem, ** uz nekolicinu probranih saradnika, *** razvijao je (i razvio), kvalitetan i jednostavan operativni sistem UNIX, kao svojevrsnu antitezu takođe kvalitetnom i naprednom, ali zato veoma kompleksnom (i za održavanje komplikovanom), višekorisničkom operativnom sistemu Multics koji je kompanija do tada koristila (ili, bolje rečeno, pokušavala da koristi, što nije bilo baš skroz izvodljivo s obzirom na skromne računarske kapacitete tadašnjih mainframe računara i, u proporcionalnom smislu, velike zahteve pomenutog OS-a).
Može se reći, objektivno, da UNIX nije (bio) "idealno projektovan OS bez nedostataka", može se reći da takozvana "UNIX filozofija" (o kojoj ćemo govoriti u nastavku), nije nepogrešiva i baš uvek primenjiva, ali - u praktičnom smislu - UNIX je uvek važio za sistem koji je od samog početka projektovan da bude jednostavan (lekcija naučena posle neuspeha projekta Multics), modularan, pouzdan i solidan (u izvornom značenju reči), a njegovim razvojem bavili su se ozbiljni programeri koji su za svoje odluke (u najvećoj meri), odgovarali samo jedni drugima i principima dobrog programiranja (a ne interesima marketinga).
Istorija UNIX-a nije ipak "baš skroz ružičasta" i poslovni interesi se zapravo jesu upleli u razvoj OS-a - i to prilično rano, to jest: već posle nekoliko godina, UNIX je (skoro naprečac), od sistema otvorenog koda postao softver zatvorenog koda sa veoma skupom licencom, međutim - ta promena nije bitno uticala na tehnološka dostignuća (jer su o 'tehnikalijama' i dalje nastavili da odlučuju isti oni ljudi koji su i započeli razvoj).
Što je još važnije (bar za uvodnu priču o Linux-u i srodnom softveru), iako je UNIX postao zatvoren u smislu licence, u idejnom smislu je bar još neko vreme ostao blizak ljudima iz računarskih akademskih krugova * i nastavio je (i te kako), da privlači pažnju ....
Pokret GNU
Početkom 80-ih godina 20. veka (1983), Ričard Stalman (Richard Matthew Stallman), dotadašnji istraživač na univerzitetu MIT (i jedan od glavnih junaka priče o slobodnom softveru), pokrenuo je projekat GNU, * čiji je najvažniji zadatak - promocija ideja o slobodnoj upotrebi softvera.
Kao i mnogi pojedinci (u navedenom periodu), čuveni "RMS" bio je inspirisan tehničkim mogućnostima UNIX-a, ali, istovremeno - razočaran poslovnom politikom različitih softverskih kompanija, koje su sve više i više težile "zatvaranju" i "skrivanju" svojih programskih kodova (što se nažalost odnosilo i na UNIX).
Pored promovisanja ideja o dostupnosti izvornih kodova i sveopštoj slobodi u korišćenju računarskih sistema (što naravno nisu ideje koje su u skladu sa većinom principa tržišne ekonomije), Ričard Stalman i njegovi saradnici bavili su se i programiranjem (zapravo, u krajnje nezanemarljivom obimu).
U okviru projekta GNU razvijani su programi po ugledu na programe iz UNIX-a, pre svih - osnovni paket alata za svakodnevnu administraciju sistema (GNU Core Utilities), * kompajler GCC i editor EMACS - što su sve programi koji se i dan-danas koriste u GNU/Linux distribucijama.
Međutim, za pun operativni sistem falila je ("samo") jedna komponenta - ona glavna.
Bez obzira na poveći broj korisnih alata koje je projekat GNU uspešno iznedrio, rad na sopstvenom kernelu * po imenu GNU HURD, nekako je "zapinjao", kernel duže vreme nije bio dovoljno stabilan, u upotrebu je ušao znatno kasnije, i nije stekao iole veću popularnost i prihvaćenost (ni iz daleka).
Pravi kernel bez koga ne bi bilo "Linux-a" (a verovatno ni šire rasprostranjenosti slobodnog softvera), projektovao je neko drugi ....
Pojava Linux kernela
Na samom početku 90-ih godina 20. veka, Linus Torvalds, u to vreme student informatike na Univerzitetu u Helsinkiju u Finskoj (a danas, jedan od najprepoznatljivijih pojedinaca u računarskoj industriji), proučavao je operativne sisteme i računarski hardver.
Da bi što bolje iskoristio potencijal svog tadašnjeg računara "tri-osam-šestice" (PC sa procesorom 30386 i 4MB RAM-a), mladi Linus je odlučio da kreira sopstveni operativni sistem, po ugledu na MINIX (u to vreme popularan i rado korišćen klon UNIX-a). *
Radio je vredno i već je 1991. objavio jezgro operativnog sistema (kernel), uz nekoliko portovanih programa (pre svih, bash i GCC) i takođe - učinio je sav kod javno dostupnim preko akademskih računarskih mreža.
Poduhvat se ubrzo pročuo, nova i zanimljiva ideja (i uspešna izvedba), uzela je maha, a nedugo zatim su počeli da se pojavljuju softverski paketi koji su danas u svetu računarskih tehnologija poznati (i popularni) kao GNU/Linux distribucije. **
GNU/Linux distribucije - opšte karakteristike
Kada se u današnje vreme pomene termin "GNU/Linux distribucija", tipično se misli na softversku celinu koju čine, pre svega:
- Linux jezgro (kernel)
- GNU alati za svakodnevnu administraciju sistema (GNU Core Utilities)
Pored navedenih komponenti, prisutne su (tipično, ali ne i uvek), i sledeće komponente:
- grafički server (X.Org, ili, kao modernije rešenje koje još nije za prave uzelo maha, Wayland)
- menadžer prozora ili desktop okruženje (u oba slučaja, u pitanju je softver koji omogućava pokretanje programa sa grafičkim interfejsom)
- korisnički programi za svakodnevnu upotrebu
U većini distribucija, veoma važnu ulogu igra i menadžer paketa, program čija je svrha - ažuriranje operativnog sistema i korisničkih programa.
Neke distribucije su "minimalističke", sastavljene samo iz jezgra i osnovnih alata, čime je korisnicima ostavljena potpuna sloboda za izgradnju ostatka sistema (ali - i odgovornost (!)), dok su druge distribucije bogato opremljene i potpuno konfigurisane (po sistemu "ključ u ruke").
Naravno, postoji i mnoštvo distribucija čije su karakteristike "negde između" dve navedene krajnosti.
Međutim - koliko god delovalo čudno pri prvom susretu sa Linux-om (i kao što smo već nagovestili) - ne postoji "Operativni sistem Linux", niti centralizovana organizacija koja iza njega stoji (za razliku od operativnih sistema kao što su Windows i MacOs).
Umesto centralizovanog pristupa (budući da je u pitanju softver otvorenog koda), programerima i drugim stručnjacima data je sloboda da se udružuju i kreiraju sopstvene softverske celine po ranije navedenim obrascima
Distribucije nose sopstvene nazive (koji sadrže - ili ne sadrže - odrednice "GNU" i "Linux"), ali - u praktičnom smislu - uvek je pri susretu sa bilo kojom od distribucija, odmah jasno da je u pitanju GNU/Linux (i u smislu načina na koji OS funkcioniše, i po pitanju izgleda).
"Fragmentirani" i "necentralizovani" pristup koji smo opisali, svakako podstiče kreativnost kod programera koji žele da samostalno ili u grupama kreiraju i održavaju sopstvene distribucije (a korisnicima omogućava izbor distribucije i prilagođavanje sistema po želji), ali, moramo se osvrnuti i na to, da - u praksi - ponekad nije lako uskladiti sve komponente određene distribucije (ni iz daleka), niti je lako uskladiti sve zahteve koji se pred distribuciju stavljaju, i stoga uspešno kreiranje i održavanje funkcionalne distribucije - svakako zaslužuje uvažavanje.
Kada je u pitanju izgled, GNU/Linux distribucije omogućavaju korisnicima najrazličitije oblike prilagođavanja korisničkog interfejsa, što se postiže izborom i podešavanjem desktop okruženja, ili menadžera prozora (pri čemu su opcije zapravo znatno brojnije i "šarolikije" u odnosu na Windows ili Mac) ....
Desktop okruženja
Desktop okruženja (eng. desktop environment(s)), predstavljaju relativno obimne i zaokružene softverske pakete, koji omogućavaju pokretanje programa koji koriste prozore i druge grafičke elemente.
Pored toga što pružaju mogućnost pokretanja GUI programa, desktop okruženja su (gotovo uvek) opremljena i grafičkim alatima za obavljanje administrativnih i drugih zadataka, zbog čega u velikoj meri podsećaju na Windows ili MacOS (što korisnicima koji sa navedenih sistema prelaze na Linux, svakako olakšava početni period prilagođavanja).
Najpopularnija desktop okruženja (ali, naravno, ne i jedina), su:
- KDE
- Gnome
- Xfce
Na gornjoj slici možemo videti kako izgleda KDE/Plasma (moderno desktop okruženje za GNU/Linux distribucije): otvoreni meni omogućava pristup GUI programima koji nalikuju programima iz popularnih komercijalnih operativnih sistema (vidimo među prečicama kontrolni panel i nekoliko programa opšteg tipa), a na desktopu primećujemo dva pokrenuta korisnička programa.
Menadžeri prozora
Menadžeri prozora (eng. window manager(s)), donekle su "u suprotnosti" sa prethodno navedenim načinom funkcionisanja desktop okruženja.
U pitanju su znatno jednostavniji softverski paketi, koji takođe omogućavaju pokretanje GUI aplikacija (GUI = Graphical User Interface (prozori i drugi grafički elementi)), ali, menadžeri prozora uglavnom ne sadrže dodatne alate, i stoga se od korisnika (praktično) očekuje da koriste terminal za administraciju sistema i (naravno) - da samostalno opreme sistem drugim neophodnim programima.
Menadžeri prozora takođe zahtevaju i manje resursa za pokretanje (potpuno učitan OS sa pokrenutim menadžerom prozora, tipično zauzima manje od 250MB u operativnoj memoriji računara), i takva ušteda, iako naizgled ne igra preveliku ulogu (na iole modernijim računarima u današnje vreme) - svakako dobro dođe - i ostavlja dobar utisak.
Najpopularniji menadžeri prozora su:
- i3
- dwm
- Xmonad
Na donjoj slici vidimo menadžer prozora dwm (Dynamic Window Manager) ....
.... a vidimo i pokrenut terminal, sa otvorenim editorom teksta.
Naizgled, veoma slično desktop okruženju koje smo videli na prvoj slici, ali, postoji razlika: desktop okruženja dolaze sa grafičkim programima za podešavanje sistema (koje nismo prikazivali; možete na internetu naći brojne video klipove koji prikazuju funkcionalnost desktop okruženja za GNU/Linux distribucije), dok takve aplikacije ne dolaze u paketu sa menadžerima prozora.
Najprostije rečeno, "što se tiče 'šminke'" (za menadžere prozora) - već ste videli skoro sve. :)
U nastavku teksta (i narednim člancima na temu Linux-a), nećemo posvećivati preveliku pažnju desktop okruženjima, koja nalikuju grafičkim interfejsima operativnih sistema Windows ili MacOS (naravno - ne zato što desktop okruženja smatramo nečim "lošim").
Čitaoci koji se zanimaju za desktop okruženja za Linux, lako mogu pronaći veliki broj kvalitetnih tutorijala, video klipova i članaka, koje su kreirali razni korisnici koji su legitimno zainteresovani za takav pristup (pa ne smatramo da bi naš doprinos u navedenom kontekstu bio previše značajan). :)
Međutim, pre svega želimo da pažnju čitalaca usmerimo na nešto drugačiji pristup koji je prilagođen što efikasnijem pokretanju i izvršavanju programa (najpre, razvojnih okruženja za kreiranje programa i sajtova, a potom i drugih programa).
Navedeni pristup, često se kolokvijalno naziva "Linux minimalizam".
"Linux minimalizam"
Ako desktop okruženje shvatimo (u prenesenom značenju), kao udoban, luksuzan automobil pogodan za krstarenje po putevima (ili kao manji putnički avion koji prevozi turiste iznad lepih predela i sl), menadžere prozora možemo uporediti sa bolidima Formule 1 ili sa reli automobilima, to jest, sa vozilima koja zanemaruju luksuz zarad performansi.
Ali, bez brige ....
Pre svega, okruženje većine menadžera prozora je sasvim udobno i za "opuštajuće"/"svakodnevne" aktivnosti (gledanje filmova, slušanje muzike, 'surfovanje' po internetu i sl), a ako ipak smatrate da nije tako, Linux distribucije omogućavaju da pored menadžera prozora nesmetano instalirate i desktop okruženje po svom izboru (na primer: posle programiranja, izlogujete se iz menadžera prozora dwm, ulogujete se na KDE desktop i gledate YouTube klipove).
Da se vratimo na programiranje ....
Pre svega, jedna od glavnih odlika menadžera prozora je usmerenost na rad sa više radnih površina koje se lako mogu menjati preko jednostavnih prečica
U praksi, to znači da na jednoj radnoj površini možemo otvoriti, na primer, editor ....
.... na drugoj radnoj površini možemo otvoriti terminal (preko koga ćemo pokretati Python skripte) ....
.... i potom se možemo prebacivati sa jedne na drugu radnu površinu preko prečica ALT+1
i ALT+2
(zapravo, najčešće se umesto tastera ALT
ipak koristi Win
taster).
Navedeni pristup može delovati pomalo čudno na početku (dok se korisnik ne uhoda), ali, po mnogo čemu je zapravo racionalniji (i prosto rečeno - zgodniji), onda kada je potrebno da se često prebacujemo sa jednog prozora, koji treba da bude prikazan preko celog ekrana, na drugi prozor (a ako je potrebno na jednu virtuelnu radnu površinu smestiti dva ili više prozora, i to je (naravno) moguće).
Kad smo već kod "naravno mogućeg", pomenimo da menadžeri prozora omogućavaju i menjanje dimenzija prozora (programi tipično rade u full-screen režimu, ali, ne mora biti tako), a moguće je i otvaranje "prozora-unutar-prozora" (open/save dijalozi i sl).
U svemu, korisnik tipično stekne naviku da određeni program uvek pokreće na radnoj površini sa određenim rednim brojem, i stoga, prebacivanje sa jedne radne površine na drugu - lako "uđe u prste" (pri čemu podsvesno uvek znamo "koji program nas gde čeka", pa svesnu pažnju, možemo usmeriti na bitnije zadatke).
U opštem smislu (kada su u pitanju menadžeri prozora), pristup koji podrazumeva korišćenje jednostavnog, ali i dalje veoma funkcionalnog grafičkog okruženja u kome se komande za podešavanje sistema zadaju preko terminala, na samom početku (budimo iskreni), ume pomalo da "žulja", ali, vredi primetiti dve stvari:
- na početku - korišćenje konzolnih programa u terminalu predstavlja priliku za sticanje uvida u podešavanja sistema i učenje (priliku koju korišćenje GUI programa koji "skrivaju terminal", bojimo se, u velikoj meri uskraćuje)
- kada se korisnik uhoda - korišćenje terminala znatno olakšava i ubrzava obavljanje zadataka na računaru (ne, ne šalimo se - ni najmanje :)) i, takođe, posle nekog vremena, konzolni programi - ne samo da ne "žuljaju", već (na čudan način) - postanu i veoma "udobni". :)
Pogledajmo i nekoliko primera.
Primeri pokretanja programa
Sistemska podešavanja se obavljaju preko terminala (na sledećoj slici možemo videti pozivanje komande za ažuriranje instaliranih programa (u pitanju je program pacman na distribuciji Arch Linux)):
Na gornjoj slici takođe možemo primetiti i "bojenje sintakse" u terminalu, uz prepoznavanje pravilno zadatih komandi (zelena boja), ili nepravilno zadatih komandi (crvena boja), a u nastavku ćemo detaljnije prodiskutovati i o tome šta su zapravo: terminal, shell i komandna linija (odnosno, 'komandni prompt').
Pored podešavanja sistema preko CLI programa, * u terminalu se mogu pokretati i TUI programi * (na slici ispod, možete primetiti sjajni editor teksta Vim, koji smo pominjali prošle godine na našim stranicama, a možete primetiti i program htop koji prikazuje procesorsko i memorijsko zauzeće, pokrenute procese i sl):
Pored konzolnih programa, preko menadžera prozora moguće je pokretati i GUI programe na kakve ste navikli (recimo, web browsere) ....
.... kao i druge programe (na kakve možda niste navikli) ....
.... pri čemu (naravno), otvaranje sporednih/pomoćnih prozora, takođe nije nikakav problem (kao što smo već naveli) ....
Kratak rezime
Budući da smo 'pretresli' sve što je 'trebalo da bude pretreseno' za sam početak, napravićemo kratak rezime pristupa u podešavanju distribucije, koji predlažemo čitaocima (koji na Linux-u žele da se bave programiranjem).
Pored korišćenja Linux kernela i osnovnih GNU alata (kao osnove sistema koja se sreće u skoro svim Linux distribucijama), pristup podrazumeva:
- korišćenje menadžera prozora umesto desktop okruženja
- oslanjanje na jednostavne (ali - veoma moćne) programe u terminalu
- neizbegavanje programa sa grafičkim okruženjem
Što se tiče poslednje stavke, među krajnje "tvrdokornim" poštovaocima Linux-a (ili, bar - među onima "najtvrdokornijima"), postoji tendencija gotovo potpunog oslanjanja na programe u terminalu (recimo, postoje čak i web browseri za terminal koji samo prikazuju tekstualni sadržaj HTML dokumenata, a manje-više, i programi svih drugih namena).
Naš pristup je ipak umereniji (makar u odnosu na "vrhunski nivo tvrdokornosti":)), i podrazumeva da "nećemo programima zamerati na tome što imaju prozore", to jest - programe ćemo ocenjivati samo u smislu softverskog dizajna (optimizovanosti i sl).
Kao što smo ranije naveli, i sami terminali su se "prolepšali" tokom vremena (već smo to videli na slikama) i, što je važnije - postali su veoma 'udobni' za obavljanje svakodnevnih aktivnosti.
U pravom smislu reči, iza svega stoje sledeće okolnosti: bez obzira na to što sve "liči" na pravi, stari tekstualni režim kakav se sretao do pre 20 ili 25 godina (a po potrebi se koristi i danas) - u pitanju su ipak programi koji funkcionišu u grafičkom radnom okruženju i podržavaju 24-bitne boje i transparentnost (naravno, i druge opcije, kao što su: izbor oblika i veličine slova, "bojenje sintakse" za shell prompt i sl).
Sa druge strane, sam način rada, jeste "starinski" (tekstualne komande koje je potrebno naučiti pre upotrebe), i stoga (ako nas pitate), radi se o najboljoj mogućoj kombinaciji.
Budući da smo u diskusiju još pre nekog vremena uveli određene pojmove koji često izazivaju nedoumice, u nastavku ćemo se osvrnuti (upravo), na smisao pojmova:
- terminal
- shell
- prompt
Najosnovnije "tehnikalije"
Pre nego što pređemo na "konkretnije" teme (pozivanje komandi, struktura direktorijuma, principi "UNIX filozofije" i sl), pozabavićemo se najosnovnijim odrednicama (odnosno, konkretnim pojavama koje stoje iza samih termina), sa kojima ćete se u radu sa Linux distribucijama susretati (doslovno) svakodnevno.
Kao što smo već naveli, osvrnućemo se pre svega na pojmove kao što su "terminal" i "shell (prompt)" i uvešćemo ("ad hoc"), nekoliko osnovnih komandi, preko kojih ćemo demonstrirati šta se u osnovnom smislu "može očekivati" od Linux-a.
Terminal
U "stara" vremena, kada su računari tek počinjali da se koriste masovnije (cca. početak sedamdesetih godina 20. veka), model eksploatacije računara u preduzećima podrazumevao je pristup koji je drugačiji od današnjeg (korišćenje radnih stanica koje su međusobno umrežene, ali, za računanje koriste sopstvene resurse): nekada je sve zadatke obavljao centralni računar (mainframe), a zahtevi za obradu slali su se preko terminala - radnih stanica koje predstavljaju kombinaciju tastature i monitora, to jest, ulazno-izlaznu jedinicu preko koje se naredbe zadaju u tekstualnom obliku.
U okvirima modernih operativnih sistema, odrednica "terminal" tipično označava program u kome se naredbe zadaju (i rezultati prikazuju) - u obliku teksta, ali, kao što smo već objasnili, najčešće su u pitanju programi koji se pokreću u grafičkom radnom okruženju.
Po želji, možemo i dalje raditi u pravom tekstualnom režimu (bez pokretanja grafičkog servera), međutim, najčešće za tako nečim nema potrebe (simulacije terminala su programi koji su funkcionalniji, znatno prijatniji za svakodnevni rad, a svakako i estetski dopadljiviji - u svom "minimalizmu").
Međutim, "shell" koji se pokreće u terminalu, skoro je 'isti' onaj shell * koji se pokretao ranije u "pravom" tekstualnom režimu (u okviru UNIX-olikih sistema), dok još nije ni bilo grafičkih simulacija terminala.
Shell (prompt)
Kada u nekom UNIX-olikom operativnom sistemu otvorimo terminal, i kada ugledamo "tekst" sledećeg formata ....
.... u pitanju je shell prompt (tj. komandna linija):
- Shell * je program koji učitava i tumači naredbe korisnika.
- Shell prompt je spoljašnji (vidljivi) deo shell programa, koji korisnicima omogućava unos naredbi u tekstualnom obliku.
Šta znači kada navedemo da shell program tumači naredbe (jer - na prvi pogled - deluje da "nema šta da se tumači, i da se valjda zna čemu naredbe služe!" :))?!
Najprostije rečeno, shell program mora ispitati sadržaj i smisao teksta naredbe.
Shell programi omogućavaju veoma zanimljive načine vezivanje komandi (videćemo primere već u nastavku), ali, takva sloboda (kako obično biva), ostavlja i mogućnost zloupotrebe, * ili jednostavno - mogućnost pojave grešaka, ** i stoga je potrebno uspostaviti mehanizam koji vodi računa o navedenim pojedinostima.
Drugim rečima, shell programi interpretiraju naredbe veoma slično tome kako Python ili Node.JS interpretiraju naredbe kada se interpretator pokrene u interaktivnom režimu, tj. bez navođenja skripte koju treba pokrenuti (za primer ćemo uzeti Node) ....
.... a kada već sve "liči na Python ili Node JS", onda nije veliko iznenađenje ni to da su shell programi na UNIX-olikim operativnim sistemima (kao što sada, verovatno i sami pretpostavljate), u stanju da pokreću i skripte (uz korišćenje promenljivih, grananja, funkcija i sl).
Da pojasnimo dodatno princip interpretacije: sledeća naredba ....
.... preko koje se u UNIX-olikim operativnim sistemima "izlistava" sadržaj direktorijuma (tj. 'foldera'), uz prikaz skrivenih direktorijuma i datoteka (-a
), i tako da se prikazuje detaljan spisak u kome su sve stavke jedna ispod druge (-l
), može delovati kao integralni deo operativnog sistema (koji "nekako" ne podleže prepoznavanju, interpretaciji i sl), ali - zapravo nije!
U pitanju je zaseban program (doslovno, izvršna datoteka u jednom od sistemskih direktorijuma), i takav program poziva se preko - komandne linije (tj. "shell prompta").
Po unosu tekstualne komande, shell program analizira 'sadržaj teksta' (uneti naziv komande i predate argumente), posle čega - ako je sve u redu - program biva pokrenut.
Ako je ls
samo običan program, možete verovatno pretpostaviti da isto važi i za shell (odnosno, verujemo da već naslućujete da je korisnicima omogućeno da samostalno izaberu shell program).
Tokom proteklih nekoliko decenija, sledeći shell programi izdvojili su se po pitanju kvaliteta i popularnosti među korisnicima:
- bash (Bourne Again Shell) - podrazumevani shell u većini GNU/Linux distribucija (i, sam po sebi, sasvim funkcionalan program)
- FISH (Friendly Interactive Shell) - shell program koji je tipično popularan među korisnicima Linux-a koji su savladali osnove i vole dodatnu funkcionalnost (auto-complete, auto-suggestions, bojenje sintakse), ali, ne žele još uvek da se 'bakću' detaljnim podešavanjem konfiguracionih datoteka
- zsh (Z-Shell) - objektivno najsveobuhvatniji shell program koji nudi brojne mogućnosti za prilagođavanje (ali i brojne mogućnosti za "pretrpavanje" shell prompt-a, ako korisnik sebi da "previše oduška")
(Na slici br. 2 i drugim slikama, mogli ste videti program Zsh.)
Posle najosnovnijih tehnikalija, usmerićemo se na nekoliko osnovnih Linux komandi, principe UNIX-filozofije, nekoliko praktičnih primera i (na kraju), na strukturu direktorijuma (tj. foldera) u UNIX-olikim operativnim sistemima.
Nekoliko najosnovnijih komandi u UNIX-olikim sistemima
Pored komande ls
, navešćemo još nekoliko osnovnih komandi koje se koriste u GNU/Linux distribucijama (i drugim "Nix" sistemima):
Posle upoznavanja sa samim osnovama, reklo bi se da je došao trenutak da se upoznamo i sa idejama koje celokupno iskustvo sa UNIX-olikim operativnim sistemima čine posebnim (bez brige, biće i komandi - i te kako). :)
UNIX filozofija (implementirana u GNU/Linux distribucijama)
Takozvana "UNIX filozofija" zasniva se na sledećim osnovnim principima:
- svaki program treba da obavlja samo jedan posao - na najbolji i najefikasniji mogući način
- programi treba da sarađuju međusobno (to jest, da se međusobno povezuju i razmenjuju tekstualne poruke)
- u skladu sa prethodnim principom, pri projektovanju određenog programa treba voditi računa o tome da tekstualni podaci koje program ispisuje na izlazu, budu formatirani tako da mogu biti korišćeni kao ulazni podaci u drugom programu
- za nove zadatke koje nije moguće rešiti povezivanjem dostupnih programa, potrebno je pisati nove programe - umesto opterećivanja postojećih programa dodatnim opcijama
- format za razmenu podataka između programa (kao što je već nagovešteno), treba da bude (običan) tekst
Navedena pravila ne bi imala previše smisla da je "UNIX filozofija" nastala kao manifest koji je iznet u javnost samo kao nešto što "lepo zvuči" (ali nema dubljeg smisla) - pre nego što je išta od navedenog isprobano u praksi.
Principi koje smo naveli, polako su poprimali oblik upravo kroz praksu, i tek je onda sve "bačeno na papir" (kao svojevrstan 'amanet' za buduće generacije).
Sa jedne strane - može se reći da su optimalna rešenja proistekla iz nužde (kao što smo već naveli, u vreme nastanka UNIX-a, memorija je i dalje bila veoma skupa i prilično nedostupna, i stoga je postojala velika potreba za uštedom memorije (takođe, procesori su bili prilično spori)).
Sa druge strane, tvorci UNIX-a su svakako imali i "dugoročnu viziju", to jest, još na početku su uvideli da principi po kojima projektuju operativni sistem i druge programe, mogu samo funkcionisati bolje - onda kada veće količine memorije postanu dostupne (i kada procesori postanu brži).
Pogledaćemo u sledećih nekoliko odeljaka kako sve funkcioniše - u praksi.
Protočna obrada i redirekcija
Termini "protočna obrada podataka" i "redirekcija", koji se vezuju pre svega za kontekst upotrebe u UNIX-olikim operativnim sistemima (ali i za razne druge situacije), označavaju postupke koji podrazumevaju prosleđivanje podataka između programa i datoteka (najčešće u okviru jedne tekstualne naredbe).
Odmah ćemo sagledati i jednostavan primer ....
Počnimo od izvršavanja (reklo bi se) najosnovnije komande - ls
, i pošto još uvek ne koristimo koncept protočne obrade, posle pokretanja se (očekivano) dobija izlaz sledećeg oblika:
Smatraćemo da izlaz (simbolički) predstavlja izrazito obiman tekst sa 'gomilom podataka' (koje nije jednostavno sagledati odjednom), * iz čega proizilazi pitanje: kako se iz teksta mogu izdvojiti samo one informacije koje su u određenom trenutku značajne (smatraćemo da nas zanimaju samo slogovi koji su vezani za jedan konkretan datum).
Program ls
(koji je obavio svoj zadatak), ne sadrži opcije za pretragu (shodno UNIX filozofiji), i stoga ćemo rešenje tražiti na drugom mestu.
Protočna obrada ("pajpovanje")
Na UNIX-olikim operativnim sistemima, protočna obrada podrazumeva slanje podataka iz jednog programa u drugi. *
Program ls
(koji koristimo za primer), proizvodi rezultat u obliku standardnog teksta, a takav tekst ne mora biti prosleđen na standardnu izlaznu jedinicu (ili, prostije, ne mora biti ispisan na ekranu), već - može biti preusmeren tako da predstavlja ulazni podatak u drugom programu.
U praktičnom smislu, naredba iz prethodnog odeljka se može dopuniti na sledeći način:
.... i, ovoga puta, umesto da tekst koji je nastao pokretanjem programa ls
bude prikazan na ekranu - biće prosleđen programu grep
u svojstvu ulaznog podatka.
Program grep
* traži (odnosno, praktično - izdvaja), redove koji sadrže nisku "Nov 28", i stoga se dobija sledeći izlaz:
Ukoliko je potreban drugačiji vid obrade, umesto programa grep
može se izabrati drugi program:
Komanda awk
koju smo ovoga puta pokrenuli, * omogućava detaljniju obradu teksta, i sada: ne samo da se u redovima može pretraživati određeni pojam ("Nov 28"), već je moguće birati i koje će kolone biti ispisane (argumenti komande awk
: $5
, $6
i $7
, predstavljaju redne brojeve kolona).
Rezultat izvršavanja je sledeći ispis:
Ovakav izlaz jeste ono što smo tražili u smislu informacija, ali, ne i u smislu prikaza.
Program ls
automatski formatira izlaz (dodavanjem razmaka i tabulacije po potrebi), međutim, budući da program awk
na ulazu uklanja razmake, a na izlazu ispisuje samo po jedan razmak između svaka dva podatka (i to samo zato što smo mi sami tako formatirali izlaz, preko interne komande printf
), potrebno je poravnati prikaz podataka.
Ako se u "pipeline" doda još jedna komanda ....
.... problem je rešen:
U nastavku, koristićemo ponovo program grep
* i "pravićemo se" da je količina teksta koju je program izbacio, i dalje prevelika (za razliku od krajnje umerene količine teksta koju zapravo vidimo).
Pošto je u navedenim okolnostima uputno da se izlaz preusmeri u datoteku (zarad lakšeg naknadnog pregleda u nekom editoru teksta i sl) - na scenu stupa redirekcija.
Redirekcija
Pri pokretanju konzolnih programa, komandna linija (tj. "shell prompt"), tipično se koristi kao ulazna jedinica, a sam terminal, kao izlazna jedinica.
Videli smo da programi mogu jedni drugima slati podatke, međutim, podaci se takođe mogu direktno čitati iz datoteka i zapisivati u datoteke.
Druga navedena pojava nosi naziv redirekcija.
U sledećem primeru, izlaz komande grep
biće preusmeren u datoteku, preko operatora >
:
Ako ste sve vreme zamišljali (onako kako je trebalo), da, umesto sa manjim količinama teksta koje smo zapravo viđali, operišemo nad 'ogromnim i nepreglednim datotekama', nije teško uvideti da modularni "unix-ovski" pristup uz korišćenje pajpovanja i redirekcije - i te kako olakšava administraciju sistema (a naravno i druge zadatke).
Dodatni primeri upotrebe tehnika protočne obrade i redirekcije
Da bismo još bolje ilustrovali upotrebnu vrednost pajpovanja i redirekcije, proći ćemo kroz dva primera iz svakodnevne prakse (i pri tom se upoznati i sa još kojom komandom iz UNIX-olikih operativnih sistema).
Primer #1: Kreiranje PDF datoteka
Upoznavanje sa GNU/Linux distribucijama (isto važi i za ostale UNIX-olike operativne sisteme), podrazumeva čitanje dokumentacije.
U terminalu (tj. u konzoli), za ispis uputstava za upotrebu programa, zadužena je komanda man
(skraćeno od eng. "manual").
Program man
čita (i prikazuje u terminalu), "man stranice" (eng. man page), posebno formatirane tekstualne datoteke u kojima je detaljno opisan način funkcionisanja instaliranih programa.
Ako pozovemo komandu man
i predamo naziv programa (u donjem primru, program čije opcije proučavamo je ls
) ....
.... dobićemo konzolni ispis sa uputstvom za upotrebu programa i dodatnim objašnjenjima koja se tiču svih opcija koje su dostupne za korišćenje uz navedeni program (u konkretnom primeru: neke od argumenata programa ls
, kao što su -a
i -l
, već smo videli, ali, ima i drugih argumenata (zapravo - "poprilično")).
Ako je potrebno da tekst koji se ispisuje preko komande man
, bude preusmeren u PDF datoteku (što je vrlo popularan pristup, budući da se man stranice u PDF formatu lako mogu razmenjivati preko email-a, čitati preko prenosnih uređaja i sl), može se koristiti sledeća komanda:
.... posle čega će tekstualni sadržaj biti uredno uobličen u skladu sa formatom PDF, i zapisan u datoteku man_ls.pdf
, koja se može otvoriti u nekom PDF vieweru.
Po želji, prethodna naredba može se dopuniti tako da se datoteka otvori odmah .....
.... a usput smo se upoznali i sa time da postoji mogućnost da redirekcija prethodi pajpovanju.
Primer #2: Ispis sistemskih parametara u naslovnoj traci menadžera prozora
Pogledaćemo još jedan primer iz prakse, koji smo nagovestili ranije (kada smo pomenuli da menadžer prozora koji koristimo, ne prikazuje sistemske informacije "sam od sebe", već, da je ručno "hakovan").
Međutim, za razliku od prethodnog primera, koji je vrlo jednostavan za razumevanje (i samostalno isprobavanje), primer koji ćemo prikazati u ovom odeljku je kompleksniji, i tu je da vam "predoči mogućnosti".
Pre svega: odakle (uopšte) "crpeti" sistemske informacije?
Zauzeće RAM-a (operativne memorije), može se očitati preko komande free
, a slobodan prostor na određenom drajvu (odnosno particiji), preko komande df
(disk free).
Preostale dve komadne, mpstat
i sensors
(koje služe za očitavanje procesorskog zauzeća i temperature procesora), nisu obavezno deo standardne instalacije na većini distribucija (mada, vrlo često jesu), ali, svakako ih možete samostalno instalirati i pokrenuti.
Izlaz navedenih komandi može se "pajpovati" u program awk
(za napredno formatiranje teksta), ali, sve se i dalje ispisuje u konzoli.
Međutim ....
Grafički server X.Org server
(ili jednostavnije xserver
), stavlja na raspolaganje korisnicima i programima komandu xsetroot
, preko koje se može zadati naslov "glavnog" prozora (u primeru koji smo videli - slika #2 i druge slike, glavni naslov se prikazuje u naslovnoj traci, u gornjem desnom uglu).
Ako preko terminala zadamo sledeću komandu ....
.... ispis u naslovnoj liniji prozora biće (upravo) - niska koja je predata kao argument.
Međutim, ako se u komandu xsetroot
prosledi izlaz sistemskih komandi (koji smo prethodno pripremili), ispis će postati znatno zanimljiviji ....
U tom smislu, možemo napraviti manju shell skriptu sledećeg sadržaja:
.... i možemo urediti da se skripta pokrene pri pokretanju grafičkog okruženja, posle čega će se na naslovnoj traci prikazivati sistemski podaci koji se osvežavaju svake sekunde.
Skripta funkcioniše na sledeći način:
- izlaz komandi koje su navedene u prvom bloku (u ovom odeljku), smešta se u shell promenljive (shell dozvoljava korišćenje promenljivih, kreiranje i pozivanje skripti; više o svemu u zasebnom članku koji ćemo posvetiti pisanju shell skripti)
- formatirani izlaz, u kome se koriste vrednosti prethodno definisanih promenljivih, prosleđuje se komandi
xsetroot
(u ovom koraku, zapravo nije u pitanju pajpovanje (komandaxsetroot
prima argumente i jedan od argumenata je niska koju treba ispisati)) - dosadašnje komande se smeštaju u telo "beskonačne petlje" koja se izvršava "ukrug", s tim što između svakog ciklusa postoji pauza od 1s (
sleep 1
)
Mogli ste primetiti da je jedan od argumenata komande df
(disk free), bila niska /dev/sda1
, koja označava prvu particiju na disku "a", pri čemu takva oznaka može delovati pomalo zbunjujuće prvi put kada se neko sa njom susretne (pre svega, ne treba poistovećivati oznaku koju smo videli, sa zastarelom oznakom A:
iz DOS-a i Windows-a, koja se ranije koristila za floppy drajvove).
Zarad upoznavanja sa načinom označavanja drajvova i particija u UNIX-olikim sistemima (i zarad otklanjanja različitih nedoumica), u nastavku ćemo se upoznati sa strukturom direktorijuma (tj. "foldera") u GNU/Linux distribucijama (odnosno, u okviru UNIX-olikih operativnih sistema uopšte).
Struktura direktorijuma u UNIX-olikim operativnim sistemima
Linux i drugi UNIX-oliki operativni sistemi odlikuju se specifičnom strukturom direktorijuma i (pogotovo), specifičnim prikazom strukture direktorijuma, koji se u većoj meri razlikuje od načina na koji se struktura drajvova, particija i foldera prikazuje u Windows-u.
U osnovi strukture direktorijuma (na UNIX-olikim sistemima), stoji koreni direktorijum operativnog sistema ("root"), u odnosu na koji su ostali direktorijumi raspoređeni.
Koreni direktorijum nosi oznaku: /
(kosa crta).
Particije se ne primećuju "na prvi pogled" (kao što smo već naveli, ne prikazuju se onako kako se prikazuju u Windows-u), međutim, particije su (naravno) * i dalje prisutne, samo što su (praktično) integrisane u opštu strukturu direktorijuma (tj. foldera).
Naveli smo prethodno da je /dev/sda1
, odrednica koja ima veze sa "prvom particijom na prvom drajvu", * međutim, ako pokušamo da pozovemo komandu ....
.... bićemo odbijeni, jer /dev/sda1
nije direktorijum, već - virtuelna sistemska datoteka - koja ima veze sa prvom particijom, ali, ne omogućava pristup direktorijumima i datotekama koje su zapisane na prvoj particiji.
Da se vratimo na drajv koji je prepoznat kao /dev/sda
....
Pitanje je: gde se u okviru strukture direktorijuma nalaze datoteke sa particije /dev/sda1
?
Pri početnom upoznavanju, situacija deluje 'malčice komplikovano' i (kao što rekosmo), svakako postoje razlike u odnosu na pristup na koji su korisnici Windows-a navikli, ali, struktura direktorijuma na UNIX(olikim) sistemima, nije zapravo komplikovana sama po sebi (naprotiv), i samo je potrebno uložiti malo truda da bi se postiglo razumevanje ....
Komanda mount - "montiranje" drajvova
Kada se na računar priključi novi drajv i zatim pokrene Linux (ili UNIX, BSD i sl), u direktorijumu /dev
pojaviće se nove datoteke koje sadrže podatke koji omogućavaju pristup particijama na novom drajvu, ali (kao što smo već videli), u poddirektorijumima na putanji /dev
- neće automatski biti prikazane datoteke i direktorijumi sa novih particija. *
Za primer ćemo uzeti da novi drajv (koji smo dodali), sadrži dve particije, koje će biti prijavljene kao /dev/sdb1
i /dev/sdb2
.
Particijama novog drajva ne može se pristupiti direktno preko putanja /dev/sdb1
i /dev/sdb2
(nešto slično smo već videli), ali, nove particije se mogu "montirati" preko komande mount
:
.... što praktično znači da se sadržaj particija (ovoga puta je sadržaj), vezuje za određene direktorijume.
U slučaju putanja koje smo prethodno "montirali", sada se može preći (na primer), u direktorijum /muzika
, i može se pristupiti sadržaju:
Dakle, konkretan sadržaj nalazi se na particijama (u primerima, particije su: sdb1
i sdb2
), ali, particijama se pristupa preko direktorijuma (/muzika
i /filmovi
) - koji nisu na "očigledan" način povezani sa particijama.
Ako je potrebno da se particija "odmontira" (operacija koju često koriste korisnici Linux-a koji na određenom računaru imaju i Windows, odnosno NTFS particije kakve Windows prepoznaje), može se koristiti komanda umount
:
Sada sledi rasplet po pitanju particije /dev/sda1
....
Ako se osvrnemo na to da je u pitanju: prva particija, na prvom SSD drajvu - moglo bi se pretpostaviti da je navedena particija montirana upravo kao koreni direktorijum sistema.
Smatraćemo da jeste tako, ali, onda se postavlja pitanje: kada je (i kako), particija /dev/sda1
montirana kao koreni direktorijum sistema?
Odgovor je (kao što pretpostavljamo da naslućujete) - pri instalaciji sistema.
Drajvovi i particije koji čine "stalnu postavku" sistema, montiraju se automatski, pri podizanju sistema, preko podataka iz sistemske datoteke /etc/fstab
(File System Table), u koju se pri instalaciji sistema zapisuje kojoj particiji odgovara koja sistemska lokacija:
U smislu "ručnog" pozivanja komande mount
, pojam montiranja ne odnosi se toliko na hard diskove i SSD-ove (osim recimo u dual-boot konfiguracijama, kao što smo ranije pomenuli), koliko na USB drajvove, koji su i dalje u svakodnevnoj upotrebi (ali, temi montiranja USB-ova i tome kako se proces može automatizovati, posvetićemo više prostora u narednim člancima).
Sada, kada znamo u kakvoj su vezi struktura direktorijuma, i drajvovi koji su prijavljeni sistemu, pogledaćemo šta tipično sadrže sistemski direktorijumi (tj. folderi) u UNIX-olikim operativnim sistemima.
Ranije je struktura direktorijuma u Linux distribucijama (kao i pod UNIX-om, BSD-om i sl), bila .... "proizvoljnija", ali, vremenom je uvedeno više reda, i može se reći da je struktura sistemskih direktorijuma u sadašnjem trenutku, u velikoj meri standardizovana, * što znači da dve različite Linux distribucije (pa čak i dva različita OS-a; na primer: Linux i BSD, ili BSD i UNIX i sl), uglavnom imaju gotovo istu strukturu direktorijuma.
Sistemski direktorijumi
Sistemski direktorijumi su direktorijumi koji nastaju tokom instalacije (OS-a), i sadrže datoteke koje su neophodne za funkcionisanje sistema (izvršne, konfiguracione i druge neophodne datoteke).
Neki od sistemskih direktorijuma, striktno govoreći, zapravo su korisnički direktorijumi, ali, jedan deo njihovog sadržaja ne čine proizvoljni korisnički direktorijumi i datoteke, već, sadržaj koji (takođe) nastaje pri instalaciji operativnog sistema, ili pri instalaciji različitih programa.
/ - koreni direktorijum (root)
Koreni direktorijum (kao što smo već naveli), predstavlja "uporišnu tačku", to jest, putanju u odnosu na koju su raspoređeni ostali direktorijumi i (takođe), videli smo da nije u pitanju "fantomska" lokacija (kao npr. My Computer na Windows-u), već, konkretna particija jednog od drajvova - koja je pri instalaciji proglašena za root direktorijum.
/bin ("binaries" - binarne/izvršne datoteke)
Direktorijum /bin
sadrži izvršne datoteke osnovnih programa kao što su shell i GNU core utilities (ls, cp, mv, cat, grep i sl), i možemo reći da su u pitanju manji, ali suštinski bitni programi.
/boot (boot loader)
Direktorijum /boot
sadrži datoteke (i poddirektorijume) neophodne za pokretanje sistema (tj. "butovanje").
Za pokretanje sistema tipično se koristi program Grub (sa poddirektorijumom na lokaciji /boot/grub
), kome, pri pokretanju sistema, BIOS (ili poslednjih godina UEFI), predaje "štafetu" i poverava zadatak učitavanja operativnog sistema u memoriju.
Takođe, sam Linux kernel se najčešće instalira upravo u direktorijum /boot
.
/cdrom (stara lokacija za prikaz sadržaja CD diskova)
Budući da navodimo sve direktorijume koji se praktično javljaju u Linux distribucijama (bez obzira na to da li su deo standarda FHS ili ne), spomenućemo i direktorijum /cdrom
, jedan od direktorijuma koji su 'zaostali' iz starijih vremena (dok su CD drajvovi još uvek bili u upotrebi).
/dev ("devices" - podaci o sistemskim uređajima)
Direktorijum /dev
sadrži "virtuelne" datoteke (većinom tekstualnog tipa), u kojima se čuvaju podaci o uređajima na sistemu.
Nagovestili smo već šta su virtuelne datoteke (i o svemu ćemo više govoriti u narednim člancima), a videli smo i šta se u praksi može raditi sa virtuelnim datotekama (navođenje putanje /dev/sda1
u programu kao što je free
, koji ume pravilno da protumači podatke sa navedene putanje) i - takođe - videli smo šta se ne može raditi sa virtuelnim datotekama sa putanje /dev
(navođenje komande kao što je cd /dev/sda1
i sl).
/etc ("et cetera" - sistemske konfiguracione datoteke)
Za direktorijum /etc
možemo reći da predstavlja svojevrstan konfiguracioni centar OS-a koji sadrži datoteke (uglavnom tekstualnog formata), u kojima su zapisana podešavanja sistema i globalna podešavanja sistemskih programa.
U navedenom folderu mogu se pronaći konfiguracione datoteke menadžera paketa, grafičkog servera (X11), http servera (ako je instaliran), kao i mnoge druge datoteke za konfigurisanje sistema (na primer, datoteka /etc/fstab
, koju smo već pominjali kada smo pisali o automatskom montiranju particija).
/home (korisnički direktorijumi)
Svakom korisničkom nalogu koji se kreira u okviru sistema, dodeljuje se odgovarajući direktorijum, upravo unutar direktorijuma /home
(na primer /home/korisnik_1
, /home/korisnik_2
i sl).
Korisnički (pod)direktorijumi u direktorijumu /home
imaju dvojaku ulogu: na ovom mestu, programi čuvaju svoja podešavanja (pre svega preko poddirektorijuma .config
i .cache
), * zbog čega direktorijum /home
praktično jeste sistemski direktorijum, ali, u pitanju je takođe i folder u kome korisnici tipično čuvaju svoja dokumenta.
/lib ("libraries")
Lokacija za instaliranje biblioteka koje su dostupne širom sistema (nešto nalik na folder "System32", sa *.dll datotekama, u okviru Windows-a).
/media
Lokacija za "montiranje" prenosivih drajvova i optičkih medija.
/mnt ("mount")
Preporučena lokacija za "ručno"/privremeno "montiranje" drajvova (kao što su USB drajvovi i sl).
/opt ("optional")
Jedan od manje standardizovanih direktorijuma, * u koji neki od programa (koji se ne drže standarda FHS), odlažu svoje datoteke.
/proc ("processes")
Direktorijum /proc
sadrži informacije o pokrenutim procesima * u okviru sistema.
U tehničkom smislu, radi se o podacima koji su sadržani u virtuelnim sistemskim datotekama tekstualnog formata, što praktično znači da se takve datoteke lako mogu "grepovati", "awk-ovati" (i obrađivati na razne druge načine).
/root (korisnički direktorijum za administratorski nalog)
Za razliku od korisničkih naloga nižeg nivoa privilegija (ili, prostije, "za razliku od svih ostalih naloga"), za korisničke datoteke povezane sa root nalogom, predviđen je poseban direktorijum - /root
.
Kada je u pitanju root nalog, postoje i uvrežena pravila korišćenja (sa kojima je potrebno upoznati se, i uvažiti ih):
- pre svega, u UNIX-olikim operativnim sistemima postoji samo jedan root nalog
- root nalog (osim u izuzetnim situacijama) - ne koristi se za direktan pristup sistemu
- za pokretanje programa koji zahtevaju administratorske privilegije, određenim ("običnim"/"ne-root") korisnicima, dodeljuju se administratorske privilegije *
Iz svega navedenog, nije teško zaključiti da se i direktorijumu /root
u praksi pristupa veoma retko, "samo kad je baš neophodno" (a razlike između root naloga i (običnih) korisničkih naloga, svakako su tema za dalju diskusiju u sledećim nastavcima).
/run ("runtime" variable data)
Direktorijum sa informacijama o pokrenutim servisima i prijavljenim korisnicima (u okviru trenutne sesije, odnosno, "posle poslednjeg podizanja sistema").
/sbin ("system binaries")
Još jedna od lokacija za čuvanje izvršnih datoteka važnijih sistemskih programa (slično kao lokacija /bin
).
/srv ("server")
Bićemo praktični i navešćemo da iza naziva /srv
stoji odrednica server
, jer namena ovog direktorijuma u današnje vreme je, upravo: čuvanje podešavanja koja su vezana za serversku funkcionalnost koju sistem (eventualno) obavlja.
(Takođe, povremeno ćete se sretati sa tvrdnjom da se iza naziva direktorijuma /srv
nalazi odrednica "services", ali, ovo ni iz daleka nije jedina situacija u kojoj nije lako utvrditi pravo poreklo naziva sistemskih direktorijuma na UNIX-u.)
/tmp ("temporary" - lokacija za privremene datoteke)
Kao što možete pretpostaviti shodno nazivu, * u direktorijum /tmp
smeštaju se datoteke 'privremenog' karaktera (tj. datoteke koje neće biti dostupne pri sledećem pokretanju sistema).
/usr ("UNIX System Resources")
Postoje različite 'priče' o poreklu naziva direktorijuma /usr
: jedna navodi da su, u početku, na ovom mestu odlagani korisnički podaci i programi koje su korisnici kompajlirali (što bi značilo da je "usr" skraćeno od "user(s)"), dok je u današnje vreme popularno reći da iza naziva stoji termin "Unix System Resources".
Bilo kako bilo, u pitanju je sistemski folder koji igra dvojaku ulogu: u direktorijum /usr
se (zapravo) smeštaju instalirani programi (veći i obimniji programski paketi; oni koji ne spadaju u kategoriju osnovnih konzolnih alata koji se instaliraju u direktorijum /bin
) i, takođe, u folder /usr
se (zaista) smeštaju određeni sistemski resursi "statičkog tipa", koji su dostupni svim programima (fontovi, dokumentacija i sl).
/var ("varijabilne" datoteke)
Ako je direktorijum /usr
(šta god se zapravo "krilo" iza njegovog naziva), namenjen čuvanju "statičkih" sistemskih resursa, folder /var
namenjen je čuvanju onih resursa za čiji sadržaj se očekuje da će se menjati.
Na primer: log datoteke, baze podataka i slični podaci - nalaze se (upravo) u okviru direktorijuma /var
.
Još nekoliko reči o sistemskim direktorijumima i njihovom poreklu
U uvodnom članku (iako smo najverovatnije izneli više nego dovoljno informacija za sam početak), nismo hteli da previše ulazimo u detalje po pitanju sistemskih direktorijuma, jer (prosto rečeno), neki detalji nemaju preveliki značaj iz današnje perspektive, a drugi samo mogu bespotrebno opteretiti korisnike koji se sa Linux-om tek upoznaju.
Međutim, ako želite da odmah "pohranite u sopstvenu memoriju" još koji podatak koji može dobro doći 'za kasnije', spomenućemo da je struktura foldera u UNIX-olikim sistemima, ipak nešto komplikovanija * i (naravno), navešćemo još koji primer.
Recimo:
- mnoge izvršne datoteke instaliraju se na lokaciju
/usr/bin
- direktorijum
/usr
sadrži i određene bitne datoteke i poddirektorijume sa kojima ćete se često susretati ako se upustite u administraciju Linux sistema (na primer, u poddirektorijumu/usr/src
čuvaju se izvorni kodovi instaliranih programa, a u poddirektorijumu/usr/man
, dokumentacija o instaliranim programima) - isto važi i za direktorijum
/etc
(na primer, datoteka/etc/fstab
sadrži informacije o "montiranim" drajvovima, poddirektorijum/etc/X11
sadrži konfiguracione datoteke za grafički server i sl)
.... međutim, budite staloženi.
Ne treba žuriti i, uz uloženi trud, "sve će doći na svoje". :)
U nastavku ....
Da li je, u tekstu koji ste pročitali, sadržano "sve što ima da se ispriča" o UNIX-u, ili o GNU/Linux distribucijama?
Naravno da nije (tek smo počeli).
Pre svega, kada su u pitanju osnovna sistemska podešavanja, posebnu pažnju treba posvetiti kategorizaciji korisničkih naloga i privilegijama koje se korisničkim nalozima dodeljuju, ali, nešto smo ipak morali (skroz) da preskočimo na samom početku i ostavimo za drugi put, i stoga ćemo u bliskoj budućnosti (s obzirom na to da smo 'načeli' temu GNU/Linux distribucija i upoznali se sa osnovnim tehnikama), nastaviti da objavljujemo nove članke.
Sledeća dva nastavka posvetićemo osnovnim i napredni(ji)m komandama za administraciju sistema, četvrti nastavak biće posvećen pisanju shell skripti, a posle toga (u nešto daljoj budućnosti), bavićemo se i mnogim drugim temama: instalacija i podešavanje minimalističke Linux distribucije (Arch Linux), podešavanje grafičkog servera, menadžera prozora i korisničkih programa, napredna podešava korisničkih naloga .... da nabrojimo samo 'najočiglednije' ideje ....
Do tada ....
Happy hacking!