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

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

Последнее обновление: сентябрь 7, 2026 8 min read Прахлад Праджапати
Полное руководство пользователя по команде Grep в Linux

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

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


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

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

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

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


Базовый синтаксис и Must Ознакомьтесь с вариантами

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

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 "PermitRootLogins+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?

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 А структурированное ведение журналов позволяет немедленно применить эти методы для более быстрой и понятной диагностики.

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

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

Наверх