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
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