Как использовать grep для поиска файла в любом месте

Я обнаружил, что сценарий запускается дважды, поэтому я хочу найти имя сценария в любом файле в любом месте, чтобы увидеть, где его вызывают.

Итак, я сделал это ...

cd /
sudo grep -r autostart *

Но это дает мне ошибку ..

boot/System.map-3.5.0-23-generic:c1490f90 t autostart_arrays
grep: dev/vsock: Invalid argument
0
задан 26 September 2013 в 18:46

1 ответ

Это не ошибка. Grep только что сообщил о своей неудаче поиска в специальном файле (возможно, через сокет) и уже работал над следующим. Если вы не хотите видеть сообщения об ошибках grep, вы можете отправить их в bitbucket:

fgrep -r autostart * 2> /dev/null

Обратите внимание, что fgrep , вероятно, будет намного быстрее в вашем случае, потому что вы ищете для строки, а не для регулярного выражения.

Вопреки тому, как вы выглядели, Греп не разбился. Технически он тоже не висел. Возможно, он искал /dev/random строку. В конце концов он найдет его там, хотя это может занять астрономическое время. К сожалению, вскоре после того, как grep найдет строку в /dev/random, он столкнется с /dev/zero, где он непременно потратит бесконечное время на поиск этой строки. Следовательно, логически ваша команда гарантированно не прервется.

Если вы хотите запретить fgrep искать специальные файлы, объедините его с find:

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

И, так как вы ищете скрипт, пропустите все неисполняемые файлы в Файловая система сэкономит много времени:

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

На самом деле, я бы сосредоточил свой поиск в первую очередь на обычных подозреваемых:

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

Особенно, если у вас есть несколько удаленных файловых систем. mount, который также покорно будет искать grep.

0
ответ дан 26 September 2013 в 18:46

Другие вопросы по тегам:

Похожие вопросы: