Hack the shell treći dio
Dosad smo naučili što je to shell i kako on radi, strukturu Unix direktorija te se upoznali s terminal emulatorima i ukratko prošetali kroz povijest i razvoj. Također, upoznali smo Bash te koristili naredbe za manipulaciju direktorijima, datotekama i tekstom. U novom nastavku našeg druženja, upoznat ćemo se sa zamjenskim znakovima, I/O preusmjerenjima te malo dublje zaviriti u ljusku.
Zamjenski znakovi
Prije nego pređemo na ostale naredbe, želim spomenuti nešto što ih čini toliko moćnima – zamjenski znakovi. Kako ljuska koristi datotečna imena, pruža i znakove koji pomažu specificirati cijele grupe. Ti znakovi se nazivaju zamjenski znakovi (wildcards u engleskoj literaturi). Zamjenski znakovi omogućuju odabir datoteka po određenom kriteriju. U nastavku ćemo vidjeti važnije zamjenski znakove.
Zamjenski znak Značenje
* Odgovara svim kriterijima
? Odgovara jednom kriteriju
[characters] Odgovara svakom znaku iz seta znakova
[!characters] Odgovara svakom znaku koj ne pripata setu znakova
*Posix znakovi
[:alnum:] Alfanumerički znakovi
[:alpha:] Alfabetski znakovi
[:digit:] Numerički znakovi
[:upper:] Alfabetski znakovi s velikim slovima
[:lower:] Alfabetski znakovi s malim slovima
Zamjenske znakove možete koristiti s bilo kojom naredbom koja prihvaća argumente u obliku datotečnih imena.
I/O preusmjeravanje
U ovome dijelu ćemo proučiti vrlo korisno svojstvo mnogih naredbi, a to je I/O preusmjeravanje. Kao što smo vidjeli, mnoge naredbe ispisuju svoj izlaz na ekran, no to ne mora nužno biti tako. Korištenje dodatnih znakova s tim naredbama, njihov izlaz možemo preusmjeriti u neki dokument i pohraniti, poslati nekom uređaju ili pak nekoj drugoj naredbi.
Standardan izlaz
Standardan izlaz možemo primijetiti ako pokrenemo samo naredbu ls ili cat.
Npr. ls će izlistati sve datoteke i direktorije u direktoriju u kojem se trenutno nalazimo.
No, to možemo preusmjeriti i u neki dokument, npr. home.txt.
ls > home.txt
U ovom slučaju pokrenuli smo naredbu ls koje se izvršila samo što njen ishod nismo vidjeli na zaslonu već je preusmjeren u datoteku home.txt koja se spremila u trenutni direktorij.
Dakle, za preusmjeravanje koristimo znak >. Sljedeći put kad pokrenemo istu naredbu, datoteka home.txt će biti prepisana, no ako želimo samo novi ishod nadodati u dokument to radimo s duplim znakom >.
ls >> home.txt
Standardan unos
Također, mnoge naredbe mogu i primiti ulaz. To se naziva standardnim unosom. Nativno se unos odvija putem tipkovnice, no ako nešto često izvršavate, to možete pohraniti u tekstualnu datoteku te iz nje unijeti u naredbu. Za to se koristi znak <.
sort < dokument.txt
U ovom primjeru smo koristili naredbu sort da bi sortirali elemente u našoj datoteci. Rezultat se ispisao na ekranu. No, ranije smo naučili da možemo izlaz naredbi pohraniti u dokument, pa zašto ne bismo ove dvije naredbe spojili?
sort < dokument.txt > sortirani_dokument.txt
Kao što vidimo, ova linija ima kombiniran ulaz i izlaz. Prvo čita našu datoteku u kojoj tražim da sortira elemente te sortirane elemente sprema u novi dokument.
Spajanje
Jedna od korisnijih stvari I/O preusmjerenja je spajanje naredbi (pipe u eng. literaturi).
Spajanjem naredbi nadovezujemo jednu na drugu te zajedno funkcioniraju kao jedna naredba.
ls -l | less
U ovom primjeru izlaz naredbe
ls -l
je pohranjen u naredbu less korištenjem | znaka . On se obično nalazi na tipki W, a dobije se pritiskom tipke AltGr i W.
Ovom metodom možete postići da svaka naredba ima scrolling izlaz.
Evo i nekoliko zgodnih primjera spajanja naredbi:
Naredba
ls -lt | head
Što radi
Pokazuje 10 najnovijih dokumenata u direktoriju
Naredba
du | sort -nr
Što radi
Ispisuje sve direktorije te koliko mjesta zauzimaju
Naredba
find . -type f -print | wc -l
Što radi
Ispisuje broj svih datoteka u direktoriju i svim njegovim poddirektorijima
Filteri
Kategorija programa koji se mogu koristiti sa spajanjem zovu se filteri.
Filteri uzimaju podatke preko standardnog unosa, obave svoj zadatak te rezultat prikažu u obliku standardnog izlaza. Zamišljeni su i dizajnirani kako bi omogućili procesuiranje informacija na vrlo napredan način. Evo i nekoliko programa koji se ponašaju kao filteri:
Program
sort
Što radi?
Sortira elemente
Program
uniq
Što radi?
U sortiranim dokumentima miče duplikate linija
Program
grep
Što radi?
Pregledava svaku liniju iz standardnog ulaza te na izlaz stavlja samo liniju koja sadrži određeni pojam
Program
fmt
Što radi?
Čita tekst u standardnom ulazu te na izlaz stavlja formatiran tekst
Program
pr
Što radi?
Priprema dokument za printanje. Uzima tekst te ga lomi na stranice i poglavlja pritom označavajući zaglavlje i podnožje te ga obrađenog sprema za printanje
Program
head
Što radi?
Čita prvih nekoliko linija teksta. Korisno za čitanje zaglavlja dokumenata.
Program
tail
Što radi?
Čita zadnjih nekoliko linija datoteke. Vrlo korisno za pregled zadnjih unosa u log datoteci
Program
tr
Što radi?
Prevodi znakovlje. Može se koristiti za prevođenje velikih slova u mala
Program
sed
Što radi?
Stream editor. Može raditi kompliciranije zadatke u odnosu na tr
Program
awk
Što radi?
Cijeli programski jezik za izradu filtera. Vrlo moćan i koristan u administriranju sustava
Hvala na pažnji, toliko za danas.
U sljedećem dijelu ćemo se upoznati s dozvolama i korisničkim grupama kao i s kontrolom zadataka.
Hack the shell FTW 😀
Konačno!
Lutherus uvjek dobro dode ! Svaka cast ;))
To se cekalo 🙂
Svaka cast!
Tko zna zna, to majstore!
Uzalud trud. Terminal je ionako arhaičan komad softwera i pitanje je vremena kad će se ugasiti. Ionako sve ide na grafičke aplikacije i dodir pa je vrijeme da se i Linux modernizira. Sa ovakvim stvarima i stavovima i radi ovakvih pojedinaca Linux korisnici dolaze na loš glas. -1.
Ja ne mogu vjerovati da sam ovo pročitao!
Ne dao Bog da se Linux ikada toliko modernizira da izgubi Terminal! A svi koji ga znaju koristiti, znaju i koliko je Terminal moćan alat.
Nadam se da ovo razmišljanje ne dijele ostali korisnici Linuxa koji navraćaju ovdje i da je ovo gore samo trolanje.
Ma kakvo trolanje? Ozbiljno, što će netkome tko nije programer terminal? Samo zbunjuje ljude. Ubuntu imam od 2006 i terminal uopće nepalim.
Pa eto, neki od nas još uvijek volimo neke poslove odrađivati u Terminalu. A nismo programeri.
Neke stvari se brže i lakše odrade u Terminalu.
Svaka čast onda, al kažem da za nas obične korisnike je ovo nepotrebno. Treba nam sustav koj radi na principu pali i vozi a ne nešto gdje se treba igrati i poslagavati i zato je Ubuntu uspješan.
Moj Manjaro je više pali i vozi od Ubuntua. Npr. dolazi sa svim potrebnim kodecima, Flashom, Javom i nije potrebno nikakvo daljnje podešavanje da bi sve radilo. 😉
No, puno mi je lakše kod updatea ukucati pacman -Syu i stisnuti enter, nego mišem nabadati po izborniku, otvarati Pamac, kliknuti na update, upisati root password i obaviti update. Za to uvijek imam jedan Terminal u koje sam ulogiran kao root i u kojem obavljam administraciju sustava.
To je samo jedan od primjera.
Terminal ima svoje mjesto i mnogi ljudi ga koriste i vole. Nije niti približno arhaičan i neke stvari ćeš prije napraviti u CLI-u, nego u GUI-u.
Naravno, dobro je da sve možete obaviti u GUI-u, ali poznavanje Terminala neće biti na odmet, a ako ga stvarno naučiš koristiti može ti biti od velike pomoći ako nešto zapne.
Ja taj terminal uopće još nisam shvatio… evo 2 godine već prčkam po linuxu ali s terminalom sam na samo “copy paste” modu… a šta kad stvarno možeš sve u GUI-u napravit…
Evolucija:
pravi smjer: terminal->GUI->terminal
ono što nas nažalost čeka: terminal->GUI->IPhone->Win8->Win9
Nemoj da te Darwin čuje..
Njemu je ubuntu bez mp-3, dvd itd podrske pali i vozi……..Zato i imas na stotine clanaka “prvih 1000 stvari za napravit nakon instalacije ubuntu.a” zato sto je pali i vozi jel?
Kaj se tice terminala, terminal imas i u mac-os i u windowsima, nisam siguran da ti amone uopce shvacas kaj je terminal. A izjavit da je nesto lakse primjerice instalirat putem software centra ili synaptica nego terminala je presmijesno….(uz duzno postovanje synapticu kao odlicnom alatu)
Pa Ubuntu te i pita dal želiš softwer treće strane prilikom instalacije kao i update. Barem mene pita, možda nemamo isti Ubuntu. Mijenjati možeš svašta poslije instalacije no ekipa koja radi Ubuntu se stvarno potrudila i nema potrebe izmjenama.
Znam da te pita za softver treće strane. Manjaro, Sabayon i Mint npr. ne pitaju. 😉
Inače, što se tiče potrebe za izmjenama nakon istalacije Ubuntua, to je tvoj subjektivni dojam. Ja bi osobno puno toga izmjenio. Zato i koristim drugu distru.
Da fuq?
Nažalost ovo je uobičajeno razmišljanje novih korisnika i generacija koje dolaze.
Žao mi je da se čovjeku ne sviđa al neću ga sad tući radi toga.
Istina… Zbog moje ljubavi prema terminalu sam na tako lošem glasu da cijeli grad bruji o meni (naravno, sve što se priča je prestrašno da podijelim to ovdje s vama).
Prešal sam s windowsa xp na Manjaro pred nekih mjesec-dva i ful sam zadovoljan kak sve fino radi. Terminal mi je nužnost za neke stvari, npr: pošto bavim fotografijom kao hobijem napravil sam si skripte za risajzanje i neke osnovne manipulacije fotkama (prek imagemagick-a može se stvar stjunirat do bolesnih razmjera) – pustiš skriptu na hordi fotki, a ti fino odeš na kolače ili si paralelno pustiš neki hd pornić za to vreme :D. Može se to automatizirat i prek fotošopa/lajtruma/gimpa, ali traje duže i troši više memorije, a ima manje naprednih opcija za te neke osnovne često korištene stvari…
Kolači, kolači… kani se HD… akcije. 😀
Pusti sela do priča. Ionak nije njihovo mišljenje važno. Usotalom mi smo hackeri a hackeri imaju terminal sa zelenim slovima i crnom pozadinom.
Hehehe… zelena slova i crna pozadina. Ah te predrasude… Što je najgore, danas se i riječ “hacker” često poistovjećuje sa riječju “cracker” (a imaju dva potpuno suprotna značenja).
Lutherus i ostali obožavatelji terminala, izgleda da nam ne preostaje ništa drugo nego otići u mirovinu budući da koristimo koncept softwarea iz prošlog tisućljeća…
Gdje bi internet danas bio kad ne bi bilo terminala, kad administratori ne bi mogli automatizirati većinu administrativnih poslova?
Ja recimo koristim cron + par shell skripti za automatizaciju updatea, backup podataka…
A što se tiče gašenja terminala: buhuhuhahahaha!
amone, ti naravno imaš pravo na mišljenje. Nemoj se ljutiti, ali ovo što si napisao je neznanje. Windowsi i OS X imaju terminal kao što je iznad već rečeno i nije bez razloga tamo. Terminal je potreban. To što ga netko ne koristi jer ne zna za prednosti koje pruža, ne znači da je terminal zastario jer to s tim nema nikakve veze. Terminal je moćan alat. Mnoge se stvari ne mogu automatizirati do te mjere u GUI alatima kako se to može odraditi pomoću terminala. Također je ponekad neusporedivo lakše i brže otipkati nešto nego klikati mišem.
Naravno, postoje stvari za koje je GUI bolji, a postoje i stvari koje je u terminalu nemoguće obaviti. Treba se naučiti raditi u OS-u, upoznati njegove mogućnosti da bi se moglo o nečemu argumentirano govoriti. Terminal se neće ugasiti, bez brige.
Kaže tko? Aliens?
Čestitam autoru na vrlo korisnom članku, kao i na prethodnim nastavcima, i nadam se da će ih biti još. Zamolio bih za jedan savjet: zanima me postoji li naredba kojom bi se moglo pretraživati tekstove u .doc formatu po njihovu sadržaju, a ne samo po naslovu. Instalirao sam program Recoll, ali on pretražuje tekstove po sadržaju samo ako je u pitanju PDF, dok kod tekstova u formatu .doc daje samo naslove, što mi nije dovoljno. Pokušao sam naći rješenje u knijzi W.E. Shotts, The Linux Command Line, ali nisam se snašao (vidio sam grep, ali ne postižem što bih htio). Molim za savjet.