gzipコマンドでファイルを圧縮・解凍する方法|tar.gzやzcatの使い方もコマンド


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドF-J, 圧縮・解凍・アーカイブ管理コマンド > gzipコマンドでファイルを圧縮・解凍する方法|tar.gzやzcatの使い方もコマンド
「gzipで圧縮したけど元ファイルが消えた」「gunzipとgzip -dの違いが分からない」「tar.gzとの関係が曖昧」
Linuxでファイルを圧縮する場面は、バックアップ・ログの保管・ファイル転送など日常的に発生します。

この記事では、Linuxの gzip コマンドの基本的な使い方から、gunzipzcat との使い分け、圧縮レベルの選び方、tar との組み合わせ、パイプを活用した実務テクニック、さらに xzbzip2 との比較まで、現場で必要な知識を網羅的に解説します。

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

gzipコマンドとは?Linuxで最も使われる圧縮コマンド

gzip(GNU zip)は、Linuxで最も広く使われているファイル圧縮コマンドです。圧縮されたファイルには .gz という拡張子が付きます。

最大の特徴は「元ファイルを削除して .gz ファイルに置き換える」という動作です。これを知らずに実行すると「ファイルが消えた」と焦ることになるので、まずこの挙動をしっかり押さえてください。

gzip は1ファイルずつ圧縮するコマンドです。ディレクトリをまとめて1つのファイルにするには tar と組み合わせる必要があります(後述)。

基本的な使い方 ~ 圧縮・解凍・中身の確認

1. ファイルを圧縮する(gzip)

最もシンプルな使い方です。ファイル名を指定するだけで圧縮できます。

# ファイルを圧縮する(元ファイルは削除される) $ ls -l access.log -rw-r--r-- 1 root root 15728640 Mar 19 10:00 access.log $ gzip access.log $ ls -l access.log.gz -rw-r--r-- 1 root root 1245678 Mar 19 10:00 access.log.gz

圧縮後、元の access.log は削除され、access.log.gz だけが残ります。タイムスタンプとパーミッションは元ファイルから引き継がれます。

2. 元ファイルを残して圧縮する(-k)

元ファイルを削除されたくない場合は -k(keep)オプションを付けます。

# 元ファイルを残したまま圧縮する $ gzip -k access.log $ ls -l access.log* -rw-r--r-- 1 root root 15728640 Mar 19 10:00 access.log -rw-r--r-- 1 root root 1245678 Mar 19 10:00 access.log.gz

本番環境でログファイルを圧縮する際は、万が一に備えて -k を付ける癖をつけておくと安心です。

3. 圧縮ファイルを解凍する(gzip -d / gunzip)

.gz ファイルを元に戻す(解凍する)方法は2通りあります。

# 方法1:gzip -d で解凍する $ gzip -d access.log.gz # 方法2:gunzip で解凍する(gzip -d と同じ動作) $ gunzip access.log.gz

gunzipgzip -d のエイリアス(別名)です。どちらを使っても動作は同じなので、打ちやすい方を使えば問題ありません。

解凍時も元の .gz ファイルは削除されます。残したい場合は -k を付けてください。

# .gzファイルを残したまま解凍する $ gzip -dk access.log.gz

4. 圧縮ファイルの中身を確認する(zcat)

解凍せずに中身を確認したい場合は zcat を使います。cat コマンドのgzip版だと考えてください。

# 解凍せずに中身を表示する $ zcat access.log.gz # grep と組み合わせて特定の文字列を検索する $ zcat access.log.gz | grep "404" # less と組み合わせてページ送りで閲覧する $ zcat access.log.gz | less

圧縮されたログファイルから特定のエラーを探す場面で非常に便利です。わざわざ解凍してディスク容量を使う必要がありません。

なお、zgrep を使えば zcat | grep を1コマンドで実行できます。

# zcat | grep と同じ結果を1コマンドで得る $ zgrep "404" access.log.gz

5. 圧縮率や圧縮前後のサイズを確認する(-l / -v)

圧縮後のファイルについて、圧縮前のサイズや圧縮率を確認できます。

# 圧縮ファイルの情報を表示する $ gzip -l access.log.gz compressed uncompressed ratio uncompressed_name 1245678 15728640 92.1% access.log

圧縮時に -v(verbose)を付けると、圧縮率がリアルタイムで表示されます。

# 圧縮率を表示しながら圧縮する $ gzip -v access.log access.log: 92.1% -- replaced with access.log.gz

圧縮レベルを使い分ける(-1 ~ -9)

gzip には1(最速・低圧縮率)から9(最遅・高圧縮率)までの圧縮レベルがあります。デフォルトは -6 です。

# 最速で圧縮する(圧縮率は低い) $ gzip -1 large_file.log # 最高圧縮率で圧縮する(時間がかかる) $ gzip -9 large_file.log # デフォルト(-6 と同じ) $ gzip large_file.log

実務での使い分けの目安は次の通りです。

-1(最速):ディスク容量に余裕があり、圧縮速度を優先したい場合。リアルタイムのパイプ処理やバックアップスクリプトで有効
-6(デフォルト):ほとんどの用途で最適なバランス。特に理由がなければこのまま使う
-9(最高圧縮):長期保管するアーカイブなど、容量を最優先する場合。圧縮にかかる時間は長くなるが、-6と比べて劇的に小さくなるわけではない

多くの場合、デフォルトの -6 で十分です。-9 にしても圧縮率は数%しか改善しないことが多い一方、圧縮時間は大きく増えます。

ディレクトリ内を一括圧縮する(-r)

-r(recursive)オプションを使うと、ディレクトリ内のファイルを再帰的に圧縮できます。

# /var/log/old/ 内のファイルを全て圧縮する $ gzip -r /var/log/old/

ただし、gzip -r はディレクトリをまとめて1つのファイルにするわけではありません。各ファイルが個別に .gz 化されます。ディレクトリごと1つのアーカイブにしたい場合は tar を使ってください。

tarコマンドとの関係 ~ .tar.gz を理解する

gziptar の違いを整理しておきましょう。

gzip:1つのファイルを圧縮するコマンド。ディレクトリや複数ファイルのアーカイブ機能はない
tar:複数のファイルやディレクトリを1つのアーカイブファイル(.tar)にまとめるコマンド。それ自体に圧縮機能はない

この2つを組み合わせたのが .tar.gz(tarでまとめてからgzipで圧縮)です。tar コマンドの -z オプションで、アーカイブと圧縮を1コマンドで実行できます。

# ディレクトリをtar.gzとしてアーカイブ+圧縮する $ tar -czf backup.tar.gz /var/www/html/ # tar.gzを解凍+展開する $ tar -xzf backup.tar.gz # tar.gzの中身を一覧表示する(解凍せずに確認) $ tar -tzf backup.tar.gz

1ファイルだけの圧縮:gzip ファイル名 で十分
ディレクトリや複数ファイルをまとめて圧縮:tar -czf アーカイブ名.tar.gz 対象 を使う

パイプと組み合わせた実務テクニック

gzip はパイプ(標準入出力)との相性が良く、他のコマンドと組み合わせることで強力なバックアップ手順が構築できます。

6. データベースのバックアップを直接圧縮する

mysqldump の出力をパイプで gzip に渡すと、ディスクに一時ファイルを作らずに圧縮されたバックアップが取れます。

# MySQLのバックアップを直接圧縮して保存する $ mysqldump -u root -p dbname | gzip > /backup/dbname_$(date +%Y%m%d).sql.gz # 圧縮されたバックアップをリストアする $ zcat /backup/dbname_20260319.sql.gz | mysql -u root -p dbname

7. ログをリアルタイムに圧縮しながら保存する

大量の出力を圧縮しながらファイルに保存できます。

# tcpdumpの出力を圧縮しながら保存する $ tcpdump -i eth0 | gzip > /tmp/capture_$(date +%Y%m%d).txt.gz # 標準入力から読み込んで圧縮する $ cat largefile.csv | gzip > largefile.csv.gz

8. SSH経由でファイルを圧縮転送する

リモートサーバーへのファイル転送時に、パイプで圧縮・解凍を挟むことで転送量を削減できます。

# ローカルのディレクトリをリモートサーバーに圧縮転送する $ tar -cf - /var/www/html/ | gzip | ssh user@remote "cat > /backup/html_backup.tar.gz"

xz・bzip2との比較 ~ どれを使うべきか

Linux環境では gzip の他にも bzip2xz といった圧縮コマンドがあります。それぞれの特徴を整理します。

項目 gzip bzip2 xz
拡張子 .gz .bz2 .xz
圧縮率 中程度 高い 最も高い
圧縮速度 最も速い 遅い 最も遅い
解凍速度 最も速い 遅い 速い
tar連携オプション -z -j -J
主な用途 日常の圧縮全般 配布パッケージ 長期アーカイブ

結論として、日常的な運用では gzip を選んでおけば間違いありません。速度と圧縮率のバランスが最も良く、あらゆるLinux環境に標準で入っています。

長期保管で容量を最小限にしたい場合は xz、過去の配布物で見かける .bz2 ファイルの解凍には bzip2 -d を使う、という程度で十分です。

トラブルシュート ~ gzipで起きるエラーと対処法

「not in gzip format」が出た場合

gzip -dgunzip でこのエラーが出た場合、対象のファイルがgzip形式ではありません。

$ gunzip data.gz gzip: data.gz: not in gzip format

まず file コマンドで実際のファイル形式を確認してください。

# ファイルの実際の形式を確認する $ file data.gz data.gz: ASCII text

拡張子が .gz でも中身がgzip形式とは限りません。単にリネームされただけのテキストファイルだったり、ダウンロードが途中で失敗した不完全なファイルだったりします。

「already has .gz suffix -- unchanged」が出た場合

既に .gz 拡張子が付いているファイルを圧縮しようとすると、このメッセージが表示されます。

$ gzip data.gz gzip: data.gz already has .gz suffix -- unchanged

二重圧縮を防ぐための安全機能です。どうしても圧縮したい場合は -f(force)オプションで強制できますが、通常は必要ありません。

「No space left on device」が出た場合

ディスク容量が不足していると圧縮処理が失敗します。gzip は圧縮中に一時的に元ファイルと圧縮ファイルの両方がディスク上に存在するため、元ファイルと同程度の空き容量が必要です。

# ディスク使用量を確認する $ df -h # 不要なファイルを削除して空き容量を確保してから再実行する

「Permission denied」が出た場合

圧縮対象のファイルや出力先ディレクトリへの書き込み権限がない場合に発生します。ファイルのパーミッションを確認し、必要に応じて sudo を付けて実行してください。

# パーミッションを確認する $ ls -l /var/log/access.log # root権限で圧縮する $ sudo gzip /var/log/access.log

本記事のまとめ

やりたいこと コマンド
ファイルを圧縮する gzip ファイル名
元ファイルを残して圧縮する gzip -k ファイル名
圧縮ファイルを解凍する gzip -d ファイル名.gz
解凍せずに中身を確認する zcat ファイル名.gz
圧縮率を確認する gzip -l ファイル名.gz
最速で圧縮する gzip -1 ファイル名
最高圧縮率で圧縮する gzip -9 ファイル名
ディレクトリ内を一括圧縮する gzip -r ディレクトリ名
ディレクトリをtar.gzにする tar -czf アーカイブ名.tar.gz 対象
DBバックアップを直接圧縮する mysqldump -u root -p DB名 | gzip > backup.sql.gz
圧縮済みgzファイルを検索する zgrep "検索文字列" ファイル名.gz

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。