2024年详细介绍!Linux 上几种常用的文件传输方式

本文介绍了rcp、scp、wget、curl和rsync这些在IT技术中常用的文件传输和数据管理工具,包括它们的功能、语法、安全性和使用场景。重点讲述了如何通过SSH密钥对简化密码输入,并展示了rsync的高效同步算法。
摘要由CSDN通过智能技术生成

| 选项 | 描述 |

| — | — |

| -r | 递归地将源目录中的所有内容拷贝到目的目录中。若使用该选项,目的须为一个目 |

| -p | 试图保留源文件的修改时间和模式,忽略 umask 。 |

| -k | 请求 rcp 获得在指定区域内的远程主机的 Kerberos 许可,而不是获得由 krb_relmofhost(3)确定的远程主机区域内的远程主机的 Kerberos 许可。 |

| -x | 为传送的所有数据进行 DES 加密。这会影响响应时间和 CPU 利用率,但是可以提高安全性。 |

如果在文件名中指定的路径不是完整的路径名,则该路径将被解释为相对远程机上同名用户的主目录。若没有给出远程用户名,则使用当前用户名。如果远程机上的路径包含特殊 shell 字符,需要使用反斜线(\)、双引号(”)或单引号(’)将其括起来,使所有的 shell 元字符都能被远程地解释。需要说明的是,rcp 不提示输入口令,它通过 rsh(remote shell)命令来执行拷贝。

使用实例:

  • 将本地文件复制到远程登录目录中

rcp

  • 将多个本地文件复制到远程登录目录的子目录中

rcp

  • 将多个文件从多个远程源复制到使用不同用户名的远程目标中

rcp

scp

scp 命令在网络上的主机之间拷贝文件,它是安全拷贝(secure copy)的缩写。scp 命令使用 ssh 来传输数据,并使用与 ssh 相同的认证模式,提供同样的安全保障。scp 命令的用法和 rcp 命令非常类似,这里就不做过多介绍了。一般推荐使用 scp 命令,因为它比 rcp 更安全。

我们可以通过配置 ssh,使得在两台机器间拷贝文件时不需要每次都输入用户名和密码。

基本语法

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, 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 工具常用参数

image

使用实例:

  • 递归下载 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 … ] 

其中下载参数大约有 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 算法对更新后的文件进行同步。以下是该算法的实现步骤:

1、主机 B 将原始拷贝划分成大小为 N 的不重合的若干块(文件末尾部分分块大小可能不足 N),并对这些数据块进行两种不同方式的校验:32 位的滚动弱校验、128 位的 MD4 强校验。弱校验较之强校验计算速度快。

2、主机 B 将每个数据块的弱校验、强校验结果发送给主机 A 。

3、主机 A 对更新后的文件拷贝中的每个长度为 N 的数据块进行弱校验并与从 B 接收到的弱校验值进行匹配,若相同再进行强校验匹配。由于弱校验的滚动特性可以快速地筛选出需要进行同步的数据块。该算法的运算量主要集中在主机 A 上。

4、通过上述计算,主机 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 配置文件常见模块参数列表

image

基本语法

  • 通过远程 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 或

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值