01 前言
rsync是linux下一款功能非常强大的文件同步工具,它不仅可以实现本地到远程的文件或目录的文件传输,也可以实现本地到本地的文件或目录传输,可能很多小伙伴会问,那scp或者cp不是也可以实现相应的功能吗?
重点区别就来了。
scp cp命令是全量覆盖
rsync却是增量更新
02 rsync 格式
rsync基本用法格式如下:
• rsync [OPTION] … SRC DEST
•rsync [OPTION] … SRC [user@]host:DEST
•rsync [OPTION] … [user@]host:SRC DEST
•rsync [OPTION] … SRC [user@]host::DEST
•rsync [OPTION] … [user@]host::SRC DEST
说明:SRC 源文件/目录 DEST 目标文件/目录
例如 将/data下的文件同步到/temp下,那么/data就是SRC /temp就是DEST
03 rsync的常用选项
rsync的常用选项如下:
• -a 包含-rtplgoD
• -r 同步目录时要加上,类似cp时的-r选项
• -v 同步时显示一些信息,让我们知道同步的过程
• -l 保留软连接
• -L 加上该选项后,同步软链接时会把源文件给同步
• -p 保持文件的权限属性
• -o 保持文件的属主
• -g 保持文件的属组
• -D 保持设备文件信息
• -t 保持文件的时间属性
• --delete 删除DEST中SRC没有的文件
• --exclude 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
• -P 显示同步过程,比如速率,比-v更加详细
• -u 加上该选项后,如果DEST中的文件比SRC新,则不同步
• -z 传输时压缩
04 几个简单的小例子
例如在/home/temp目录下有111、222文件夹作为演示
选择111文件夹作为SRC,选择222文件夹作为temp
示例1:验证rsync的同步功能
rsync -av /home/temp/111/ /home/temp/222
可以看到,111文件夹下的文件都已同步到222文件夹下
特别说明:使用rsync一定要注意的一点是,源路径如果是一个目录的话,带上尾随斜线和不带尾随斜线是不一样的,不带尾随斜线表示的是整个目录包括目录本身,带上尾随斜线表示的是目录中的文件,不包括目录本身。
例如:
[root@localhost~]# rsync -a /etc /tmp
[root@localhost~]# rsync -a /etc/ /tmp
第一个命令会在/tmp目录下创建etc目录,而第二个命令不会在/tmp目录下创建etc目录,源路径/etc/中的所有文件都直接放在/tmp目录下。
在工作中,建议在SRC目录后面加上“/”,个人觉得这是一个好习惯
示例2:验证rsync的增量同步功能
在111文件夹下新增加一个文件4.sh
再次使用命令,如下:
可以看到,本次同步的是新增的文件,即增量同步。
示例3:同步的时候删除222文件夹中111没有的文件,保持两个文件夹一致(演示--delete选项)
这里用--delete参数
可以看到,222文件夹中原来有(a.sql b.sql c.sql)因为111文件夹没有,目前已被删除
示例4:同步111中的文件到222 但不包括以log为后缀的日志文件(演示--exclude选项)
在111文件夹下创建几个日志文件,如下:
可以看到,同步的过程中,后缀为log的文件没有同步过来,这一点在后续的备份操作中可用来过滤日志文件。
示例5:同步过程中如果222文件夹文件更新,则不同步(演示-u选项)
先在111和222文件夹下的1.sh 分别插入一句 Hello world
可以看到,111和222文件夹下的1.sh文件目前是一致的,此时往222文件夹下的1.sh再插入一句
rsync is useful
这是再使用rsync同步
可以看到,因为222文件夹下的1.sh相比111文件夹下的1.sh是较新的版本,此次未做同步
05 小总结
以上是rsync几个最基础的用法,以本地同步作为演示,远程的可参照格式,原理是一样的。
明天将学习rsync通过服务或ssh进行同步。晚安~
网友评论