InfraAcademy

InfraAcademy Blog

【Linux】ファイルを圧縮するコマンドzip,gzip,bzip2について解説

| #Linux #Linux初心者

こんにちは、フルスタックエンジニアのryuです。

Linuxでログをまとめたい。 大きなファイルを圧縮して、別のサーバーへ送りたい。

そんなとき、targzipzipなど、似たようなコマンドが出てきて迷いませんか?

先に覚えておきたいのは、ファイルをまとめることと、容量を小さくすることは別の処理だということです。

この記事では、Linuxでよく使う圧縮・解凍コマンドの違いと、実際の使い方を初心者向けに解説します。

Linuxのアーカイブと圧縮の違い

複数のファイルを1つにまとめることを、アーカイブと呼びます。

一方、データの表現方法を変えて容量を小さくすることが圧縮です。

例えば、tarは複数のファイルを1つにまとめるアーカイブコマンドです。

gzipbzip2xzは、基本的に1つのファイルを圧縮します。

そのため、複数のファイルをまとめて圧縮するときは、tarと圧縮方式を組み合わせます。

複数ファイル
↓ tarで1つにまとめる
archive.tar
↓ gzipで圧縮する
archive.tar.gz

zipは、複数ファイルのアーカイブと圧縮を1つの形式で行えます。

Linuxの圧縮形式を比較する

主な形式を整理すると、以下の通りです。

形式 拡張子 複数ファイル 特徴
ZIP .zip まとめられる Windowsなどとも交換しやすい
gzip .gz.tar.gz 単体では不可 Linuxで広く使われ、処理も比較的速い
bzip2 .bz2.tar.bz2 単体では不可 gzipより小さくなる場合があるが処理は重め
xz .xz.tar.xz 単体では不可 高い圧縮率を得やすいが処理時間がかかる場合がある
tar .tar まとめられる 単体では基本的に圧縮しない

圧縮率や処理速度は、ファイルの種類やサイズ、オプションによって変わります。

どの状況でもbzip2やxzが必ず最小になるわけではありません。

日常的なバックアップやログ保存ではtar.gz、Windows利用者へ渡す場合はZIPなど、用途で選ぶと分かりやすいです。

zipコマンドで圧縮する

ZIPは、複数のファイルやディレクトリを1つのファイルへまとめて圧縮できます。

ファイルを圧縮する場合は、出力するZIPファイル名と対象を指定します。

zip documents.zip report.txt memo.txt

ディレクトリをまとめる場合は、-rを付けます。

zip -r backup.zip backup/

作成したZIPファイルの中身は、以下のコマンドで確認できます。

unzip -l backup.zip

解凍する場合はunzipを使います。

unzip backup.zip

解凍先を指定する場合は、-dを付けます。

unzip backup.zip -d restored/

環境によっては、zipとunzipが最初から入っていません。

UbuntuやDebian系では、以下のようにインストールできます。

sudo apt update
sudo apt install zip unzip

RHEL系では、以下の通りです。

sudo dnf install zip unzip

gzipコマンドで圧縮する

gzipは、基本的に1つのファイルを圧縮するコマンドです。

gzip access.log

実行すると、通常は元のaccess.logがなくなり、access.log.gzが作成されます。

元ファイルも残したい場合は、-kを付けます。

gzip -k access.log

解凍には、gunzipを使います。

gunzip access.log.gz

次の書き方でも解凍できます。

gzip -d access.log.gz

圧縮ファイルを展開せず、内容だけ確認したい場合はzcatが便利です。

zcat access.log.gz | less

ログ調査では、一度解凍して元ファイルを作らなくても内容を読めます。

bzip2コマンドで圧縮する

bzip2も、基本的には1つのファイルを圧縮します。

bzip2 database.sql

通常は、元のファイルがdatabase.sql.bz2へ置き換わります。

元ファイルを残す場合は、-kを付けてください。

bzip2 -k database.sql

解凍にはbunzip2を使います。

bunzip2 database.sql.bz2

次のコマンドでも解凍できます。

bzip2 -d database.sql.bz2

gzipより容量を小さくできる場合がありますが、圧縮・解凍に時間がかかることもあります。

小さなファイルでは差がほとんど出ない場合もあるため、目的に合わせて選びましょう。

xzコマンドで圧縮する

xzは、Linuxのソースコードや配布ファイルでも見かける圧縮形式です。

圧縮する場合は、以下のように実行します。

xz large-file.dat

通常は、元ファイルがlarge-file.dat.xzへ置き換わります。

元ファイルを残す場合は、-kを付けます。

xz -k large-file.dat

解凍する場合は、unxzを使います。

unxz large-file.dat.xz

次の書き方でも解凍できます。

xz -d large-file.dat.xz

xzは高い圧縮率を得られる場合がありますが、圧縮に時間がかかることがあります。

頻繁に作成・展開するファイルでは、処理時間も含めて検討してください。

tarコマンドで複数ファイルをまとめる

tarは、複数のファイルやディレクトリを1つのアーカイブへまとめます。

圧縮せずにまとめる場合は、以下の通りです。

tar -cf backup.tar backup/

主なオプションの意味は以下です。

オプション 意味
-c 新しいアーカイブを作成する
-x アーカイブを展開する
-t 中身を一覧表示する
-f アーカイブファイル名を指定する
-v 処理するファイル名を表示する
-z gzipを使用する
-j bzip2を使用する
-J xzを使用する

tarについては、tarコマンドの使い方とアーカイブの展開方法でも詳しく解説しています。

tar.gzを作成・展開する

Linuxでよく使われるのが、tarとgzipを組み合わせた.tar.gzです。

ディレクトリを圧縮する場合は、以下のように実行します。

tar -czf backup.tar.gz backup/

処理するファイル名も表示したい場合は、-vを付けます。

tar -czvf backup.tar.gz backup/

展開前に中身を確認します。

tar -tzf backup.tar.gz

展開する場合は、以下の通りです。

tar -xzf backup.tar.gz

展開先を指定する場合は、先にディレクトリを作成し、-Cを使います。

mkdir restored
tar -xzf backup.tar.gz -C restored/

tar.bz2とtar.xzを作成する

bzip2を使用する場合は、-jを指定します。

tar -cjf backup.tar.bz2 backup/

展開する場合は、以下の通りです。

tar -xjf backup.tar.bz2

xzを使用する場合は、-Jを指定します。

tar -cJf backup.tar.xz backup/

展開は以下です。

tar -xJf backup.tar.xz

GNU tarなどでは、tar -xf ファイル名だけで圧縮形式を自動判別して展開できる場合があります。

ただ、学習中はzjJと拡張子の関係も知っておくと、コマンドを読みやすくなります。

圧縮ファイルを展開する前に確認する

外部から受け取ったアーカイブは、いきなり重要なディレクトリで展開しない方が安全です。

まず、中身を一覧表示します。

tar -tf backup.tar.gz
unzip -l backup.zip

その後、空の作業用ディレクトリへ展開します。

mkdir /tmp/archive-check
tar -xf backup.tar.gz -C /tmp/archive-check

アーカイブ内のファイル名や階層が想定と違う場合、現在のディレクトリへ大量のファイルが展開されることがあります。

既存ファイルと同じ名前が含まれていないかも確認しましょう。

圧縮後のファイルを確認する

コマンドがエラーにならなかっただけで、作業完了と判断しないことが大切です。

ファイルサイズを確認します。

ls -lh backup.tar.gz

tar形式なら、中身を表示します。

tar -tf backup.tar.gz | head

ZIPでは、次のコマンドを使います。

unzip -l backup.zip

必要な場合は、別のディレクトリへテスト展開して、ファイルが読めることまで確認します。

バックアップは、作成できたことより、復元できることの方が重要です。

Linuxで圧縮コマンドを選ぶ基準

どれを使うべきか迷った場合は、次のように考えます。

利用場面 選びやすい形式
Linux内でディレクトリを保存する .tar.gz
WindowsやmacOSの利用者へ渡す .zip
1つのログを手早く圧縮する .gz
容量をより小さくしたい .bz2.xzも比較する
長期バックアップ 復元テストと利用環境を優先する

私はエンジニアとして10年以上Linuxを使っていますが、圧縮率だけで形式を選ぶことはほとんどありません。

展開する環境で扱えるか、処理時間は問題ないか、運用担当者が迷わないかまで考えます。

特にバックアップでは、珍しい形式で少し小さくするより、誰でも復元できる形式にする方が安全な場合があります。

Linuxの圧縮・解凍コマンドまとめ

複数ファイルを1つにまとめる処理がアーカイブで、容量を小さくする処理が圧縮です。

Linuxでは、tarとgzipを組み合わせた.tar.gzがよく使われます。

tar -czf backup.tar.gz backup/
tar -xzf backup.tar.gz

Windowsなどとファイルを交換する場合は、ZIPも分かりやすい選択肢です。

zip -r backup.zip backup/
unzip backup.zip

gzip、bzip2、xzは通常、元ファイルを圧縮ファイルへ置き換えます。

元ファイルを残す場合は、対応している環境で-kを付けましょう。

Linuxコマンドを実際に練習したい方へ

InfraAcademyでは、ブラウザ上のLinux環境でファイルを作成し、圧縮・展開コマンドを実行しながら学習できます。

基本的なファイル操作から学びたい方は、Linux入門講座を確認してみてください。

より実践的なコマンドやサーバー運用を学びたい方は、Linux中級講座がおすすめです。

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る