User Tools

Site Tools


koriscenje_find_komande

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

koriscenje_find_komande [2017/04/28 10:25] (current)
Line 1: Line 1:
 +\\
 +''​find''​ je jedan od najkorisnijih Linux/Unix alata, ali vecina ljudi koristi samo delic njegove snage. Mnoga Linux/Unix pitanja koja se vidjaju na netu mogu biti resena koriscenjem samo ''​find''​ komande; u pitanju je samo upoznavanje njenih opcija.
 +Snaga ''​find''​ komande vam omogucava da uradite stvari pocevsi od pretrage svih vasih .jpg fajlova do trazenja "svih Michael-ovih fajlova koji su izvrsni i koji su juce modifikovani."​ U kombinaciji sa ''​xargs'',​ odgovarajuce koriscenje ''​find''​ komande moze uciniti neke od uobicajenih zadataka deset puta laksim.
 +
 +===== Osnove =====
 +
 +Pocecemo jednostavno i onda postepeno ici naprednije. Za pocetak pocecemo sa pretragom na osnovu imena. Zapamtite da je prvi argumenat koji dajete ''​find''​ komandi mesto u kojem ce da se izvrsi pretraga.
 +
 +Pronadji sve fajlove koji sadrze nesto u njihovim imenima:
 +
 +  find . -name "​*.jpg"​
 +<​code>​
 +...
 +./​Pictures/​iPhoto Library/​Data/​2006/​Roll 20/​00697_bluewaters_1440x900.jpg
 +./​Pictures/​iPhoto Library/​Data/​2006/​Roll 20/​00705_cloudyday_1440x900.jpg
 +./​Pictures/​iPhoto Library/​Data/​2006/​Roll 20/​00710_fragile_1600x1200.jpg
 +./​Pictures/​iPhoto Library/​Data/​2006/​Roll 20/​00713_coolemoticon_1440x900.jpg
 +./​Pictures/​iPhoto Library/​Data/​2006/​Roll 20/​00714_cloudyday_1440x900.jpg
 +...
 +</​code>​
 +Podrazumevano kada zadate pocetnu lokaciju (u nasem slucaju "​."​),​ ''​find''​ komanda pocinje tu i onda ide do kraja tokom svoje pretrage. Znaci u ovom slucaju poceo sam od mog home direktorijuma i pronasao stvari do u "​~/​Pictures/​iPhoto Library/​Data/​2006/​Roll 20".
 +
 +//[ Stavljanje zagrada oko kriterijuma za pretragu izbegava probleme sa wildcard znakovima i verovatno je dobra navika koju bi ste zeleli da steknete. Mozete koristiti i ''​-iname''​ umesto ''​-name'';​ ista je ali je //case **in**sensitive//​ ]//
 +
 +Pronadji sve fajlove koji pripadaju odgovarajucem korisniku:
 +
 +  find . -user daniel
 +<​code> ​
 +...
 +./​Music/​iTunes/​iTunes Music/​Tool/​Undertow/​01 Intolerance.m4a
 +./​Music/​iTunes/​iTunes Music/​Tool/​Undertow/​02 Prison Sex.m4a
 +./​Music/​iTunes/​iTunes Music/​Tool/​Undertow/​03 Sober.m4a
 +./​Music/​iTunes/​iTunes Music/​Tool/​Undertow/​04 Bottom.m4a
 +./​Music/​iTunes/​iTunes Music/​Tool/​Undertow/​05 Crawl Away.m4a
 +./​Music/​iTunes/​iTunes Music/​Tool/​Undertow/​06 Swamp Song.m4a
 +./​Music/​iTunes/​iTunes Music/​Tool/​Undertow/​07 Undertow.m4a
 +./​Music/​iTunes/​iTunes Music/​Tool/​Undertow/​08 4 Degrees.m4a
 +./​Music/​iTunes/​iTunes Music/​Tool/​Undertow/​09 Flood.m4a
 +./​Music/​iTunes/​iTunes Music/​Tool/​Undertow/​69 Disgustipated.m4a
 +...
 +</​code>​
 +//[ Moze da radi i sa grupama (''​-group''​) ]//
 +
 +Pronadji samo direktorijume,​ regularne fajlove, linkove, ili socket-e:
 +
 +  find . -type d
 +<​code>​
 +...
 +./​Development/​envelope
 +./​Development/​mhp
 +./​Development/​mservers
 +./​Development/​mservers/​fortune100
 +./​Development/​mst
 +./​Development/​mst/​nmap
 +./​Development/​mst/​services
 +...
 +</​code>​
 +To su sve direktorijumi,​ a da bi pretrazili za ostale (fajlovi, linkovi, ili socket-i), samo zamenite ''​f,​ l, s''​ umesto ''​d''​ u gornjoj komandi.
 +
 +Pronadji sve fajlove cija je velicina veca od jednog gigabajta
 +
 +  find ~/Movies -size +1024M ​
 +<​code>​
 +...
 +/​Movies/​Comedy/​Funny.mpg
 +/​Movies/​Drama/​Sad.mpg
 +...
 +</​code>​
 +===== Kombinacija argumenata =====
 +
 +Mozete kombinovati argumente koristeci ''​and'',​ ''​or'',​ i ''​not''​. Podrazumevano ako koristite dva razlicita argumenta to znaci da stavljate **and** izmedju njih. Ako zelite da koristite or dodajte ''​-o''​ opciju, a ako zelite da dobijete sve osim necega, koristite ! opciju.
 +
 +Pronadj samo regularne fajlove, ciji je vlasnik daniel, koji su isto jpg slike
 +
 +  find . -user daniel -type f -name *.jpg
 +<​code> ​
 +...
 +./​Pictures/​iPhoto Library/​autumn_woods.jpg
 +./​Pictures/​iPhoto Library/​blue_forest.jpg
 +./​Pictures/​iPhoto Library/​brothers.jpg
 +...
 +</​code>​
 +Sada uradi to isto, ali iskljuci sve sto sadrzi ime autumn
 +
 +  find . -user daniel -type f -name *.jpg ! -name autumn* ​
 +<​code>​
 +...
 +./​Pictures/​iPhoto Library/​blue_forest.jpg
 +./​Pictures/​iPhoto Library/​brothers.jpg
 +...
 +</​code>​
 +===== Forenzika =====
 +
 +''​find''​ isto tako poseduje nekoliko opcija koje mogu pomoci da se odgovori na pitanja vezana za forenziku kao npr kada je fajl zadnji put menjan ili nad kojim fajlovima su skoro menjane dozvole.
 +
 +Nadji sve fajlove u /etc ciji je vlasnik root a koji su bili menjani u toku jucerasnjeg dana
 +
 +  find /etc -user root -mtime -1 
 +<​code>​
 +...
 +/etc/passwd
 +...
 +</​code>​
 +Opcije za trazenje koje mozete ovde koristiti su:
 +  *-''​atime'':​ kada je zadnji put pristupljeno fajlu 
 +  *-''​ctime'':​ kada su zadnji put menjane dozvole nad fajlom ​
 +  *-''​mtime'':​ kada su podaci u fajlu zadnji put menjani ​
 +
 +Pretrage se vrse za periode od 24 sata praceni brojem n. Ako zelite da pronadjete za tacan period od 24 sata koristite samo n. Ipak cesce ce te zeleti recimo, sve od juce, ili sve "vise od 3 dana." Ovo se postize koriscenjem -n i +n opcija.
 +
 +Postoje i verzije u **minutima** za atime, ctime, i mtime argumente:
 +  *-''​amin'':​ kad (u minutima) je zadnji put pristupljeno fajlu 
 +  *-''​cmin'':​ kad (u minutima) su zadnji put menjane dozvole nad fajlom ​
 +  *-''​mmin'':​ kad (u minutima) su podaci u fajlu zadnji put menjani
 +
 +Prikazi sve fajlove u /etc ciji je vlasnik root kojima je pristupljeno u zadnje dve minute
 +
 +  find /etc -user root -amin -2
 +<​code> ​
 +...
 +/etc/hosts
 +/​etc/​resolv.conf
 +...
 +</​code>​
 +Lista jos nekoliko opcija za firenzicare:​
 +  *-nouser: daje izlaz koji nije povezan sa postojecim userid ​
 +  *-nogroup: prikazuje izlaz koji nije povezan sa postojecim groupid ​
 +  *-links n: fajl sadrzi n linkova ​
 +  *-newer file: fajl je modifikovan u skorije vreme u odnosu na file. 
 +  *-perm mode: fajl ima mode dozvole. ​
 +
 +Prikazi sve fajlove u ~ sa svim mogucim dozvolama
 +
 +  find ~ -perm 777
 +<​code>​
 +...
 +~/​testfile.txt
 +~/lab.rtf
 +...
 +</​code>​
 +===== Kombinovanje find sa ''​xargs''​ =====
 +
 +Ovo je deo kome smo tezili – izvodjenje akcija nad stvarima koje nalazimo sa ''​find''​. Iako je npr interesantno reci, "​Prikazi mi te i te stvari",​ mnogo je korisnije reci, "Uzmi svaki tekstualni fajl, ciji je vlasnik Jason, i kojima nije pristupano u zadnjih 60 dana i prebaci ih u backup folder."​
 +
 +Primeri find komande u akciji iz kuvara
 +//[ Testirajte ove na vasem sistmu pre nego ih koristite za neke vazne fajlove ]//
 +
 +Pronadji sve fajlove na sistemu nad kojima svi imaju prava pisanja. Ovo 0002 predstavlja 2 u polju "​ostali"​ u dozvolama fajla, sto je u stvari bit za pisanje
 +
 +  find / -perm -0002
 +
 +Sakupi sve fajlove ciji vlasnici nisu validni korisnici i izbrisi ih
 +
 +  find / -nouser -print0 | xargs -0 rm
 + 
 +Izbrisite sve slike sa vaseg *nix desktopa
 +
 +  find ~/Desktop -name "​*.jpg"​ -o -name "​*.gif"​ -o -name "​*.png"​ -print0 | xargs -0 mv --target-directory ~/​Pictures ​
 +
 +//[ Opcija -print0 eliminise rezultate sa null znakovima umesto podrazumevane nove linije, cineci izlaz citkijim i koji onda nece smetati kao u vecini slucajeva]//​
 +
 +Ispravite dozvole na vasem web direktorijumu
 +
 +  find /​your/​webdir/​ -type d -print0 | xargs -0 chmod 755
 +  find /​your/​webdir -type f | xargs chmod 644
 +
 +Prikazi listu fajlova u /etc koji su bili modifikovani od proslog meseca
 +
 +  find /etc -mtime -30
 +
 +===== Na kraju =====
 +
 +Postoji malo debate u nekim krugovima koji se ticu koriscenja ''​xargs''​ vs. -''​exec''​ opcije koja je ugradjena u samu ''​find''​ komandu. Za mene tu u stvari i nema prostora za neku debatu; -''​exec''​ nije ni priblizno dobar kao ''​xargs''​ za ono za sta ja koristim ''​find''​. Komandu koristim da radi velike poslove ukljucujuci mnogo fajlova. "​Premesti sve ove fajlove tamo", "​kopiraj sve te direktorijume tamo", "​Izbrisi ove linkove.",​ itd.
 +Ovde se -''​exec''​ lomi a ''​xargs''​ ostaje na nogama. Kada koristite -''​exec''​ pokrecete sposebnu instancu programa kojeg pozivate za svaki unos. Sa ''​xargs'',​ pravite unos u paket i onda ih provlacite kroz pozvanu komandu sto je moguce manje puta, //sto je obicno samo jendom//. Kada imate posla sa stotinama hiljada elemenata ovo znaci velika **pobeda** za ''​xargs''​.
 +Ne verujete mi? Dobro, hajde da pokrenemo nekolio brojeva. Ispod je izlistavanje 5,310 .jpg fajlova na mojem OS X sistemu koristeci -''​exec''​ i ''​xargs'':​
 +
 +  time find . -name "​*.jpg"​ -exec ls {} \;
 + 
 +  real    0m23.548s
 +  user    0m3.913s
 +  sys     ​0m15.167s
 +
 +Hmm, to nije lose. 23 sekunde za malo vise od pet hiljada fajlova zar ne? Pokusajmo sada sa xargs.
 +
 +  time find . -name "​*.jpg"​ -print0 | xargs -0 ls 
 +
 +  real    0m1.526s
 +  user    0m0.667s
 +  sys     ​0m0.864s
 +
 +To je 2 sekunde vs 24 sekundi. Ozbiljno; ''​find''​ i ''​xargs''​ je kombinacija koji bi ste zeleli da koristite.
 +
 +==== Reference ====
 + 
 +Man stranica za find: 
 +
 +http://​www.netadmintools.com/​html/​find.man.html
 +
 +Man stranica za xargs: ​
 +
 +http://​www.research.att.com/​~gsf/​man/​man1/​xargs.html
 +
 +
 +
 +\\
 +\\
 +\\
 +Izvor: http://​dmiessler.com/​study/​find/​
  
koriscenje_find_komande.txt · Last modified: 2017/04/28 10:25 (external edit)