在Linux环境中,将数据从一个地方传输到另一个地方是常见的操作。pv
命令(Pipe Viewer)是一个用于监视数据通过管道传输过程的工具,它可以提供即时的数据传输速率、已传输数据量以及估算的完成时间等信息。这个命令对于那些想要了解数据传输进度的用户非常有用。
Linux pv命令介绍
pv
(Pipe Viewer)是一个终端应用程序,能够以可视化的方式展示管道中的数据传输过程。它可以显示进度条、数据传输速率、已传输的数据量和剩余时间估计等信息。这对于调试和监视长时间运行的数据传输任务特别有帮助。pv
能够插入到管道命令序列中,无需对其他命令做任何改变。
Linux pv命令适用的Linux版本
pv
命令在大多数Linux发行版中都可以使用,但在某些系统中可能不是预安装的。以下是在不同发行版中安装pv
的命令:
-
对于基于Debian的系统(比如Ubuntu),使用以下命令安装:
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install pv ```
-
对于基于RPM的系统(比如CentOS),在CentOS 7中使用以下命令安装:
[linux@bashcommandnotfound.cn ~]$ sudo yum install pv ``` 而在CentOS 8中,则需要使用以下命令: ````bash [linux@bashcommandnotfound.cn ~]$ sudo dnf install pv ```
如果命令提示bash: pv: command not found
,请根据上述步骤进行安装。
Linux pv命令的基本语法
语法格式如下:
pv [选项] [文件...]
Linux pv命令的常用选项或参数说明
选项 | 描述 |
---|---|
-a | 显示平均速率 |
-b | 显示已传输的字节数 |
-c | 在多个pv命令间保持光标位置一致 |
-e | 显示估计的完成时间 |
-l | 计数行而不是字节 |
-n | 输出百分比 |
-p | 显示进度条 |
-r | 显示速率 |
-s | 设置预期的数据总量 |
-t | 显示经过的时间 |
-w | 设置进度条的宽度 |
-h | 显示帮助信息 |
注:若选项超过20个,只挑选了最常用的部分。
Linux pv命令实例详解
实例1:显示复制过程的进度
复制文件时,我们通常不知道需要多长时间。使用pv
结合dd
命令可以可视化复制过程。
[linux@bashcommandnotfound.cn ~]$ pv source.iso | dd of=/dev/sdx bs=128M
实例2:估计压缩文件的时间
在压缩大文件时,使用pv
可以显示进度和估算剩余时间。
[linux@bashcommandnotfound.cn ~]$ pv largefile.tar.gz | gzip > largefile.tar.gz.gzip
实例3:监视数据库备份的进度
导出大型数据库可能需要一些时间,使用pv
可以看到当前的进度。
[linux@bashcommandnotfound.cn ~]$ mysqldump database | pv -cN | gzip > database.sql.gz
实例4:通过网络传输文件并查看进度### 实例4:通过网络传输文件并查看进度
在通过网络传输文件时,pv
可以帮助我们监视正在传输的数据量以及速率。
[linux@bashcommandnotfound.cn ~]$ pv largefile.iso | ssh user@remotehost "cat > /path/to/remote/largefile.iso"
实例5:结合tar
命令备份目录
备份一个目录时,可以使用pv
来查看数据流的过程。
[linux@bashcommandnotfound.cn ~]$ tar cf - /path/to/directory | pv -cN tar | gzip > directory_backup.tar.gz
实例6:结合split
命令分割大文件
当分割大文件为多个小文件时,pv
可以帮助我们监视进度:
[linux@bashcommandnotfound.cn ~]$ pv largefile.iso | split -b 100M - largefile_part_
上述命令会将largefile.iso
分割成多个100MB大小的文件,如largefile_part_aa
, largefile_part_ab
, 等,并显示进度。
实例7:结合cat
和ssh
进行远程备份
备份本地文件到远程服务器时,pv
可以显示传输的进度:
[linux@bashcommandnotfound.cn ~]$ cat backup.tar | pv | ssh user@remotehost "cat > /path/to/remote/backup.tar"
实例8:结合netcat
进行网络文件传输
在使用netcat
进行文件传输时,可以用pv
来监控传输状态:
# 在接收端执行
[linux@bashcommandnotfound.cn ~]$ nc -l 1234 | pv > received_file.iso
# 在发送端执行
[linux@bashcommandnotfound.cn ~]$ pv largefile.iso | nc remotehost 1234
实例9:监控解压进度
解压缩大型压缩文件时,pv
可以提供解压进度:
[linux@bashcommandnotfound.cn ~]$ pv largefile.tar.gz | tar xzf -
实例10:使用pv
监控磁盘写入
当用dd
写入磁盘映像时,pv
可以显示写入进度和速率:
[linux@bashcommandnotfound.cn ~]$ pv disk_image.iso | dd of=/dev/sdX bs=4M
实例11:结合cp
命令复制文件
虽然pv
常用于管道,但也可以结合cp
命令用来复制文件:
[linux@bashcommandnotfound.cn ~]$ pv -cN source < /path/to/sourcefile > /path/to/destinationfile
实例12:结合rsync
进行同步
使用rsync
同步文件夹时,pv
可以提供传输进度:
[linux@bashcommandnotfound.cn ~]$ rsync -av --progress source/ | pv -lep -s $(du -sb source/ | awk '{print $1}') > destination/
实例13:检查文件是否完整
在比较文件完整性时,pv
可以用来显示进度:
[linux@bashcommandnotfound.cn ~]$ diff <(pv file1.iso) <(pv file2.iso)
实例14:结合md5sum
计算大文件的MD5
计算大文件的MD5值时,pv
可以显示处理进度:
[linux@bashcommandnotfound.cn ~]$ pv largefile.iso | md5sum
实例15:使用pv
复制一个文件夹到另一个位置
以下命令将文件夹复制到另一个位置,并显示进度信息:
[linux@bashcommandnotfound.cn ~]$ tar cf - /path/to/source_dir | pv -s $(du -sb /path/to/source_dir | awk '{print $1}') | tar xf - -C /path/to/destination_dir
常见技巧或高级技巧
限制传输速率
如果要限制传输速率,pv
提供了一个选项-L
,可以指定速率限制:
[linux@bashcommandnotfound.cn ~]$ pv -L 1m largefile.iso > /dev/null
这个命令将largefile.iso
文件的输出速率限制在每秒1MB。
监视多个文件传输
可以使用pv
监视多个文件传输的总进度:
[linux@bashcommandnotfound.cn ~]$ cat file1.iso file2.iso | pv -s $(($(stat --printf="%s" file1.iso) + $(stat --printf="%s" file2.iso))) > /dev/null
这将显示两个文件传输的总体进度。
Linux pv命令的注意事项
- 当使用
pv
监视数据传输时,确保你有正确估计或知道数据的总量,特别是在使用-s
选项时。 pv
不会改变数据传输的方式或数据本身,它只是提供了一个观察和监控的窗口。- 如果系统中没有
pv
命令,可能会遇到bash: pv: command not found
错误,按照上面的安装指南进行安装即可。
评论区