ファイルシステムと書庫

INPUT · スライド

まとめて固める(`tar`)

01 / 06

100個のファイルを1つに

ファイルを人に渡すとき、100個をばらばらに渡す人はいないよね。1つの箱にまとめて渡すでしょう。

それをやる道具が tar だよ。

shiryo/            tar cf shiryo.tar shiryo├─ a.txt      →    shiryo.tar(1つのファイル)└─ oku/   └─ b.txt

名前の由来は tape archive。昔、テープにバックアップを取るための道具だったんだ。テープはもう使わないけれど、名前と道具はそのまま残っているよ。

大事なのは、tar圧縮の道具ではないということだよ。

tar    まとめる(大きさはほぼ変わらない)gzip   縮める(次の回でやるよ)

「固める」と「縮める」は別の仕事なんだ。Linux では小さな道具を組み合わせるので、この2つも別々になっているんだよ。

そして tar の何よりの強みは、ディレクトリの形をそのまま保つことだよ。入れ子も権限も持ち主も、箱の中に一緒に入るんだ。

02 / 06

3つの仕事、3つの文字

tar にできることは3つだけだよ。文字1つずつ覚えよう。

文字意味英語
c作るcreate
t中身を見るlist
x取り出すextract

そこに「どのファイルか」を表す ffile)を足すのが基本形だよ。

tar cf 箱の名前 入れるもの     作るtar tf 箱の名前                中を見るtar xf 箱の名前                取り出す

実際に打つとこうだね。

~ $ tar cf shiryo.tar shiryo~ $ tar tf shiryo.tarshiryo/shiryo/oku/shiryo/oku/b.txtshiryo/a.txt~ $ tar xf shiryo.tar

tar は昔からある道具なので、印にハイフンを付けなくても動くよ。

tar cf ...     ← 昔からの書き方tar -cf ...    ← こちらでも動く

どちらも見かけるので、両方読めるようにしておこう。この教材ではハイフンなしで書くね。

03 / 06

cx の向きを間違えない

いちばん怖い間違いを先に見ておこう。

tar cf shiryo.tar shiryo    ← 正しい(箱を作る)tar cf shiryo shiryo.tar    ← 大事故!

下の行は「shiryo という名前の箱を作って、shiryo.tar を入れる」という意味になる。元のディレクトリが箱に上書きされて消えるんだ。

覚え方はこうだよ。

tar cf  [箱]  [中に入れるもの]         ↑ 先に箱の名前

f のすぐ後ろが必ずだよ。-f の f が「その次がファイル名」という意味だからね。

もうひとつ。取り出しは黙って上書きするよ。

~ $ echo kaki > shiryo/a.txt   (書き換えた)~ $ tar xf shiryo.tar          (取り出した)~ $ cat shiryo/a.txtaaa                            (元に戻ってしまった!)

上書きされたくないときは k(keep)を足すんだ。

tar xkf shiryo.tar     すでにあるファイルは残す

どちらも > の上書きと同じ性質だね。取り消せない操作の前には tf で中を見る、これを癖にしよう。

04 / 06

場所を変える -C

取り出す場所を選びたいときは -CChange directory)だよ。

~ $ mkdir modosu~ $ tar xf shiryo.tar -C modosu

modosu の中に取り出されるよ。これを知らないと、cd してから相対パスで箱を指す面倒なことになるんだ。

cd modosu && tar xf ../shiryo.tar    ← 同じことだけど遠回り

-C は作るときにも効くよ。ここが少し面白いところだね。

~ $ tar cf naka.tar -C shiryo .~ $ tar tf naka.tar././oku/./oku/b.txt./a.txt

shiryo/ という上の階が付かず、中身だけが入ったでしょう。

tar cf x.tar shiryo        →  shiryo/a.txt の形で入るtar cf x.tar -C shiryo .   →  ./a.txt の形で入る

この違いは、取り出したときに1階層深くなるかどうかに出るよ。人に渡す箱は前者(ディレクトリ付き)がよいとされているんだ。取り出した瞬間に、その場にファイルが散らばらないからだね。

05 / 06

中を見る・一部だけ取る

t は箱を開けずに中を見る印だよ。vverbose)を足すと詳しくなる。

~ $ tar tvf shiryo.tardrwxr-xr-x 100/101   0 2026-08-22 00:31 shiryo/-rw-r--r-- 100/101   4 2026-08-22 00:31 shiryo/a.txt

権限も持ち主も日付も入っているでしょう。tar が形ごと保つというのはこういうことだよ。

名前を後ろに書くと、その1つだけ取り出せるよ。

~ $ tar xf shiryo.tar shiryo/a.txt

巨大なバックアップから1ファイルだけ戻したいときに使うんだ。名前は tf で出てくる形のまま書いてね。

画面に出すだけなら O(大文字のオー、Output to stdout)だよ。

~ $ tar xOf shiryo.tar shiryo/a.txtaaa

ファイルを作らずに中身を見られるので、grep につなげられるね。

tar xOf log.tar var/log/messages | grep error

入れたくないものを外す --exclude もあるよ。

tar cf soto.tar --exclude 'oku' shiryo

oku を丸ごと外して固められるんだ。

06 / 06

さあ、打ってみよう

この回で使う形をまとめておくね。

tar cf 箱.tar もと           固めるtar tf 箱.tar                中を見るtar tvf 箱.tar               詳しく見るtar xf 箱.tar                取り出すtar xf 箱.tar -C どこか      場所を決めて取り出すtar xf 箱.tar 名前           1つだけ取り出すtar xOf 箱.tar 名前          画面に出すだけtar xkf 箱.tar               あるものは上書きしないtar cf 箱.tar --exclude 型 もと    外して固める

順番の決まりだけ、もう一度だよ。

f のすぐ後ろは、いつも箱の名前

これさえ守れば事故は起きないよ。

ひとつ知っておくと安心なこと。この環境の tarz(gzip 圧縮)の印が使えないんだ。

tar czf x.tar.gz shiryo   →  unrecognized option: z

だからここでは、固めるのと縮めるのを2手に分けるよ。

tar cf x.tar shiryo    固めるgzip x.tar             縮める → x.tar.gz

本物の Linux では tar czf の一手で両方できるので、その形も覚えておいてね。圧縮そのものは次の回でちゃんとやるよ。では、箱を作ってみよう。