linux文件同步工具rsync

Linux文件同步工具rsync

安装包
yum install -y rsync

rsync常用选项
-a:归档模式,表示递归方式传输文件,并保持所有属性;通-rlptgoD;
-r:同步目录时要加上,类似cp时加R;
-v:同步时显示一些信息,让我们知道同步国创;
-l:保留软链接;
-L:同步软链接时会把源文件给同步;
-p:保持文件权限属性;
-o:保持文件的属主;
-g:保持文件的属组;
-D:保持设备文件信息;
-t:保持文件的时间属性;
--delte:删除DEST中SRC没有的文件;
--exclude:过滤指定文件,如--exclude “logs”会把文件log过滤掉,不同步;
-P:显示同步过程,比如速率,比-v更加详细;
-u:如果DEST中的文件比SRC新,则不同步;
-z:测试时压缩;

本地同步备份数据

rsync -av /etc/passwd /tmp/1.txt
例如:将/etc/passwd备份到tmp/1.txt文件中

[root@jinkai ~]# rsync -av /etc/passwd /tmp/1.txt
sending incremental file list
passwd

sent 1,160 bytes received 35 bytes 2,390.00 bytes/sec
total size is 1,069 speedup is 0.89
[root@jinkai ~]# cat /tmp/1.txt | head -2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

备份到远程计算机

备机上也得安装rsync:yum install -y rsync
rsync -av /etc/passwd root@192.168.111.137:/tmp/backup

将/etc/passwd文件同步备份到192.168.111.137机器的/tmp/backup

[root@jinkai ~]# rsync -av /etc/passwd root@192.168.111.137:/tmp/backup/
root@192.168.111.137‘s password:
sending incremental file list
passwd

sent 1,160 bytes received 35 bytes 77.10 bytes/sec
total size is 1,069 speedup is 0.89
[root@jinkai ~]#
[root@jinkai02 backup]# ls
passwd

ssh被修改端口情况下进行远程备份

rsync -avP -e "ssh -p 22" /root/abc/ root@192.168.111.137:/tmp/test2/
-e 指定服务和端口

[root@jinkai ~]# rsync -av -e "ssh -p 22" /etc/shadow root@192.168.111.137:/tmp/backup/
root@192.168.111.137‘s password:
sending incremental file list
shadow

sent 875 bytes received 35 bytes 55.15 bytes/sec
total size is 784 speedup is 0.86
[root@jinkai ~]#

删除目标目录中源目录没有的文件

rsync -av --delete /tmp/abc/ 192.168.111.137:/tmp/backup
将A机器/tmp/abc 文件夹中的文件备份到B机器/tmp/backup目录下,并删除/tmp/backu中不属于/tmp/abc的文件

[root@jinkai abc]# rsync -av --delete /tmp/abc/ 192.168.111.137:/tmp/backup
root@192.168.111.137‘s password:
sending incremental file list
deleting shadow
deleting passwd
./
1.txt
2.txt
3.txt
aa.swap
jinkai

sent 327 bytes received 134 bytes 11.11 bytes/sec
total size is 0 speedup is 0.00
[root@jinkai abc]#

过滤指定文件不同步

*将A机器/tmp/abc/目录下的文件除以txt结尾的文件外,其他文件都同步到B机器的/tmp/backup/下
rsync -av --exclude "
.txt" /tmp/abc/ 192.168.111.137:/tmp/backup**

远程同步备份,且不删除目标文件中比源文件新的文件(新旧以mtime时间为准)

B:[root@jinkai02 backup]# echo rewreqwrewqr > 1.txt
[root@jinkai02 backup]# cat 1.txt
Rewreqwrewqr
A:[root@jinkai01 abc]# rsync -avu /tmp/abc/ 192.168.111.137:/tmp/backup
B:[root@jinkai02 backup]# cat 1.txt
rewreqwrewqr

同步到其他机器方法

通过ssh的方法

需要输入密码(也可以两台机器设置秘钥,互相保存对方公钥,就可以避免输密码了)
rsync -avL /tmp/abc/ root@192.168.111.137:/tmp/backup/ 把本机的同步到远端
或者
rsync -avL root@192.168.188.3:/tmp/backup/ /tmp/abc/ 把远端同步到本机

通过后台服务的方法

编辑配置文件
/etc/rsyncd.conf

添加文件内容
port=873 #指定在哪个端口启动rsync服务,默认为873端口;
log file=/var/log/rsync.log #指定日志文件
pid file=/var/run/rsyncd.pid #指定pid文件,这个文件作用涉及服务启动和停止等进程管理操作
address=192.168.111.136 #指定启动rsyncd服务的ip,如果不指定参数,默认在全部ip上启动;
[test] #[ ]指定模块名,自定义;
path=/tmp/rsync #指定数据存放路径
use chroot=true #安全防护,默认为true,如果有软链接文件建议设置为false;
max connections=4 #指定最大连接数,默认为0,没有限制;
read only=no #read only=ture|false如果为true,则不能上传到该模块指定目录
list=true #表示当用户查询该服务器上可用模块时,该模块是否被列出,设置true则列出,设置为false则隐藏
uid=root #指定传输文件时使用哪个用户身份传输
gid=root #指定传输文件时使用哪个用户组身份传输
auth users=test #指定传输时要使用哪个用户名
secrets file=/etc/rsyncd.passwd #指定密码文件,该参数连同上面的参数如果不指定,则不使用密码验证,注意:改密码文件的权限一定要是600
hosts allow=192.168.111.137 #表示被允许连接该模块的主机,可以是IP或者网段,如果是多个,中间用空格隔开

注意:
必须创建目录/tmp/rsync、也就是path=/tmp/rsync
还有同步格式中的auth users后面的test表示为服务器自定义的模块名;如果指定使用用户名,必须创建好密码文件、文件权限为600、内容格式为用户名:密码;例如user:user123
使用之前最好关闭firewalld
systemctl stop firewalld
systemctl disable firewalld

启动服务

rsync --daemon

查看本机开启的端口
netstat -lnpt

[root@jinkai abc]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.111.136:873 0.0.0.0: LISTEN 10147/rsync
tcp 0 0 0.0.0.0:22 0.0.0.0:
LISTEN 7060/sshd
tcp6 0 0 :::22

创建文件path指定的备份目录
mkdir /tmp/rsync

创建密码文件

[root@jinkai rsync]# vim /etc/rsyncd.passwd
[root@jinkai rsync]# cat !$
cat /etc/rsyncd.passwd
test:admin123

[root@jinkai rsync]# chmod 600 /etc/rsyncd.passwd

备份本机文件到服务端

[root@jinkai02 backup]# rsync -av /tmp/backup/ test@192.168.111.136::test/
Password:
sending incremental file list
./
1.txt
2.txt
3.txt
aa.swap
jinkai

sent 381 bytes received 114 bytes 36.67 bytes/sec
total size is 36 speedup is 0.07
[root@jinkai02 backup]#

服务端备份到本机

[root@jinkai02 backup]# rsync -av test@192.168.111.136::test/test.txt /tmp/new.txt
Password:
receiving incremental file list
test.txt

sent 43 bytes received 105 bytes 8.97 bytes/sec
total size is 12 speedup is 0.08

上面两种都需要输入密码,还有两种可以实现无密码登录
1,在客户端编辑一个密码文件

[root@jinkai02 backup]# vim /etc/pass
[root@jinkai02 backup]# cat /etc/pass
admin123 //加入test用户密码
[root@jinkai02 backup]# chmod 600 /etc/pass // 给密码文件权限
在同步时指定密码文件,就可以不用输密码了
[root@jinkai02 backup]# rsync -av test@192.168.111.136::test/test.txt /tmp/new.txt --password-file=/etc/pass
receiving incremental file list
sent 20 bytes received 46 bytes 6.29 bytes/sec
total size is 12 speedup is 0.18

2,在rsync服务端不指定用户
修改配置文件rsyncd.conf,删除关于认证账户的配置项(auth user和 secrets file这两行)
sed -i ‘s/auth users/#auth users/;s/secrets file/#secrets file/‘ /etc/rsyncd.conf // 在配置文件里面给注释掉,这样就不会生效了
再到客户端上进行测试(这里可以不用加test,默认就是root了)

[root@jinkai02 backup]# rsync -av test@192.168.111.136::test/test.txt /tmp/new.txt
receiving incremental file list

sent 20 bytes received 46 bytes 6.29 bytes/sec
total size is 12 speedup is 0.18

使用指定端口备份文件

rsync服务器指定端口为8730,本机不开放8730端口,那么就需要加上port命令来实现;
(使用rsync命令默认端口为873端口,一旦服务器指定端口改变,就必须加上port来备份)

rsync -av --port 8730 192.168.111.136::test/test.txt /tmp/new.txt

linux文件同步工具rsync

上一篇:ubuntu16.04安装zabbix并添加主机监控


下一篇:Ubuntu 搭建路由器