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


20

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

Answers:


9

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

UNIX上的虚拟所有内容(我想说的都是一切,但您永远不能百分百确定)都使用UID:GID值,因为这实际上是存储在文件系统级别的内容。名称只是在passwd文件中的简单查找,使用数字值进行基础检查。


啊,那不好。我想在大多数情况下都合适。不幸的是,不是我一个人...谢谢,EightBitTony。
Marius 2012年

3
您最有可能是指GID(组标识符),而不是GUID(全局唯一标识符)。
CVn 2012年

6
GNU tar也确实保存了用户/组名数据,因为如果我在没有那些用户的计算机上列出了归档文件,就可以看到它。必须有一种方法使其在提取过程中使用它。
罗伯H

3
这个答案是完全错误的。tar 记录拥有者的名字。
Steffen Heil '18

55

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

  • 创建档案时,除非使用,另行说明tar否则将始终保留文件的用户名和组ID 。但是仍然始终会有与每个文件关联的用户和组。--owner=NAME--group=NAME

  • 除非使用了GNU tar,也许还有其他版本的tar也会存储用户和组--numeric-owner。让bsdtar也默认存储用户和组名,但支持--numeric-owner选项时创建为止,未发现的bsdtar 3.0(请注意,让bsdtar支持的选项提取更长的时间)。

  • 普通用户身份提取文件时,所有文件将始终归该用户所有。并没有什么不同,因为解压缩文件是在文件系统上创建一个新文件,并且普通用户无法创建文件并将所有权授予他人。

  • 当作为提取tar会默认恢复解压缩文件的所有权,除非 --no-same-owner被使用,这将给所有权根自己。

  • 在GNU tar,bsdtar以及可能的其他版本中tar,如果该信息在归档文件中并且目标系统中有匹配的用户,则还原的所有权由用户(和组)名称完成。否则,它将按ID恢复。如果提供了选项,则将忽略用户名和组名。--numeric-owner

  • 权限和时间戳也会保存到存档中,并且默认情况下会还原,除非使用选项--no-same-permissions和/或--touch。当由用户萃取,用户的umask减去,除非从权限--same-permissions被使用。

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

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


3
极好的答案;回答此问题以及该主题上可能出现的所有其他问题。
user1107893 2014年

应该注意的是,只有最新版本的GNU tar允许在--owner或中指定任意名称,--group过去tar在当前计算机上进行了无偿查找,/etc/passwd并且如果没有匹配项,则拒绝运行。
Matteo Italia

如果创建具有指定名称的存档--owner同时又添加到--numeric-owner标志中,该怎么办?tar如何处理这些相互竞争的需求?
CMCDragonkai '16

@CMCDragonkai:--owner--numeric-owner并不互斥,并且具有非常不同的用途:--owner=USERNAME在归档文件时将覆盖文件和目录所有者,而--numeric-owner不会仅存储用户名,而不会存储用户名。
MestreLion,2016年

4

在GNU tar中使用--same-owner选项。参见http://www.gnu.org/software/tar/manual/html_section/Attributes.html


它被记录为超级用户的默认设置,似乎在回答OP的问题上不同于接受的答案。(链接说,当GNU tar使用--same-owner恢复时,它首先会在/ etc / passwd中查找名称。)唯一未解决的问题是OP的tar版本是否实现了--same-owner。
Mike Sherrill'Cat Recall'

OP正在使用某些Linux发行版,因此比使用GNU tar的机会更好。通过文档,可能在接受的答案表明不是这样的情况下
Colin't Hart 2012年

@Catcall-抱歉,我什至没有机会进行测试就接受了答案。我只是盲目地信任别人。不过,回答的人还算不错,因为我没有使用“ --same-owner”进行恢复,因此您已经添加了答案。太糟糕了,我不能接受。我正在使用确实支持“ --same-owner”的debian squeeze。谢谢你的提示。
Marius 2012年

@Marius:我很确定您可以随时更改接受的答案。(我只是指出,我没有对此问题提供任何答案,仅是评论。我没有任何
Mike Sherrill'Cat Recall'

4

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


这并不能直接回答OP的问题,但是任何问OP的问题的人也应该学习这一点。
Mike Sherrill'Cat Recall'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.