zoukankan      html  css  js  c++  java
  • 6.6 rsync:文件同步工具

    rsync

      是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据镜像同步备份的优秀工具。rsync适用于Unix/Linux/Windows等多种操作系统平台。
     

    rsync命令有三种常见模式

    具体如下:
     
    1)本地模式:
        rsync [option]  [SRC]        [DEST]
        rsync [选项]    [源文件]    [目标文件]
     
    2)通过远程Shell访问模式;
    拉取(Pull):
        rsync [option] [USER@]HOST:SRC     [DEST]
        rsync [选项]    用户@主机:源文件    [目标文件]
    推送(Push);
        rsync  [option]  [SRC]     [USER@]HOST:DEST
        rsync  [选项]    [源文件]    用户@主机:目标文件
    3)rsync守护进程模式
    拉取(Pull):
        rsync [option] [USER@]HOST:SRC     [DEST]
        rsync [选项]    用户@主机:源文件    [目标文件]
        rsync [option]   rsync://[USER@]HOST[:PORT]/SRC     [DEST]
        rsync [选项]     rsync://用户@主机:端口/源文件        [目标文件]
     
    推送(Push):
     
        rsync [option]  [DEST]       [USER@]HOST:SRC
        rsync [选项]     [目标文件]    用户@主机:源文件    
        rsync [option]  [DEST]      rsync://[USER@]HOST[:PORT]/SRC   
        rsync [选项]    [目标文件]   rsync://用户@主机:端口/源文件  

    rsync命令的参数选项及说明

    -V,--verbose    详细模式输出,传输时的进度等信息
    -z,-compress    传输时进行压缩以提高传输效率,-compress-level=NUM可按级别压缩
    -a,-archive     以递归方式传输文件,并保持所有文件的属性,相当于-rtopgDl
    -r,-recursive   对子目录以递归模式,即目录下的所有目录都以同样的模式传输,注意是小写r
    -t,-times       保持文件的时间信息
    -o,--owner      保持文件的属主信息
    -p,-perms       保持文件的权限
    -g,-group       保持文件的属组信息
    -P,--progress   显示同步的过程及传输时的进度等信息
    -D,-devices     保持设备文件信息
    -l,-links       保留软链接
    -e,--rsh=COMMAND    使用的信道协议,指定替代rsh的shell程序,例如:ssh
    -n               测试选项,模拟执行
    -exclude=PATTERN      指定排除不需要传输的文件模式(和tar参数一样)
    -exclude-from=FILE    从文本文件读取需要排除的文件列表
    -bwlimit=KBPS         限制传输速度
    -delete               使目标目录内容和源保持目录一致,删除不同的文件
     
     

    源地址带与不带斜线(/)的区别的例子。

    [root@cs6 /]# mkdir -p /data1/{test1,test2} /data2
    [root@cs6 /]# rsync -av /data1/ /data
    data1/ data2/
    [root@cs6 /]# rsync -av /data1/ /data2  #<=如果源目录的末是有斜线,就会复制目录内的内客,而不是复制目录本身。
    sending incremental file list
    test1/
    test2/
     
    sent 61 bytes  received 20 bytes  162.00 bytes/sec
    total size is 0  speedup is 0.00
    [root@cs6 /]# ls /data2
    test1  test2
    [root@cs6 /]# rsync -av /data1 /data2        #<=如果源目录没有斜线,则会复制目录本身及目录下的内容。
    sending incremental file list
    data1/
    data1/test1/
    data1/test2/
     
    sent 74 bytes  received 24 bytes  196.00 bytes/sec
    total size is 0  speedup is 0.00
    [root@cs6 /]# ls /data2/
    data1  test1  test2
    [root@cs6 /]#
    目标目录的末尾有没有斜线都不影响最终结果。

    本地复制的例子(类似cp)

     其比cp好的地方就是可以实现增量复制。
    
     
    [root@cs6 /]# rsync -av /etc/hosts /tmp    #<==源文件/etc/hosts和目标目录/tmp都在同一台主机之上。
    sending incremental file list
    hosts
     
    sent 231 bytes  received 31 bytes  524.00 bytes/sec
    total size is 158  speedup is 0.60
    [root@cs6 /]# ll -h /tmp/hosts
    -rw-r--r--. 1 root root 158 Jan 12  2010 /tmp/hosts

    删除文件的特殊例子(--delete)

    问题:一个目录下有几十万个文件,用什么方式可以最快删除所有文件?
     
    [root@cs6 ~]# mkdir /null    #<==创建一个空目录。
    [root@cs6 ~]# rsync -av --delete /null/ /tmp/    #<==选项--delete 使tmp目录内容和空目录保持一致,不同的文件及目录将会被删除,即null里有什么内容,tmp里就有什么内容。null里没有的,而tmp里有的就必须要删除,因为null目录为空,因此此命令会删除/tmp目录中的所有内容。
    sending incremental file list
    ./
    deleting tmp/html/oldboy/test/
    deleting tmp/html/oldboy/
    deleting tmp/html/9.html
    deleting tmp/html/8.html
    deleting tmp/html/10.html
    deleting tmp/html/1.html
    ......
    deleting install.log
    deleting hosts
    deleting etc.tar.gz
    deleting anaconda-ks.cfg
    sent 29 bytes  received 15 bytes  88.00 bytes/sec
    total size is 0  speedup is 0.00
    [root@cs6 ~]# ls /tmp

    拉取推送文件及目录(类似前文的scp命令)

    [root@cs6 ~]# rsync -av 10.0.0.55:/tmp/ /tmp
    root@10.0.0.55's password:
    receiving incremental file list
    ./
    anaconda-ks.cfg
    ks-script-4WSQ4c
    services
    yum.log
    [root@cs6 ~]# ls /tmp
    anaconda-ks.cfg  ks-script-4WSQ4c  services  tmp  yum.log
    [root@cs6 ~]# rsync -av /tmp/ 10.0.0.55:/tmp/
    root@10.0.0.55's password:
    sending incremental file list
     
    sent 1115 bytes  received 27 bytes  326.29 bytes/sec
    total size is 20341760  speedup is 17812.40
        与scp命令复制的结果进行对比可以发现,使用rsync复制时,重复执行复制直至目录下文件相同就不再进行复制了。

    利用SSH隧道模式(-e)拉取推送文件及目录

    [root@cs6 ~]# touch /tmp/test.txt    
    [root@cs6 ~]# rsync -av -e 'ssh -p 22' /tmp 10.0.0.55:/tmp/    
    #<=前面的案例使用rsync同步数据都是明文传输的,在要求保障数据安全的场景下,可以使用-e选项借助SSH随道进行加密传输数据,-p是SSH命令的选项,指定SSH传输的端口号为22,这条命令的结果是将本地/tmp目录下的内容通过SSH加密隧道推送数据到10.0.0.55主机的/tmp目录。
    同理,执行"rsync -av -e "ssh -p 22' 10.0.0.55:/tmp/ /tmp” 可以从10.0.0.55主机的/tmp日录通过SSH加密隧道将数据拉取到本地/tmp目录下。 root@10.0.0.55's password: sending incremental file list tmp/ tmp/anaconda-ks.cfg tmp/ks-script-4WSQ4c
     
    经验技巧
    下面列出rsync命令的经验技巧以供读者参考。
    1)生产场景常用选项-avz,相当于-vzrtopg(这是网上文档常见的选项),但是此处建议大家使用-avz选项,更简单明了。如果在脚本中使用也可以省略-v选项。
    2)关于z压缩选项的使用建议,如果为内网环境,且没有其他业务占用带宽,可以不使用z选项。不压缩传输,几乎可以满带宽传输(千M网络),压缩传输则网络发送速度就会骤降,压缩的速率赶不上传输的速度。
    3)选项n是一个提高安全性的选项,它可以结合-v选项输出模拟的传输过程,如果没有错误,则可以去除n选项真正的传输文件。
     
     
     
    6.7老男孩逆袭思想:新手如何高效地提问
    1)问问题前要有充分的准备,努力让自己问问题的水平更专业。
    2)想好你要问的内容,确定是否能表达清楚,可以先和小伙伴提前练习一下表达能力。
    3)如果口头表达不清楚,就写出来,给小伙伴看。采用适合自己的表达方式(当面/电话/邮件/微信/QQ)进行沟通很重要。
    4)问问题时,把自己尝试过的解决方法也一并说出来,避免别人解答时走弯路。
    5)问问题应礼貌客气,但要学会开门见山,及时抛出问题。
    6)Linux问题错误日志及输出报错类问题尽量少截图,若使用QQ发文字,也要注意避免将文字自动转换为表情,也不要自行翻译后再描述,就保持原样给出错误描述。解答的人可能需要搜索才能帮到你,如果你提供的是截图,那么解答人如果很忙就会很容易放弃帮你。
    7)不要吊死在一棵树上,可以同时问多个人(普遍培养/重点选拔)。
    8)最终解决完问题后,将解题思路整理成文档,无论别人是否帮到你,都要把答案发给你问过问题的人,学会感恩,未来的路才会越走越宽(感恩帮助你的人,那是应该的,对没有帮到你的人也感恩才叫智慧)。
    9)通过赞美、凸显重要性、满足心理需求等方式,让他人乐于帮你解决问题。
    10)多问封闭式问题,少问开放式问题,多为解答问题的人着想,是否能让对方省事,决定了对方是否愿意帮你以及帮你的速度。 
     
     
    -
  • 相关阅读:
    记录一个用关于mybatis对象为null的坑
    微信小程序开发初体验--教你开发小程序
    聚合数据全国天气预报api接口
    免费的无次数限制的各类API接口(2)
    外卖订单爬虫(美团,饿了么,百度外卖)
    如何快速开发出一个高质量的APP——创业谈
    调用手机话费充值API的SDK编写思路
    基于Retrotfit2.1+Material Design+ijkplayer开发的一个APP(新闻,gif 动图,视频播放)
    技巧:利用 Workflow 显示附近的免费 Wi-Fi
    MyDiary,《你的名字。》同款日记应用
  • 原文地址:https://www.cnblogs.com/wenyule/p/12214035.html
Copyright © 2011-2022 走看看