1. tar
コマンドとは?
tar
は 複数のファイルやディレクトリを1つのアーカイブファイルにまとめるコマンドです。元々は「テープアーカイブ (tape archive)」の略ですが、今ではバックアップやデプロイ用途で広く使われています。
圧縮処理自体は gzip
や bzip2
などと組み合わせて行います。
2. 基本的な構文
tar [オプション] [アーカイブファイル名] [対象ファイルやディレクトリ]
よく使う主なオプション:
オプション | 意味 |
---|---|
c |
アーカイブの作成 (create) |
x |
展開・解凍 (extract) |
t |
内容の確認 (list) |
v |
処理中のファイルを表示 (verbose) |
f |
ファイル名を指定 (file) |
z |
gzip で圧縮・解凍 |
j |
bzip2 で圧縮・解凍 |
J |
xz で圧縮・解凍 |
3. 【圧縮】tarでよく使う圧縮パターン
🔹 ① ディレクトリを .tar
にまとめる(圧縮なし)
tar cvf archive.tar mydir/
-
c
: 作成 -
v
: ファイル名表示 -
f
: ファイル名指定 -
mydir/
: 対象ディレクトリ
🔹 ② gzip で圧縮(.tar.gz
/ .tgz
)
tar czvf archive.tar.gz mydir/
# または
tar czvf archive.tgz mydir/
-
z
: gzip 圧縮 - ファイルサイズを抑えたいときの定番。
🔹 ③ bzip2 で圧縮(.tar.bz2
)
tar cjvf archive.tar.bz2 mydir/
-
j
: bzip2 圧縮(gzipより圧縮率高いが遅め)
🔹 ④ xz で圧縮(.tar.xz
)
tar cJvf archive.tar.xz mydir/
-
J
: xz 圧縮(bzip2よりさらに圧縮率が高い)
🔹 ⑤ 複数のファイルをまとめて圧縮
tar czvf project.tar.gz file1.txt file2.txt dir1/
🔹 ⑥ ワイルドカードで特定拡張子を圧縮
tar czvf logs.tar.gz *.log
🔹 ⑦ 圧縮対象から特定ファイルを除外
tar czvf archive.tar.gz mydir/ --exclude='mydir/tmp/*'
4. 【解凍】よく使う展開パターン
🔹 ① .tar
ファイルの展開
tar xvf archive.tar
🔹 ② .tar.gz
/ .tgz
の展開
tar xzvf archive.tar.gz
# または
tar xzvf archive.tgz
🔹 ③ .tar.bz2
の展開
tar xjvf archive.tar.bz2
🔹 ④ .tar.xz
の展開
tar xJvf archive.tar.xz
🔹 ⑤ 特定のファイルだけを展開
tar xzvf archive.tar.gz path/to/file.txt
🔹 ⑥ 任意のディレクトリに展開する
tar xzvf archive.tar.gz -C /path/to/dest/
5. 応用テクニック
🔸 アーカイブ内の内容を一覧表示するだけ
tar tvf archive.tar.gz
🔸 特定の拡張子だけを抽出
tar xzvf archive.tar.gz --wildcards '*.log'
🔸 権限やタイムスタンプを保持せずに展開したい(--no-same-permissions)
tar xzvf archive.tar.gz --no-same-permissions
6. よくあるミスとその対策
ミス内容 | 対策・解説 |
---|---|
tar: Error is not recoverable: exiting now |
f オプションの順番に注意。-cvf のように f は最後に。 |
展開先が汚れる |
-C /path/to/dest を使って展開先を指定しよう |
--exclude が効かない |
パスは相対パス or 絶対パスで正しく指定する必要あり |
7. まとめ
tar
はオプションの組み合わせが多く、最初は混乱しがちですが、使うパターンはほぼ決まっているので、以下だけでも覚えておけば十分現場で通用します:
用途 | コマンド例 |
---|---|
圧縮(gzip) | tar czvf xxx.tar.gz target/ |
解凍(gzip) | tar xzvf xxx.tar.gz |
中身確認 | tar tvf xxx.tar.gz |
展開先指定 | tar xzvf xxx.tar.gz -C /tmp |
📌 補足:覚え方のコツ
-
c
→ create(作成) -
x
→ extract(展開) -
t
→ table(一覧表示) -
z
→ gzip -
j
→ bzip2 -
J
→ xz -
f
→ file(ファイル名指定) -
v
→ verbose(進捗表示)
🎁 おまけ:ワンライナーで tar + ssh
tar czf - ./project | ssh user@host "tar xzf - -C /var/www/html"
ローカルからリモートにファイルを圧縮・送信・展開を一発で!
✍️ おわりに
現場でも tar
は バックアップ・デプロイ・ログ収集などのあらゆる場面で使われるコマンドです。最低限のパターンを覚えておくと、作業効率が一気に上がります!
この投稿が、Linux 初心者やインフラに不慣れな開発者の方の助けになれば嬉しいです🙌