Linux 传输文件 - nc + pv

在 Linux 服务器之间传输文件时,scprsync 是常见的选择,但 nc (netcat) 搭配 pv (Pipe Viewer) 也提供了一种轻量级且高效的方式。本文介绍 nc + pv 组合的使用,并对比 scprsync 等传统方法。

简要代码示例:

# 接收端
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.gz192.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 示例

  1. 基本文件同步
    rsync -av 文件名 用户@目标IP:/目标路径/
    
  2. 同步整个目录
    rsync -av /本地目录/ 用户@目标IP:/远程目录/
    
  3. 仅同步更新的文件
    rsync -avu /本地目录/ 用户@目标IP:/远程目录/
    
  4. 删除远程端多余的文件
    rsync -av --delete /本地目录/ 用户@目标IP:/远程目录/
    
  5. 使用压缩加速传输
    rsync -avz /本地目录/ 用户@目标IP:/远程目录/
    

适用场景

  • 本地或远程备份:适用于定期同步数据,确保远程备份与本地数据一致。
  • 断点续传:适用于传输大文件,避免重复传输已完成部分。
  • 服务器迁移:适用于批量传输文件,并保持原目录结构。

3. 总结

  • nc + pv 适用于局域网内的大文件高速传输。
  • scp 适用于需要安全加密的环境。
  • rsync 适用于增量传输和断点续传。

在实际应用中,可以根据需求选择合适的工具,提高传输效率。