如何监视Linux命令的进度(带有pv和progress)

时间:2020-01-09 10:39:31  来源:igfitidea点击:

不要盲目地使用Linuxpvprogress命令来跟踪命令的进度。这些实用程序将为我们提供通常没有任何命令的进度条。我们还会看到估计的完成时间。

如果我们乘坐的飞机是长途飞行,而座椅靠背上没有视频屏幕,那么很难知道行程。你知道什么时候起飞。我们知道预计飞行需要多长时间。但是,我们如何知道自己是否按时,按时或者落后于进度?如果我们不想看机上电影,通常可以切换视频屏幕以显示带有飞机位置的地图。我们还会得到一些统计数据,例如预期到达时间(ETA),这非常好。

从终端窗口启动命令有时会感觉像是没有视频屏幕的长途飞行。我们没有任何迹象表明一切是否正常或者该过程是否已挂起,也没有完成的程度。闪烁的光标不是很有用。

pvprogress命令为我们提供一些统计信息和一些视觉反馈。我们可以看到该过程完成的程度。这意味着我们将获得正在运行的进程的预计到达时间。与盯着光标相比,这很容易。

安装pv

我们必须安装pv

要在Ubuntu上安装pv,请使用以下命令:

sudo apt-get install pv

要在Fedora上安装pv,请使用以下命令:

sudo dnf install pv

要在Manjaro上安装pv,请使用以下命令:

sudo pacman -Syu pv

使用光伏

pv代表管道查看器。管道必须与某处的命令有关。这是一个示例,其中我们通过" zip"传递ISO镜像以制作ISO的压缩zip文件。

为了使命令足够慢以可以截取屏幕截图,本文示例中的某些文件存储在名为SILVERXHD的旧的,缓慢的外部USB中。

pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso | zip > gparted.zip

pv给我们的信息可以在显示屏的底行看到。

从左到右,显示的信息是:

  • 数据传输到此为止。

  • 时间已经过去了。

  • 数据传输速率(吞吐量)。

  • 进度条和完成百分比图。

  • 完成之前预计剩余的时间(ETA)。

用pv复制文件

要复制pv输出的文件,请使用以下命令:

pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso > gparted.iso

复制文件后,我们会收到进度报告。

用pv复制多个文件

要使用pv复制多个文件和文件夹,我们需要使用一些技巧。我们使用tar为我们移动文件。

tar -c help-files/ | pv | tar -x -C Documents/

命令的tar -c help-files /部分指示tar创建(-c)help-files文件夹中文件的档案。这是通过pv通过管道传输的,因此我们可以看到进度。然后在命令的最后部分将其通过管道输送回tar中,然后提取档案(-x),并将目录在提取前更改为Documents(-C)。

因此,帮助文件中的文件和文件夹将被复制到"文档"文件夹中,并显示进度。

这次的输出略有不同。

我们没有预计到达时间。现在,进度条将显示一个移动指示器。它表明该过程是活动的,但它没有像传统的进度条那样从左向右扩展。 " pv"仅限于显示其可以从正在传递的进程中提取的信息。

使用pv和tar创建档案

pvtar复制文件不会给我们留下存档文件。一种由tar创建的虚拟档案,将其直接反馈到tar中以提取文件。如果我们的目标是复制文件,那就完成了。但是,如果我们要创建一个存档文件怎么办?

我们仍然可以使用tar创建存档文件并从pv获取进度报告。与tar一起使用的选项是-c(创建档案),-z(使用gzip压缩)和-f(档案文件名)。

请注意,我们使用-作为文件名,这导致tar使用stdout,并将其输出写入终端窗口。我们看不到该输出,因为它是通过pv传递的。

档案的实际名称将是文件名,我们会将" pv"的输出通过管道传递给该文件名。在这种情况下,它是help-files.tgz。

tar -czf - ./help-files/ | pv > help-files.tgz

我们将获得与以前相同的进度指示器,并为我们创建了存档文件。

pv显示选项

pv可以使用许多选项来更改其报告的详细信息。

如果使用这些选项中的任何一个,则所有其他选项都将关闭。因此,如果要使用三个显示选项,则需要指定这三个选项。

使用不带任何选项的pv与使用-pterb选项相同。

  • -p:显示完成百分比。这是进度条和完成百分比图。

  • -t:显示经过的时间。

  • -e:显示ETA。

  • -r:显示数据传输速率。

  • -b:显示字节数(到目前为止已传输的数据)。

  • -n:将百分比显示为整数。这会将完成的百分比打印为整数,并在新行上显示每个新更新。

让我们重复最后一个命令,然后将-p选项(已完成百分比)传递给pv选项。

tar -czf - ./help-files/ | pv - p > help-files.tgz

这将关闭所有其他显示选项。 pv仅提供完成百分比。

由于pv不能从tar中获得完成百分比,因此进度条将被移动的指示器代替。没有百分比数字。

与wc一起使用pv

我们可以使用pv将一个或者多个文本文件传送到wc中。然后,wc将计算回车,字符和单词,而pv将给我们进度报告。

在这里,我们将help-files目录中的所有.page文件传送到wc中。


wc完成时,我们可以看到help-files文件夹中所有.page文件中的回车计数(行),字符和单词。

安装进度命令

" progress"命令提供与" pv"相同的有用信息,但是它与一组特定的Linux命令一起使用。

要在Ubuntu中安装progress,请使用以下命令:

sudo apt-get install progress

要在Fedora中安装progress,请使用以下命令:

sudo dnf install progress

要在Manjaro中安装progress,请使用以下命令:

sudo pacman -Syu progress

命令进度可用于

在终端窗口中键入progress并按Enter,将为我们提供progress可以使用的命令列表。

progress

对管道使用进度

我们可以使用两种技术来监视带有progress的命令。首先是使用管道。

" tar"命令位于" progress"可以监视的受支持命令列表中,因此让我们使用" tar"。

我们将使用的选项是标准的-c(创建档案),-z(使用gzip压缩)和-f(文件名)选项。我们将在help-files文件夹中创建所有内容的压缩存档,该存档将命名为help.tgz。

我们将其传递到progress中,并使用-m(monitor)选项,以便progress保持对过程的报告直到完成。

tar -czf help.tgz ./help-files/ | progress -m

终端窗口将在创建档案时显示tar命令的进度。

在处理每个文件时,将列出该文件,并包含以下信息:

  • 进程ID。

  • 进程名称。

  • 完成百分比。

  • 处理的数据和文件的总大小。

  • 数据速率(吞吐量)。

  • 估计剩余时间(ETA)。

我们可能会惊讶地看到第二个数据集出现。第一个数据集用于" tar"。第二个是gzip。 tar调用gzip执行压缩。因为gzip在支持的命令列表中,所以progress报告它。

在连续监视模式下使用进度

我们可以使用-M(监视)选项在实时连续监视模式下使用progress

在终端窗口中键入以下命令:

progress -M

progress将报告没有运行的命令来监视它。但是我们不会返回命令行。 progress一直等到它可以监视的命令开始。然后它将自动开始对其进行报告。

在另一个终端窗口中,键入进度可以监视的命令列表中的命令。

我们将使用cat。速度过快的命令不会向progress注册,因此我们将列出一个很长的文本文件的内容。

cat words.page

其中带有progress的终端窗口中,我们将看到cat命令的统计信息,该命令将执行并朝着完成方向发展。

cat完成列出文件时,progress将返回其等待状态。

每次它可以报告的命令之一执行一个相当大的任务,progress都会自动监视它并报告它。