Teško da je moguće nešto uraditi, a da se ne pokreću programi;
možda ćete moći nešto da pritisnete svojim računarom ili da
držite vrata otvorenim, a neki će praviti najdivniji brujeći zvuk kada su
uključeni, ali to je otprilike sve. Mada ja mislim da ćemo se složiti kako
njegova uloga kao brujećeg držača za vrata nije to što je dovelo
lične računare do popularnosti u kojoj sad uživaju.
Pa, sećate se kako je skoro sve u Linux-u fajl? Pa, to važi i za programe.
Svaka komanda koju izvršavate (koja nije ugrađena u školjku) negde
počiva kao fajl. Pokrećete program tako što jednostavno naznačite
punu putanju do njega.
Na primer, sećate se su komande iz prethodne sekcije?
Pa, ona je u stvari u /bin direktorijumu: /bin/su će je lepo pokrenuti.
Pa zašto onda kucanje samo su radi? Posle svega, niste
rekli da je u /bin. Mogao je lako biti i u /usr/local/share, zar ne? Kako je to on znao? Odgovor na to leži u PATH
varijabli okruženja; većina školjki imaju ili PATH
ili nešto veoma slično varijabli PATH. U osnovi ona
sadrži listu direktorijuma u koje se traže programi koje pokušavate da
izvršite. Pa kada ste pokrenuli su, vaša školjka
je protrčala kroz svoju listu direktorijuma, tražeći prvi izvršni
fajl sa imenom su kojeg može da izvrši. Ovo se
dešava uvek kada pokrenete program, a da niste naznačili punu putanju do njega;
ako dobijete ““Command not found””
grešku, to samo znači da program kojeg ste pokušali da pokrenete nije u
vašoj PATH varijabli (path na engleskom znači staza).
(Naravno, ovo bi bilo tačno ukoliko program uopšte ne postoji...).
Razmotrićemo varijable okruženja detaljnije u Section 8.3.1.
Takođe se setite kako je “.” prečica
za trenutni direktorijum, pa ukoliko se desi da ste u /bin, ./su će raditi isto kao i eksplicitna puna putanja.
Skoro svaka školjka prepoznaje neke znakove kao zamene ili skraćenice koje
znače: ovde ide bilo šta. Takvi znaci se zgodno zovu džokeri, ili na
engleskom wildcards; najčešći su * i ?. Po konvenciji, ?obično znači
bilo koji jedan znak. Na primer, pretpostavimo da ste u direktorijumu sa tri fajla: ex1.txt, ex2.txt i ex3.txt. Želite da kopirate sve ove fajlove (koristeći
cp komandu koju smo opisali u Section 10.5.1) u neki
drugi direktorijum, recimo /tmp. Pa, kucanje cp ex1.txt ex2.txt ex3.txt /tmp je totalno puno posla. Mnogo je
lakše ukucati cp ex?.txt /tmp; znak ? će se poklopiti sa svakim od znakova “1”,
“2” i “3”, i svaki od njih će biti redom zamenjen.
Šta kažete? To je još
uvek previše posla? U pravu ste. Naporno je; imamo zakone o radu koji nas
štite od takvih stvari. Srećom, takođe imamo i *.
Kao što sam već pomenuo * će se poklopiti sa
“bilo kojim brojem znakova”, ukljućujuči i nijedan. Pa ako su ova
tri fajla jedina u direkotorijumu, mogli bismo jednostanvo reći cp * /tmp i obuhvatiti ih sve u jednom zamašaju. Pretpostavimo,
ipak, da postoji i fajl sa imenom ex.txt i neki sa imenom hejaz.txt. Želimo da iskopiramo ex.txt, ali ne i hejaz.txt; cp ex* /tmp će uraditi to za nas.
cp ex?.txt /tmp, će, naravno, obuhvatiti samo naša
tri početna fjla; ne postoji znaku u ex.txt kojeg će
zameniti ?, pa će on biti izostavljen.
Još jedan čest džoker je par uglastih zagrada [
]. Bilo koji znak unutar zagrada će biti zamenjen na mestu [ ] kako bi se našli fajlovi koji se poklapaju. Zvuči
zbunjujuće? Nije jako teško. Pretpostavimo za primer, imamo direktorijum koji
sadrži sledećih 8 fajlova: a1, a2, a3, a4, aA, aB, aCi aD . Želimo da nađemo samo fajlove koji se
završavaju sa brojem; [ ] će uraditi ovo za nas.
Ali šta ako želimo samo a1, a2 i a4? U prethodnom primeru smo
koristili - da znači sve vrednosti između 1 i 4. Možemo, takođe,
odvojiti pojedine znakove sa zarezima.
Znam šta sada mislite, “A šta je sa slovima?” Linux razlikuje
velika i mala slova, što znači da su a i A različita slova koja su povezana samo u vašoj glavi.
Velika slova uvek idu ispred malih, pa A i B dolaze pre a i b. Nastavljajući sa našim prethodnim primerom, ukoliko
želimo fajlove a1 i A1,
možemo ih brzo pronaći pomoću [ ].
Primetite da bismo dobili pogrešne rezultate ukoliko bismo upotrebili crticu
umesto zareza.
% ls [A-a]1
A1 B1 C1 D1 a1
|
Takođe možete kombinovati crticu i zarez.
% ls [A,a-d]
A1 a1 b1 c1 d1
|
(Sada sledi nešto cool.)
Znate šta je to? To sam ja kako izvršavam ps kako
bih video koji se procesi izvršavaju; ps je opisana u Section 11.3. Taj deo nije cool, cool deo je > blargh, koji znači, grubo rečeno, uzmi izlaz iz ps i upiši ga u fajl sa imenom blargh. Ali sačekajte, postaje još više cool.
Ova linija uzima izlaz iz ps i sprovodi ga kroz less, pa tako mogu pomerati kako mi se hoće.
Ovaj treći je načešće korišćen preusmerivač; on
radi istu stvar kao i “>”, osim što će “>>”
dodati izlaz iz ps u fajl blargh,
ukoliko takav fajl već postoji. Ako ne, isto kao i sa “>”, on će
biti napravljen. (“>” će uništiti trenutni sadržaj fajla
blargh.)
Takođe postoji i “<” operator, koji znači uzmi vaš unos
iz sledećeg, ali ni blizu korišćen kao ostali.
% fromdos < dosfile.txt > unixfile.txt
|
Preusmeravanje postaje stvarno zabavno jednom kada se počnete s njime igrati:
To će pokrenuti ps, obrnuti linije koje on napiše i
dodati ih u fajl blargh. Možete naređati koliko god
hoćete ovih; samo budite oprezni i pamtite da se izvršavaju s leva na
desno.
Pogledajte man stranicu za bash(1) za detaljnije informacije
o preusmeravanju.