2014 m. spalio 30 d., ketvirtadienis

find, locate ir grep - gnu/linux dokumentų paieškos komandos

find - komanda ieško dokumentų diske.

find / pavadinimas -ls
-ls  -- veikia taip pat kaip ls
-ok -- prieš vykdant kokius nors destruktyvius veiksmus, paprašo patvirtinimo.
-exec -- vykdo komandą su rastai dokumentais.
-delete -- trina dokumentus.


Ieško .txt dokumentų visame kataloge:
$ find ./ -name '*txt' ieškome 'dokumentas' '/home' kataloge
$ find /home -type f -name dokumentas -print 

Ieškome visų katalogų /home/user/Documents/ kataloge:
$ find /home/user/Documents/ -type d -print

-ls atspausdina failo informaciją:
$ find /home -type f -name test -ls
10141 0 -rw-rw-r-- sup sup Spa 13 04:56 /home/sup/Documents/Tests/test

Ieškom visų dokumentų, kurie yra .txt failai:
$ find /home/sup/Documents/ -type f -name *.txt -print

ieškant tik tų dokumentų, kurie modifikuotu prieš 60 minučių.
jei ieškotume peržiūrėtų, bet nepakeistų dokumentų tuomet naudojam atime:
$ find . -cmin -60

Kokie dokumentai buvo modifikuoti per paskutinę dieną:
$ find .config -type f -mtime -1

Naudojant xarg, kai yra tarpas dokumentų pavadinimuose naudojam:
$ find . -name '*.gif' -print0 | xargs -0 file

Dužiausių 10 dokumentų, kurie nebuvo vykdyti 300 dienų:
$ find ~ -atime +300 -print0 | xargs -0 ls -las | sort -n -r | head -10

Alternatyva:
$ find . -name '*.gif' -exec file {} \;

Kaip išvengti find Permission denied pranešimų?
find / -type f -name test 2> /dev/null

Kaip surasti vartotojo katalogus?
$ find / -user nobody -ls 2> /dev/null

Kaip surasti katalogus, kurie nepriklauso jokiam vartotojui?
$ find / -nouser -ls 2> /dev/null

Kaip rasti visus didelius failus, visuose kataloguose išskyrus:
$ find / -type f -not -path "/home/user/Downloads/*" -size +200M   2>1 

locate - komanda ieško dokumentų iš podėklio (cache).


Paieška atliekama greičiau, tačiau reikia žinoti, kad tam tikri failų tipai ir katalogai(/tmp/, /root/. ...) yra ignoruojami, o naujai sukurti dokumentai nėra matomi neatnaujinus podėklio.

Paprasta paieška:
$ locate labas
/home/sup/Documents/labai/svarus/katalogas/labas.txt

Nustatymas -i neskiria didžiųjų ir mažųjų raidžių:
$ locate -i labas
/home/sup/Documents/labai/svarus/katalogas/Labas.txt
/home/sup/Documents/labai/svarus/katalogas/labas.txt

locate podėklio atnaujinimas:
$ sudo updatedb

grep paieška.

Ieškom visų žodžiū prasidedančių(^) lithu, kurie gali baigtis kaip nori(*).
grep "^lithu*" /usr/share/dict/words
lithe
lither
lithest
lithium
lithium's

Nustatymas -i kaip ir locate programoje neskiria didžiųjų ir mažųjų raidžių:
grep -i "^lithu*" /usr/share/dict/words
Lithuania
Lithuania's
Lithuanian
Lithuanian's
Lithuanians
lithe
lither

Atvirkštinė paieška -v . Randa viską išskyrus tcp:
$ grep -vi tcp /etc/services

Rodo visų siejiklių ip adresus:
$ ip a | grep inet

Rodo visus dokumentus, kuriuose yra žodis nuoroda:
grep -rli nuoroda ~
/home/sup/Downloads/linux64/src/app/language/lt.json