time简介
time命令 用于 打印出一条命令或一个程序的执行时间
time 命令以秒为单位将一条命令执行期间所用的时间、系统时间和 time 命令的执行时间打印在标准错误中。
用法:time [ -p ] Command [ Argument ... ]
举例:想知道 列举home文件夹这一命令 花费的时间:
time ls /home
想知道 将文件复制到某一文件夹 花费的时间:
time cp /home/***/h /home/***/Documents
想知道 一个脚本运行的时间:
time ./helloWorld.sh
time命令结果有三行组成:real、user和sys。我们这里用的都是real值,CPU用时被划分为user和sys两块。
① real值表示从程序开始到程序执行结束时所消耗的时间,包括CPU的用时。
② user值表示程序本身,以及它所调用的库中的子例程使用的时间。
③ sys是由程序直接或间接调用的系统调用执行的时间。
在单处理器上,real值和整个CPU用时之差,也就是real - ( user + sys )是所有延迟程序执行的因素的总和。在SMP上,这个值近似为real * number_of_processors - ( user + sys )。这些因素包括:
•调入程序文本和数据的IO操作
•获取程序实际使用内存的IO操作
•由其它程序消耗的CPU用时
•由操作系统消耗的CPU用时
话说time是一个bash的保留字。别人这样讲,但是我没有看出来是为什么这样讲,经查time命令是time包中的一个文件。我不知道这样讲(保留字)的目的,但是运行测试,这个命令(time)的确有点特殊。
正常运行time命令:
[root@dy dic]# time sleep 5
real 0m5.001s
user 0m0.001s
sys 0m0.000s
我们重定向命令输出:
[root@dy dic]# time sleep 5 >out.txt
real 0m5.001s
user 0m0.002s
sys 0m0.001s
屏幕仍然输出,且out.txt文件为空,重定向失败。
使用time sleep 5 2>out.txt命令测试仍然无效。大概上面这个情况就是time成为bash保留字的理由,据说因为这个命令的一些特殊性,所以要求它要以一种特殊的形式运行。那么我们该如何解决类似此种的号称为保留字的命令输出不可重定向的问题呢?
那天刚好看到了 一篇博文如此介绍。因为time作为保留字的原因导致它按常规方式输出不可被重定向,我们可以通过让它运行在子shell(subshell)形态下,这样我们就可以正常的重定向它的输出了。
在console下,两种让命令运行在子shell的方式是给命令加小括号和加大括号。按这样最终实现如下:
1 ( time sleep 5 ;) 2> out.txt
2 { time sleep 5;} 2>out.txt
注:time命令正常的输出是stderr(所以要在重定向是加2)。
经测试上面两种方式都有效。
原文:
http://blog.csdn.net/grantlee1988/article/details/7748554