Linux培训
达内IT学院

400-111-8989

Linux中常用的文件传输方式有哪些?


今天小编要跟大家分享的文章是关于Linux中常用的文件传输方式有哪些?正在从事Linux相关工作的小伙伴们一定不会对Linux中的文件传输感到陌生,为了帮助大家更好的从事Linux工作,今天小编为大家准备了这篇关于Linux中常用的文件传输方式有哪些的文章,让我们一起来看一看吧!

一、ftp

ftp命令使用文件传输协议(File Transfer Protocol, FTP)在本地主机和远程主机之间或者在两个远程主机之间进行文件传输。

FTP协议允许数据在不同文件系统的主机之间传输。尽管这个协议在传输数据上提供了高适应性,但是它并没有尝试去保留一个特定文件系统上的文件属性(例如一个文件的保护模式或者修改次数)。而且FTP协议很少对一个文件系统的整体结构作假定,也不提供这样的功能,比如递归的拷贝子目录。在使用ftp命令时,需要注意FTP协议的这些特性。当需要保留文件属性或者需要递归的拷贝子目录时,可以使用rcp/scp等命令。

基本语法

ftp命令的一般格式如下:

$ ftp主机名/IP

其中“主机名/IP”是所要连接的远程机的主机名或IP地址。在命令行中,主机名属于可选项,如果指定主机名,ftp将试图与远程机的ftp服务程序进行连接;如果没有指定主机名,ftp将给出提示符,等待用户输入命令:

$ ftp 
 ftp >

此时在ftp>提示符后面输入open子命令加主机名或IP地址,将试图连接指定的主机。不管使用哪一种方法,如果连接成功,需要在远程机上登录。用户如果在远程机上有帐号,就可以通过ftp使用这一帐号并需要提供口令。在远程机上的用户帐号的读写权限决定该用户在远程机上能下载什么文件和能将上载文件放到哪个目录中。在远程站点上登录成功后,在“ftp>”提示符下可以自由使用ftp提供的各种子命令,最常用的子命令如下表所示。

表1. ftp子命令

命令

描述

ls

列出远程机的当前目录

cd

在远程机上改变工作目录

lcd

在本地机上改变工作目录

ascii

设置文件传输方式为ASCII模式

binary

设置文件传输方式为二进制模式

close

终止当前的ftp会话

get (mget)

从远程机传送指定文件到本地机

put (mput)

从本地机传送指定文件到远程机

open

连接远程ftp站点

quit

断开与远程机的连接并退出ftp

?

显示本地帮助信息

!

转到Shell中

prompt 1

关闭交互模式

使用实例:

利用编写ftp脚本可以自动完成文件传输任务。具体方法是使用ftp命令的-in选项,并重定向ftp命令的输入。现在我们来编写一个利用ftp登录到远程服务器,并以bin的文件格式,在/home目录下,下载file1.log以及file2.sh至本机/opt/ibm/,并从本地/opt目录上传文件file3.jave至远程服务器/home的自动化脚本。

ftp -ni <<+ 
     open $IP 
     user $USERNAME $PASSWD 
     bin 
     cd /home 
     lcd /opt/ibm 
     mget file1.log file2.sh 
     lcd /opt 
     mput file3.jave 
     ls 
     bye

二、rcp

rcp意为“remote file copy”(远程文件拷贝)。该命令用于计算机之间进行文件拷贝。其有两种格式。第一种格式用于文件到文件的拷贝;第二种格式用于把文件或目录拷贝到另一个目录中。

基本语法

rcp [-px] [-k realm] file1 file2 
 rcp [-px] [-r] [-k realm] file directory

每个文件或目录参数既可以是远程文件名也可以是本地文件名。远程文件名具有如下形式:rname@rhost:path,其中rname为远程用户名,rhost为远程计算机名,path为该文件的路径。下表说明了rcp命令各个参数的含义。

表2. rcp命令的命令行参数

选项

描述

-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帮助手册#/software/wget/manual/wget.html

表3. wget工具常用参数

Linux中常用的文件传输方式有哪些

使用实例:

·     递归下载#站点的信息。下载所有显示完整网页所以需要的文件,如图片等。在下载不进行上层目录搜索并将绝对链接转换为相对链接。
wget -r -p -np -k #

·     将在本地硬盘建立#的镜像,镜像文件存入当前目录下一个名为#的子目录中(也可以使用-nH参数指定不建立该子目录,而直接在当前目录下建立镜像的目录结构),递归深度为4,重试次数为无穷(若连接出现问题,wget将永远重试下去,直至任务完成)
wget -m -l4 -t0 #

·     使用代理进行下载,并实现断点续传。代理可以在环境变量PROXY或wgetrc文件中设定。-c选项要求服务支持断点续传。
wget -Y on -c #

五、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 #

·     获取GNU的FTP服务器上根目录下的README文件
curl ftp://#/README

·     从一个字典中获取curl的定义
curl dict://#/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 #
curl–O #/index.html

·     使用-x选项来使用代理进行连接
curl -x my-proxy:port ftp://#/README

·     通过使用curl的-T选项来进行上载
curl -T - ftp://#/upfile

·     此命令从标准输入读取数据,并上载至远程FTP服务器上的upfile文件中。也可以指定上载一个本地文件
curl -T localfile -a ftp://#/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的优越性能。

用户可从官方网站#/上下载安装rsync的最新版本。使用时需将rsync分别安装于服务端和客户端,服务端和客户端使用同一个rsync软件包来实现远程镜像和定期同步更新。需要说明的是一个rsync服务端可同时备份多个客户端的数据;多个服务端备份一个客户端的数据。rsync默认端口为873,服务器在该端口接收客户的匿名或者认证方式的备份请求。

rsync服务端在使用之前需要进行必要的配置,其配置文件为/etc/rsyncd.conf,进行认证、访问、日志记录等控制。配置文件包括全局参数、模块参数的设置。rsyncd.conf文件中[module]之前的所有参数为全局参数,也可以在全局参数部分定义模块参数,在这种情况下该参数的值就是所有模块的默认值。全局参数设置程序使用的端口号,指定消息文件、日志文件pid文件以及发送日志消息的级别。模块参数主要定义服务端哪个目录需要被同步。用户可根据不同的需要指定多个模块,每个模块对应需要备份的一个目录树,即若有N个需要备份的目录树,则需要N个模块与之对应。模块中可以定义许多参数,常见参数如下。

表4. rsyncd.conf配置文件常见模块参数列表

Linux中常用的文件传输方式有哪些

基本语法

·     通过远程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常用参数

Linux中常用的文件传输方式有哪些

使用实例:

Linux中常用的文件传输方式有哪些

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

结尾与总结

综上所述,各种文件传输方式的特征表现各有千秋,我们从以下几个方面综合对比,更深入地了解它们各自的特性。

·     传输性能

wget通过支持后台执行及断点续传提高文件传输效率 ;rsync则以其高效的传输及压缩算法达到快传输的目的。

·     配置难度

rcp只需进行简单的配置,创建.rhost文件以及设置/etc/hosts文件中主机名与IP地址列表;wget设置设置方便简单,只需在客户端指定参数执行命令即可;rsync在使用前需要对服务端/etc/rsyncd.conf进行参数设定,配置内容相对复杂。

·     安全性能

ftp、rcp不保证传输的安全性,scp、rsync则均可基于ssh认证进行传输,提供了较强的安全保障。wget也可通过指定安全协议做到安全传输。

通过上述的对比不难发现,每种文件传输方法基于其自身的特点与优势均有其典型的适用场景:

·     ftp作为最常用的入门式的文件传输方法,使用简单,易于理解,并且可以实现脚本自动化;

·     rcp相对于ftp可以保留文件属性并可递归的拷贝子目录;

·     scp利用ssh传输数据,并使用与ssh相同的认证模式,相对于rcp提供更强的安全保障;

·     wget,实现递归下载,可跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构,适合实现远程网站的镜像;

·     curl则适合用来进行自动的文件传输或操作序列,是一个很好的模拟用户在网页浏览器上的行为的工具;

·     rsync更适用于大数据量的每日同步,拷贝的速度很快,相对wget来说速度快且安全高效。

以上就是小编今天为大家分享的关于Linux中常用的文件传输方式有哪些的文章,读者可在不同的场合根据实际需要,选择适合的文件传输方法。希望本篇文章能够对小伙伴们有所帮助,想要了解更多Linux相关知识记得关注达内Linux培训官网。最后祝愿小伙伴们工作顺利!

来源:#/VWIHhsOw

【免责声明:本文图片及文字信息均由小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除。】

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:Linux中的常用命令之系统状态
下一篇:在Linux中查找用户帐户和登录信息的方法

新能源运维工程师是干什么的

云计算就业岗位有哪些?

学物联网工程好就业吗?

图像算法工程师发展前景

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省