如何使用“ pv”命令通过管道监视数据进度

时间:2020-03-21 11:46:20  来源:igfitidea点击:

当我们试图通过命令行将一个大文件从一个目录复制到另一个目录,或者从一个系统复制到另一个系统时。
如我们所知,如果使用'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