rsync pull 忽略了我的 umask,为什么?

rsync pull 忽略了我的 umask,为什么?

umask的是0002

那么当我 时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

答案1

我错误地认为rsync没有该-p标志的推送/拉取将与推送/拉取类似git,并且新文件将具有完全权限减去umask

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

按照man rsync

新文件的“正常”权限位设置为源文件的权限,并以接收端的umask设置进行屏蔽,并且其特殊权限位被禁用,除非新目录setgid从其父目录继承了位。

更好的是,有一个简单的建议,说明如何创建一面旗帜,忽略源权限:

要为新文件赋予目标默认权限(同时保持现有文件不变),请确保选项--perms处于关闭状态并使用--chmod=ugo=rwX(这可确保所有非屏蔽位都已启用)。如果您希望使后一种行为更易于输入,可以popt为其定义一个别名,例如将此行放入文件中~/.popt(这定义了-s选项,并包括--no-g使用目标目录的默认组):

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

然后您可以在如下命令中使用此新选项:

rsync -asv src/ dest/

(警告:确保-a不遵循-s,否则它将重新启用--no-*选项。)

我想我会这么做!

答案2

我认为 setgid 有点令人困惑。请查看 rsync 手册页中的 -p 选项。

答案3

原来设置的权限是啥?

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

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

相关内容