在 GNU/Linux 中的两个系统之间通过网络快速传输大文件
代码语言:javascript复制确保你在系统上安装了netcat和pv应用程序。如果尚未安装它们,你可以如下所示安装它们。大多数 Linux 系统默认提供tar包,不必额外安装。
在 Arch Linux 及其衍生产品上:
$ sudo pacman -S netcat pv
代码语言:javascript复制在 RHEL、CentOS、Fedora 上:
$ sudo yum install epel-release
代码语言:javascript复制$ sudo yum install nc pv
代码语言:javascript复制或
$ sudo dnf install nc pv
代码语言:javascript复制在 Debian、Ubuntu、Linux Mint 上:
$ sudo apt-get install netcat pv
代码语言:javascript复制现在让我们看看如何在两个系统之间快速复制大文件。为此,请在
接收节点
(目标系统)上以root
用户身份运行以下命令:
# netcat -l -p 7000 | pv | tar x
代码语言:javascript复制在源服务器上,以
root
用户身份运行此命令:
# tar cf - * | pv | netcat 192.168.1.105 7000
代码语言:javascript复制在这里,
192.168.1.105
是我的目标系统。tar cf - *
会将当前工作目录中的所有内容复制到目标系统,并在另一端提取文件。
注意:
在 RHEL、CentOS 系统上,使用nc
而不是netcat,如下所示。并且,你需要将端口7000
添加到目标系统上的 iptables/firewall-cmd。在目标系统上添加端口后,你可以传输较大的文件,如下所示。
在目标系统上:
# 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 中的两个系统之间快速传输大文件
代码语言:javascript复制在 Unix 操作系统上,
netcat
被称为 nc。因此,要通过网络在系统之间复制大文件,命令将是:在目标系统上:
# nc -l 7000 | pv | tar -xpf -
代码语言:javascript复制在源系统上:
# tar -cf - * | pv | nc 192.168.1.105 7000
代码语言:javascript复制同样,这些命令应该以
root
用户身份运行。而且,源系统和目标系统都应该安装了 netcat 和 pv。使用 netcat 和 tar 通过 LAN 传输大文件确实可以为你节省大量时间。请注意:此方法没有安全性。因为,正如你在上面的示例中看到的那样,任何一方都没有身份验证。你只需要知道目标系统的 IP 地址。建议仅在受保护的网络内使用 netcat 传输文件。如果你对安全性有顾虑,我强烈建议你使用
scp
命令。如果你的安全性对你如此重要,你可以使用
Rsync
安全地传输文件。
$ rsync -ravz /path/to/source/rumenz/ destination-ip:/path/on/rumenz