[转]rsync命令中文文档

时间:2022-05-15 15:47:11

原文链接

rsync是一个快速、多功能的远程(和本地)文件拷贝工具。

摘要

Local:  rsync [OPTION...] SRC... [DEST]

Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

当仅有一个SRC或DEST参数时将列出源文件列表而不是复制文件。

描述

Rsync是一个快速且功能非常丰富的文件拷贝工具。它可以在本地和远程之间通过shell或rsync服务互相拷贝文件。它提供了大量的选项来控制它各方面功能的行为,且在指定待拷贝文件方面非常有弹性。它以其增量拷贝算法而出名,只拷贝源和目标不同的文件部分,因此减少网络间要传输的数据。Rsync每天都被广泛用于做备份、镜像和当作升级版拷贝命令。

Rsync使用"quick check"算法(默认)决定文件是否需要被传输,它会找出大小或最后修改时间(mtime)不同的文件。当"quick check"算法表明了文件不需要被更新时,任何其他保留属性(译者注:除大小和最后修改时间外的属性)都将直接在目标文件上修改。

rsync的其他特性包括:

  • 支持类似于GNU tar命令的exclude和exclude-from选项
  • 支持拷贝链接文件、设备文件、所有权(即所有者和所属组)、属组以及权限
  • 支持CVS排除模式以忽略相同的文件(译者注:CVS是一种版本控制系统)
  • 可以使用任意透明的远程shell(remote shell),包括ssh或rsh
  • 不要求超级管理员权限
  • 以pipeline管道模型传输文件以便最小化降低成本
  • 支持匿名或可身份认证的rsync daemon模式(做镜像的理想方式)

一般特性

Rsync在本地或远程主机之间拷贝文件(但不支持两个远程之间互相拷贝)。

rsync有两种不同的方式联系远程主机:使用远程shell程序作为传输方式(如ssh或rsh)或直接通过TCP联系rsync守护进程。当命令行中指定的源或目标主机后使用了单个冒号(:)时将使用远程shell传输模式。当在命令行中指定的源或目标主机后使用双冒号(::)或使用了rsync://这种URL时将表示使用TCP联系rsync守护进程,但rsync://方式有一个例外,请参见下文"通过远程SHELL连接使用RSYNC-DAEMON特性"段落的内容。

但有一个特殊情况,如果只给定了源地址没有给定目标地址,则将以类似于"ls -l"的格式输出文件列表。

若给定的源地址和目标地址都不是远程地址,则在本机进行拷贝(见选项--list-only)。

Rsync命令中,本地端总是扮演"client"角色,远程端总是扮演"server"角色。不要混淆"server"和rsync daemon,rsync daemon一定是一个"server",但是"server"可能是一个rsync daemon也可能是远程shell派生出来的进程。

安装

请阅读README文件来查看安装说明。

当安装完成后,你可以通过远程shell(也可以通过rsync daemon协议)让rsync与任意你能访问的主机进行交流。对于远程传输,现代rsync使用ssh与其他主机进行交流,但是可以配置其他默认的远程shell,如rsh或remsh。

你也可以通过命令行的"-e"选项或设置RSYNC_RSH环境变量来指定你想要使用的远程shell。

rsync必须同时装在源主机和目标主机上。

用法

rsync的使用方法和rcp一样。你必须指定源地址和目标地址,其中一个可能是远程地址。

也许解释语法最好的方式是通过几个示例:

rsync -t .c foo:src/

这将会把当前目录下所有能匹配
.c的文件传输到主机foo上的src目录下。如果远程主机上已经存在某些同名文件,rsync的远程更新(rsync-update)协议将会更新哪些有差异的文件。

rsync -avz foo:src/bar /data/tmp

这将会以递归方式把远程主机foo上的src/bar目录下的所有文件传输到本地主机的/data/tmp目录下。这些文件以归档(archive)模式传输,它保证在传输过程中保留符号链接、设备文件、属性、权限、所有者、所属组等。另外,在传输过程中会使用压缩功能以减少要传输的数据体积。

   rsync -avz foo:src/bar/ /data/tmp

使用尾随斜线(/)改变了原本的行为,它避免了在目标地址创建一个额外的目录层次。带有尾随斜线时,你可以理解为"拷贝目录的内容"而不是拷贝"拷贝目录名"(译者注:即拷贝目录本身),但是这两种情况都会将目录中包含的文件传输到目标目录下。换句话说,下面两条命令都以相同的方式进行拷贝,包括/dest/foo的属性设置。

   rsync -av /src/foo /dest
rsync -av /src/foo/ /dest/foo

还需要注意的是,拷贝主机或引用模块的默认目录不需要尾随斜线。例如,下面的命令都拷贝远程(默认)目录的内容到本地的"/dest"。

   rsync -av host: /dest
rsync -av host::module /dest

你也可以仅使用rsync的仅本地(local-only)模式,此模式下的源地址和目标地址名称中都不需要冒号(