Как сказал @ninjalj, если вы не используете -D skip
, grep
попытается прочитать все файлы вашего устройства, файлы сокетов и файлы FIFO. В частности, в системе Linux (и многих системах Unix) она будет пытаться прочитать /dev/zero
, что кажется бесконечно длинным.
Вы будете ждать некоторое время.
Если вы ищете системный журнал, возможно, наилучшим подходом будет, начиная с /var/log
.
Если вы ищете что-то, что действительно может быть где-то в вашей файловой системе, вы можете сделать что-то вроде этого:
find / -xdev -type f -print0 | xargs -0 grep -H pattern
Аргумент -xdev
для find
указывает ему оставаться в одной файловой системе; это позволит избежать /proc
и /dev
(а также любых смонтированных файловых систем). -type f
ограничивает поиск обычными файлами. -print0
печатает имена файлов, разделенные нулевыми символами, а не символами новой строки; это позволяет избежать проблем с файлами, в именах которых есть пробелы или другие забавные символы.
xargs
считывает список имен файлов (или чего-либо еще) на своем стандартном входе и вызывает указанную команду для всего списка. Опция -0
работает с find
-print0
.
Параметр -H
для grep
указывает префикс каждого совпадения с именем файла. По умолчанию grep
делает это, только если в его командной строке есть два или более имен файлов. Поскольку xargs
разбивает свои аргументы на пакеты, вполне возможно, что последний пакет будет иметь только один файл, что даст вам противоречивые результаты.
Попробуйте использовать find ... -name '*.log'
, чтобы ограничить поиск файлами с именами, заканчивающимися на .log
(при условии, что ваши файлы журнала имеют такие имена), и / или используя grep -I ...
для пропуска двоичных файлов.
Обратите внимание, что все это зависит от особенностей GNU. Некоторые из этих параметров могут быть недоступны в MacOS (которая основана на BSD) или в других системах Unix. Обратитесь к местной документации и рассмотрите возможность установки GNU findutils (для find
и xargs
) и / или GNU grep.
Прежде чем пытаться что-либо из этого, используйте df
, чтобы увидеть насколько велика ваша корневая файловая система. Мой в настоящее время 268 гигабайт; поиск всего этого, вероятно, займет несколько часов. Несколько минут, потраченных (а) на ограничение файлов, которые вы ищете, и (б) на то, что команда верна, будут стоить затраченного вами времени.