如何監控 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 筆記本電腦
