我需要使用 tar 命令上的“p”选项备份一些数据。问题是我要恢复此数据的地方将拥有所有相同的用户,但这些用户可能具有不同的 ID。这对 tar 有什么影响还是会按用户名正确恢复权限?
Mes*_*ion 65
总结以前的答案并添加一些重要信息:
创建档案时,tar
将始终保留文件的用户和组 ID,除非用--owner=NAME
,另有说明--group=NAME
。但仍然总会有一个用户和组与每个文件相关联。
GNU tar和也许其他版本tar
,也存储用户和组名,除非--numeric-owner
使用。bsdtar 也默认存储用户名和组名,但直到 bsdtar 3.0 才出现对创建--numeric-owner
选项的支持(注意 bsdtar 在提取时支持该选项的时间更长)。
以普通用户身份提取时,所有文件将始终归用户所有。它也不会不同,因为提取文件是在文件系统上创建一个新文件,普通用户无法创建文件并将所有权授予其他人。
当作为提取根,tar
会默认恢复解压缩文件的所有权,除非 --no-same-owner
被使用,这将给所有权根自己。
在 GNU tar、bsdtar 和 可能的其他版本中tar
,恢复的所有权由用户(和组)名称完成,如果该信息在存档中并且目标系统中有匹配的用户。否则,它将通过 ID 恢复。如果--numeric-owner
提供了选项,则忽略用户名和组名。
权限和时间戳也保存到存档中,并在默认情况下恢复,除非使用选项--no-same-permissions
和/或--touch
。当由用户萃取,用户的umask
被减去,除非从权限--same-permissions
被使用。
--preserve-permissions
和--same-permissions
是别名,并具有相同的功能-p
希望这有助于澄清问题!:)
tar
记录基于 UID 和 GID 的权限,而不是与它们关联的字符串。因此,如果一台服务器上的 UID 是 3300 并且链接到“bob”,则在新服务器上,该文件将由具有 UID 3300 的用户拥有。
UNIX 上的虚拟一切(我想说一切,但你永远不能 100% 确定)使用 UID:GID 值,因为那是实际存储在文件系统级别的内容。该名称只是在 passwd 文件中的简单查找,底层检查是使用数值完成的。
如果您尝试在两个系统之间传输文件,rsync 默认情况下将通过用户名而不是 uid 设置权限,并查看两端的用户名。仅当该用户不存在于其中一个系统上时,它才会使用 uid 复制该用户,除非您另有说明。