其中 -a 参数表示以添加方式将 localfile 中的内容附加到 upfile 的末尾。
总的来说,curl 适合用来进行自动的文件传输或操作序列,它是一个很好的模拟用户在网页浏览器上的行为的工具。尤其当需要在程序中调用时,libcurl 是个很好的选择。
rsync
rsync 是一款高效的远程数据备份和镜象工具,可快速地同步多台主机间的文件,其具有如下特性:
- 支持链接、所有者、组信息以及权限信息的拷贝;
- 通过远程 shell(ssh, rsh)进行传输;
- 无须特殊权限即可安装使用;
- 流水线式文件传输模式,文件传输效率高;
- 支持匿名操作;
需要提及的是 rsync 以其优越的性能优势区别于其它几种 Linux 文件传输方法,其同步文件的速度相当快,这主要归功于 rsync 所使用的传输算法。简而言之 rsync 算法能在相当短的时间内计算出需要备份的数据,只对源文件与目标文件的不同之处进行传输,从而降低网络中传输的数据量,以此达到快速备份镜像的目的。下面通过一典型应用场景来描述 rsync 算法的基本原理:主机 A 与主机 B 均有对同一文件的拷贝,用户对主机 A 上的拷贝进行更新,主机 B 通过 rsync 算法对更新后的文件进行同步。以下是该算法的实现步骤:
- 主机 B 将原始拷贝划分成大小为 N 的不重合的若干块(文件末尾部分分块大小可能不足 N),并对这些数据块进行两种不同方式的校验:32 位的滚动弱校验、128 位的 MD4 强校验。弱校验较之强校验计算速度快。
- 主机 B 将每个数据块的弱校验、强校验结果发送给主机 A 。
- 主机 A 对更新后的文件拷贝中的每个长度为 N 的数据块进行弱校验并与从 B 接收到的弱校验值进行匹配,若相同再进行强校验匹配。由于弱校验的滚动特性可以快速地筛选出需要进行同步的数据块。该算法的运算量主要集中在主机 A 上。
- 通过上述计算,主机 A 将文件的不同部分发送给 B,B 接收到两个拷贝之间的不同之处,从而同步得到更新后的文件。
通过如上方式,rsync 避免了对相同数据的传输,减少了网络带宽的浪费。在时间上整个过程中需一个往返,从某种程度上也保证了 rsync 的优越性能。
用户可从官方网站 http://rsync.samba.org/ 上下载安装 rsync 的最新版本。使用时需将 rsync 分别安装于服务端和客户端,服务端和客户端使用同一个 rsync 软件包来实现远程镜像和定期同步更新。需要说明的是一个 rsync 服务端可同时备份多个客户端的数据;多个服务端备份一个客户端的数据。 rsync 默认端口为 873,服务器在该端口接收客户的匿名或者认证方式的备份请求。
rsync 服务端在使用之前需要进行必要的配置,其配置文件为 /etc/rsyncd.conf,进行认证、访问、日志记录等控制。配置文件包括全局参数、模块参数的设置。 rsyncd.conf 文件中 [module] 之前的所有参数为全局参数,也可以在全局参数部分定义模块参数,在这种情况下该参数的值就是所有模块的默认值。全局参数设置程序使用的端口号,指定消息文件、日志文件 pid 文件以及发送日志消息的级别。模块参数主要定义服务端哪个目录需要被同步。用户可根据不同的需要指定多个模块,每个模块对应需要备份的一个目录树,即若有 N 个需要备份的目录树,则需要 N 个模块与之对应。模块中可以定义许多参数,常见参数如下。
表 4. rsyncd.conf 配置文件常见模块参数列表
选项 | 描述 |
Comment | 模块信息描述,该描述连同模块名在客户连接得到模块列表时显示给客户。默认没有描述定义。 |
Path | 指定供备份的目录路径,必须指定该参数。 |
max connections | 指定最大并发连接数以保护服务器,超过限制的连接请求将被告知随后再试。默认值为 0,即没有限制。 |
log file | 指定日志文件 |
read only | 设定是否允许客户上载文件。若为 true 任何上载请求均会失败,若为 false 且客户端拥有服务器目录读写权限则可以上载。默认值为 true 。 |
write only | 设定是否允许客户下载文件。若为 true 任何下载请求均会失败,默认值为 false 。 |
List | 设定当客户请求可以使用的模块列表时,是否列出该模块。若为 false,则创建隐藏的模块。默认值为 true 。 |
fake super | 允许文件享有所有权限,而无需后台服务以 root 权限进行操作。 |
Filter | 设置过滤列表以决定哪些文件可由客户端访问。 |
hosts allow | 指定允许客户连接的 IP 地址。可以为单个 IP 地址或整个网段。多个 IP 或网段需要以空格隔开。默认是允许所有主机连接。 |
dont compress | 指定不进行压缩处理即可传输的文件,默认值是 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz |
pre-xfer exec, post-xfer exec | 设置可在文件传输前/后执行的命令。若在文件传输前执行的命令失败,则取消本次传输操作。 |
基本语法
- 通过远程 shell 方式:
- rsync [OPTION] [USER@]HOST:SRC DEST
- 使用远程 shell(如 ssh, rsh)实现将远程机器的内容拷贝到本地机器。 SRC 地址路径中以单个冒号 ":" 进行分隔。
- rsync [OPTION] SRC [USER@]HOST:DEST
- 使用远程 shell(如 rsh、ssh)实现本地机器的内容拷贝到远程机器。 DEST 地址路径中以单个冒号 ":" 进行分隔。
- 通过 rsync daemon 方式:
- rsync [OPTION] [USER@]HOST::SRC DEST 或
- rsync [OPTION] rsync://[USER@]HOST[:PORT]/SRC [DEST]
- 从远程 rsync 服务器中拷贝文件到本地机。 SRC 地址路径中以双冒号 "::" 进行分隔。
- rsync [OPTION] SRC [USER@]HOST::DEST 或
- rsync [OPTION] SRC rsync://[USER@]HOST[:PORT]/DEST
- 从本地机器拷贝文件到远程 rsync 服务器中。 DEST 地址路径中以双冒号 "::" 进行分隔。
如果 rsync 命令中只指定 SRC 参数而不指定 DEST 参数,则意为显示源文件列表而非进行同步拷贝。 rsync 有许多功能选项,常用的选项如下:
表 5. rsync 常用参数
选项 | 描述 |
-a, --archive | 归档模式,保持所有文件属性,等同于 -rlptgoD |
-v, --verbose | 详细信息输出 |
-r, --recursive | 对子目录进行递归处理 |
-R, --relative | 使用相对路径信息 |
-b, --backup | 创建备份 |
-z, --compress | 对备份的文件在传输时进行压缩处理 |
--delete | 用于同步目录,从 DEST 中将 SRC 不存在的文件进行删除 |
--progress | 显示备份过程 |
使用实例:
- 查看服务端文件及列表
- # rsync 9.186.110.53::
查看服务端可用的模块列表以及注释信息
- # rsync ibmuser@9.186.110.53::www/
查看服务端 www 模块中的目录及文件列表(使用 rsyncd 用户认证方式)
时间:2009-07-02 16:06 来源:developerWorks 中国 作者:李 梅雯 原文链接
- # rsync 9.186.110.53::