Linux 中的 rsync 命令是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件。rsync 使用所谓的 “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 种不同的工作模式:
要知道,使用 rsync 在远程传输数据(备份数据)前,是需要进行登陆认证的,这个过程需要借助 ssh 协议或者 rsync 协议才能完成。在 rsync 命令中,如果使用单个冒号(:),则默认使用 ssh 协议;反之,如果使用两个冒号(::),则使用 rsync 协议。
ssh 协议和 rsync 协议的区别在于,rsync 协议在使用时需要额外配置,增加了工作量,但优势是更加安全;反之,ssh 协议使用方便,无需进行配置,但有泄漏服务器密码的风险。
选项 | 功能 |
---|---|
-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 | 加上该选项,将会在传输过程中压缩。 |
实例 | 描述 |
---|---|
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 -avlK ./test/ root@host:/tmp/test
我们首先,使用 mkdir 命令,在当前目录新建一个 haicoder 文件夹,具体命令如下:
mkdir haicoder
接着,我们使用 touch 命令,在 haicoder 文件夹里面,新建一个 haicoder.txt 文件,具体命令如下:
touch ./haicoder/haicoder.txt
运行后,终端输出如下:
现在,我们使用 rsync 命令,实现将 haicoder/haicoder.txt 拷贝到 /tmp/test 下,具体命令如下:
rsync -avlK ./haicoder/ /tmp/test
运行后,终端输出如下:
现在,我们使用 ls 命令,查看 /tmp 下文件,具体命令如下:
ls /tmp/test/
运行后,终端输出如下:
我们看到,/tmp/test 目录已经存在该文件了。
Linux 中的 rsync 命令可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
rsync 命令主要用来进行数据备份,并且可以在备份的过程中进行格式转换。其实 rsync 命令可以把源数据复制成目标数据,而且不管源数据是文件、分区、磁盘还是光盘,都可以进行数据备份。