如何在Linux和Unix中通过网络快速传输大文件

2022-06-02 18:45:54 浏览数 (1)

在 GNU/Linux 中的两个系统之间通过网络快速传输大文件

确保你在系统上安装了netcat和pv应用程序。如果尚未安装它们,你可以如下所示安装它们。大多数 Linux 系统默认提供tar包,不必额外安装。

在 Arch Linux 及其衍生产品上:

代码语言:javascript复制
$ sudo pacman -S netcat pv

在 RHEL、CentOS、Fedora 上:

代码语言:javascript复制
$ sudo yum install epel-release
代码语言:javascript复制
$ sudo yum install nc pv

代码语言:javascript复制
$ sudo dnf install nc pv

在 Debian、Ubuntu、Linux Mint 上:

代码语言:javascript复制
$ sudo apt-get install netcat pv

现在让我们看看如何在两个系统之间快速复制大文件。为此,请在接收节点(目标系统)上以root用户身份运行以下命令:

代码语言:javascript复制
# netcat -l -p 7000 | pv | tar x

在源服务器上,以root用户身份运行此命令:

代码语言:javascript复制
# tar cf - * | pv | netcat 192.168.1.105 7000

在这里,192.168.1.105是我的目标系统。 tar cf - *会将当前工作目录中的所有内容复制到目标系统,并在另一端提取文件。

注意:在 RHEL、CentOS 系统上,使用nc而不是netcat,如下所示。并且,你需要将端口7000添加到目标系统上的 iptables/firewall-cmd。

在目标系统上添加端口后,你可以传输较大的文件,如下所示。

在目标系统上:

代码语言:javascript复制
# nc -l -p 7000 | pv | tar x

在源系统上:

代码语言:javascript复制
# tar cf - * | pv | nc 192.168.1.105 7000

此外,你可以指定一个特定的文件,如下所示。

代码语言:javascript复制
# tar cf - /home/sk/test.file | pv | netcat 11105 7000

请注意,两个系统都应该安装了netcat

此外,你不会在双方看到任何文件传输完成的迹象。这些命令将一直运行,直到你手动停止它们。你需要使用du -h <filename>命令手动检查两个系统上的文件大小。如果目标系统中的文件大小与源系统中的相同,则可以假设文件传输过程已完成并按CTRL C退出命令。

在 Unix 中的两个系统之间快速传输大文件

在 Unix 操作系统上,netcat被称为 nc。因此,要通过网络在系统之间复制大文件,命令将是:

在目标系统上:

代码语言:javascript复制
# nc -l 7000 | pv | tar -xpf -

在源系统上:

代码语言:javascript复制
# tar -cf - * | pv | nc 192.168.1.105 7000

同样,这些命令应该以 root用户身份运行。而且,源系统和目标系统都应该安装了 netcat 和 pv。使用 netcat 和 tar 通过 LAN 传输大文件确实可以为你节省大量时间。

请注意:此方法没有安全性。因为,正如你在上面的示例中看到的那样,任何一方都没有身份验证。你只需要知道目标系统的 IP 地址。建议仅在受保护的网络内使用 netcat 传输文件。如果你对安全性有顾虑,我强烈建议你使用scp命令。

如果你的安全性对你如此重要,你可以使用Rsync安全地传输文件。

代码语言:javascript复制
$ rsync -ravz /path/to/source/rumenz/ destination-ip:/path/on/rumenz

0 人点赞