Обзор возможностей утилиты
На серверах под управлением Linux системные журналы нередко сжимают алгоритмом bzip2 ради экономии дискового пространства. Однако извлечение увесистых файлов ради проверки пары строк создает лишнюю нагрузку на ввод-вывод и отнимает время. Утилита bzgrep решает эту задачу изящно: она позволяет сканировать содержимое файлов .bz2 на лету, минуя этап ручной декомпрессии. В этом руководстве мы разберем практические сценарии применения инструмента — от базовой фильтрации до работы с регулярными выражениями и группой архивов.
1. Развертывание тестового окружения и генерация архива
Перед началом работы убедимся в наличии необходимого пакета bzip2, установив его через штатный менеджер пакетов: apt-get update -qq && apt-get install -y bzip2.

Для демонстрации поисковых возможностей сформируем файл журнала server_access.log с типовыми событиями с помощью утилиты cat:

Чтобы упаковать файл и сохранить исходный текстовый документ на диске, запустим сжатие с флагом -k: bzip2 -k server_access.log.

Убедимся в успешном создании архива и оценим его размер с помощью команды ls -lh server_access.log.bz2.

2. Базовые запросы и регистронезависимый поиск (-i)
Для быстрого поиска нужного шаблона внутри архива достаточно выполнить команду вида bzgrep "ERROR" server_access.log.bz2.
По умолчанию утилита строго учитывает регистр, отбирая только строки с точным вхождением заглавных букв ERROR.

Если требуется сопоставить паттерн независимо от регистра символов, укажите флаг -i: bzgrep -i "error" server_access.log.bz2.
Это позволяет выявить все родственные записи (error, Error, ERROR), не упустив ни одной детали инцидента.

3. Вывод номеров строк (-n), подсчет совпадений (-c) и инверсия (-v)
При работе с массивными дампами важно быстро находить контекст ошибки. Ключ -n добавляет к найденным строкам их порядковые номера: bzgrep -n "ERROR" server_access.log.bz2.
Благодаря этому можно сразу перейти к проблемному участку в исходных данных.

Когда требуется получить лишь общую статистику инцидентов без вывода полотна текста, используйте параметр -c: bzgrep -c "INFO" server_access.log.bz2.
Команда выведет точное число строк, удовлетворяющих заданному критерию.

Для отсечения рутинных сообщений пригодится инвертированная фильтрация -v: bzgrep -v "INFO" server_access.log.bz2.
Такой подход скрывает стандартные информационные записи, выводя исключительно предупреждения и ошибки, требующие внимания администратора.

4. Пакетная обработка нескольких архивов и регулярные выражения
Чтобы смоделировать сценарий группового анализа ротированных логов, создадим дубликат архива командой cp server_access.log.bz2 server_access_backup.log.bz2.

С помощью маски (*.log.bz2) и расширенных регулярных выражений (-E) выполним комплексный запрос: bzgrep -n -E "(ERROR|WARN)" *.log.bz2.
Утилита параллельно просмотрит все подходящие архивы в каталоге, находя события обоих типов.
В результирующем потоке выводятся имя соответствующего файла и номер строки (-n), что существенно упрощает локализацию сбоев в распределенных логах.

Мы разобрали базовые и продвинутые приемы работы с bzgrep, открывающие прямой доступ к содержимому файлов .bz2.
Внедрение этой команды в повседневную практику избавит вас от рутинного развертывания архивов, экономя дисковое пространство и время при аудите серверной инфраструктуры.