使用 .tgz 保留文件所有权

Woo*_*ock 3 tar permissions archive unix-philosophy

回到另一个可能非常非常基本的 UNIX 问题。

我理解 Tape Archive Zips ( .tgz)的前提是它们保留 uid、gid、权限......

但是,这似乎不可移植。例如,如果用户john在一台 UNIX 机器上制作 .tgz 文件并在没有该用户的机器上解压缩,或者用户名相同但 UID 不同,该怎么办。

这是如何运作的?

Ste*_*itt 13

真正的旧tar格式仅存储数字用户和组标识符,因此它们存在您描述的问题。

但符合POSIX标准从开始的1988年,tar格式,如Unix的标准tar格式,pax还可以存储用户名和组名,这样他们就可以按名称保留所有权。给定一个包含 uid 1234 拥有的文件的 tarball,其用户名为johntar将查找名为 的用户john,并在可能的情况下提取具有该所有权的文件(可能使用不是 1234 的 uid),如果没有这样的用户,则回退到 uid 1234用户。

这一切都不是完美的,这就是为什么tar除非以 root 身份运行才能恢复所有权(除了它必须是 root 才能更改所有权这一事实);默认情况下,文件以运行用户的所有权提取。