Linux 上的常用文件传输方式介绍与比较(2)

来源:developerWorks 中国 作者:李 梅雯
  
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] 
         [-l limit] [-o ssh_option] [-P port] [-S program] 
         [[user@]host1:]file1 [...] [[user@]host2:]file2

使用 scp 命令,需要输入密码,如果不想每次都输入,可参考下面的方法。

首先生成密钥对

$ ssh-keygen -t rsa 
 Generating public/private rsa key pair. 
 Enter file in which to save the key (/home/user/.ssh/id_rsa): 
 Created directory '/home/user/.ssh'. 
 Enter passphrase (empty for no passphrase): 
 Enter same passphrase again: 
 Your identification has been saved in /home/user/.ssh/id_rsa. 
 Your public key has been saved in /home/user/.ssh/id_rsa.pub. 
 The key fingerprint is: 
 10:66:da:38:85:8a:8c:bd:db:9c:6e:eb:ee:bd:7d:15 user@somehost

在这里,我们指定了生成 rsa 类型的密钥。在提示密钥的保存路径和密码时,可以直接回车使用默认路径和空密码。这样,生成的公共密钥保存在 $HOME/.ssh/id_rsa.pub,私有密钥保存在 $HOME/.ssh/id_rsa 。然后把这个密钥对中的公共密钥的内容复制到要访问的机器上的 $HOME/.ssh/authorized_keys 文件中。这样,下次再访问那台机器时,就不用输入密码了。

使用实例:

  • Copy 本地文件 /etc/eva.log, 到远程机器 sysB, 用户 user 的家目录下

    scp /etc/eva.log user@sysB:/home/user

  • copy 远程机器 sysB 上的文件 /home/uesr/eva.log, 到本地的 /etc 目录下 , 并保持文件属性不变

    scp -p user@sysB:/home/uesr/eva.log /etc

  • copy sysB 上的目录 /home/user, 到本地 /home/user/tmp, <new dir,/home/user/tmp/user>

    scp -r user@sysB:/home/user /home/user/tmp





wget

wget 是一个经由 GPL 许可的可从网络上自动获取文件的自由软件包。它是一个非交互式的命令行工具。支持 HTTP,HTTPS 和 FTP 协议,支持代理服务器以及断点续传功能。 wget 可实现递归下载,即可跟踪 HTML 页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构,实现远程网站的镜像。在递归下载时,wget 将页面中的超级链接转换成指向本地文件,方便离线浏览。由于非交互特性,wget 支持后台运行,用户在退出系统后,仍可继续运行。功能强大,设置方便简单。

基本语法

wget [options] [URL-list]

wget 有很多不同的参数以用于远程站点信息的获取,常用参数如下,更多参数请参照 wget 帮助手册 http://www.gnu.org/software/wget/manual/wget.html


表 3. wget 工具常用参数
选项 描述
-r 递归下载服务器上所有的目录和文件。由 -l 选项来指定递归深度。
-b 后台下载
-m 制作站点镜像
-c 指定断点续传功能。该功能要求服务器支持断点续传。
-I 指定下载目录列表,可实现批量下载
-A/-R 指定接受/拒绝下载列表,实现选择性地下载
--proxy=on/off 指定是否利用代理服务器进行下载
-t, --tries=NUMBER 最大尝试链接次数 (0 表示无限制,默认为 20 次 )
-nc, --no-clobber 不覆盖已存在的文件
-N, --timestamping 只下载比本地新的文件
-nd --no-directories 不进行目录结构创建
-x, --force-directories 强制创建目录结构
-nH, --no-host-directories 不继承主机目录结构
-P, --directory-prefix=PREFIX 设置目录前缀

使用实例:

  • 递归下载 http://www.ibm.com.cn 站点的信息。下载所有显示完整网页所以需要的文件,如图片等。在下载不进行上层目录搜索并将绝对链接转换为相对链接。
    wget -r -p -np -k http://www.ibm.com.cn
  • 将在本地硬盘建立 http://www.ibm.com.cn 的镜像,镜像文件存入当前目录下一个名为 www.ibm.com.cn 的子目录中(也可以使用 -nH 参数指定不建立该子目录,而直接在当前目录下建立镜像的目录结构),递归深度为 4,重试次数为无穷(若连接出现问题,wget 将永远重试下去,直至任务完成)
    wget -m -l4 -t0 http://www.ibm.com.c
  • 使用代理进行下载,并实现断点续传。代理可以在环境变量 PROXY 或 wgetrc 文件中设定。 -c 选项要求服务支持断点续传。
    wget -Y on -c http://www.ibm.com.cn




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


    时间:2009-07-02 16:06 来源:developerWorks 中国 作者:李 梅雯 原文链接

好文,顶一下
(3)
60%
文章真差,踩一下
(2)
40%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量