LAKI PINGVINI<>
102011<><>

Bash za početnike (2)

cp, mv, rm, echo, cat, more, less, grep, locate, find

Rad sa datotekama u terminalu

Prošlog meseca, na samom početku ove naše male škole orijentacije u „onom crnom” na Linuxu, pokazali smo vam kako se upravlja direktorijumima. Ovog puta idemo korak dalje i učimo vas kako da zagospodarite datotekama, tako da će vam već od danas grafički fajl menadžer biti sve manje potreban.

Kopiranje datoteka

Različite datoteke pravite različitim programima, bili oni grafički ili konzolni. Na računaru imamo mnogo više datoteka nego direktorijuma, što je i logično jer one sadrže konkretne podatke. Ekvivalent akcije drag&drop iz jednog okna grafičkog fajl menadžera u drugo okno u terminalu je naredba cp ( od eng. copy), iza koje sledi naziv izvorne datoteke i direktorijuma, a potom naziv ili putanja do cilja. Na primer, za kopiranje datoteke .bashrc, koja sadrži postavke terminala za korisnički nalog, može se upotrebiti sintaksa

cp .bashrc bashrc.bak

Za kopiranje svih datoteka kojima se u nazivu nešto ponavlja možemo da koristimo „džoker” zvezdu. Na primer, kopiranje svih PNG slika čiji naziv počinje sa „terminal” u direktorijum ~/Pictures obavljamo sintaksom:

cp terminal*.png ~/Pictures

Ova naredba, osim kopiranja datoteka, takođe omogućava i kopiranje celih direktorijuma. Dovoljno je ispred izvornog direktorijuma dodati opciju –r, koja predstavlja rekurziju. Na primer, kopiranje kompletnog sadržaja direktorijuma .config u /arhiva/backup postižemo sintaksom:

cp –r .config /arhiva/backup

Premeštanje i preimenovanje datoteka

A šta kada ne želimo da iskopiramo datoteku već da je samo premestimo? Jednostavno ćemo upotrebiti naredbu mv (eng. move). Ako prethodno iskopiranu datoteku /arhiva/backup /.config hoćemo da premestimo u korisnički direktorijum i istovremeno joj promenimo naziv u config.bak, koristićemo sintaksu

mv /arhiva/backup/.config ~/config.bak

Uklanjanje datoteka

Datoteke koje se vremenom nakupe prelazeći iz statusa „neophodno” preko „neće da se baci” u „nepotrebno” trebalo bi ukloniti u cilju dobijanja slobodnog prostora. Ovo se postiže naredbom rm (eng. remove). Na primer, uklanjanje datoteke ~/config.bak postižemo pomoću

rm ~/config.bak

Ako naznačena datoteka ne postoji, korisnik će biti obavešten o tome. Da bi se zanemarila takva obaveštenja, sintaksi se može dodati opcija –f, koja zanemaruje nepostojeće datoteke. Dakle, sintaksa postaje

rm –f ~/config.bak

Suprotno tome, kada želimo da budemo upitani da li zaista želimo da datoteka bude uklonjena, a posebno kada uklanjamo veći broj datoteka pomoću džokerskih karaktera, možemo da se poslužimo opcijom –i, tako da sintaksa postaje

rm –i ~/.config/*

U ovakvoj kombinaciji svaki direktorijum će biti preskočen, a za svaku datoteku će biti postavljeno pitanje da li je treba ukloniti, na šta se potvrdno odgovara tasterom ’y’, a odrično tasterom ’n’.

Pisanje u datoteku

Da bismo nešto upisali u tekstualnu datoteku ne moramo koristiti specijalizovan editor teksta – možemo se poslužiti naredbom echo, koja se inače mnogo češće koristi za ispisivanje nekog teksta u terminalu. Osnovna sintaksa je

echo Zdravo svete!

što po izvršavanju u terminalu ispisuje poruku „Zdravo svete!” Da bismo ovu poruku upisali u datoteku, dovoljno je da iza teksta dodamo znak za preusmeravanje izlaza (znak „veće od”) i putanju datoteke u koju tekst upisujemo:

echo Zdravo svete! >pozdrav.txt

Ako ciljna datoteka već postoji, njen sadržaj će biti prepisan. Za dopisivanje teksta unutar datoteke, umesto jednog upotrebljavamo dvostruki znak „veće od”. Na primer:

echo Laki pingvini RULEZ! >>pozdrav.txt

Na ovaj način će se novi tekst naći u novom redu, odmah ispod prethodnog sadržaja datoteke.

Ispisivanje sadržaja datoteke

U zavisnosti od toga da li želimo da sadržaj datoteke upotrebimo za dalje procesiranje ili ga čitamo na ekranu, za ispisivanje sadržaja koristimo različite naredbe. Jednostavno ispisivanje sadržaja dobijamo naredbom cat

cat pozdrav.txt

Na taj način tekst će biti ispisan na ekranu. Ako nas zanima u kom se redu nalazi neki tekst u datoteci, naredbi cat možemo da dodamo opciju –n, koja ispred svakog reda ispisuje redni broj tog reda, tako da sintaksa postaje

cat –n pozdrav.txt

U slučaju da je sadržaj datoteke obiman, tj. tekst dugačak, na ekranu će protrčati početak i sredina teksta, tako da će vidljiv biti samo kraj koji staje na ekran. Zbog toga za čitanje dužih datoteka koristimo naredbu more ili, još bolje, less. Obe ove naredbe ispisuju dugačke tekstove iz datoteka na ekranu, ali kada prvi ekran bude popunjen sadržajem, prikaz će biti pauziran, tj. čekaće se da korisnik pritisne ’Space’ za prikaz sledećeg ekrana ili ’q’ za izlazak iz prikaza u terminal.

more /usr/share/doc/bash/copyiright

Maksima „less is more” i na Linuxu se pokazala tačnom, jer pomoću naredbe more možemo da čitamo samo tekstualne datoteke, a kada pređemo na drugi ekran, ne postoji način da se vratimo na prethodni. Zbog toga je pametnije koristiti naredbu less, koja pruža više mogućnosti i, osim kretanja napred/nazad za jedan red (kursorski tasteri ’gore’ i ’dole’), odnosno jedan ekran (’Page Up’ i ’Page Down’), omogućava i korektan prikaz gzipovanih tekstualnih datoteka:

less /usr/share/doc/bash/INTRO.gz

Traženje teksta u datotekama

Kada vam zatreba neka datoteka u kojoj se nalazi tekst koji znate kako „zvuči” ali ne znate naziv datoteke, možete da uposlite naredbu grep, koja vrši pretragu teksta u datotekama ili prosleđenom tekstu. Sintaksa je krajnje jednostavna:

grep linux *

Na ovaj način će u svim datotekama u trenutnom direktorijumu biti tražen pojam „linux”, a za svaki pogodak biće ispisan naziv datoteke i linija teksta sa naglašenim traženim pojmom. Ako je pojam pronađen u binarnoj datoteci, to će biti i ispisano. I ovde su velika i mala slova bitna – za pojam ispisan različitim kombinacijama veličine slova biti potrebno dodavanje opcije –i (eng. ignore case), tako da sintaksa glasi:

grep –i linux *

A kada treba pretražiti i datoteke koje se nalaze u svim poddirektorijumima, tj. rekurzivno, koristićemo opciju –r:

grep –r linux *

Naravno, moguće je kombinovanje opcija za rekurziju i ignorisanje veličine slova, a ako umesto fraze sastavljene od samo jedne reči tražimo nešto duži tekst, frazu okružujemo apostrofima

grep ’Laki pingvini’ *

Grepovanje može da se ograniči na određene ekstenzije, tako da bi traženje nekog teksta samo u HTML datotekama moglo da se izvede sintaksom

grep www.sk.rs *.htm?

U gornjoj sintaksi džokerski znak upitnik zamenjuje bilo koji karakter na tom mestu, tako da odgovaraju obe kombinacije ekstenzije .htm i .html. Ako se desi da rezultat grepovanja bude predugačak, izlaz možemo da prosledimo naredbi less kako bi nam bilo lakše da pronađemo ono što tražimo:

grep www.sk.rs *.htm? | less

U ovoj sintaksi možete da primetite uspravnu crtu, tzv. pajp „|”, tj. novi znak za prosleđivanje koji je sličan ranije navedenom pisanju u datoteku prepisivanjem sa „>” i dodavanjem „>>”, sa tom razlikom što „pajp” prosleđuje izlaz nekoj drugoj naredbi. U gornjem primeru rezultati grepovanja se prosleđuju naredbi less.

Traženje datoteka

U terminalu, datoteke možemo da tražimo na dva načina: preko indeksa datoteka koji se osvežava u razumnim vremenskim intervalima (naredba locate), ili „živim” pretraživanjem na specifičnom mestu pomoću naredbe find. Oba ova načina imaju svojih prednosti i mana. Naredba locate mnogo je brža i gotovo trenutno daje spisak odgovarajućih datoteka, ali pronalazi i datoteke koje nisu na putanji koja korisnika interesuje. S druge strane, find traži tamo gde mu kažemo, ali na rezultate pretrage čekamo znatno duže jer se pretraga vrši „uživo” – pregledanjem svih datoteka na zadatoj putanji.

Osnovna sintaksa za prvi način je

locate COPYRIGHT

Obratite pažnju na to da je veličina slova u nazivu datoteka i ovde bitna, tako da će biti izlistane samo putanje datoteka sa velikim slovima „COPYRIGHT”. Da bismo dobili i spisak datoteka „copyright” i drugih kombinacija, i naredbi locate dodajemo opciju –i:

locate –i copyright

Kod nas je ova naredba vratila više od 2000 rezultata, što iziskuje ili upotrebu naredbe find ili propuštanje kroz grep. Na primer, za listanje samo datoteka „copyright”, bez obzira na veličinu slova, ali koje u putanji sadrže reč „aleksandar”, koristimo sintaksu

locate –i copyright | grep aleksandar

Naredba find omogućava naprednu pretragu sa mogućnošću obrade rezultata pretrage, ali ćemo sada pomenuti samo osnovni način njene upotrebe. Dakle, za traženje datoteke čiji naziv počinje sa „pozd” i nalazi se u korisničkom direktorijumu koristićemo sintaksu

find ~ –name pozd* –type f

Ova sintaksa je sastavljena od naredbe „find”, iza koje sledi putanja u kojoj se pretraga vrši. U priči o upravljanju direktorijumima (SK 9/2011) pomenuli smo da „tilda” na Linuxu predstavlja skraćenicu za korisnički direktorijum, npr. /home/aleksandar. Iza parametra „–name” naveden je pojam koji se traži u nazivu (sa džokerskim znakom zvezda dozvoljena je bilo koja kombinacija pojma ako ona počinje sa „pozd”), dok iza parametra „–type” navodimo da tražimo samo obične datoteke (a ne i direktorijume, simboličke linkove i druge specijalne vrste datoteka). Ako iz gornjeg primera izostavimo deo „–type f” tako da sintaksa bude

find ~ –name pozd*

u spisku rezultata, osim datoteka koje počinju sa „pozd”, dobićemo još i direktorijume, simboličke linkove i druge specijalne vrste datoteka koji sadrže taj pojam, a to nam verovatno neće biti od koristi.

Pomoću naredbe find, osim datoteka po nazivu, mogu da se traže i datoteke prema vremenu nastanka, veličini, vlasništvu i dozvolama, prema tome da li su upisive i/ili čitljive ili ne, i prema mnogo drugih kriterijuma koje ovoga puta nećemo objašnjavati jer nam prostor to ne dozvoljava.

• • •

Ova lekcija može vam poslužiti kao početnica i podsetnik za osnovno baratanje datotekama u terminalu. Napominjemo da svaka od navedenih naredbi, osim pomenutih primera, omogućava mnogo više, a kako se to mnogo više koristi, saznajte u njihovim man stranicama.

Na sledećem „času” videćemo kako se koriste uslovi, petlje i promenljive u terminalu, a do tada vas za pitanja, predloge i hvalisanja društvo „Lakih pingvina” očekuje na našem forumu bit.ly/sklp-forum. Srećno hakovanje!

Aleksandar UROŠEVIĆ

 
Bash za početnike (2)
Šta mislite o ovom tekstu?
Steam na GNU/Linuxu
Sonata 1.6.2.1
Mandriva 2011
Home / Novi brojArhiva • Opšte temeInternetTest driveTest runPD kutakCeDetekaWWW vodič • Svet igara
Svet kompjutera Copyright © 1984-2018. Politika a.d. • RedakcijaKontaktSaradnjaOglasiPretplata • Help • English
SKWeb 3.22
Opšte teme
Internet
Test Drive
Test Run
PD kutak
CeDeteka
WWW vodič
Svet igara



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

Svet kompjutera