[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:14808] tar option --numeric owner (Re: [Q] root owner/user changing while using tar)
佐野@浜松です。
In article <19990421004704V.ishikawa@xxxxxxxxxxx>
ISHIKAWA Mutsumi <ishikawa@xxxxxxxxxxx> さん writes:
> --same-owner
> ア ーカイブ内のファイルのものと同じ所有属性で
> ファイルを抽出する
>
> です。元の質問の状況は、この動きをしてるんですよね ?
最初に読んだ時には「元の質問の状況」がよく理解できなかったのですが、
後で追加されていた batt.el のアーカイブの件は、「同じ所有属性」が
「同じ uid/gid (番号)」という意味なら、そのとおり (上の動き) だと思います。
で、ここから先は便乗質問なんで Subject を変更します。
先にむつみさんが <19990419202721X.ishikawa@xxxxxxxxx> に書かれた
| tar アーカイブの属性情報には、tar アーカイブを作成した時の
| owner/group が文字列として認識される形で記録されます(つまり、上の例
| だと brain/brain だよと記録されている)。ところが、アーカイブ中の個々の
| ファイルには、uid/gid の番号が記録されているに過ぎません。
この部分についてなのですが、最近の tar では、「アーカイブ中の個々のファイル
には番号が記録されている」という動作ではどうもなくなっているようなのです。
すこし前のバージョン、例えば今、職場にある (もうじき slink に置き換えられる予定の)
ファイルサーバーが Slackware 3.1 ベースで動いているのですが、これに入っている
$ tar --version; tar --help |grep owner
GNU tar 1.11.8
--same-owner create extracted files with the same ownership
このバージョンでは --numeric-owner というオプションが無いです。で、動作は
むつみさんが説明されたとおりのようです。
例を挙げると、こんな感じです。
1A) このシステムで tar を使って以下のバックアップを取ります。
$ tar -czf /tmp/chk3.tgz chk/
$ tar -tvzf /tmp/chk3.tgz;
drwxr-xr-x samba/samba 0 Apr 22 09:19 1999 chk/
-rw-r--r-- samba/samba 0 Apr 22 09:19 1999 chk/test1
$ grep samba /etc/passwd; grep samba /etc/group
samba:*:998:9998:Samba Windows Server:/Server/samba:/bin/sh
samba:*:9998:
2A) このアーカイブを別の、対応する uid/gid の無いシステムで復元します。
ただし root 特権のある状態で (sudo 経由) 実行します。
$ grep 998 /etc/passwd; grep 9998 /etc/group;
$ tar -tvzf chk3.tgz
drwxr-xr-x samba/samba 0 1999-04-22 09:19 chk/
-rw-r--r-- samba/samba 0 1999-04-22 09:19 chk/test1
$ sudo tar -xzf chk3.tgz
$ ls -lsaR chk
total 2
1 drwxr-xr-x 2 998 9998 1024 Apr 22 09:19 .
1 drwxrwxr-x 3 sano sano 1024 Apr 22 09:27 ..
0 -rw-r--r-- 1 998 9998 0 Apr 22 09:19 test1
この動作は、むつみさんが説明されたものと同じだろうと思います。
ところが、 hamm や slink の tar では、バージョンとオプションが
$ tar --version;tar --help |grep owner
tar (GNU tar) 1.12
Copyright (C) 1988, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by John Gilmore and Jay Fenlason.
--owner=NAME force NAME as owner for added files
--same-owner try extracting files with the same ownership
--numeric-owner always use numbers for user/group names
と表示されますが、この場合、以下のようになります。
1B) このシステムで tar を使って以下のバックアップを取ります。
ただし --numeric-owner オプションは無しです。
$ tar -czf /tmp/chk.tgz ./control/
$ tar -tvzf /tmp/chk.tgz
drwxrwxr-x xlj06203/nifty 0 1998-02-20 20:17 ./control/
-rw-rw-r-- xlj06203/nifty 120 1998-02-20 20:14 ./control/get_bill
-rw-rw-r-- xlj06203/nifty 180 1998-02-20 20:10 ./control/dir_lib
-rw-rw-r-- xlj06203/nifty 151 1998-02-20 20:16 ./control/go-library
-rw-rw-r-- xlj06203/nifty 146 1998-02-20 20:17 ./control/go-mes
$ grep xlj06203 /etc/passwd; grep nifty /etc/group;
xlj06203:x:561:6000:Nifty Account:/Home/xlj06203:/bin/bash
nifty:x:6000:
2B) このアーカイブを別の、対応する uid/gid の無いシステムで復元します。
ただし root 特権のある状態で実行します。
$ tar -tvzf chk.tgz
drwxrwxr-x xlj06203/nifty 0 Feb 20 20:17 1998 ./control/
-rw-rw-r-- xlj06203/nifty 120 Feb 20 20:14 1998 ./control/get_bill
-rw-rw-r-- xlj06203/nifty 180 Feb 20 20:10 1998 ./control/dir_lib
-rw-rw-r-- xlj06203/nifty 151 Feb 20 20:16 1998 ./control/go-library
-rw-rw-r-- xlj06203/nifty 146 Feb 20 20:17 1998 ./control/go-mes
(この表示は上の例と同じ)
$ grep 561 /etc/passwd; grep 6000 /etc/group;
$ cd chk1
$ sudo tar -xzf ../chk.tgz
$ ls -lsaR
total 3
1 drwxr-xr-x 3 sano kaiseki 1024 Apr 22 09:16 ./
1 drwxr-xr-x 4 sano kaiseki 1024 Apr 22 09:16 ../
1 drwxr-xr-x 2 root kaiseki 1024 Feb 20 1998 control/
control:
total 6
1 drwxr-xr-x 2 root kaiseki 1024 Feb 20 1998 ./
1 drwxr-xr-x 3 sano kaiseki 1024 Apr 22 09:16 ../
1 -rw-r--r-- 1 root kaiseki 180 Feb 20 1998 dir_lib
1 -rw-r--r-- 1 root kaiseki 120 Feb 20 1998 get_bill
1 -rw-r--r-- 1 root kaiseki 151 Feb 20 1998 go-library
1 -rw-r--r-- 1 root kaiseki 146 Feb 20 1998 go-mes
このように、「番号」が保存されなくなっています。
一方、 --numerc-owner オプションを付けて tar アーカイブを作成すると、
従来とほぼ同様な動作になります。
1C) 新しいほうのシステムで tar を使って上と同じバックアップを取ります。
ただし --numeric-owner オプションを指定します。
$ tar --numeric-owner -czf /tmp/chk2.tgz ./control/
$ tar -tvzf /tmp/chk2.tgz
drwxrwxr-x 561/6000 0 1998-02-20 20:17 ./control/
-rw-rw-r-- 561/6000 120 1998-02-20 20:14 ./control/get_bill
-rw-rw-r-- 561/6000 180 1998-02-20 20:10 ./control/dir_lib
-rw-rw-r-- 561/6000 151 1998-02-20 20:16 ./control/go-library
-rw-rw-r-- 561/6000 146 1998-02-20 20:17 ./control/go-mes
2C) このアーカイブを上と同じく、対応する uid/gid の無い別のシステムで
復元します。ただし root 特権のある状態で実行します。
$ tar -tvzf chk2.tgz
drwxrwxr-x 561/6000 0 Feb 20 20:17 1998 ./control/
-rw-rw-r-- 561/6000 120 Feb 20 20:14 1998 ./control/get_bill
-rw-rw-r-- 561/6000 180 Feb 20 20:10 1998 ./control/dir_lib
-rw-rw-r-- 561/6000 151 Feb 20 20:16 1998 ./control/go-library
-rw-rw-r-- 561/6000 146 Feb 20 20:17 1998 ./control/go-mes
$ grep 561 /etc/passwd; grep 6000 /etc/group;
$ cd chk2
$ sudo tar -xzf ../chk2.tgz
$ ls -lsaR
total 3
1 drwxr-xr-x 3 sano kaiseki 1024 Apr 22 09:16 ./
1 drwxr-xr-x 4 sano kaiseki 1024 Apr 22 09:16 ../
1 drwxrwxr-x 2 561 6000 1024 Feb 20 1998 control/
control:
total 6
1 drwxrwxr-x 2 561 6000 1024 Feb 20 1998 ./
1 drwxr-xr-x 3 sano kaiseki 1024 Apr 22 09:16 ../
1 -rw-rw-r-- 1 561 6000 180 Feb 20 1998 dir_lib
1 -rw-rw-r-- 1 561 6000 120 Feb 20 1998 get_bill
1 -rw-rw-r-- 1 561 6000 151 Feb 20 1998 go-library
1 -rw-rw-r-- 1 561 6000 146 Feb 20 1998 go-mes
このように --numeric-option を指定した場合に限って、「番号」が保存される
仕様になっています。
| ある環境 で brain(uid=100)/brain(gid=100) が tar アーカイブを作成して、
| それを別の環境で展開したとしましょう。その環境には uid=100 として
| ishikawa というユーザが、gid=100 として staff というグループが登録されて
| いたとします。そうすると、個々のファイルは ishikawa/staff という
| owner/group に突如変更されてしまったかのように見えてしまいます。しかし、
| 実際は uid/gid とユーザ名/グループ名のマッピングが (環境が変わったこと
| により) 変更されただけで、個々のファイルが持っていた属性中の
| owner/group の uid/gid は変更されていません。
ということで、元の質問の話題とは離れてしまいましたが、
| 展開された先の環境に、その uid/gid を持った user/group が存在して
| いなければ、当然ですが、(ls -l などした場合) uid/gid の番号がそのまま
| 出ます。
この説明の中に --numeric-owner が出てこなかったので、
ちょっと疑問に思った次第です。 _o_
上記の --numeric-owner の有無とそれによる動作の違いについて、
何か勘違いしていることがあれば御指摘ください。
--
#わたしのおうちは浜松市、「夜のお菓子」で有名さ。
<xlj06203@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)