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
始终使用数字作为用户/组名称。