如何使用“ pv”命令通过管道监视数据进度
当我们试图通过命令行将一个大文件从一个目录复制到另一个目录,或者从一个系统复制到另一个系统时。
如我们所知,如果使用'cp'命令,将看不到任何复制任务指示。
我们只会看到一个空白屏幕。
在复制过程完成之前,我们无法确定复制过程是否正在进行。
在这种情况下,可以使用pv命令监视数据的进度。
pv(管道查看器的缩写)命令通过提供以下信息,使用户可以通过管道查看数据的进度:
- 总时间已过去,
- 完成百分比(带有进度条),
- 当前的吞吐率,
- 传输的总数据,
- 和ETA。
在这个简短的教程中,我们将了解在类似Unix的系统中如何以及其中使用pv命令来监视数据的进度。
在Linux中安装PV
大多数现代Linux发行版都预装有pv命令。
万一如果尚未安装,可以根据所使用的Linux发行版从终端运行以下命令以进行安装。
在Arch Linux,Antergos和Manjaro Linux上:
$sudo pacman -S pv
在RHEL,CentOS,Fedora上:
$sudo yum install pv
或者,
$sudo dnf install pv
在Debian,Linux Mint,Ubuntu上:
$sudo apt-get install pv
在SUSE上,openSUSE:
$sudo zypper in pv
现在,我们已经安装了pv。
让我向我们展示一些示例。
使用“ pv”命令通过管道监视数据进度
查看以下命令的输出:
$cp CentOS7.iso Downloads/
此命令将CentOS 7 ISO镜像复制到本地系统中的Downloads目录中。
如我们在上面的输出中看到的,它没有显示任何进度条。
我们只会看到光标闪烁。
我们不知道复制过程将花费多少时间。
有时这可能很烦人,因为我们看不到该命令何时完成的任何迹象。
这是pv命令提供帮助的地方。
pv命令将向我们显示Linux命令的进度,并向我们显示Linux命令何时完成。
因此,我们可以离开终端并执行其他一些任务,然后在完成任务后返回。
现在,让我们使用管道查看器(pv)进行相同的操作,看看输出是什么。
$pv CentOS7.iso > Downloads/centos.iso
明白了,我们能得到与众不同吗?
就像我说的那样,pv命令显示经过的总时间,完成的百分比(带有进度条),当前吞吐率,已传输的总数据和ETA。
让我再给你一些例子。
我们可以使用-L开关来限制数据传输速率,如下例所示。
$pv -L 2m CentOS7.iso > Downloads/centos.iso
上面的命令将数据传输速率限制为每秒2MB。
查看以下输出。
如果我们有多个文件或者目录,则可以通过tar命令使用pv,如下所示:
$tar c Notebooks/| pv | tar x -C Documents/
上面的命令将压缩Notebooks目录,并将其复制到Documents目录,最后提取内容。
这是另一个例子。
此命令将创建CentOS7.iso文件的存档并将其保存在当前工作目录中。
$pv CentOS7.iso | zip > centos.zip
我们还可以将pv与dd命令一起使用,以在目录之间复制文件,如下所示。
此命令将CentOS7.iso文件从当前目录复制到Downloads目录。
$dd if=CentOS7.iso | pv | dd of=Downloads/centos7.iso
显示数据进度的另一个有用命令是对话。
我们可以将其与pv命令一起使用以显示数据进度,如下所示。
$tar -czf - Official/| (pv -n > mybackup.tgz) 2>&1 | dialog --gauge "Compressing files, please wait..." 10 70 0
有关更多详细信息,请参见手册页。
$man pv