連載
» 2018年10月25日 05時00分 公開

Linux基本コマンドTips(252):【 time 】コマンド(外部コマンド)――コマンドの実行時間と実行時のシステムリソース情報を計測する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、指定したコマンドの実行時間と実行時のシステムリソース情報などを計測する「time」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、指定したコマンドの実行時間と実行時のシステムリソース情報などを計測する「time」コマンドです。

timeコマンドとは?

 「time」は指定したコマンドの実行時間と、実行時のシステムリソース情報など計測して表示するコマンドです。

 今回取り上げたtimeコマンドは外部コマンドです。bashやtcsh、zshにある同名のビルトインコマンドよりも機能が豊富です(連載第251回)。



timeコマンドの書式

time [オプション] コマンド名

※[ ]は省略可能な引数を示しています。





timeの主なオプション

短いオプション 長いオプション 意味
-f フォーマット --format=フォーマット 出力フォーマットを指定
-p --portability 他のtimeコマンドと互換性のあるフォーマットで出力する(「-f 'real %e\nuser %U\nsys %S'」相当)
-o ファイル --output=ファイル 結果を画面(標準エラー出力:stderr)ではなく、ファイルに上書き出力する
-a --append ファイルを上書きせず末尾に追加する(-oと併用する)
-v --verbose 詳しい内容を出力する
-- timeコマンドのオプションの末尾を明示するために用いる

timeコマンドで使用できる主な書式(時間)

書式 意味
%E 経過した実時間(書式は、[hours:]minutes:seconds)
%e 経過した実時間(秒単位)
%S コマンドを実行するのに使用したシステムCPU時間(秒単位)
%U コマンドを実行するのに使用したユーザーCPU時間(秒単位)
%P コマンド実行時のCPU使用率(%)。計算式は、(%U + %S) / %e

timeコマンドで使用できる主な書式(メモリ)

書式 意味
%M RSS(Resident Set Size:物理メモリの使用量)の最大値(KB単位)
%t RSSの平均値(KB単位)
%K メモリ使用量の合計(データ+スタック+テキスト)の平均値(KB単位)
%D 非共有データ領域の平均サイズ(KB単位)
%p 非共有スタック空間の平均サイズ(KB単位)
%X 共有テキスト空間の平均サイズ(KB単位)
%Z システム固有のページサイズ(バイト単位)
%F プロセスの動作中に発生したメジャーページフォルトの回数
%R プロセスの動作中に発生したマイナーページフォールト(回復可能なページフォルト)の回数
%W プロセスが主記憶からスワップアウトされた回数
%c プロセスが強制的にコンテキストスイッチされた回数
%w waitの回数(入出力操作の完了を待っている間などに、自発的にコンテキストスイッチされた回数)

timeコマンドで使用できる主な書式(入出力など)

書式 意味
%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を使用して、指定したコマンドの実行にかかった時間を表示する)


画面1 画面1 ビルトインコマンドの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を用いて出力先を標準出力に変えた。



画面2 画面2 3種類のコマンドを指定し、実行時間などを表示したところ


出力フォーマットを変更する

 「-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


画面3 画面3 書式を指定してコマンドの実行時間などを表示したところ

 さらに「-v」オプションを使用すると、コマンド実行の際の入出力情報なども含む、より詳しい内容を表示します(画面4)。

画面4 画面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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。