ファイルの圧縮と解凍
ファイルの圧縮と解凍 とは
ファイルを圧縮・解凍するコマンドをターミナルで操作します。容量を節約しましょう。本レッスンでは、ファイルの圧縮と解凍 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
なぜ重要か
ログを S3 に上げる、ソースコードのアーカイブを開発者に渡す、バックアップを別サーバーにコピーする。Linux サーバーでファイルをまとめて送るときに必ず登場するのが tar と gzip です。tar は複数ファイルやディレクトリを 1 つのアーカイブにまとめる、gzip はそのアーカイブを圧縮してサイズを縮めるという、役割分担をしています。両者を組み合わせると .tar.gz (通称 tarball) ができ、UNIX 系で広く使われています。
コンテナイメージ、Node.js の npm pack、Python の sdist、GitHub の git archive、すべて内部的には tar/gzip と同じ仕組みで動いています。圧縮形式の挙動を理解しておくと、転送効率や容量見積りで困らなくなります。
基本構文
ターミナル
tar [動作] [オプション] [アーカイブ名] [対象]よく使うオプションは次の通りです。
| オプション | 意味 |
|---|---|
| -c | アーカイブを作成 (create) |
| -x | アーカイブを展開 (extract) |
| -t | アーカイブの中身一覧 |
| -f file | 操作対象のファイル名 |
| -v | 詳細表示 |
| -z | gzip 圧縮も同時に行う |
| -j | bzip2 圧縮 |
| -J | xz 圧縮 |
| -C dir | 展開先ディレクトリを指定 |
gzip 単体も覚えておきましょう。
ターミナル
gzip file.txt # file.txt.gz に圧縮 (元ファイルは消える)
gunzip file.txt.gz # 解凍
gzip -k file.txt # 元ファイルを残して圧縮動作の図解
tar はあくまで「束ねる」だけ、圧縮そのものは gzip / bzip2 / xz が担当します。-z を付けたときは tar が裏で gzip を呼び出している、と考えるとシンプルです。
代表例
ディレクトリをまとめて gzip 圧縮します。
ターミナル
$ tar -czvf backup.tar.gz /tmp/myapp
tar: Removing leading / from member names
/tmp/myapp/
/tmp/myapp/app.py
/tmp/myapp/requirements.txt中身を確認してから展開する習慣をつけましょう。-t で一覧、-x で展開です。
ターミナル
$ tar -tzvf backup.tar.gz | head -3
drwxr-xr-x user/user 0 2026-05-20 12:00 tmp/myapp/
-rw-r--r-- user/user 120 2026-05-20 12:00 tmp/myapp/app.py別ディレクトリへ展開するには -C を指定します。
ターミナル
$ mkdir -p /tmp/restore && tar -xzvf backup.tar.gz -C /tmp/restore単体ファイルの圧縮なら gzip がシンプルです。
ターミナル
$ gzip -k bigfile.csv
$ ls -lh bigfile.csv*
-rw-r--r-- 1 user user 12M bigfile.csv
-rw-r--r-- 1 user user 3.1M bigfile.csv.gzよくある間違い
.tar.gzと.zipは別物です。Windows の.zipを Linux で扱うときはunzipパッケージが必要で、tar ではなくunzip archive.zipを使います。逆に、Mac や Windows へ tar.gz を送ると展開できないユーザがいるかもしれない点にも注意しましょう。
tar -xzvfの順番はオプションをまとめて書くときの定番です。動作 (c / x / t) は必ず最初に置き、-fの直後にアーカイブ名を続けるのを習慣化すると引数を間違えにくくなります。
やってみよう
/tmp/comp にダミーファイルを 2 つ作って tar.gz でまとめ、-t で中身を確認したあと別ディレクトリに展開してみましょう。圧縮前と後のサイズを ls -lh で比べると、効果が体感できます。
圧縮形式の比較
どの圧縮アルゴリズムを使うかで、サイズと速度のトレードオフが変わります。大まかな目安は次の通りです。
| 拡張子 | アルゴリズム | 圧縮率 | 速度 | 用途 |
|---|---|---|---|---|
| .tar.gz | gzip | 中 | 速い | 汎用 (互換性が高い) |
| .tar.bz2 | bzip2 | 高 | 遅い | サイズ重視のバックアップ |
| .tar.xz | xz | 最も高い | 遅い | ソース配布 (kernel.org) |
| .tar.zst | zstandard | 高 | 非常に速い | コンテナイメージ・ログ転送 |
近年では Facebook 発の zstandard (zstd) が、速度と圧縮率の両立で広く採用されています。GNU tar 1.31 以降は --zstd で扱えます。
大量ログを安全にローテートする例
ターミナル
$ tar -czf /backup/logs-$(date +%F).tar.gz /var/log/myapp
$ find /var/log/myapp -name '*.log' -mtime +30 -delete日付つきのアーカイブを作ってから古いログを削除する、というシンプルなパターンです。cron に登録するだけで日次バックアップが回ります。
まとめ
- tar はファイル群を 1 つにまとめるだけ、圧縮は gzip / bzip2 / xz が担当する
-c作成、-x展開、-t一覧、-fアーカイブ名、-zgzip、-C展開先- 展開前に
-tで中身を確認する習慣を持つ - 単体ファイルなら gzip、複数ファイルなら tar -czvf が定番
- 用途に応じて gzip / bzip2 / xz / zstd を使い分ける
次のレッスン
次は stat でファイル情報を確認する で、ファイルの属性やタイムスタンプを確認する方法を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- tar と gzip の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. tar と gzip とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
課題
- tar -czf で圧縮アーカイブを作る
- tar -xzf で展開する
- 展開後のファイル一覧を表示する