wivern ロゴ

サイバーセキュリティ研究所

サイバーセキュリティを中心に、軍事、防犯、サーバーの管理と監視、その他、最新技術を研究しています。


Linux コマンド辞典「time」

time : コマンドの時間計測やリソース使用量を表示する

command: time

Linux 環境でいろんなことをやってると、コマンドの処理にかかった時間を計測したくなることがあります。
そんなときに便利な time コマンドを「man arch」から引用します。


名前
time - コマンドの時間計測やリソース使用量を表示する

書式
time [options] command [arguments...]

説明
time コマンドは、指定されたプログラム command を渡された引き数で実行する。
command が終了すると、time はこのプログラムの実行時間の統計情報についてのメッセージを標準エラー出力に出力する。
表示される統計情報は以下の三つから構成される:
(i) 起動から終了までに経過した実時間 (real time)、
(ii)ユーザ CPU 時間 ( times(2) が返す struct tms の tms_utime と tms_cutime の値の合計)、
(iii) システム CPU 時間( times(2) が返す struct tms の tms_stime と tms_cstime の値の合計)。

( bash(1) などの)いくつかのシェルには、ここで説明するコマンドよりも機能が少ない、組み込みの time コマンドが存在する。
組み込みではない実際のコマンドを使用するためには、( /usr/bin/time のような)コマンドのパス名を指定する必要があるかもしれない。

オプション
-p
POSIX ロケールの場合、伝統的なフォーマットである "real %f\nuser %f\nsys %f\n" が使用される(各数字は秒単位)。
%f の出力での小数点以下の桁数は規定されていないが、クロック・ティック( clock tick )の精度を表すのに十分な桁数となり、少なくとも一桁は存在する。

終了ステータス
command が起動された場合は、command の終了ステータスが終了ステータスとなる。
command が見つからなかった場合は終了ステータスは 127 で、 command が見つかったが起動できなかった場合は 126 となる。
これ以外で何かエラーがあった場合は、終了ステータスは 0 以外の前記以外の値( 1 - 125 )の何かになる。

環境変数
環境変数 LANG, LC_ALL, LC_CTYPE, LC_MESSAGES, LC_NUMERIC, NLSPATH, PATH が使用される。
PATH は command を探すのに使われる。それ以外は出力文字や書式に使用される。

GNU バージョン
以下は GNU 1.7 バージョンの time の説明である。
コマンド名とは裏腹に、GNU バージョンでは有益な情報がたくさん出力される。
使用時間だけでなく、(取得できる場合には)メモリや I/O、IPC 呼び出しなどの他のリソースに関する情報も出力される。
出力はフォーマット文字列を使って整形され、フォーマット文字列は -f オプションか環境変数 TIME で指定できる。

デフォルトのフォーマット文字列は以下の通り。
%Uuser %Ssystem %Eelapsed %PCPU (%Xtext+%Ddata %Mmax)k
%Iinputs+%Ooutputs (%Fmajor+%Rminor)pagefaults %Wswaps

-p オプションが指定された場合には、(他と互換性のある)出力フォーマットが使用される。
real %e
user %U
sys %S

フォーマット文字列
フォーマットはよくある printf 形式で解釈される。
通常の文字はそのままコピーされ、タブ、改行 (newline)、バックスラッシュはそれぞれ \t, \n, \\ でエスケープされる。
パーセント記号は %% で表現され、それ以外の % は変換を示す。
末尾には必ず改行文字 (newline) が追加される。
変換は以下の通りである。
tcsh(1) で使用される変換は全てサポートされている。

Time
%E 経過した実時間 ([hours:]minutes:seconds の形式)。
%e ( tcsh にはない)経過した実時間 (秒単位)。
%S そのプロセスがカーネルモードで消費した CPU 時間の合計 (秒単位)。
%U そのプロセスがユーザモードで消費した CPU 時間の合計 (秒単位)。
%P このジョブが獲得した CPU の割り合い (パーセンテージ)。(%U + %S)/%E で計算される。

Memory
%M プロセス生存中のそのプロセスの resident set size の最大値。キロバイト単位。
%t ( tcsh にはない)そのプロセスの resident set size の平均値。キロバイト単位。
%K そのプロセスのメモリ使用量の合計(データ+スタック+テキスト)の平均値。キロバイト単位。
%D そのプロセスの非共有データ領域の平均サイズ。キロバイト単位。
%p ( tcsh にはない)そのプロセスの非共有スタック空間の平均サイズ。キロバイト単位。
%X そのプロセスの共有テキスト空間の平均サイズ。キロバイト単位。
%Z ( tcsh にはない)システムのページサイズ(バイト単位)
     この値はシステム毎に決まる定数だが、システムにより異なる。
%F プロセスの動作中に発生したメジャーページフォルトの回数。
     これは、ディスクからページを読み込む必要があったページフォルトに関するものである。
%R マイナーページフォールト、つまり回復可能なページフォルトの回数。
     これは、そのページは有効でないが、まだ他の仮想ページに奪われていなかったページに対するページフォルトに関するものである。
%W そのプロセスが主記憶からスワップアウトされた回数。
%c そのプロセスが (タイムスライスの経過により) 強制的にコンテキストスイッチされた回数。
%w wait の回数、つまりそのプログラムが自発的にコンテキストスイッチされた回数。
     例えば、I/O 操作の完了を待っている間などが該当する。

I/O
%I そのプロセスによるファイルシステムからの入力の回数。
%O そのプロセスによるファイルシステムへの出力の回数。
%r そのプロセスが受信したソケットメッセージ数。
%s そのプロセスが送信したソケットメッセージ数。
%k そのプロセスに配送されたシグナル数。
%C ( tcsh にはない) time の対象となったコマンド名とコマンドライン引き数。
%x ( tcsh にはない)コマンドの終了ステータス。

GNU オプション
-f FORMAT, --format=FORMAT
出力フォーマットを指定する。
環境変数 TIME で指定されたフォーマットよりも優先される。

-p, --portability
他の time と互換性のある出力フォーマットを使用する。

-o FILE, --output=FILE
結果を stderr に送らず、指定されたファイルに書き込む。
ファイルは上書きされる。

-a, --append
( -o と一緒に使用する。)
ファイルを上書きせずに、結果をファイル末尾に追加する。

-v, --verbose
非常に詳しい出力で、入手できる全ての情報を出力する。

GNU 標準オプション
--help
使用方法に関するメッセージを標準出力に表示し、正常終了する。

-V, --version
バージョン情報を標準出力に表示し、正常終了する。

--
オプションリストの末尾を示す。

バグ
全てのリソースが Unix の全てのバージョンで計測されているわけではないので、いくつかの値が 0 と報告される可能性がある。
現在の出力項目のほとんどは 4.2BSD や 4.3BSD で取得可能なデータに基づいて選択されている。

GNU time バージョン 1.7 はまだローカライズされていない。
そのため、POSIX の要件を実装していないことになる。

TIME という環境変数は名前の選択がまずい。
autoconf(1) や make(1) のようなシステムでは、使用するコマンドを上書きするのにそのコマンドの名前の環境変数を使うのが珍しくない。
MORE や TIME のような名前を(プログラムのパス名の指定ではなく)プログラムへのオプションを指定するのに使うと、面倒なことを引き起こす可能性が高い。

-o が追記ではなく上書きになっているのは残念なことだ
(つまり -a オプションがデフォルトになっているべきだろうということだ)。

GNU time に対する提案やバグレポートは bug-utils@prep.ai.mit.edu までメールを送ってほしい。
その場合には time や OS、使用している C コンパイラのバージョンを記載してほしい。
time のバージョンは以下のコマンドで取得できる。
time --version

関連項目
tcsh(1), times(2), wait3(2)

記述に際しては、細心の注意をしたつもりですが、間違いやご指摘がありましたら、こちらからお知らせいただけると幸いです。


→「Linux コマンド辞典「strings」」
←「Linux コマンド辞典「locate」」


« 戻る