2011年8月29日月曜日

tar コマンドの xattrs オプション

star

少し前の Linux(RedHat)では、SELinux や ACL の情報をもったファイルをアーカイブするときに star というコマンドを使うことになっていた。

ただし、このコマンドは圧縮のオプションが充実していなくて不便だった。

たとえば、gzip圧縮する場合には

$ star -H=exustar -xattr -c dir1 | gzip > dir1.tgz

のようにパイプやリダイレクトを行う必要があった(tar -z のような圧縮オプションが無いため)。

tar -xattrs

しかし、最近は tar が改良されて -xattrsオプションを使えばよくなったらしい(これで -j, -J, -z などの圧縮も使える)。

tar -xattrs の例

CentOS-6.0(Linux 2.6.32-71.29.1.el6.x86_64)にて確認。

準備
~/dir, ~/dir/file1, ~/dir/file2 を作って、テキトーにACLと拡張ファイル属性を設定。
$ cd
$ mkdir dir1 && touch dir1/file{1,2}
$ setfacl -R -m m:rwx dir1
$ setfattr -n 'user.test' -v 'test' dir1
$ setfattr -n 'user.test' -v 'test' dir1/file{1,2}
tar -xattrs でアーカイブ
$ tar --xattrs -cvzf dir1.tgz dir1
/tmp に展開して属性を確認
$ tar -xvzf dir1.tgz -C /tmp
$ getfacl -R /tmp/dir1
getfacl: Removing leading '/' from absolute path names
# file: tmp/dir1
# owner: useruuser
# group: useruuser
user::rwx
group::rwx
mask::rwx
other::r-x

# file: tmp/dir1/file2
# owner: useruuser
# group: useruuser
user::rwx
group::rw-
mask::rwx
other::r--

# file: tmp/dir1/file1
# owner: useruuser
# group: useruuser
user::rwx
group::rw-
mask::rwx
other::r--/

$ getfattr -d /tmp/dir1 /tmp/dir1/file*
getfattr: Removing leading '/' from absolute path names
# file: tmp/dir1
user.test="test"

# file: tmp/dir1/file1
user.test="test"

# file: tmp/dir1/file2
user.test="test"

…というわけで、tar -xattrs で拡張属性が保存されていることがわかった。

0 件のコメント:

コメントを投稿