rsync权限问题--目标权限未正确应用

21

这就是我想要做的事情:

rsync -rvl --chmod=ug=rwX,o=rX test /var/www

完成操作后,这是我得到的结果:

drwxr-xr-x

(实际上是 drwxr-sr-x,但这可能不重要……对吗?)

很明显,这不是我想要的。我希望组有写入权限,但由于某种原因,rsync 命令没有设置它们。

有人知道为什么吗?我的语法有错误吗?如果有帮助的话,我正在从OSX传输到Linux(Debian)。

更新:此外,如果有帮助的话,当我输入umask时,会得到0002。所以那不是问题所在。


那个umask是在哪一端?另一端是什么? - SimonJ
@SimonJ,服务器端的umask为0002,在我本地端则为0022。 - Philip Walton
服务器应该是 Linux 系统 (即目标地)? - SimonJ
这似乎是一个有用的话题,但应该迁移到 Unix。 - Tom Zych
3个回答

34

--chmod 覆盖了发送方的权限,但如果你没有同时指定 -p--perms,那么不管怎样目标文件的默认权限都会被使用(也就是说,--chmod 会被忽略)。

来自rsync的man手册第一章

--chmod

该选项告诉rsync在传输过程中对文件的权限应用一个或多个逗号分隔的“chmod”字符串。结果值被视为发送端提供给文件的权限,这意味着如果未启用--perms,则此选项似乎对现有文件没有影响


20

你需要在 -p 选项后使用 --chmod,例如:

$ rsync -avz --chmod=o-rwx -p tata/ tata2/

以下是完整的测试:

在文件夹中创建一些文件

$ mkdir tata
$ mkdir tata2
$ cd tata
$ touch tyoto
$ touch tiuti

默认权限为:u=rw,g=r,o=r

$ ls -l 
total 0
-rw-r--r-- 1 romain users 0 fév 16 11:48 tiuti
-rw-r--r-- 1 romain users 0 fév 16 11:48 tyoto

尝试不带参数的rsync

$ cd ..
$ rsync -avz tata/ tata2/

目标文件的权限与源文件相同

$ ls -l tata2
total 0
-rw-r--r-- 1 romain users 0 fév 16 11:48 tiuti
-rw-r--r-- 1 romain users 0 fév 16 11:48 tyoto

指定rsync选项--chmod=o-rwx -p

$ rsync -avz --chmod=o-rwx -p tata/ tata2/
$ ls -l tata2
total 0
-rw-r----- 1 romain users 0 fév 16 11:48 tiuti
-rw-r----- 1 romain users 0 fév 16 11:48 tyoto

现在你的权限设置已经正常。


5
我认为您需要添加--perms(又称-p)。引用自manpage的话:
当关闭此选项时,权限设置如下: 新文件的“正常”权限位设置为源文件的权限掩码与接收目录的默认权限(接收进程的umask或通过目标目录的默认ACL指定的权限)相与,并禁用其特殊权限位,但在新目录继承其父目录的setgid位的情况下除外。
我怀疑您的目标系统具有典型的umask,例如022,这会阻止rsync设置组写位。不幸的是,--chmod没有提到umask如何应用或不应用。

我不想使用-p选项,因为我的本地文件也没有组写入权限。我的umask设置为0002,所以我不认为这是问题的原因。 - Philip Walton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接