如何监控 Linux 命令的进度(使用 pv 和 progress)

已发表: 2022-01-29
笔记本电脑上的 Linux 终端提示符
Fatmawati Achmad Zaenuri/Shutterstock.com

不要盲目地使用Linux pvprogress命令来跟踪命令的进度。 这些实用程序将为您提供通常没有的命令的进度条。 您还会看到预计完成时间。

如果您乘坐长途飞行的飞机,座椅靠背上没有视频屏幕,那么要知道您的旅程有多远并不容易。 你知道你什么时候起飞的。 您知道预计飞行需要多长时间。 但是你怎么知道你是在正轨上,准时,还是落后于计划? 如果您不想观看飞行中的电影,通常可以切换视频屏幕以显示带有飞机位置的地图。 您还可以获得一些统计数据,例如预计到达时间 (ETA),这非常棒。

从终端窗口启动命令有时感觉就像没有视频屏幕的长途飞行。 如果一切正常,或者进程是否挂起,也没有任何迹象表明它离完成有多近。 闪烁的光标信息量不大。

pvprogress命令为您提供一些统计信息和一些视觉反馈。 您可以看到该过程有多接近完成。 这意味着您可以获得正在运行的进程的 ETA。 与盯着光标相比,这更胜一筹。

安装光伏

您必须安装pv

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

 sudo apt-get install pv 

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

 须藤 dnf 安装 pv 

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

 sudo pacman -Syu pv 

使用光伏

pv代表管道查看器。 管道必须在某处参与命令。 这是一个示例,我们通过zip管道传输 ISO 映像以制作 ISO 的压缩 zip 文件。

广告

为了使命令速度减慢到可以截取屏幕截图的速度,本文使用的示例中的一些文件存储在一个旧的、速度较慢的外部 USB 上,称为 SILVERXHD。

 光伏/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 

复制文件时,我们会收到一份进度报告。

在 te 终端窗口中使用 pv 复制文件

使用 pv 复制多个文件

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

 tar -c 帮助文件/ | 光伏 | tar -x -C 文件/ 

广告

命令的tar -c help-files/部分指示tar创建 ( -c ) 帮助文件文件夹中的文件的存档。 这是通过pv管道传输的,以便我们显示进度。 然后将其通过管道传输回tar命令的最后一部分。 解压缩档案 ( -x ) 并在解压缩之前将目录更改 ( -C ) 为 Documents。

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

这次的输出略有不同。

我们没有得到 ETA。 进度条现在显示移动指示器。 它表明该进程处于活动状态,但它不像传统的进度条那样从左到右增长。 pv仅限于显示它可以从管道中提取的信息。

使用 pv 和 tar 创建存档

使用pvtar复制文件不会给我们留下存档文件。 一种“虚拟”存档由tar创建,它直接反馈到tar以提取文件。 如果我们的目标是复制文件,那就完成了。 但是如果我们想创建一个归档文件呢?

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

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

广告

存档的实际名称将是我们将pv的输出通过管道传输到的文件名。 在这种情况下,它是“help-files.tgz”。

 tar -czf - ./help-files/ | pv > 帮助文件.tgz 

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

相关:如何在 Linux 上使用 tar 命令压缩和提取文件

光伏显示选项

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

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

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

  • -p :显示完成百分比。 这是进度条和完成百分比数字。
  • -t :显示经过的时间
  • -e :显示ETA
  • -r :显示数据传输的速率
  • -b :显示字节数(到目前为止传输的数据)。
  • -n :将百分比显示为整数。 这会将完成的百分比打印为整数数字,每次新更新都在新行上。

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

 tar -czf - ./help-files/ | pv - p > 帮助文件.tgz 

广告

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

因为pv没有从tar获得百分比完成的数字,所以进度条被替换为移动指示器。 没有百分比数字。

使用 pv 和 wc

我们可以使用pv将一个(或多个)文本文件通过管道传输到wc中。 wc然后会计算回车、字符和单词, pv会给我们一个进度报告。

在这里,我们将帮助文件目录中的所有“.page”文件传送到wc中。

wc完成时,我们可以看到来自帮助文件文件夹中所有“.page”文件的回车(行)、字符和单词的计数。

安装进度命令

progress命令提供与pv相同的有用信息,但它适用于一组特定的 Linux 命令。

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

 sudo apt-get 安装进度

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

 sudo dnf 安装进度

sudo dnf 在终端寡妇中安装进度

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

 sudo pacman -Syu 进度

命令进度适用于

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

 进步

对管道使用进度

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

tar命令在progress可以监控的支持命令列表中,所以让我们使用tar

我们将使用的选项是标准的-c (创建存档)、- -z (使用 gzip 压缩)和-f (文件名)选项。 我们将为帮助文件文件夹中的所有内容创建一个压缩存档,存档将命名为“help.tgz”。

我们正在将其导入progress并使用-m (监视器)选项,因此progress会不断报告该过程,直到它完成。

 tar -czf help.tgz ./help-files/ | 进度-m 

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

广告

在处理每个文件时,都会列出它,其中包含以下信息:

  • 进程标识。
  • 进程名称。
  • 完成百分比。
  • 处理的数据和文件的总大小。
  • 数据速率(吞吐量)。
  • 预计剩余时间 (ETA)。

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

在持续监控模式下使用进度

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

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

 进度-M 

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

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

我们将使用cat 。 过快结束的命令不会注册到progress中,所以我们将列出一个很长的文本文件的内容。

 猫的话.page 

广告

在带有progress的终端窗口中,您将看到cat命令在执行和完成时的统计信息。

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

每次它可以报告的命令之一执行一项相当大的任务时, progress将自动监控它并报告它。

这很整洁。

100% 完成

无需猜测长时间运行的命令是如何执行的,并暂停使用pvprogress考虑光标。

相关:适合开发人员和爱好者的最佳 Linux 笔记本电脑