RSYNC-使用手册
Rsync是一款快速、灵活的rcp应用。它与同类应用的行为差不多,但是它拥有比同类应用更多的选项和更快速的文件传输能力(remote update protocol)。
Rsync的remote-update协议可以在两台网络上的机器上只传输差异文件,它使用的checksum-search算法描述可以在发行包内找到。
Rsync的一些额外特性:
- 支持拷贝链接、设备、属主、组和权限
- 支持类似gnu tar的排除选项(exclude和exclude-from)
- 支持cvs排除模式来忽略传输文件(cvs文件也会忽略)
- 支持使用任何常见的远程远程shell工具(像ssh、rsh)
- 不需要超级用户权限
- 将文件传输流水线化,以最小化延迟成本
- 支持匿名的或者需要认证的Rsync守护进程
命令格式
rsync [OPTION]... SRC [SRC]... DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
rsync [OPTION]... SRC
rsync [OPTION]... [USER@]HOST:SRC [DEST]
rsync [OPTION]... [USER@]HOST::SRC [DEST]
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
简要介绍
Rsync用于在远程主机与本机或者本机与本机之间拷贝文件(不支持在两个远程主机间拷贝文件)。 rsync具有两种连接主机的方式。其一:使用remote-shell程序,其二:使用rsync守护进程。在源或者目标的路径中的主机名之后包含一个冒号(:)时使用的是remote-shell传输文件,在源或目标的路径中的主机名之后包含两个冒号(::)或声明了连接方案(rsync://)的时候使用rsync守护进程传输文件。在“通过remote-shell连接使用rsync-daemon特性”小节了解后者的一个例外情况。
另外有个特殊的情况。如果命令中仅仅包含了一个源的路径,没有包含目标路径的情况下。源文件会像执行ls -l一样输出文件列表。 As expected, if neither the source or destination path specify a remote host, the copy occurs locally (see also the –list-only option).
使用方法
在使用Rsync拷贝文件的时候,命令中必须包含一个源和一个目标的声明,其中一个也许是个远程主机的声明。下面是个演示命令语法的例子:
rsync -t *.c foo:src/
上面的例子将会传输当前目录下所有匹配*.c模式的文件到目标机器foo的src文件夹下。如果某些文件在目标机器上已经存在了,那么将使用remote-update协议去更新那些有差异的文件。
rsync -avz foo:src/bar /data/tmp
上面的例子将会递归传输在主机foo上的src/bar到本地主机上的/data/tmp/bar。这个例子中使用了archive模式选项,它将在传输中保证保持原文件的符号链接、设备、属性、权限、属主等信息。另外,例子中的-z选项将会把原文件压缩之后再进行传输,以减少文件大小。
rsync -avz foo:src/bar/ /data/tmp
这里源路径后面的那个斜线(…bar/)在传输目标机器上少创建一级文件夹。可以认为源路径中最后的那个斜线的意思是“拷贝那个文件夹中的所有内容”而不拷贝那个文件夹。但是,以上那两条相似的命令都会将源路径文件夹中的所有内容拷贝到目标机器上去。体会一下,下面的两条命令的效果是一样的:
rsync -av /src/foo /dest
rsync -av /src/foo/ /dest/foo
还需要注意。拷贝默认文件夹内容时,主机和模块引用不需要尾部的斜线。例如,下面两条命令拷贝远程目录中的内容到/dest:
rsync -av host: /dest
rsync -av host::module /dest
同样的,也可以在local-only模式下使用Rsync。这样一来源和目标的路径中就需要用冒号(:)。这样的情况下,它所做的动作就像是升级版的copy(cp)命令。
最后。在不包含模块名的情况下,还可以使用Rsync列出所有可用模块的列表:
rsync somehost.mydomain.com::
更多详细内容将在下面小节中罗列。
高级使用方法
在请求拷贝远程主机上的多个文件(夹)时,应该用引号将源的路径部分括起来。像下面这样:
rsync host::'modname/dir1/file1 modname/dir2/file2' /dest
这将会拷贝file1和file2到/dest中。这里多个文件(夹)的字符拆分是由远程服务器完成的,当它不可用时,也就是说远程机器上没有配置它以空白字符分割文件(夹)字符串。如果需要传输的文件名包含空格,应该使用转义(空格)之后的文件名,或者使用通配符替换掉那部分空白。下面是两个相关的例子:
rsync -av host:'file\ name\ with\ spaces' /dest
rsync -av host:file?name?with?spaces /dest
后面的一个例子如果响应"no match",可以通过把名字部分用单引号扩起来解决。
连接到RSYNC守护进程
也可以使用不带远程Shell的Rsync来传输文件。