如何在Linux和Unix中通过网络快速传输大文件
我的Ubuntu服务器具有超过200 GB的数据,我不想丢失它。
我可以通过scp传输这些数据,或者设置NFS,FTP来复制文件,但是我敢肯定,传输这样的大文件将花费数小时。
在寻找替代方法时,我遇到了以下方法。
我们可以在任何GNU/Linux和类似Unix的操作系统中使用netcat,tar和pv命令通过网络在两个系统之间快速传输大型文件。
与其他方法不同,我发现它非常快速。
Netcat是一个简单的Unix实用程序,它使用TCP或者UDP协议通过网络连接读取和写入数据。
tar是命令行归档工具,而pv代表管道查看器,用于监视数据进度。
现在,让我向我们展示如何在两个Linux系统之间快速传输大文件。
在GNU/Linux中的两个系统之间通过网络快速传输大文件
确保在系统上安装了“ netcat”和“ pv”实用程序。
如果尚未安装,则可以如下所示安装它们。
默认情况下,“ tar”软件包在大多数Linux系统上都可用,因此我们不必安装它。
在Arch Linux及其衍生版本上:
$sudo pacman -S netcat pv
在RHEL,CentOS,Fedora上:
$sudo yum install epel-release
$sudo yum install nc pv
或者,
$sudo dnf install nc pv
在Debian,Ubuntu和Linux Mint上:
$sudo apt-get install netcat pv
现在让我们看看如何在两个系统之间快速复制大文件。
为此,请以root用户身份在接收节点(目标系统)上运行以下命令:
# netcat -l -p 7000 | pv | tar x
在发送节点(源系统)上,以root用户身份运行以下命令:
# tar cf - * | pv | netcat 192.168.1.105 7000
其中192.168.1.105是我的目标系统。
tar cf *会将当前工作目录中的所有内容复制到目标系统,并且文件将在另一端提取。
注意:在RHEL,CentOS系统上,使用“ nc”代替“ netcat”,如下所示。
并且,我们需要将端口“ 7000”添加到目标系统上的iptables/firewall-cmd。
在目标系统上添加端口后,可以如下所示传输较大的文件。
在目标系统上:
# nc -l -p 7000 | pv | tar x
在源系统上:
# tar cf - * | pv | nc 192.168.1.105 7000
另外,我们可以指定一个特定的文件,如下所示。
# tar cf - /home/sk/test.file | pv | netcat 192.168.1.105 7000
请注意,两个系统都应安装netcat。
现在,抢一杯咖啡。
我们会发现文件的复制速度比传统方法(如scp)要快。
另外,在两侧都看不到文件传输完成的任何迹象。
这些命令将一直运行,直到我们手动停止它们为止。
我们需要使用“ du -h <文件名>”命令在两个系统上手动检查文件大小。
如果目标系统中的文件大小与源系统中的文件大小相同,则可以假定文件传输过程已完成,然后按CTRL + C退出命令。
在Unix中的两个系统之间快速传输大文件
在Unix操作系统上,netcat被称为nc。
因此,要通过网络在系统之间复制大文件,命令将是:
在目标系统上:
# nc -l 7000 | pv | tar -xpf
在源系统上:
# tar -cf - * | pv | nc 192.168.1.105 7000
同样,这些命令应以root用户身份运行。
并且,源系统和目标系统都应安装netcat和pv。
使用netcat和tar通过LAN传输大文件确实可以节省大量时间。
免责声明:请注意,此方法没有安全性。
因为,如我们在上面的示例中看到的那样,任何一方都没有身份验证。
我们只需要知道目标系统的IP地址即可。
仅建议在受保护的网络内部使用netcat传输文件。
如果我们对安全性抱有偏执,强烈建议我们使用scp命令。
如果安全性对我们如此重要,则可以使用Rsync安全地传输文件。
$rsync -ravz /path/to/source/files/destination-ip:/path/on/destiny