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


21

ファイルの作成元のシステムに存在しないowner:groupペアに属するコンテンツを含むtarファイルを作成したいと思います。

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

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

このコマンドを実行すると、次のエラーが表示されます。

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

tarがowner:groupを受け入れるように強制する方法はありますが、どちらもファイルの作成元のシステムに存在しませんか?


1
--ownerはtarでサポートされているオプションではないことに注意してください。これは移植性のないGNUismです。starでは、たとえば組み込みの検索を使用して、-chown username / userid -chgrp groupname / groupidを指定します。
気味悪い

回答:


19

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

うまくいくようです。


面白い!そのため、tarコマンドは、使用しようとしていた名前と一致するように、ユーザーとグループの番号についてシステムをポーリングする必要があります。ありがとう!
デビッド

1
これに遭遇する他の人への注意:tar はフラグを使用するときにユーザー/グループ名を自動的に出力します-tvf。現在表示するには数字を:アーカイブ内のファイルに対して、このようなコマンドを使用します$ tar --numeric-owner -tvf archive.tar
デヴィッド・

実際、tarバージョンでは、任意のユーザー名を入力してtarファイルに保存できます(ただし、デフォルトでは数値のユーザーIDを使用します)。リスト中に、デフォルトでユーザー名を取得しますが、ユーザーIDは--numeric-ownerフラグを使用して取得します。さらに興味深いのは、--owner=name:1234またはを使用して両方を設定できることです--group=groupname:4711。ソース:tarソースコードの関数parse_owner_group
Bluehorn

ustar(BSDおよびLinuxの標準)tarヘッダーは、数値のUID / GID値とユーザー名およびグループ名の両方をエンコードすることに注意してください。展開時に、名前がヘッダーに存在し、システムで定義されたユーザーとグループに一致する場合、名前が最初に使用されます。数値のUIDとGIDは、フォールバックとしてのみ使用されます。
kbolino


-2

以下に、ユーザー/グループをその場でIDで置き換えるコードを示します。

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

5
いいえ。idが名前の解決方法を知っている場合、tarも知っています。質問は、システムにとって未知のユーザー名に関するものです。
ダニエルS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.