lazybios

rsync 101

rsync是一个类似于scp,但不同与scp的强大命令,不同点在于scp是全量复制,而rsync确实增量复制,即只复制两个文件相异的部分,当然这个特性只能体现在头一次复制之后,如果是第一次复制,那么与scp的行为是相同的。其实现的基本算法为:将待复制文件进行切割成若干块,分别求出hash值,然后对相互之间的块进行比较,只传输相异的部分,这样可以降低传输消耗(带宽与时间)。

rsync可以使用下面3种传输方式

  1. 本地应用rsync ex: rsync -av /etc /tmp 将/etc 备份到/tmp/etc中,注意rsync对/是比较敏感的,/etc/etc及以下文件,/etc/ 不含/etc仅包含/etc/*以下的文件
  2. 通过ssh信道 远程传输 ex: rsync -av -e ssh user@host:/etc /tmp 将host上/etc 备份到本地/tmp/etc中
  3. 通过rsync提供的daemon传输,ex: rsync -av user@host::/etc /tmp

这三种方式的异同,在命令上仅仅体现在冒号的个数上,很好记忆,但第3种方式必须保证rsync服务已经启动。

命令格式


rsync [-avrlptgoD] [-e ssh] [user@host:/dir] [/path]     

-v #可视模式 显示详细信息     
-q #静默模式 无信息显示    
-r #递归拷贝   
-u #仅更新,不删除   
-l #复制链接文件属性,即不复制源文件   
-p #连同属性一起复制   
-g #保存源文件的文件属性 组 group   
-o #保存源文件的文件属性 主 owner   
-t #保存源文件的时间参数   
-D #保存源文件的设备属性   
-z #数据传输时,加上压缩参数    
-e #使用传输协议 `-e ssh`    
-a #最常用的参数 等价于`-rlptgoD`   ***
--dry-run  #至报告信息 不真实执行 (用语脚本中第一遍checkout)   
--delete #同步删除文件  
--progress #传输时显示传输进度

使用示例

rsync -av local_file_path  rigongyizu365@host:remote_file_path

以角色rigongyizu365,同步本地文件夹local_file_path文件夹及其子文件到远端host主机的remote_file_path位置。

应用场景

增量同步日志文件,服务器之间同步文件,远程镜像备份,特别是有同步目录树文件的场景,一些多机部署的DevOps工具在推送代码到服务器的时候都会用到它。

-完-

参考引用

微信关注「日拱一卒」公众号