web-dev-qa-db-ja.com

timeと/ usr / bin / timeの違いは何ですか?

私が使用した2つのコマンドは同じでしたが、同じパラメーターを共有していません。

  • time -f "%E %C" mycommandtomeasure
  • /usr/bin/time -f "%E %C" mycommandtomeasure

最初のものは実行されませんが、2番目のものは実行されます。最初のものは-fパラメーターを見つけることができません。 whereis timeをチェックするとき、パス/usr/bin/timeを取得するので、time/usr/bin/timeと同じコマンドであることを理解しています。

どうやら、私の仮定は間違っています。誰かが私を詳しく説明するのを手伝ってもらえますか?

7
Socrates

timeコマンドが実際に使用しているtypeコマンドを見てみましょう(help typeを参照):

$ type -a time
time is a Shell keyword
time is /usr/bin/time

したがって、明らかに、システム上のtimeは両方です

  • bashシェルに直接組み込まれたキーワード
  • 実行可能ファイル/usr/bin/time

Shellキーワードは実行可能ファイルよりも優先されるため、timeのみを入力したときに実際に実行されるのはShellキーワードです。また、type -aがリストする順序から、またはtype timeだけの出力からもわかります。これは、1つの有効なタイプのみをリストします。

それでは、それぞれが何ができるかを確認しましょう。

  • 実行可能ファイルには通常、マンページ(マニュアルページ)があり、manコマンド、つまりここman timeを使用して開くことができます。

  • Bashに組み込まれているものに関するヘルプを表示するには、helpコマンドを使用する必要があります:help time

Shellキーワードは実行可能ファイルよりも少ないオプションをサポートしますが、他の利点があることに注意してください。複雑なBashは、パイプラインのように構築されます。例については、 この回答の終わり を参照してください。

ただし、Shellキーワードの代わりに実行可能ファイルを使用する必要がある場合は、フルパス、つまり/usr/bin/timeを入力するか、コマンドの前にバックスラッシュを付けてBashによる評価を停止できます:\time

ところで、timeはBashのシェルキーワードですが、sh(ダッシュ)には存在せず、実行可能ファイルのみを取得します。

12
Byte Commander

timeを実行すると、すべての機能をサポートしていない組み込みシェルコマンドを実行します。

/usr/bin/timeを実行すると、実際のGNU timeプログラムを実行します。

常に「実際の」エイリアスを実行するようにエイリアスを設定できます。

3
Pilot6