如何使用PV和Progress实用程序监视Linux命令的进度

考虑一个场景,在这种情况下,您刚刚通过命令行将您的笔式驱动器中的大型文件复制到Linux系统。 鉴于有问题的文件很重,你知道这个过程将需要时间,所以你开始做一些其他的工作。

过了一会儿,你回来,只看到命令仍在运行。 你决定给正在进行的复制操作更多的时间。 过了一会儿,再看一遍,你看到没有任何改变,这意味着复制过程既没有结束,也没有抛出任何错误。

你有没有遇到这种情况? 如果是,你做了什么? 坦白说,在这种情况下,您无法做到什么,特别是如果您正在使用无头Linux系统,大多数情况下,我们等待,或者只是使用Ctrl + C取消正在进行的操作,然后再次启动。

如果我们可以在像这样的情况下看到进度条(或类似的东西)就好了,就像我们尝试通过GUI复制文件一样? 当然,命令行操作的进度条将非常有用。 如果您一直在寻找这样的解决方案,请不要再在本文中讨论,我们将讨论两个命令行实用程序PV和Progress,这将使命令行上的使用变得更简单。

请注意,本教程中提到的所有命令和说明都已在Ubuntu 14.04上进行了测试。

Linux PV命令

根据官方文档,pv命令通过管道监视数据流。 该命令显示有关正在进行的操作的以下信息:已完成时间,完成百分比(含
进度栏),当前吞吐量,传输的总数据和ETA。

“要使用它,请在两个进程之间的管道中插入相应的选项,”手册页解释。 “其标准输入将通过其标准输出,进度将显示在标准错误上。

现在,通过一个例子来了解pv命令的用法。 但在此之前,请确保该实用程序存在于您的系统上。 如果没有,您可以使用以下命令轻松下载并安装在基于Debian的系统(如Ubuntu)上:

sudo apt-get install pv

现在来看这个例子。 以下屏幕截图显示当我将笔记本电脑中的目录中保存的图像复制到系统的桌面时,pv命令正在运行:

所以你可以看到,pv命令显示一个进度条以及其他有用的信息。 这是该命令的默认行为。 但是,如果要限制输出,可以使用显示开关来实现。 例如,以下命令将仅显示进度条,而不显示任何其他内容。

pv -p /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz

那是因为我们使用了-p显示开关,它告诉pv只打开进度条。 有关显示开关的完整列表,请转到命令的手册页

然后有一些输出修饰符。 例如,使用-W--wait选项与该命令将告诉它等待直到第一个字节被传输,然后才显示任何进度信息或计算任何ETA。 当您正在管理的程序或从其开始的程序需要额外的信息时,这是特别有用的。

最后,pv命令还提供一些数据传输修饰符。 例如,如果需要,您可以将传输限制为每秒特定的字节数。 如果看看本教程前面的截图,数据传输速率超过18MBps。 现在假设你想限制它说5MBps,所以你将运行以下命令:

pv -L 5m /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz

-L选项后面是值“5m”,这里是诀窍。 看到上面的命令行动在下面的截图中:

“可以添加”k“,”m“,”g“或”t“的Postfix,以表示千字节(* 1024),兆字节等,”手册页解释。 有关输出和数据传输修饰符的详细信息也可以在命令的手册页中找到。

Linux进度命令

Progress (以前称为cv)是一个命令行实用程序,它提供了涉及coreutils基本命令(如cp,mv,dd,tar,gzip / gunzip,cat等)的正在进行的操作 官方文件说: 它还可以显示 估计的时间 吞吐量 ,并提供”顶级“模式(监控)。

在安装进度之前,您必须首先确保库“ncurses”在您的系统上,因为命令取决于此库。 如果没有,Debian / Ubuntu用户可以使用以下命令下载并安装ncurses包:

sudo apt-get install libncurses5-dev

然后使用以下命令从其GitHub repo下载Progress命令包:

git clone https://github.com/Xfennec/progress.git

然后输入'进度'目录并运行以下命令:

make
sudo make install

而已。 Progress命令现在将安装在您的Linux Box上。 以下屏幕截图(取自项目的GitHub页面 )显示了正在执行的命令:

您可以看到,Progress命令提供有关所有正在进行的涉及coreutil命令的操作的信息。 像任何其他Linux命令行工具一样,Progress还提供了几个命令行选项。 以下是可能对您有用的选项列表:

  • -m(--monitor) :监视进程仍在运行时的循环
  • -M( - 监视器 - 连续) :像监视器,但永远不会停止(类似于监视进度)
  • -c(--command cmd) :仅监视此命令名称(例如:firefox)。 该选项可以在命令行中多次使用。
  • -p(--pid id) :只监视这个数字进程ID(例如:`pidof firefox`)。 该选项可以在命令行中多次使用。
  • -i(--ignore-file file) :不报告'file'的进程。 如果文件不存在,则必须给出完整且干净的绝对路径。 该选项可以在命令行中多次使用。

结论

虽然进度工具仅限于coreutils命令,但PV通常可用于监视任何命令行活动。 此外,PV也易于下载和安装。 但是,在您继续说明PV比Progress更好的结论之前,请记住,与PV不同,使用Progress,您不必修改要监视的命令。 那么二者中哪一个更好地取决于你的要求。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏