如果用户 ID 更改,tar 是否保留权限?

Mar*_*ius 22 linux tar

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

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

  • 优秀的回答;回答这个问题以及关于该主题可能出现的所有其他问题。 (4认同)

Eig*_*ony 7

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

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

  • GNU tar 也保存用户/组名数据,因为如果我在没有这些用户的机器上列出存档,我可以看到它。必须有办法让它在提取过程中使用它。 (7认同)
  • 这个答案完全不正确。`tar` *确实* 记录所有者姓名。 (5认同)
  • 您很可能是指 GID(组标识符),而不是 GUID(全局唯一标识符)。 (3认同)

Col*_*art 5

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


Gra*_*ant 5

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