Linux環境で運用をしていると、ログの肥大化やバックアップ容量の増加など、「ファイルサイズ」に関する悩みは必ずと言っていいほど発生します。 そのときに最初に覚えておきたいのが、シンプルで扱いやすい圧縮コマンドである「gzip」です。
この記事では、gzipコマンドの基本構文から全オプションの意味、よくある実行例、tarとの連携方法までを一つの記事で俯瞰できるように整理しています。 単なるコマンドリファレンスではなく、「どの場面でどのオプションを組み合わせると便利か」という実務目線も交えつつ解説していきます。
gzipは、LinuxやUnix系OSで標準的に利用されるファイル圧縮コマンドで、拡張子「.gz」の圧縮ファイルを扱います。 主にテキストファイルの圧縮率が高く、ログや設定ファイルなどの圧縮に広く使われています。
gzipは可逆圧縮のため、圧縮前とまったく同じ内容のファイルに戻せる点が特徴です。 多くのLinuxディストリビューションでは標準インストールされており、追加パッケージなしで利用できるケースがほとんどです。
gzipの基本構文は次の通りです。
gzip [オプション] ファイル名...gzip:ファイルを圧縮、あるいはオプション付きで解凍も可能な本体コマンド。gunzip:実態はgzipの別名で、解凍専用として使われることが多い。zcat / zless / zmore:圧縮ファイルを伸張せずに内容を表示するためのコマンド群。gunzip file.gzgzip -d file.gzどちらもfile.gzを解凍し、元のfileを復元しつつ.gzの方を削除します。 元の圧縮ファイルも残したい場合は、gzip -dk file.gzのように-kを併用します。
gzipは「ファイル単体」を対象とするコマンドであり、ディレクトリ自体を1つのアーカイブにまとめる機能はありません。 ディレクトリを丸ごと1ファイルにしたい場合は、tarと組み合わせて.tar.gzを作成します。
一方、gzip -r dir のように-rオプションを付けると、指定ディレクトリ配下の全ファイルを再帰的に個別圧縮します。 この場合、各ファイルがそれぞれ *.gz になり、元ファイルはデフォルトでは削除されるため、必要に応じて -k を併用します。
gzip -d file.gz のように指定すると、gzipが解凍モードで動作し、.gzファイルを元のファイルに戻します。 gunzipコマンドとほぼ同じ挙動で、スクリプト内で明示的にgzipを使いたい場合に指定されます。
-dは-kや-cと組み合わせると強力で、gzip -dkなら元の.gzを残して解凍し、gzip -dcなら伸張結果を標準出力に流す形になります。
デフォルトでは、圧縮後に元のファイルは削除されますが、-kを付けると元ファイルも残ります。 検証中やバックアップ時に安全を重視する場合は、gzip -k file のように利用すると安心です。
解凍でも同様に-kが使え、gzip -dk file.gzのようにすると.gzと展開後ファイルを両方保持できます。
gzip -r dir で、dir配下のすべての通常ファイルを再帰的に圧縮します。 ログディレクトリ全体などを一括で圧縮したいときに有効ですが、各ファイルが個別に.gzになる点に注意してください。
ディレクトリそのものをひとまとめにしたい場合は、tar czf backup.tar.gz dir のようにtarを利用します。
gzip -c file > file.gz とすると、圧縮結果が標準出力に書き出され、それをリダイレクトして保存する形になります。 この場合、元ファイルはそのまま残り、パイプで他コマンドへ渡す処理にも使えます。
例えば gzip -dc file.gz | less のようにすると、解凍結果を一時ファイルを作らずに閲覧できます。
-fは既存ファイルの上書きや、通常はスキップされる状況でも強制的に処理を続行させたいときに使います。 自動スクリプトで対話的な確認を避けたい場合に有効ですが、意図しない上書きによるデータ損失に注意が必要です。
gzipでは-1〜-9まで圧縮レベルを指定でき、デフォルトは中庸な値です。
-1:処理速度重視(低圧縮率)。CPUが厳しい環境やリアルタイム処理向き。-6:速度と圧縮率のバランスが良く、一般的な用途でよく使われるレベル。-9:圧縮率最優先で、処理時間は長くなるもののディスクや帯域を節約したいときに有効です。gzip -t file.gz はファイルを実際には展開せず、ヘッダやチェックサムを検証して破損の有無だけをチェックします。 バックアップの検証や、ネットワーク転送後のファイル確認などに便利です。
gzip -l file.gz で、圧縮前サイズ、圧縮後サイズ、圧縮率、元ファイル名といった統計情報を一覧できます。 複数ファイルを指定すると合計値も表示されるため、どのディレクトリがストレージを圧迫しているか判断する材料にもなります。
gzipは元ファイル名やタイムスタンプをヘッダに記録し、解凍時に復元する機能を持ちます。
ビルド成果物の再現性や、タイムスタンプ管理ポリシーが重要な環境で意味を持ちます。
gzip -S .gz2 file のように指定すると、生成される圧縮ファイルの拡張子を任意のものに変更できます。 既存運用との整合性や、ツール連携の都合で.gz以外の拡張子を使いたい場合に利用されます。
複数ファイルやディレクトリを1つのアーカイブとしてまとめてからgzip圧縮するのが、典型的な.tar.gzの運用です。
tar czf archive.tar.gz dir tar xzf archive.tar.gz このように、「ファイル単体はgzip」「ディレクトリ単位はtar+gzip」という住み分けを覚えておくと、用途ごとに選びやすくなります。
NginxやApacheなどのWebサーバでは、テキスト系コンテンツをgzip圧縮して配信することで、転送量削減と表示速度改善を狙うのが一般的です。 たとえばNginxではgzip on;やgzip_comp_level、gzip_typesなどのディレクティブを用いてオンザフライ圧縮を設定します。
また、静的アセットを事前に*.gzとして生成し、Webサーバ側でクライアントのAccept-Encodingに応じて gz ファイルを直接返す「事前圧縮」運用もよく使われます。
.gz圧縮してディスク容量を節約する。tarとgzipを組み合わせ、ディレクトリ全体を.tar.gzとしてまとめて遠隔地に転送する。gzip -cとパイプでつなぎ、ストリーム処理や一時ファイル削減を行う。gzipコマンドはシンプルながら、オプションを組み合わせることでログ管理、バックアップ、Web配信など多様な場面で活躍します。 特に-k(元ファイル保持)、-r(再帰)、-c(標準出力)、圧縮レベル(-1〜-9)の使い分けを押さえれば、実務レベルの活用が可能です。
tarとの連携で.tar.gzを扱えるようになれば、ディレクトリ単位の運用もカバーでき、Linuxサーバのディスク効率が大幅に向上します。 日常的にコマンドラインを触るエンジニアにとって、gzipは必須ツールとして定着させる価値があります。
Linuxについて学びたい人はこちらもチェック