Π‘ΡΠΊΠΎΠ½ΠΎΠΌΡŒΡ‚Π΅ 15% Π½Π° всСх хостинговых услугах

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ свои Π½Π°Π²Ρ‹ΠΊΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ скидку Π½Π° любой Ρ‚Π°Ρ€ΠΈΡ„Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills ΠΠ°Ρ‡Π°Ρ‚ΡŒ
Π ΡƒΠ±Ρ€ΠΈΠΊΠΈ
Linux VPS

Как Π½Π°ΠΉΡ‚ΠΈ Ρ„Π°ΠΉΠ» ΠΏΠΎ содСрТимому Π² Linux: объяснСниС grep, find ΠΈ awk

Поиск Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ Π΅Π³ΠΎ содСрТимому Π² Linux ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ сканированиС Π΄Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π° β€” Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΡ‘Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… β€” с использованиСм Ρ‚Π°ΠΊΠΈΡ… инструмСнтов, ΠΊΠ°ΠΊ grep, find ΠΈ awk для сопоставлСния тСкстовых шаблонов, строк ΠΈΠ»ΠΈ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ отличаСтся ΠΎΡ‚ поиска ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ являСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» *содСрТит*, Π½ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Π³Π΄Π΅ ΠΎΠ½ находится ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ называСтся.

Для всСх, ΠΊΡ‚ΠΎ управляСт срСдой VPS Π₯остинга, поиск Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎ содСрТимому являСтся Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ: поиск Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ настроСнных Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² Π² /etc, Π°ΡƒΠ΄ΠΈΡ‚ Π»ΠΎΠ³-Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ шаблонов ошибок ΠΈΠ»ΠΈ поиск Тёстко Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄Π΅Ρ€Π΅Π²ΡŒΡΡ… исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹, рассмотрСнныС Π² этом руководствС, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π²ΠΎ всСх основных дистрибутивах Linux β€” Debian, Ubuntu, CentOS, AlmaLinux ΠΈ Arch β€” Π±Π΅Π· нСобходимости установки Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

ΠŸΠΎΡ‡Π΅ΠΌΡƒ поиск ΠΏΠΎ содСрТимому Π²Π°ΠΆΠ΅Π½ Π² срСдС Linux

Поиск ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° (ls, locate) Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ содСрТимом Ρ„Π°ΠΉΠ»Π°. Π’ производствСнных систСмах критичСски Π²Π°ΠΆΠ½Ρ‹Π΅ вопросы ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда связаны с содСрТимым:

  • Какой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» устанавливаСт max_connections Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅?
  • Какой PHP-Ρ„Π°ΠΉΠ» содСрТит Π²Ρ‹Π·ΠΎΠ² ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ прСдупрСТдСния?
  • Какой Π»ΠΎΠ³-Ρ„Π°ΠΉΠ» зафиксировал ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ IP-адрСс Π² Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ врСмя?
  • КакоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ задания cron ссылаСтся Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ скрипту?

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΈ инструмСнты поиска с графичСским интСрфСйсом Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ эффСктивно ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° эти вопросы Π² ΠΌΠ°ΡΡˆΡ‚Π°Π±Π΅. Командная строка Linux ΠΌΠΎΠΆΠ΅Ρ‚ β€” ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ это Π·Π° миллисСкунды срСди ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании.

Команда grep: основной инструмСнт для поиска ΠΏΠΎ содСрТимому

grep (Global Regular Expression Print) β€” это стандартный инструмСнт для поиска содСрТимого Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Linux. Он Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ построчно ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π»ΡŽΠ±ΡƒΡŽ строку, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ.

Основной синтаксис

grep [OPTIONS] PATTERN [FILE_OR_DIRECTORY]

РСкурсивный поиск ΠΏΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ

НаиболСС распространённоС Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ использованиС β€” рСкурсивный поиск ΠΏΠΎ всСму Π΄Π΅Ρ€Π΅Π²Ρƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ:

grep -rnw '/path/to/directory/' -e 'search_text'

ОписаниС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π»Π°Π³Π°:

ЀлагПолноС названиСДСйствиС
-r--recursiveАвтоматичСски спускаСтся Π² ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ
-n--line-numberДобавляСт Π½ΠΎΠΌΠ΅Ρ€ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅ΠΉ строки ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ
-w--word-regexpБопоставляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π΅Π»Ρ‹Π΅ слова β€” test Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ testing
-e--regexpΠ―Π²Π½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ шаблон поиска; трСбуСтся, ΠΊΠΎΠ³Π΄Π° шаблон начинаСтся с дСфиса
-i--ignore-caseПоиск Π±Π΅Π· ΡƒΡ‡Ρ‘Ρ‚Π° рСгистра (Error соотвСтствуСт error, ERROR)
-l--files-with-matchesΠ’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ², Π° Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ строки
-c--countΠ’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ количСство ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… строк Π½Π° Ρ„Π°ΠΉΠ»
-v--invert-matchΠ’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ НЕ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ
-A N--after-context=NΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ N строк послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ совпадСния для контСкста
-B N--before-context=NΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ N строк ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ совпадСниСм для контСкста
--includeN/AΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ поиск Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ glob
--excludeN/AΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Π΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ glob

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ grep

Поиск строки "test1" Π²Π½ΡƒΡ‚Ρ€ΠΈ /usr/games ΠΈ всСх ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ:

grep -r "test1" /usr/games

Найти всС Ρ„Π°ΠΉΠ»Ρ‹ Π² /etc, содСрТащиС слово "network" (Ρ†Π΅Π»ΠΎΠ΅ слово, Π±Π΅Π· ΡƒΡ‡Ρ‘Ρ‚Π° рСгистра), с ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² строк:

grep -rniw "network" /etc

ВывСсти Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² (Π±Π΅Π· ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… строк) PHP-Ρ„Π°ΠΉΠ»ΠΎΠ², содСрТащих eval(:

grep -rl "eval(" /var/www/html --include="*.php"

Поиск шаблона с ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ 3 строк контСкста Π΄ΠΎ ΠΈ послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ совпадСния:

grep -rn -A 3 -B 3 "FATAL" /var/log/

ΠŸΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, сколько Ρ€Π°Π· "PermitRootLogin" встрСчаСтся Π²ΠΎ всСх ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… SSH:

grep -rc "PermitRootLogin" /etc/ssh/

Найти строки, НЕ содСрТащиС "localhost" Π² Ρ„Π°ΠΉΠ»Π΅ hosts:

grep -v "localhost" /etc/hosts

grep с рСгулярными выраТСниями

grep ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Π΄Π²ΠΈΠΆΠΊΠ° рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

  • BRE (Π±Π°Π·ΠΎΠ²Ρ‹Π΅ рСгулярныС выраТСния) β€” Ρ€Π΅ΠΆΠΈΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
  • ERE (Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ рСгулярныС выраТСния) β€” активируСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ -E ΠΈΠ»ΠΈ egrep
  • PCRE (Perl-совмСстимыС рСгулярныС выраТСния) β€” активируСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ -P
# Match lines containing an IPv4 address pattern (ERE)
grep -rE '([0-9]{1,3}.){3}[0-9]{1,3}' /var/log/nginx/access.log

# Match lines with email addresses (PCRE)
grep -rP '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}' /var/www/html/

ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ случаи ΠΈ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ grep

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹: По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ grep Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Binary file X matches для Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ пропустит ΠΈΡ… содСрТимоС. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ -a (--text), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ grep ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠ°ΠΊ тСкст β€” это ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ поискС Π² скомпилированных конфигурациях ΠΈΠ»ΠΈ Π΄Π°ΠΌΠΏΠ°Ρ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ….

БимволичСскиС ссылки: -r Π½Π΅ слСдуСт ΠΏΠΎ символичСским ссылкам. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ -R (заглавная R) для рСкурсивного слСдования ΠΏΠΎ символичСским ссылкам. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ бСсконСчныС Ρ†ΠΈΠΊΠ»Ρ‹ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ цикличСских символичСских ссылок.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π΅Ρ€Π΅Π²ΡŒΡΡ…: grep ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ. Для массивных ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… Π±Π°Π· (ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ²) рассмотритС ripgrep (rg) ΠΈΠ»ΠΈ ag (The Silver Searcher), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ ΠΈ автоматичСски ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ .gitignore.

НулСвыС Π±Π°ΠΉΡ‚Ρ‹ Π² ΠΈΠΌΠ΅Π½Π°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²: ΠŸΠ΅Ρ€Π΅Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ find Ρ‡Π΅Ρ€Π΅Π· -print0 ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ grep --null ΠΈΠ»ΠΈ xargs -0 для бСзопасной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠΌΡ‘Π½ Ρ„Π°ΠΉΠ»ΠΎΠ², содСрТащих ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ: grep Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π±Π°ΠΉΡ‚Π°ΠΌΠΈ, Π° Π½Π΅ символами. Если Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ UTF-16 ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΌΠΈ. УстановитС LANG=C ΠΈΠ»ΠΈ LC_ALL=C ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ для ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сопоставлСния Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π±Π°ΠΉΡ‚ΠΎΠ²:

LC_ALL=C grep -r "pattern" /path/

Команда find: объСдинСниС ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ поиска ΠΏΠΎ содСрТимому

Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ grep выполняСт поиск *Π²Π½ΡƒΡ‚Ρ€ΠΈ* Ρ„Π°ΠΉΠ»ΠΎΠ², find Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° основС ΠΈΡ… ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… β€” ΠΈΠΌΠ΅Π½ΠΈ, Ρ‚ΠΈΠΏΠ°, Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΠΏΡ€Π°Π² доступа, Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ измСнСния β€” ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. ОбъСдинСниС find с grep Π΄Π°Ρ‘Ρ‚ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ поиск ΠΏΠΎ содСрТимому с нСсколькими критСриями.

Основной синтаксис

find /starting/path [CRITERIA] [ACTION]

Поиск ΠΏΠΎ содСрТимому с использованиСм find + grep

find /path/to/directory/ -type f -exec grep -l 'search_text' {} ;

Анатомия этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
/path/to/directory/ΠšΠΎΡ€Π½Π΅Π²Π°Ρ дирСктория для поиска
-type fΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ (ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, сокСты, устройства)
-exec ... {} ;ВыполняСт ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°; {} замСняСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π°
grep -lΠ’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ совпадСния, Π° Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΡƒΡŽ строку

ОбъСдинСниС ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π² find для точности

РСальная ΠΌΠΎΡ‰ΡŒ find Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π² ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ grep, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сокращаСт количСство Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

Поиск Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„Π°ΠΉΠ»Π°Ρ… .conf, ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Ρ… Π·Π° послСдниС 7 Π΄Π½Π΅ΠΉ:

find /etc -type f -name "*.conf" -mtime -7 -exec grep -l "timeout" {} ;

Поиск Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„Π°ΠΉΠ»Π°Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 1MB:

find /var/log -type f -size +1M -exec grep -c "ERROR" {} ;

Поиск Π² Ρ„Π°ΠΉΠ»Π°Ρ…, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ:

find /home -type f -user john -exec grep -l "password" {} ;

Поиск Π² Ρ„Π°ΠΉΠ»Π°Ρ… с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€Π°Π²Π°ΠΌΠΈ доступа (доступных для записи всСм):

find /var/www -type f -perm -o+w -exec grep -l "eval(" {} ;

Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ· поиска:

find /var/www -type f -not -path "*/node_modules/*" -exec grep -l "API_KEY" {} ;

ИспользованиС find с xargs для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Бинтаксис -exec ... ; создаёт Π½ΠΎΠ²Ρ‹ΠΉ процСсс для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π’ дирСкториях с тысячами Ρ„Π°ΠΉΠ»ΠΎΠ² это Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅. ИспользованиС xargs ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ нСсколько ΠΈΠΌΡ‘Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Π·ΠΎΠ² grep:

find /path/ -type f -name "*.log" -print0 | xargs -0 grep -l "connection refused"

Π€Π»Π°Π³ΠΈ -print0 ΠΈ -0 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ символы Π² качСствС Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ вмСсто символов Π½ΠΎΠ²ΠΎΠΉ строки, ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ обрабатывая ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ.

Команда awk: структурированный поиск ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ содСрТимого

awk β€” это ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ язык ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ тСкста, Π° Π½Π΅ просто инструмСнт поиска. Он прСвосходит Π΄Ρ€ΡƒΠ³ΠΈΠ΅ инструмСнты, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π² структурированных Ρ„Π°ΠΉΠ»Π°Ρ… β€” Π΄Π°Π½Π½Ρ‹Ρ… CSV, Π»ΠΎΠ³-Ρ„Π°ΠΉΠ»Π°Ρ… с фиксированными столбцами, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… β€” ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… совпадСний.

Основной синтаксис

awk '/pattern/ { action }' file

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ awk для поиска содСрТимого Ρ„Π°ΠΉΠ»ΠΎΠ²

ВывСсти всС строки Π² Ρ„Π°ΠΉΠ»Π΅, содСрТащиС слово "error":

awk '/error/' /var/log/syslog

Поиск шаблона ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ (столбСц 1 ΠΈ столбСц 5):

awk '/FAILED/ { print $1, $5 }' /var/log/auth.log

Поиск ΠΏΠΎ нСскольким Ρ„Π°ΠΉΠ»Π°ΠΌ с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… строк:

awk '/search_term/ { print FILENAME": "$0 }' /etc/nginx/*.conf

Поиск Π±Π΅Π· ΡƒΡ‡Ρ‘Ρ‚Π° рСгистра Π² awk:

awk 'tolower($0) ~ /timeout/' /etc/mysql/my.cnf

ΠŸΠΎΠ΄ΡΡ‡Ρ‘Ρ‚ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ шаблона Π½Π° Ρ„Π°ΠΉΠ»:

awk '/ERROR/ { count++ } END { print FILENAME, count }' /var/log/app.log

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ awk вмСсто grep

awk являСтся Π»ΡƒΡ‡ΡˆΠΈΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π°:

  • НуТно Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ столбца (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«Π½Π°ΠΉΡ‚ΠΈ строки, Π³Π΄Π΅ ΠΏΠΎΠ»Π΅ 3 большС 500Β»)
  • НуТно Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ
  • НуТно Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ (подсчёты, суммы) ΠΏΠΎ Ρ„Π°ΠΉΠ»Ρƒ
  • Π€Π°ΠΉΠ» ΠΈΠΌΠ΅Π΅Ρ‚ постоянный Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΈ трСбуСтся структурированноС ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…

grep остаётся Π±ΠΎΠ»Π΅Π΅ быстрым для Π·Π°Π΄Π°Ρ‡ чистого сопоставлСния шаблонов, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‚ΡŒ, *сущСствуСт* Π»ΠΈ ΠΈ *Π³Π΄Π΅* находится шаблон.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ инструмСнтов: grep vs find vs awk

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉgrepfind + grepawk
ОсновноС назначСниСБопоставлСниС шаблонов Π² ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠΌΠŸΠΎΠΈΡΠΊ ΠΏΠΎ содСрТимому с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° структурированных Π΄Π°Π½Π½Ρ‹Ρ…
РСкурсивный поискДа (-r / -R)Π”Π° (встроСнный)НСт (Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ†ΠΈΠΊΠ»Π° Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅)
Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ мСтаданнымНСтДа (имя, Ρ€Π°Π·ΠΌΠ΅Ρ€, Π΄Π°Ρ‚Π°, Π²Π»Π°Π΄Π΅Π»Π΅Ρ†)НСт
ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉBRE, ERE, PCREΠ§Π΅Ρ€Π΅Π· grepERE
Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π°ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ΠŸΠΎΠ»Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅
ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π΅Ρ€Π΅Π²ΡŒΡΡ…Π‘Ρ‹ΡΡ‚Ρ€Π°ΡΠœΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ (процСсс Π½Π° Ρ„Π°ΠΉΠ»)УмСрСнная
ΠŸΠΎΡ€ΠΎΠ³ вхоТдСнияНизкийБрСднийВысокий
Π›ΡƒΡ‡ΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡΠ‘Ρ‹ΡΡ‚Ρ€Ρ‹ΠΉ поиск ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΡΠ»ΠΎΠ²Π°ΠΌΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ Π°ΡƒΠ΄ΠΈΡ‚Ρ‹ с нСсколькими критСриямиРазбор Π»ΠΎΠ³ΠΎΠ², ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ для производствСнных срСд

Поиск Π² сТатых Π»ΠΎΠ³-Ρ„Π°ΠΉΠ»Π°Ρ…

На сСрвСрах, Π³Π΄Π΅ Π»ΠΎΠ³ΠΈ Ρ€ΠΎΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ ΡΠΆΠΈΠΌΠ°ΡŽΡ‚ΡΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ zgrep для поиска Π² Ρ„Π°ΠΉΠ»Π°Ρ… .gz Π±Π΅Π· ΠΈΡ… ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ распаковки:

zgrep "segfault" /var/log/syslog.*.gz

Поиск Π²Π½ΡƒΡ‚Ρ€ΠΈ tar-Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² Π±Π΅Π· извлСчСния

tar -xOf archive.tar.gz | grep "search_pattern"

ОбъСдинСниС grep с sort ΠΈ uniq для частотного Π°Π½Π°Π»ΠΈΠ·Π°

Найти Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённыС сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π² Π»ΠΎΠ³-Ρ„Π°ΠΉΠ»Π΅:

grep "ERROR" /var/log/app.log | sort | uniq -c | sort -rn | head -20

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ фокус Π½Π° исходном ΠΊΠΎΠ΄Π΅

grep -r --include="*.py" --include="*.js" --include="*.php" "TODO" /var/www/

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ содСрТимого Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ grep

ΠŸΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ tail -f Π² grep для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΆΠΈΠ²ΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π° Π»ΠΎΠ³ΠΎΠ² Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… шаблонов:

tail -f /var/log/nginx/error.log | grep --line-buffered "upstream"

Π€Π»Π°Π³ --line-buffered заставляСт grep ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ послС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования для Π°ΡƒΠ΄ΠΈΡ‚Π° бСзопасности

Поиск Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎ содСрТимому являСтся основной Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΎΠΉ Π² усилСнии бСзопасности Linux. На Π’Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ сСрвСрС ΠΈΠ»ΠΈ VPS эти ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ критичСски Π²Π°ΠΆΠ½Ρ‹ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния:

Π‘ΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Тёстко Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ Π² Ρ„Π°ΠΉΠ»Π°Ρ… Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ:

grep -rniE "(password|passwd|pwd)s*=s*['"][^'"]{3,}" /var/www/ --include="*.php"

Найти Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, доступныС для чтСния всСм:

find / -name "*.pem" -o -name "*.key" | xargs grep -l "PRIVATE KEY"

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ PHP-вСбшСллов ΠΏΡƒΡ‚Ρ‘ΠΌ сканирования Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ распространённых ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ:

grep -rPl "evals*(s*(base64_decode|gzinflate|str_rot13)" /var/www/

Аудит Ρ„Π°ΠΉΠ»ΠΎΠ² SSH authorized_keys для всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ:

find /home -name "authorized_keys" -exec grep -H "." {} ;

ΠŸΡ€ΠΈ использовании VPS с cPanel эти Π°ΡƒΠ΄ΠΈΡ‚Ρ‹ особСнно Π²Π°ΠΆΠ½Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ срСды cPanel Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ нСсколько Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ², ΠΈ компромСтация ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… поисков

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΡŒΡ‚Π΅ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ поиска, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄Π° Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ:

find /var/www -maxdepth 3 -type f -name "*.php" -exec grep -l "eval(" {} ;

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ripgrep для Π·Π°Π΄Π°Ρ‡, ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎ скорости. Π₯отя здСсь это Π½Π΅ рассматриваСтся ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ, rg Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² 3–10 Ρ€Π°Π· быстрСС, Ρ‡Π΅ΠΌ grep Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… Π±Π°Π·Π°Ρ… благодаря ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΡƒ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡƒΠΌΠ½ΠΎΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ². Он доступСн Π² рСпозиториях Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° дистрибутивов:

apt install ripgrep   # Debian/Ubuntu
yum install ripgrep   # CentOS/RHEL

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ поиск с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ time для сравнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ²:

time grep -r "pattern" /large/directory/

Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ поиска Π² /proc ΠΈ /sys β€” эти Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ зависания ΠΈΠ»ΠΈ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ бСссмыслСнный Π²Ρ‹Π²ΠΎΠ΄:

grep -r --exclude-dir={proc,sys,dev} "pattern" /

Π’Ρ‹Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°: ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ

БцСнарийРСкомСндуСмая ΠΊΠΎΠΌΠ°Π½Π΄Π°
Быстрый поиск ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ слову Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈgrep -rn "keyword" /path/
Поиск Ρ†Π΅Π»ΠΎΠ³ΠΎ слова Π±Π΅Π· ΡƒΡ‡Ρ‘Ρ‚Π° рСгистраgrep -rniw "keyword" /path/
Поиск Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²grep -r --include="*.conf" "keyword" /path/
Поиск Π² Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…find /path -mtime -1 -exec grep -l "keyword" {} ;
Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ поиск Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π΅Ρ€Π΅Π²ΡŒΡΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²`find /path -print0xargs -0 grep -l "keyword"`
Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ структурированных Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π»ΠΎΠ³ΠΎΠ²awk '/pattern/ { print $1, $NF }' logfile
Поиск Π² сТатых Π»ΠΎΠ³Π°Ρ…zgrep "keyword" /var/log/*.gz
ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π»ΠΎΠ³ΠΎΠ² Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ`tail -f /var/log/file.loggrep –line-buffered "pattern"`
Аудит бСзопасности Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… строкgrep -rPl "eval(base64_decode" /var/www/

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ тСхничСскиС Π²Ρ‹Π²ΠΎΠ΄Ρ‹

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ grep -rniw Π² качСствС стандартного рСкурсивного поиска β€” ΠΎΠ½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ рСгистр, Ρ†Π΅Π»Ρ‹Π΅ слова ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° строк Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄.
  • ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ -print0 с find ΠΈ -0 с xargs для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠΌΡ‘Π½ Ρ„Π°ΠΉΠ»ΠΎΠ², содСрТащих ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ -exec grep ... {} + (Π·Π½Π°ΠΊ плюс вмСсто Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой) для объСдинСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Π·ΠΎΠ² grep ΠΈ сниТСния Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° процСссы.
  • grep -R (заглавная R) слСдуСт ΠΏΠΎ символичСским ссылкам; grep -r β€” Π½Π΅Ρ‚. Π—Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ трСбуСтся Π² вашСй срСдС.
  • УстанавливайтС LC_ALL=C ΠΏΠ΅Ρ€Π΅Π΄ grep Π² скриптах, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ сниТСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ·-Π·Π° Π»ΠΎΠΊΠ°Π»ΠΈ ΠΈ нСоТиданностСй с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ.
  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΠΉΡ‚Π΅ поиск с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ --include ΠΈ --exclude-dir для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° сопоставлСния шаблонов.
  • Для ΠΌΠ½ΠΎΠ³ΠΎΠ°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π½Ρ‹Ρ… хостинговых срСд, управляСмых Ρ‡Π΅Ρ€Π΅Π· ПанСли управлСния VPS, ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π°ΡƒΠ΄ΠΈΡ‚Ρ‹ содСрТимого ΠΊΠ°ΠΊ задания cron с использованиСм этих ΠΊΠΎΠΌΠ°Π½Π΄ для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ бСзопасности.
  • Π’ срСдах ΠžΠ±Ρ‰Π΅Π³ΠΎ Π²Π΅Π±-хостинга ΠΏΡ€Π°Π²Π° Π½Π° поиск ΠΏΠΎ содСрТимому ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ хостинг-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠΌ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π΄Π΅Ρ€Π΅Π²Π° Ρ„Π°ΠΉΠ»ΠΎΠ² вашСго собствСнного Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°.

Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

Каков самый быстрый способ поиска тСкста Π²ΠΎ всСх Ρ„Π°ΠΉΠ»Π°Ρ… Π½Π° сСрвСрС Linux?

Для скорости Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π΅Ρ€Π΅Π²ΡŒΡΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ grep -r --include="*.ext" "pattern" /path/ с ограничСниями ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ установитС ripgrep (rg "pattern" /path/), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² 3–10 Ρ€Π°Π· быстрСС стандартного grep Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… Π±Π°Π·Π°Ρ….

Как ΠΈΡΠΊΠ°Ρ‚ΡŒ строку Π² Ρ„Π°ΠΉΠ»Π°Ρ…, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ --exclude-dir ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ grep: grep -r --exclude-dir={.git,node_modules,vendor} "pattern" /path/. Для поисков Π½Π° основС find ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ -not -path "*/dirname/*" ΠΏΠ΅Ρ€Π΅Π΄ условиСм -exec.

Π’ Ρ‡Ρ‘ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ grep -r ΠΈ grep -R?

grep -r выполняСт рСкурсивный поиск, Π½ΠΎ Π½Π΅ слСдуСт ΠΏΠΎ символичСским ссылкам. grep -R выполняСт Ρ‚ΠΎΡ‚ ΠΆΠ΅ рСкурсивный поиск ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слСдуСт ΠΏΠΎ символичСским ссылкам. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ -R Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΌ Π΄Π΅Ρ€Π΅Π²Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ Π½Π΅Ρ‚ цикличСских символичСских ссылок.

МоТно Π»ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ содСрТимоС Π²Π½ΡƒΡ‚Ρ€ΠΈ сТатых Π»ΠΎΠ³-Ρ„Π°ΠΉΠ»ΠΎΠ² .gz Π±Π΅Π· ΠΈΡ… распаковки?

Π”Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ zgrep "pattern" /var/log/file.log.gz для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ zgrep "pattern" /var/log/*.gz для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сТатых Ρ„Π°ΠΉΠ»ΠΎΠ². Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ стандартному grep.

Как ΠΈΡΠΊΠ°Ρ‚ΡŒ многострочный шаблон Π² Ρ„Π°ΠΉΠ»Π°Ρ… Linux?

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ grep выполняСт сопоставлСниС построчно ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ нСсколько строк. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ grep -P с Perl-совмСстимыми рСгулярными выраТСниями ΠΈ n для символов Π½ΠΎΠ²ΠΎΠΉ строки, ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ pcregrep -M "line1nline2" file Ссли доступСн pcregrep. Для слоТного многострочного извлСчСния awk с ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ RS (Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ записСй) часто являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ.