Linux rsync命令详解

Linux rsync命令详解教程

Linux 中的 rsync 命令是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件。rsync 使用所谓的 “rsync 算法” 来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

Linux rsync命令详解

功能

用于读远程数据同步。

语法

rsync 命令格式有六种,即:

rsync [OPTION]... SRC DEST rsync [OPTION]... SRC [USER@]HOST:DEST rsync [OPTION]... [USER@]HOST:SRC DEST rsync [OPTION]... [USER@]HOST::SRC DEST rsync [OPTION]... SRC [USER@]HOST::DEST rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

参数

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

说明

针对以上命令格式,rsync 有 5 种不同的工作模式:

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

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

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

rsync命令常用参数

选项 功能
-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 加上该选项,将会在传输过程中压缩。

Linux rsync命令常用实例

实例

实例 描述
rsync -avlK ./test/ root@host:/tmp/test 源目录加斜线,目标目录不加斜线,会将源目录下的文件,传输到目标目录下,如果目标目录不存在,会创建目录。
rsync -avlK ./test root@host:/tmp/test 源目录不加斜线,目标目录不加斜线,直接将源目录复制到目标目录下。
rsync -avlK ./test root@host:/tmp/test/ 源目录不加斜线,目标目录加斜线,直接将源目录复制到目标目录下。
rsync -avlK ./test/ root@host:/tmp/test/ 源目录加斜线,目标目录加斜线,加了斜线,会将源目录下的文件,传输到目标目录下。
rsync -av --delete test1/ test2/ –delete 选项用来删除 DEST 中 SRC 没有的文件。

说明

源目录加了斜线,效果就是将该目录下的内容传输到目标目录下。源目录不加斜线,效果就是将该目录传输到目标目录下。目标目录如果不存在,会自动创建目标目录。

rsync源目录下文件拷贝到目标目录

语法

rsync -avlK ./test/ root@host:/tmp/test

案例

我们首先,使用 mkdir 命令,在当前目录新建一个 haicoder 文件夹,具体命令如下:

mkdir haicoder

接着,我们使用 touch 命令,在 haicoder 文件夹里面,新建一个 haicoder.txt 文件,具体命令如下:

touch ./haicoder/haicoder.txt

运行后,终端输出如下:

07_Linux rsync命令详解.png

现在,我们使用 rsync 命令,实现将 haicoder/haicoder.txt 拷贝到 /tmp/test 下,具体命令如下:

rsync -avlK ./haicoder/ /tmp/test

运行后,终端输出如下:

08_Linux rsync命令详解.png

现在,我们使用 ls 命令,查看 /tmp 下文件,具体命令如下:

ls /tmp/test/

运行后,终端输出如下:

09_Linux rsync命令详解.png

我们看到,/tmp/test 目录已经存在该文件了。

Linux rsync命令详解总结

Linux 中的 rsync 命令可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

rsync 命令主要用来进行数据备份,并且可以在备份的过程中进行格式转换。其实 rsync 命令可以把源数据复制成目标数据,而且不管源数据是文件、分区、磁盘还是光盘,都可以进行数据备份。