システム管理者でも仮想プライベートサーバー(VPS)ユーザーでも、さまざまなLinuxコマンドを学ぶことで、タスクをより効率的に実行できます。
このチュートリアルでは、Linuxのtimeコマンドについて、それが何であるか、その目的、およびその使用方法について学習します。
Linuxタイムコマンドとは
LinuxおよびUnixライクなオペレーティングシステムのtimeコマンドを使用すると、特定のコマンドの実行にかかる時間を決定できます。通常、スクリプトまたはコマンドのパフォーマンスを測定するために使用されます。コマンドがタスクを完了する速度が速いほど、パフォーマンスが向上します。
さらに、timeコマンドは、プロセスのシステムリソース使用量を表示することもできるため、特定のコマンドの効率を確認するための便利なツールになります。
たとえば、同じタスクを実行できる2つのcronジョブから選択するとします。 timeコマンドを実行することで、各cronジョブがタスクを完了するのにかかる時間を決定できます。
ただし、Linux timeコマンドの使用方法について説明する前に、使用するシェルによって異なることに注意してください。 Linuxシステムには3つの異なるバージョンのtimeコマンドがあります。
- バッシュ –すでにシェルに組み込まれており、 timeと入力して実行できます 。
- Zsh – Bashと同様に、これもすでにシステムに組み込まれており、 timeと入力して実行されます。 。
- GNUデフォルトLinux(GNU) – コマンドへの明示的なパスusr/ bin / timeを入力することで利用できます 。
システムに適用されるLinux時間コマンドのバージョンを確認するには、シェルプログラムに次のように入力します。
$ type time
- 出力を取得した場合時間はシェルキーワードです 、Bashtimeコマンドを使用しています。
- 出力を取得した場合、時間は予約語です 、Zshtimeコマンドを使用しています。
- 出力を取得した場合、時間はusr / bin/timeです 、GNUtimeコマンドを使用しています。
または、usr / bin / timeのエイリアスコマンドを作成することで、LinuxでGNUtimeコマンドを簡略化できます。
LinuxでのTimeコマンドの使用
このセクションでは、Linuxtimeコマンドの構文とその出力の読み取り方法を学習します。
Linuxタイムコマンドの構文を理解する
timeコマンドの使用は非常に簡単です。シェルプログラムを開いて次のように入力するだけです。
$ time [command]
timeコマンドを最大限に活用するには、その構文を理解する必要があります。
$ time [command] [arg1] [arg2] ... [argN] time [options] [command] [arg1] [arg2] ... [argN]
時間 指定されたコマンドを実行します 任意の引数( arg )。コマンドがタスクを完了すると、timeは、コマンドの実行にかかった時間とコマンドで使用されたリソースを含む情報を出力します。
プログラムコマンドが失敗を示すゼロ以外のステータスで終了した場合、timeは警告メッセージと終了ステータスを出力します。
コマンドで使用される文字列形式を入力することにより、システムリソース使用状況セクションに表示する情報を決定できます。
ユーザーが形式を指定せず、時間環境変数が設定されている場合、その値が形式として使用されます。それ以外の場合は、timeに組み込まれているデフォルトの形式が使用されます。
オプション 時間の出力を変更するリソース指定子です。コマンドの前に表示する必要があります。コマンドの後に入力されたものはすべて引数と見なされます。
時間に使用できるすべてのオプションを表示するには、コマンドラインに次のように入力します。
$ man time
Linuxのtimeコマンド出力を変更するために使用できるオプションのリストが表示されます。ただし、これらのオプションは、特定のオペレーティングシステムと使用しているバージョンによって異なる場合があることに注意してください。
簡単な最初の例から始めましょう。コマンドの実行にかかる時間を確認するにはls 選択したディレクトリのコンテンツを表示するために使用され、シェルに次のように入力します。
$ time ls
lsコマンドの出力とそれを完了するのにかかった時間が表示されます。
それでは、引数を組み込んでみましょう。この例では、ファイルを別のディレクトリに移動するのにかかる時間を調べます。
$ time mv example.txt example-dir
その結果、 example.txt ファイルはexample-dirに移動されました 、プロセスを完了するのにかかる時間が表示されます。
Linux timeコマンドの利点を完全に理解するには、その出力を読み取る方法を知っている必要があります。
ターミナルで出力を読み取る
組み込みのtimeコマンドのデフォルトの出力には、次の情報が含まれています。
- リアルタイム(実数)。 プロセスが最初から最後まで実行されるのにかかる実際の時間。これには、他のプロセスにかかった時間と、プロセスが完了するのを待つために費やした時間が含まれます。
- ユーザー時間(ユーザー)。 プロセス中にユーザーモードで費やされたCPU時間。他のプロセスとブロックされた時間は含まれていません。
- システム時間(sys)。 プロセス中にカーネルモードで費やされた合計CPU時間。ユーザー時間と同様に、他のプロセスと他のプロセスによってブロックされて費やされた時間はカウントされません。
これが例です。以下のコマンドをコマンドラインに入力すると、システムはオープンソースの仮想マシンプログラムVirtualBoxのインストーラーをダウンロードします。
$ time wget https://download.virtualbox.org/virtualbox/6.1.28/virtualbox-6.1_6.1.28-147628~Ubuntu~eoan_amd64.deb
ダウンロードが完了すると、3つの図が表示されます–本物 、ユーザー 、および sys 。ご覧のとおり、ダウンロード中に実際のモード、ユーザーモード、およびシステムモードで経過した時間が、分と秒で表示されます。
ファイルへの出力の書き込み
時々、あなたは時間を使ってあなたが受け取った情報を保存したいかもしれません。幸い、コマンド出力をファイルに書き込むことができるフォーマットオプションがあります。
GNU timeコマンドを使用する場合、 -o オプションを使用すると、それを実行できます。他のコマンドに関する情報を含む新しい出力ファイルが作成されます。
たとえば、次のコマンドを入力して、 hostinger.comのping情報を保存します。 新しいファイルへのプロセスの詳細:
$ time -o hostinger-ping-info.log ping hostinger.com
Bashシェルを使用していて、-oまたはその他のオプションを使用する場合は、明示的なパス usr / bin / timeを使用して外部timeコマンドを呼び出す必要があることに注意してください。 時間だけでなく 。
$ usr/bin/time -o hostinger-ping-info.log ping hostinger.com
hostinger-ping-info.logの内容を確認するには 、猫を使用します コマンド:
$ cat hostinger-ping-info.log
ファイルで詳細な出力を取得する
デフォルトのtimeコマンド出力には、特定のプロセスについて知りたいすべての詳細が含まれていない場合があります。詳細な出力を表示するには、Linuxのtimeコマンドに-vオプションを追加します。
たとえば、 hostinger.comのpingまたは応答時間を検索する場合 プロセスに関する詳細情報を表示するには、次のコマンドを入力します。
$ time -v ping hostinger.com
GNU timeコマンドを使用しない場合、または標準のエラーストリームが発生した場合は、フルパス usr / bin / timeを入力して外部timeコマンドをトリガーしてみてください。 代わりに:
$ usr/bin/time -v ping hostinger.com
または、ユーザーは次の出力形式オプションを使用して、timeコマンドを入力するときに出力に表示する情報の種類をカスタマイズできます。
% | リテラルの`%’。 |
C | タイミングをとるコマンドの名前とコマンドライン引数。 |
D | プロセスの非共有データ領域のd平均サイズ(キロバイト単位)。 |
E | プロセスで使用された実際の(実時間)経過時間((時間:)分:秒)。 |
F | プロセスの実行中に発生したメジャーまたはI/Oを必要とするページフォールトの数。これらは、ページがプライマリメモリから移行された場合の障害です。 |
私 | プロセスによるファイルシステム入力のi数。 |
K | プロセスの平均合計メモリ使用量(キロバイト単位)。 |
M | プロセスの存続期間中のプロセスの最大常駐セットサイズ(キロバイト単位)。 |
O | プロセスによるファイルシステム出力の数。 |
P | このジョブが取得したCPUのパーセンテージ。これは、ユーザーとシステムの時間を合計実行時間で割ったものです。パーセント記号も出力します。 |
R | マイナーまたは回復可能なページフォールトの数。これらは無効ですが、他の仮想ページによってまだ要求されていないページです。したがって、ページ上のデータは引き続き正しいですが、システムテーブルを更新する必要があります。 |
S | プロセスに代わって(カーネルモードで)システムが使用したCPU秒の合計数(秒単位)。 |
U | プロセスが(ユーザーモードで)直接(ユーザーモードで)使用したCPU秒の合計数(秒単位)。 |
W | プロセスがメインメモリからスワップアウトされた回数。 |
X | プロセスで共有されるテキストの平均量(キロバイト単位)。 |
Z | zシステムのページサイズ(バイト単位)。システムごとの定数として、システム間で異なる場合があります。 |
c | プロセスが意図せずにコンテキストスイッチされた回数(タイムスライスの期限が切れたため)。 |
e | プロセスで使用された実際の(実時間)経過時間(秒単位)。 |
k | プロセスに配信されたシグナルの数。 |
p | プロセスの平均非共有スタックサイズ(キロバイト単位)。 |
r | プロセスによって受信されたソケットメッセージの数。 |
s | プロセスによって送信されたソケットメッセージの数。 |
t | プロセスの平均常駐セットサイズ(キロバイト単位)。 |
w | たとえば、I / O操作が完了するのを待っている間に、プログラムが自発的にコンテキストスイッチされた回数。 |
x | コマンドの終了ステータス。 |
たとえば、コマンドが受信したソケットメッセージの数を表示する場合は、シェルに次のように入力します。
$ /usr/bin/time -f "Socket Messages Received: %r" command
または、Bashシェルを使用する場合は、組み込みのtimeコマンドのTIMEFORMATを使用することをお勧めします。 TIMEFORMATは特定のフォーマット文字列を使用して、ユーザーがタイミング情報の表示方法を指定できるようにします。
TIMEFORMATパラメータ値のリストは次のとおりです。
%% | リテラル%。 |
%[p] [l] R | 経過時間(秒単位)。 |
%[p] [l] U | プロセスがユーザーモードで費やしたCPU秒数。 |
%[p] [l] S | プロセスがシステムモードで費やしたCPU秒数。 |
%P | (%U +%S)/%Rとして計算されるCPUパーセンテージ。 |
Linuxのtimeコマンドは、特定のプロセスの実行時間と全体的なパフォーマンスをチェックするための優れたツールです。このガイドでは、Linuxのtimeコマンド、その目的、構文、および出力について学習しました。
このガイドが、Linuxシステムをより効率的にナビゲートする方法を学ぶのに役立つことを願っています。