Ivan Todorović Unos teksta putem komandne linije i ispis rezultata u vidu tekstualnih redova stari su gotovo pola veka. Jedan od načina „komuniciranja“ sa ovakvim računarima podrazumevao je korišćenje uređaja direktno proisteklog iz pisaće mašine za unos komandi (teletypewriter), i štampača koji je ispisivao izlaz programa red po red, što se kasnije stopilo u zajednički uređaj – teleprinter. Ovakav sistem je neku deceniju kasnije bio izuzetno pogodan i za udaljen pristup ogromnim mejnfrejm računarima putem takozvanih „glupih“ terminala: ovakvi uređaji su se sastojali praktično samo od tastature i monitora kojima se serijskom vezom pristupalo računarskim sistemima fizički smeštenim u univerzitetima ili velikim firmama. Podrazumeva se da su takvi sistemi tada zauzimali dosta kvadratnih metara prostora i koštali mnogo novca, pa je jasno zašto svaki korisnik nije mogao imati svoj računar, već su svi koristili isti sistem sa raznih mesta u samoj zgradi.
Primer „glupog“ terminala iz sedamdesetih godina S obzirom da je Linux nastao po ugledu na Unix, originalno namenjen mejnfrejm računarima, nije smela izostati ni emulacija terminala. Kažemo „emulacija“ s razlogom – uređaji kojima se može pristupati računaru ili serveru sa Linuxom danas su znatno raznovrsniji od „glupih“ terminala iz davnina. Takođe, za razliku od već prastarog operativnog sistema MS DOS kod koga je legendarni crni ekran sa komandnim promptom bio jedini zvanični način za izdavanje komandi (a ujedno predstavlja sastavni deo samog sistema), na Linuxu i drugim Unixolikim sistemima komandni terminal je sasvim odvojen od jezgra operativnog sistema. Grubo rečeno, Linux kernel se ovde može posmatrati kao ranije pomenuti mejnfrejm sistem, na koji se korisnici „povezuju“ preko emuliranih terminal uređaja – bilo da se radi o crnom tekstualnom ekranu, nekom drugom uređaju povezanom serijskom vezom, ili pristupu sa udaljenog računara ili pametnog telefona preko Telneta ili SSH-a koristeći Internet ili dial-up konekciju.
Povezivanja na udaljeni Linux računar putem protokola SSH (secure shell) Inače, DOS je jednoprocesni operativni sistem – kada pokrenete neku komandu ili program, nemate mogućnost obavljanja nekog drugog posla sve dok se pokrenuta komanda ili program ne završe. S obzirom da je Linux moderan multitasking operativni sistem, ovako nešto na njemu nije slučaj. Programi se mogu pokrenuti tako da rade u pozadini (tako da vam neće „zauzeti“ komandnu liniju dok se ne završe), možete se prebaciti u novi terminal pritiskom na Ctrl + Alt + funkcijski taster od 1 do 6, u kome ćete raditi nešto drugo ili se čak ulogovati kao neki drugi korisnik, a u svakom trenutku možete da zaustavite program koji ste pokrenuli, bilo da je startovan normalno ili tako da se izvršava u pozadini.
Prikaz svih aktivnih procesa koji se izvršavaju na jednom Linux računaru Ovaj malo duži uvod služi da makar približno pokažemo fundamentalne razlike između Linuxa i DOS-a. Novi korisnici su skloni da Linux stavljaju u isti koš sa primitivnim operativnim sistemima poput DOS-a, samo zato što „izgledaju isto“ odnosno podrazumevani način rada je crni ekran sa belim slovima gde treba unositi nekakve komande. Pored toga što mnogi korisnici imaju averziju prema komandnoj liniji jer jednostavno nisu dovoljno vešti sa tastaturom, nije redak slučaj ni da iskusniji kompjuteraši imaju sve većih problema sa ovakvim načinom izdavanja komandi, naročito na prostorima gde engleski nije „domaći“ jezik. Razlog je veoma jednostavan. Korišćenje komandne linije podrazumeva izrazitu upotrebu nealfanumeričkih tastera, kao što su dvotačke, kose crte, zagrade i slično. Na našoj tastaturi ovi znaci su u velikoj meri ispremeštani, a konfuzija je još veća ukoliko imate tastaturu sa iscrtanim tasterima u skladu sa domaćim rasporedom, a pokušavate da unosite komande na sistemu u kome je tastatura podešena na američki raspored. Još ako korisnik često ima potrebu da se prebacuje između domaćeg i engleskog rasporeda, konfuzija je veća. Naravno, sve ovo se može uvežbati, ali na momente može biti jako iritantno,tako da nije retkost da korisnici koji često barataju komandnim interfejsom insistiraju na tastaturi sa iscrtanim američkim rasporedom, kako bi manje grešili u trenucima zamora.S obzirom da grafički interfejsi za operativne sisteme postoje već tridesetak godina, nije nelogično zapitati se kako je komuniciranje sa računarom putem komandne linije opstalo do sada i koje su njegove prednosti. Na prvom mestu treba reći da svaki iole ozbiljan operativni sistem ima interfejs preko komandne linije (u daljem tekstu CLI – „command line interface“). Čak i Mekintoš, pojam prijateljski nastrojenog operativnog sistema u kome je sakriveno sve što iole može uplašiti ne-geek korisnike ima CLI i moguće je obavljati poslove preko terminal emulatora u prozoru. I na Windowsu familije NT (2000, XP, Vista, 7, Server) je dosta pažnje posvećeno CLI-ju, pa je broj poslova koji se može uraditi iz komandne linije jako velik.
Komandni prozor na Windowsu 7 Vratimo se Linuxu. Prvo što će vas dočekati na sistemu na kome nije instalirano grafičko okruženje (ili jeste, ali nije podešeno da se ono automatski podiže sa sistemom) jeste zahtev za unosom korisničkog imena i lozinke. Kao što verovatno znate, na Linuxu i drugim Unixolikim sistemima postoji osnovni administratorski nalog (takozvani „root“) koji ima apsolutno sve privilegije nad sistemom, i postoje korisnički nalozi sa ograničenim privilegijama (recimo, mogućnost upisa samo po sopstvenom folderu i slično). Razlika se vidi i u komandnom odzivu, pa će se prompt kod običnog korisnika završavati „dolarom“ (recimo pera@sistem:trenutni_folder $ ) dok će root imati „tarabu“ na kraju prompta (recimo root@sistem:trenutni_folder # ).
Odziv terminala kada je korisnik ulogovan kao root Ako ste se već interesovali za ovaj operativni sistem, verovatno znate kako izgleda hijerarhija foldera. Na Linuxu različiti diskovi nisu označeni odvojenim slovima (npr C:, D: i slično), već sve kreće iz „korenog“ foldera označenog kosom crtom ( / ) i svi folderi proističu iz njega, bez obzira na kom disku se nalazili. Recimo, folder /home u kome se čuvaju korisnički profili (pandan folderu C:Users na Windowsu) može se nalaziti na odvojenom fizičkom disku kako bi korisnički podaci, u slučaju krahiranja sistemskog diska, ostali neoštećeni. Ali sa stanovišta fajl sistema, postoji samo jedna korena tačka i svi folderi proističu iz nje, a eventualni ostali diskovi u računarskom sistemu „montiraju“ se u odgovarajuće foldere u okviru hijerarhijske strukture.
Tipičan sadržaj korenog foldera na Linuxu Prva stvar koja će vas interesovati u ovakvoj situaciji jeste kako da se krećete kroz foldersku hijerarhiju. Za to postoji komanda „cd“ koja predstavlja akronim od „change directory“. Na primer, unošenjem komande „cd /etc/gconf” (bez navodnika) radni direktorijum će postati onaj koji ste naveli iza komande „cd“. Ako hoćete da pređete u folder koji je hijerarhijski iznad foldera u kome se trenutno nalazite, koristićete dve uzastopne tačke, koje označavaju „roditeljski“ folder. Tako ćete iz prethodnog foldera /etc/gconf preći u /etc komandom “cd ..” a dve tačke se mogu koristiti i kao deo regularne putanje. Recimo, ako se nalazite u folderu /etc/gconf/schemas i hoćete da pređete u /etc/X11, kucaćete “cd ../../X11”, odnosno dva koraka “naviše“ a onda prelaz u podfolder. Naravno, moguće je i korišćenje apsolutne putanje (one koja „kreće“ iz korenog foldera), pa ste jednostavno mogli navesti „cd /etc/X11”, čime bi direktno prešli u željeni folder bez obzira gde ste se ranije nalazili. Još jedna korisna „prečica“ je tilda ( ~ ) koja ukazuje na korisnički folder onoga ko je izdao komandu sa putanjom koja sadrži tildu. Tako će vas komanda “cd ~/Downloads” vratiti u folder /home/vašeime/Downloads. (Bitno: Linux razlikuje mala i velika slova, tako da folder “downloads” i folder “Downloads” nisu isto!)
“Šetanje“ kroz foldere Organizacija fajlova i foldera na Linuxu, zajedno sa korisničkim dozvolama i atributima fajlova, prilično je obimna tema, a ako vas interesuje da o njoj nešto više naučite, veoma korisne informacije možete pronaći na sledećim a dresama: – http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard – http://www.firewall.cx/linux-introduction-file-permissions.php Sadržaj postojećeg foldera moguće je izlistati komandom „ls“ (ovo zapravo nije skraćenica od „list“, već od „list segments“ i vuče korene još sa originalnog Unixa i tadašnjih memorija za skladištenje podataka), dok je detaljnije podatke (veličine fajlova, datume, vlasnička prava i drugo) moguće dobiti ako se iza komande navede dodatni parametar tako da naredba izgleda „ls -l“. Slično, komanda „uname“ ispisaće samo osnovni podatak o sistemu (npr Linux), dok će „uname -a“ ispisati sve informacije uključujući tip jezgra, hardversku arhitekturu i slično. Ovde dolazimo do bitne stvari: gotovo sve komande, ne samo na Linuxu već i na Windowsu, mogu se koristiti i na način drugačiji od podrazumevanog tako što se komandi proslede i odgovarajući parametri. Naravno, niko ih neće pamtiti napamet već postoji temeljna dokumentacija, pa ako vas interesuje šta sve može komanda “ls”, dovoljno je otkucati “man ls” (man je skraćeno od manual) i dobićete detaljne informacije.
Komanda sa i bez parametara Druga bitna stvar je da veliki broj Linux komandi predstavlja ili akronim od poslova koje obavljaju, ili su samoopisive jednom rečju, pa su zbog toga relativno lake za pamćenje. Tako “mv” radi premeštanje ili preimenovanje fajlova (move), „ifup“ podiže određeni mrežni interfejs koji je do tada bio isključen (interface up), „shutdown“ isključuje računar i slično. S obzirom da je broj komandi na prosečnoj distribuciji veoma veliki, suludo bi bilo sve ih pamtiti. Zato je izuzetno korisna komanda “apropos”, pa ako navedete npr. “apropos search”, biće vam izlistane sve komande koje u svom opisu spominju pretragu. S obzirom da temeljno prikazivanje često korišćenih komandi daleko prevazilazi obim ovog teksta, dalje istraživanje na ovu temu možete vršiti i sami, kucajući “basic linux commands” u vašem omiljenom Internet pretraživaču.Snaga komandne linije svakako ne leži u mogućnosti promene direktorijuma, kopiranju jednog fajla i sličnim bazičnim poslovima tekstualnim putem. To korisnik može da uradi i preko grafičkog okruženja podjednako efikasno. Snaga komandne linije dolazi do izražaja u sledećim slučajevima: – Pri administriranju sistema (dodavanje i brisanje korisnika, menjanje permisija i slično) u okruženju maksimalne bezbednosti – Pri automatizovanju velikog broja složenijih ili ponavljajućih poslova U prvom slučaju, administrator sistema ponekad ima potrebu da se prebaci u jednokorisnički režim i obavi rizične poslove direktno iz komandne linije. U ovom slučaju postoji manji rizik od naletanja na sigurnosni propust jer se koristi samo tekstualni shell („školjka“) i bazični skup dobro poznatih i korišćenih komandi. Grafička okruženja su složeni sistemi sastavljeni od brojnih programa i programskim biblioteka koje se međusobno pozivaju, pa uvek postoji mogućnost da se tu nalazi neki neotkriveni sigurnosni propust koji još nije zakrpljen i može biti zloupotrebljen od strane trećeg lica, odnosno hakera koji „vreba“ vaš sistem. Rizične situacije nisu tako česte, ali komandna linija i dalje pruža veću bezbednost.
Dodavanje korisnika iz komandne linije Drugi slučaj je prilično jasan svakome ko je makar jednom naleteo na potrebu za automatizovanjem svojih poslova. Linux i ostali napredniji sistemi podržavaju redirekciju ulaza i izlaza programa. O čemu se tu zapravo radi? Tekstualni (“konzolni”) program, nezavisno od operativnog sistema, očekuje ulaz podataka sa nečega što se zove „standardni ulaz“, a tekst će izbacivati na nešto što se zove „standardni izlaz“ (postoji još i tok podataka koji se zove „standard error“ i na koji program može slati obaveštenja o greškama). Ako program startujete na podrazumevani način, odnosno prostim navođenjem njegovog imena, „standardni ulaz“ biće ono što unosite preko tastature, a „standardni izlaz“ (u ovom slučaju i „standard error“) biće ekran terminala, na koji će biti ispisivan sav izlaz programa. Tu nastupa mogućnost redirekcije: ako program startujete sa operatorom preusmeravanja (npr. “imeprograma < fajl.txt”), svaki zahtev programa za čitanjem podataka sa standardnog ulaza neće biti usmeren ka tastaturi, odnosno onome što bi vi upisali, nego će biti čitan iz navedenog fajla. Slično, “imeprograma > fajl.txt” će standardni izlaz preusmeriti u fajl umesto na ekran terminala, pa tako komandom „ls > izlaz.txt” možete dobiti kompletan listing sadržaja trenutnog foldera u tekstualnom fajlu, umesto da za to koristite odvojene alate. Postoji i operator „>>” koji nadovezuje izlaz programa na postojeći fajl, umesto da njegov prethodni sadržaj obriše, što bi inače uradio operator “>”.
Preusmeravanje izlaza programa u fajl Pored preusmeravanja ulaza i izlaza, moguće je kreirati komunikaciju između programa. Za to služi operator vertikalna crta ( | ) koji predstavlja “cev” između dva procesa. Vertikalnom crtom se postiže da se standardni izlaz jednog programa preusmeri na standardni ulaz drugog. Recimo, na Linuxu postoji komanda “sort” koja sortira ulaz i prikazuje ga na standardnom izlazu. Ako unesete naredbu “ls | sort > izlaz.txt”, sve što izbaci naredba „ls“ (a to je sadržaj trenutnog foldera) biće preusmereno na ulaz naredbe „sort“, a rezultat sortiranja fajlova i foldera umesto ispisa na ekranu biće upisan u fajl izlaz.txt. Tu nije kraj, jer se ulazi i izlazi mogu preusmeravati dokle god to ima smisla (program1 | program2 | program3 | program4 …) tako da su mogućnosti veoma velike. Vrlo zgodno, zar ne?
Preusmeravanje izlaza jednog na ulaz drugog programa Ako već postoji mogućnost da se određeni poslovi „skrate“ u oblik jedne komande, zašto onda ne bi postojala i mogućnost da se prave celi „programi“ sastavljeni od CLI komandi? Naravno, ona već postoji i zove se “shell scripting”, odnosno pisanje složenih skripti zajedno sa mehanizmima poznatim iz pravih programskih jezika (if-then-else grananja, definisanje i korišćenje varijabli i slično). Iskusan administrator računarskog sistema može sebi uštedeti ogromnu količinu vremena pisanjem skripti za ponavljajuće poslove koje često obavlja. Koliko bi ovakvi poslovi oduzeli vremena kada bi se kliktalo po ikonicama u okviru grafičkog okruženja, ne treba ni zamišljati. Shell skriptovanje je izuzetno velika tema, a zainteresovani mogu pogledati tutorial na adresi http://www.freeos.com/guides/lsst/. Nadamo se da smo vam ovim tekstom napravili makar maglovit prikaz o mogućnostima koje nudi rad u komandnoj liniji, a ako vas je tema zaintrigirala, Internet je preplavljen vodičima i tutorijalima pomoću kojih možete odlično savladati materiju – svaki početak je težak, ali vežba čini čuda. Svakako, veliki broj korisnika za takvim nečim nikada neće imati potrebe, ali ako nameravate da se bacite u vode sistemske administracije ili se smatrate naprednim računarskim korisnikom, rad u komandnoj liniji (bilo da se radi o Linuxu, Windowsu ili nekom trećem operativnom sistemu) ne sme vam biti nepoznanica.
nbsp;/p
Linux: Komandna linija
Korišćenje operativnih sistema koji su direktno ili duhovno proisteklih iz Unixa, a u koje spada i Linux, gotovo neizostavno uključuje korišćenje komandne linije. Koliko god distribucija koju ste odabrali bila prijateljski nastrojena i koliko god vam se činilo da ćete sve moći da uradite kliktanjem po ikonicama i prozorima, pre ili kasnije će se desiti da ćete zbog nekog posla, koji vrlo verovatno spada u administraciju sistema, morati da posegnete za komandnim terminalom. Iako se od same pomisli na kucanje teksta u komandnoj liniji mnogima diže kosa na glavi, tekstualno izdavanje naredbi i te kako ima svoje prednosti i može drastično da skrati često obavljane poslove