ファイルの圧縮と解凍

ファイルの圧縮と解凍 とは

ファイルを圧縮・解凍するコマンドをターミナルで操作します。容量を節約しましょう。本レッスンでは、ファイルの圧縮と解凍 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

なぜ重要か

ログを S3 に上げる、ソースコードのアーカイブを開発者に渡す、バックアップを別サーバーにコピーする。Linux サーバーでファイルをまとめて送るときに必ず登場するのが targzip です。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詳細表示
-zgzip 圧縮も同時に行う
-jbzip2 圧縮
-Jxz 圧縮
-C dir展開先ディレクトリを指定

gzip 単体も覚えておきましょう。

ターミナル

gzip file.txt # file.txt.gz に圧縮 (元ファイルは消える) gunzip file.txt.gz # 解凍 gzip -k file.txt # 元ファイルを残して圧縮

動作の図解

diagram (will load when visible)

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.gzgzip速い汎用 (互換性が高い)
.tar.bz2bzip2遅いサイズ重視のバックアップ
.tar.xzxz最も高い遅いソース配布 (kernel.org)
.tar.zstzstandard非常に速いコンテナイメージ・ログ転送

近年では 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 アーカイブ名、-z gzip、-C 展開先
  • 展開前に -t で中身を確認する習慣を持つ
  • 単体ファイルなら gzip、複数ファイルなら tar -czvf が定番
  • 用途に応じて gzip / bzip2 / xz / zstd を使い分ける

次のレッスン

次は stat でファイル情報を確認する で、ファイルの属性やタイムスタンプを確認する方法を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. tar と gzip の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. tar と gzip とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

課題

  1. tar -czf で圧縮アーカイブを作る
  2. tar -xzf で展開する
  3. 展開後のファイル一覧を表示する

ヒント

script.sh
script.sh
学習モード
script.sh
ターミナル出力