1.rsync

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机或者本机目录之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
2.rsync命令格式
rsync [options] ...SRC  DEST

rsync [options] ...SRC  [user@]host:DEST

rsync [options] ...[user@]host:SRC  DEST

rsync [options] ...SRC  [user@]host::DEST

rsync [options] ...[user@]host::SRC  DEST

3.rsync选项

-a:以归档模式传递文件,同时保留文件的所有属性。等于-rlptgoD

-r:以目录递归模式处理

-v:详细模式输出

-l:保留软链接文件

-L:同步软链接文件的同时也同步该软链接的源文件

-p:保持文件权限

-o:保持文件属主信息

-g:保持文件属组信息

-D:保持设备文件信息

-t:保持文件时间信息

--delete:删除DEST中SRC没有的文件

--exclude:过滤指定文件

-P:显示同步过程,比-v更详细

-u:不更新DEST中比SRC新的文件

-z:传输时压缩

例1:本机同步文件

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

sent 1199 bytes  received 31 bytes  2460.00 bytes/sec
total size is 1125  speedup is 0.91

例2:远程同步文件

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

sent 1199 bytes  received 31 bytes  117.14 bytes/sec
total size is 1125  speedup is 0.91

例3:指定ssh及端口

[root@test_01 ~]# rsync -avP -e "ssh -p 22" /etc/passwd 192.168.231.129:/tmp/2.txt
sending incremental file list
passwd
        1125 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)

sent 1199 bytes  received 31 bytes  117.14 bytes/sec
total size is 1125  speedup is 0.91

4.rsync通过ssh同步

在/配置文件/etc/rsyncd.conf中增加如下内容

port=873
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
address=192.168.10.128
[test]
path=/tmp/rsync
use chroot=true
max connections=4
read only=no
list=true
uid=root
gip=root
#auth users=wennan
#secrets file=/etc/rsync.passswd
hosts allow=192.168.10.129

配置文件内容详解:

port:指定使用的端口

log file:日志文件存放路径

pid file:指定pid文件。该文件控制服务的启动、停止等管理操作。

address:启动rsyncd服务的客户端/服务器的IP地址

[]:指定模块名

path:指定数据存放的路径

use chroot true/false:表示传输文件的时候chroot到path指定的路径下。如果设置为true,无法同步软连接指向的源文件。

max connection:指定最大的连接数

read only:如果为true,则不能上传到该模块指定的路径下

list:设置为true时,用户可以列出远程服务器上的模块

uid/gid:指定传输文件爱你时使用的用户身份

auth users:制定传输时要使用的自定义用户

secrets file:指定密码文件,如果不指定该参数则不适用密码验证。改密码文件权限必须为600

hosts allow:被允许连接该模块的主机,可以使IP或者网段,如果是多个,中间用空格隔开。

例1:使用上述配置文件(不使用密码验证)远程同步文件

首先启动系统服务

[root@bogon ~]# rsync --daemon

确认服务已经正常启动

[root@bogon ~]# ps aux | grep rsync
root       1700  0.0  0.0 114652   524 ?        Ss   09:46   0:00 rsync --daemon
root       7058  0.0  0.0 112676   984 pts/0    S+   11:01   0:00 grep --color=auto rsync

在客户端同步文件

[root@bogon ~]# rsync -avP 192.168.10.128::test/rsync_test.txt /tmp/rsync_test_copy.txt
receiving incremental file list
rsync_test.txt
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)

sent 45 bytes  received 105 bytes  300.00 bytes/sec
total size is 0  speedup is 0.00
[root@bogon ~]# ls /tmp/
1.txt         rsync_test_copy.txt
anaconda.log  systemd-private-4410857bfadb4136b4959403dd4e994c-chronyd.service-rKVNBR

例2:开启配置文件中密码验证相关的配置,并在服务器端创建密码文件

[root@bogon ~]# vim /etc/rsync.passwd
[root@bogon ~]# chmod 600 /etc/rsync.passwd

该文件中的内容为wenna:test

wennan为传输时验证身份使用的用户名。以冒号分割,test为用户密码。

此处的用户及密码用于只为传输时身份验证使用,因此用户名以及密码均为自定义即可。

[root@bogon ~]# rsync -avP wennan@192.168.10.128::test/test2.txt /tmp/test2_copy.txt
Password: 
receiving incremental file list
test2.txt
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)

sent 75 bytes  received 141 bytes  48.00 bytes/sec

输入密码后传输完成。

例3:为了简化操作,可以在客户端定义密码文件以省去输入密码的步骤。在脚本使用较为方便。

下例中的/etc/rsync_passwd.txt即为密码文件。其中只记录了密码。

[root@bogon ~]# rsync -avP wennan@192.168.10.128::test/test2.txt /tmp/test2_copy.txt --password-file=/etc/rsync_passwd.txt 
receiving incremental file list

sent 56 bytes  received 102 bytes  316.00 bytes/sec
total size is 0  speedup is 0.00