Linux之rsync
rsync工具介绍
rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快
语法:rsync [option] SRC DEST
本地同步:rsync -av SRC DEST
远程同步: rsync -av SRC user@ip:DEST
常用选项
-a
:包含-rtplgoD
几个选项-r
:同步目录时使用,类似cp -r
用法-v
:可视化,同步时显示一些信息,让我们知道同步过程-l
:保留软链接-L
:同步软链接时将源文件一起同步-p
:保持文件权限-o
:保持文件属主-g
:保持文件属组-D
:保持设备文件信息-t
:保持文件时间属性--delte
:删除DEST中SRC里面没有的文件--exclude
:过滤指定文件;比如--include "logs"
,会将文件名包含logs的文件或者目录过滤掉,不同步-P
:显示同步过程,比如速率等,比-v
更详细-u
:如果DEST中的文件比SRC中的文件更新,则不同步-z
:同步时压缩--port
:指定传输端口
rsync应用(通过ssh方式同步)
背景:A机(192.168.101.130)和B机(192.168.101.132)之间可以互相通信,并且都安装了rsync。
-
rsync -av test1/ 192.168.101.132:/tmp/test2/
:将A机/test1/目录同步到B机/tmp/test2/. -
rsync -avP 192.168.101.132:/tmp/test2/ /tmp/test1/
:也可以从B机同步到A机 -
rsync -av -e "ssh -p 22" test/ 192.168.101.132:/tmp/test2/
:指定通过22端口同步
rsync通过服务同步
背景:A机(192.168.101.130)和B机(192.168.101.132)之间可以互相通信,并且都安装了rsync。
- 编辑配置文件·
/etc/rsyncd.conf
rsyncd.conf 样例(服务端):
port=873
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
address=192.168.101.130
[test]
path=/tmp/rsync
use chroot=true
max connection=4
read only=no
list=true
uid=root
gid=root
auth users=test
secrets file=/etc/rsyncd.passwd
host allow=192.168.101.132
port:指定启动rsync的端口
log file:指定日志文件
pid file:指定pid文件;这个文件涉及服务启动,停止等进程管理操作
address:指定启动rsync服务的ip;如果不指定,则默认本机所有ip上启动
[test]:模块名(自定义)
path:数据存放路径(需要先创建一个目录)
use chroot:传输文件之前先chroot到path参数指定的路径下;默认为true,当数据中有软链接时,建议设置为false
max connection:最大连接数(0表示无限制)
read only:参数为true时则无法写入到服务端,不能上传到指定路径下;false则相反
list:决定在用户查找服务器上可用的模块时是否被列出(true表示列出,false表示隐藏)
uid:指定传输文件时以哪个用户的身份进行
gid:指定传输文件时以哪个组的身份进行
auth users:指定传输时要使用的用户的用户名
secrets file:指定密码文件,该参数连同上面的参数如果不指定,则不使用密码验证;(该密码文件权限一定要是600.格式为"user:password")
host allow:指定被允许连接该模块的主机(可以是ip或ip段,如果有多个,中间由空格隔开)
当设置了auth users 和 secrets file 后,客户端连接服务器也需要用户名密码了,若想命令行中带上密码,可以指定一个密码文件:
rsync -avL test@192.168.101.130::test/test1/ /tmp/test3/ --password-file=/etc/pass
其中/etc/pass
内容就是一个密码,权限为600
rsync --port=873 192.168.101.130(服务器ip)::
:查询可用的模块
- 启动服务
rsync --daemon
- 检查是否已启动
pa -aux |grep rsync
[root@localhost .ssh]# rsync --daemon
[root@localhost .ssh]# ps -aux |grep rsync
root 2780 0.0 0.0 114644 564 ? Ss 22:32 0:00 rsync --daemon
root 2782 0.0 0.0 112664 968 pts/1 S+ 22:33 0:00 grep --color=auto rsync
- 检查监听端口
[root@localhost .ssh]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 952/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1535/master
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 2780/rsync
tcp6 0 0 :::22 :::* LISTEN 952/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1535/master
tcp6 0 0 :::873 :::* LISTEN 2780/rsync
- 同步格式:
rsync -av test1/ 192.168.101.132::module/dir
telnet ip 端口
:检查一个端口是否连通,Ctrl+u --> i 退出;如果失败,检查iptables,firewalld