Como usar o grep para procurar um arquivo em qualquer lugar

0

Eu estou achando que um script está sendo iniciado duas vezes, então eu quero procurar o nome do script em qualquer arquivo em qualquer lugar, para ver onde ele está sendo chamado.

Então eu fiz isso ...

cd /
sudo grep -r autostart *

Mas isso me dá o erro ...

boot/System.map-3.5.0-23-generic:c1490f90 t autostart_arrays
grep: dev/vsock: Invalid argument
    
por spiderplant0 26.09.2013 / 16:46

1 resposta

2

Isso não é um erro. O Grep acabou de relatar sua falha em pesquisar por um arquivo especial (provavelmente um soquete) e já estava trabalhando no próximo. Se você não quer ver as mensagens de erro do grep, você pode enviá-las para o bitbucket:

fgrep -r autostart * 2> /dev/null

Note que o fgrep provavelmente será muito mais rápido no seu caso, porque você está procurando por uma string, não por uma expressão regular.

Ao contrário do que você parecia, o grep não caiu. Tecnicamente, não foi pendurado também. Talvez estivesse pesquisando /dev/random para a string. Eventualmente, ele iria encontrá-lo lá, embora isso possa levar uma quantidade astronômica de tempo. Infelizmente, logo após o grep ter encontrado a string em /dev/random , ele encontraria /dev/zero onde certamente gastaria uma infinidade de tempo procurando pela string. Logicamente, portanto, seu comando estava garantido para não terminar.

Se você deseja impedir que fgrep pesquise arquivos especiais, combine-o com find :

find / -type f -exec fgrep -l autostart {} \;

E como você está procurando um script, ignorar todos os não executáveis no sistema de arquivos economizará muito tempo:

find / -type f -executable -exec fgrep -l autostart {} \;

Na verdade, eu focaria minha busca primeiro nos suspeitos usuais:

find {,/usr}/{,s}bin /etc -type f -executable -exec fgrep -l autostart {} \;

Particularmente, se você tiver alguns sistemas de arquivos remotos montados, que o grep também deveria procurar.

    
por zwets 26.09.2013 / 17:09