Linux rsync命令用法

1、介绍

​ 从字面意思上,rsync 可以理解为 remote sync(远程同步),但它不仅可以远程同步数据(类似于 scp 命令),还可以本地同步数据(类似于 cp 命令)。不同于 cp 或 scp 的一点是,使用 rsync 命令备份数据时,不会直接覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。

2、安装

在Centos中使用以下命令安装rsync:

1
yum install -y rsync

3、工作模式

rsync 有 5 种不同的工作模式:

  • 第一种用于仅在本地备份数据;
  • 第二种用于将本地数据备份到远程机器上;
  • 第三种用于将远程机器上的数据备份到本地机器上;
  • 第四种和第三种是相对的,同样第五种和第二种是相对的,它们各自之间的区别在于登陆认证时使用的验证方式不同。

要知道,使用 rsync 在远程传输数据(备份数据)前,是需要进行登陆认证的,这个过程需要借助 ssh 协议或者 rsync 协议才能完成。在 rsync 命令中,如果使用单个冒号(:),则默认使用 ssh 协议;反之,如果使用两个冒号(::),则使用 rsync 协议。

ssh 协议和 rsync 协议的区别在于,rsync 协议在使用时需要额外配置,增加了工作量,但优势是更加安全;反之,ssh 协议使用方便,无需进行配置,但有泄漏服务器密码的风险。

4、参数列表

另外,以上几种格式中各个参数的含义如下:

  • SRC:用来表示要备份的目标数据所在的位置(路径);
  • DEST:用于表示将数据备份到什么位置;
  • USER@:当做远程同步操作时,需指明系统登录的用户名,如果不显示指定,默认为以 root 身份登录系统并完成同步操作。

rsync 命令提供使用的 OPTION 及功能如表

OPTION选项 功能
-a 这是归档模式,表示以递归方式传输文件,并保持所有属性,它等同于-r、-l、-p、-t、-g、-o、-D 选项。-a 选项后面可以跟一个 –no-OPTION,表示关闭 -r、-l、-p、-t、-g、-o、-D 中的某一个,比如-a –no-l 等同于 -r、-p、-t、-g、-o、-D 选项。
-r 表示以递归模式处理子目录,它主要是针对目录来说的,如果单独传一个文件不需要加 -r 选项,但是传输目录时必须加。
-v 表示打印一些信息,比如文件列表、文件数量等。
-l 表示保留软连接。
-L 表示像对待常规文件一样处理软连接。如果是 SRC 中有软连接文件,则加上该选项后,将会把软连接指向的目标文件复制到 DEST。
-p 表示保持文件权限。
-o 表示保持文件属主信息。
-g 表示保持文件属组信息。
-D 表示保持设备文件信息。
-t 表示保持文件时间信息。
–delete 表示删除 DEST 中 SRC 没有的文件。
–exclude=PATTERN 表示指定排除不需要传输的文件,等号后面跟文件名,可以是通配符模式(如 *.txt)。
–progress 表示在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、 同步的文件传输速度等。
-u 表示把 DEST 中比 SRC 还新的文件排除掉,不会覆盖。
-z 加上该选项,将会在传输过程中压缩。

5、本机中的两个目录进行同步

要同步本地计算机中的两个目录,使用rsync -zvr命令:

1
2
3
4
5
6
7
8
9
[root@node1 ~]# mkdir /rsync
[root@node1 ~]# rsync -zvr /var/log/ /rsync/
sending incremental file list
boot.log
......
tuned/tuned.log

sent 465,270 bytes received 759 bytes 932,058.00 bytes/sec
total size is 4,754,906 speedup is 10.20

6、使用rsync -a选项

rsync命令的-a选项表示存档模式。-a选项递归同步,保留符号链接,保留权限,保留,保留所有者和组。

现在,执行以下命令,然后查看文件的时间:

1
2
3
4
5
6
7
8
9
[root@node1 ~]# rsync -zva /var/log/ /rsync/
sending incremental file list
./
boot.log
......
tuned/tuned.log

sent 465,714 bytes received 762 bytes 932,952.00 bytes/sec
total size is 4,759,531 speedup is 10.20

如下图所示,在同步期间保留了补充

image-20210429152235649

image-20210429152252882

7、将文件从本地同步到远程目录

rsync允许在本地和远程系统之间的同步文件/目录,应该是本地和远程系统都要安装rsync才行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@node1 ~]# rsync -zva /var/log/ root@192.168.10.200:/rsync
The authenticity of host '192.168.10.200 (192.168.10.200)' can't be established.
ECDSA key fingerprint is SHA256:CQ+Ueun/hBJkSNzWjqdNDLc3bFsfS8RwWTYeX3aD3Ak.
ECDSA key fingerprint is MD5:4d:fd:8a:6f:99:16:33:39:fb:c9:7c:1b:16:61:ea:07.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.200' (ECDSA) to the list of known hosts.
root@192.168.10.200's password:
sending incremental file list
created directory /rsync
./
boot.log
......
tuned/tuned.log

sent 465,718 bytes received 791 bytes 71,770.62 bytes/sec
total size is 4,759,531 speedup is 10.20

8、将文件从远程目录同步到本地

将目标文件从远程系统同步到本地时,在源中指定远程路径,在目标中指定本地路径即可:

1
2
3
4
5
6
7
8
9
10
[root@node1 ~]# rsync -avz root@192.168.10.200:/rsync/ /test1/
root@192.168.10.200's password:
receiving incremental file list
./
boot.log
......
tuned/tuned.log

sent 770 bytes received 465,673 bytes 103,654.00 bytes/sec
total size is 4,759,531 speedup is 10.20

9、不传输大文件

可以使用rsync --max-size选项告诉rsync不要传输大于指定大小的文件。

1
2
3
4
5
6
7
8
9
10
11
[root@node1 ~]# rsync -zva --max-size='1M' /var/log/ root@192.168.10.200:/rsync1
root@192.168.10.200's password:
sending incremental file list
created directory /rsync1
./
boot.log
......
tuned/tuned.log

sent 279,991 bytes received 773 bytes 112,305.60 bytes/sec
total size is 4,773,150 speedup is 17.00

image-20210429154749416

--max-size=1M使rsync仅传输小于或等于1M的文件。单位可以是K,M,G等。

还可以使用--min-size=参数,指定传输最小文件的大小。