Linux下常用的文件传输方式介绍与比较

参考链接:http://mingxinglai.com/cn/2014/03/copy-file-in-linux/

本文介绍了linux之间传输文件的几种方式,并通过具体实验测试了几种文件传输方式之间的传输速度。这篇文章是我一次作业的实验报告,我经常查看这个文档,所以贴出来方便自己查略。

###0. 实验环境以及实验数据

实验环境: 两台装有Ubuntu的电脑,两台电脑位于同一个局域网中,传输速度约4.1MB/s。

实验数据: 使用MySQL的日志文件(ib_logfile0)进行测试,日志文件压缩前1.1G,压缩后159M,具体应用中,压缩比例可能没有这么高,但是不影响我们的讨论。

###1. scp

scp是secure copy的缩写,scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令,主要用于linux服务器之间复制文件和目录。scp使用ssh安全协议传输数据,具有和ssh一样的验证机制,从而可以实现安全的远程拷贝文件。

下面介绍SCP三种不同用法的效率。注意:使用SCP前请配制好SSH。

1.1 scp 不使用压缩

将本地文件拷贝到远程服务器:

scp -P port ufile [email protected]:~/ufile

将远程服务器中的文件拷贝到本地的用法:

scp -P port [email protected]:~/ufile ufile

经测试,SCP不启用压缩功能的情况下,传输ib_logfile0文件需要4:12s。

1.2 压缩后传输

SCP传输ib_logfile0文件之所以需要那么多时间,是因为它没有对传输的数据进行压缩,可以先 将文件压缩,然后再进行远程拷贝。如下所示:

tar -zcf ufile.tar.gz ufile
scp -P port ufile.tar.gz [email protected]:~/ufile.tar.gz
ssh -p port [email protected] ‘tar -zxf ufile.tar.gz‘

经测试,先手动压缩,然后再传输,4次测试结果的平均值为00:39s。

1.3 scp启用压缩

相对于第一种方法,第二种方法极大地减少了传输时间,但是需要执行三条语句,较为麻烦。更简单的方法如下所示:

scp -P port -C ufile [email protected]:~/ufile

-C选项启用了SSH的压缩功能,通过man ssh可以看到,在-C选项的解释部分有这么一句话:”the compression algorithm is the same used by gzip”。SSH与gzip使用的是同一种压缩算法,即第二种方法与第三种方法几乎一样,但是,第三种方法更为简单方便,所以,推荐使用第三种方法传输数据。

第三种方法传输ib_logfile0花费了00:52s,比第二种方法多花了10秒,这10秒主要用于数据的压缩和解压。

此外,值得注意的是,修改压缩算法的压缩比对总的数据传输时间影响不大,这是因为更高的压缩比例,需要的压缩时间也更多。

2. sftp

sftp是Secure File Transfer Protocol的缩写,安全文件传送协议,可以为传输文件提供一种安全的加密方法。sftp与ftp有着几乎一样的语法和功能,不过SFTP是SSH的一部分,它使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密、解密技术,所以传输效率比普通的FTP要低一些。

上传数据到服务器上:

echo progress; echo "put ufile"; echo quit) | sftp -o Compression=yes -o Port=port [email protected] -b

从服务器上下载数据:

echo progress; echo "get ufile"; echo quit) | sftp -o Compression=yes -o Port=port [email protected] -b

在我的实验中,使用sftp传输ib_logfile0文件花费了1:05s。比SCP略慢。

3. 直截使用ssh

将本地的数据传输到远程服务器的用法:

gzip -c ufile | ssh -p port [email protected] ‘gunzip >ufile‘

将远程服务器传输到本地的用法

ssh -p port [email protected] "gzip -c ufile" | gunzip -c > ufile

使用这种方式传输ib_logfile0需要00:55s,相对于scp -C慢了几秒,不过相差不大。但是,scp用法更简单一些,只需要加一个-C参数,而不用手动调用gzip压缩程序。

4. nc

netcat(简称nc)是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用netcat命令所能完成的事情令人惊讶。

netcat所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后所能做的事就看你的想像力了。你能建立一个服务器,传输文件,与朋友聊天,传输流媒体或者用它作为其它协议的独立客户端。我们这里只讨论nc的用于数据传输的情况。

在服务器端:

sudo nc -l -p port | tar -zxf - #l 参数用于监听
sudo nc -l -p port > ufile

在客户端:

tar -zcf - ufile | sudo nc host port
sudo nc host port < ufile

使用nc传输ib_logfile0文件需要00:49s,比SCP -C略快,这是因为SCP需要对数据进行加密,而nc只是简单的传输数据。

可以看到,nc不需要任何配置操作,使用也非常简单,不过nc需要root权限。

5. rsync

rsync(remote sync)是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来,它主要用于数据的同步备份。

rsync有两种用法,一种是通过SSH通道传输数据,另一种是通过与服务器的rsync守护者(daemon)进程建立连接来传输数据。下面对这两种情况进行测试。

5.1 rsync with ssh

rsync使用SSH通道传输数据时,配置比较简单,只要配置好了SSH,就直接可用,不需要额外的操作,正是这个原因,很多人更喜欢使用这种方式来使用rsync。

使用方法如下:

rsync -zav --rsh=‘ssh -p port‘ ufile [email protected]:path

rsync 使用SSH 通道传输ib_logfile0花费了00:55s,与直接使用SSH传输数据时间一样。

5.1 rsync with daemon

不同于SCP和SFTP,rsync是一套独立的软件,除了通过SSH通道传输数据以外,还可以通过rsync的守护者进程进行数据传输。

这里只是对rsync的数据传输的性能进行简单的测试,关于rsync的配置,可以参考其他资料。

rsync 的使用方法如下:

rsync -avz ufile [email protected]::module_name

在实验中,rsync传输ib_logfile0共花费了00:51s,与scp -C差不多。此外,值得注意的是,rsync使用zlib压缩算法压缩数据。ssh与gzip使用的是LZ77算法。

rsync的参数特别多,详细的使用方法可以参考这里

6. ftp

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

ftp的使用方法就不再介绍了,在我们的实验中,使用FTP传输ib_logfile0共花费了4:25s,这是因为,FTP没有数据压缩的功能。从前面的实验环境中可以看到,数据压缩能够显著减少传输的数据量,数据不能压缩,再好的传输工具也会受限于网络传输速率。

7. 结论

单纯从数据传输来看,我个人比较喜欢SCP,也强烈推荐SCP,不过,千万要记住,使用SCP时一定要使用-C选项,即启用压缩功能。从前面的实验中也可以看到,启用压缩与不启用压缩传输的数据量相差很多。

此外,以上几种数据传输方式也有各自的应用场景,其中,nc使用最简单,配置也最方便,但是需要root权限,在有root权限没有配置SSH的情况下,推荐使用nc。

rsync配置相对比较复杂,它的主要功能是进行增量备份而不是数据传输,在需要增量备份的情况下,毫不犹豫地选择rsync。

FTP配置也比较麻烦,传输速度也很一般,而且,FTP没有自带压缩功能,需要手动压缩,但是,FTP是最常用的一种数据传输方式,大多数普通用户都使用过FTP,对于用户来说,学习成本较低,在需要将文件传送给多个用户时,推荐使用FTP。

SFTP是建立在SSH上的FTP,传输速度也很快,与SCP不分伯仲,但是SFTP可以交互式的使用,在某些情况下可能会比较有用,而且,如果已经配置好了SSH,SFTP的配置成本为零,即无需配置,直接可用。

总的来说,每种传输方式都各有千秋,我们应当根据自己的实际需要,选择适合的文件传输方法。

sftp(Secure File Transfer Protocol):安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP为SSH的一部份,是一种传输文件到服务器的安全方式。在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。

OpenSSH:是SSH(Secure SHell)协议的免费开源实现。SSH协议族可以用来进行远程控制,或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程的中的数据,并由此来代替原来的类似服务。 OpenSSH是使用SSH透过计算机网络加密通讯的实现。它是取代由SSH Communications Security所提供的商用版本的开放源代码方案。目前OpenSSH是OpenBSD的子计划。OpenSSH常常被误认以为与OpenSSL有关联,但实际上这两个计划的有不同的目的,不同的发展团队,名称相近只是因为两者有同样的软件发展目标──提供开放源代码的加密通讯软件。

SSH(Secure Shell):,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

  • SSH是由客户端和服务端的软件组成的:服务端是一个守护进程(daemon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接; 客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。
  • 从客户端来看,SSH提供两种级别的安全验证:第一种级别(基于口令的安全验证); 第二种级别(基于密匙的安全验证)。
  • SSH 主要有三部分组成: 传输层协议 [SSH-TRANS] ;用户认证协议 [SSH-USERAUTH] ;连接协议 [SSH-CONNECT]。
时间: 2024-10-28 02:17:22

Linux下常用的文件传输方式介绍与比较的相关文章

[原创] Linux下几种文件传输命令 sz rz sftp scp介绍

Linux下几种文件传输命令 sz rz sftp scp介绍 1.sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具.由于它是基于SSH的,会在传输过程中对用户的密码.数据等敏感信息进行加密,因此可以有效的防止用户信息在传输的过程中被窃取,比FTP有更高的安全性.在功能方面与FTP很类似,不仅可以传输文件数据,而且可以进行远程的文件管理(如建立,删除,查看文件列表等操作).Sftp与ftp虽然只有一字之差,但基于的传输协议却是不同的.因此不能用sftp client去连

Linux下几种文件传输命令

Linux下几种文件传输命令 sz rz sftp scp 最近在部署系统时接触了一些文件传输命令,分别做一下简单记录: 1.sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具.由于它是基于SSH的,会在传输过程中对用户的密码.数据等敏感信息进行加密,因此可以有效的防止用户信息在传输的过程中被窃取,比FTP有更高的安全性.在功能方面与FTP很类似,不仅可以传输文件数据,而且可以进行远程的文件管理(如建立,删除,查看文件列表等操作).Sftp与ftp虽然只有一字之差,但基于

[转帖]Linux下主机间文件传输命令

Linux下主机间文件传输命令 https://yq.aliyun.com/articles/53631?spm=a2c4e.11155435.0.0.580ce8ef4Q9uzs SCP命令: 简介: scp 命令在网络上的主机之间拷贝文件,它是安全拷贝(secure copy)的缩写. scp 命令使用 ssh 来传输数据,并使用与 ssh 相同的认证模式,提供同样的安全保障. 如果有公钥打通就不用密码,如果没有就会提示输入密码. 用法: 1 #Copy 本地文件 /etc/eva.log,

Linux菜鸟成长日记 ( Linux 下的 ftp 文件传输协议 )

https://blog.csdn.net/buster_zr/article/details/80244542 FTP FTP 是 File Transfer Protocol (文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件.在FTP的使用当中,用户经常遇到两个概念:"下载"(

Linux下几种文件传输命令 sz rz sftp scp

最近在部署系统时接触了一些文件传输命令,分别做一下简单记录: 1.sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具.由于它是基于SSH的,会在传输过程中对用户的密码.数据等敏感信息进行加密,因此可以有效的防止用户信息在传输的过程中被窃取,比FTP有更高的安全性.在功能方面与FTP很类似,不仅可以传输文件数据,而且可以进行远程的文件管理(如建立,删除,查看文件列表等操作).Sftp与ftp虽然只有一字之差,但基于的传输协议却是不同的.因此不能用sftp client去连接

Linux下几种文件传输命令 sz rz sftp scp 对比

1. sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具.由于它是基于SSH的,会在传输过程中对用户的密码.数据等敏感信息进行加密,因此可以有效的防止用户信息在传输的过程中被窃取,比FTP有更高的安全性.在功能方面与FTP很类似,不仅可以传输文件数据,而且可以进行远程的文件管理(如建立,删除,查看文件列表等操作).Sftp与ftp虽然只有一字之差,但基于的传输协议却是不同的.因此不能用sftp client去连接ftp server 也不能用 ftp client 去连接

Linux下常用三种安装方式

--rpm安装包-- RPM全称是Red Hat Package Manager(Red Hat包管理器). 语法格式: rpm   <选项> <软件包名> 选项:-i 安装软件包. -t 测试安装,不是真的安装 -f 忽略任何错误 -v  显示当前使用的rmp版本: -h  以hash字符"#"显示安装进度条: -u  对旧版本进行升级 -e  删除软件 实例: #rpm -ivh jdk-7u79-linux-i586.rpm --yum install直接

Linux下重要日志文件及查看方式

1.Linux下重要日志文件介绍 /var/log/boot.log 该文件记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息,如图1所示: 图1 /var/log/boot.log示意 /var/log/cron 该日志文件记录crontab守护进程crond所派生的子进程的动作,前面加上用户.登录时间和PID,以及派生出的进程的动作.CMD的一个动作是cron派生出一个调度进程的常见情况.REPLACE(替换)动作记录用户对它的cron文件的更新,该文件列出了要周期性

Linux经常使用的文件传输的几种方式

Linux经常使用的文件传输的几种方式 1.终端新建stfp协议连接 或者命令方式: sftp -P22 [email protected] 端口可以不用填写,默认是22,端口的P是大写. 将本地路径下的文件传输文件到linux指定路径下: 进入需要上传的目录下: cd /mnt/page put D:/CityInfo.txt 这样就完成上传CityInfo.txt到linux的/mnt/page下. 或者直接指定目录: put D:/CityInfo.txt     /mnt/page/ 将