在 Linux 中查找命令或進程的執行時間
你可能已經知道在 Linux 和類 Unix 系統中,一個命令或過程的開始時間以及該過程運行了多久。但是,你怎麼知道命令或過程什麼時候結束呢?我的意思是——你如何知道命令或過程完成所花的總時間?嗯,這很簡單!在類 Unix 系統中,有一個名為'GNU time'的工具專門為這個目的而設計。使用 Time 工具,我們可以輕鬆地測量命令或程序在 Linux 操作系統中的總執行時間。好消息是,大多數 Linux 發行版中預裝了 'time' 命令,所以你不需要費心安裝。
在 Linux 中查找命令或進程的執行時間
要測量命令/程式的執行時間,只需運行它。
$ /usr/bin/time -p ls或者,
$ time ls範例輸出:
dir1 dir2 file1 file2 mcelog
real 0m0.007s
user 0m0.001s
sys 0m0.004s$ time ls -a
. .bash_logout dir1 file2 mcelog .sudo_as_admin_successful
.. .bashrc dir2 .gnupg .profile .wget-hsts
.bash_history .cache file1 .local .stack
real 0m0.008s
user 0m0.001s
sys 0m0.005s上述指令會顯示 'ls' 指令的總執行時間。將 "ls" 替換為您選擇的任何指令/程序,以查找總執行時間。
這裡
real- 指命令/程式所花費的總時間,user- 指程序在使用者模式下所花費的時間,sys- 指程序在核心模式下所花費的時間。
我們也可以限制指令僅在特定時間內運行。更多細節請參考以下指南。
- 如何在 Linux 中為指定時間運行命令
time 與 /usr/bin/time
如你所注意到的,我們在上述範例中使用了兩個指令 'time' 和 '/usr/bin/time'。所以,你可能會想知道它們之間的差別是什麼。
首先,讓我們使用 type 命令來看看實際上 'time' 是什麼。對於那些不知道的人,type 命令用來查詢 Linux 命令的相關資訊。更多詳細資訊,請參考 這個指南。
$ type -a time
time is a shell keyword
time is /usr/bin/time如你在上述輸出中所見,時間是兩者,
- 內建於 BASH shell 的關鍵字
- 一個可執行檔,即
/usr/bin/time
由於 shell 關鍵字優先於可執行檔,因此當你僅運行 time 命令而不提供完整路徑時,你運行的是內建 shell 命令。但是,當你運行 /usr/bin/time 時,你運行的是真正的 GNU time 程式。因此,為了使用真正的命令,你可能需要指定它的明確路徑。清楚了嗎?好!
內建的 'time' shell 關鍵字在大多數 shell 中可用,如 BASH、ZSH、CSH、KSH、TCSH 等。'time' shell 關鍵字的選項比可執行檔少。在 'time' 關鍵字中你唯一可以使用的選項是 -p。
你現在已經知道如何使用 'time' 命令來查找給定命令/進程的總執行時間。想了解更多關於 'GNU time' 工具的資訊嗎?繼續閱讀吧!
關於『GNU time』程式的簡要說明
GNU time 程式會使用給定的參數執行一個命令/程式,並在命令完成後將系統資源使用情況總結為標準輸出。與 'time' 關鍵字不同,GNU time 程式不僅顯示命令/進程使用的時間,還包括其他資源如記憶體、I/O 和 IPC 調用。
Time 指令的典型語法是:
/usr/bin/time [options] command [arguments...]
上述語法中的「options」指的是可以與 time 命令一起使用以執行特定功能的一組標誌。可用的選項列表如下。
-f,--format- 使用此選項來指定您希望的輸出格式。-p,--portability- 使用可攜式輸出格式。-o檔案,--output=FILE - 將輸出寫入 FILE 而不是顯示為標準輸出。-a,--append- 將輸出附加到 FILE,而不是覆蓋它。-v,--verbose- 此選項會顯示'time' 工具輸出的詳細說明。--quiet- 此選項可防止 time 工具報告程式的狀態。
當使用「GNU time」程式而不加任何選項時,你會看到類似以下的輸出。
$ /usr/bin/time wc /etc/hosts
9 28 273 /etc/hosts
0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 2024maxresident)k
0inputs+0outputs (0major+73minor)pagefaults 0swaps如果你使用 shell 內建關鍵字 'time' 執行相同的命令,輸出會有些不同:
$ time wc /etc/hosts
9 28 273 /etc/hosts
real 0m0.006s
user 0m0.001s
sys 0m0.004s有時候,你可能想將系統資源使用情況的輸出寫入檔案,而不是顯示在終端機上。要做到這一點,可以像下面這樣使用 -o 標誌。
$ /usr/bin/time -o file.txt ls
dir1 dir2 file1 file2 file.txt mcelog如您在輸出中所見,Time 工具並未顯示輸出。因為,我們將輸出寫入一個名為 file.txt 的文件中。讓我們來看看這個文件:
$ cat file.txt
0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 2512maxresident)k
0inputs+0outputs (0major+106minor)pagefaults 0swaps當你使用 -o 參數時,如果沒有名為 'file.txt' 的檔案,它將會創建並將輸出寫入其中。如果 file.txt 已經存在,它將會覆蓋其內容。
你也可以使用 -a 標誌將輸出附加到檔案,而不是覆蓋它。
$ /usr/bin/time -a file.txt ls-f 標誌允許使用者按照他/她的喜好控制輸出的格式。例如,以下命令顯示了 ls 命令的輸出,並僅顯示使用者時間、系統時間和總時間。
$ /usr/bin/time -f "\t%E real,\t%U user,\t%S sys" ls
dir1 dir2 file1 file2 mcelog
0:00.00 real, 0.00 user, 0.00 sys請注意,內建的 shell 指令 'time' 並不支援 GNU time 程式的所有功能。
有關 GNU time 工具的更多詳細資訊,請參閱手冊頁。
$ man time
要了解更多關於 Bash 內建的 'Time' 關鍵字,請執行:
$ help time資源:
- Nixcraft
- AskUbuntu