如何監控 Linux 命令的進度(使用 pv 和 progress)

已發表: 2022-01-29
筆記本電腦上的 Linux 終端提示符
Fatmawati Achmad Zaenuri/Shutterstock.com

不要盲目地使用Linux pvprogress命令來跟踪命令的進度。 這些實用程序將為您提供通常沒有的命令的進度條。 您還會看到預計完成時間。

如果您乘坐長途飛行的飛機,座椅靠背上沒有視頻屏幕,那麼要知道您的旅程有多遠並不容易。 你知道你什麼時候起飛的。 您知道預計飛行需要多長時間。 但是你怎麼知道你是在正軌上,準時,還是落後於計劃? 如果您不想觀看飛行中的電影,通常可以切換視頻屏幕以顯示帶有飛機位置的地圖。 您還可以獲得一些統計數據,例如預計到達時間 (ETA),這非常棒。

從終端窗口啟動命令有時感覺就像沒有視頻屏幕的長途飛行。 如果一切正常,或者進程是否掛起,也沒有任何跡象表明它離完成有多近。 閃爍的光標信息量不大。

pvprogress命令為您提供一些統計信息和一些視覺反饋。 您可以看到該過程有多接近完成。 這意味著您可以獲得正在運行的進程的 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 

複製文件時,我們會收到一份進度報告。

在 te 終端窗口中使用 pv 複製文件

使用 pv 複製多個文件

要使用pv複製多個文件和文件夾,我們需要使用一個小技巧。 我們使用tar為我們移動文件。

 tar -c 幫助文件/ | 光伏 | tar -x -C 文件/ 

廣告

命令的tar -c help-files/部分指示tar創建 ( -c ) 幫助文件文件夾中的文件的存檔。 這是通過pv管道傳輸的,以便我們顯示進度。 然後將其通過管道傳輸回tar命令的最後一部分。 解壓縮檔案 ( -x ) 並在解壓縮之前將目錄更改 ( -C ) 為 Documents。

因此,幫助文件中的文件和文件夾被複製到 Documents 文件夾中,並顯示進度。

這次的輸出略有不同。

我們沒有得到 ETA。 進度條現在顯示移動指示器。 它表明該進程處於活動狀態,但它不像傳統的進度條那樣從左到右增長。 pv僅限於顯示它可以從管道中提取的信息。

使用 pv 和 tar 創建存檔

使用pvtar複製文件不會給我們留下存檔文件。 一種“虛擬”存檔由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 安裝進度

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 。 第二個是gziptar調用gzip來執行壓縮。 因為gzip在受支持的命令列表中,所以會報告它的progress

在持續監控模式下使用進度

您可以使用 -M(監視器)選項在實時連續監視模式下使用progress

在終端窗口中鍵入以下命令:

 進度-M 

progress將報告沒有運行的命令供它監視。 但是您不會返回到命令行。 progress一直等到它可以監視的命令開始。 然後它將自動開始報告它。

在另一個終端窗口中,鍵入進度可以監控的命令列表中的命令。

我們將使用cat 。 過快結束的命令不會註冊到progress中,所以我們將列出一個很長的文本文件的內容。

 貓的話.page 

廣告

在帶有progress的終端窗口中,您將看到cat命令在執行和完成時的統計信息。

cat完成列出文件progress時,將返回其等待狀態。

每次它可以報告的命令之一執行一項相當大的任務時, progress將自動監控它並報告它。

這很整潔。

100% 完成

無需猜測長時間運行的命令是如何執行的,並暫停使用pvprogress考慮光標。

相關:適合開發人員和愛好者的最佳 Linux 筆記本電腦