rsync 工具介绍

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

  • 安装rsync:yum install -y rsync

rsync 六种不同的模式

命令格式 工作模式
rsync[OPTION]... SRC DEST 同步本地文件。当SRC和DES路径信息都不包含有单个冒号“:”分隔符时就启动这工作模式。
rsync[OPTION]... SRC [USER@]HOST:DEST 将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号“:”分隔符时启动该模式。
rsync[OPTION]... [USER@]HOST:SRC DEST 将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号“:”分隔符时启动该模式。
rsync[OPTION]... [USER@]HOST::SRC DEST] 使用一个远程shell程序(如ssh、rsh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含两个冒号“:”分隔符时启动该模式。
rsync[OPTION]... SRC [USER@]HOST::DEST 使用一个远程shell程序(如ssh、rsh)来实现将本地机器的内容拷贝到远程机器。当DEST地址路径包含两个冒号“:”分隔符时启动该模式。
rsync[OPTION]... rsync://[USER@]HOST[:PORT]/SRC[DEST] 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。

注意: src表示源文件,dest表示目的文件

rsync 常用选项

rsync 常用选项

  • -a 包含rtplgoD
    • -r:同步目录时加上表示对子目录进行递归处理
    • -t:保持文件的时间属性
    • -p(小写):保持文件的权限属性
    • -l:保留软链接
    • -g:保存文件数组
    • -o:保持文件的属组
    • -D:保存设备文件信息
  • -v:可视化(visual)
  • -L:同步软链接的同时同步其源文件
  • -P(大写):显示同步过程,比v更详细
  • -u:update,加上该选项,如果DEST中文件比SRC中的新,则不同步
  • -z:gzip,传输时压缩
  • --delete:删除DEST中SRC没有的文件
  • --exclude:过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步

rsync 常用选项的应用

  • 同步本地机器上的文件

    [root@localhost ~]# rsync -av /root/abc/ /tmp/abc_dest/ sending incremental file list created directory /tmp/abc_dest ./ 1.txt 1.tx~ test123.txt -> /root/test/test a/ sent 200 bytes received 60 bytes 520.00 bytes/sec total size is 15 speedup is 0.06 [root@localhost ~]# ls -l /tmp/abc_dest/ 总用量 0 -rw-r--r--. 1 root root 0 12月 5 15:00 1.tx~ -rw-r--r--. 1 root root 0 12月 5 15:00 1.txt drwxr-xr-x. 2 root root 6 12月 5 14:59 a lrwxrwxrwx. 1 root root 15 12月 5 15:04 test123.txt -> /root/test/test [root@localhost ~]# rsync -avL /root/abc/ /tmp/abc_dest sending incremental file list test123.txt sent 1287 bytes received 32 bytes 2638.00 bytes/sec total size is 1151 speedup is 0.87 [root@localhost ~]# ls -l /tmp/abc_dest/ 总用量 4 -rw-r--r--. 1 root root 0 12月 5 15:00 1.tx~ -rw-r--r--. 1 root root 0 12月 5 15:00 1.txt drwxr-xr-x. 2 root root 6 12月 5 14:59 a -rw-r--r--. 1 root root 1151 11月 25 11:04 test123.txt

没加-L参数时候,同步数据时会把软链接同步过来,加了-L参数后,同步数据时把软链接文件对应的源文件同步过来。

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

    [root@localhost ~]# ls abc/ 1.tx~ 1.txt a test123.txt [root@localhost ~]# ls /tmp/abc_dest/ 1.tx~ 1.txt a new.txt test123.txt [root@localhost ~]# rsync -avL --delete /root/abc/ /tmp/abc_dest/ sending incremental file list ./ deleting new.txt sent 96 bytes received 16 bytes 224.00 bytes/sec total size is 1151 speedup is 10.28 [root@localhost ~]# ls /tmp/abc_dest/ 1.tx~ 1.txt a test123.txt

--delete可以比较源文件和目标文件,当目标文件比源文件多某个文件时,使用--delete参数可以将目标文件中多出来的文件删除。如果不加--delete参数,只会同步源文件中的文件,目标文件中多余的文件不会动。

  • --exclude 过滤指定文件

    [root@localhost ~]# rsync -av --exclude "*.txt" /root/abc/ /tmp/abc_dest/ sending incremental file list ./ 1.tx~ a/ sent 107 bytes received 38 bytes 290.00 bytes/sec total size is 0 speedup is 0.00 [root@localhost ~]# ls /tmp/abc_dest/ 1.tx~ a [root@localhost ~]# ls abc/ 1.tx~ 1.txt 2.txt a test123.txt

--exclude "*.txt" 同步时,不同步以.txt结尾的文件。如果需要过滤多个条件,则需要用多个--exclude。

  • -P(大写)显示同步过程,比v更详细。

    [root@localhost ~]# rsync -avP /root/abc/ /tmp/abc_dest/ sending incremental file list ./ 1.txt 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=4/6) 1.tx~ 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=3/6) 2.txt 7 100% 0.00kB/s 0:00:00 (xfer#3, to-check=2/6) test123.txt -> /root/test/test a/

    sent 268 bytes received 79 bytes 694.00 bytes/sec total size is 22 speedup is 0.06

使用大写p参数,可以显示同步传输的速度、和进度。传输大文件时很实用。

  • -u:update

    [root@localhost ~]# cat /root/abc/123 test 20171201 [root@localhost ~]# cat /tmp/abc_dest/123 test 20171205 test 20171205 [root@localhost ~]# rsync -avu /root/abc/ /tmp/abc_dest/ sending incremental file list ./ sent 146 bytes received 16 bytes 324.00 bytes/sec total size is 36 speedup is 0.22 [root@localhost ~]# cat /tmp/abc_dest/123 test 20171205 test 20171205 [root@localhost ~]# cat /root/abc/123 test 20171201

加上该选项,如果DEST中文件比SRC中的新,则不同步。

通过ssh同步

通过ssh同步的两台机器需要相互之间可以通信,并且两台都要安装rsync工具。

  • 通过ssh的方式,将一台机器的文件同步到另一台机器。

    [root@localhost ~]# rsync -av /etc/passwd 192.168.159.130:/tmp/2017.txt root@192.168.159.130's password: sending incremental file list passwd sent 1202 bytes received 31 bytes 352.29 bytes/sec total size is 1128 speedup is 0.91

将本地 /etc/passwd 文件同步到远程主机192.168.159.130.

注意: 同步到远程主机上时,如果没选择用户,则当前是那个用户在操作,就那个用户登录远程主机(远程主机上需要有相同的用户)。

[root@localhost ~]# rsync -av 192.168.159.130:/tmp/2017.txt /tmp/201712.txt
root@192.168.159.130's password: 
receiving incremental file list
2017.txt
sent 30 bytes  received 1209 bytes  354.00 bytes/sec
total size is 1128  speedup is 0.91
[root@localhost ~]# ls /tmp
201712.txt

从远程机器192.168.159.130 将文件同步到本地机器。

把文件从本地机器同步到远程机器叫推文件,从远程机器同步到本地机器叫拉文件。

  • 当远程机器的端口不是22端口时,需要使用-e参数

    [root@localhost ~]# rsync -av -e "ssh -p 2200" /etc/passwd 192.168.159.130:/tmp/2017.txt

-e "ssh -p 2200" 使用2200端口

  • ssh -p 22 192.168.159.130

ssh 通过22端口远程登录到192.168.159.130 这台机器。