Linux 传输文件 - nc + pv
在 Linux 服务器之间传输文件时,scp
和 rsync
是常见的选择,但 nc
(netcat) 搭配 pv
(Pipe Viewer) 也提供了一种轻量级且高效的方式。本文介绍 nc + pv
组合的使用,并对比 scp
、rsync
等传统方法。
简要代码示例:
# 接收端
yum install pv nc -y
nc -l -p 9999 | pv | tar -xf -
# 发送端
yum install pv nc -y
pv /mnt/data2/k8sstorage/minio_backup.tar | nc 172.25.1.54 9999
1. nc + pv 传输文件
nc
(netcat)是一个功能强大的网络工具,可用于在两台主机之间建立 TCP/UDP 连接,而 pv
可以显示数据传输的进度。
1.1 发送端
pv 文件名 | nc 目标IP 端口
示例:
pv largefile.iso | nc 192.168.1.100 12345
1.2 接收端
在目标机器上运行以下命令,监听指定端口,并将数据保存为文件:
nc -l 12345 > largefile.iso
1.3 实际使用示例
场景 1:传输大文件
在 192.168.1.101
机器上发送 backup.tar.gz
到 192.168.1.102
,使用端口 5555
。
发送端 (192.168.1.101
):
pv backup.tar.gz | nc 192.168.1.102 5555
接收端 (192.168.1.102
):
nc -l 5555 > backup.tar.gz
场景 2:大文件分割传输
对于超大文件,可以使用 split
进行分割后再传输,避免单次传输失败。
发送端 (192.168.1.101
):
split -b 500M largefile.iso part_
for f in part_*; do pv "$f" | nc 192.168.1.102 5555; done
接收端 (192.168.1.102
):
nc -l 5555 > received_part
cat received_part* > largefile.iso
2. 对比 scp、rsync
方法 | 适用场景 | 传输速度 | 可靠性 | 进度显示 |
---|---|---|---|---|
scp |
安全传输 | 中等 | 高 | 有 |
rsync |
增量同步 | 较快 | 高 | 有 |
nc + pv |
高速传输 | 快 | 低(无校验) | 有 |
2.1 scp
传输文件
scp
基于 SSH,默认加密,适用于安全传输,但速度相对较慢。
scp 文件名 用户@目标IP:/目标路径/
2.2 rsync
传输文件
rsync
支持增量同步,适用于断点续传和目录同步。
常用 rsync
示例
- 基本文件同步
rsync -av 文件名 用户@目标IP:/目标路径/
- 同步整个目录
rsync -av /本地目录/ 用户@目标IP:/远程目录/
- 仅同步更新的文件
rsync -avu /本地目录/ 用户@目标IP:/远程目录/
- 删除远程端多余的文件
rsync -av --delete /本地目录/ 用户@目标IP:/远程目录/
- 使用压缩加速传输
rsync -avz /本地目录/ 用户@目标IP:/远程目录/
适用场景
- 本地或远程备份:适用于定期同步数据,确保远程备份与本地数据一致。
- 断点续传:适用于传输大文件,避免重复传输已完成部分。
- 服务器迁移:适用于批量传输文件,并保持原目录结构。
3. 总结
nc + pv
适用于局域网内的大文件高速传输。scp
适用于需要安全加密的环境。rsync
适用于增量传输和断点续传。
在实际应用中,可以根据需求选择合适的工具,提高传输效率。