rsync文件同步使用说明
常用参数
-a 归档模式(最常用,替代-r参数,递归传输并保持文件属性,等同于-rlptgoD)
-v 显示执行过程明细
-z 压缩模式
-n 模拟执行
-i 显示传输文件的路径
-P 显示文件传输进度
--exclude 指定排除不进行同步的文件/目录,rsync在使用排除路径的时候对于路径的解析比较特殊,它使用相对路径且是从待同步的路径开始,比如待同步目录为/tmp/a/b,则相对于b目录以b目录作为排除路径的基准,比如待同步目录为/tmp/a,则相对于a目录以a目录作为排除路径的基准。具体写法,可以使用-ni参数查看rsync命令实际执行使用的路径
传输方式
方式一:使用SSH协议
rsync默认使用SSH协议通过管道进行通信
rsync -av /tmp/src root@192.168.1.2:/tmp/dest
方式二:使用rsync协议
另外,可以通过rsync daemon,使用资源模块通过socket通信的方式传输文件(需要服务端已开启rsync daemon守护进程)
形式一:使用rsync风格双冒号::
rsync -av /tmp/src 192.168.1.2::moudle1
形式二:使用url风格rsync://
rsync -av /tmp/src rsync://192.168.1.2/moudle1
服务端编辑配置文件 /etc/rsyncd.conf
### 全局配置参数 ###
uid = root #rsync服务的运行用户,默认是nobody
gid = root #rsync服务的运行组,默认是nobody
log file = /var/log/rsyncd.log #指定rsync的日志文件,而不把日志发送给syslog
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 .7z .rar #指定哪些文件不用进行压缩传输
### 局部参数资源模块配置,可以设置多个模块 ###
[moudle1] #模块ID,不可重名
path = /tmp/dest #指定模块路径,必选项,启动rsync命令前该目录必须存在,rsync请求访问模块本质就是访问该路径
read only = false #关闭模块的只读模式,可以上传写入。所有模块默认情况下为只读模式
hosts allow = 192.168.1.1 #rsync访问IP白名单模式,在服务端配置文件中写入客户端的IP地址,以允许客户端IP访问该服务端IP,未写入的其他IP拒绝连接;多个IP使用空格分隔
auth users = test1 test2 #指定连接到该模块的用户列表,多个用户用空格分隔,只有指定的用户才能连接到该模块其他用户则不可以,设置该参数后在客户端使用rsync命令时需要使用“用户名@服务端”来指定客户端使用哪个用户进行连接,此用户列表为虚拟用户而非系统用户,用户名和对应密码保存在secrts file中,若不设置该参数则默认接受所有匿名连接
secrets file = /etc/rsyncd.users #保存auth users用户列表的用户名和密码,每行包含一个username:passwd,需要设置文件权限为600
模块访问限制模块访问限制
使用模块的访问方式时,默认情况下,服务端开启rsync daemon守护进程后,客户端电脑不需要身份验证就可以直接向服务端同步文件,存在安全风险,因此需要对IP、user等做相应限制
IP访问限制
白名单模式:通过hosts allow设置白名单IP
黑名单模式:通过hosts deny设置黑名单IP
不设置IP限制表示任意IP均可连接
user访问限制
非交互式:不设置auth users,使用默认匿名形式直接访问;或者使用auth users,但在客户端执行rsync同步命令时使用--password-file参数自动调用密码文件(执行命令时不需要手动输入密码,rsync命令可以自动执行)
交互式:设置auth users,使用指定虚拟用户访问(执行命令时需要手动输入该指定用户的密码)
查询服务端守护进程已分配的资源模块列表
客户端执行命令
rysnc 192.168.1.2::
rsync rsync://192.168.1.2
关于源目录是否带斜杠/
同步的源目录不带斜杠/表示将目录整体复制,带斜杠/表示仅复制目录下的所有文件而不包括目录本身
rsync -av /tmp/src rsync://192.168.1.2/moudle1 #将src目录全部复制到远端,包含src目录本身
rsync -av /tmp/src/ rsync://192.168.1.2/moudle1 #将src目录下的所有文件复制到远端,不包含src目录本身
rsync同步示例rsync同步示例
客户端:192.168.1.1,目录/tmp/src,确认已安装rsync工具
服务端:192.168.1.2,目录/tmp/dest,确认已安装rsync工具,并确认已开启守护进程
服务编辑配置文件/etc/rsyncd.conf,编辑配置文件后不需要重启rsync服务,配置会自动生效
客户端执行同步命令
rsync -avzP /tmp/src root@192.168.1.2/tmp/dest #使用SSH协议方式同步
rsync -avzP /tmp/src rsync://192.168.1.2/moudle1 #使用daemon模块方式同步,下同
rsync -avzPin /tmp/src rsync://192.168.1.2/moudle1 #使用-in参数显示路径并测试同步执行情况
rsync -avzP /tmp/src --exclude=files/a.txt rsync://192.168.1.2/moudle1 #排除某个文件/目录
rsync -avzP /tmp/src --exclude={files/a.txt,files/b.txt} rsync://192.168.1.2/moudle1 #排除多个文件/目录
rsync -avzP /tmp/src rsync://test1@192.168.1.2/moudle1 #指定使用虚拟用户test1
rsync -avzP /tmp/src --password-file=/etc/rsyncd.passwd rsync://test1@192.168.1.2/moudle1 #指定使用虚拟用户test1,并设置自动读取客户端密码文件
扩展说明扩展说明
- 默认情况下,rsync只检查文件的大小和最后修改日期是否发生变化,如果发生变化,就重新传输;如果使用-c或--checksum参数,则通过判断文件内容的校验和,决定是否重新传输
- --delete 从目标端目录中删除源目录中不存在的文件,即保证目标目录是源目标的镜像
- -i 表示输出源目录与目标目录之间文件差异的详细情况
- --include 指定同步时要包括的文件,一般与--exclude结合使用
- -v 显示rsync过程中详细信息,可以使用"-vvvv"获取更详细信息
- --port 连接daemon时使用的端口号,默认为873端口
- --password-file daemon模式时的密码文件,可以从中读取密码实现非交互式。这不是远程shell认证的密码,而是rsync模块认证的密码,例如--password-file=/etc/rsyncd.passwd,设置文件权限为600,密码文件中只有第一行才是传递的密码,其余所有的行都会被自动忽略。注意,这个文件存放在命令发起端电脑,执行rsync同步命令时作为参数来使用
- daemon方式使用模块时,客户端推到服务端时,文件的属主和属组是配置文件中指定的uid和gid。但是客户端从服务端拉取的时候,文件的属主和属组是客户端正在操作rsync的用户身份,因为执行rsync程序的用户为当前用户