Так, ви можете 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вихідний код, але, мабуть, не побачу в ньому занадто багато.