こんにちは、フルスタックエンジニアのryuです。
Linuxでログをまとめたい。 大きなファイルを圧縮して、別のサーバーへ送りたい。
そんなとき、tar、gzip、zipなど、似たようなコマンドが出てきて迷いませんか?
先に覚えておきたいのは、ファイルをまとめることと、容量を小さくすることは別の処理だということです。
この記事では、Linuxでよく使う圧縮・解凍コマンドの違いと、実際の使い方を初心者向けに解説します。
Linuxのアーカイブと圧縮の違い¶
複数のファイルを1つにまとめることを、アーカイブと呼びます。
一方、データの表現方法を変えて容量を小さくすることが圧縮です。
例えば、tarは複数のファイルを1つにまとめるアーカイブコマンドです。
gzip、bzip2、xzは、基本的に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 ファイル名だけで圧縮形式を自動判別して展開できる場合があります。
ただ、学習中はz、j、Jと拡張子の関係も知っておくと、コマンドを読みやすくなります。
圧縮ファイルを展開する前に確認する¶
外部から受け取ったアーカイブは、いきなり重要なディレクトリで展開しない方が安全です。
まず、中身を一覧表示します。
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中級講座がおすすめです。