linux文件传输(2)

来源:岁月联盟 编辑:exp 时间:2011-09-24

curl
另一个可以用来进行文件传输的工具是 curl,它是对 libcurl 库的一个命令行工具包装。 libcurl 库中提供了相应功能的 API,可以在程序中调用。对于 libcurl 库的使用方法介绍超出了本文的讨论范围。 curl 使用 URL 的语法来传输文件,它支持 FTP, FTPS, HTTP, HTTPS, TFTP, SFTP, TELNET 等多种协议。 curl 功能强大,它提供了包括代理支持,用户认证,FTP 上载,HTTP post,SSL 连接,文件续传等许多特性。
基本语法
curl [options … ] <url>
其中下载参数大约有 80 多个,curl 的各个功能完全依靠这些参数来完成。下面举例说明 curl 的一些基本用法。
使用实例:
获取 GNU 的主页
curl http://www.gnu.org
获取 GNU 的 FTP 服务器上根目录下的 README 文件
curl ftp://ftp.gnu.org/README
从一个字典中获取 curl 的定义
curl dict://dict.org/m:curl
如果需要指定用户名和密码的话,可以在 url 中指定,或者使用 -u 参数
curl ftp://name:passwd@machine.domain:port/full/path/to/file
curl -u name:passwd ftp://machine.domain:port/full/path/to/file
curl 会将从指定 url 处获取的内容打印到标准输出上。如果需要保存在本地文件中,可以使用 -o,或使用 -O 参数指定使用远程主机上的文件名(如果 url 中没有给出文件名的部分,则此操作将会失败)
curl – o gnu.html http://www.gnu.org
curl – O http://www.gnu.org/index.html
使用 -x 选项来使用代理进行连接
curl -x my-proxy:port ftp://ftp.somesite.com/README
通过使用 curl 的 -T 选项来进行上载
curl -T - ftp://ftp.upload.com/upfile
此命令从标准输入读取数据,并上载至远程 FTP 服务器上的 upfile 文件中。也可以指定上载一个本地文件
curl -T localfile -a ftp://ftp.upload.com/upfile
其中 -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 用户认证方式)

# rsync ibmuser@9.186.110.53:/var/www/html/

查看服务端 /var/www/html 目录中的内容(使用服务端的系统用户进行验证,如 ibmuser)

保持客户端与服务端的数据同步

# rsync -avz ibmuser@9.186.110.53::www/ /backup1/

使用后台服务方式将服务端 www 模块下的内容备份到本地 /backup1 目录中,备份时保留原有权限、属性、属主及符号连接等,并使用压缩方式加快数据传输。

# rsync –avz ibmuser@9.186.110.53:/var/www/html /backup2/

使用 ssh 方式将远程的 /var/www/html 目录备份到本地 /backup2/ 目录下

# rsync -avz --delete ibmuser@9.186.110.53::www/ /backup3/

将远程 www 模块备份到本地 /backup3/ 目录中,同时进行同步目录,删除本地目录中多余的文件。

当服务端的数据出现问题时,需要通过客户端的数据对服务端进行恢复,只要客户端有服务端的写入权限,即可通过调换 rsync 命令的 SRC、DEST 参数进行恢复。

 作者“devilkin”