LinuxLinux [リナックス / ライナックス]オープンソースのOSカーネルで過去のログファイルを調査する際、gzip圧縮された.gzファイルをわざわざ解凍してから検索していませんか?zgrepコマンドを使えば、圧縮ファイルを解凍せずにそのまま文字列検索することができます。
本記事では、zgrepコマンドの基本的な使い方から便利なオプション、複数ファイルの一括検索、findコマンドとの組み合わせによる再帰検索まで、実行例を交えて解説します。
記事のポイント
-
zgrepはgzip圧縮ファイルを解凍せずに検索できるコマンド 内部で解凍とgrepを一括処理するため、ディスク容量を消費せずに検索が可能。
-
通常のgrepとほぼ同じオプションが使える
-i(大文字小文字無視)、-n(行番号表示)、-v(除外検索)など、grepの主要なオプションをそのまま利用可能。 -
ワイルドカードで複数ファイルの一括検索ができる
zgrep "keyword" *.gzのように指定すれば、複数の圧縮ファイルをまとめて検索可能。 -
findコマンドと組み合わせて再帰検索も可能 ディレクトリ配下の圧縮ファイルを一括で検索する実践テクニックも紹介。
zgrepコマンドとは
zgrepコマンドは、gzip形式(.gz)で圧縮されたファイルに対して、解凍することなく直接文字列検索を行えるLinuxコマンドです。
内部的にはファイルの解凍とgrepによる検索を一連の処理として実行しますが、一時ファイルを作成しないためディスク容量を消費せずに検索できるのが特徴です。
また、zgrepは圧縮されていない通常のファイルに対してもそのまま使用できます。そのため、圧縮ログと非圧縮ログが混在するディレクトリでもzgrep一つでまとめて横断検索が可能です。
通常のgrepコマンドと使い方がほぼ同じなので、grepを使い慣れている方であればすぐに使いこなすことができます。ただし、一部サポートされていないオプションがあるため、その違いについては後述の「zgrepとgrepの違い」を参照してください。
zgrepコマンドの基本的な使い方
基本構文
zgrepの基本構文は以下の通りです。
zgrep [オプション] "検索文字列" 圧縮ファイル名通常のgrepと同じように、検索したい文字列と対象ファイルを指定して実行します。
コマンド例:圧縮ファイルから文字列を検索
以下の例は、access.log.gzからerrorという文字列を検索します。
zgrep "error" access.log.gzマッチした行がそのまま標準出力に表示されます。解凍用の一時ファイルは作成されないため、ディスク容量を圧迫しません。
zgrepコマンドの便利なオプション
zgrepでは、通常のgrepと同様のオプションが利用できます。ここでは実務で使用頻度の高いオプションを紹介します。
大文字・小文字を区別せず検索(-iオプション)
-iオプションを指定すると、大文字・小文字を区別せずに検索できます。
zgrep -i "error" application.log.gzこのコマンドでは「Error」「ERROR」「error」のいずれにもマッチします。
行番号を表示して検索(-nオプション)
-nオプションを付けると、マッチした行の行番号を合わせて表示します。
zgrep -n "timeout" application.log.gz行番号があることで、ログの発生箇所を素早く特定できます。
マッチしない行を表示(-vオプション)
-vオプションを使うと、指定した文字列を含まない行を表示します。
zgrep -v "DEBUG" application.log.gzDEBUGレベルのログを除外してエラーや警告だけを確認したい場合に便利です。
マッチした件数を表示(-cオプション)
-cオプションを付けると、マッチした行の「件数」のみを表示します。
zgrep -c "error" access.log.gzエラーの発生頻度を素早く把握したい場合に活用できます。
マッチしたファイル名のみを表示(-lオプション)
複数ファイルを検索する際に、-lオプションを付けるとマッチしたファイル名だけが表示されます。
zgrep -l "OutOfMemory" /var/log/app/*.gzどのログファイルにエラーが記録されているかを素早く特定できます。
複数の圧縮ファイルをまとめて検索
ワイルドカードで一括検索
ワイルドカード(*)を使用すると、複数の圧縮ファイルをまとめて検索できます。
zgrep "error" /var/log/nginx/*.gzこのコマンドは/var/log/nginx/配下のすべての.gzファイルを検索します。複数ファイルを検索する場合、デフォルトで検索結果にファイル名が表示されます。
特定の期間のログファイルだけを検索
ファイル名に日付が含まれるログファイルの場合、ワイルドカードで期間を絞り込めます。
zgrep "error" access.log-2026080*.gz上記の例では2026年8月1日〜9日(日付の十の位が0のファイル、すなわち01〜09日)のログファイルを対象に検索します。8月10日(20260810)は十の位が1(2026081*のパターン)に該当するため、十の位が0を対象とした2026080*の検索結果には含まれません。8月上旬(1〜10日)全体を対象にするには、access.log-2026080*.gz access.log-20260810.gzのように10日分を追加して指定する必要があります。
findコマンドとの組み合わせで再帰検索
ディレクトリ配下の圧縮ファイルを再帰的に検索したい場合は、findコマンドと組み合わせます。
構文
find [検索ディレクトリ] -name "*.gz" -exec zgrep [オプション] "検索文字列" {} +コマンド例:ディレクトリ配下の圧縮ログを再帰検索
以下のコマンドは、/var/log/配下のすべての.gzファイルからerrorを再帰的に検索します。
find /var/log/ -name "*.gz" -exec zgrep -H "error" {} +-Hオプションを付けることで、検索結果にファイル名が表示されます。
実務で使えるzgrepのログ検索テクニック
パイプで結果をさらに絞り込む
zgrepの検索結果をパイプ(|)で他のコマンドに渡すことで、さらに細かく絞り込みができます。
zgrep "GET" access.log.gz | grep "500"上記の例では、GETリクエストのうちステータスコード500(サーバーエラー)の行だけを抽出します。
正規表現を使って検索
-Eオプションを付けると、拡張正規表現を利用した検索ができます(egrep相当)。
zgrep -E "error|warning|critical" application.log.gzerror、warning、criticalのいずれかを含む行を一度に検索できます。
検索結果の前後の行も表示する
マッチした行の前後も確認したい場合は、-A(後の行)、-B(前の行)、-C(前後の行)を使用します。
zgrep -C 3 "Exception" application.log.gzマッチした行の前後3行を合わせて表示するため、エラー発生時の文脈を把握しやすくなります。
zgrepとgrepの違い(サポートされないオプション)
zgrepは通常のgrepと多くのオプションを共有していますが、以下のオプションはサポートされていません。通常のgrepと同じ感覚で指定するとエラーになるため注意が必要です。
| サポートされないオプション | 説明 |
|---|---|
-r / -R(--recursive) | 再帰検索。findコマンドとの組み合わせで代替 |
-d(--directories) | ディレクトリの処理方法指定 |
--include / --exclude | ファイルパターンによる絞り込み・除外 |
--exclude-dir | ディレクトリの除外 |
-Z(--null) | ファイル名の後にnullnull [ヌル / ナル]値が存在しないことを表す特殊な値バイトを出力 |
-z(--null-data) | 入力データの行区切りをnullバイトとして扱う |
再帰検索を行いたい場合は、前述の「findコマンドとの組み合わせ」で紹介した方法を利用してください。
zgrepで「Binary file matches」と表示される場合
圧縮ファイルの種類や状態によっては、zgrepが対象をバイナリファイルと誤認し、Binary file matchesとだけ表示される場合があります。
この現象は、ログの中にnullバイトや制御文字が含まれている場合や、日本語ログなどでエンコーディングの問題により誤検知されるケースで発生します。また、稀にgzipファイル自体が破損している場合にも起こり得ます。
このような場合は-a(--text)オプションを付けて、テキストファイルとして強制的に処理させます。
zgrep -a "error" logfile.gzzgrepの関連コマンド
zgrep以外にも、圧縮ファイルを解凍せずに操作できるz系のコマンドがあります。
| コマンド | 説明 |
|---|---|
zgrep | 圧縮ファイルに対してgrep(文字列検索)を行う |
zcat | 圧縮ファイルの内容を標準出力に表示する(cat相当) |
zless | 圧縮ファイルの内容をページ送りで閲覧する(less相当) |
zmore | 圧縮ファイルの内容をページ送りで閲覧する(more相当) |
zdiff | 2つの圧縮ファイルの差分を表示する(diff相当) |
zegrep | 圧縮ファイルに対して拡張正規表現で検索する(grep -E相当)。非推奨のためzgrep -Eの使用を推奨 |
zfgrep | 圧縮ファイルに対して固定文字列で高速検索する(grep -F相当)。非推奨のためzgrep -Fの使用を推奨 |
zgrepコマンドのオプション一覧
本記事で紹介したオプションのまとめです。
| オプション | 説明 |
|---|---|
-i | 大文字・小文字を区別せずに検索する |
-n | マッチした行の行番号を表示する |
-v | マッチしない行を表示する(除外検索) |
-c | マッチした行の件数を表示する |
-l | マッチしたファイル名のみを表示する |
-H | 検索結果にファイル名を表示する |
-E | 拡張正規表現を使用して検索する |
-a | バイナリファイルをテキストとして処理する |
-A 数値 | マッチした行の後ろの指定行数を表示する |
-B 数値 | マッチした行の前の指定行数を表示する |
-C 数値 | マッチした行の前後の指定行数を表示する |
まとめ
zgrepコマンドは、gzip圧縮されたファイルを解凍せずに文字列検索できるLinuxの便利なコマンドです。通常のgrepとほぼ同じ使い方ができるため、学習コストも低く、すぐに実務で活用できます。
特にサーバー運用における過去ログの調査では、圧縮済みのログファイルをディスク容量を消費せずに検索できるため、非常に重宝するコマンドです。
テキスト処理・検索コマンドのまとめ Linuxのテキスト処理やファイル検索に関するその他のコマンドについては、以下のまとめ記事もあわせて参考にしてください。
ITナレッジライフ【Linux】テキスト処理・検索コマンドの使い方まとめ
Linuxのテキスト処理やファイル検索に必須のコマンド(grep, find, sed, awk等)の使い方まとめ。基本からパイプを利用した実践的な組み合わせまで、実務を効率化するテクニックを網羅しています。
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5

Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。