superuser権限でtarコマンドで解凍すると何も考えなくてもパーミッションと所有者が保持される
GNU tarの話です。
tarでパーミッション保持をするのは-pオプションをつければいいのだが、固めるときは勝手に保持しておいてくれるので、これをつけるのは解凍するときだけでいい。ということを最近教えてもらった。そうなんだ。勘違いして固めるときもつけていた。
と思って調べてみたらこんなことが書いてある。
-p, --preserve-permissions, --same-permissions
tar:ファイルやディレクトリの圧縮または展開:具体例未作成 | u-style.info
ファイル属性についての情報を抽出
(superuser では標準)
「superuserでは標準」。
なるほど。
で、試してみたらどうやらsuperuserのときは--same-ownerオプションも標準でつくらしい。
例えばこういうディレクトリをtarで固めて、
$ ls -l tartest 合計 0 -rwxrwxrwx 1 ippan ippan 0 3月 29 20:03 ippan_777 -rwxrwxrwx 1 root root 0 3月 29 20:02 root_777 $ tar zcvf tartest.tar.gz tartest/
別サーバでsuperuser権限で解凍するとこういう風になる。
$ sudo tar zxvf tartest.tar.gz $ ls -l tartest total 0 -rwxrwxrwx 1 502 502 0 2013-03-29 20:03 ippan_777 -rwxrwxrwx 1 root root 0 2013-03-29 20:02 root_777
-pも--same-ownerもつけてないけど所有者もパーミッションも保持されている。
保持したくないときはオプションで明示しないといけないようだ。
$ sudo tar --no-same-permissions --no-same-owner -zxvf tartest.tar.gz $ ls -l tartest total 0 -rwxr-xr-x 1 root root 0 2013-03-29 20:03 ippan_777 -rwxr-xr-x 1 root root 0 2013-03-29 20:02 root_777
逆に一般ユーザで両方保持しようと思ったら--same-ownerが怒られる。
のはこっちの環境もろもろのせいか?
rootでやれば勝手につくわけだし、--same-ownerを使うタイミングって本当にあるのかなと思いつつ。
$ tar --same-owner -zxvpf tartest.tar.gz tartest/ tartest/ippam_777 tar: tartest/ippan_777: Cannot change ownership to uid 502, gid 502: Operation not permitted tartest/root_777 tar: tartest/root_777: Cannot change ownership to uid 0, gid 0: Operation not permitted tar: tartest: Cannot change ownership to uid 0, gid 0: Operation not permitted tar: Exiting with failure status due to previous errors