sys.portal
Published on sys.portal (https://sysportal.carnet.hr)

Početna > E-knjige > Naredbe za koje (možda) niste znali

Naredbe za koje (možda) niste znali

Linux, kao uostalom i drugi Unixi, ima mnoštvo naredbi i malih specijaliziranih alata koji dolaze sa sustavom (ili u Linuxovom slučaju, sa osnovnim instalacijskim paketom). Čak i nakon duljeg bavljenja Linuxom moguće je da niste susreli neke naredbe, odnosno alate, iako bi vam mogli pomoći u svakodnevnom održavanju suatava.

Iz tog razloga, pokušat ćemo napraviti pregled nekih alata koje smo imali priliku susresti, a nisu (toliko) uobičajeni. Podrazumijeva se da popis nije, niti ikada može biti kompletiran, no svakako ćemo probati pronaći i opisati najzanimljivije i najkorisnije alate.

  • Logirajte [1] se za dodavanje komentara

Naredbe za koje (možda) niste znali 1: script

 Na Linuxu, kao derivatu Unixa, ali i na svakom drugom operativnom sustavu može doći do problema i grešaka. Najčešće su to jednostavniji problemi koje možete samostalno riješiti, jer je opis greške dovoljno jasan da se može vidjeti u čemu je problem. Problem nastaje u trenutku kad je greška previše kriptična, previše dugačka ili jednostavno nerazumljiva. Tu u pomoć može uskočiti naredba "script".

Naredbom script dižete novu korisničku ljusku (shell), ali s tom razlikom da će se sve što se događa u njoj bilježiti u datoteku "typescript" u trenutnom direktoriju, odnosno direktoriju u kojem ste pokrenuli naredbu. Na ovaj način imate detaljan pregled što ste radili, i što se potom događalo.

Script ima manu da ne radi dobro s programima koji manipuliraju ekranom na bilo koji način (pine, mutt, lynx...), odnosno bit će teže protumačiti što se događalo. No, i dalje su to vrlo korisne informacije i ne treba izbjegavati script zbog toga.

Jedna od najkorisnijih, naredba apt-get može često izbaciti pitanje ili grešku na koje ne znate odgovor, pa morate potražiti pomoć nekog drugog, ili pomoć odgovarajuće službe. Način uporabe je jednostavan, samo treba pokrenuti naredbu script, pa onda već uobičajeni niz apt-get update & upgrade ili nešto drugo:

# script
Script started, file is typescript
# apt-get install paket
Reading Package Lists... Done
...
Setting up paket (1.6.1) ...
Can't locate config.pm in @INC (@INC contains: /etc/paket /etc/perl
/usr/local/lib/perl/5.8.4 /usr/local/share/perl/5.8.4 /usr/lib/perl5
/usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8
/usr/local/lib/site_perl .) at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
dpkg: error processing paket (--configure):
subprocess post-installation script returned error exit status 2
Errors were encountered while processing:
paket
E: Sub-process /usr/bin/dpkg returned an error code (1)
# exit
exit
Script done, file is typescript

Dakle, uspjeli smo sačuvati sav izlaz naredbe apt-get, kao i vaše akcije, što će umnogome pomoći kod rješavanja problema ako datoteku typescript pošaljete kao prilog poruci. Bez ovih informacija, vaš problem će biti znatno teže i sporije riješen.

Ime izlazne datoteke ne mora biti typscript, može biti bilo koje drugo ime:

# script izlaz.txt
Script started, file is izlaz.txt
#

Ostale, malobrojne, opcije možete naći u kratkom manualu naredbe, koji ćete dobiti već poznatom "man script" naredbom.

  • Logirajte [1] se za dodavanje komentara
pet, 2007-10-19 13:01 - Željko Boroš
Vijesti: 
Linux [2]
Kuharice: 
Za sistemce [3]
Kategorije: 
Servisi [4]
Vote: 
4
Vaša ocjena: Nema Average: 4 (2 votes)

Naredbe za koje (možda) niste znali 2: ipcalc

 Svima je jasno da je IP prostor sve manji, te da institucije dobivaju sve manje IP adresa. Jedan od načina rješavanja problema nedostatka IPv4 prostora je i bezklasno adresiranje (Classless Inter-Domain Routing) - CIDR.

Ovdje vas nećemo pokušavati naučiti što je CIDR, nego to ostavljamo vama. Dobar početak je Wikipedia, koja ima unos o CIDR-u na URL-u: http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing [5]

Cilj članka je olakšati rad sa CIDR zapisima, koji su obično u obliku

IP.IP.IP.IP/DULJINA_PREFIXA

primjerice

193.198.1.0/24

Dakle, ovo je lako riješiti, jer /24 znači da je 24 bita upotrijebljeno za adresiranje mreže, dok je ostatak namijenjen za hostove.

Ovo je standardno podešavanje za većinu institucija u CARNetu, i dodjeljuje 256 adresa na uporabu instituciji. No, što ako imamo slučaj

193.198.1.0/28

Ovo se da izračunati ako adresu pretvorimo u binarni oblik ili pogledamo u kakvu tablicu. No, još lakše je upotrijebiti alat ipcalc:

# ipcalc -n 193.198.1.0/28
Address: 193.198.1.0 11000001.11000110.00000001.0000 0000
Netmask: 255.255.255.240 = 28 11111111.11111111.11111111.1111 0000
Wildcard: 0.0.0.15 00000000.00000000.00000000.0000 1111
=>
Network: 193.198.1.0/28 11000001.11000110.00000001.0000 0000
HostMin: 193.198.1.1 11000001.11000110.00000001.0000 0001
HostMax: 193.198.1.14 11000001.11000110.00000001.0000 1110
Broadcast: 193.198.1.15 11000001.11000110.00000001.0000 1111
Hosts/Net: 14 Class C

Sad je sve jasno i bez ikakvog računanja. Maska /28 zapravo znači da je moguće adresirati samo 14 hostova (16 - 2 zbog mrežne i broadcast adrese), te da je raspoloživi raspon adresa od 193.198.1.1 do 193.198.1.14.

Moguće je i obrnuto, kako saznati CIDR ako imamo uobičajene podatke o IP adresi i mrežnoj masci? Poslužimo se naredbom "ifconfig":

# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:00:8B:EC:85:82
inet addr:193.198.1.100 Bcast:193.198.1.127 Mask:255.255.255.192
...

Vidimo dakle IP adresu, broadcast adresu i mrežnu masku. Napravimo:

# ipcalc -n 193.198.1.100 255.255.255.192
Address: 193.198.1.100 10100001.00110101.00011110.01 100100
Netmask: 255.255.255.192 = 26 11111111.11111111.11111111.11 000000
Wildcard: 0.0.0.63 00000000.00000000.00000000.00 111111
=>
Network: 193.198.1.64/26 10100001.00110101.00011110.01 000000
HostMin: 193.198.1.65 10100001.00110101.00011110.01 000001
HostMax: 193.198.1.126 10100001.00110101.00011110.01 111110
Broadcast: 193.198.1.127 10100001.00110101.00011110.01 111111
Hosts/Net: 62 Class B

Možemo vidjeti iste podatke kao i u prethodnom primjeru, ali i CIDR oznaku, koja u konkretnom slučaju glasi 193.198.1.64/26.

Naredba ipcalc nam, dakle, omogućuje brzi i nepogrešiv prikaz raspona adresa u bilo kojem obliku. Ipcalc ne prima mnogo opcija, a spomenut ćemo samo neke najkorisnije:

-n ne prikazuje boje koje su po defaultu uključene
-b ne prikazuje binarni raspis adresa
-h ispis je u HTML obliku

Više informacija možete pročitati u manualu naredbe ("man ipcalc").

  • Logirajte [1] se za dodavanje komentara
ned, 2007-12-16 14:52 - Željko Boroš
Vijesti: 
Linux [2]
Kuharice: 
Za sistemce [3]
Kategorije: 
Servisi [4]
Vote: 
5
Vaša ocjena: Nema Average: 5 (1 vote)

Naredbe za koje (možda) niste znali 3: units

U seriji članaka pod nazivom "Naredbe za koje (možda) niste znali" pokušat ćemo vas upoznati s nekim naredbama i dodatnim priručnim alatima koji se ili standardno nalaze na Unix i Linux sustavima, ili se često dodaju zbog svoje uporabnosti i popularnosti. S jednim takvim alatom smo vas već upoznali (ipcalc [6]), a ovim člankom počinjemo novi ciklus.

Prvi alat s kojim ćemo vas upoznati je "units". Kao što mu samo ime govori, radi se o praktičnom alatu za pretvorbu raznih mjernih jedinica u naredbenoj liniji.

Pretvorba se može raditi interaktivno ili neinteraktivno, primjerice ukoliko želimo saznati koliko litara ima u jednom galonu:

$ units "1 gallons" liters
* 3.7854118
/ 0.26417205

$ units
2438 units, 71 prefixes, 32 nonlinear units
You have: 1 gallons
You want: liters
* 3.7854118
/ 0.26417205
You have:
Ctrl+C

Izlazak iz interaktivnog načina rada je moguć uporabom standardne kombinacije tipki Ctrl+C. Koji ćete oblik rabiti, ovisi o Vama.

Malo ćemo objasniti ispis. Zvjezdica ispred vrijednosti znači da je vrijednost pretvorbe dobivena linearno, množenjem sa nekim koeficijentom. Iza zvjezdice je, naravno, vrijednost u traženim jedinicama. Druga linija određuje obrnuti koeficijent, s kojim možemo dobiti originalnu mjernu jedinicu (1 litra je 0.264 * 1 galona).

Za razliku od linearnih, postoje i nelinearne pretvorbe, kao što je primjerice pretvorba iz stupnjeva Fahrenheita u stupnjeve Celzija.

$ units "tempF(80)" tempC
26.666667

Ovaj put, dakako, nema zvjezdice, a treba uočiti i drugačiji način pisanja vrijednosti za temperaturu, koja se piše slično pozivanju funkcije u C-u. Interaktivno, ne trebaju navodnici koji štite da ljuska ne interpretira zagrade:

$ units
You have: tempF(80)
You want: tempC
26.666667

Neke pretvorbe nisu očigledne, kao recimo pretvorba iz milja u kilometre:

$ units
You have: 50 mph
You want: kmph
conformability error
22.352 m / s
1.5091905e+36 s / kg m

Ukoliko dobijete poruku "conformability error", znači da jedinice nisu uskladive, i ispisat će se njihove standardizirane vrijednosti (50 milja na sat je oko 22 metra u sekundi, i definicija jedinice koju program nije razumio). Ispravan način definicije kilometra na sat nije ni "km/h", ni "kmh", nego "kph":

$ units
You have: 50 mph
You want: kph
* 80.4672
/ 0.012427424

Još sigurnije je koristiti govorni oblik "kilometers per hour", pri čemu britanski i američki način pisanja ne igraju ulogu (mogli smo napisati i "kilometres").

Ukoliko samo želite vidjeti definiciju neke jedinice, primjerice koliko je to 1 tekuća unca:

$ units floz
Definition: fluidounce = usfluidounce = 1|16 uspint = 2.957353e-05 m^3

Dakle, 1 tekuća unca je 0.3 decilitara.

Alat units podržava mnogo više od ovih uobičajenih mjernih jedinica, pa i neke arhaične i napuštene. Svakako preporučujemo da pogledate man stranicu i datoteku s pretvorbama /usr/share/misc/units.dat, jer ćete tamo naći mnoštvo informacija koje će vam zatrebati, poglavito zbog pravilnog pisanja mjernih jedinica i njihovih parametara.

Ovaj zgodni alat možete instalirati, kao i uvijek, preko apt-get naredbe:

# apt-get install units

 

  • Logirajte [1] se za dodavanje komentara
sri, 2008-12-03 15:59 - Željko Boroš
Kuharice: 
Linux [7]
Kategorije: 
Operacijski sustavi [8]
Vote: 
5
Vaša ocjena: Nema Average: 5 (4 votes)

Naredbe za koje (možda) niste znali 4: cal

Ime naredbe cal dolazi od engleskog "calendar", što automatski otkriva i njenu namjenu. Pomoću naredbe cal možete ispisati, obraditi i potom isprintati kalendar praktički bilo koje godine, uključujući i one po Julijanskom kalendaru.

Raspon godina koji cal može prikazati je od 1. do 5875706. godine, dakle, nećete ovaj alat tako skoro prestati rabiti.

Najčešća primjena je ispis trenutnog mjeseca:

$ cal
  December 2008
Su Mo Tu We Th Fr Sa   
1  2  3  4  5  6
7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

Naredba prima jedan ili dva parametra. Ukoliko ste naveli jedan parametar, smatra se da ste mislili na godinu. Kod navođenja godine valja obratiti pozornost da morate otkucati cijelu godinu, dakle "cal 09" će prikazati kalendar za 9. godinu nove ere. Ispravan je oblik "cal 2009":

$ cal 2009
2009

January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7
4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14
11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21
18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28
25 26 27 28 29 30 31 29 30 31

April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 1 2 1 2 3 4 5 6
5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13
12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20
19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27
26 27 28 29 30 24 25 26 27 28 29 30 28 29 30
31
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 1 1 2 3 4 5
5 6 7 8 9 10 11 2 3 4 5 6 7 8 6 7 8 9 10 11 12
12 13 14 15 16 17 18 9 10 11 12 13 14 15 13 14 15 16 17 18 19
19 20 21 22 23 24 25 16 17 18 19 20 21 22 20 21 22 23 24 25 26
26 27 28 29 30 31 23 24 25 26 27 28 29 27 28 29 30
30 31
October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5
4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12
11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19
18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26
25 26 27 28 29 30 31 29 30 27 28 29 30 31

Ukoliko želite saznati kako će izgledati neki mjesec određene godine navedite mjesec prije godine:

$ cal 4 2009
     April 2009
Su Mo Tu We Th Fr Sa
          1  2  3  4
5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

Ako pogledate ispis, vidjet ćete da tjedan počinje sa nedjeljom, što nije uobičajeno u našem području. Ispis kalendara s ponedjeljkom kao prvim danom dobit ćete primjenom opcije "-m":

$ cal -m
   December 2008
Mo Tu We Th Fr Sa Su
1  2  3  4  5  6  7
8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

UPDATE 03-2011: U izdanju "Squeeze" Debiana morat ćete rabiti drugačiji oblik naredbe da biste dobili ponedjeljak kao prvi dan u tjednu, ncal -M:

$ ncal -M
March 2011
Mo 7 14 21 28
Tu 1 8 15 22 29
We 2 9 16 23 30
Th 3 10 17 24 31
Fr 4 11 18 25
Sa 5 12 19 26
Su 6 13 20 27

Još jedna zanimljiva opcija je "-3". Ona će prikazati mjesec koji ste tražili, ali i mjesec prije i mjesec poslije, sve u jednom redu. Ovo može dobro poslužiti za planiranje godišnjih odmora, primjerice.

Osim naredbe cal, postoji i emulacija naredbe ncal, koja se prvo pojavila na FreeBSD sustavima. Kad cal pozivate kao ncal, ispis je ponešto drugačiji, kompaktniji i tjedan počinje s ponedjeljkom:

$ ncal  2009
                                  2009
    January           February          March             April
Mo     5 12 19 26        2  9 16 23        2  9 16 23 30     6 13 20 27
Tu     6 13 20 27        3 10 17 24        3 10 17 24 31     7 14 21 28
We     7 14 21 28        4 11 18 25        4 11 18 25     1  8 15 22 29
Th  1  8 15 22 29        5 12 19 26        5 12 19 26     2  9 16 23 30
Fr  2  9 16 23 30        6 13 20 27        6 13 20 27     3 10 17 24
Sa  3 10 17 24 31        7 14 21 28        7 14 21 28     4 11 18 25
Su  4 11 18 25        1  8 15 22        1  8 15 22 29     5 12 19 26

Kao zanimljivost, navest ćemo da ncal podržava prikaz dana kada padaju Uskršnji blagdani, samo trebate upotrijebiti opciju "-e" (od engleskog Easter):

$ ncal -e 2009
12 April 2009

Dakle, iako nemaju previše opcija, naredbe cal i ncal nam ipak mogu pružiti brze, točne i korisne informacije. Kalendare kasnije možemo formatirati  i isprintati u nekom programu za obradu teksta ili softveru za DTP, ukoliko nam pri ruci nije neki "pravi" kalendar.

Cal i ncal se nalaze u paketu "bsdmainutils", pa se jednostavno daju instalirati sa:

# apt-get install bsdmainutils

ukoliko ih već nemate na sustavu.

  • Logirajte [1] se za dodavanje komentara
čet, 2008-12-18 02:15 - Željko Boroš
Kuharice: 
Linux [7]
Kategorije: 
Operacijski sustavi [8]
Vote: 
4.666665
Vaša ocjena: Nema Average: 4.7 (3 votes)

Naredbe za koje (možda) niste znali 5: paste

Svima nam poznata operacija kojoj obično prethodi copy. Ali u linux komandnoj liniji naredba paste postaje nešto sasvim drugo.

Naredba paste služi za spajanje redaka iz dvaju ili više datoteka. Primjerice, imamo tri datoteke. U prvoj se nalaze imena ljudi, u drugoj telefonski brojevi, a u trećoj mjesta.

Datoteka 1 – dat1.txt

Marko Marković
Pero Perić
Stipe Stipić

Datoteka 2 – dat2.txt

555-432
666-543
777-654

Datoteka 3 – dat3.txt

Smokvica
Kruškovac
Jabukovac

Izvršavanjem naredbe

paste  dat1.txt dat2.txt dat3.txt > dat.txt

dobijemo datoteku dat.txt sljedećeg sadržaja:

Marko Marković	555-432	Smokvica
Pero Perić 666-543 Kruškovac
Stipe Stipić 777-654 Jabukovac

Ukoliko želite datoteke složiti po stupcima dovoljno je uporabiti parametar -s i kao rezultat dobije se:

Marko Marković       Pero Perić        Stipe Stipić
555-432 666-543 777-654
Smokvica Kruškovac Jabukovac

Možda nam se ovakav način obrade čini pomalo arhaičan, ali poznavanje ovakvih naredbi neki put zaista dobro dođe. Primjerice, imamo datoteku s korisničkim imenima, a od nas se traži da ju pripremimo za unos u program za automatizirano dodavanje korisnika, koji kao ulaz očekuje datoteku u formatu korisnik:lozinka.
Datoteka korisnici.txt:

korisnik1
korisnik2
korisnik3

Programom za generiranje lozinki izgeneriramo potrebne lozinke i snimimo ih u datoteku lozinke.txt.

lozinka1
lozinka2
lozinka3

Naredbom

paste  -d ':' korisnici.txt lozinke.txt > import.txt

dobijemo datoteku za unos korisnika u traženom formatu.

korisnik1:lozinka1
korisnik2:lozinka2
korisnik3:lozinka3

 

  • Logirajte [1] se za dodavanje komentara
sri, 2009-03-11 14:26 - Ljubomir Hrboka
Kuharice: 
Linux [7]
Za sistemce [3]
Vote: 
4.5
Vaša ocjena: Nema Average: 4.5 (2 votes)

Naredbe za koje (možda) niste znali 6: cut

Naredba cut u linuxu je komplementarna naredbi paste [9] i s njom se mogu na brzinu napraviti određene manipulacije s tekstualnim datotekama, za koje bi možda inače trebali pisati perl skriptu ili koristiti awk.

Kako bi vidjeli što ta naredba uistinu radi, najbolje je da pokažemo na jednom primjeru.

Prvo napravimo jednu probnu datoteku proba.txt. Za pravljenje proba.txt datoteke ne moramo posezati za editorom, nego, kao iskusni sistemci (zlo)upotrijebimo konzolnu naredbu cat i makro naredbu EOF (End Of File), te upisujmo kako slijedi:

lcavara@ttf:~/isprobavanja$ cat >proba.txt<<EOF
> 1.      2.      3.      4.
>
> 1       Jedan   Dva     Tri
> 2       1       2       3
> 3       I       II      III
> 4       One     Two     Three
> EOF
lcavara@ttf:~/isprobavanja$

(za ramake između stavki koristili smo tabulator).

Pogledajmo jel' datoteka proba.txt kreirana i kako izgleda:

lcavara@ttf:~/isprobavanja$ cat proba.txt
1. 2. 3. 4.

1 Jedan Dva Tri
2 1 2 3
3 I II III
4 One Two Three
lcavara@ttf:~/isprobavanja$

Dobili smo tekstualnu datoteku, sastavljenu od redova i stupaca. S naredbom cut možemo "isjeći" bilo koji stupac, ili stupce, recimo drugi i četvrti stupac:

lcavara@ttf:~/isprobavanja$ cut -f 2,4 proba.txt
2. 4.

Jedan Tri
1 3
I III
One Three
lcavara@ttf:~/isprobavanja$

(Redoslijed stupaca uvijek ostaje, bez obzira, kako smo poredali parametre iza -f (field) opcije, pa bi tako rezultat bio isti i da smo gornju naredbu pisali: cut -f 4,2 proba.txt. Drugi red u datoteci proba.txt je namjerno ostavljen prazan, da se vidi da to ne utječe na korektno izvršavanje naredbe)

U navedenom primjeru tekstualna datoteka je imala tabulator kao delimiter, no ako se između pojedinih stupaca nalazi neki drugi znak, npr dvotočka: : ili razmak ' ', onda se uz opciju -f treba dodati opcija -d':' odnosno -d' '. Ako trebamo "isjeći" redove umjesto stupaca, onda trebamo predhodno upotrijebiti komandu paste s parametrom -s, i nakon primjene comande cut, opet primijeniti komandu paste s parametrom -s da opet budu redovi - redovi, a stupci - stupci. S cut i paste vrlo je zgodno koristiti i sort, da bi se redovi i stupci sortirali po određenom kriteriju - npr. po abecedi ili rednom broju.

  • Logirajte [1] se za dodavanje komentara
uto, 2009-03-17 12:20 - Luka Ćavara
Kuharice: 
Linux [7]
Za sistemce [3]
Vote: 
5
Vaša ocjena: Nema Average: 5 (1 vote)

Naredbe za koje (možda) niste znali 7: locate, whereis, whatis, apropos, which

Za ovih pet naredbi smo odlučili napisati jedan članak, jer su pojedinačno prejednostavne i imaju premalo funkcija, a opet su na jedan način povezane. Ovi programi nude nekoliko načina pretrage datoteka, naredbi ili stranica manuala za bilo koju naredbu koja vam je u tom trenutku potrebna.

Ukoliko želite pronaći datoteku ili direktorij (nije bitno sjećate se imena cijele naredbe, dovoljno je znati samo dio naziva te naredbe), možete upotrijebiti naredbu locate:

 

locate

$ locate peri
/usr/share/something/lang/pt_br/help/enrolperiod.html
/usr/share/something/lang/sv/help/enrolperiod.html
/usr/src/kernel/arch/parisc/kernel/superio.c

Naredba locate pronalazi sve datoteke i direktorije koje u svom imenu imaju niz znakova 'peri'. Naredba rabi malu bazu koja se (obično, zanemarit ćemo ovaj put triggere) generira svaki dan putem crona (konkretna skripta je /etc/cron.daily/find). Sama baza se nalazi u direktoriju /var/cache/locate/locatedb, a generira se putem naredbe 'updatedb'.

Iako će biti u većini slučajeva obnova baze jednom dnevno biti  sasvim zadovoljavajuća, mana naredbe locate je nesinhroniziranost sa stvarnim stanjem. Iz tog razloga, bazu možete ručno osvježiti, preko već spomenutih naredbi i skripti:

# /etc/cron.daily/find

ili

# cd /
# updatedb

Osvježavanje  traje neko vrijeme (naravno, ovisi o brzini poslužitelja), pa budite strpljivi. Konfiguraciju možete vidjeti u /etc/updatedb.conf, iako nije vjerojatno da ćete tamo tamo trebati išta mijenjati. Za potpune informacije pogledajte stranice manula za naredbe locate, updatedb i locatedb.

 

whereis

Ukoliko tražite specifično samo naredbu (ili njen izvorni kod) i odgovarajuću stranicu manuala (dakle, neće biti ispisane baš sve datoteke koje odgovaraju upitu), pomoć nudi naredba 'whereis':

$ whereis top
top: /usr/bin/top /usr/share/man/man1/top.1.gz

Naredba ponekad može dati i nepredvidljive rezultate (zbog hardcodiranih vrijednosti unutar programa), ali su i dalje upotrebljivi:

$  whereis apache2
apache2: /usr/sbin/apache2 /etc/apache2 /usr/lib/apache2 /usr/share/apache2
/usr/share/man/man8/apache2.8.gz

Naredba whereis, za razliku od ostalih sličnih naredbi, ne pretražuje pomoću baze, stoga su podaci koje ispisuje aktualni i usklađeni sa trenutnim stanjem paketa na sustavu. Pretragu možete dalje ograničiti putem opcija -b (traži samo binarne, odnsono izvršne datoteke), -s (traži samo datoteke izvornog koda) i -m (traži samo dateoteke stranica manuala). Primjer:

$ whereis -m apache2
apache2: /usr/share/man/man8/apache2.8.gz

 

whatis

Tradicionalno, whatis se mogla pozivati i preko oblika 'man -f'. Za razliku od naredbe sličnog imena whereis, whatis pretražuje samo u zaglavljima stranica manuala. Zaglavlje stranice manuala, kao što vam je poznato, izgleda otprilike ovako:

POSTFIX(1)

NAME
postfix - Postfix control program

SYNOPSIS
postfix [-Dv] [-c config_dir] command
...

Dakle,ukoliko na brzinu želite znati što koja naredba radi, na naredbenu liniju ukucat ćete ovo:

$ whatis postfix
postfix (1)          - Postfix control program

Naredba whatis traži samo cijelu riječ (nema skraćivanje):

$ whatis fail2
fail2: nothing appropriate.

No, uporabom opcije '-r' (od regex, regularni izraz), možemo proširiti popis rezultata:

$  whatis -r fail2
fail2ban-client (1)  - configure and control the server
fail2ban-regex (1)   - test Fail2ban "failregex" option
fail2ban-server (1)  - start the server

 

apropos

Tradicionalno, ova naredba se rabila kao "man -k".

Naredba apropos, za razliku od whatis, pretražuje cijelo zaglavlje stranice manuala, pa će prikazati sve stranice manuala na sustavu koje u zaglavlju spominju traženu riječ. Ta riječ se uopće ne mora pojavljivati u nazivu programa!

$ apropos postfix
access (5)           - format of Postfix access table
aliases (5)          - format of the Postfix alias database
body_checks (5)      - Postfix built-in header/body inspection
...

Na ovaj način možete u jednom potezu pronaći sve relevantne stranice za neki program, bez gledanja u pojedinačne stranice manuala.

Naredbe whatis i apropos, kao i locate, ispisuju rezultate pomoću indeksirane baze, ali to nisu iste baze. U Debianu se baza za whatis i apropos nalazi u datoteci /var/cache/man/index.db.

Ovo znaèi da baza mora biti osvježena kako bi vaše pretraživanje dalo relevantne rezultate. O ovome se brine cron datoteka, ali slično kao i za locate bazu, indeksiranje možete pokrenuti i ručno:

# /etc/cron.daily/man-db

 

which

Zadnja s prethodnim naredbama srodna (po nama), je naredba which, koja ne traži ništa po datotečnom sustavu (jednostavno, pretražuje trenutnu stazu, $PATH), nego ispisuje koja će se naredba izvršiti ukoliko je otkucate na naredbenoj liniji:

$ which zic
/usr/sbin/zic

Naredba je korisna ukoliko imate dvije ili više naredbi istog imena, ili želite provjeriti je li naredba uistinu ona za koju mislite da će se pokrenuti u trenutnoj stazi ($PATH-u). Ovo je korisno kad postoje dvije ili više naredbi istog imena (klasičan primjer je naredba "host").

 

  • Logirajte [1] se za dodavanje komentara
sri, 2009-03-25 13:57 - Željko Boroš
Kategorije: 
Software [10]
Vote: 
0
No votes yet

Naredbe za koje (možda) niste znali 8: vidir

Problem: Izlistate direktorij i u imenima datoteka vidite osim normalnih i razne čudne znakove, npr. kvadratiće, razne grafičke simbole, prazne prostore - ili najčešće upitnike. Preimenovati takve datoteke pojedinačno, vrlo je sporo, a standardni alati koji to obavljaju nad grupama datoteka, ne mogu samo tako pomoći, jer je sustav imena preheterogen i često se ne da obuhvatiti nekim pravilom.

Odmah vam pada na pamet, kako bi zgodno bilo cijeli direktorij editirati, kao tekstualnu datoteku - ali čime?

Na sreću, rješenje postoji. Tu je naredba vidir.

Naredba vidir u sadašnjoj CARNet distribuciji Debiana ne dolazi standardno ugrađena, ali se lako dogradi uz ostale korisne alate iz paketa moreutils naredbom apt iz konzole:

apt-get install moreutils

Sada je dovoljno da odete u direktorij s datotekama kojima želite editirati imena i upišete:

vidir -

(ako ne želite editirati i imena poddirektorija možete ispustiti minus '-' )

Pokrenut će se, suprotno očekivanju, vaš podrazumijevani editor (a ne nužno vi, što bi sugeriralo ime vidir, tj. onaj isti koji se pokrene kad pokrenete recimo naredbu crontab -e) i dobit ćete unutar njega cijeli direktorij (samo imena datoteka) u obliku jedne nove tekstualne datoteke, koju možete ispravljati i korigirati po želji. Nakon pospremanja "datoteke" i pokretanja naredbe ls promjene će biti odmah vidljive.

Usput napomenimo, da u Debianu vrlo lako možete zamijeniti podrazumijevani editor naredbom update-alternatives --config editor:

ttf-ztk:/# update-alternatives --config editor

There are 10 alternatives which provide `editor'.

Selection Alternative
-----------------------------------------------
1 /usr/bin/rjoe
2 /bin/ed
3 /usr/bin/nvi
4 /usr/bin/jpico
5 /usr/bin/mcedit-debian
*+ 6 /usr/bin/joe
7 /usr/bin/jmacs
8 /usr/bin/jstar
9 /usr/bin/vim.basic
10 /usr/bin/jed

Press enter to keep the default[*], or type selection number:

Još samo jedno upozorenje za svaki slučaj: ako se s vidir poslužimo bez puno eksperimentiranja i nepotrebnog "igranja", vidjet ćemo da je to zbilja koristan alat, u protivnom bi mogli.ostati bez poneke datoteke.

 

  • Logirajte [1] se za dodavanje komentara
pon, 2009-04-20 11:58 - Luka Ćavara
Kuharice: 
Linux [7]
Za sistemce [3]
Vote: 
0
No votes yet

Naredbe za koje (možda) niste znali 9: file

Naredba file(1) je jedna od korisnijih naredbi za brzo utvrđivanje tipa datoteke. Unix sustavi, uključujući i Linux, nemaju posebne ekstenzije za datoteke koji bi određivali tip datoteke (.txt, .doc). Kako bi bez otvaranja datoteke u nekom editoru (koji inače služe samo za pregled tekstualnih datoteka) saznali o kakavoj se datoteci radi, možemo se poslužiti naredbom file:

$ file /bin/ps
/bin/ps: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for
GNU/Linux 2.2.0, dynamically linked (uses shared libs), stripped

Saznali smo da je datoteka /bin/ps 32-bitna izvršna binarna datoteka, kompatibilna sa x86 arhitekturo. Dodatno, program rabi dinamične biblioteke (DLL-ove), te su iz nje maknuti svi simboli iz kompiliranog koda (programeri će znati o čemu je riječ, a za ostale je dovoljno reći da je stripana datoteka znatno manja, a nema bez gubitka funkcionalnosti).

$ file /boot/sid.bmp
/boot/sid.bmp: PC bitmap data, Windows 3.x format, 640 x 480 x 4

Datoteka sid.bmp je obična sličica u Bitmap formatu, a odmah su dane i dimenzije, kao i dubina boja (2^4 = 16 boja).

$ file /etc/motd
/etc/motd: ASCII English text

Datoteka /etc/motd je, očekivano,obična tektualna datoteka (svi znakovi su ispod ASCII 127). Detekcija jezika, isto tako, nije savršena, pa se u nju nemojte pouzdati.

$ file /dev/sda2
/dev/sda2: block special (8/2)

Naredba file može detektirati i datoteke koje to zapravo nisu. Ovdje smo testirali datoteku koja predstavlja drugu particiju na prvom disku, a rezultat je očekivan: riječ je o posebnoj block-oriented [11]datoteci, kao što su to svi diskovi. Brojevi u zagradi znače koji su major i minor brojevi te posebne datoteke. Za ilustraciju, pogledajte i rezultat za trakovni uređaj:

$ file /dev/st0
/dev/st0: character special (9/0)

Traka je, naravno, character-based [12] uređaj, što naredba file uredno detektira.

Dakle, naredba file pokušava što opširnije opisati o kakvoj je datoteci riječ. To pokušava na tri načina: putem datotečnog sustava i sistemskog poziva stat(2), "magičnih" brojeva i na kraju pregledom sadržaja datoteke. Magični broj se nalazi u gotovo svakoj binarnoj datoteci, približno na početku. Popis ovih magičnih brojeva se nalazi u direktoriju /usr/share/misc/file/ u nekoliko datoteka, koje ne trebate nikad dirati jer se periodično osvježavaju u novim inačicama paketa.

Ukoliko tip datoteke nije prepoznat, možete sami upisati magični broj, ali u datoteku /etc/magic. Format upisa možete saznati sa "man magic".

  • Logirajte [1] se za dodavanje komentara
uto, 2009-04-28 11:02 - Željko Boroš
Kuharice: 
Linux [7]
Kategorije: 
Software [10]
Vote: 
0
No votes yet

Naredbe za koje (možda) niste znali 10: diff, diff3, comm, cmp

Naredba diff je jedna od onih naredbi za koje nismo bili sigurni jesu li uopće pogodni za kategoriju "naredbe za koje niste znali". No, ako uzmemo u obzir da je jedan dio sistemaca uopće ne rabi, a drugi dio ne rabi sve mogućnosti, ipak je zaslužila svoje mjesto unutar ove kategorije.

Ukratko rečeno, naredba diff pokazuje razlike između dvije datoteke. Primjera radi, recimo da imamo dvije datoteke sljedećeg sadržaja:

datoteka1:      datoteka2:
aaaaaaaaa       bbbbbbbbb
bbbbbbbbb       cccccccc
cccccccccc       ddddddddd

Pogledajmo što će biti kada upogonimo naredbu diff (datoteka1 se smatra "starom", a datoteka2 "novom"):

$ diff datoteka1 datoteka2
1d0
< aaaaaaaaa
3a3
> ddddddddd

Ovo je takozvani "normalni" izlaz naredbe diff. Oznake "manje od" i "veće od" označavaju o kojoj se datoteci radi. Cijeli ispis je zamišljen tako da opisuje što treba napraviti da "stara" datoteka postane "nova". Oznake iznad linija opisuju promjene koje treba napraviti: a (add) je novododana linija, d (deleted) je obrisana linija, a c (changed) je promijenjena linija. Brojevi označavaju redni broj linije, s time da je broj koji se nalazi ispred slova broj linije u staroj datoteci, a broj iza slova broj linije u novoj datoteci.

Protumačimo te oznake:

- u staroj datoteci prva linija je "aaaaaaaaa", koju treba obrisati (stoga stoji nula u novoj datoteci)
- u staru datoteku na treću poziciju treba dodati "ddddddddd", koja je na trećoj poziciji i u novoj datoteci

Linije koje su zajedničke objema datotekama se po defaultu ne ispisuju.

No, format koji se najviše rabi nije ovaj, normalni, nego kontekstualni. Kod je najbitnija činjenica to da ne rabi brojeve linija, nego promjene smješta u kontekst originalne datoteke. Ovo postiže tako da uključi nekoliko nepromijenjenih linija na početku i na kraju promjena (obično 3 linije). Tako se kreiraju tzv. hunkovi ili chunkovi, dijelovi promjena nad istom
datotekom. Ovakav način je efikasniji od uobičajenog, te je datoteka manja nego drugi formati (naziva se "patch" datoteka).

Ovakav izlaz možemo dobiti s opcijom -c (od "context"), no puno je uobičajeniji "unified context" format, kojeg dobijemo s opcijom -u. Upravo ovakav ispis daje Debianov paketni sustav, kad odaberete opciju "D" kada vas sustava pita želite li zadržati staru ili prihvatiti originalnu konfiguracijsku datoteku paketa. Ovo je ujedno i glavni razlog zašto inzistiramo na unified formatu, i zašto uopće spominjemo naredbu diff.

Najlakše je to razumjeti na primjeru:

--- /var/ossec/etc/ossec.conf   2008-09-24 16:50:26.000000000 +0200
+++ /var/ossec/etc/ossec.conf.dpkg-new  2009-05-24 14:57:40.000000000 +0200
@@ -1,13 +1,11 @@
<ossec_config>
<global>
<email_notification>yes</email_notification>
- <email_to>root@os.carnet.hr</email_to>
+ <email_to>root@localhost</email_to>
<smtp_server>127.0.0.1</smtp_server>
- <email_from>ossecm@os.carnet.hr</email_from>
- <stats>0</stats>
+ <email_from>ossecm@localhost</email_from>
</global>

@@ <sljedeći chunk> @@

Prve dvije linije su gotovo identične, a najbitnija je razlika ta što je originalna datoteka označena s "---", a nova s "+++". Sljedeća oznaka je "@@ -1,13 +1,11 @@". Ovo označava da počinje chunk, te koliko linija obuhvaća. Dvostruki @ simboli su samo oznaka početka i kraja informacija o chunku. Prva skupina brojeva, označena minusom, se odnosi na originalnu datoteku, te označava početak i na koliko linija se odnose promjene (počinje od prve linije, i završava s trinaestom). Ista formula se primjenjuje na novu datoteku, konkretno promjena počinje s prvom linijom, i završava s jedanaestom.

Sam chunk je označen na jedan od tri načina: bez oznake, sa znakom "+" ili sa znakom "-". Slično kao i prije, ukoliko linija nema oznaku, znači da nema ni promjene. Ukoliko je označena sa "+", znači da se ta linija dodaje i suprotno, ukoliko je označena sa "-", ta linija se briše. Vratimo se originalnom primjeru:

# diff -u datoteka1 datoteka2
--- datoteka1   2009-05-25 22:19:02.000000000 +0200
+++ datoteka2   2009-05-25 22:19:20.000000000 +0200
@@ -1,3 +1,3 @@
-aaaaaaaaa
bbbbbbbbb
ccccccccc
+ddddddddd

Na ovom primjeru možemo vidjeti da se promjene u obje datoteke provode na prve tri linije, da se linija "aaaaaaaaa" mora obrisati, a linija "ddddddddd" dodati kako bi se od stare napravila nova datoteka.

To nije sve, diff može uspoređivati i direktorije. Kreirali smo direktorije (analogno sadržaju datoteka):

# ls -l dir1 dir2
d1:
total 0
-rw-r--r-- 1 user users 0 May 27 22:39 aaaaaaaaa
-rw-r--r-- 1 user users 0 May 27 22:39 bbbbbbbbb
-rw-r--r-- 1 user users 0 May 27 22:39 ccccccccc

d2:
total 0
-rw-r--r-- 1 user users 0 May 27 22:39 bbbbbbbbb
-rw-r--r-- 1 user users 0 May 27 22:39 ccccccccc
-rw-r--r-- 1 user users 0 May 27 22:39 ddddddddd
# diff d1 d2
Only in d1: aaaaaaaaa
Only in d2: ddddddddd

Rezultat ove naredbe je, nadamo se, svakome jasan.

Kao kuriozitet, moramo spomenuti i naredbu diff3. Ako iz imena nije jasno, diff3 uspoređuje i ispisuje razlike u čak tri datoteke. Ukoliko se pitate čemu to može poslužiti, reći ćemo da je glavna namjena diff3 ujedinjavanje promjena (merge) koje su dvije osobe napravile nad istom datotekom (npr. neki izvorni kod). Kako ovo već ulazi u područje raznih softvera za nadzor revizija, vjerojatno ćete takvo nešto i rabiti umjesto diff3.

Ipak, ako trebate istodobnu usporedbu tri datoteke, sada znate da i to možete. Ograničit ćemo se, doduše, samo na ispis naredbe diff3, a tumačenje ostavljamo za domaću zadaću (pametniji će odmah pokrenuti man diff3):

# diff3 datoteka1 datoteka2 datoteka3
====
1:1,2c
aaaaaaaaa
bbbbbbbbb
2:1c
bbbbbbbbb
3:0a
====
1:3a
2:3c
ddddddddd
3:2,3c
ddddddddd
eeeeeeeee

Za usporedbu datoteka imamo na raspolaganju još kandidata. Osim moćne naredbe diff, postoje još dvije naredbe koje ćete moći upotrijebiti u svakodnevnom radu. Prva od njih je comm.

Comm je nešto skromnijih mogućnosti, i rabi se najviše u skriptama, ali i za brzi vizualni pregled razlika između datoteka. I izlaz ove naredbe je zanimljiv:

# comm datoteka1 datoteka2
aaaaaaaaa
                bbbbbbbbb
                ccccccccc
        ddddddddd

Izlaz naredbe je u tri stupca. U prvom stupcu se nalaze linije jedinstvene za datoteku 1. Srednji stupac sadržava linije jedinstvene za datoteku 2. I na kraju, zadnji stupac sadržava linije koju su zajedničke za obje datoteke. Bilo koji od ovih stupaca se može isključiti, ukoliko tako želite (upotrijebite opcije -1, -2 i -3).

To je uglavnom sve što ova naredba nudi. Na kraju, spomenut ćemo naredbu cmp. Ona je naprikladnija za uporabu u skriptama, dok za vizualni nije previše upotrebljiva. Radi na principu uspoređivanja bajt po bajt:

# cmp datoteka1 datoteka2
datoteka1 datoteka2 differ: char 1, line 1

Dakle, prijavio je da se datoteke razliku odmah u prvom bajtu, što nam i nije neka velika pomoć. No, zato ćemo promatrati njezinu izlaznu vrijednost, kako bismo je mogli upotrijebiti u skriptama:

# cmp -s datoteka1 datoteka2 ; echo $?
1

Dakle, naredili smo da cmp ne ispisuje ništa (preko opcije -s, silent), a zatim smo samo provjerili izlaznu vrijednost. Izlazna vrijednost je 1 ako se datoteke razlikuju, a 0 ako su identične (i 3 ako je došlo do nekakve greške). To se lako može iskoristiti u skriptama, navest ćemo primjer uporabe:

if `cmp -s datoteka1 datoteka1` ; then
        echo "Izlaz je 0, datoteke se ne razlikuju"
fi

To je bilo sve što smo predvidjeli napisati za ove naredbe, na vama je sad da gore opisane naredbe upotrijebite na (vama) koristan način. U sljedećem dijelu opisat ćemo naredbe komplementarne ovima: patch i merge.

  • Logirajte [1] se za dodavanje komentara
sri, 2009-05-27 23:56 - Željko Boroš
Kuharice: 
Linux [7]
Kategorije: 
Software [10]
Vote: 
5
Vaša ocjena: Nema Average: 5 (1 vote)

Naredbe za koje (možda) niste znali 11: deborphan

Kao i svi operativni sustavi, tako i linux s vremenom nakuplja sve više nepotrebnog softvera, što nakon nekog vremena počinje produljivati razne uobičajene operacije na računalu (npr. backup), i jednostavno nepotrebno zauzimati prostor na disku. Ovo nije problem operativnog sustava, nego operatera, a to ste vi.

Svaki program, odnosno paket, koji instalirate na Debian, zahtijeva dodatne biblioteke (Windowsaši bi rekli DLL-ove). Neki su skromni, i ne treba im ništa drugo osim osnovne (g)libc biblioteke. Neki, posebice programi pisani u interpretiranim jezicima poput perla, zahtijevaju instalaciju 5, 10 pa čak i više dodatnih paketa kako bi mogao funkcionirati. Sve je to lijepo, ali suprotno se ne događa: ukoliko maknete neki takav program, neće automatski biti maknuti i svi drugi paketi na koje se taj paket oslanja (Depends). Primjerice:

# apt-get install paket
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
paket-client paket-doc
The following NEW packages will be installed:
paket paket-client paket-doc

Nakon nekog vremena shvatite da taj program ne radi ono što želite, i kao svaki savjestan sistemac, obrišete ga sa sustava:

# dpkg -P paket

To će obrisati paket 'paket', ali će nezainteresirano ostaviti paket-client i paket-doc na sustavu. To pomnožite s godinama i u nekoliko se godina može nakupiti nekoliko desetaka takvih paketa, što više nije zanemariv broj (niti prostor na disku, odnosno traci).

U pomoć priskače mali program deborphan. On će nakon pokretanja provjeriti sve pakete o kojima više ne ovisi ni jedan drugi paket. Kako je sasvim realno da imate pakete o kojima nitko ne ovisi, a svejedno vam trebaju, deborphan će selekciju napraviti nadasve oprezno. Da vidimo kako:

# deborphan
libdb1-compat
libdb3
libdb4.0
libdevmapper1.01
libfam0c102
libgcj4-common
libgd-gif1
libgd1
libgd2

Ovo je skraćeni ispis, što znači da je nepotrebnih paketa moguće imati znatno više. Pažljiviji će čitatelji uočiti da se radi isključivo o paketima biblioteka (i to najčešće u više inačica). Ovo je razumljivo, jer ako ni jedan paket ne treba određenu biblioteku, što će ona više na sustavu? Osim u posebnim slučajevima, ili ste developer (a tada vam trebaju i -dev paketi), ovi se paketi bez imalo grižnje savjesti mogu obrisati:

# deborphan | xargs dpkg -P
(Reading database ... 78694 files and directories currently installed.)
Removing libttf2 ...
Purging configuration files for libttf2 ...
Removing libpq3 ...
Removing libdb1-compat ...
Purging configuration files for libdb1-compat ...
Removing libparted1.6-0 ...
...

Kako biblioteke mogu ovisiti o drugim bibliotekama, moguće je da će se brisanjem jedne biblioteke, kao "siroče" (orphan) pojaviti neka druga biblioteka! Rješenje je jednostavno, nakon brisanja provjerite je li se pojavilo što novo, i ponovite postupak sve dok naredba deborphan nema ništa više za prijaviti:

# deborphan
#

Dakako, to nije sve. Deborphan podrazumijevano prikazuje samo pakete biblioteka, no s opcijom -a prikazuje baš sve pakete o kojima nitko ne ovisi. Ukoliko niste sigurni u to što radite, ovdje se zaustavite.

Postoje mnogi paketi koji ne ovise o nikome, osim o osnovnim bibliotekama sustava. Dakle, ukoliko niste zaista sigurni da vam taj program/paket ne treba, nemojte ga brisati.

Ukoliko ipak želite dodatno očistiti sustav, imate na raspolaganju opciju --guess. Ona će pokušati ograničiti potragu na određene dijelove Debian paketnih sekcija, poput dev, doc, data ili dbg (naravno, podržane su i druge sekcije, što možete vidjeti sa man deborphan).

Pretpostavit ćemo da niste developer, pa vam ne trebaju -dev paketi:

# deborphan --guess-dev
tcl8.3-dev
slang1-dev

Dakle, iako nisu biblioteke, izolirali smo još neke pakete o kojima nijedan drugi paket ne ovisi, niti vama trebaju, pa ih možemo obrisati. Slično je i sa -doc paketima, jer dokumentaciju uvijek možete naći na webu, a i ostaju vam man stranice (one ne dolaze u -doc paketima, koji su dodatna dokumentacija u primjerice HTML-u ili PDF-u). Dakako, ovo sve ovisi o vama i vašim potrebama.

Paket deborphan je samostalan paket, obično se ne nalazi na sustavu i potrebno ga je instalirati sa:

# apt-get install deborphan
  • Logirajte [1] se za dodavanje komentara
pet, 2009-05-29 08:06 - Željko Boroš
Kuharice: 
Linux [7]
Kategorije: 
Software [10]
Vote: 
5
Vaša ocjena: Nema Average: 5 (1 vote)

Naredbe za koje (možda) niste znali 12: touch

Naredbu touch ste vjerojatno vidjeli u nekim skriptama, ali vas nije zanimalo što radi (ili vam jednostavno nije bilo jasno što bi ta naredba trebala raditi). Naredba touch ima, ukratko rečeno, dvije funkcije: može kreirati praznu datoteku, ili promijeniti vrijeme kreiranja bilo koje datoteke. Za što nam ta funkcionalnost uopće treba?

Kreiranje prazne datoteke ćemo najčešće rabiti kada neki program zahtijeva da određena datoteka već postoji, makar bila prazna. Tipičan primjer su daemoni, koji se često uopće neće pokrenuti, ili neće ništa zapisivati u svoje logove ukoliko njihova vlastita log datoteka ne postoji. Tada ćemo jednostavno kreirati log datoteku sa:

debian# touch datoteka.log
debian# ls -l
-rw-r--r-- 1 root root 0 Mar 23 12:56 datoteka.log

U ovakvim slučajevima će možda biti potrebno promijeniti i vlasništvo nad datotekom pomoću naredbe chown i chgrp. Moguće je odmah kreirati i više datoteka:

debian# touch datoteka1 datoteka2 datoteka3...

Drugi razlog zašto bi htjeli kreirati praznu datoteku se može naći u skriptama, koje na ovaj način kreiraju vremenske referentne datoteke (timestamp datoteke). Na ovaj način skripta može provjeriti, primjerice, koliko dugo se izvršava, može preživjeti restart poslužitelja ili vlastito "rušenje", što nije slučaj s internim načinom računanja vremenskih perioda.

Vrijeme kreirane datoteke možemo, osim s naredbom ls, provjeriti pomoću naredbe stat.

U slučaju potrebe, moguće je promijeniti originalne podatke o vremenu kreiranja datoteke:

debian# touch datoteka.log
debian# ls -l datoteka.log
-rw-r--r-- 1 root root 0 Mar 23 13:17 datoteka.log

Kao što se može vidjeti, vrijeme je promijenjeno na vrijeme koje je bilo u trenutku izvršavanja naredbe. No, vrijeme se može postaviti na proizvoljnu vrijednost:

debian# touch -t 200012312359.59 datoteka.log
debian# ls -l datoteka.log
-rw-r--r-- 1 root root 0 Dec 31 2000 datoteka.log

Datum smo postavili na 31. prosinca 2000, a vrijeme točno u 23 sata, 59 minuta i 59 sekundi. Format upisa vremena je [[CC]YY]MMDDhhmm[.ss], dakle moguće je rabiti samo kraći oblik mjesec:dan:sat:sekunda.

Također, možemo selektivno odabrati koje ćemo vrijeme mijenjati, sa opcijom -a mijenjamo samo ATIME (access time, ako je omogućen na particiji), a s opcijom -m mijenjamo samo MTIME (modification time):

debian# touch -a datoteka.log
debian# ls -lu datoteka.log
-rw-r--r-- 1 root root 0 Mar 23 13:48 datoteka.log
debian# ls -l datoteka.log
-rw-r--r-- 1 root root 0 Dec 31 2000 datoteka.log

Promijenili smo samo vrijeme pristupa datoteci (ATIME možemo vidjeti s naredbom ls -lu, dok je MTIME vidljiv već sa standardnim ls -l). Promijenimo sada samo MTIME vrijeme:

debian# touch -m datoteka.log
debian# ls -lu datoteka.log
-rw-r--r-- 1 root root 0 Mar 23 13:48 datoteka.log
debian# ls -l datoteka.log
-rw-r--r-- 1 root root 0 Mar 23 13:50 datoteka.log

Možemo vidjeti da je sada MTIME vrijeme kasnije od ATIME vremena.

Naredba touch omogućava da novo vrijeme datoteke postavite po već postojećoj datoteci, primjerice:

debian# ls -l /etc/hosts
-rw-r--r-- 1 root root 628 Mar 19 2009 /etc/hosts
debian# touch -r /etc/hosts datoteka.log
debian# ls -l datoteka.log
-rw-r--r-- 1 root root 0 Mar 19 2009 datoteka.log

Opcijom -r smo postavili smo ATIME i MTIME po datoteci /etc/hosts (mogli smo naravno, odabrati bilo koju drugu datoteku).

Što se tiče naredbe touch, ovo bi bilo uglavnom sve, no spomenut ćemo još i opciju -d, koja će biti lakša korisnicima s engleskog govornog područja, jer prima drugačiji format datuma:

debian# touch -d "October 10 1999 10:10" datoteka.log
debian# ls -l datoteka.log
-rw-r--r-- 1 root root 0 Oct 10 1999 datoteka.log

Pretpostavljamo da će se većina vas ipak držati "čistog" numeričkog načina zadavanja formata datuma.

Naredba touch je dio paketa coreutils.

  • Logirajte [1] se za dodavanje komentara
uto, 2010-03-23 14:03 - Željko Boroš
Kuharice: 
Linux [7]
Kategorije: 
Software [10]
Vote: 
4
Vaša ocjena: Nema Average: 4 (1 vote)

Naredbe za koje (možda) niste znali 13: stat

Naredba stat nam omogućava dobijanje informacija o datotekama, kao što su veličina, vrijeme kreiranja, promjene i pristupa, inode broja i slično. Sve ovo možete saznati i preko naredbe ls, ali stat daje sve ove informacije odjednom, pa je u nekim situacijama prikladnija. Stat je, zapravo, prilagodba sistemskog poziva stat(), ali i funkcije koja se pojavljuje u većini programskih jezika.

Pogledajmo ispis naredbe stat, na istoj datoteci koju smo rabili u članku o naredbi touch [13]:

debian# stat datoteka.log
  File: 'datoteka.log'
  Size: 0        Blocks: 0   IO Block: 4096   regular empty  file
Device: 806h/2054d Inode: 30916  Links: 1
Access: (0644/-rw-r--r--)  Uid: (  0/  root)   Gid: (  0/  root)
Access: 1999-10-10 10:10:00.000000000 +0200
Modify: 1999-10-10 10:10:00.000000000 +0200
Change: 2010-03-23 14:02:42.000000000 +0100

Vidimo mnoštvo informacija, kao što je veličina (ovdje je 0, kao i broj blokova koji zauzima datoteka). Naredba prepoznaje veličinu 0, pa ispisuje "regular empty file", inače bi riječ "empty" bila izostavljena.

Nadalje, ispisuju nam se podaci o uređaju u heksadecimalnom obliku, te inode broj. Inode je broj jedinstven za svaku datoteku i direktorij na datotečnom sustavu. Vrijednost "Links" označava koliko hard linkova na tu datoteku postoji, a u ovom slučaju to je samo jedan - njen vlastiti. Simbolički linkovi se ne ubrajaju u ovu vrijednost.

Sljedeće što ćemo saznati su prava pristupa, u oktalnom i simboličkom obliku, kao i tko je vlasnik i grupa datoteke (opet, u numeričkom i simboličkom obliku).

Zadnje što ćemo saznati su vremena pristupa ("Access"), promjene ("Modify") i promjene inodea ("Change"). Drugim riječima, ATIME, CTIME i MTIME. Ovo zaslužuje malo pojašnjenja.

ATIME, ili "Access Time", je vrijeme zadnjeg pristupa datoteci. Ovo uključuje uređivanje i pregledavanje preko naredbi cat, less i sličnih, te promjenu atributa datoteke. Vrijeme zadnjeg pristupa možete vidjeti i preko naredbe ls, u obliku "ls -lu". Osvježavanje zadnjeg pristupa datoteci ponešto smanjuje performanse, a kako taj podatak obično nema neku vrijednost, sistem administratori znaju isključiti generiranje ovog zapisa kako bi dobili na performansama datotečnog sustava.

CTIME, ili "Change Time", nikako ne treba brkati s pojmom "Creation Time". Ovaj podatak na Unix/Linux sustavima zapravo ne možemo doznati. CTIME se odnosi na vrijeme promjene podataka u datoteci, ali i promjene na inode broju (ovo uključuje promjenu vlasnika ili prava pristupa preko chown/chmod naredbi). Vrijeme zadnje promjene možete vidjeti i preko naredbe ls, u obliku "ls -lc".

MTIME, ili "Modification Time", se mijenja kad se mijenja sadržaj datoteke. Ovo vrijeme je podrazumijevano kada rabite naredbu ls u proširenom obliku, "ls -l". Ovo je vjerojatno vrijednost koja vam je najzanimljivija.

Kako je preko primjera najlakše shvatiti sve gore izrečeno, navest ćemo tipične primjere iz prakse.

debian# stat datoteka.log
Access: 1999-10-10 10:10:00.000000000 +0200
debian# cat datoteka.log
debian# stat datoteka.log
Access: 2010-03-24 15:01:28.000000000 +0100

Vidimo da se promijenilo vrijeme zadnjeg pristupa datoteci (ATIME).

debian# chmod g+wx datoteka.log
Modify: 1999-10-10 10:10:00.000000000 +0200
Change: 2010-03-24 15:05:33.000000000 +0100

Ukoliko promjenimo prava pristupa, što automatski znači i promjenu pripadajućeg inodea, promijenili smo CTIME, ne i MTIME.

Promijenimo sada sadržaj same datoteke:

debian# echo "Sadrzaj" > datoteka.log
debian# stat datoteka.log
Modify: 2010-03-24 15:09:36.000000000 +0100
Change: 2010-03-24 15:09:36.000000000 +0100

Možemo vidjeti da se promijenilo i vrijeme CTIME i MTIME.

Stat prepoznaje i druge tipove datoteka, kao što su direktoriji, socketi, linkovi i tako dalje, te će tu informaciju i ispisati:

debian# stat /dev/null
  File: '/dev/null'
  Size: 0    Blocks: 0  IO Block: 4096  character  special file
Device: dh/13d  Inode: 97777566   Links: 1   Device type: 1,3
. . .

Vidimo da je stat ispravno prepoznao datoteku /dev/null kao "character special file".

Moguće je dobiti informacije o datotečnom sustavu, umjesto o pojedinoj datoteci. Za to ćemo upotrijebiti opciju "-f":

debian# stat -f /
File: "/"
    ID: f72aeed7c2b49bfd Namelen: 255   Type: ext2/ext3
Block size: 1024       Fundamental block size: 1024
Blocks: Total: 248895     Free: 118437     Available: 105585
Inodes: Total: 64512      Free: 51266

Na kraju, ispis naredbe stat je moguće prilagoditi svojim potrebama, što je zgodno za pisanje skripti. Primjer:

debian# stat --format "%a %A" datoteka.log
674 -rw-rwxr--

Naredbi stat smo rekli da ispiše samo prava pristupa datoteci, i to prvo u oktalnom zapisu, a potom i simboličkom. Što možete sve koristiti kao format pročitajte u man stranici, jer je opcija zaista mnogo.

Napomena: u vašoj ljusci (shellu) može postojati ugrađena naredba stat, pa provjerite o kojoj naredbi se točno radi (zsh ljuska ima svoju inačicu u vidu dodatnog modula).

Stat je dio paketa coreutils.

  • Logirajte [1] se za dodavanje komentara
čet, 2010-03-25 13:16 - Željko Boroš
Kuharice: 
Linux [7]
Kategorije: 
Software [10]
Vote: 
0
No votes yet

Naredbe za koje (možda) niste znali 14: mktemp

Naredba mktemp nam može pomoći najviše kad se rabi u skriptama koje sistem inženjeri pišu kako bi automatizirali održavanje sustava i tako si olakšali posao. Naredba mktemp nema puno opcija, a zadatak joj je jednostavan, ali vrlo važan: kreirati privremenu datoteku, koju će teško biti predvidjeti. Zašto je ovo bitno?

Zamislimo sljedeću situaciju. Vaša skripta mora kreirati privremenu datoteku u /tmp direktoriju, a izvršava se (primjerice) iz crona i pod ovlastima root korisnika. Ime datoteke je /tmp/poruka.txt.

Znajući ove činjenice, napadač (koji nema nikakvih povišenih privilegija!) može napraviti ovo:

$ ln -s /etc/passwd poruka.txt
$ ls -l poruka.txt
lrwxrwxrwx 1 baduser users 6 Mar 29 11:17 poruka.txt -> /etc/passwd

Dakle, napravio je simbolički link "poruka.txt", koji pokazuje na ključnu datoteku sustava, i u koju ne može ništa pisati niti brisati. Provjerimo:

debian# ls -l /etc/passwd /etc/passwd
-rw-r--r-- 1 root root 2856 Mar 13 10:08 /etc/passwd

Dakle, korisnik nema pravo pisanja u datoteku. Sada, kada se vaša skripta pokrene (pod ovlastima root korisnika), događaju se zanimljive stvari. Simulirat ćemo pokretanje skripte i sami zapisati nešto u datoteku /tmp/poruka.txt.

debian# echo "nema vise usera" > /tmp/poruka.txt
debian# ls -l /etc/passwd
-rw-r--r-- 1 root root 16 Mar 29 11:22 /etc/passwd
debian# cat /etc/passwd
nema vise usera
debian#

Dakle, uz određene preduvjete, bilo koji korisnik može efikasno omesti rad poslužitelja, a i počiniti znatnu štetu! Nemojte se tješiti dvojbenom činjenicom da "korisnik ne zna točno ime privremene datoteke" ili da "svoje skripte ne pokrećete kao root korisnik", nego jednostavno izbjegnite ovakvo nesigurno kreiranje datoteka.

Ovdje će vam pomoći naredba mktemp. Ona se najčešće pokreće ovako:

$mktemp /tmp/tmp-XXXXXXX
/tmp/tmp-IFujQHR
$ mktemp /tmp/tmp-XXXXXXX
/tmp/tmp-mMcKVHz

(pokrenuta je dvaput da se može vidjeti da je ime svaki put drugačije)

Naredba prima predložak po kojemu će generirati ime, što označavamo sa velikim slovom "X". Taj dio imena će biti slučajni dio, ali možete navesti i fiksni dio ("tmp-"). Mktemp će tom predlošku kreirati praznu datoteku, te ispisati njeno ime. Kako postoji (mala) šansa da već postoji takva datoteka, najčešća uporaba naredbe mktemp u skriptama je:

 TMPFILE=`mktemp /tmp/example.XXXXXXXXXX` || exit 1
echo "neki tekst" >> $TMPFILE

Dakle, u varijablu $TMPFILE stavljamo ime novostvorene datoteke, te u nju pomoću naredbe "echo" upisujemo koji god tekst želimo. S privremenom datotekom dalje možemo raditi što god nam je volja, ali nemojte je zaboraviti obrisati na kraju (želimo čist sustav, zar ne?).

Ukoliko vas zanima što predstavlja "|| exit 1", objasnit ćemo i to. U slučaju da iz nekog razloga naredba mktemp ne uspije kreirati datoteku, skripta će završiti izvršavanje uz izlazni kod (exit code) "1".

Na Unix i sličnim sustavima izlazni kôd uspješno obavljene operacije je uvijek "0", dok svi izlazni kodovi različiti od nule znače neuspjeh.

Nešto više o naredbi mktemp možete pročitati u njenoj man stranici, iako naredba ne podržava previše opcija.

  • Logirajte [1] se za dodavanje komentara
pon, 2010-03-29 11:49 - Željko Boroš
Kuharice: 
Linux [7]
Kategorije: 
Software [10]
Vote: 
5
Vaša ocjena: Nema Average: 5 (1 vote)

Naredbe za koje (možda) niste znali 15: pwgen

Zaporke su i u ovo vrijeme biometrijskih načina autentikacije nezamjenjive u bilo kojem računalnom sustavu. Iz ovog razloga nužno je odabrati za sebe i svoje korisnike dovoljno sigurne, ali i pamtljive zaporke. Nažalost, ukoliko korisnicima prepustimo da sami odabiru zaporke, to će najčešće biti imena ljubimaca, bliže rodbine ili nešto slično, što je podložno napadu socijalnim inženjeringom. Također, često će rabiti pojmove koji se nalaze u raznim rječnicima, primjerice "firefly1" ili slično, što bilo koji program za razbijanje zaporki pronalazi u nekoliko sekundi.

S druge strane, ukoliko korisnicima definirate preteške zaporke, oni će ih negdje zapisati - tipčan slučaj je post-it listić zalijepljen na monitoru ili ispod tipkovnice. Dakle, što nam preostaje? Pa, možemo probati generirati sigurne zaporke, koje će korisnici na neki način ipak moći zapamtiti. Najčešći alat za to je naredba pwgen.

Pwgen će generirati zaporke od 8 znakova, ali manje-više po slogovima, tako da ih je moguće izgovoriti. Točnije, mogu ih lakše izgovoriti korisnici s engleskog govornog područja, nego korisnici s drugih govornih područja. No, i ovako ćete pokretanjem naredbe dobiti popunjen cijeli ekran, pa možete odabrati zaporku koja je i nama najlakša za zapamtiti:

$ pwgen
Aip0Is1i ahDio4ce caeS6zuf Ej3shoox OhG4Aeco poMe0she
nieyo7uP gi5Wilie AZeexae9 eepaiS3e ohPah7ae Seeje2se
eeth0Ahn Veet4IeN Thee6ke8 uNgeeng9 ree5Zaew nei2ahTu
Yee4aeJi eePhaiW2 nael2oL7 aGhaiZ4F Quiep2Ae kah8Xae5
Omae7usa Wuz7uh2s Rie3iYoL cohRoo1G IeD2ahsh xah1Ceis
...

Recimo, kandidati za dobru zaporku bi mogli biti nizovi "Seeje2se", "poMe0she" ili "Omae7usa". Ukoliko ne nađete ništa lako za zapamtiti, jednostavno pokrenite naredbu ponovo i novi ekran s mnoštvom drugih zanimljivih zaporki je tu.

Način na koji naredba pwgen radi je moguće promijenti s nekoliko opcija. Navest ćemo, kao i uvijek, najzanimljivije.

Ukoliko želimo jako sigurne zaporke, možemo upotrijebiti opciju "--secure":

$ pwgen --secure
nNn7n7Qi bK9qEJTS U17d9Vea 33ZrDTPx Y5145oVJ jI7coWHa

Opcija će generirati u potpunosti slučajne zaporke, pa možete očekivati da će ih korisnici negdje zapisati. Ova opcija je stoga najkorisnija kada generirate zaporke za root korisnika ili korisnika pod kojim će se neki servis vrtiti pa nije bitna kompleksnost zaporke (dapače, poželjna je što sigurnija zaporka). Za još sigurnije zaporke dodajte i opciju "--symbols", koja će ispisati barem po jedan posebni znak u zaporci:

$ pwgen --secure --symbols
G@wl$7vz Ot|)1yF, Ztx3!X{O Dq6faL4= _Z,2(lj} 9F;Tg_PU

U dijametralno suprotnoj situaciji, moguće je generirati nesigurnije, ali pamtljivije zaporke s opcijama "--no-capitalize" i "--no-numerals":

$ pwgen --no-capitalize --no-numerals
nebeokal tongoqua upaoquur fieshahx eeceepha leimivem

Opcija "--no-capitalize" isključuje ispis velikih slova, dok opcija "--no-numerals" isključuje ispis brojki. Tako dobivene zaporke je moguće, teoretski, lakše zapamtiti, no to ovisi o pojedincu.

Kada naredbu želimo rabiti u skriptama, ili jednostavno želimo samo ispis samo jedne zaporke po stupcu, rabit ćemo opciju "-1" i "--num-passwords=<broj>" (ili kraće "-N"):

$ pwgen -1 -N 3
Eelai4ue
Ief1thee
theeCee8

Ukoliko želimo zaista samo jednu zaporku, dovoljno je upisati:

$ pwgen -1
utie2OoH

Naredba pwgen nije jedini način za dobiti sigurne zaporke, a jedan od načina je rabiti naš on-line generator čitljivih zaporki [14], koji pokušava prilagoditi zaporke našem jeziku. No, nije ga moguće (na lak i pouzdan način) rabiti u skriptama, pa je dobro poznavati što pwgen može.

Sve ostale opcije i upute možete naći u standardnoj man stranici naredbe pwgen.

 

  • Logirajte [1] se za dodavanje komentara
čet, 2010-05-27 14:27 - Željko Boroš
Kuharice: 
Linux [7]
Kategorije: 
Software [10]
Vote: 
0
No votes yet

Naredbe za koje (možda) niste znali 16: less

Pa dobro, možda naredba iz naslova ovog članka i nije baš toliko nepoznata, ali jedna od njenih funkcionalnosti je ostala prikrivena za priličan broj korisnika. Na Debianu ova naredba dolazi u pratnji skripte lesspipe koja je u stvari glavna tema ovog članka.

Linux posjeduje priličan broj naredbi s kojima možete ispisati sadržaj datoteke. Naredbe cat i more su standardne naredbe u svim verzija linuxa i korisnici se u počecima rada u shellu naviknu na njih. I tako, po nekakvoj inerciji, korisnici uobičajeno za čitanje tekstualnih datoteka ostanu na korištenju naredbe more.

Less

"Less is more" je fraza koja osim u minimalizmu vrijedi i kod naredbe less. Nju na Debianu morate instalirati kao zaseban paket (apt-get install less). Korisnik vrlo brzo uvidi prednosti naredbe less. Osim što možete strelicama scrollati gore-dolje po datoteci koju čitate, možete pretraživati datoteku prema naprijed i prema nazad ili pak koristiti kratice poput SHIFT+g za doći do dna velike datoteke.

Primjer pretrage prema naprijed:

/patern

Pozicioniranje na 534 redak

:534

Što s .gz i .bz i ostalim netekstualnim datotekama?

Kako sysadmini uobičajeno pretražuju po velikim datotekama poput syslog ili mail.log, a pri rotaciji logova takve datoteke bivaju gzipirane, osim naredbe cat i more, korisnici brzo upoznaju naredbe zcat i zmore koje sa sobom donosi paket gzip. Naravno, da bi sve bilo na svom mjestu postoji i naredba zless koju možete koristiti na jednak način za čitanje gzipiranih datoteka.

Ali što ako biste u shellu željeli pročitati sadržaj primjerice pdf datoteke. Vrlo brzo biste primjetili da vam ni jedna od dosada navedenih naredbi ne pomaže. Osim ako u postupak ne uključite lesspipe, koji na debianu dolazi s naredbom less. Lesspipe i lessfile su ulazi preprocesori za naredbu less. U originalnoj verziji se ponašaju ponešto različito, ali na debianu je lessfile u stvari linkan na lesspipe.

Opciju lesspipe možete uključiti na više načina. Najjednostavniji je da u shellu unesete naredbu:

eval "$(lesspipe)"

ili da tu liniju jednostavno dodate u ~/.bashrc kako bi bila izvršena pri loginu.

Za početak, pokušajte sada naredbom less pročitati neku od gzipiranih datoteka, primjerice:

less /var/log/syslog.2.gz

Ukoliko imate instaliran neki od pdftotext konvertera, primjerice paket poppler-utils za squeeze ili paket xpdf-utils za lenny, primjetit ćete da

less datoteka.pdf

na ekran izlazi u prilično čitljivom formatu.

Slično vrijedi za .doc datoteke za čije čitanje morate imati instaliran catdoc paket.

Osim što ovom naredbom možete izlistati .iso, .rar, .tar.gz i gomilu drugih datoteka, možete pokušati u shellu izvršiti sljedeću naredbu:

less neka_slika.jpg

Naravno, ne možete očelivati da u shellu vidite sliku, ali morate priznati da je i ovdje ispis less naredbe prilično impresivan.

  • Logirajte [1] se za dodavanje komentara
pet, 2011-02-18 15:39 - Ljubomir Hrboka
Vijesti: 
Linux [2]
Kuharice: 
Za sistemce [3]
Vote: 
0
No votes yet

Naredbe za koje (možda) niste znali 17: xargs

Naredba "xargs" je jedna od onih za koju nikad niste čuli i nikad je niste rabili, ili je rabite stalno i to bez razmišljanja o dodatnim opcijama i mogućnostima. Ukratko, naredba xargs izvršava izlaz druge naredbe na način na koji vam to trenutno odgovara. Sličnu funkciju ima opcija "-exec" naredbe find, ali xargs je daleko fleksibilniji i jednostavniji za uporabu od često predugačkih konstrukcija naredbe find.

Naredbu xargs možete rabiti uz bilo koju naredbu koja ispisuje nešto na standardni izlaz, no najčešće se rabi baš uz naredbu find.

O naredbi find smo već napisali članak na adresi http://sistemac.carnet.hr/node/640 [15], a sve što smo tamo opisali možete povezati s xargs i učiniti s tim datotekama što vam u tom trenutku treba (kopirati ih, prebaciti, obrisati...).

Osnovna i najčešća uporaba je neka jednostavna operacija nad nekim skupom datoteka:

$ ls *.jpg | xargs rm

ili

$ find . -maxdepth 1 -name \*.jpg | xargs rm

Ovakva će kombinacija naredbi obrisati sve slike iz tekućeg direktorija. Zašto nismo upotrijebili jednostavno "rm *.jpg"? Ukoliko slika ima jako puno (tisuće), može se pojaviti greška "Argument list too long". Iako je ova greška danas rijetka, ipak se može pojaviti, a problem rješava kombinacija naredbi find i xargs.

I napomena, bez opcije "-maxdepth 1", find bi našao, a xargs s naredbom rm rekurzivno obrisao sve slike u direktorijima ispod trenutnog. Dakle, pripazite kod uporabe da ne biste obrisali nešto što niste htjeli. Iz tog razloga preporučujemo da rabite "| xargs echo rm" prije izvršavanja prave naredbe. Tako ćete moći vidjeti što će se dogoditi, i na vrijeme reagirati ukoliko rezultat nije ono što želite. Naredbu echo nakon zadovoljavajućeg rezultata jednostavno obrišite.

Još jedan čest slučaj uporabe naredbe xargs uključuje operacije nad datotekama koje imaju razmake ili specijalne karaktere u imenu. Rezultat bez dodatnih opcija neće biti ono što ste očekivali, jer će imena datoteka biti razlomljena na praznim mjestima:

$ touch datoteka.txt
$ touch "datoteka s razmacima u imenu.txt"
$ find *.txt
datoteka.txt
datoteka s razmacima u imenu.txt
$ find *.txt | xargs rm
rm: cannot remove `datoteka': No such file or directory
rm: cannot remove `s': No such file or directory
rm: cannot remove `razmacima': No such file or directory
rm: cannot remove `u': No such file or directory
rm: cannot remove `imenu.txt': No such file or directory
$ ls *.txt
datoteka s razmacima u imenu.txt

Vidimo da je datoteka datoteka.txt uredno obrisana, ali datoteka s razmacima u imenu nije. Da bi to izbjegli, upotrijebite sljedeće opcije:

$ find *.txt -print0 | xargs -0 rm
$ ls *.txt
ls: cannot access *.txt: No such file or directory

Opcije "-print0" i "-0" označavaju da se parametri ne lome na praznim mjestima ("whitespace", što je skupni naziv za space, tab i newline karaktere), nego se nazivi terminiraju karakterom NULL (ASCII kod 0, u programskim jezicima se označava sa "\0").

Opcija "-print0" naredbe find čini upravo to, i umjesto da svoj ispis terminira sa znakom novog retka, terminira ga sa znakom \0, što je upravo ono što xargs očekuje uz opciju "-0".

Povezano s ovim, pretpostavljeno je ponašanje naredbe xargs da argumente ispisuje u jednom retku:

$ cat datoteka.txt | xargs ping -c1
ping -c1 161.53.X.65 161.53.X.66 161.53.X.67 161.53.X.68

Jasno da ovakva naredbena linija ne pomaže puno, pa ćemo upotrijebiti opciju "-n". Ona ograničava ispis argumenata na određeni broj redaka, a mi ćemo upotrijebiti samo jedan redak, jer nam u ovom trenutku tako odgovara:

# cat datoteka.txt | xargs -n1 ping -c1
ping -c1 161.53.X.65
ping -c1 161.53.X.66
ping -c1 161.53.X.67
ping -c1 161.53.X.68

(Kraći i ispravniji zapis je zapravo xargs -n1 ping -c1 < datoteka.txt, rezultat je jednak).

Do sada smo argumente stavljali na kraj naredbenog retka, ali kako ćemo ubaciti argumente ispred nekog drugog argumenta? Tome služi opcija "-I" (koja automatski uključuje i opciju "-n1").

Opciju "-I" ćemo rabiti primjerice kod prebacivanja ili kopiranja svih datoteka u neki direktorij:

$ ls *.txt | xargs -I {} mv {} dir2

Opcija "-I" zapravo samo određuje koji će niz znakova biti "varijabla" gdje će se smještati ime trenutnog argumenta, no uobičajeno je za to rabiti "{}". Dodatno, ukoliko želimo da se na ekran ispisuje što se trenutno izvršava, upotrijebite opciju "-t":

$ cat datoteka.txt | xargs -t -I {} mv {} dir2
mv dat1 dir2
mv dat2 dir2
mv dat3 dir2
mv dat4 dir2

U datoteci datoteka.txt se nalazi popis datoteka koje treba prebaciti, no isto smo mogli postići naredbama ls, find, ili bilo kojim drugim koje generiraju nekakav popis. Na sličan način možete kopirati datoteke ili ih preimenovati.

Xargs se može rabiti i s interaktivnim naredbama. Ukoliko u datoteci popis.txt imate popis datoteka koje treba izmijeniti, omiljeni editor (vim, joe, pico...) možete pokrenuti i ovako:

$ xargs joe < popis.txt

Što se tiče sadržaja datoteka, ni ovdje nema prepreka:

$ find /etc -name \*.conf | xargs grep -i address

Gornjom kombinacijom naredbi pretražili smo cijeli /etc direktorij u potrazi za ključnom riječi "address".

Vjerujemo da smo opisali najzanimljivije načine uporabe naredbe xargs, a za dodatne primjere jednostavno pretražite web.

  • Logirajte [1] se za dodavanje komentara
uto, 2011-03-01 14:55 - Željko Boroš
Kuharice: 
Linux [7]
Kategorije: 
Software [10]
Vote: 
5
Vaša ocjena: Nema Average: 5 (1 vote)

Naredbe za koje (možda) niste znali 18: pwck, grpck, pwconv, grpconv

Za naredbama pwck i grpck nećete toliko često posezati, ukoliko je sa sustavom sve u redu, te dodajete i brišete korisnike uredno i na konzistentan način.  No, s vremenom se mogu pojaviti "fantomski" korisnici ili neki drugi problemi, koje ste nehotice prouzrokovali vi, ili je do toga došlo zbog nadogradnje sustava ili povrata podataka sa starijeg backupa.  Najčešće, problemi nastaju nakon ručnog prebacivanja podataka o korisnicima s jednog poslužitelja na drugi, kad je grešku najlakše napraviti.

Naredba pwck istovremeno provjerava datoteke /etc/passwd i /etc/shadow, a u njima provjerava broj polja (kojih mora biti 7), numeričke oznake korisnika i grupa, postoje li radni direktorij i korisnička ljuska (shell).  Također, provjerava se je li ime korisnika jedinstveno na sustavu, a dupli unosi će biti ponuđeni za brisanje.

Ukoliko pokrenete naredbu pwck bez ikakvih argumenata, dobit ćemo otprilike ovakav ispis:

# pwck
user lp: directory /var/spool/lpd does not exist
user 'nobody': directory '/nonexistent' does not exist
user 'darko': no group 1000
...
user peric: program /bin/zsh does not exist
user mduric: program /bin/zsh does not exist
no matching password file entry in /etc/shadow
add user 'mmarkov' in /etc/shadow? y
pwck: the files have been updated

Dakle, pwck je prijavio određene probleme s HOME direktorijima, grupama i korisnickim ljuskama.  Neke probleme možemo zanemariti, poput radnih direktorija sistemskih korisničkih računa, jer su neki i zamišljeni da nemaju radni direktorij (poput korisnika "nobody").  No, korisnik "darko" bi morao biti u nekoj grupi koja je ispravno definirana na sustavu, pa ćemo je dodati:

# ls -ld /home/darko
drwxr-xr-x 6 darko 1000 4096 Aug 23 2007 /home/darko
# grep 1000 /etc/group
# groupadd -g 1000 darko
# ls -ld /home/darko
drwxr-xr-x 6 darko darko 4096 Aug 23 2007 /home/darko

Dakle, korisnik "darko" je u grupi koja nije uvedena u /etc/group, što smo provjerili s naredbom grep. S naredbom groupadd dodali smo novu grupu "darko" i forsirali numeričku oznaku (GID) 1000. Nakon toga su sve datoteke korisnika darko "automagično" dobile i ime grupe. No, u vašem slučaju se možda radi o korisniku kojeg treba obrisati, pa postupite kako svaki pojedinačni slučaj zahtjeva.

Dakle, naredba pwck će pomoći u sređivanju datoteka /etc/passwd i /etc/shadow. Ukoliko ste sigurni da je datoteka /etc/passwd u potpunosti ispravna možete upotrijebiti naredbu pwconv, koja će sinkronizirati te dvije datoteke. Ali, s njom oprez, jer će obrisati svakog nepostojećeg korisnika u datoteci /etc/shadow , što u vašem slučaju može biti na stotine korisnika koji će ostati bez zaporke. Bolje je prije toga maksimalno raščistiti situaciju s naredbom pwck i grpck, a tako uostalom savjetuju i u pripadajućoj man stranici.

Nakon što smo popravili datoteke sa zaporkama, možemo pogledati ima li kakvih problema s datotekama koje čuvaju podatke o grupama, za što ćemo upotrijebiti ćemo naredbu grpck:

root@server:~# grpck
no matching group file entry in /etc/gshadow
add group 'ivan' in /etc/gshadow ?y
no matching group file entry in /etc/gshadow
add group 'petar' in /etc/gshadow ?y
grpck: the files have been updated

Datoteka /etc/gshadow bi trebala sadržavati enkriptirane zaporke za grupe, no to se rijetko rabi. U ovom slučaju možete odgovoriti potvrdno na sva pitanja, što će dodati grupe iz /etc/group u /etc/gshadow. No, neće sadržavati nikakve zaporke ukoliko ih ni prije niste rabili.

I u /etc/group mogu zaostati obrisani korisnici:

# grpck
group adm: no user petar
delete member 'petar'? y

U ovom slučaju, u grupi adm je zaostao obrisani korisnik "petar", pa taj unos možete obrisati (ili ponovo dodati korisnika, ukoliko je greškom bio obrisan). Mogu vam se javiti i ovakve poruke:

# grpck
'darko' is a member of the 'adm' group in /etc/group but not in /etc/gshadow

Sustav vam na ovaj način poručuje da /etc/group i /etc/gshadow nisu sinkronizirane, a najlakše rješenje je upotrijebiti naredbu grpconv:

# grpconv
# grpck
#

Sustav više nema "primjedbi", što se može vidjeti iz izlaza naredbe. Naredba grpconv pretvara sve unose iz /etc/group u sintaktički pravilne unose  za /etc/gshadow. Iz ovoga proizlazi da, isto kao u slučaju /etc/passwd, treba paziti na ispravnost datoteke /etc/group.

Naredbe  pwck i grpck imaju opciju "-r" (read-only), koja neće napraviti nikakve promjene na sustavu, ali će pokazati što ne valja. Također, obje imaju opciju "-s" s kojom postižemo sortiranje unosa u ovim datotekama po UID-u, odnosno GID-u.

Radi potpunosti, spomenut ćemo srodne naredbe pwunconv i grpunconv, koje će spojiti zaporke natrag iz /etc/shadow u /etc/passwd i iz /etc/gshadow u /etc/group. No, ne vjerujemo da ćete ovo ikada trebati napraviti.

Na kraju, ponovit ćemo tvrdnju s početka, ove dvije, odnosno četiri naredbe nećete često rabiti, ali u slučaju potrebe pomoći će vam da sustav osposobite u što kraćem vremenu.

 

  • Logirajte [1] se za dodavanje komentara
sri, 2011-03-23 13:12 - Željko Boroš
Kuharice: 
Linux [7]
Kategorije: 
Operacijski sustavi [8]
Vote: 
5
Vaša ocjena: Nema Average: 5 (1 vote)

Naredbe za koje (možda) niste znali 19: getent

Za dohvat podataka o korisnicima možemo, pored ostalih, rabiti naredbu getent. Ova naredba može dohvatiti i druge podatke, jer može čitati iz drugih "baza" na sustavu, poput baze hostova (/etc/hosts), servisa (/etc/services) ili grupa korisnika (/etc/group). Primjerice, ukoliko želite saznati informacije o korisniku iz baze /etc/passwd, pokrenut ćemo getent na ovaj način:

# getent passwd ivica
ivica:x:1001:100:Ivica Ivic:/home/ivica:/bin/bash

Grupe korisnika možemo saznati ovako:

# getent group users
users:x:100:

Ukoliko vas ovaj ispis podsjeća na običan ispis koji možete dobiti naredbom grep, u pravu ste, ali samo djelomično.  Naime, getent vadi podatke iz baza onako kako ih sustav vidi (konfiguracija se nalazi u datoteci /etc/nsswitch.conf).  Ovo konkretno znači da ćete dobiti podatke i iz LDAP baze, ukoliko ste na taj način konfigurirali sustav.  Slično je i za starije sustave, bazirane na NIS-u.

Ukoliko želimo ispisati cijelu bazu, jednostavno navedite bazu bez dodatnog parametra:

# getent hosts
127.0.0.1 localhost
161.53.x.5 host1
161.53.y.252 host2
193.198.x.26 host3
127.0.0.1 ip6-localhost ip6-loopback

U gornjem primjeru smo odmah demonstrirali kako dobiti podatke iz treće baze, popisa hostova koje ste unijeli u datoteku /etc/hosts.

Sljedeća baza je baza servisa, pa ukoliko želimo saznati na kojem portu sluša LDAP servis i njegova enkriptirana inačica, otkucat ćemo:

# getent services ldap
ldap                  389/tcp
# getent services ldaps
ldaps                 636/tcp

Ostale dvije baze su networks i protocols. Baza protokola nam nije previše zanimljiva, jer sadržava samo broj i alias protokola unutar TCP/IP zaglavlja, te je tako možda više zanimljivija programerima. Baza mreža sadržava bazu podataka o mrežama, koje se nalaze u datoteci /etc/networks, koju rabe naredbe netstat i route.

Zaključak je da je naredbu getent najbolje rabiti unutar skripti umjesto naredbe grep, jer je "vjerodostojnija" (neće ispisati ništa ukoliko korisnik ne postoji na sustavu).  Također, sigurnije ju je rabiti nego grep, jer uvijek vraća jedan rezultat, ili ga uopće ne vraća.

Ukoliko, u nekoj brzini, idemo rabiti naredbu grep, možemo dobiti više rezultata, primjerice "grep -i ivic /etc/passwd" će ispisati podatke korisnika "ivica", ali i bilo kojeg drugog korisnika kojem bilo koji podatak iz GECOS polja (primjerice prezime "Sljivic"), završava na "-ivic". Ovo je pogotovo nezgodno ukoliko getnet rabite u skripti, jer na jednom sustavu može raditi sasvim u redu, a na drugom (gdje ima više korisnika), neće raditi kako treba, što može napraviti i "štetu" na sustavu.

 

  • Logirajte [1] se za dodavanje komentara
uto, 2011-04-05 13:50 - Željko Boroš
Kuharice: 
Linux [7]
Kategorije: 
Operacijski sustavi [8]
Vote: 
0
No votes yet

Naredbe za koje (možda) niste znali 20: nethogs

Linux, a ranije i razni Unix sustavi, u osnovnoj instalaciji obično imaju sve alate za nadzor koji trebaju sistem inženjerima koji taj sustav održavaju.  No, s vremenom su neki alati prerasli u preglomazne programe, s gomilom opcija i kriptičnim ispisom. Neki su davno sazreli za promjene, ali toliko drugih stvari ovisi o njima, odnosno o njihovom ispisu, da bi se stvorilo daleko više problema nego bi ih se riješilo. Zato je nekada jednostavnije napisati novi alat koji radi samo jednu stvar, ali zato to radi dobro. Mislimo da je dobar primjer alat nethogs.

Nethogs, kako mu i ime kaže, prati mrežni promet po procesima i ispisuje one koji trenutno najviše "troše". Ispis je vrlo sličan ispisu programa top, pa razdoblja privikavanja nema:

# nethogs
NetHogs version 0.7.0

PID USER PROGRAM DEV SENT RECEIVED
21226 www-data /usr/sbin/apache2 eth0 295419.000 27133.000 B
21356 www-data /usr/sbin/apache2 eth0 384712.000 18850.000 B
20889 www-data /usr/sbin/apache2 eth0 84212.000 18814.000 B
20981 www-data /usr/sbin/apache2 eth0 237853.000 17379.000 B
21266 www-data /usr/sbin/apache2 eth0 279834.000 17042.000 B
20983 www-data /usr/sbin/apache2 eth0 272077.000 16632.000 B
21350 www-data /usr/sbin/apache2 eth0 249180.000 15932.000 B
20995 www-data /usr/sbin/apache2 eth0 258884.000 15216.000 B
21300 www-data /usr/sbin/apache2 eth0 85329.000 13486.000 B
21352 www-data /usr/sbin/apache2 eth0 209118.000 13212.000 B
21363 www-data /usr/sbin/apache2 eth0 176786.000 12448.000 B
0 root ..6.3:80-83.131.208.87:2198 86006.000 12333.000 B
0 root ...3:80-89.172.199.82:61240 87727.000 12125.000 B
21232 www-data /usr/sbin/apache2 eth0 362179.000 11674.000 B
21357 www-data /usr/sbin/apache2 eth0 95155.000 11226.000 B
21360 www-data /usr/sbin/apache2 eth0 71168.000 11055.000 B
21218 www-data /usr/sbin/apache2 eth0 32564.000 10064.000 B
21353 www-data /usr/sbin/apache2 eth0 69743.000 9793.000 B

U interaktivnom načinu rada program prima samo dvije opcije: "m" za promjenu jedinica iz bajtova u kilobajte i megabajte, te trenutnu brzinu koju proces postiže u mrežnom prometu:

  PID USER     PROGRAM                      DEV        SENT      RECEIVED
23254 www-data /usr/sbin/apache2 eth0 23.847 0.749 KB/sec

Druga opcija je "q", koja jednostavno služi za izlaz iz programa.

Ostale (malobrojne) opcije možete saznati preko opcije -h:

usage: nethogs [-V] [-b] [-d seconds] [-t] [-p] [device [device [device...]]]
-V : prints version.
-d : delay for update refresh rate in seconds. default is 1.
-t : tracemode.
-b : bughunt mode - implies tracemode.
-p : sniff in promiscious mode (not recommended).
device : device(s) to monitor. default is eth0
  • Logirajte [1] se za dodavanje komentara
čet, 2011-06-30 14:35 - Željko Boroš
Kuharice: 
Linux [7]
Kategorije: 
Operacijski sustavi [8]
Servisi [4]
Vote: 
5
Vaša ocjena: Nema Average: 5 (1 vote)

Naredbe za koje (možda) niste znali 21: multitail

Da logove na poslužitelju treba redovito pregledavati, zna svaki sistem-inženjer. Jednostavno, bez logova bi posao sistem-inženjera bio nemoguć. Iako imamo automatizirane programe (tipa logwatch, fail2ban ili OSSEC) koji nam pomažu u detekciji potencijalnih problema (poglavito sigurnosnih), neophodno je ponekad logove pogledati "uživo". Ovdje se možemo poslužiti programima tail i less, koji mogu pratiti logove onako kako se pune, ali imamo odličan alat za praćenje više logova odjednom - multitail.

Kao i programčić "nethogs [16]", kojeg smo opisali u prethodnom članku u ovoj seriji, tako i multitail slijedi jednostavnu logiku: raditi jednu stvar dobro, i ne zbunjivati korisnika bespotrebnim opcijama koje u većini slučajeva neće nikada rabiti.  Pokretanje programa je standardno, samo treba nakon imena naredbe treba navesti logove koje želimo pratiti:

# multitail /var/log/mail.log /var/log/daemon.log /var/log/apache2/access.log

Multitail radi preko vrlo poznatog ncurses sučelja za tekstualne terminale, što znači da ima sustav prozora koji pokušava postići dio funkcionalnosti klasičnih grafičkih GUI-ja. Nakon pokretanja, bit će prikazana tri prozora kao na slici:

U svakom od tri prozora bit će prikazano nekoliko zadnjih redova odabranih log datoteka. Multitail pokušava biti uslužan, pa može obojati određene dijelove logova drugom bojom, primjerice datum je označen plavom bojom, naizmjenično svjetlijom i tamnijom nijansom. U svakom trenutku možete dobiti pomoć ukoliko pritisnete kombinaciju tipki <CTRL+h>. U prozoru pomoći možete pregledati sve dostupne  naredbe sa standardnim Page Up i Page Down tipkama, a prozor gasite sa <CTRL+g>.

Ukoliko u nekom logu vidite nešto vrijedno pažnje, možete privremeno ugasiti sve prozore osim odabranog. Ovo možete napraviti pomoću tipke "u", nakon čega odabirete željeni prozor:

Nakon što završite, možete se vratiti u prethodni prikaz svih prozora s tipkom "U" (naravno, ovdje je riječ o kombinaciji <Shift+u>). Vizualni pregled očima nije uvijek i najbrži, zato multitail posjeduje funkciju traženja, koju možete pozvati s "/". Slično ovoj, sa kombinacijom <Shift+/>, možete dobiti highlite funkciju [1], kao na slici:

Mi smo potražili najzanimljiviju riječ koju možemo naći u logovima: error. Nakon što multitail pronađe traženu riječ, označit će cijeli redak u kojemu je pronašao traženu riječ:

Označavanje redaka ostaje i ako prijeđemo u način rada s jednim prozorom.

Moramo priznati da smo vas malo prevarili, jer multitail nema samo dvije-tri, nego preko dvadeset opcija. Tako, multitail može pratiti izlaz naredbi (STDOUT), može izvršavati proizvoljne naredbe ukoliko se pojavi određeni string (točnije regex) unutar log datoteke ili u izlazu naredbe, a očekivano podržava prilagodbu boja i sučelja. Smatramo da su za ove naprednije stvari primjereniji već spominjani fail2ban, a pogotovo OSSEC, pa nećemo ulaziti dublje u ove mogućnosti multitaila.

 

[1] na tipkovnici s HR rasporedom tipaka znak / se dobija s kombinacijom <Shift+7>, dakle već rabimo Shift. Kako onda dobiti kombinaciju tipaka <Shift+/>? Postoje (barem) dva načina... odgovorite u komentarima.

 

  • Logirajte [1] se za dodavanje komentara
pet, 2011-09-02 14:55 - Željko Boroš
Kuharice: 
Linux [7]
Kategorije: 
Software [10]
Vote: 
4.5
Vaša ocjena: Nema Average: 4.5 (2 votes)

Copyright ©2003.-2017. CARNet. Sva prava pridržana.
Mail to portal-team(at)CARNet.hr

Google+


Source URL: https://sysportal.carnet.hr/node/484

Links
[1] https://sysportal.carnet.hr/sysportallogin
[2] https://sysportal.carnet.hr/taxonomy/term/11
[3] https://sysportal.carnet.hr/taxonomy/term/22
[4] https://sysportal.carnet.hr/taxonomy/term/28
[5] http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing
[6] https://sysportal.carnet.hr/node/330
[7] https://sysportal.carnet.hr/taxonomy/term/17
[8] https://sysportal.carnet.hr/taxonomy/term/26
[9] https://sysportal.carnet.hr/node/537
[10] https://sysportal.carnet.hr/taxonomy/term/25
[11] http://en.wikipedia.org/wiki/Device_node#Block_devices
[12] http://en.wikipedia.org/wiki/Device_node#Character_devices
[13] https://sysportal.carnet.hr/node/730
[14] https://sysportal.carnet.hr/passgen
[15] https://sysportal.carnet.hr/node/640
[16] https://sysportal.carnet.hr/node/862