複数のファイルをひとまとめにしたり、ファイルサイズを小さくしたりするのがアーカイブ・圧縮の操作です。
Linuxでは tar、gzip、bzip2、zip などのコマンドが広く使われています。
tar コマンドの基本
tar(Tape Archive)はファイルやディレクトリを1つにまとめるコマンドです。
よく使うオプションを覚えておきましょう。
| オプション | 意味 |
|---|---|
-c | アーカイブを作成する(create) |
-x | アーカイブを展開する(extract) |
-t | アーカイブの中身を確認する(list) |
-v | 処理中のファイルを表示する(verbose) |
-f | 操作するファイル名を指定する(file) |
アーカイブを作る
tar -cvf archive.tar file1.txt file2.txt dir1/
file1.txt
file2.txt
dir1/
dir1/sample.txt
-f の直後にアーカイブファイル名を指定します。順番を間違えないようにしましょう。
アーカイブの中身を確認する
展開する前に何が入っているか確認するには -t を使います。
tar -tvf archive.tar
-rw-r--r-- user/user 1024 2026-06-29 10:00 file1.txt
-rw-r--r-- user/user 512 2026-06-29 10:01 file2.txt
drwxr-xr-x user/user 0 2026-06-29 10:02 dir1/
-rw-r--r-- user/user 256 2026-06-29 10:02 dir1/sample.txt
アーカイブを展開する
tar -xvf archive.tar
特定のディレクトリに展開したいときは -C オプションを使います。
tar -xvf archive.tar -C /tmp/output/
gzip で圧縮する
tar だけではサイズは変わりません。圧縮するには gzip と組み合わせます。
-z オプションを加えるだけで tar と gzip を同時に使えます。
圧縮アーカイブを作る(.tar.gz)
tar -czvf archive.tar.gz file1.txt file2.txt dir1/
拡張子は .tar.gz または .tgz が使われます。
圧縮アーカイブを展開する
tar -xzvf archive.tar.gz
bzip2 で圧縮する
bzip2 は gzip より圧縮率が高い傾向があります。-j オプションで使います。
圧縮アーカイブを作る(.tar.bz2)
tar -cjvf archive.tar.bz2 file1.txt file2.txt dir1/
圧縮アーカイブを展開する
tar -xjvf archive.tar.bz2
gzip・bzip2 を単体で使う
tar を使わずにファイル単体を圧縮・展開することもできます。
# gzip で圧縮(元ファイルが .gz に置き換わる)
gzip file1.txt
ls
# → file1.txt.gz
# gzip で展開
gunzip file1.txt.gz
# bzip2 で圧縮
bzip2 file2.txt
# → file2.txt.bz2
# bzip2 で展開
bunzip2 file2.txt.bz2
元ファイルを残したまま圧縮するには
gzip -k file1.txt(keep オプション)を使います。
zip / unzip コマンド
Windows との互換性が必要なときは zip / unzip が便利です。
# zip アーカイブを作る
zip archive.zip file1.txt file2.txt
# ディレクトリを含める場合は -r(再帰的)
zip -r archive.zip dir1/
# 展開する
unzip archive.zip
# 中身を確認する
unzip -l archive.zip
よく使うコマンドまとめ
| やりたいこと | コマンド |
|---|---|
| tar.gz を作る | tar -czvf archive.tar.gz 対象 |
| tar.gz を展開 | tar -xzvf archive.tar.gz |
| tar.bz2 を作る | tar -cjvf archive.tar.bz2 対象 |
| tar.bz2 を展開 | tar -xjvf archive.tar.bz2 |
| 中身を確認 | tar -tvf archive.tar.gz |
| zip を作る | zip -r archive.zip 対象 |
| zip を展開 | unzip archive.zip |
練習問題
問題 1
/tmp/practice/ ディレクトリを作成し、その中に3つのファイル(a.txt、b.txt、c.txt)を作ってください。
その後、3ファイルをまとめた practice.tar.gz を /tmp/ 直下に作成してください。
ヒント: mkdir -p、touch、tar -czvf を使います。
解答を見る
# ディレクトリとファイルを作成
mkdir -p /tmp/practice
touch /tmp/practice/a.txt /tmp/practice/b.txt /tmp/practice/c.txt
# /tmp 直下に圧縮アーカイブを作成
tar -czvf /tmp/practice.tar.gz -C /tmp practice/-C /tmp でカレントディレクトリを /tmp に切り替えてから practice/ を指定しています。
こうすることでアーカイブ内のパスが practice/a.txt のようにシンプルになります。
問題 2
問題1で作った /tmp/practice.tar.gz の中身をコマンドで確認し、その後 /tmp/extracted/ というディレクトリに展開してください。
解答を見る
# 中身を確認する
tar -tzvf /tmp/practice.tar.gz
# 展開先ディレクトリを作成して展開
mkdir -p /tmp/extracted
tar -xzvf /tmp/practice.tar.gz -C /tmp/extracted/
# 結果を確認
ls /tmp/extracted/practice/問題 3
カレントディレクトリにある .log ファイルをすべて圧縮アーカイブ logs.tar.bz2 にまとめるワンライナーを書いてください。
ヒント: シェルのグロブ展開(*.log)と tar -cjvf を組み合わせます。
解答を見る
tar -cjvf logs.tar.bz2 *.log.log ファイルが存在しない場合はエラーになります。
確実にファイルの存在を確認してから実行しましょう。
ls *.log 2>/dev/null && tar -cjvf logs.tar.bz2 *.log || echo ".log ファイルが見つかりません"