如何用GNU time查找Linux命令或進程的執行時間

2020-09-05 IT小白進階之路

在類 Unix 系統中,你可能知道一個命令或進程開始執行的時間,以及一個進程運行了多久。 但是,你如何知道這個命令或進程何時結束或者它完成運行所花費的總時長呢?

在類 Unix 系統中,這是非常容易的! 有一個專門為此設計的程序名叫 GNU time。 使用 time 程序,我們可以輕鬆地測量 Linux 作業系統中命令或程序的總執行時間。 time 命令在大多數 Linux 發行版中都有預裝,所以你不必去安裝它。

在 Linux 中查找一個命令或進程的執行時間

要測量一個命令或程序的執行時間,運行:

$ /usr/bin/time -p ls或者,

$ time ls輸出樣例:

dir1 dir2 file1 file2 mcelogreal 0m0.007suser 0m0.001ssys 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 .stackreal 0m0.008suser 0m0.001ssys 0m0.005s

以上命令顯示出了 ls 命令的總執行時間。 你可以將 ls 替換為任何命令或進程,以查找總的執行時間。

輸出詳解:

real —— 指的是命令或程序所花費的總時間user —— 指的是在用戶模式下程序所花費的時間sys —— 指的是在內核模式下程序所花費的時間

time 與 /usr/bin/time

你可能注意到了, 我們在上面的例子中使用了兩個命令 time 和 /usr/bin/time 。 所以,你可能會想知道他們的不同。

首先, 讓我們使用 type 命令看看 time 命令到底是什麼。對於那些我們不了解的 Linux 命令,type 命令用於查找相關命令的信息。

$ type -a timetime is a shell keywordtime is /usr/bin/time

正如你在上面的輸出中看到的一樣,time 是兩個東西:

一個是 BASH shell 中內建的關鍵字一個是可執行文件,如 /usr/bin/time。

由於 shell 關鍵字的優先級高於可執行文件,當你沒有給出完整路徑只運行 time 命令時,你運行的是 shell 內建的命令。 但是,當你運行 /usr/bin/time 時,你運行的是真正的 GNU time 命令。 因此,為了執行真正的命令你可能需要給出完整路徑。

在大多數 shell 中如 BASH、ZSH、CSH、KSH、TCSH 等,內建的關鍵字 time 是可用的。 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 file, –output=FILE—— 將輸出寫到指定文件中而不是到標準輸出。
  • -a, –append—— 將輸出追加到文件中而不是覆蓋它。
  • -v, –verbose —— 此選項顯示 time命令輸出的詳細信息。
  • –quiet – 此選項可以防止 time命令報告程序的狀態.

當不帶任何選項使用 GNU time 命令時,你將看到以下輸出。

$ /usr/bin/time wc /etc/hosts9 28 273 /etc/hosts0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 2024maxresident)k0inputs+0outputs (0major+73minor)pagefaults 0swaps

如果你用 shell 關鍵字 time 運行相同的命令, 輸出會有一點兒不同:

$ time wc /etc/hosts9 28 273 /etc/hostsreal 0m0.006suser 0m0.001ssys 0m0.004s

有時,你可能希望將系統資源使用情況輸出到文件中而不是終端上。 為此, 你可以使用 -o 選項,如下所示。

$ /usr/bin/time -o file.txt lsdir1 dir2 file1 file2 file.txt mcelog

正如你看到的,time 命令不會顯示到終端上。因為我們將輸出寫到了file.txt 的文件中。 讓我們看一下這個文件的內容:

$ cat file.txt0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 2512maxresident)k0inputs+0outputs (0major+106minor)pagefaults 0swaps

當你使用 -o 選項時, 如果你沒有一個名為 file.txt 的文件,它會創建一個並把輸出寫進去。如果文件存在,它會覆蓋文件原來的內容。

你可以使用 -a 選項將輸出追加到文件後面,而不是覆蓋它的內容。

$ /usr/bin/time -a file.txt ls

-f 選項允許用戶根據自己的喜好控制輸出格式。 比如說,以下命令的輸出僅顯示用戶,系統和總時間。

$ /usr/bin/time -f &34; lsdir1 dir2 file1 file2 mcelog0:00.00 real, 0.00 user, 0.00 sys

請注意 shell 中內建的 time 命令並不具有 GNU time 程序的所有功能。

有關 GNU time 程序的詳細說明可以使用 man 命令來查看。

$ man time

想要了解有關 Bash 內建 time 關鍵字的更多信息,請運行:

$ help time

就到這裡吧。 希望對你有所幫助。

https://www.linuxprobe.com/gnu-time-linux.html

相關焦點

  • 使用微軟的 ProcDump 調試 Linux 進程
    用這個微軟的開源工具,獲取進程信息。顧名思義,它用於將正在運行的進程的內存轉儲到磁碟上的一個核心文件中。然後可以用調試器對這個核心文件進行分析,了解轉儲時進程的狀態。因為之前用過 Sysinternals,所以我很想試試 ProcDump 的 Linux 移植版。
  • linux基礎命令(進程管理)
    用三種命令分別查看redis-server進程的pidlinux-szge:/home/soft # pgrep redis-server 1560linux-szge:/home/soft # pidof redis-server1560linux-szge:/home/soft # ps aux | grep
  • 測試必備linux命令
    find / -amin -10 # 查找在系統中最後10分鐘訪問的文件(access time)find / -atime -2 # 查找在系統中最後48小時訪問的文件find / -mmin -5 # 查找在系統中最後5分鐘裡修改過的文件(modify time)find / -mtime -1 #查找在系統中最後24小時裡修改過的文件(4)根據用戶搜索
  • Linux系統find查找命令運用
    前兩天找raksmart機房要了一臺測試機,測試一些東西,然後呢,就想著謝謝find查找命令,find查找命令是我最喜歡的查找命令了,很簡單,而且很精確,下面就詳細的給大家介紹一下:使用格式:# find [options] [查找路徑] [查找條件] [處理動作]查找路徑:默認為當前目錄查找條件:默認為查找指定路徑下的所有文件處理動作:默認為顯示
  • 如何使用pv命令監控Linux命令的執行進度
    如果你是一個 Linux 系統管理員,那麼毫無疑問你必須花費大量的工作時間在命令行上:安裝和卸載軟體,監視系統狀態,複製、移動、刪除文件,查錯等等。很多時候都是你輸入一個命令,然後等待很長時間直到執行完成。
  • linux文件系統,文件查找等命令
    *,目錄加/;-p 類似 -F,但是不標記可執行文件-q 將文件名中的非列印字符輸出為問號(終端默認值)-b 文件名中不可列印字符使用轉義字符輸出-k 以 kb 顯示文件大小-m 只顯示文件名,每一行儘量多的顯示,中間用逗號分隔
  • Linux的so文件到底是幹嘛的?淺析Linux的動態連結庫
    一些常用的Linux命令非常依賴/lib和/usr/lib64下面的各個庫,比如:scp、rm、cp、mv等Linux下常用的命令非常依賴/lib和/usr/lib64下的各個庫。不小心刪除了這些路徑,可能導致系統的很多命令和工具都無法繼續使用。我們可以用ldd命令查看某個可執行文件依賴了哪些動態連結庫。
  • Linux關機命令有哪些?
    一、linux系統關機命令-shutdown本文引用地址:http://www.eepw.com.cn/article/201609/303769.htm對於用過XP和win7系統的朋友來說,應該對這個關機命令比較熟悉了。
  • linux常用命令:linux常用命令介紹
    今天來聊聊一篇關於linux常用命令:linux常用命令介紹的文章,現在就為大家來簡單介紹下linux常用命令:linux常用命令介紹,希望對各位小夥伴們有所幫助。netstat 顯示網絡狀態信息man 命令不會用了,找男人 如:man lsclear 清屏alias 對命令重命名 如:alias showmeit="ps -aux" ,另外解除使用unaliax showmeitkill 殺死進程,可以先用ps 或 top命令查看進程的id,然後再用kill命令殺死進程。
  • linux 關機命令總結
    2、shutdown -r now 立刻重啟(root用戶使用) 3、shutdown -r 10 過10分鐘自動重啟(root用戶使用)  4、shutdown -r 20:35 在時間為20:35時候重啟(root用戶使用) 如果是通過shutdown命令設置重啟的話,可以用shutdown -c命令取消重啟下面我們來看看linux的這些具體的關機命令之間的區別和各自的用法
  • 在Linux 中的特定時間運行命令
    我只是想知道在類 Unix 作業系統中是否有簡單的方法可以在特定的時間運行一個命令,並且一旦超時就自動殺死它 —— 因此有了這篇文章。請繼續閱讀。在 Linux 中在特定時間運行命令我們可以用兩種方法做到這一點。方法 1 - 使用 timeout 命令最常用的方法是使用 timeout 命令。
  • 分享:linux 命令查找文件中指定字符串
    如用&34;來表示當前的目錄,用/來表示系統根目錄 -print :find命令將匹配的文件輸出到標準輸出 -exec: find命令對匹配的文件執行該參數所給出的shell命令,相應的命令形式為 &39;{} \; (注意{}和\之間的空格) -ok 和 -exec的作用相同,只不過以一種更為安全的模式來執行該參數所給出的shell命令,在執行每一個命令之前
  • 如何用 Linux 技巧大大提高工作效率?
    根據名稱查找進程id想快速直接查找進程id,可以使用:$ pgrep hello22692或者:$ pidof hello22692其中,hello是進程名稱。根據名稱殺死進程一般我們可以使用kill -9 pid方式殺死一個進程,但是這樣就需要先找到這個進程的進程id,實際上我們也可以直接根據名稱殺死進程,例如:$ killall hello或者:$ pkill hello查看進程運行時間可以使用下面的命令查看進程已運行時間:$ ps -p 24525
  • Linux有問必答:如何查看Linux上程序或進程用到的庫
    Linux有問必答:如何查看Linux上程序或進程用到的庫 我想知道當我調用一個特定的可執行文件在運行時載入了哪些共享庫。是否有方法可以明確Linux上可執行程序或運行進程的共享庫依賴關係?
  • GNU 核心實用程序簡介 | Linux 中國
    許多 Linux 系統管理員最基本和常用的工具主要包括在兩套實用程序中:GNU 核心實用程序(coreutils)和 util-linux。它們的基本功能允許系統管理員執行許多管理 Linux 系統的任務,包括管理和操作文本文件、目錄、數據流、存儲介質、進程控制、文件系統等等。
  • Java - jdk中的jps命令,快速查找java進程
    前言很多大數據組件都是java寫的,而且啟動之後進程名稱一大串,不好查看、判斷是哪個程序的進程,這時候就可以用到了jps命令。jps是什麼jps類似linux的ps命令,jps只顯示當前用戶java進程信息,信息包括進程號和簡短的進程名稱。
  • 運維人員常用的Linux命令匯總
    ,該命令通常與管道命令一起使用,用於對一些命令的輸出進行篩選加工等等grep Aug /var/log/messages 在文件 '/var/log/messages'中查找關鍵詞"Aug" grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"
  • 如何記憶Linux命令
    Linux是作業系統,作業系統提供進程、文件、網絡等管理功能特性決定了命令行的複雜性。Linux命令雖然多,但學習Linux命令可以換一種角度來學習。許多人記憶的過程是這樣的ls --> 列出目錄內容這樣的記憶就是簡單的映射,沒有構建起聯繫。
  • 這些最常用的Linux命令,每一條都應該學會
    date:顯示與設置系統時間。cal:查看日曆等時間信息。搜索文件命令(4個)which:查找二進位命令,按環境變量PATH路徑查找。find:從磁碟遍歷查找文件或目錄。whereis:查找二進位命令,按環境變量PATH路徑查找。
  • 如何在Linux系統中手動安裝arm-linux-gcc交叉編譯工具
    arm-linux-gcc是幹什麼的?gcc是linux系統下面用來將代碼編譯成一個可執行程序的手段。編譯出來的是適用於linux系統的可執行二進位文件。可執行程序其實就是一堆的0101二進位機器碼。這些機器碼代表什麼含義只有機器本身能理解。所以你用gcc編譯出來的可執行程序只有在linux系統下面可以運行。