\r\n\r\n
linuxpv と progress コマンドを使用すると、コマンドの進行状況を確認することができます。これらのユーティリティは、通常はプログレスバーがないようなコマンドのプログレスバーを表示します。完成までの時間の目安も表示されます。
ビデオスクリーンのない航空機で長距離を飛行する場合、自分がどれだけ移動したかを知るのは簡単ではありません。離陸のタイミングがわかるフライトの所要時間はわかっているはずだ。しかし、予定通りなのか、時間通りなのか、それとも予定よりかなり遅れているのか、どうすれば分かるのでしょうか?機内映画を見たくない場合は、通常、ビデオ画面を切り替えて、航空機の位置を示す地図を表示させることができます。また、到着予定時刻(ETA)など、統計的な情報も得られるので、とても便利です。
ターミナルウィンドウからコマンドを起動するのは、時にビデオスクリーンのない長いフライトのように感じられることがあります。すべてが順調に進んでいるのか、処理が保留になっているのか、完了まであとどれくらいなのか、まったくわからないのです。カーソルが点滅しているのは、あまり情報量が多くない。
pvとprogressコマンドは、いくつかの統計情報と視覚的なフィードバックを提供します。完成まであと一歩のところまで来ていることがわかります。つまり、実行中の処理の到着予定時刻が表示されるのです。カーソルとにらめっこするのに比べれば、楽なものです。
Pvをインストールする必要があります。
Ubuntuにpvをインストールするには、次のコマンドを使用します。
sudo apt-get install pvFedoraにpvをインストールするには、次のコマンドを使用します。
sudo dnf install pvManjaroにpvをインストールするには、次のコマンドを使用します。
sudo pacman -Syu pvpvはpipeline viewerの略です。パイプラインは、どこかでコマンドに関与しているはずです。ここでは、ISOイメージをZIPパイプで転送し、ISOの圧縮ZIPファイルを生成する例を紹介します。
スクリーンショットが撮れる速度までコマンドを遅くするために、この記事で使用している例のファイルの一部は、SILVERXHDという古くて遅い外付けUSBに保存されています。
pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso | zip > gparted.zippvから提供される情報は、ディスプレイの下部に表示されます。
左から、表示されている情報です。
pv出力でファイルをコピーする場合は、以下のコマンドを使用します。
pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso > gparted.isoファイルがコピーされると、進捗状況が表示されるんだ。
pvで複数のファイルやフォルダをコピーするには、いくつかのトリックを使う必要があります。
tar -c help-files/ | pv | tar -x -C Documents/コマンドの tar-c help files/ の部分は、tar に help files フォルダにファイルアーカイブを作成(-c)するように指示します。これをpvパイプラインで転送することで、進捗状況を表示させることができるのです。これをtarにパイプバックして、コマンドの最後の部分を実行します。アーカイブファイルを解凍(-x)し、ディレクトリをドキュメントに変更(-C)してから解凍します。
その結果、ヘルプファイル内のファイルやフォルダーが「ドキュメント」フォルダーにコピーされ、進捗状況が表示されます。
今回は出力が少し変わっています。
到着予定時刻はありません。プログレスバーに移動のインジケーターが表示されるようになりました。pvは、パイプ処理されているプロセスから抽出できる情報を表示することに限定される。
pvとtarでファイルをコピーしても、アーカイブファイルにはなりません。tarは「仮想」アーカイブを作成し、ファイルを抽出するために直接tarに送り込みます。ファイルをコピーすることが目的なら、それで終わりです。しかし、アーカイブを作りたい場合はどうすればいいのでしょうか。
tar で使用するオプションは -c (アーカイブの作成)、-z (gzip による圧縮)、-f (アーカイブのファイル名) です。
ファイル名に - を使っているのは、tar が stdout を使って出力を端末ウィンドウに書き込むようにするためです。この出力は、pvパイプを通して転送されるため、私たちには見えません。
アーカイブファイルの実際の名前は、pvの出力をインポートするファイルの名前になります。 この場合、"help"-file.tgz "になります。
tar -czf - ./help-files/ | pv > help-files.tgz以前と同じように進行状況を示すインジケータが表示され、アーカイブファイルが作成されます。
関連:Linuxでtarコマンドを使ってファイルを圧縮・解凍する方法
pvには、レポートの詳細を変更するためのオプションがいくつか用意されています。
これらのオプションのいずれかが使用された場合、他のオプションはすべてオフになります。したがって、3つの表示オプションを使用したい場合は、3つとも指定する必要があります。
オプションなしでpvを使用すると、-pterbオプションを使用した場合と同じになります。
先ほどのコマンドを繰り返し、pvに-p(percentage complete)オプションを渡してみましょう。
tar -czf - ./help-files/ | pv - p > help-files.tgzこれにより、他の表示オプションはすべてオフになります。pvは、完成した要素のパーセンテージのみを表示します。
pvがtarから完了率を取得できないため、プログレスバーが移動インジケータに置き換わっています。パーセントの数値はありません。
pv を使ってテキストファイル(または複数のファイル)を wc にインポートすることができます。wc はキャリッジリターン、文字、単語をカウントし、pv は進捗状況を報告します。
ここでは、help files ディレクトリにあるすべての ".page" ファイルを wc にインポートしています。
wcが終了すると、ヘルプファイルフォルダ内のすべての「.page」ファイルのキャリッジリターン(行数)、文字数、単語数を確認することができます。
progress コマンドは pv と同じ有用な情報を提供しますが、特定の Linux コマンドのセットで使用することができます。
Ubuntuでprogressをインストールするには、以下のコマンドを使用します。
sudo apt-get install progressFedoraでprogressをインストールするには、次のコマンドを使用します。
sudo dnf install progressManjaroでprogressをインストールするには、以下のコマンドを使用します。
sudo pacman -Syu progressターミナルウィンドウにprogressと入力し、Enterキーを押すと、progressが使用するコマンドの一覧が表示されます。
progressコマンドの進行状況を監視するために、2つのテクニックがあります。1つは、パイプラインを使用することです。
tarコマンドは、progressが監視できるサポートコマンドのリストにあるので、tarを使ってみましょう。
使用するオプションは、標準の -c(アーカイブを作成)、-z(gzipで圧縮)、-f(ファイル名)オプションです。help files」フォルダー内のすべてを圧縮したアーカイブを作成し、「help.tgz」という名前をつけます。
それをプロセスにインポートし、-m(モニター)オプションを使って、プロセスが完了するまでレポートを出し続けています。
tar -czf help.tgz ./help-files/ | progress -mターミナルウィンドウには、アーカイブを作成するtarコマンドの進行状況が表示されます。
各文書が処理されると、リスト化され、以下の情報が記載されます。
2つ目のデータセットが表示され、驚かれるかもしれません。1つ目のデータセットはtarに使用される。2つ目はgzipである。tarはgzipを呼び出して圧縮を行う。gzip はサポートされているコマンドのリストに含まれているため、その進行状況が報告されます。
M(モニター)オプションを使用することで、プログレスをリアルタイムで連続監視するモードで使用することができます。
ターミナルウィンドウで、次のコマンドを入力します。
progress -Mは、監視するためのコマンドが実行されていないことを報告します。ただし、コマンドラインには戻りません。プロセスは、監視できるコマンドの開始を待ちます。その後、自動的にレポートが開始されます。
別の端末ウィンドウで、進捗状況を監視できるコマンドの一覧からコマンドを入力します。
ここでは、cat.コマンドを使用します。あまり早く終了するコマンドは、進捗状況を登録できないので、非常に長いテキストファイルの内容を一覧表示します。
cat words.page進捗状況を含むターミナルウィンドウに、catコマンドの実行状況と完了間際の統計が表示されます。
cat がファイルのリストアップを終了すると、ファイルの進行状況は待ちの状態に戻る。
報告可能なコマンドのうち、かなり大きなタスクが実行されるたびに、progressは自動的にそれを監視し、報告する。
素晴らしかったです。
長く続くコマンドの動作を推測しようとしたり、カーソルをpvや進捗で考えたりしないことです。