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