2009-11-01 165 views

回答

53

不要忘了,之間是有區別bash的內置time(這應該是默認調用的時候你做time command)和/usr/bin/time(它應該要求你用它的完整路徑調用它)。

內置time總是打印到stderr,但/usr/bin/time將允許您將時間輸出發送到特定文件,因此您不會干擾執行的命令的stderr流。此外,/usr/bin/time的格式是由環境變量TIME命令行上配置的,而bash的內置time格式是TIMEFORMAT環境變量構成。

$ time factor 1234567889234567891 # builtin 
1234567889234567891: 142662263 8653780357 

real 0m3.194s 
user 0m1.596s 
sys 0m0.004s 
$ /usr/bin/time factor 1234567889234567891 
1234567889234567891: 142662263 8653780357 
1.54user 0.00system 0:02.69elapsed 57%CPU (0avgtext+0avgdata 0maxresident)k 
0inputs+0outputs (0major+215minor)pagefaults 0swaps 
$ /usr/bin/time -o timed factor 1234567889234567891 # log to file `timed` 
1234567889234567891: 142662263 8653780357 
$ cat timed 
1.56user 0.02system 0:02.49elapsed 63%CPU (0avgtext+0avgdata 0maxresident)k 
0inputs+0outputs (0major+217minor)pagefaults 0swaps 
+0

從'man bash':「TIMEFORMAT變量可以設置爲指定應該如何顯示時間信息的格式字符串」 – 2009-11-01 06:46:34

+0

糟糕 - I *認爲*有一些格式化的方法,但是我在'help time'中錯過了它,因爲我只查看了它,而且我認爲這是一個命令行參數。我會更新答案。 – 2009-11-01 15:31:13

+0

-1這似乎沒有回答這個問題。 – 2011-07-12 01:47:41

21
[email protected]:~# time [command] 

它還區分二手實時和系統時間之間。

+0

這當然是最基本的答案 - 但如果你想看到從命令輸出的錯誤,但發送定時信息到標準輸出的問題,確實也有一些併發症。時間命令寫入標準錯誤。你的建議可能足夠準確 - 因此我的+1。 – 2009-11-01 05:00:57

+2

'時間'寫入tty,而不是stderr。我猜想這會讓事情變得更糟。 – mob 2012-04-27 20:52:00

90

time是大多數shell中的內置命令,它將執行時間信息寫入到tty中。

你也可以嘗試像

start_time=`date +%s` 
<command-to-execute> 
end_time=`date +%s` 
echo execution time was `expr $end_time - $start_time` s. 

或者在bash

start_time=`date +%s` 
<command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s 
+6

優秀,比公認的回答 – maazza 2013-05-22 10:47:25

+0

更靈活,這種靈活性允許我衡量一整套命令的時間。 – Nath 2016-01-02 02:20:25

+0

是否有可能在任何linux命令周圍應用linux方面來計算執行 – 2016-10-06 09:33:55

2

在zsh中可以使用

=time ... 

在bash或ZSH可以使用

command time ... 

這些(通過不同的機制)強制要使用的外部命令。

6

添加到@暴民的回答是:

追加%Ndate +%s給了我們納秒級精度:

start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start` 
4

如果我開始一個長期運行的過程是怎樣的一個副本或散列,我想知道後來花了多長時間,我只是這樣做:

$ date; sha1sum reallybigfile.txt; date 

這將導致下面的輸出:

Tue Jun 2 21:16:03 PDT 2015 
5089a8e475cc41b2672982f690e5221469390bc0 reallybigfile.txt 
Tue Jun 2 21:33:54 PDT 2015 

授予,這裏實施它不是很精確,不計算經過時間。但它很簡單,有時候只是你需要的東西。

6

對於逐行增量測量,請嘗試gnonom

它是一個命令行實用程序,有點像moreutils的ts,用於將時間戳信息添加到另一個命令的標準輸出。對於需要長時間歷史記錄的長時間運行流程非常有用。

對gnomon管道的任何事情都會在每行上添加一個時間戳,表明該行是多長時間纔是緩衝區的最後一行 - 也就是說,下一行顯示需要多長時間。默認情況下,gnomon將顯示每行之間所經過的秒數,但這是可配置的。

gnomon demo