如何监视Linux命令的进度(带有pv和progress)
不要盲目地使用Linuxpv
和progress
命令来跟踪命令的进度。这些实用程序将为我们提供通常没有任何命令的进度条。我们还会看到估计的完成时间。
如果我们乘坐的飞机是长途飞行,而座椅靠背上没有视频屏幕,那么很难知道行程。你知道什么时候起飞。我们知道预计飞行需要多长时间。但是,我们如何知道自己是否按时,按时或者落后于进度?如果我们不想看机上电影,通常可以切换视频屏幕以显示带有飞机位置的地图。我们还会得到一些统计数据,例如预期到达时间(ETA),这非常好。
从终端窗口启动命令有时会感觉像是没有视频屏幕的长途飞行。我们没有任何迹象表明一切是否正常或者该过程是否已挂起,也没有完成的程度。闪烁的光标不是很有用。
pv
和progress
命令为我们提供一些统计信息和一些视觉反馈。我们可以看到该过程完成的程度。这意味着我们将获得正在运行的进程的预计到达时间。与盯着光标相比,这很容易。
安装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创建档案
用pv
和tar
复制文件不会给我们留下存档文件。一种由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
都会自动监视它并报告它。