2009-11-01 120 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