本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、指定したコマンドの実行時間と実行時のシステムリソース情報などを計測する「time」コマンドです。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、指定したコマンドの実行時間と実行時のシステムリソース情報などを計測する「time」コマンドです。
「time」は指定したコマンドの実行時間と、実行時のシステムリソース情報など計測して表示するコマンドです。
今回取り上げたtimeコマンドは外部コマンドです。bashやtcsh、zshにある同名のビルトインコマンドよりも機能が豊富です(連載第251回)。
time [オプション] コマンド名
※[ ]は省略可能な引数を示しています。
短いオプション | 長いオプション | 意味 |
---|---|---|
-f フォーマット | --format=フォーマット | 出力フォーマットを指定 |
-p | --portability | 他のtimeコマンドと互換性のあるフォーマットで出力する(「-f 'real %e\nuser %U\nsys %S'」相当) |
-o ファイル | --output=ファイル | 結果を画面(標準エラー出力:stderr)ではなく、ファイルに上書き出力する |
-a | --append | ファイルを上書きせず末尾に追加する(-oと併用する) |
-v | --verbose | 詳しい内容を出力する |
-- | timeコマンドのオプションの末尾を明示するために用いる | |
書式 | 意味 |
---|---|
%E | 経過した実時間(書式は、[hours:]minutes:seconds) |
%e | 経過した実時間(秒単位) |
%S | コマンドを実行するのに使用したシステムCPU時間(秒単位) |
%U | コマンドを実行するのに使用したユーザーCPU時間(秒単位) |
%P | コマンド実行時のCPU使用率(%)。計算式は、(%U + %S) / %e |
書式 | 意味 |
---|---|
%M | RSS(Resident Set Size:物理メモリの使用量)の最大値(KB単位) |
%t | RSSの平均値(KB単位) |
%K | メモリ使用量の合計(データ+スタック+テキスト)の平均値(KB単位) |
%D | 非共有データ領域の平均サイズ(KB単位) |
%p | 非共有スタック空間の平均サイズ(KB単位) |
%X | 共有テキスト空間の平均サイズ(KB単位) |
%Z | システム固有のページサイズ(バイト単位) |
%F | プロセスの動作中に発生したメジャーページフォルトの回数 |
%R | プロセスの動作中に発生したマイナーページフォールト(回復可能なページフォルト)の回数 |
%W | プロセスが主記憶からスワップアウトされた回数 |
%c | プロセスが強制的にコンテキストスイッチされた回数 |
%w | waitの回数(入出力操作の完了を待っている間などに、自発的にコンテキストスイッチされた回数) |
書式 | 意味 |
---|---|
%I | ファイルシステムからの入力の回数 |
%O | ファイルシステムへの出力の回数 |
%r | コマンドのプロセスが受信したソケットメッセージ数 |
%s | コマンドのプロセスが送信したソケットメッセージ数 |
%k | コマンドのプロセスに送られたシグナル数 |
%C | timeの対象となったコマンド名とコマンドライン引数 |
%x | コマンドの終了ステータス |
「time コマンド名」で指定したコマンドの実行にかかった時間を表示します(画面1)。ただし、コマンドラインで「time」と入力、実行すると、bashなどのビルトインコマンドとなっている同名のtimeを実行してしまいます。そこで「/usr/bin/time」あるいは「\time」のように入力しなければなりません。以下では「\time」を使用します(※1)。
計測したいコマンドにオプションや引数がある場合、引用符などを付ける必要はありません。例えば「ls」を実行する時間の計測であれば「\time ls」と指定し、「ls -l /」であれば「\time ls -l /」のように指定します。
※1 外部コマンドのtimeだけを使用したい場合は、enableコマンド(第224回)でビルトインコマンドのtimeを無効化できる。
time コマンド名
(ビルトインコマンドのtimeを使用して、指定したコマンドの実行にかかった時間を表示する)
\time コマンド名
(外部コマンドのtimeを使用して、指定したコマンドの実行にかかった時間を表示する)
今回のtimeコマンドは、ビルトインコマンドのtimeよりも大量の情報を出力します。デフォルトの書式は次の通りです。
%Uuser %Ssystem %Eelapsed %PCPU (%Xavgtext+%Davgdata %Mmaxresident)k %Iinputs+%Ooutputs (%Fmajor+%Rminor)pagefaults %Wswaps
ビルトインコマンドのtimeとほぼ同じ形式、内容で情報を出力したい場合は、「-p」オプションを使用します。「-p」オプションを指定した場合の書式は次の通りです。
表示 | 意味 |
---|---|
real %e | そのコマンドを実行するのにかかった時間 |
user %U | そのコマンドを実行するのに使用したユーザーCPU時間 |
sys %S | そのコマンドを実行するのに使用したシステムCPU時間 |
画面2では、(1)xzコマンド(ファイルを圧縮するコマンド、第249回)、(2)findコマンド(ファイルを探すコマンド、第31回)、(3)sleepコマンド(指定した秒数だけ待機するコマンド、第66回)の実行時間を表示しています。実行内容は第251回と同じです。
timeコマンドは、計測した結果を標準エラー出力へ出力します。(2)では、「-o」オプションでtimeコマンドの出力を標準出力(/dev/stdout)に変えています(※2)。
※2 通常、「-o」オプションはtimeコマンドの出力をファイルに保存する際に使用する。ここではfindコマンドを実行した際のエラーメッセージを画面に表示しないようにするため、コマンドラインの末尾に「2>/dev/null」を指定している。こうするとtimeコマンドの出力まで表示されなくなるため、-oを用いて出力先を標準出力に変えた。
「-f」オプションで、timeコマンドの出力フォーマットを指定できます(画面3)。例えば、「経過時間 (system:システムCPU時間 user:ユーザーCPU時間)」のように出力する場合は、「-f '%e (system:%S user:%U %P)'」と指定します。タブを出力するには「\t」、改行は「\n」とします。
\time -f フォーマット コマンド名
(指定した書式を使ってコマンドの実行時間などを表示する)
\time -f '%e (system:%S user:%U %P)' xz mydata*(画面3)
(システムCPU時間とユーザーCPU時間を表示する)
\time -f '%C\n%e (system:%S user:%U %P)' unxz mydata*
(指定したコマンドを展開表示後、改行してシステムCPU時間とユーザーCPU時間、コマンド実行時のCPU使用率を表示する)(画面3)
さらに「-v」オプションを使用すると、コマンド実行の際の入出力情報なども含む、より詳しい内容を表示します(画面4)。
西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.