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