====== tar ======
===== 機能 =====
複数のファイルをひとつのファイルにまとめることをアーカイブといいます。
tarコマンドは、指定したファイルや指定したディレクトリ以下のツリーを、テープなどのメディアに
アーカイブしたり、アーカイブデータを展開するコマンドです。
▼dumpコマンドとの使い分け
dumpコマンドがファイルシステム単位でバックアップをとるのに対し、tarコマンドは
任意のディレクトリ以下をアーカイブできるので、システム全体のバックアップは
dumpコマンドで、それ以外のバックアップはtarコマンドで、といった使い分けができます。
===== 構文 =====
tar [オプション] [ファイル名]
=== オプション ===
^オプション^ 意味 ^
|c|アーカイブファイルを新規に作成する|
|f|指定されたファイルにアーカイブデータを出力する|
|t|アーカイブファイルの内容を表示する|
|v|ファイル名のほかにタイムスタンプやアクセス権などの詳細な情報を表示する|
|x|アーカイブファイルからファイルを取り出す|
|z|アーカイブファイルをgzipで圧縮する(FreeBSD・Linux)|
|j|bzip2を通して処理を行う |
|X FILE|FILEに記述されたファイル(フォルダ)を除外する。|
|C|指定したディレクトリにファイルを展開する|
===== コマンド例 =====
==== /etcディレクトリ以下のファイルをフロッピーディスク(/dev/fd0)にアーカイブする ====
# cd /etc
# tar cf /dev/fd0 ./*\
==== アーカイブ内のファイル名を表示する ====
# tar tf /dev/fd0 |head
etc/X11/
etc/aliases
etc/amd.map
etc/antivir.conf
etc/apmd.conf
etc/auth.conf
etc/avguard.conf
etc/crontab
etc/csh.cshrc
etc/csh.login
==== アーカイブ内のファイル名とファイル属性を表示する ====
root@vaio# tar tfv /dev/fd0 |head
drwxr-xr-x root/wheel 0 5 26 06:27 2004 etc/X11/
lrwxrwxrwx root/wheel 0 9 21 23:27 2004 etc/aliases -> mail/aliases
-rw-r--r-- root/wheel 208 5 26 06:28 2004 etc/amd.map
-rw-rw-r-- root/antivir 3623 11 10 07:38 2004 etc/antivir.conf
-rw-r--r-- root/wheel 1167 5 26 06:28 2004 etc/apmd.conf
-rw-r--r-- root/wheel 272 5 26 06:28 2004 etc/auth.conf
-rw-rw-r-- root/antivir 3730 11 10 07:31 2004 etc/avguard.conf
-rw-r--r-- root/wheel 637 5 26 06:28 2004 etc/crontab
-rw-r--r-- root/wheel 108 5 26 06:28 2004 etc/csh.cshrc
-rw-r--r-- root/wheel 486 5 26 06:28 2004 etc/csh.login
==== アーカイブデータからファイルを取り出す ====
# tar xf /dev/fd0
==== 特定フォルダを除外する ====
=== workフォルダにa,b,cというフォルダがあるとする ===
$ find work
work
work/a
work/a/a.html
work/b
work/b/b.html
work/c
work/c/c.html
=== jogaiとうファイルをに除外したいフォルダ名を記述しておく。 ===
$ echo b > jogai
$ echo c >> jogai
$ cat jogai
b
c
=== jogaiファイルで指定したフォルダを除いて圧縮できる。 ===
$ tar zcvXf jogai backup.tar.gz x
work/
work/a/
work/a/a.html
==== bzip2を通して、tar,gz2で圧縮・解凍 ====
=== 圧縮 ===
$ tar jcvf work.tar.gz2 work
a work
a work/sabun.sh
a work/test.rb
a work/ch_20060317.txt
a work/kr_20060317.txt
a work/test.rb.bak
a work/seek.sh
a work/A
a work/serverlist.txt
a work/B
a work/test.txt
a work/a.sh
a work/sample01.sh
a work/test.php
=== 解凍 ===
$ tar jxvf work.tar.gz2
x work
x work/sabun.sh
x work/test.rb
x work/ch_20060317.txt
x work/kr_20060317.txt
x work/test.rb.bak
x work/seek.sh
x work/A
x work/serverlist.txt
x work/B
x work/test.txt
x work/a.sh
x work/sample01.sh
x work/test.php
=== tar.gzより、tar.gz2の方が圧縮率が高い ===
$ ls -al
drwxr-xr-x 2 matsui Admin 512 8 13 03:36 work/
-rw-r--r-- 1 matsui users 4900 8 16 11:41 work.tar.gz
-rw-r--r-- 1 matsui users 4348 8 16 11:40 work.tar.gz2
==== 特定ファイルだけを取り出す ====
$ tar zxvf foo.tgz filename
==== 指定したディレクトリに展開する ====
hogeディレクトリに展開する場合
$ mkdir hoge
$ tar zcvfC foo.tar.gz ./hoge
==== tar でディレクトリ丸ごとコピー ====
10.10.10.10の/mnt/ を 10.10.10.20の/mnt/ に丸ごとコピー
ssh root@10.10.10.10 tar -C /mnt/ --sparse --one-file-system -zcp --numeric-owner --xattrs . | ssh root@10.10.10.20 tar -xzp -C /mnt/
==== tar で丸ごとバックアップ ====
/mnt/ディレクトリを丸ごと 10.10.10.30にtarで固めてバックアップ
tar -C /mnt/ --sparse --one-file-system -zcp --numeric-owner --xattrs . | ssh root@10.10.10.30 "cat > /backup/backup.tar.gz"
{{tag>Unixコマンド 圧縮・復元・パックアップ tar}}