如何使用 rsync

整合 Centos
阅读数: 642 2018年11月28日

rsync 服务端和客户端运行模式

1、客户端模式:直接输入命令操作,如果同步远程服务器未开启 rsync 服务进程,就必须再次输入密码,而不能直接带入密码在命令行里面。

2、服务端模式:配置 /etc/rsyncd.conf 、 /etc/rsyncd.passwd,并且开启服务(rsync --daemon),然后客户端携带密码文件和本服务器同步。


rsync 命令

rsync 是一个功能非常强大的工具,其命令也有很多功能选项。rsync 的命令格式为:


1)本地使用:

rsync [OPTION...] SRC... [DEST]


2)通过远程 Shell 使用:

拉: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
推: rsync [OPTION...] SRC... [USER@]HOST:DEST


3)访问 rsync 服务器:

拉: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
推: rsync [OPTION...] SRC... [USER@]HOST::DEST
拉: rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
推: rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST


【注意】

SRC: 是要复制的源位置(注意HOST后面的冒号“:”)

DEST: 是复制目标位置(注意HOST后面的冒号“:”)

若本地登录用户与远程主机上的用户一致,可以省略 USER@

使用远程 shell 同步时,主机名与资源之间使用单个冒号“:”作为分隔符

使用 rsync 服务器同步时,主机名与模块之间使用两个冒号“::”作为分隔符(注意:: 后面的是模块,不是路径,此模块是 rsync 服务器配置的)

当访问 rsync 服务器时也可以使用 rsync:// URL

“拉”复制是指从远程主机复制文件到本地主机

“推”复制是指从本地主机复制文件到远程主机

当进行“拉”复制时,若指定一个 SRC 且省略 DEST,则只列出资源而不进行复制


rsync 参数选项详解。

-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD

-r, --recursive 对子目录以递归模式处理

-l, --links 保留软链结

-p, --perms 保持文件权限

-t, --times 保持文件时间信息

-o, --owner 保持文件属主信息

-g, --group 保持文件属组信息

-D, --devices 保持设备文件信息

--delete 删除那些DST中SRC没有的文件   。 会把目的文件中没有的文件删掉

--delete-excluded 同样删除接收端那些被该选项指定排除的文件

--delete-after 传输结束以后再删除

--exclude=PATTERN 指定排除不需要传输的文件模式

-P 等同于 --partial --progress 显示备份过程

-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件,不覆盖更新的文件


【例子】

推送

rsync -avzP /temp/public/zip.zip root@x.x.x.x:/temp/public


客户端模式同步:

rsync -avz --delete --exclude "/.../pingce/storage/logs" /.../pingce/ root@b.b.b.b:/mnt/web/online/pc
rsync -a dagobuytech.com.conf root@xx.xx.xx.xxx:/usr/local/nginx/conf/vhost #传送 nginx 配置文件到另外一台服务器上

客户端用法很简单,密码验证不能使用  --password-file 方式,只能再次输入密码。


服务端模式同步:(注意:ip后面跟的 ::模块)


服务端模式,需要配置好服务模块,下面重点讲这个。


1、在服务端编辑配置文件

配置文件 /etc/rsyncd.conf ,内容如下:

#port=873        #监听端口默认为873,也可以是别的端口

log file=/var/log/rsync.log  #指定日志

pid file=/var/run/rsyncd.pid  #指定pid

#address=192.168.0.10  #可以定义绑定的ip

以上部分为全局配置部分,以下为模块内的设置

[pingce]    #为模块名,自定义

path=/tmp/123   # 指定该模块对应在哪个目录下

use chroot=true #是否限定在该目录下,默认为true,当有软连接时,需要改为fasle,如果为true就限定为模块默认目录

max connections=4  # 指定最大可以连接的客户端数

read only=no #是否为只读,如果是no的话,客服端推送给服务端的时候不成功,这时候要改成yes

list=true #是否可以列出模块名    rsync --port 8730   172.16.37.139::  如果为yes的话会列出客户端所有的模块名字。  

uid=root #以哪个用户的身份来传输   

gid=root  #以哪个组的身份来传输

auth users=test #指定验证用户名,可以不设置,不设置默认不用密码,设置的话安全性更高点

secrets file=/etc/rsyncd.passwd #指定密码文件,如果设定验证用户,这一项必须设置,设定密码权限为400.

hosts allow=192.168.0.101 #设置可以允许访问的主机,可以是网段,多个Ip地址用空格隔开

exclude = beinan/ samba/ #exclude是排除的意思,也就是说,要把/home目录下的easylife和samba排除在外; easylife/和samba/目录之间有空格分开

ignore errors  #忽略IO错误


密码文件/etc/rsyncd.passwd的内容格式为:username:password 

启动服务的命令是:rsync --daemon 

默认去使用/etc/rsyncd.conf这个配置文件,也可以指定配置文件 rsync --daemon --config=/etc/rsyncd2.conf,更改配置文件不用重启服务,即时生效。 


2、在客户端保存服务端的密码文件权限为400,以便脚本使用。

[root@game_app ~]# vim /etc/123.pass 

abc123


3、把客户端的123文件下的内容放到服务端,这是服务端的read-only 要改成no,否则上传不成功。

[root@game_app ~]# rsync -avPz  --port 8730 123/  --password-file=/etc/123.pass  abc@172.16.37.139::abc 

sending incremental file list

./

anaconda-ks.cfg

        1338 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1/3)

install.log

       49733 100%   11.86MB/s    0:00:00 (xfer#2, to-check=0/3)

sent 12379 bytes  received 49 bytes  24856.00 bytes/sec

total size is 51071  speedup is 4.11


4、在客户端查看服务端的模块名字,无需密码

[root@game_app ~]# rsync --port 8730 172.16.37.139::

abc


5、服务端不需要同步给客户端的文件,加上--exclude=filename

[root@game_intf 123]# rsync -avzP  --exclude=install.log --exclude=2 /tmp/123/ itv@172.16.37.140:/home/itv/123 

itv@172.16.37.140's password: 

sending incremental file list

参考资料
参考:
https://www.cnblogs.com/noxy/p/8986164.html
https://www.linuxidc.com/Linux/2014-09/106574.htm
https://www.cnblogs.com/jtlin/p/6018776.html
https://www.cnblogs.com/wang-xd/p/6551402.html
https://yq.aliyun.com/ziliao/105273
phpriji.cn | 网站地图 | | 沪ICP备17015433号-1