Команда bzegrep в Ubuntu: поиск в архивах bz2 без распаковки

Введение: эффективная работа со сжатыми логами

При расследовании инцидентов и сопровождении Linux-серверов инженерам регулярно приходится разбирать журналы, упакованные архиватором bzip2. Традиционный подход с предварительной декомпрессией таких архивов создает избыточную нагрузку на дисковую подсистему и отнимает много времени. Утилита bzegrep решает эту задачу иначе: она производит контекстный поиск прямо внутри сжатых файлов .bz2, поддерживая расширенный синтаксис регулярных выражений (ERE). Ниже представлены базовые и продвинутые приемы работы с этой командой на наглядных примерах.

Подготовка тестового стенда и пакета bzip2

Инструмент bzegrep поставляется в составе пакета bzip2. При необходимости развернуть его в системе выполните установку через пакетный менеджер APT:

apt-get update -qq && apt-get install -y bzip2

Чтобы изолировать практические опыты, выделим отдельный рабочий каталог /tmp/bzegrep-lab и перейдем в него с помощью цепочки mkdir -p /tmp/bzegrep-lab && cd /tmp/bzegrep-lab:

mkdir -p /tmp/bzegrep-lab && cd /tmp/bzegrep-lab

Сформируем тестовый файл журнала app.log, содержащий записи различных уровней важности:

printf ‘2026-10-15 10:00:01 INFO Server started\n2026-10-15 10:05:23 WARN High memory usage\n2026-10-15 10:12:45 ERROR Database connection failed\n2026-10-15 10:15:10 FATAL System crash detected\n’ > app.log

Для создания сжатого файла с сохранением исходного журнала вызовем архиватор с ключом -k: bzip2 -k app.log.

bzip2 -k app.log

Проверим корректность создания архивного файла app.log.bz2, просмотрев подробные сведения командой ls -lh app.log.bz2:

ls -lh app.log.bz2

Базовый поиск строк внутри архивов bz2

Для выполнения следующих шагов подтвердим рабочую директорию вызовом cd /tmp/bzegrep-lab:

cd /tmp/bzegrep-lab

С помощью bzegrep извлечем строки с маркером ERROR непосредственно из архива app.log.bz2. Утилита разворачивает поток на лету и сразу транслирует совпадения в терминал без записи распакованных данных на накопитель:

bzegrep ‘ERROR’ app.log.bz2

Если регистр символов в логах неоднороден, параметр -i позволяет игнорировать разницу между заглавными и строчными буквами при фильтрации по слову warn:

bzegrep -i ‘warn’ app.log.bz2

Чтобы точно знать, в каком месте исходного документа зафиксировано событие, укажем опцию -n. В выводе для фрагмента Database перед текстом строки отобразится ее порядковый номер (3):

bzegrep -n ‘Database’ app.log.bz2

Фильтрация с помощью расширенных регулярных выражений (ERE)

Перейдем в каталог стенда командой cd /tmp/bzegrep-lab:

cd /tmp/bzegrep-lab

Спецификатор bzegrep поддерживает синтаксис egrep. Оператор дизъюнкции (|) дает возможность отбирать события категорий ERROR или FATAL в рамках одного запроса:

bzegrep ‘ERROR|FATAL’ app.log.bz2

Для более строгой локализации можно задать структурный шаблон. Найдем только те строки, которые стартуют с даты в формате ISO и продолжаются метками WARN или ERROR:

bzegrep ‘^[0-9]{4}-[0-9]{2}-[0-9]{2}.*(WARN|ERROR)’ app.log.bz2

Для подавления стандартных информационных сообщений и выделения сбойных ситуаций пригодится ключ инвертирования -v, исключающий все вхождения маркера INFO:

bzegrep -v ‘INFO’ app.log.bz2

Пакетное сканирование множества архивов и агрегация результатов

Убедимся в нахождении в тестовой папке вызовом cd /tmp/bzegrep-lab:

cd /tmp/bzegrep-lab

Для моделирования многофайловой рабочей среды сформируем дополнительный лог-файл worker.log:

printf ‘2026-10-15 11:00:00 INFO Service healthy\n2026-10-15 11:20:11 ERROR Timeout error\n’ > worker.log

Выполним сжатие нового журнала командой bzip2 worker.log:

bzip2 worker.log

При поиске слова ERROR по шаблону *.bz2 добавим ключ -H, чтобы имя конкретного архива всегда предшествовало найденной строке:

bzegrep -H ‘ERROR’ *.bz2

Если подробный текст событий не требуется, а нужно быстро составить реестр сбойных архивов, аргумент -l выведет исключительно список файлов с найденным совпадением:

bzegrep -l ‘ERROR’ *.bz2

Для быстрой количественной оценки инцидентов можно применить ключ -c, который возвращает итоговое количество совпадений по каждому архиву отдельно:

bzegrep -c ‘ERROR’ *.bz2

Освоив команду bzegrep в Ubuntu, системный администратор получает мощное средство оперативной диагностики. Отсутствие необходимости во временной распаковке тяжелых дампов экономит дисковое пространство и ощутимо ускоряет локализацию неисправностей.