强制所有者和组获取 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

添加参数--no-same-owner --no-same-permissionstar.采取一个查看文档

答案3

tar 存档可以存储用户和组的名称和数字 ID(尽管我不确定这是否适用于所有可能的 tar 格式风格)。

GNU tar 接受两个选项,--user=USER--group=GROUP为文件设置用户和组。

USER和都GROUP可以通过其名称、数字 ID 或两者(以 形式NAME:ID)指定。

除非明确指定名称和 ID,否则将通过查看本地系统上的用户/组来填充缺少的部分。由于您的系统上没有指定的用户otherowner,因此 tar 不知道要为该文件分配什么 UID。

指定选项应该--owner=otherowner:1000 --group=othergroup:1000可以解决问题。

答案4

下面是一段用 ids 动态替换用户/组的代码:

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

相关内容