概要
Linux環境でディスク容量を節約するためにbzip2形式で圧縮された巨大なログファイルを調査する際、わざわざ展開してから検索するのはストレージの圧迫や余計な処理時間を招く原因になります。bzgrepコマンドを活用すれば、.bz2アーカイブを展開することなく、目的の文字列パターンをダイレクトに抽出可能です。本記事では、テスト環境の立ち上げから大文字・小文字の無視、行番号の出力、複数アーカイブにまたがる横断検索まで、実務ですぐに役立つ実践テクニックを解説します。
1. 検証環境のセットアップとサンプルbzip2ファイルの作成
bzgrepおよび圧縮ユーティリティを導入するため、apt-get update -qq && apt-get install -y bzip2を実行して環境を整えます。

ログ検索の検証用データとして、catコマンドを用いて模擬的なアクセスログserver_access.logを作成します。

元ファイルを消失させずにテスト用アーカイブを作成するため、-kオプションを付与してbzip2 -k server_access.logを実行します。

圧縮が正常に完了したことを確かめるため、ls -lh server_access.log.bz2で生成された.bz2ファイルの詳細情報を確認します。

2. bzgrepによる基本検索と大文字・小文字を区別しない検索 (-i)
アーカイブを展開することなくファイル内の特定文字列を検出するため、bzgrep "ERROR" server_access.log.bz2を実行します。
デフォルトでは大文字と小文字が厳密に区別されるため、大文字のERRORに完全一致するレコードのみが標準出力に表示されます。

表記揺れを許容して大文字・小文字を問わず抽出したい場合は、-iオプションを指定してbzgrep -i "error" server_access.log.bz2を実行します。
大文字・小文字の違いを無視してすべての合致行がリストアップされ、調査漏れを防ぐことができます。

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. 複数.bz2ファイルの一括横断検索と正規表現の活用
複数の圧縮ファイルを対象にした検索を再現するため、cp server_access.log.bz2 server_access_backup.log.bz2でアーカイブのバックアップ複製を作成します。

ワイルドカード(*.log.bz2)と拡張正規表現オプション(-E)を組み合わせ、bzgrep -n -E "(ERROR|WARN)" *.log.bz2を実行します。
カレントディレクトリ内のすべての圧縮ログを対象に、ERRORまたはWARNを含む行を一括でスキャンできます。
出力には対象ファイル名と行番号(-n)が併記されるため、複数世代のログファイルにまたがる障害や警告の発生ポイントもスムーズに追跡可能です。

展開の手間を省き、.bz2圧縮ファイルの中身をダイレクトに調査できるbzgrepコマンドの基本操作と実務テクニックを紹介しました。
ディスク容量の消費を抑えつつ調査作業を迅速化できるため、大容量の過去ログやバックアップ解析にぜひ活用してみてください。