Linuxには圧縮・解凍のコマンドが複数あり、それぞれ拡張子も圧縮アルゴリズムも異なります。間違ったコマンドを使えば「このファイルは処理できない」とエラーが出るだけです。
この記事では、Linuxで使われる主要な圧縮・解凍コマンド(compress/uncompress、gzip/gunzip、bzip2/bunzip2、xz/unxz)を体系的に解説します。拡張子別の使い分け方、実際の実行例、処理速度と圧縮率の比較まで一気にまとめます。
・拡張子(.Z/.gz/.bz2/.xz)でコマンドを使い分けるのが基本
・gzip -d / bzip2 -d / xz -d で解凍、-k オプションで元ファイルを保持できる
・圧縮率は xz > bzip2 > gzip、処理速度は gzip が最速
・tar と組み合わせる場合は -z(gzip)/-j(bzip2)/-J(xz)フラグを使う
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
Linuxの圧縮コマンドを整理する
Linuxには歴史的な経緯から複数の圧縮形式が並立しています。まず全体像を把握しましょう。| コマンド | 拡張子 | アルゴリズム | 特徴 |
|---|---|---|---|
| compress / uncompress | .Z | LZW | 古いUnix由来。現在はほぼ使われない |
| gzip / gunzip | .gz | DEFLATE | 最も普及。処理速度が速い |
| bzip2 / bunzip2 | .bz2 | BWT+Huffman | gzipより高圧縮。やや遅い |
| xz / unxz | .xz | LZMA2 | 最高圧縮率。処理時間が長い |
compress / uncompress コマンド(.Z形式)
1. uncompressの基本構文
compressコマンドで圧縮されたファイル(拡張子 .Z)を復元するのがuncompressです。# 書式 uncompress [オプション] ファイル名 # 主なオプション # -c 復元結果を標準出力に出力する(元ファイルは残る) # -f 同名ファイルが存在しても確認せず上書きする # -v 処理結果の詳細を表示する
2. uncompressの実行例
実際の.Zファイルを使った実行例です。# 圧縮ファイルを確認します $ ls -l proftpd-1.3.5.tar.Z -rw-r--r--. 1 root root 13005949 6月 16 12:17 2014 proftpd-1.3.5.tar.Z # 復元します(.Z拡張子が取れてtarファイルになります) $ uncompress proftpd-1.3.5.tar.Z # 復元後のファイルを確認します $ ls -l proftpd-1.3.5.tar -rw-r--r--. 1 root root 28354560 6月 16 12:17 2014 proftpd-1.3.5.tar
# 元ファイルを残したまま復元する $ uncompress -c proftpd-1.3.5.tar.Z > proftpd-1.3.5.tar
3. compressで圧縮する
# ファイルを.Z形式で圧縮します $ compress pakira.txt # pakira.txt.Z が生成され、元のpakira.txtは削除されます # 圧縮後のファイルを確認します $ ls -l pakira.txt.Z -rw-r--r--. 1 root root 2340 4月 7 12:00 pakira.txt.Z
gzip / gunzip コマンド(.gz形式)
最も使われる圧縮コマンドです。RHEL系・Debian系問わず標準インストールされています。1. gzipの基本構文とオプション
# 書式 gzip [オプション] ファイル名 # 主なオプション # -d 解凍する(gunzip と同等) # -k 元ファイルを残したまま圧縮する(--keep) # -c 結果を標準出力に出力する # -r ディレクトリを再帰的に処理する # -v 処理詳細を表示する(圧縮率も表示) # -1 ~ -9 圧縮レベル指定(-1=最速/低圧縮、-9=最遅/高圧縮、デフォルトは-6) # -l 圧縮ファイルの情報を表示する(元サイズ・圧縮後サイズ・圧縮率)
2. gzipで圧縮する
# ファイルを圧縮します(元ファイルは削除されます) $ gzip access.log $ ls -lh access.log.gz -rw-r--r-- 1 root root 1.2M 4月 7 12:00 access.log.gz # -v で圧縮率を確認しながら圧縮します $ gzip -v access.log access.log: 82.3% -- replaced with access.log.gz # 元ファイルを残したまま圧縮します(-k オプション) $ gzip -k access.log $ ls -lh access.log access.log.gz -rw-r--r-- 1 root root 6.8M 4月 7 12:00 access.log -rw-r--r-- 1 root root 1.2M 4月 7 12:00 access.log.gz
3. gunzip(gzip -d)で解凍する
# 方法1: gunzip コマンドを使う $ gunzip access.log.gz # 方法2: gzip -d を使う(gunzip と同等) $ gzip -d access.log.gz # 解凍せずに内容を確認する(zcat / zless) $ zcat access.log.gz | head -5 192.168.1.10 - - [07/Apr/2026:10:00:01 +0900] "GET / HTTP/1.1" 200 4523 ...
4. 圧縮ファイルの情報を確認する
# -l で圧縮ファイルの情報を表示します $ gzip -l access.log.gz compressed uncompressed ratio uncompressed_name 1243648 6815744 81.8% access.log
bzip2 / bunzip2 コマンド(.bz2形式)
gzipより高い圧縮率を誇りますが、処理速度はやや遅くなります。Linuxカーネルのソースコードは長らく.tar.bz2形式で配布されていました。1. bzip2の基本構文とオプション
# 書式 bzip2 [オプション] ファイル名 # 主なオプション # -d 解凍する(bunzip2 と同等) # -k 元ファイルを残したまま処理する(--keep) # -c 結果を標準出力に出力する # -v 処理詳細を表示する # -1 ~ -9 圧縮レベル指定(デフォルト -9) # -t ファイルの整合性テスト(解凍はしない)
2. bzip2で圧縮・解凍する
# ファイルを.bz2形式で圧縮します $ bzip2 access.log $ ls -lh access.log.bz2 -rw-r--r-- 1 root root 1.0M 4月 7 12:00 access.log.bz2 # 元ファイルを残したまま圧縮します $ bzip2 -k access.log # 解凍します $ bunzip2 access.log.bz2 # または $ bzip2 -d access.log.bz2 # 解凍せずに内容を確認する(bzcat) $ bzcat access.log.bz2 | head -3
xz / unxz コマンド(.xz形式)
現在最も高い圧縮率を実現するコマンドです。RHEL/Rocky Linux/AlmaLinuxのRPMパッケージは.xz形式で配布されています。処理時間が長いため、頻繁に参照するファイルよりアーカイブ用途に向いています。1. xzの基本構文とオプション
# 書式 xz [オプション] ファイル名 # 主なオプション # -d 解凍する(unxz と同等) # -k 元ファイルを残したまま処理する(--keep) # -c 結果を標準出力に出力する # -v 処理詳細を表示する # -0 ~ -9 圧縮レベル指定(デフォルト -6) # -l .xzファイルの情報を表示する # -T N 使用するCPUスレッド数(-T 0 で全コア使用)
2. xzで圧縮・解凍する
# ファイルを.xz形式で圧縮します(大きいファイルは時間がかかります) $ xz access.log $ ls -lh access.log.xz -rw-r--r-- 1 root root 892K 4月 7 12:00 access.log.xz # -v で圧縮状況を確認しながら実行します $ xz -v access.log access.log (1/1) 100 % 892.0 KiB / 6.5 MiB = 0.134 # 元ファイルを残したまま圧縮します $ xz -k access.log # 解凍します $ unxz access.log.xz # または $ xz -d access.log.xz # 解凍せずに内容を確認する(xzcat) $ xzcat access.log.xz | head -3 # マルチスレッドで高速圧縮(全コア使用) $ xz -T 0 large_file.tar
tarと組み合わせた圧縮・解凍(.tar.gz / .tar.bz2 / .tar.xz)
実務でよく使うのは「tarでまとめながら圧縮」するパターンです。tarコマンドにフラグを追加するだけで連動できます。1. tarの圧縮フラグ一覧
| フラグ | 形式 | 拡張子 |
|---|---|---|
| -z | gzip | .tar.gz(または.tgz) |
| -j | bzip2 | .tar.bz2 |
| -J | xz | .tar.xz |
2. 圧縮アーカイブの作成
# gzip圧縮でアーカイブ作成 $ tar czf backup.tar.gz /var/log/nginx/ # bzip2圧縮でアーカイブ作成 $ tar cjf backup.tar.bz2 /var/log/nginx/ # xz圧縮でアーカイブ作成 $ tar cJf backup.tar.xz /var/log/nginx/ # -v を加えると処理中のファイル名を表示します $ tar czfv backup.tar.gz /var/log/nginx/
3. 圧縮アーカイブの展開
# gzip圧縮アーカイブを展開 $ tar xzf backup.tar.gz # bzip2圧縮アーカイブを展開 $ tar xjf backup.tar.bz2 # xz圧縮アーカイブを展開 $ tar xJf backup.tar.xz # 展開先ディレクトリを指定する場合は -C オプションを使います $ tar xzf backup.tar.gz -C /tmp/restore/ # 圧縮形式を自動判別して展開(tar -xf だけでもOK) $ tar xf backup.tar.gz $ tar xf backup.tar.bz2 $ tar xf backup.tar.xz
4. 圧縮アーカイブの内容確認(展開せずに)
# 内容一覧の表示(展開せずに確認) $ tar tzf backup.tar.gz var/log/nginx/ var/log/nginx/access.log var/log/nginx/error.log $ tar tjf backup.tar.bz2 $ tar tJf backup.tar.xz # または自動判別 $ tar tf backup.tar.gz
圧縮形式の比較と使い分け
実際に6.8MBのApacheアクセスログを圧縮した結果です(RHEL 9.4環境)。| 形式 | 圧縮後サイズ | 圧縮率 | 処理時間(目安) | 展開速度 |
|---|---|---|---|---|
| gzip(-6) | 1.2 MB | 82% | 約0.3秒 | 速い |
| bzip2(-9) | 1.0 MB | 85% | 約1.2秒 | やや遅い |
| xz(-6) | 892 KB | 87% | 約3.8秒 | 遅い |
・頻繁に展開するログファイル → gzip(速度優先)
・長期保存・転送コスト削減 → xz(圧縮率優先)
・既存の.bz2アーカイブの操作 → bzip2(互換性)
・古いUnixシステムとのやり取り → compress/uncompress
トラブルシュート・よくあるエラー
「command not found」が出た場合
bzip2やxzは最小インストールでは省略される場合があります。# RHEL系でインストール $ sudo dnf install bzip2 xz # Debian/Ubuntu系でインストール $ sudo apt install bzip2 xz-utils
「gzip: access.log.gz already exists; do you wish to overwrite?」と聞かれた場合
同名の .gz ファイルがすでに存在しています。上書きするなら「y」、しないなら「n」を入力してください。スクリプト内で自動処理したい場合は -f(強制上書き)オプションを使います。# 強制上書きして圧縮 $ gzip -f access.log
「gzip: access.log.gz: not in gzip format」が出た場合
拡張子は.gzでもファイルが壊れているか、実際には異なる形式です。fileコマンドで確認しましょう。# ファイルの実際の形式を確認します $ file access.log.gz access.log.gz: bzip2 compressed data, block size = 900k # bzip2だったのでbunzip2で解凍します $ bunzip2 access.log.gz
圧縮・解凍中にディスク不足でエラーが出た場合
圧縮は展開元ファイルと圧縮後ファイルの両方が一時的に必要です。ディスクに十分な空き容量があることを確認してください。# ディスク使用状況を確認します $ df -h / Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 50G 32G 18G 65% /
本記事のまとめ
Linuxの圧縮・解凍コマンドは拡張子を見ると使うコマンドが決まります。| やりたいこと | コマンド |
|---|---|
| .Zファイルを解凍する | uncompress ファイル名.Z |
| .gzファイルを解凍する | gunzip ファイル名.gz |
| .bz2ファイルを解凍する | bunzip2 ファイル名.bz2 |
| .xzファイルを解凍する | unxz ファイル名.xz |
| gzipで圧縮(元ファイルも残す) | gzip -k ファイル名 |
| xzで圧縮(元ファイルも残す) | xz -k ファイル名 |
| tarでgzip圧縮アーカイブを作成 | tar czf archive.tar.gz ディレクトリ |
| tar.gz/.bz2/.xzを展開する | tar xf archive.tar.gz |
| 圧縮ファイルの形式を確認する | file ファイル名 |
file コマンドでファイルの実際の形式を確認する習慣をつけてください。拡張子に惑わされずに正確な判断ができます。
Linuxサーバー運用の基礎を体系的に学びたい方へ
圧縮・解凍コマンドに限らず、Linuxサーバー管理では「コマンドは知っているが、なぜそう使うのかが分からない」という壁にぶつかります。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:gunzipコマンドでgzファイルを解凍する方法|gzip -dとの違い・オプションも解説
- 前のページへ:gzipコマンドでファイルを圧縮・解凍する方法|tar.gzやzcatの使い方も
- この記事の属するカテゴリ:Linuxコマンド・LinuxコマンドU-Z・圧縮・解凍・アーカイブ管理コマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます