我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。