無論您是系統管理員還是虛擬專用服務器 (VPS)用戶,學習各種Linux 命令將幫助您更高效地執行任務。在本教程中,您將了解 Linux 時間命令——它是什么、用途以及如何使用它。
什么是 Linux 時間命令?
Linux 和類 Unix 操作系統中的時間命令可讓您確定特定命令的運行時間。通常,它用于衡量腳本或命令的性能。命令完成任務的速度越快,其性能就越好。
此外,time 命令還可以顯示進程的系統資源使用情況,使其成為查看特定命令效率的有用工具。例如,您想在可以運行同一任務的兩個cron 作業之間進行選擇。您可以通過運行 time 命令來確定每個 cron 作業完成任務所需的時間。
然而,在我們開始討論如何使用 Linux 時間命令之前,請記住它因您使用的 shell 而異。Linux系統中time命令有3個不同版本:
- Bash——已經內置到 shell 中,可以通過輸入time來運行。
- Zsh——?和 Bash 一樣,它也已經內置到系統中,通過輸入time運行。
- GNU 默認 Linux (GNU)?–?可通過鍵入命令的顯式路徑usr/bin/time獲得。
要檢查哪個 Linux 時間命令版本適用于您的系統,請在您的 shell 程序中輸入以下內容:
$ 輸入時間
- 如果你得到輸出time is a shell keyword,你正在使用 Bash time 命令。
- 如果你得到輸出time is a reserved word,你正在使用 Zsh time 命令。
- 如果您得到輸出time is usr/bin/time,則您使用的是 GNU time 命令。
或者,您可以通過為 usr/bin/time創建別名命令來簡化 Linux 中的 GNU time 命令。
在 Linux 中使用時間命令
在本節中,您將學習 Linux time 命令的語法以及如何讀取其輸出。
了解 Linux 時間命令的語法
使用 time 命令非常簡單——你所要做的就是打開你的 shell 程序并輸入:
$時間
要充分利用 time 命令,您必須了解其語法:
$時間
[arg1] [arg2] ... [argN] 時間[選項]
[arg1] [arg2] ... [argN]
Time使用任何給定的參數 (?arg?)運行給定的命令。命令完成其任務后,時間會輸出信息,其中包括運行命令所花費的持續時間及其使用的資源。
如果程序命令以指示失敗的非零狀態退出,時間將輸出警告消息和退出狀態。
通過輸入命令使用的字符串格式,您可以確定在系統資源使用部分顯示哪些信息。
如果用戶未指定任何格式,但設置了時間環境變量,則其值將用作格式。否則,將使用時間內置的默認格式。
選項是改變時間輸出的資源說明符。它們必須出現在命令之前。命令后輸入的任何內容都將被視為參數。
要查看可用于時間的所有選項,請在命令行中輸入以下內容:
$ 人工時間
您將看到可用于修改 Linux 時間命令輸出的選項列表。但是,請記住,這些選項可能會因特定操作系統和您使用的版本而異。
讓我們從一個簡單的第一個例子開始。要了解運行用于顯示所選目錄內容的命令ls需要多長時間,請在 shell 中輸入以下命令:
$ 時間 ls
您將看到 ls 命令的輸出以及完成它所花費的時間。
現在,讓我們試著加入一個論點。在此示例中,我們將嘗試找出將文件移動到不同目錄需要多長時間:
$ time mv example.txt 示例目錄
因此,example.txt文件已移至example-dir,您將看到完成該過程所花費的時間。
了解輸出
要完全了解 Linux 時間命令的好處,您必須知道如何閱讀它的輸出。
讀取終端中的輸出
內置時間命令的默認輸出包含以下信息:
- 實時(real)。流程從開始運行到結束所需的實際時間。這包括其他進程所花費的任何時間以及等待它們完成所花費的時間。
- 用戶時間(用戶)。進程期間在用戶模式下花費的 CPU 時間量。不包括其他進程和阻塞時間。
- 系統時間 (sys)。進程期間在內核模式下花費的總 CPU 時間。與用戶時間類似,不統計其他進程和被其他進程阻塞的時間。
這是一個例子。如果我們在命令行中輸入以下命令,系統會下載開源虛擬機程序VirtualBox的安裝程序:
$時間 wget https://download.virtualbox.org/virtualbox/6.1.28/virtualbox-6.1_6.1.28-147628~Ubuntu~eoan_amd64.deb
下載完成后,你會看到三個數字——real、user、sys。如您所見,它們以分鐘和秒為單位顯示下載期間在實際、用戶和系統模式下經過的時間。
將輸出寫入文件
有時,您可能希望保存使用時間收到的信息。幸運的是,有一個格式選項可以讓您將命令輸出寫入文件。
如果您使用 GNU time 命令,-o選項將讓您做到這一點——它將創建一個新的輸出文件,其中包含有關其他命令的信息。
例如,輸入以下命令將hostinger.com的ping信息及其進程的詳細信息保存到一個新文件中:
$ time -o hostinger-ping-info.log ping hostinger.com
請注意,如果您使用 Bash shell 并想使用 -o 或任何其他選項,則必須使用顯式路徑usr/bin/time而不是僅使用time來調用外部時間命令。
$ usr/bin/time -o hostinger-ping-info.log ping hostinger.com
要檢查hostinger-ping-info.log的內容,請使用cat命令:
$ cat hostinger-ping-info.log
在文件中獲取詳細輸出
默認時間命令輸出可能不包含您想了解的有關特定進程的所有詳細信息。要顯示詳細輸出,請將 -v 選項添加到 Linux 中的時間命令。
例如,如果要查找hostinger.com的ping或響應時間,并查看進程的詳細信息,請輸入以下命令:
$ time -v ping hostinger.com
如果您不使用 GNU 時間命令或遇到標準錯誤流,請嘗試通過輸入完整路徑usr/bin/time來觸發外部時間命令:
$ usr/bin/time -v ping hostinger.com
或者,用戶可以使用以下輸出格式選項自定義他們希望在輸入時間命令時在輸出中看到的信息類型:
% | 文字“%”。 |
C | 正在計時的命令的名稱和命令行參數。 |
丁 | d 進程非共享數據區的平均大小,以千字節為單位。 |
和 | 進程使用的經過的實際(掛鐘)時間,以(小時:)分鐘:秒為單位。 |
F | 進程運行時發生的主要頁面錯誤或需要 I/O 的頁面錯誤的數量。這些是頁面已遷移出主內存的故障。 |
我 | 進程輸入的文件系統的第 i 個數。 |
鉀 | 進程的平均總內存使用量(以千字節為單位)。 |
米 | 進程在其生命周期內的最大駐留集大小,以千字節為單位。 |
歐 | 進程輸出的文件系統數量。 |
P | 此作業獲得的 CPU 百分比。這只是用戶和系統時間除以總運行時間。它還打印一個百分號。 |
R | 次要或可恢復頁面錯誤的數量。這些是無效但尚未被其他虛擬頁面聲明的頁面。因此頁面上的數據仍然正確,但必須更新系統表。 |
小號 | 系統代表進程(在內核模式下)使用的 CPU 秒總數,以秒為單位。 |
在 | 進程直接使用(在用戶模式下)的 CPU 秒總數,以秒為單位。 |
在 | 進程被換出主內存的次數。 |
X | 進程中共享文本的平均數量(以千字節為單位)。 |
和 | z 系統的頁面大小,以字節為單位。作為每個系統的常量,它可能因系統而異。 |
C | 進程非自愿上下文切換的次數(因為時間片已過期)。 |
這是 | 進程使用的實際(掛鐘)時間,以秒為單位。 |
k | 傳遞給進程的信號數。 |
p | 進程的平均非共享堆棧大小,以千字節為單位。 |
r | 進程收到的套接字消息數。 |
秒 | 進程發送的套接字消息數。 |
噸 | 進程的平均駐留集大小,以千字節為單位。 |
在 | 程序主動進行上下文切換的次數,例如,在等待 I/O 操作完成時。 |
X | 命令的退出狀態。 |
例如,如果要顯示命令接收到的套接字消息數,請在 shell 中輸入以下內容:
$ /usr/bin/time -f “接收到的套接字消息:%r”命令
或者,如果您使用 Bash shell,您可能更喜歡內置時間命令的 TIMEFORMAT。TIMEFORMAT 使用特定的格式字符串讓用戶指定計時信息的顯示方式。
下面是 TIMEFORMAT 參數值的列表:
%% | 一個字面的 %。 |
%[p][l]R | 經過的時間(以秒為單位)。 |
%[p][l]U | 進程在用戶模式下花費的 CPU 秒數。 |
%[p][l]S | 進程在系統模式下花費的 CPU 秒數。 |
%P | CPU 百分比,計算方式為 (%U + %S) / %R。 |
結論
Linux 中的 time 命令是檢查特定進程的執行時間和整體性能的絕佳工具。在本指南中,您了解了 Linux 時間命令、它的用途、語法和輸出。我們希望本指南能幫助您了解如何更有效地駕馭 Linux 系統。