所有者とグループにtarファイルの内容をインポートするよう強制しますか?

所有者とグループにtarファイルの内容をインポートするよう強制しますか?

ファイルが生成されたシステムに存在しない所有者:グループペアにコンテンツが属するtarファイルを生成したいと思います。

私が試した方向は次のとおりです。

tar ca --owner='otherowner' --group='othergroup' mydata.tgz mydata

このコマンドを実行すると、次のエラーが発生します。

tar: otherowner: Invalid owner
tar: Error is not recoverable: exiting now

ファイルが作成されたシステムに所有者:グループがない場合でも、tarが所有者:グループを強制的に受け入れるようにする方法はありますか?

答え1

Linuxは、内部所有者とグループ名を使用せずに数字(UIDとGID)を使用します。ユーザーの便宜のために、ユーザーとグループ名は、/etc/passwd および /etc/group ファイルの内容からマップされます。これらのファイルには「otherowner」エントリがないため、Linuxは実際にファイルにどのUIDとGIDを割り当てるべきかを知りません。数字を渡してみましょう:

$ tar cf archive.tar test.c --owner=0 --group=0
$ tar -tvf archive.tar 
-rw-rw-r-- root/root        45 2013-01-10 15:06 test.c
$ tar cf archive.tar test.c --owner=543543 --group=543543
$ tar -tvf archive.tar 
-rw-rw-r-- 543543/543543    45 2013-01-10 15:06 test.c

うまくいくようです。

答え2

.takeを--no-same-owner --no-same-permissions使用してパラメータを追加するtar文書を見る

答え3

tarアーカイブは、ユーザーとグループ名と数字IDを保存できます(これが可能なすべてのtar形式のバージョンに適用されるかどうかはわかりませんが)。

GNU tarは2つのオプションを受け入れ、--user=USERファイル--group=GROUPのユーザーとグループを設定します。

USERGROUP名前、数値ID、またはその両方(形式)で指定できますNAME:ID

名前とIDを明示的に指定しない限り、欠落している部分はローカルシステムのユーザー/グループを見つけて記入されます。システムに指定されたユーザーがいないため、otherownertarはファイルに割り当てるUIDを知りません。

オプションを指定すると--owner=otherowner:1000 --group=othergroup:1000効果があります。

答え4

以下は、ユーザー/グループをIDに動的に置き換えるコードです。

tar ca --owner="$(id -u ***otherowner***)" --group="$(id -g ***othergroup***)" mydata.tgz mydata

関連情報