rsync是一个类似于scp,但不同与scp的强大命令,不同点在于scp是全量复制,而rsync确实增量复制,即只复制两个文件相异的部分,当然这个特性只能体现在头一次复制之后,如果是第一次复制,那么与scp的行为是相同的。其实现的基本算法为:将待复制文件进行切割成若干块,分别求出hash值,然后对相互之间的块进行比较,只传输相异的部分,这样可以降低传输消耗(带宽与时间)。
rsync可以使用下面3种传输方式
rsync -av /etc /tmp
将/etc 备份到/tmp/etc中,注意rsync对/
是比较敏感的,/etc
含/etc
及以下文件,/etc/
不含/etc
仅包含/etc/*
以下的文件rsync -av -e ssh user@host:/etc /tmp
将host上/etc 备份到本地/tmp/etc中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工具在推送代码到服务器的时候都会用到它。
-完-