Linuxの圧縮と展開|tar・gzip・zipの使い分け【初心者向け】

前の記事では、> やパイプで、コマンドの結果の行き先を変える方法を見ました。自動化を続けていると、ログや CSV がどんどんたまっていきます。そんなとき、まとめて小さくしておけると便利です。

Linux の世界では、Windows でおなじみの .zip よりも、.tar.gz という形のファイルをよく見かけます。私も最初に project.tar.gz を受け取ったとき、「ダブルクリックで開けない…どうやって中を見るの?」と困りました。

この記事では、tar・gzip・zip の違いと使い分けを、練習用のファイルで実際に試しながら整理していきます。

💡
この記事でわかること
  • tar(まとめる)と gzip(縮める)の役割の違い
  • tar で圧縮する・中身を見る・展開する方法(-czvf・-tzvf・-xzvf)
  • zip・unzip の使い方と、Windows とやりとりするときの注意
  • 展開するときに、ファイルを上書きしないための確かめ方
🔰
この記事の前提
  • ls・cd・mkdir などの基本のコマンドを使える
  • apt でソフトを入れられる(zip を入れるときに使います)

まだの方は、前の記事「Linuxのリダイレクトとパイプ|>・>>・|・2>&1 の意味を図で理解【初心者向け】」から読むのがおすすめです。

💡
用語メモ
  • 権限:誰が何をしてよいかの決まり。ファイルの場合は「持ち主・グループ・その他の人」ごとに、読む・書く・実行するを決め、これをパーミッションと言います
  • パイプ:半角の |(縦棒)で、前のコマンドの結果(標準出力)を次のコマンドに渡すこと
  • ログ:プログラムが残す「いつ、何が起きたか」の記録
  • apt:Debian・Ubuntu で、ソフトを入れる・更新する・消すための道具

用語で迷ったら、連載のまとめ記事の「よく出てくる用語ミニ辞典」でも確かめられます。


結論:Linux 同士なら tar.gz、Windows に渡すなら zip

やりたいこと コマンド
フォルダを tar.gz にまとめる tar -czvf project.tar.gz project
tar.gz の中身を見る(展開しない) tar -tzvf project.tar.gz
tar.gz を展開する tar -xzvf project.tar.gz
展開先を指定する tar -xzvf project.tar.gz -C restore
1つのファイルを縮める・戻す gzip ファイル / gunzip ファイル.gz
フォルダを zip にまとめる zip -r project.zip project
zip の中身を見る・展開する unzip -l project.zip / unzip project.zip -d 展開先

tar のオプション(=コマンドのうしろに付けて、動きを変える追加の指定)は、次の文字の組み合わせです。

  • c:create(作る)
  • t:list(中身を見る)
  • x:extract(取り出す)
  • z:gzip で縮める・戻す
  • v:verbose(処理したファイル名を表示する)
  • f:file(そのすぐ後ろにアーカイブのファイル名を書く)

しくみ:tar は「まとめる」、gzip は「縮める」

.tar.gz は、2つの作業を重ねた形です。

  1. tar で、たくさんのファイルやフォルダを1つのファイルにまとめる(.tar)。この時点では、大きさはほとんど変わりません
  2. gzip で、その1つのファイルを縮める(.gz)

tar の z オプションは、この2つを一度にやってくれます。一方、zip は「まとめる」と「縮める」を最初から1つでこなす形式です。

tar・gzip・zip の違い

準備:練習用のファイルを作る

練習は ~/linux-practice/archive-test の中で行います。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
mkdir -p ~/linux-practice/archive-test/project/data
cd ~/linux-practice/archive-test
echo "# 練習用のプロジェクト" > project/README.md
echo "date,item,amount" > project/data/sales.csv
echo "2026-08-01,りんご,300" >> project/data/sales.csv
seq 1 10000 > project/data/numbers.txt
ls -R project

🖥️
この記事の出力例について

ここから先の出力例は、Debian 13での実行例です(ユーザー名 kaito・パソコン名 demo のダミー環境)。UbuntuやWSL(=Windows の中で Linux を動かせる、Microsoft のしくみ)では、表示が少し違うことがあります。

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
kaito@demo:~/linux-practice/redirect-test$ mkdir -p ~/linux-practice/archive-test/project/data
kaito@demo:~/linux-practice/redirect-test$ cd ~/linux-practice/archive-test
kaito@demo:~/linux-practice/archive-test$ echo "# 練習用のプロジェクト" > project/README.md
kaito@demo:~/linux-practice/archive-test$ echo "date,item,amount" > project/data/sales.csv
kaito@demo:~/linux-practice/archive-test$ echo "2026-08-01,りんご,300" >> project/data/sales.csv
kaito@demo:~/linux-practice/archive-test$ seq 1 10000 > project/data/numbers.txt
kaito@demo:~/linux-practice/archive-test$ ls -R project
project:
README.md  data

project/data:
numbers.txt  sales.csv

seq 1 10000 は、1 から 10000 までの数を1行ずつ書き出すコマンドです。縮み具合がわかりやすいように、少し大きめのファイルを作っています。


tar:まとめて圧縮する

圧縮する:tar -czvf
  • 1
  • 2
tar -czvf project.tar.gz project
ls -l

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
kaito@demo:~/linux-practice/archive-test$ tar -czvf project.tar.gz project
project/
project/data/
project/data/sales.csv
project/data/numbers.txt
project/README.md
kaito@demo:~/linux-practice/archive-test$ ls -l
total 28
drwxrwxr-x 3 kaito kaito  4096 Nov  1 05:34 project
-rw-rw-r-- 1 kaito kaito 23191 Nov  1 05:34 project.tar.gz

numbers.txt(48894 バイト)を含むフォルダが、project.tar.gz では 23191 バイトになりました。

💡
-f のすぐ後ろは「作るファイルの名前」

tar -czvf 作るファイル名 まとめたいもの の順番です。逆に書くと、思っていたのと違う名前のファイルができたり、エラーになったりします。打つ前に「f のとなりに .tar.gz の名前があるか」を見る習慣をつけておきましょう。

中身を見る:tar -tzvf

展開する前に、中に何が入っているかを確かめられます。

  • 1
tar -tzvf project.tar.gz

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
drwxrwxr-x kaito/kaito       0 2026-11-01 05:34 project/
drwxrwxr-x kaito/kaito       0 2026-11-01 05:34 project/data/
-rw-rw-r-- kaito/kaito      42 2026-11-01 05:34 project/data/sales.csv
-rw-rw-r-- kaito/kaito   48894 2026-11-01 05:34 project/data/numbers.txt
-rw-rw-r-- kaito/kaito      33 2026-11-01 05:34 project/README.md

Debian 13での実行画面

ネットからダウンロードした .tar.gz は、展開する前に必ず中身を見るクセをつけましょう。どのフォルダに、どんなファイルが出てくるかが先にわかります。

一覧で見るのは、いちばん右の名前の頭です。

  • 今回のように、全部の行が project/ で始まっている:展開すると project フォルダが1つできて、その中に全部入ります。散らからないので安心です
  • 行ごとにばらばらの名前で始まっている(入れ物のフォルダがない):今いる場所に、ファイルが直接たくさん出てきます。下の -C で、空のフォルダの中に展開しましょう
  • / や ../ で始まる名前がある:今いる場所の外に出ようとする、ふつうではないアーカイブです。展開しないでください

左の列は、ls -l と同じ読み方です(権限・持ち主/グループ・大きさ・日時)。

展開する:tar -xzvf と -C

展開先のフォルダを作って、そこに取り出してみます。

  • 1
  • 2
  • 3
mkdir restore
tar -xzvf project.tar.gz -C restore
ls -R restore

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
kaito@demo:~/linux-practice/archive-test$ mkdir restore
kaito@demo:~/linux-practice/archive-test$ tar -xzvf project.tar.gz -C restore
project/
project/data/
project/data/sales.csv
project/data/numbers.txt
project/README.md
kaito@demo:~/linux-practice/archive-test$ ls -R restore
restore:
project

restore/project:
README.md  data

restore/project/data:
numbers.txt  sales.csv

-C 展開先 をつけると、指定したフォルダの中に取り出されます。つけないと、今いる場所に取り出されます。

🚫
中身を確かめずに展開しない・sudo で展開しない(文章だけで説明します)

tar は、同じ名前のファイルがあると確認なしで上書きします。今いる場所に project フォルダがある状態で展開すると、中のファイルが古い内容に置きかわってしまうことがあります。また、出どころのわからないアーカイブを sudo(=許可されたユーザーが、コマンドの前につけて、そのコマンドだけを管理者の権限で実行するしくみ)つきで、/ やシステムのフォルダに向けて展開すると、システムのファイルが書きかわってしまうおそれがあります。この記事では試しません。展開する前に -t で中身を見て、-C で空のフォルダを指定しましょう。


gzip:1つのファイルを縮める

gzip は、1つのファイルだけを縮めるコマンドです。大きなログを小さくしたいときに使います。練習用にコピーを作ってから試します。

  • 1
  • 2
  • 3
  • 4
cp project/data/numbers.txt numbers.txt
ls -l numbers.txt
gzip numbers.txt
ls -l numbers.txt*

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
kaito@demo:~/linux-practice/archive-test$ cp project/data/numbers.txt numbers.txt
kaito@demo:~/linux-practice/archive-test$ ls -l numbers.txt
-rw-rw-r-- 1 kaito kaito 48894 Nov  1 05:34 numbers.txt
kaito@demo:~/linux-practice/archive-test$ gzip numbers.txt
kaito@demo:~/linux-practice/archive-test$ ls -l numbers.txt*
-rw-rw-r-- 1 kaito kaito 22632 Nov  1 05:34 numbers.txt.gz

numbers.txt がなくなって numbers.txt.gz になり、48894 バイトが 22632 バイト(半分くらい)に縮みました。

gzip は、元のファイルを消して、.gz のファイルに置きかえます。元に戻すには gunzip を使います。

  • 1
  • 2
gunzip numbers.txt.gz
ls -l numbers.txt*

(例)

  • 1
  • 2
  • 3
kaito@demo:~/linux-practice/archive-test$ gunzip numbers.txt.gz
kaito@demo:~/linux-practice/archive-test$ ls -l numbers.txt*
-rw-rw-r-- 1 kaito kaito 48894 Nov  1 05:34 numbers.txt

元のファイルも残したいときは、gzip -k numbers.txt のように -k(keep)をつけます。


zip:Windows とやりとりするとき

Windows の人にファイルを渡すときや、Windows から受け取った .zip を開くときは、zip と unzip を使います。まず、入っているか確かめましょう。

  • 1
which zip unzip

(例)

  • 1
kaito@demo:~/linux-practice/archive-test$ which zip unzip

今回の Debian 13 では、zip も unzip も最初は入っていなかったので、何も表示されませんでした。Debian 13 には zip と unzip は最初から入っていないので、使う前にインストールが必要です。

何も表示されなかったときは、前に覚えた apt で入れます。

  • 1
  • 2
sudo apt update
sudo apt install zip unzip

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
kaito@demo:~/linux-practice/archive-test$ sudo apt update
Hit:1 http://deb.debian.org/debian trixie InRelease
Hit:2 http://deb.debian.org/debian trixie-updates InRelease
Hit:3 http://deb.debian.org/debian-security trixie-security InRelease
All packages are up to date.
kaito@demo:~/linux-practice/archive-test$ sudo apt install zip unzip
Installing:
  unzip  zip

Summary:
  Upgrading: 0, Installing: 2, Removing: 0, Not Upgrading: 0
  Download size: 408 kB
  Space needed: 1038 kB / 106 GB available

Get:1 http://deb.debian.org/debian trixie/main amd64 unzip amd64 6.0-29+deb13u1 [173 kB]
Get:2 http://deb.debian.org/debian trixie/main amd64 zip amd64 3.0-15+deb13u1 [235 kB]
Fetched 408 kB in 0s (16.4 MB/s)
Selecting previously unselected package unzip.
(Reading database ... 25854 files and directories currently installed.)
Preparing to unpack .../unzip_6.0-29+deb13u1_amd64.deb ...
Unpacking unzip (6.0-29+deb13u1) ...
Selecting previously unselected package zip.
Preparing to unpack .../zip_3.0-15+deb13u1_amd64.deb ...
Unpacking zip (3.0-15+deb13u1) ...
Setting up unzip (6.0-29+deb13u1) ...
Setting up zip (3.0-15+deb13u1) ...
Processing triggers for man-db (2.13.1-1) ...

今回は、頼んだ zip と unzip の2つだけが入る形だったので、[Y/n] の確認は出ずにそのまま入りました(apt の記事と同じです)。すでに入っている場合は、「もう最新のバージョンが入っています」という意味の行が出て、何も変わりません。

zip にまとめる
  • 1
  • 2
zip -r project.zip project
ls -l project.zip

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
kaito@demo:~/linux-practice/archive-test$ zip -r project.zip project
  adding: project/ (stored 0%)
  adding: project/data/ (stored 0%)
  adding: project/data/sales.csv (stored 0%)
  adding: project/data/numbers.txt (deflated 54%)
  adding: project/README.md (stored 0%)
kaito@demo:~/linux-practice/archive-test$ ls -l project.zip
-rw-rw-r-- 1 kaito kaito 23507 Nov  1 05:34 project.zip

deflated 54% は「54% 縮めた」、stored 0% は「小さすぎるので縮めずにそのまま入れた」という意味です。

フォルダをまとめるときは、-r(中のフォルダもまとめて)をつけます。つけないと、空のフォルダだけが入った zip になってしまいます。

中身を見る・展開する
  • 1
  • 2
  • 3
  • 4
unzip -l project.zip
mkdir unzip-test
unzip project.zip -d unzip-test
ls -R unzip-test

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
kaito@demo:~/linux-practice/archive-test$ unzip -l project.zip
Archive:  project.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2026-11-01 05:34   project/
        0  2026-11-01 05:34   project/data/
       42  2026-11-01 05:34   project/data/sales.csv
    48894  2026-11-01 05:34   project/data/numbers.txt
       33  2026-11-01 05:34   project/README.md
---------                     -------
    48969                     5 files
kaito@demo:~/linux-practice/archive-test$ mkdir unzip-test
kaito@demo:~/linux-practice/archive-test$ unzip project.zip -d unzip-test
Archive:  project.zip
   creating: unzip-test/project/
   creating: unzip-test/project/data/
 extracting: unzip-test/project/data/sales.csv
  inflating: unzip-test/project/data/numbers.txt
 extracting: unzip-test/project/README.md
kaito@demo:~/linux-practice/archive-test$ ls -R unzip-test
unzip-test:
project

unzip-test/project:
README.md  data

unzip-test/project/data:
numbers.txt  sales.csv

Debian 13での実行画面

同じ名前があるときは聞いてくれる

unzip は、同じ名前のファイルがあると、上書きしていいか聞いてくれます。今いる場所には project フォルダがあるので、ここで展開してみましょう。

  • 1
unzip project.zip

(例)

  • 1
  • 2
  • 3
kaito@demo:~/linux-practice/archive-test$ unzip project.zip
Archive:  project.zip
replace project/data/sales.csv? [y]es, [n]o, [A]ll, [N]one, [r]ename: N

今回、最初に聞かれたのは project/data/sales.csv でした。unzip は zip の中に入っている順番に取り出すので、unzip -l の一覧でいちばん上にあるファイル(ディレクトリはのぞく)から聞いてきます。N を入力して Enter を押すと、何も表示されずに終わり、どのファイルも上書きされませんでした。

ここでは N(None:どれも上書きしない)を押して止めました。n(小文字)だと「このファイルだけ上書きしない」なので、次のファイルについてまた聞かれます。A(All)を押すと、すべてまとめて上書きされるので気をつけましょう。

💡
Windows で作った zip のファイル名が文字化けするとき

Windows で日本語の名前のファイルを zip にすると、Linux で展開したときにファイル名が読めない文字になることがあります。Windows と Linux で、ファイル名の文字の扱い方(文字コード)がちがうためです。-O cp932 のように文字コードを指定するオプションが使える unzip もありますが、今回の Debian 13 の unzip(UnZip 6.00)では、unzip -h の一覧に -O が載っていませんでした。Debian の unzip では、-O は使えないものと考えておくのが安全です。困ったときは、下のプロンプトで AI に聞いてみてください。Linux から Windows に渡すときは、ファイル名を英数字にしておくと安心です。

zip と unzip は入れたままでも困りませんが、記事のために入れただけで使わない場合は、sudo apt remove zip unzip で消せます。

🤖 詰まったらAIに聞こう:圧縮ファイルが開けない・文字化けする

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
Linuxの初心者です。圧縮ファイルの展開でつまずいています。
原因として考えられることと、安全に展開する手順を、コマンドの意味つきで教えてください。
今あるファイルを上書きしないやり方でお願いします。

【使っている環境】WSLのUbuntu など
【ファイルの名前と形式】例:project.tar.gz、Windowsから受け取ったzip など
【打ったコマンド】ここに貼る
【表示されたエラーや、文字化けの様子】ここに貼る

🔒
AIに貼る前に:秘密情報やパスワードは貼らない

tar -tzvf や unzip -l の一覧には、ファイル名やフォルダ名がそのまま出ます。APIキー、パスワード、お客さんの名前などがファイル名に入っていないか見直してから貼ってください。APIキーは、Web のサービスを使うときに本人の代わりになる、合言葉のような文字列です。パスワードつきの zip の場合、そのパスワードは AI に貼らないでください。


よくある質問

Q. .tar.xz や .tgz のファイルは、どう展開しますか?

.tgz は .tar.gz の短い書き方なので、この記事と同じ tar -xzvf で展開できます。.tar.xz は縮め方が違いますが、Debian や Ubuntu の tar(GNU tar)は、展開するときに縮め方を自動で見分けてくれるので、tar -xvf ファイル名 のように z を省いても展開できます。展開する前に tar -tvf ファイル名 で中身を見るのも同じです。

Q. 手順書に tar xzvf と、- なしで書かれていました。

tar は昔からの書き方として、最初の - を省いても同じ意味になります。tar xzvf project.tar.gz と tar -xzvf project.tar.gz は同じです。

Q. 圧縮したのに、ほとんど小さくなりませんでした。

写真(.jpg)や動画、もともと圧縮されている .zip などは、すでに縮められているので、tar.gz にしても大きさはあまり変わりません。この記事の numbers.txt のように、同じような文字がくり返されるテキストのファイルほど、よく縮みます。


まとめ

  • tar は「まとめる」、gzip は「縮める」。.tar.gz はその2つを重ねた形
  • まとめる tar -czvf、中身を見る tar -tzvf、取り出す tar -xzvf(-C で展開先)
  • -f のすぐ後ろは作るファイルの名前
  • tar は確認なしで上書きする。展開する前に -t で中身を見る
  • gzip は元のファイルを消す。残したいときは -k
  • Windows とやりとりするなら zip -r と unzip。上書きの確認では N で止められる

これで Lv2 はおしまいです。次の記事からは、「command not found」の正体と、PATH・.bashrc・alias など、ターミナルを自分好みに整える方法に進みます。


次に読む記事


関連する記事