ファイル操作 初級

アーカイブ操作(tar・gzip・zip)

Linuxでのファイル圧縮・アーカイブの基本を学ぶ。tar、gzip、bzip2、zip コマンドを使ってファイルをまとめたり展開したりする方法を解説する

複数のファイルをひとまとめにしたり、ファイルサイズを小さくしたりするのがアーカイブ・圧縮の操作です。 Linuxでは targzipbzip2zip などのコマンドが広く使われています。

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.txtb.txtc.txt)を作ってください。 その後、3ファイルをまとめた practice.tar.gz/tmp/ 直下に作成してください。

ヒント: mkdir -ptouchtar -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 ファイルが見つかりません"