如何監控 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 ·查看·字符串·類型·重命名· zip ·解壓縮· 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 筆記本電腦