Только для посетителей нашего блога: получите дополнительные 3 месяца бесплатно + скидку 10% на трехгодичный план YSBLOG10
Захватить сделку

Полное руководство пользователя по команде Grep в Linux (2026) (примеры + советы)

Команда grep в Linux ищет в тексте шаблоны и возвращает соответствующие строки. Она поддерживает базовые, расширенные и совместимые с Perl регулярные выражения, работает рекурсивно по каталогам и интегрируется с конвейерами для мощной фильтрации. Используйте её для быстрого сканирования логов, исходного кода и файлов конфигурации. Синтаксис: grep [options] PATTERN [FILE...].

Если вы работаете с серверами Linux, изучение команды grep в Linux сэкономит вам часы каждую неделю. В этом руководстве объясняется практическое использование grep на реальных примерах, рассматриваются регулярные выражения, рекурсия, файловые фильтры, советы по повышению производительности и распространенные ошибки — руководство написано с точки зрения повседневного использования систем и работы с хостингом.

Что такое Grep и почему это важно??

Grep расшифровывается как «Global Regular Expression Print» (глобальная печать регулярных выражений). Он сканирует входные данные (файлы или стандартный ввод) и выводит строки, соответствующие заданному шаблону. Это быстрый, удобный для скриптов и незаменимый инструмент для разработчиков, системных администраторов и аналитиков, которым необходимо обрабатывать журналы, код и конфигурационные файлы. Linux или macOS терминалы.

Что такое GREP и почему он важен?

На производственных серверах я использовал grep для поиска неисправных конечных точек в гигабайтах веб-журналов, обнаружения вредоносных шаблонов доступа и выявления жестко закодированных секретов в кодовых базах. С правильными флагами он превращается в точный, высокоскоростной микроскоп для ваших данных.

Основные синтаксис и необходимые для понимания параметры

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

grep [OPTIONS] PATTERN [FILE...]
# Example:
grep "error" /var/log/nginx/access.log

Шпаргалка по распространенным вариантам

  • -я: Поиск без учета регистра
  • -r или -R: Рекурсивный поиск по каталогам
  • -н: Показать номера строк
  • -ЧАС: Всегда отображать имя файла
  • -в: Инвертировать совпадение (показать строки, которые НЕ совпадают)
  • -ш: Соответствовать только целым словам
  • -Икс: Совпадение только целых строк
  • -с: Подсчитайте количество совпадающих строк
  • -о: Распечатайте только совпадающую часть.
  • –color=auto: Выделить совпадения (это полезно для удобочитаемости)
# Case-insensitive search for the word "error" and show line numbers
grep -inw --color=auto "error" app.log

# Show lines that do NOT contain "200"
grep -v "200" access.log

# Count how many lines contain "timeout"
grep -c "timeout" server.log

# Search multiple files with file names
grep -H "TODO" *.py

Регулярные выражения в Grep (базовые, расширенные, PCRE)

Grep поддерживает различные механизмы регулярных выражений. По умолчанию он использует базовые регулярные выражения (BRE). Используйте -E для расширенных регулярных выражений (ERE) и -P для регулярных выражений, совместимых с Perl (PCRE), где они доступны. Старый egrep и fgrep Использование псевдонимов устарело — предпочтительнее grep -E и grep -F.

Базовые и расширенные примеры

# Lines starting with "GET" (anchor ^)
grep "^GET" access.log

# Lines ending with ".php" (anchor $)
grep "\.php$" urls.txt

# Using alternation: match foo or bar (with -E for extended)
grep -E "foo|bar" file.txt

# Match an IP-like pattern (simple, not strict)
grep -E "[0-9]{1,3}(\.[0-9]{1,3}){3}" access.log

# Print only the match (useful for extraction)
grep -Eo "[a-f0-9]{32}" checksums.txt

Советы PCRE (при наличии поддержки)

В некоторых дистрибутивах grep компилируется без -P (PCRE). При наличии поддержки можно использовать обходные пути и расширенные классы. Когда -P Если недоступно, используйте grep -E или такие инструменты, как ripgrep (rg).

# Extract emails (PCRE lookaheads/lookbehinds may vary)
grep -Po "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}" maildump.txt

Рекурсивный поиск и фильтрация файлов

Используйте рекурсию для поиска в каталогах. В сочетании с --include, --exclude и --exclude-dir сузить область исследования и повысить скорость. -I Эта опция рассматривает бинарные файлы как несоответствующие.

# Recursively search only .log files for 500 errors
grep -R --include="*.log" " 500 " /var/log

# Ignore vendor and .git directories while searching PHP code for "TODO"
grep -R --exclude-dir=vendor --exclude-dir=.git --include="*.php" "TODO" .

# Treat binary files as non-matching (skip noisy "Binary file" messages)
grep -R -I "api_key" .

# Show file names with matches only
grep -Rl "deprecated_function" src/

Для поиска сжатых логов используйте zgrep (или gzcat + grep) без ручной декомпрессии.

# Search inside gzip-compressed logs
zgrep -n "timeout" /var/log/nginx/access.log*.gz

# Or:
gzcat access.log.1.gz | grep -n "timeout"

Практические примеры использования для хостинга, DevOps и разработчиков.

Анализ логов на серверах Linux

# Find 5xx responses (space-padded for accuracy) in NGINX logs
grep -Rnw --include="access.log*" " 5[0-9][0-9] " /var/log/nginx

# Top offending IPs hitting 404 (simple aggregation)
grep " 404 " access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head

Безопасность и реагирование на инциденты

# Detect repeated SSH failures
grep -R "Failed password" /var/log/auth.log*

# Spot potential SQL injection attempts in web logs
grep -R -iE "union(\s)+select|information_schema|/etc/passwd|sleep\([0-9]+\)" /var/log/nginx

Рабочие процессы разработчиков

# Find deprecated PHP functions across the project
grep -Rnw --include="*.php" -E "(mysql_|create_function|each\()" .

# Ensure configuration keys exist across environments
grep -Rnw --include="*.env" "^APP_ENV=" /var/www

Управление приложениями на хостинговых платформах? На YouStable Наличие серверов, доступа по SSH и всестороннего хранения журналов упрощает поиск и устранение неисправностей с помощью grep, особенно при исследовании всплесков активности, медленных запросов или бот-трафика в журналах доступа/ошибок.

Сочетание Grep с другими командами Linux

Grep становится мощным инструментом в конвейерах обработки данных. Используйте его для фильтрации вывода системных утилит, контейнеров и пакетов. manageRS.

# Processes containing "nginx"
ps aux | grep -i nginx

# Kernel messages mentioning I/O errors
dmesg | grep -i "i/o"

# Journal entries for a unit
journalctl -u php-fpm | grep -i "warning"

# Network sockets filtered by port
ss -tulpn | grep ":443"

# Docker logs containing an error pattern
docker logs myapp 2>&1 | grep -i "connection reset"

Для больших списков файлов безопасно комбинируйте поиск с grep, используя записи, завершающиеся нулевым символом.

# Search only .js files, safely handling spaces/newlines
find . -type f -name "*.js" -print0 | xargs -0 grep -nH "fetch("

# Exclude directories during find, then grep
find . -type f -not -path "./node_modules/*" -name "*.ts" -print0 | xargs -0 grep -nH "TODO"

Советы по повышению производительности и типичные ошибки при написании скриптов.

Ускорьте работу Grese с большими данными.

  • Используйте -F для строк с фиксированным номером (без анализа регулярных выражений, часто намного быстрее).
  • Ограничьте работу с параметрами –include/–exclude и –exclude-dir.
  • Для уменьшения количества совпадений отдавайте предпочтение шаблонам с привязкой (^, $) или -w.
  • Используйте -m N, чтобы остановиться после N совпадений, если вам нужен только образец.
  • Установите LC_ALL=C для ускорения побайтового сравнения данных ASCII.
  • Для работы с очень большими деревьями данных рассмотрите ripgrep (rg); он оптимизирован и учитывает файл .gitignore.
# Fast fixed-string search with locale optimization
LC_ALL=C grep -RFn --include="*.log" "Connection timed out" /var/log

Двоичные файлы, нулевые значения и коды завершения

  • Бинарные файлы: Используйте -I для пропуска или –binary-files=text для принудительной обработки текста.
  • Режим с нулевым завершением: Команда `grep -z` использует символ NUL в качестве разделителя строк для специализированных данных.
  • Коды выхода: 0, если найдено совпадение, 1, если совпадения нет, 2 в случае ошибки. Используйте -q (тихий режим) в скриптах.
# Quietly test if a string exists; run action on success
if grep -q "MAINTENANCE_MODE=on" .env; then
  echo "Maintenance mode enabled"
fi

Избегайте этих распространенных ошибок при использовании команды `grep`.

  • Использование неэкранированных специальных символов. Пример: используйте «\.» для обозначения точки.
  • Использование параметра -P не рекомендуется, если ваш grep не скомпилирован с поддержкой PCRE. Проверьте с помощью... grep -P и обрабатывать ошибки.
  • Позволить оболочке неожиданно расширять шаблоны. Шаблоны цитирования: grep -E "foo|bar" file.
  • Рекурсивный обход больших или нерелевантных каталогов. Всегда используйте -R в паре с --exclude-dir.
  • Несоответствие границ слов. Для целого слова используйте -w а не импровизированные пространства.
  • ripgrep (rg): Очень быстрый рекурсивный поиск, учитывает .gitignore. Отлично подходит для кодовых баз.
  • ack / the_silver_searcher (ag): Поисковые системы, ориентированные на разработчиков, с разумными настройками по умолчанию.
  • неловко: Сканирование шаблонов с помощью действий; мощный инструмент, когда требуется обработка данных с учетом столбцов.
  • сед: Редактирование видеопотока; идеально подходит для замены текста непосредственно в тексте после поиска совпадений.

Для повседневной серверная работаgrep является основополагающим инструментом. Для больших монорепозиториев или конвейеров CI ripgrep часто обеспечивает лучшую производительность, сохраняя при этом привычные шаблоны.

Реальные жизненные ситуации и рецепты

# 1) Audit config for dangerous settings
grep -Rnw -E "PermitRootLogin\s+yes" /etc/ssh/sshd_config*

# 2) Extract unique request paths returning 500
grep " 500 " access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head

# 3) Find secrets accidentally committed (simple patterns)
grep -RInE "(AWS_SECRET|PRIVATE KEY|BEGIN RSA)" .

# 4) Inspect slow PHP-FPM logs for timeouts
grep -Ri "pool www" /var/log/php* | grep -i "slowlog"

# 5) Get context lines around matches (A=after, B=before, C=both)
grep -RinC 2 "OutOfMemoryError" /var/log/

Часто задаваемые вопросы о команде Grep в Linux

Что означает grep?

Grep расшифровывается как «Global Regular Expression Print» (глобальная печать регулярных выражений). Она ищет во входных данных строки, соответствующие заданному шаблону, и выводит их. Название восходит к команде редактора ed, которая выполняла аналогичную задачу.

Как использовать grep рекурсивно в Linux?

Используйте -R (или -r) для поиска в подкаталогах. Для повышения скорости используйте в сочетании с файловыми фильтрами: grep -R --include="*.log" "error" /var/logИсключить пути с помощью --exclude-dir.

В чём разница между grep, egrep и fgrep?

grep По умолчанию используется базовое регулярное выражение. egrep (устаревшее) равно grep -E для расширенных регулярных выражений (чередующиеся символы, +, ? без обратных косых черт). fgrep (устаревшее) равно grep -F для сопоставления фиксированных строк, что быстрее, когда не требуются функции регулярных выражений.

Как сделать так, чтобы команда `grep` работала без учета регистра и отображала номера строк?

Используйте -i для нечувствительных к регистру и -n для номеров строк: grep -in "timeout" server.log, добавлять --color=auto для мелирования.

Можно ли использовать регулярные выражения в стиле Perl (просмотр вперед, просмотр назад) с помощью команды `grep`?

Да, с -P в сборках, скомпилированных с использованием PCRE. Если вы видите ошибку "неподдерживаемый", значит, PCRE недоступен. Используйте -E Для поиска с использованием расширенных регулярных выражений можно переключиться на ripgrep, а для поиска с большим количеством PCRE-элементов — на другой алгоритм.

Как исключить определенный шаблон каталога или файла из поиска с помощью grep?

Используйте --exclude и --exclude-dir, Пример: grep -R --exclude-dir=node_modules --include="*.ts" "fetch(" .Эти фильтры уменьшают шум и ускоряют поиск.

Какие коды завершения возвращает команда grep и почему они важны?

Команда `grep` завершается с кодом 0, если найдено совпадение, с кодом 1, если совпадение не найдено, и с кодом 2 в случае ошибки. В скриптах... grep -q Обычно используется для проверки наличия без вывода результатов на экран.

Заключение

Команда Команда grep в Linux — это высокоточный инструмент для поиска. Быстрое ведение журналов, код и конфигурационные файлы. Освоение флагов, режимов регулярных выражений и шаблонов конвейера значительно ускорит поиск и устранение неисправностей и разработку. YouStable Использование серверов, SSH и структурированного логирования позволяет немедленно применять эти методы для более быстрой и наглядной диагностики.

Прахлад Праджапати

Пралад — специалист по веб-хостингу и эксперт по органическому росту сайтов с упором на SEO из Индии. Активно работая в цифровом пространстве с 2019 года, он помогает людям развивать свои веб-сайты с помощью эффективных и устойчивых стратегий. Увлеченный обучением и быстрой адаптацией, он считает, что мелкие детали приводят к большому успеху. Узнайте его мнение о веб-хостинге и SEO, чтобы улучшить свое присутствие в интернете.

Оставьте комментарий

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *

Наверх