强制所有者和组输入tar文件的内容?


21

我想创建一个tar文件,其内容属于owner:group对,在创建文件的系统上不存在该对文件。

这是我尝试的方向:

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时,例如,您可以使用内置的find并指定-chown username / userid -chgrp groupname / groupid。
2015年

Answers:


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
David

实际上,在我的tar版本中,我可以输入我想要的任何用户名并将其存储在tar文件中(但默认情况下使用我的数字用户ID)。列出时,默认情况下会获得用户名,但使用--numeric-owner标志会获得用户ID 。更有意思的是,您可以同时使用--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也知道。问题是关于系统未知的用户名。
Daniel S
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.