Да, вы можете grep
/dev/sda1
и , /proc
но вы , вероятно , не хотите. Более детально:
Да, вы можете запустить grep двоичное содержимое /dev/sda1
. Но с современными большими жесткими дисками это займет очень много времени, и результат вряд ли будет полезным.
Да, вы можете просматривать содержимое, /proc
но помните, что память вашего компьютера там отображается в виде файлов. На современном компьютере с гигабайтами оперативной памяти это займет много времени, и, опять же, результат вряд ли будет полезным.
В качестве исключения, если вы ищете данные на жестком диске с поврежденной файловой системой, вы можете запустить grep something /dev/sda1
как часть попытки восстановить данные файла.
Другие проблемные файлы в /dev
Жесткие диски и разделы жесткого диска /dev
могут быть, если у вас хватит терпения, нарезаться. Другие файлы ( шляпный совет: user2313067 ), однако, могут вызвать проблемы:
/dev/zero
это файл бесконечной длины. К счастью, grep
(по крайней мере, версия GNU) достаточно умен, чтобы пропустить это:
$ grep something /dev/zero
grep: input is too large to count
/dev/random
и /dev/urandom
также бесконечны. Команда grep something /dev/random
будет выполняться вечно, пока не grep
будет дано предупреждение об остановке.
Это может быть полезно для grep /dev/urandom
при генерации паролей. Чтобы получить, например, пять случайных буквенно-цифровых символов:
$ grep --text -o '[[:alnum:]]' /dev/urandom | head -c 10
G
4
n
X
2
Это не бесконечно, потому что, после получения достаточного количества символов, head
канал закрывается, что приводит к завершению grep.
Бесконечные циклы
"... ссылки ... создают бесконечные циклы при прохождении ..."
Grep (по крайней мере, версия GNU) достаточно умен, чтобы этого не делать. Давайте рассмотрим два случая:
С этой -r
опцией grep не следует по символическим ссылкам, если они явно не указаны в командной строке. Следовательно, бесконечные циклы невозможны.
С -R
опцией, Grep делает следовать символическим ссылкам , но он проверяет их и отказывается попасть в петле. Проиллюстрировать:
$ mkdir a
$ ln -s ../ a/b
$ grep -R something .
grep: warning: ./a/b: recursive directory loop
Исключая проблемные каталоги из grep -r
Кроме того, grep
предоставляет ограниченное средство, чтобы остановить поиск grep определенных файлов или каталогов. Например, можно исключить все каталоги по имени proc
, sys
и dev
от рекурсивного поиска Grep с:
grep --exclude-dir proc --exclude-dir sys --exclude-dir dev -r something /
С другой стороны , мы можем исключить proc
, sys
и dev
используя расширенные шарики в Bash:
shopt -s extglob
grep -r something /!(proc|sys|dev)
grep
поиск в файле/proc
приводит к отображению памяти, может ли случиться так, что онgrep
попадет в EOF внутри (случайной) памяти и интерпретирует следующие данные как новое имя файла для поиска? Я начал читатьgrep
исходный код, но я думаю, я не буду видеть в нем слишком много.