もた日記

くだらないことを真面目にやる

Linuxメモ : パイプ処理の進捗を表示するpv(Pipe Viewer)の使い方

pv(Pipe Viewer)


wonderwall.hatenablog.com

上記記事でpv(Pipe Viewer)というパイプ処理の進捗を確認できるコマンドを知ったので使い方を調べてみる。

f:id:wonder-wall:20170802234054p:plain

www.ivarch.com

インストール


CentOSの場合(今回はCentOSで試してみる)。

$ sudo yum install pv

Ubuntuの場合。

$ sudo apt-get install pv

Macの場合。

$ brew install pv

ヘルプメッセージ。

$ pv --help
Usage: pv [OPTION] [FILE]...
Concatenate FILE(s), or standard input, to standard output,
with monitoring.

  -p, --progress           show progress bar
  -t, --timer              show elapsed time
  -e, --eta                show estimated time of arrival (completion)
  -r, --rate               show data transfer rate counter
  -a, --average-rate       show data transfer average rate counter
  -b, --bytes              show number of bytes transferred
  -F, --format FORMAT      set output format to FORMAT
  -n, --numeric            output percentages, not visual information
  -q, --quiet              do not output any transfer information at all

  -W, --wait               display nothing until first byte transferred
  -s, --size SIZE          set estimated data size to SIZE bytes
  -l, --line-mode          count lines instead of bytes
  -i, --interval SEC       update every SEC seconds
  -w, --width WIDTH        assume terminal is WIDTH characters wide
  -H, --height HEIGHT      assume terminal is HEIGHT rows high
  -N, --name NAME          prefix visual information with NAME
  -f, --force              output even if standard error is not a terminal
  -c, --cursor             use cursor positioning escape sequences

  -L, --rate-limit RATE    limit transfer to RATE bytes per second
  -B, --buffer-size BYTES  use a buffer size of BYTES
  -E, --skip-errors        skip read errors in input
  -S, --stop-at-size       stop after --size bytes have been transferred
  -R, --remote PID         update settings of process PID

  -P, --pidfile FILE       save process ID in FILE

  -h, --help               show this help and exit
  -V, --version            show version information and exit

Please report any bugs to Andrew Wood <andrew.wood@ivarch.com>.


使い方



基本

検証用に1GB用のダミーファイルを作成する。

$ fallocate -l 1g access.log

普通に圧縮すると進捗は表示されない。

$ gzip -c access.log > access.log.gz

ここでpvを使うと図のように進捗が表示される。

$ pv access.log | gzip > access.log.gz

f:id:wonder-wall:20170802232008p:plain

デフォルトでは転送済データ量、経過時間、転送レート、プログレスバー、残り時間が表示されるが、何を表示するかは下記オプションで指定できる。

  -p, --progress           show progress bar
  -t, --timer              show elapsed time
  -e, --eta                show estimated time of arrival (completion)
  -r, --rate               show data transfer rate counter
  -a, --average-rate       show data transfer average rate counter
  -b, --bytes              show number of bytes transferred

pvcatのように動作するので、以下のようにすると進捗を表示しながらコピーできる。

$ pv access.log > access.log.bak


応用

pvを複数組み合わせることもできる。以下のようにするとファイルからの読み込み、圧縮ファイルへの書き込みのデータ転送量などをそれぞれ表示できる。
-Nは左端に表示する名前を指定するオプションで、-cはそれぞれの進捗を表示するために必要なオプションらしい。

$ pv -cN  source access.log | gzip | pv -cN gzip > access.log.gz

f:id:wonder-wall:20170802234054p:plain

-Lオプションでデータ転送量を制限することもできるようだ(下記例だと1秒に10MB)。

$ pv -L 10M  access.log > access.log.bak

その他、カレントディレクトリ以下を進捗を表示しながら圧縮するコマンド(-sオプションで転送するデータ量を示している)や、

$ tar -cf - . | pv -s $(du -sb . | awk '{print $1}') | gzip > out.tgz

/dev/zeroからの読み込みスピードを計測する下記コマンドなどが例として挙げられていた。

$ pv /dev/zero > /dev/null