もた日記

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

Linuxメモ : progressでLinuxコマンド(cp, mv, dd, tar, cat…)の進捗を表示

progress


github.com

progressというコマンドを使用するとcp, mv, ddなどのLinuxコマンドの進捗を表示することができるようなので試してみる。

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

インストール


READMEにはソースコードからビルドする方法が書かれていたのでビルドしてみる。ビルドにはlibncurses5-devncurses-develが必要とのこと。
実際にビルドしてみたところコードは少ないのですぐに終わった。

$ git clone https://github.com/Xfennec/progress
$ cd progress
$ make
cc -g -Wall -D_FILE_OFFSET_BITS=64 -c progress.c
cc -g -Wall -D_FILE_OFFSET_BITS=64 -c sizes.c
cc -g -Wall -D_FILE_OFFSET_BITS=64 -c hlist.c
cc -Wall progress.o sizes.o hlist.o -o progress -lm -lncurses
$ sudo make install
Installing program to /usr/local/bin ...
Installing manpage to /usr/local/share/man/man1 ...
$ progress -v
progress version 0.13

ヘルプメッセージ。デフォルトで監視対象とするコマンドが書かれている。

$ progress --help
progress - Coreutils Viewer
---------------------
Shows progress on file manipulations (cp, mv, dd, ...)

Monitored commands (default):
cp mv dd tar cat rsync grep fgrep egrep cut sort md5sum sha1sum sha224sum sha256sum sha384sum sha512sum adb gzip gunzip bzip2 bunzip2 xz unxz lzma unlzma 7z 7za zcat bzcat lzcat split gpg

Usage: progress [-qdwmM] [-W secs] [-c command] [-p pid]
  -q --quiet                   hides all messages
  -d --debug                   shows all warning/error messages
  -w --wait                    estimate I/O throughput and ETA (slower display)
  -W --wait-delay secs         wait 'secs' seconds for I/O estimation (implies -w, default=1.0)
  -m --monitor                 loop while monitored processes are still running
  -M --monitor-continuously    like monitor but never stop (similar to watch progress)
  -a --additional-command cmd  add additional command to default command list
  -c --command cmd             monitor only this command name (ex: firefox)
  -p --pid id                  monitor only this process ID (ex: `pidof firefox`)
  -i --ignore-file file        do not report process if using file
  -o --open-mode {r|w}         report only files opened for read or write
  -v --version                 show program version and exit
  -h --help                    display this help and exit


Multiple options allowed for: -a -c -p -i. Use PROGRESS_ARGS for permanent arguments.


使い方


基本的にはcpなどのコマンドを実行しているときにprogressコマンドを実行すれば進捗が表示される(定期的に監視するわけではなくその時点の進捗を表示)。
cp時にprogressを実行している必要はなく、後からprogressを実行して進捗を表示できるのがよい。

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

定期的に監視したい場合はwatchコマンドと組み合わせる。-qオプションを付けないと余計なメッセージが表示される。

$  watch progress -q

ワンライナーで実行する場合は、バックグラウンドで実行してプロセスIDを-pオプションでprgressに渡せばよい(-mは実行中は監視し続けるというオプション)。

$ cp test.log test.log.bak & progress -mp $!


その他の使用例として下記コマンドが挙げられていた。
Firefoxでのダウンロードの進捗を表示。-cオプションで監視対象にするコマンドを指定できる(ヘルプに書かれているデフォルトで監視対象とするコマンド以外でもいい)。-wオプションはスループットなどを表示。

$ watch progress -wc firefox

Webサーバの状況監視。

$ progress -c httpd


ちなみにパイプ処理の進捗を表示するpv(Pipe Viewer)というコマンドもある。

wonderwall.hatenablog.com