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

Dav*_*vid 22 users tar permissions

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

这是我尝试过的方向:

tar ca --owner='otherowner' --group='othergroup' mydata.tgz mydata
Run Code Online (Sandbox Code Playgroud)

运行此命令时,出现以下错误:

tar: otherowner: Invalid owner
tar: Error is not recoverable: exiting now
Run Code Online (Sandbox Code Playgroud)

有没有办法强制 tar 接受所有者:组,即使它们都不存在于创建文件的系统上?

Nyk*_*kin 21

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
Run Code Online (Sandbox Code Playgroud)

它似乎工作。

  • 遇到此问题的其他人的注意事项:当使用 `-tvf` 标志时,tar 会自动输出用户/组 _names_。要查看档案中文件的当前 _numbers_,请使用如下命令:`$ tar --numeric-owner -tvf archive.tar` (2认同)
  • 可能值得注意的是,ustar(BSD 和 Linux 上的标准)tar 标头对数字 UID/GID 值以及用户名和组名进行编码。解包时,首先使用名称,如果它们出现在标题中并且与系统上定义的用户和组匹配。数字 UID 和 GID 将仅用作后备。 (2认同)