如果用户 ID 发生变化,tar 是否会保留权限?

如果用户 ID 发生变化,tar 是否会保留权限?

我需要使用 tar 命令上的“p”选项备份一些数据。问题是我要恢复这些数据的地方将拥有相同的用户,但这些用户的 ID 可能不同。这对 tar 有什么影响吗?还是它会根据用户名正确恢复权限?

答案1

tar根据 UID 和 GID 记录权限,而不是根据与它们关联的字符串。因此,如果一台服务器上的 UID 为 3300 并且链接到“bob”,则在新服务器上,该文件将归 UID 为 3300 的用户所有。

UNIX 上的虚拟一切(我想说一切,但你永远无法 100% 确定)都使用 UID:GID 值,因为这些值实际上存储在文件系统级别。名称只是在 passwd 文件中的简单查找,底层检查是使用数值完成的。

答案2

总结以前的答案并添加一些重要信息:

  • 创建档案时,tar将始终保留文件的用户和组 ID,除非否则用--owner=NAME,来表示--group=NAME。无论哪种情况,每个文件总是会有一个关联的数字用户和组 ID。

  • GNU tar,或许还有其他版本tar存储用户和组名称,除非--numeric-owner使用。bsdtar默认情况下还存储用户和组名称,但它不支持--numeric-owner选项创造直到版本 3.0 为止的档案(请注意,它支持以下选项:提取档案保存的时间更长)。

  • 当提取为普通用户,所有文件将总是归用户所有。这没有什么不同,因为提取文件意味着在文件系统上创建一个新文件,而普通用户不能创建文件并将所有权交给其他人。

  • 提取时tar将默认恢复提取文件的所有权,除非 --no-same-owner被使用,这将赋予 root 所有权。

  • 在 GNU tar、bsdtar 以及其他版本中tar,恢复所有权由用户(和组)完成姓名,如果该信息在档案中目标系统中是否存在匹配的用户。否则,将按 ID 进行恢复。如果--numeric-owner提供了选项,则忽略用户名和组名并使用 ID。无论哪种情况,只要使用数字 ID,匹配的用户和组都会不是需要存在于系统中。

  • 权限和时间戳也会保存到档案中,并默认恢复,除非使用选项--no-same-permissions和/或--touch。当用户提取时,用户的权限和时间戳umask减去--same-permissions除非使用,否则不受权限限制。

  • --preserve-permissions--same-permissions是别名,具有与-p

希望这有助于澄清这个问题!:)

答案3

如果您尝试在两个系统之间传输文件,rsync 将默认通过用户名而不是 uid 设置权限,并查看两端的用户名。只有当其中一个系统上不存在该用户时,它才会使用 uid 进行复制,除非您另有说明。

答案4

使用 GNU tar 的 --same-owner 选项。请参阅http://www.gnu.org/software/tar/manual/html_section/Attributes.html

相关内容