首页/系统/Linux 运维命令速查/pv 管道进度与限速
文本处理77 条

pv 管道进度与限速

给任何管道加进度条:字节速率、总量、耗时一目了然;-L 限速、-N 命名、-s 给总量才有百分比与 ETA。

Linux 运维命令速查系统更新于 2026-10-13

pv 给管道加进度条

pv(Pipe Viewer)插在管道中间统计流量:当前速率、已传输量、耗时与 ETA 一目了然,-L 可以限速、-N 给管道加标签区分多路。它不参与数据处理,只观察流过的字节。没有安装权限时,dd status=progress 或 rsync --info=progress2 能提供类似效果。

基本信息

适用平台Linux/macOS(需要安装 pv 包)
语法pv [选项] [文件] | 后续命令
常用选项-s 总量、-L 限速、-N 标签、-p 进度条、-t 计时、-e ETA
限速写法支持 2m 这类人类可读单位
替代方案dd status=progress、rsync --info=progress2

典型使用场景

  • 大文件复制或备份时确认是否还在推进
  • 导入大 SQL 文件到数据库前估算剩余时间
  • 跨机房传输限速,避免占满专线影响业务
  • 压缩、打包等长任务观察吞吐是否正常
  • 多路并行传输用 -N 标签区分进度来源

常用示例

常用示例
pv backup.tar.gz > /mnt/usb/backup.tar.gz        # 复制文件并显示进度
pv -s $(stat -c %s db.sql) db.sql | mysql appdb   # 给总量才有百分比与 ETA
tar cf - /data/site | pv -s $(du -sb /data/site | cut -f1) | gzip > site.tar.gz
pv -L 2m big.iso > /dest.iso                      # 限速 2MB/s,保护链路
cat a.log | pv -N a.log | wc -l                   # 给管道加标签,多路时便于区分
dd if=/dev/sdb of=/dev/sdc bs=16M status=progress # 没装 pv 时的替代写法
rsync -a --info=progress2 /data/ /backup/         # 备份场景的替代写法

常用选项

选项作用注意
-s 总量告知总字节数才有百分比与 ETA,需用 du -sb 而不是 du -sh
-L 速率限速,如 -L 2m跨专线传输时保护关键业务带宽
-N 标签给这条管道命名多路并行时区分输出
-p / -t / -e进度条、已用时间、剩余时间常一起用,信息最完整
-W按显示宽度处理宽字符文件名含中文时对齐更正常
-f强制输出统计输出被重定向进文件时的处理办法
-L 是软限制:实际速率会抖动,关键链路的限速要留出余量,大批量传输尽量安排在业务低峰期。
-s 与实际数据量口径不一致时(例如中间有压缩、或统计的是目录估算值)会显示超过 100% 或迟迟到不了 100%,此时以最终文件大小与校验值为准。
单位写法很友好:-L 支持 500k、2m 这类写法。脚本里只需要速率值时用 -r 只输出速率,需要时长信息时再组合 -p 进度、-t 计时、-e 剩余时间。

易错点

  • -s 传错值:把 du -sh 的人类可读字符串当字节数传入,百分比与 ETA 会明显失真
  • 把 pv 当精确流控用:它只是软限速,抖动明显,有 SLA 要求时要在上层做流控
  • 统计行被重定向进目标文件:需要时用 -f 强制把统计输出到终端,避免污染数据
  • 在高吞吐链路上无脑加 pv:极端场景下它自身也消耗 CPU,可能略微降低传输速度

数据来源与参考

  • man 1 pv(Pipe Viewer 官方手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌