rsync命令-文件同步工具

413 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第23天,点击查看活动详情

一、命令详解

1.1【功能说明】

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

1.2【语法格式】

rsync命令有三种常见模式,具体如下:

1、本地模式

rsync [option] [SRC] [DEST]

2、通过远程Shell访问模式

# 拉取
rsync [option] [USER@]HOST:SRC [DEST]

# 推送
rsync [option] [SRC] [USER@]HOST:DEST

3、rsync守护进程模式

# 拉取
rsync [option] [USER@]HOST::SRC [DEST]
rsync [option] rsync://[USER@]HOST[:PORT]/SRC [DEST]

# 推送
rsync [option] [SRC] [USER@]HOST::DEST
rsync [option] [SRC] rsync://[USER@]HOST[:PORT]/DEST

1.3【选项说明】

参数选项

  • -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 指定排除不需要传输的文件模式

  • --exclude-from-FILE 从文本文件读取需要排除的文件列表

  • --bwlimit-KBPS 限制传输速度

  • --delete 使目标目录内容和源保持目录一致,删除不同的文件

二、使用范例

2.1 本地复制的例子

rsync -av /etc/hosts /tmp

# 相对于cp,rsync可以实现增量复制

2.2 删除文件的例子

一个目录下有几十万个文件,用什么方式可以最快删除所有文件?

# 创建一个空目录
mkdir /null

# 选项--delete使tmp目录内容和空目录保持一致,不同的文件及目录将会被删除
# 即null里有什么内容,tmp里就有什么内容,null里没有的,tmp里有的就必须删除
# null目录为空,所以此命令会删除/tmp目录下的所有内容
# 注意源目录/null/  末尾要加斜杠
rsync -av --delete /null/ /tmp/

image-20221218235528539.png

2.3 拉取推送文件及目录

rsync -av 192.168.2.123:/tmp/ /tmp/

说明:

  • 与scp命令复制的结果进行对比可发现,使用rsync复制时,重复执行复制直至目录下文件相同就不再进行复制了、

2.4 利用ssh隧道模式拉取推送文件及目录

rsync -av -e 'ssh -p 22' /tmp/ 192.168.2.123:/tmp/
rsync -av -e 'ssh -p 22' 192.168.2.123:/tmp/ /tmp/

前面范例使用rsync同步数据都是明文传输的,在要求保障数据案例的场景下,可以使用-e选项借助ssh隧道进行加密传输,-p是SSH命令的选项,指定SSH传输的端口号为22,第一条命令的结果是将本地/tmp目录下的内容通过ssh加密隧道推送数据到192.168.2.123主机的/tmp目录下。同理第二条命令可以从192.168.2.123主机的/tmp目录通过ssh加密隧道将数据拉取到本地/tmp目录下。

三、扩展知识

3.1 源地址带与不带斜线的区别

# 准备数据
mkdir -p /data1/{test1,test2} /data2 /data3

# 带斜杠,源目录末尾有斜杠,就会复制目录内的内容,而不是复制目录本身
rsync -av /data1/ /data2

# 不带斜杠,源目录没有斜线,则会复制目录本身及目录下的内容
rsync -av /data1 /data3

tree data2
tree data3

# 注:目标目录的末尾有没有斜杠都不影响最终结果

image-20221219000302958.png

四、命令总结

  • 2022/12/18 初识rsync命令还是当时用scp复制时想要排除某些文件搜出来的