Windows Ubuntu 程序员 云计算 mysql wordpress 微软 Firefox Android java php shell 编程 centos linux apache google Python nginx 开源

如何使用 pv 命令監控 linux 命令的執行進度

如何使用 pv 命令监控 linux 命令的执行进度

如果你是一個 Linux 系統管理員,那麽毫無疑問你必須花費大量的工作時間在命令行上:安裝和卸載軟件,監視系統狀態,復制、移動、刪除文件,查錯,等等。很多時候都是你輸入一 個命令,然後等待很長時間直到執行完成。也有的時候你執行的命令掛起了,而你只能猜測命令執行的實際情況。

通常 linux 命令不提供和進度相關的信息,而這些信息特別重要,尤其當你只有有限的時間時。然而這並不意味著你是無助的——現在有一個命令,pv,它會顯示當前在命令行執行的命令的進度信息。在本文我們會討論它並用幾個簡單的例子說明其特性。

PV 命令

PV 由Andrew Wood 開發,是 Pipe Viewer 的簡稱,意思是通過管道顯示數據處理進度的信息。這些信息包括已經耗費的時間,完成的百分比(通過進度條顯示),當前的速度,全部傳輸的數據,以及估計剩余的時間。

"要使用 PV,需要配合合適的選項,把它放置在兩個進程之間的管道。命令的標準輸入將會通過標準輸出傳進來的,而進度會被輸出到標準錯誤輸出。”

上述解釋來自該命令的幫助頁。

下載和安裝

Debian 系的操作系統,如 Ubuntu,可以簡單的使用下面的命令安裝 PV:

sudo apt-get install pv 
如果你使用了其他發行版本,你可以使用各自的包管理軟件在你的系統上安裝 PV。一旦 PV 安裝好了你就可以在各種場合使用它(詳見下文)。需要註意的是下面所有例子都使用的是 pv 1.2.0。

特性和用法

我們(在 linux 上使用命令行的用戶)的大多數使用場景都會用到的命令是從一個 USB 驅動器拷貝電影文件到你的電腦。如果你使用 cp 來完成上面的任務,你會什麽情況都不清楚,直到整個復制過程結束或者出錯。

然而pv 命令在這種情景下很有幫助。比如:

pv /media/himanshu/1AC2-A8E3/fNf.mkv > ./Desktop/fnf.mkv 
輸出如下:

如何使用 pv 命令监控 linux 命令的执行进度

所以,如你所見,這個命令顯示了很多和操作有關的有用信息,包括已經傳輸了的數據量,花費的時間,傳輸速率,進度條,進度的百分比,以及剩余的時間。

pv 命令提供了多種顯示選項開關。比如,你可以使用 -p 來顯示百分比, -t 來顯示時間, -r 表示傳輸速率, -e 代表eta(LCTT 譯註:估計剩余的時間)。好事是你不必記住某一個選項,因為默認這幾個選項都是啟用的。但是,如果你只要其中某一個信息,那麽可以通過控制這幾個選項來完成任務。

這裏還有一個 -n 選項來允許 pv 命令顯示整數百分比,在標準錯誤輸出上每行顯示一個數字,用來替代通常的可視進度條。下面是一個例子:

pv -n /media/himanshu/1AC2-A8E3/fNf.mkv > ./Desktop/fnf.mkv 

如何使用 pv 命令监控 linux 命令的执行进度

這個特殊的選項非常合適某些情境下的需求,如你想把用管道把輸出傳給 dialog 命令。

接下來還有一個命令行選項, -L 可以讓你修改 pv 命令的傳輸速率。舉個例子,使用 -L 選項來限制傳輸速率為2MB/s。

pv -L 2m /media/himanshu/1AC2-A8E3/fNf.mkv > ./Desktop/fnf.mkv 

如何使用 pv 命令监控 linux 命令的执行进度

如上圖所見,數據傳輸速度按照我們的要求被限制了。

另一個pv 可以幫上忙的情景是壓縮文件。這裏有一個例子可以向你解釋如何與壓縮軟件gzip 一起工作。

pv /media/himanshu/1AC2-A8E3/fnf.mkv | gzip > ./Desktop/fnf.log.gz 

如何使用 pv 命令监控 linux 命令的执行进度

結論

如上所述,pv 是一個非常有用的小工具,它可以在命令沒有按照預期執行的情況下幫你節省你寶貴的時間。而且這些顯示的信息還可以用在 Shell 腳本裏。我強烈的推薦你使用這個命令,它值得你一試。

延伸阅读

评论