Команды Linux и навыки работы с оболочкой
grep: поиск в Linux как профессионал
grep выдерживает каждое обновление инструментальной цепочки, потому что задача никогда не меняется: найти важные строки внутри текста, который растет быстрее, чем кто-либо его очищает. Его реальная сила заключается в словаре флагов, который превращает поиск в ответ: окружающий контекст, списки имен файлов, инвертированные совпадения и коды завершения, по которым может разветвляться сценарий оболочки. Когда сервер плохо себя ведет, расследование начинается с grep и чаще всего, чем кто-либо признает, этим же и заканчивается.
Главное
- Рекурсивный поиск с целью: grep -rni 'fail2ban' /var/log --include='*.log' самостоятельно пропускает двоичные файлы и сжатые архивы; простой grep -r поверх /var/log преподает этот урок медленным способом.
- Контекст делает совпадения читабельными: -A 3 показывает строки после, -B 3 перед, -C 5 обе; -l выводит только имена файлов, -c подсчитывает совпадения для каждого файла, а -L инвертирует список в недостающие.
- Коды выхода являются частью контракта: 0 означает совпадение, 1 означает отсутствие совпадения, 2 означает ошибку; сценарий, который запускает grep -q и игнорирует это различие, одинаково обрабатывает успех и молчание.
- Списки цепочек файлов безопасны для нулевых значений: grep -rlZ 'ssl_protocols' /etc/nginx --include='*.conf' | xargs -0 -r ls -l; отбросьте пару Z и -0, и первое имя файла с пробелом разорвет конвейер.
- Используйте -E в качестве уровня регулярного выражения по умолчанию для читаемого чередования и используйте -P (обходы, классы \d) только тогда, когда вы согласны с тем, что это расширение GNU, которое BSD grep не поддерживает.
- -F рассматривает шаблон как буквальный текст: быстрее и невосприимчив к метасимволам регулярного выражения, проникающим из переменных, вставленных прямо из заявки.
- --exclude-dir=.git и --exclude-dir=node_modules запрещают рекурсивный поиск в существующих каталогах только для того, чтобы замедлить его; явно записывайте имена в скриптах, поскольку раскрытие скобок — это удобство bash, а не функция grep.
- Разделите привычки: --color=auto для интерактивного удобства, отсутствие цвета в сценариях (управляющие последовательности повреждают журналы) и -n (номера строк), чтобы следующий человек мог найти вставленное вами место.
Заметка из практики
Однажды в 2 часа ночи я пробежал с помощью команды grep -r всю ферму журналов клиента и получил сорок минут тишины за свои хлопоты; добавление --include='*.log' и -l немедленно завершило заявку. Привычки включения и завершения кода теперь действуют раньше шаблона.
Частые вопросы
Почему grep иногда печатает «совпадения двоичных файлов» вместо моей строки?
NUL-байт рядом с совпадением заставляет GNU grep считать файл двоичным; добавьте -a, чтобы принудительно использовать текстовый режим, или -I, чтобы полностью пропустить двоичные файлы, что является правильным значением по умолчанию для каталогов смешанных журналов.
Должен ли я использовать вместо этого ripgrep?
ripgrep работает быстрее и по умолчанию пропускает двоичные и скрытые файлы, но grep существует в каждом ящике, к которому вы когда-либо подключаетесь по SSH, включая образы восстановления. Сначала изучите grep; доберитесь до rg, где он установлен.
Как искать повернутые сжатые журналы?
zgrep прозрачно ищет файлы .gz, а zstdgrep охватывает включенную новую ротацию компрессоров; вчерашняя игла обычно живет внутри одного из них, поэтому инструменты считаются элементарной гигиеной.
Как мне сопоставить слово, но не более длинное слово, содержащее его?
Используйте -w для совпадения по всему слову и -x для совпадений по всей строке; когда шаблонам нужны части слов, классы символов, такие как [Ss]erver, обеспечивают точный контроль без выравнивания регистра повсюду.
Как мы берём на себя команды linux и навыки работы с оболочкой
Это то, чем мы занимаемся каждый день: Команды и сценарии сценариев, которые решают, управляет ли администратор сервером или борется с ним: поиск, преобразование, передача и контроль текста и процессов с помощью инструментов, которые есть в каждой базовой установке. Наша услуга Безопасность серверов Linux и Администрирование серверов закрывает задачу целиком — оценка, внедрение, круглосуточный мониторинг и экстренная реакция в течение 30 минут.