我需要使用 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