zoukankan      html  css  js  c++  java
  • rsync

    rsync表示 remote sync,其用于在本地或与远程主机间进行文件或目录备份。相比较scp等工具,rsync有以下优点:

    1. 速度:除首次全拷贝外,其他时候实现增量拷贝,加快传输速度
    2. 安全:传输数据时可用ssh加密传输
    3. 带宽占用:rsync可对数据进行分块压缩传输,相比其他文件传输工具占用更少带宽
    4. 权限限制:非root用户也可安转和执行rsync命令

    rsync执行方式如下:

    $ rsync options source destination

    source 和 destination 既可以指示本地,也可以是远程机器。下面通过实例说明rsync的用法。

    1.在本地两个目录间进行数据同步

    以下命令用于在两个目录间完成文件拷贝:

    复制代码
    $ rsync -zvr /var/opt/lx/ /root/temp/
    sending incremental file list
    a.c
    b.c
    
    sent 211 bytes  received 50 bytes  522.00 bytes/sec
    total size is 81  speedup is 0.31
    复制代码

    以上选项表示意思如下:

    • -z 传输前进行压缩
    • -v 显示命令执行详细信息
    • -r 递归拷贝目录

    此时我们看本地和目的地两个文件属性,注意到两者的时间戳是不同的:

    $ ll /var/opt/lx/a.c /root/temp/a.c 
    -rw-r--r-- 1 root root 73 04-06 21:11 /root/temp/a.c
    -rw-r--r-- 1 root root 73 04-06 21:05 /var/opt/lx/a.c

    若要保留原文件时间戳、属主/属组、权限属性,我们可以使用 -a 选项:

    $ rsync -azv /var/opt/lx/ /root/temp/

    -a选项亦包含递归的作用,因而可以替代-r选项。

    2.本地与远程主机间完成数据同步

    我们可以用rsync将本地的文件,同步到远程机器:

    复制代码
    $ rsync -avz /root/temp/ lx@192.168.1.103:/home/lx/tmp/ 
    Password: 
    sending incremental file list
    created directory /home/lx/tmp
    ./
    a.c
    b.c
    
    sent 216 bytes  received 53 bytes  21.52 bytes/sec
    total size is 81  speedup is 0.30
    复制代码

    以上我们指明了目的机器ip、登录用户以及所路径,并且需要输入相应用户的登录密码。以上命令完成本地到远程机器的同步,调换source和destination的位置,我们亦可完成远程机器到本地的数据同步。

    3.使用ssh通道进行数据同步

    在与远端进行数据同步时,我们一般采用ssh通道,使用 -e ssh 选项可以完成该功能:

    $ rsync -avz -e ssh /root/temp/ lx@192.168.1.103:/home/lx/tmp/

    4.不覆盖目的地对文件已作的修改

    经常出现这样的场景,我们对源文件和目的地文件均作了修改,同时想将源文件作的修改同步到目的地,但又保留对目的地文件的更改,此时可以使用 -u 选项:

    复制代码
    $ ls -l /root/temp/b.c 
    -rw-r--r-- 1 root root 12 04-06 22:19 /root/temp/b.c
    $ ls -l /var/opt/lx/b.c 
    -rw-r--r-- 1 root root 8 04-06 21:06 /var/opt/lx/b.c
    $ rsync -avzu /var/opt/lx/ /root/temp/
    sending incremental file list
    ./
    a.c
    
    sent 172 bytes  received 34 bytes  412.00 bytes/sec
    total size is 101  speedup is 0.49
    复制代码

    以上目的地 b.c 文件经过修改,与源文件不相同,此时使用 -u 选项,可以看到对 b.c 并不进行同步,目的地 b.c 的修改得以保存。

    5.删除不存在于源目录的目的地文件

    对于不存在于源目录,但存在于目的地的文件,有时我们想在做文件同步时删除它们,--delete 选项可以满足要求:

    复制代码
    $ rsync -avz --delete /var/opt/lx/ /root/temp/
    sending incremental file list
    ./
    deleting c.c
    b.c
    
    sent 101 bytes  received 34 bytes  270.00 bytes/sec
    total size is 101  speedup is 0.75
    复制代码

    以上目的地相比源目录多了c.c文件,同步时 --delete 将该文件删除。

    6.在同步时不在目的地创建新文件

    有时我们只想对目的地已经有的文件进行同步,而不理会源目录新增的文件,此时可以使用 --existing 选项:

    $ rsync -avz --existing /var/opt/lx/ /root/temp/

    7.显示执行进度

    使用 --progress 选项可以显示同步的进度,包括文件传输完成进度、传输速率信息:

    复制代码
    $ rsync -avz --progress /var/opt/lx/ /root/temp/
    sending incremental file list
    ./
    a.c
              93 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1/3)
    b.c
               8 100%    7.81kB/s    0:00:00 (xfer#2, to-check=0/3)
    
    sent 220 bytes  received 53 bytes  546.00 bytes/sec
    total size is 101  speedup is 0.37
    复制代码

    8.查看 source 和 destination 间的区别

    rsync完成源目录到目的地的拷贝,若能查看到源目录与目的地间的差异,这对同步十分有帮助,-i 选项可以显示源目录与目的地间的差异,示例如下。

    source:

    $ ls -l /var/opt/lx/
    总计 8
    -rw-r--r-- 1 root root 145 04-06 23:11 a.c
    -rw-r--r-- 1 root root   8 04-06 21:06 b.c

    destination:

    $ ls -l /root/temp/
    总计 8
    -rw-r--r-- 1 root root 93 04-06 22:20 a.c
    -rw-r--r-- 1 lx   root  8 04-06 21:06 b.c

    可以看到 source 与 destination 有两处不同,一处为 a.c 的文件大小,第二处为 b.c 的属主,此时添加 -i 选项进行数据同步,有以下输出:

    复制代码
    $ rsync -avzi /var/opt/lx/ /root/temp/
    sending incremental file list
    .d..t...... ./
    >f.st...... a.c
    .f....o.... b.c
    
    sent 175 bytes  received 37 bytes  424.00 bytes/sec
    total size is 153  speedup is 0.72
    复制代码

    对于同步的每个文件,均对应有一条输出,有11个标志位指示源文件与目的地文件的区别,在以上例子中,各标志位意义如下:

    • > 指示传输到本地
    • f  指示所传为文件
    • s  指示文件大小不一致
    • t  指示时间戳不一致
    • o  指示属主不一致

    9.按指定模式进行同步

    使用 --include 和 --exclude 选项,可以帮助我们完成只同步特定文件的目的,例如以下只同步以 'a' 开头的文件:

    复制代码
    $ rsync -avz --include 'a*' --exclude '*' /var/opt/lx/ /root/temp/
    sending incremental file list
    ./
    a.c
    aa.c
    
    sent 220 bytes  received 53 bytes  546.00 bytes/sec
    total size is 148  speedup is 0.54
    复制代码

    10.限制传输文件的大小

    使用 --max-size 选项,我们可以限制传输文件的最大大小:

    $ rsync -avz --max-size='100K' /var/opt/lx/ /root/temp/

    以上命令限制传输的文件大小只能小于或等于100K,另可以使用 M 和 G 作为大小单位。

    11.全拷贝

    默认情况下 rsync 采用增量拷贝,这样能节省带宽,在所同步文件不大的情况下,我们可以通过 -W 选项实现全拷贝:

    $ rsync -avzW /var/opt/lx/ /root/temp/
  • 相关阅读:
    字符串 高精度计算
    JAVA Socket编程 课堂作业
    图论 Floyd算法
    天梯赛题解 L1-049 天梯赛座位分配
    天梯赛题解 -L1-039 古风排版
    HDU 5558 后缀数组
    HDU 6194 后缀数组
    HDU 5769 后缀数组
    HDU 4691 后缀数组+RMQ
    HDU 4135 容斥原理
  • 原文地址:https://www.cnblogs.com/jkred369/p/7088815.html
Copyright © 2011-2022 走看看