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