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适用于增量传输和断点续传。
在实际应用中,可以根据需求选择合适的工具,提高传输效率。