rsync拉忽视我的umask,为什么?

我的umask0002

所以当我rsync -r me@remote:new . ,为什么结果小组可写?

 drwxrwsr-x 10 root developers 4096 Aug 22 12:55 . drwxrwsr-x 12 root developers 4096 Jul 14 19:05 .. drwxrwsr-x 3 root developers 4096 May 16 15:04 old drwxr-sr-x 4 aaronadams developers 4096 Jun 26 15:17 new 

我错误地认为没有-p标志的rsync push / pull会像git push / pull那样工作,并且新文件将具有完全的权限减去umask

但是,即使没有-p标志, rsync仍然保留源文件的权限。 -p标志只是指示rsync (尝试)忽略接收者的umask

按照每人man rsync

新文件将其“正常”权限位设置为源文件的权限,并使用接收端的umask设置进行屏蔽,除非新目录从其父目录inheritancesetgid位,否则禁止其特权。

更好的是,如何创build忽略源权限的标志有一个简单的build议:

要为新文件指定目标默认权限(同时保持现有文件不变),请确保--perms选项已closures,并使用--chmod=ugo=rwX (确保所有非屏蔽位都已启用)。 如果你想让后面的行为更容易input,你可以为它定义一个popt别名,比如把这行放在~/.popt文件中(这个定义了-s选项,并且包括了--no-g使用目标dir的默认组):

 rsync alias -s --no-p --no-g --chmod=ugo=rwX 

然后你可以在这个命令中使用这个新选项:

 rsync -asv src/ dest/ 

(注意:确保-a不跟随-s ,否则将重新启用--no-*选项。)

我想我会这样做的!

我觉得setgid是令人困惑的事情。 查看rsync手册页中的-p选项。

原始设置的权限是什么?

umask是一个filter,而不是一个设置。 换句话说,它限制了可以为文件(和目录)设置的权限位。 它不强制或要求设置任何权限,只有某些位不能被设置。

如果您需要设置组写入,则可能需要在rsync之后运行chmod。