目次

tar

機能

複数のファイルをひとつのファイルにまとめることをアーカイブといいます。
tarコマンドは、指定したファイルや指定したディレクトリ以下のツリーを、テープなどのメディアに
アーカイブしたり、アーカイブデータを展開するコマンドです。

▼dumpコマンドとの使い分け
dumpコマンドがファイルシステム単位でバックアップをとるのに対し、tarコマンドは
任意のディレクトリ以下をアーカイブできるので、システム全体のバックアップは
dumpコマンドで、それ以外のバックアップはtarコマンドで、といった使い分けができます。

構文

tar [オプション] [ファイル名]

オプション

オプション 意味
cアーカイブファイルを新規に作成する
f指定されたファイルにアーカイブデータを出力する
tアーカイブファイルの内容を表示する
vファイル名のほかにタイムスタンプやアクセス権などの詳細な情報を表示する
xアーカイブファイルからファイルを取り出す
zアーカイブファイルをgzipで圧縮する(FreeBSD・Linux)
jbzip2を通して処理を行う
X FILEFILEに記述されたファイル(フォルダ)を除外する。
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"