具有保留权限的 Tar 文件显示不在当前系统上的用户的用户名

具有保留权限的 Tar 文件显示不在当前系统上的用户的用户名

tar 如何在没有 www-data 用户的系统上显示用户名,例如 www-data?

我知道 tar 根据系统 ID 保留用户权限,在本例中,Debian 系统上的 www-data 为 33(我相信?)。

最令人困惑的是,如果我将文件夹的权限更改为 33(一个不存在的用户)并将其发送到另一台服务器,tar 会报告所有者为用户 33,但在解压时,文件夹将设置为所有者 www-数据。

焦油(GNU 焦油)1.29

答案1

这是因为tar也保存了这些信息,它是 POSIX 1003.1-1990 中指定的 ustar 格式。在官方源代码中,这是指定的tar.h 头文件。我复制了重要的块:

/* POSIX header.  */

struct posix_header
{               /* byte offset */
  [...]
  char uid[8];          /* 108 */
  char gid[8];          /* 116 */
  [...]
  char uname[32];       /* 265 */
  char gname[32];       /* 297 */
  [...]
};

正如您所看到的,除了 uid 和 gid 之外,还存储了所有者用户名以及所有者组名。

答案2

Tar 还将用户名和组保存在文件中。您可以使用 .tar 文件等工具查看 tar 文件本身来验证这一点hexdump。原因是相同的名称可能在不同的系统上使用但具有不同的编号。

在第二种情况下,源系统不知道用户 33 的名称,因此它无法提供名称,只能提供号码。提取 tar 使用此号码,并且由于系统知道此号码,因此它会显示该号码的用户名。

也可以看看

--numeric-owner
始终使用数字作为用户/组名称。

相关内容