如何监控 Linux 命令的进度(使用 pv 和 progress)
已发表: 2022-01-29 不要盲目地使用Linux pv
和progress
命令来跟踪命令的进度。 这些实用程序将为您提供通常没有的命令的进度条。 您还会看到预计完成时间。
如果您乘坐长途飞行的飞机,座椅靠背上没有视频屏幕,那么要知道您的旅程有多远并不容易。 你知道你什么时候起飞的。 您知道预计飞行需要多长时间。 但是你怎么知道你是在正轨上,准时,还是落后于计划? 如果您不想观看飞行中的电影,通常可以切换视频屏幕以显示带有飞机位置的地图。 您还可以获得一些统计数据,例如预计到达时间 (ETA),这非常棒。
从终端窗口启动命令有时感觉就像没有视频屏幕的长途飞行。 如果一切正常,或者进程是否挂起,也没有任何迹象表明它离完成有多近。 闪烁的光标信息量不大。
pv
和progress
命令为您提供一些统计信息和一些视觉反馈。 您可以看到该过程有多接近完成。 这意味着您可以获得正在运行的进程的 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
复制文件时,我们会收到一份进度报告。
使用 pv 复制多个文件
要使用pv
复制多个文件和文件夹,我们需要使用一个小技巧。 我们使用tar
为我们移动文件。
tar -c 帮助文件/ | 光伏 | tar -x -C 文件/
命令的tar -c help-files/
部分指示tar
创建 ( -c
) 帮助文件文件夹中的文件的存档。 这是通过pv
管道传输的,以便我们显示进度。 然后将其通过管道传输回tar
命令的最后一部分。 解压缩档案 ( -x
) 并在解压缩之前将目录更改 ( -C
) 为 Documents。
因此,帮助文件中的文件和文件夹被复制到 Documents 文件夹中,并显示进度。
这次的输出略有不同。
我们没有得到 ETA。 进度条现在显示移动指示器。 它表明该进程处于活动状态,但它不像传统的进度条那样从左到右增长。 pv
仅限于显示它可以从管道中提取的信息。
使用 pv 和 tar 创建存档
使用pv
和tar
复制文件不会给我们留下存档文件。 一种“虚拟”存档由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 安装进度
要在 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
。 第二个是gzip
。 tar
调用gzip
来执行压缩。 因为gzip
在受支持的命令列表中,所以会报告它的progress
。
在持续监控模式下使用进度
您可以使用 -M(监视器)选项在实时连续监视模式下使用progress
。
在终端窗口中键入以下命令:
进度-M
progress
将报告没有运行的命令供它监视。 但是您不会返回到命令行。 progress
一直等到它可以监视的命令开始。 然后它将自动开始报告它。
在另一个终端窗口中,键入进度可以监控的命令列表中的命令。
我们将使用cat
。 过快结束的命令不会注册到progress
中,所以我们将列出一个很长的文本文件的内容。
猫的话.page
在带有progress
的终端窗口中,您将看到cat
命令在执行和完成时的统计信息。
当cat
完成列出文件progress
时,将返回其等待状态。
每次它可以报告的命令之一执行一项相当大的任务时, progress
将自动监控它并报告它。
这很整洁。
100% 完成
无需猜测长时间运行的命令是如何执行的,并暂停使用pv
和progress
考虑光标。
Linux 命令 | ||
文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look ·字符串·类型·重命名· zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 别名· screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超时·墙·是·杀死·睡眠· sudo · su ·时间· groupadd · usermod ·组· lshw ·关机·重新启动·停止·关机· passwd · lscpu · crontab ·日期· bg · fg | |
联网 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相关:适合开发人员和爱好者的最佳 Linux 笔记本电脑