Так, ви можете 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
буде подано сигнал зупинити
Він може бути корисним для отримання грепів /dev/urandom
під час генерації паролів. Отримати, наприклад, п'ять випадкових буквено-цифрових символів:
$ grep --text -o '[[:alnum:]]' /dev/urandom | head -c 10
G
4
n
X
2
Це не нескінченно, оскільки, отримавши достатньо символів, head
закриває трубу, внаслідок чого греп припиняється.
Нескінченні петлі
"... посилання ... створюють нескінченні петлі при проходженні ..."
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
надається обмежена можливість зупинити пошук файлів певних файлів чи каталогів. Наприклад, можна виключити всі каталоги по імені 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
вихідний код, але, мабуть, не побачу в ньому занадто багато.