使用rsync同步生产服务器文件:设置组权限及解决参数报错
解决rsync同步时设置用户组和权限的问题
首先,你遇到的no matches found: --usermap=*:www-data错误,根源是shell的通配符解析:当你在命令里写*时,bash会自动尝试用它匹配当前目录下的文件,如果没有找到匹配项,就会抛出这个错误。解决这个问题很简单,把带*的参数用单引号或双引号包裹,让shell直接把*传递给rsync而不是自己解析。
不过其实你不需要用到--usermap和--groupmap这么复杂的选项,rsync的--chown参数就能直接帮你把所有同步的文件和目录的组统一设置为www-data,而且是递归生效的。结合你的权限需求,我给你整理了两个可行的方案:
方案1:用--chown直接设置组(推荐)
这个方法更简洁,也更容易理解。注意要去掉-og选项(这个选项是保留源文件的所有者和组信息,和你要统一设置组的需求冲突),同时用--chown=:www-data指定目标组为www-data:
rsync -rvp --chown=:www-data --chmod=u+rwx,g+rwx,o=rx public/ myuser@123.12.12.123:/var/www/mysite
参数说明:
-r:递归同步目录-v:显示同步过程-p:保留源文件的权限(但会被--chmod覆盖,如果你需要强制设置权限,这个选项可以保留)--chown=:www-data:把所有目标文件的组设置为www-data(冒号前留空表示不修改用户)--chmod=u+rwx,g+rwx,o=rx:强制设置用户、组、其他用户的权限
方案2:修复--groupmap的引号问题
如果你坚持要用--groupmap,只需要把参数用单引号包裹,避免shell解析*:
rsync -rvp --groupmap='*:www-data' --chmod=u+rwx,g+rwx,o=rx public/ myuser@123.12.12.123:/var/www/mysite
额外注意事项
- 确保你的rsync版本是3.1.0或以上:
--chown和--groupmap在远程同步中的支持是从这个版本开始的。如果你的rsync版本太低,可以用rsync --version查看,必要时升级rsync。 - 验证结果:同步完成后,登录目标服务器执行
ls -l /var/www/mysite,检查文件的组是否为www-data,权限是否符合u+rwx,g+rwx,o=rx的要求。 - 如果rsync版本无法升级,也可以分两步操作:先用你原来的命令同步文件,然后在目标服务器执行以下命令补全组和权限设置:
sudo chgrp -R www-data /var/www/mysite sudo chmod -R g+rwx /var/www/mysite
内容的提问来源于stack exchange,提问作者Harrison Cramer
相关产品推荐
相关产品推荐

