要在Fedora上安装PV,请使用以下命令:
sudo dnf install pv
要在Manjaro上安装PV,请使用以下命令:
sudo pacman -Syu pv
使用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 -c help-files/ | pv | tar -x -C Documents/
命令的tar-c help-files/部分指示tar在help-files文件夹中创建(-c)文件的存档。然后,它被输送回tar文件,用于命令的最后一部分。在提取之前,存档被解压(-x),目录被更改为Documents(-C)。
因此,帮助文件中的文件和文件夹被复制到Documents文件夹,并显示进度。
这次的输出略有不同。
我们没有收到预计到达时间。进度条现在显示一个移动指示器。它显示进程处于活动状态,但不会像传统进度条那样从左向右增长。PV仅限于显示它可以从管道传输的进程中提取的信息。
使用PV和TAR创建归档文件
使用pv和tar复制文件不会给我们留下存档文件。TAR创建了一种“虚拟”存档,该存档直接反馈到TAR中以解压缩文件。如果我们的目标是复制文件,那就实现了。但是,如果我们想要创建存档文件,该怎么办呢?
我们仍然可以使用tar创建归档文件,并从PV获得进度报告。与tar一起使用的选项是-c(创建存档)、-z(使用gzip压缩)和-f(存档的文件名)。
注意,我们使用-作为文件名,这会导致tar使用标准输出,并将其输出写入终端窗口。我们看不到那个输出,因为它是通过光伏输送的。
存档的实际名称将是我们通过管道从pv输出到的文件名。在本例中,它是“help-files.tgz”。
tar -czf - ./help-files/ | pv > help-files.tgz
我们会得到与以前相同的进度指示器,并且会为我们创建存档文件。
相关:如何在Linux上使用tar命令压缩和解压缩文件
PV显示选项
有许多选项可以与pv一起使用来更改其报告的详细信息。
如果使用这些选项中的任何一个,则所有其他选项都将关闭。因此,如果希望使用其中三个显示选项,则需要指定这三个选项。
使用不带任何选项的pv与使用-pterb选项相同。
-p:显示完成百分比。这是进度条和完成百分比数字。 -t:显示运行时间。 -e:显示预计到达时间。 -r:显示数据传输速率。 -b:显示字节计数(到目前为止传输的数据)。 -n:将百分比显示为整数。这会将完成百分比打印为整数,并且每次新更新都会显示在新的一行上。
让我们重复最后一个命令,并将-p(完成百分比)选项传递给pv。
tar -czf - ./help-files/ | pv - p > help-files.tgz
这将关闭所有其他显示选项。PV仅提供完成百分比元素。
因为pv不能从tar获得完成百分比,所以进度条被替换为移动指示器。没有百分比数字。
将PV与WC配合使用
我们可以使用pv将一个(或多个)文本文件通过管道传输到wc。然后,WC将计算回车符、字符和单词,并且PV将给我们一个进度报告。
在这里,我们通过管道将Help-files目录中的所有“.page”文件传输到wc。
当WC完成时,我们可以从Help-files文件夹中的所有“.page”文件中看到回车(行)、字符和单词的计数。
安装进度命令
Progress命令提供与pv相同类型的有用信息,但它使用一组特定的Linux命令。
要在Ubuntu中安装进度,请使用以下命令:
sudo apt-get install progress
要在Fedora中安装进度,请使用以下命令:
sudo dnf install progress
要在Manjaro中安装进度,请使用以下命令:
sudo pacman -Syu progress
命令进度使用
在终端窗口中键入Progress并按Enter键将给您显示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在支持的命令列表中,所以会报告它的进度。
在连续监控模式下使用进度
您可以通过使用-M(监视器)选项在实时连续监视模式下使用进度。
在终端窗口中键入以下命令:
progress -M
Progress将报告没有命令正在运行以供其监视。但是您不会返回到命令行。Progress会等待,直到它可以监视的命令启动。然后,它将自动开始对其进行报告。
在另一个终端窗口中,键入进度可以监视的命令列表中的命令。
我们将使用CAT。过快结束的命令不会在进度中注册,因此我们将列出一个非常长的文本文件的内容。
cat words.page
在带有进度的终端窗口中,您将看到cat命令执行并接近完成时的统计信息。
当cat完成列出文件时,进度返回到其等待状态。
每当它可以报告的某个命令执行相当大的任务时,Progress都会自动监视并报告该任务。
那是相当整洁的。
100%完成
不要只是猜测一个长期运行的命令是如何运行的,而是从思考光标与PV和进度之间的关系中抽出一点时间来休息一下。