無論您是系統(tǒng)管理員還是虛擬專用服務(wù)器 (VPS)用戶,學(xué)習(xí)各種Linux 命令將幫助您更高效地執(zhí)行任務(wù)。在本教程中,您將了解 Linux 時(shí)間命令——它是什么、用途以及如何使用它。

什么是Linux時(shí)間命令?在Linux中使用時(shí)間命令-南華中天

什么是 Linux 時(shí)間命令?

Linux 和類 Unix 操作系統(tǒng)中的時(shí)間命令可讓您確定特定命令的運(yùn)行時(shí)間。通常,它用于衡量腳本或命令的性能。命令完成任務(wù)的速度越快,其性能就越好。

此外,time 命令還可以顯示進(jìn)程的系統(tǒng)資源使用情況,使其成為查看特定命令效率的有用工具。例如,您想在可以運(yùn)行同一任務(wù)的兩個(gè)cron 作業(yè)之間進(jìn)行選擇。您可以通過運(yùn)行 time 命令來確定每個(gè) cron 作業(yè)完成任務(wù)所需的時(shí)間。

然而,在我們開始討論如何使用 Linux 時(shí)間命令之前,請(qǐng)記住它因您使用的 shell 而異。Linux系統(tǒng)中time命令有3個(gè)不同版本:

  • 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獲得。

要檢查哪個(gè) Linux 時(shí)間命令版本適用于您的系統(tǒng),請(qǐng)?jiān)谀?shell 程序中輸入以下內(nèi)容:

$ 輸入時(shí)間
  • 如果你得到輸出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)建別名命令來簡(jiǎn)化 Linux 中的 GNU time 命令。

在 Linux 中使用時(shí)間命令

在本節(jié)中,您將學(xué)習(xí) Linux time 命令的語(yǔ)法以及如何讀取其輸出。

了解 Linux 時(shí)間命令的語(yǔ)法

使用 time 命令非常簡(jiǎn)單——你所要做的就是打開你的 shell 程序并輸入:

$時(shí)間

要充分利用 time 命令,您必須了解其語(yǔ)法:

$時(shí)間
         [arg1] [arg2] ... [argN]
時(shí)間[選項(xiàng)]
         [arg1] [arg2] ... [argN]

Time使用任何給定的參數(shù) (?arg?)運(yùn)行給定的命令。命令完成其任務(wù)后,時(shí)間會(huì)輸出信息,其中包括運(yùn)行命令所花費(fèi)的持續(xù)時(shí)間及其使用的資源。

如果程序命令以指示失敗的非零狀態(tài)退出,時(shí)間將輸出警告消息和退出狀態(tài)。

通過輸入命令使用的字符串格式,您可以確定在系統(tǒng)資源使用部分顯示哪些信息。

如果用戶未指定任何格式,但設(shè)置了時(shí)間環(huán)境變量,則其值將用作格式。否則,將使用時(shí)間內(nèi)置的默認(rèn)格式。

選項(xiàng)是改變時(shí)間輸出的資源說明符。它們必須出現(xiàn)在命令之前。命令后輸入的任何內(nèi)容都將被視為參數(shù)。

要查看可用于時(shí)間的所有選項(xiàng),請(qǐng)?jiān)诿钚兄休斎胍韵聝?nèi)容:

$ 人工時(shí)間

您將看到可用于修改 Linux 時(shí)間命令輸出的選項(xiàng)列表。但是,請(qǐng)記住,這些選項(xiàng)可能會(huì)因特定操作系統(tǒng)和您使用的版本而異。

什么是Linux時(shí)間命令?在Linux中使用時(shí)間命令-南華中天

讓我們從一個(gè)簡(jiǎn)單的第一個(gè)例子開始。要了解運(yùn)行用于顯示所選目錄內(nèi)容的命令ls需要多長(zhǎng)時(shí)間,請(qǐng)?jiān)?shell 中輸入以下命令:

$ 時(shí)間 ls
什么是Linux時(shí)間命令?在Linux中使用時(shí)間命令-南華中天

您將看到 ls 命令的輸出以及完成它所花費(fèi)的時(shí)間。

現(xiàn)在,讓我們?cè)囍尤胍粋€(gè)論點(diǎn)。在此示例中,我們將嘗試找出將文件移動(dòng)到不同目錄需要多長(zhǎng)時(shí)間:

$ time mv example.txt 示例目錄
什么是Linux時(shí)間命令?在Linux中使用時(shí)間命令-南華中天

因此,example.txt文件已移至example-dir,您將看到完成該過程所花費(fèi)的時(shí)間。

了解輸出

要完全了解 Linux 時(shí)間命令的好處,您必須知道如何閱讀它的輸出。

讀取終端中的輸出

內(nèi)置時(shí)間命令的默認(rèn)輸出包含以下信息:

  • 實(shí)時(shí)(real)。流程從開始運(yùn)行到結(jié)束所需的實(shí)際時(shí)間。這包括其他進(jìn)程所花費(fèi)的任何時(shí)間以及等待它們完成所花費(fèi)的時(shí)間。
  • 用戶時(shí)間(用戶)。進(jìn)程期間在用戶模式下花費(fèi)的 CPU 時(shí)間量。不包括其他進(jìn)程和阻塞時(shí)間。
  • 系統(tǒng)時(shí)間 (sys)。進(jìn)程期間在內(nèi)核模式下花費(fèi)的總 CPU 時(shí)間。與用戶時(shí)間類似,不統(tǒng)計(jì)其他進(jìn)程和被其他進(jìn)程阻塞的時(shí)間。

這是一個(gè)例子。如果我們?cè)诿钚兄休斎胍韵旅?,系統(tǒng)會(huì)下載開源虛擬機(jī)程序VirtualBox的安裝程序:

$時(shí)間 wget https://download.virtualbox.org/virtualbox/6.1.28/virtualbox-6.1_6.1.28-147628~Ubuntu~eoan_amd64.deb
什么是Linux時(shí)間命令?在Linux中使用時(shí)間命令-南華中天

下載完成后,你會(huì)看到三個(gè)數(shù)字——real、user、sys。如您所見,它們以分鐘和秒為單位顯示下載期間在實(shí)際、用戶和系統(tǒng)模式下經(jīng)過的時(shí)間。

將輸出寫入文件

有時(shí),您可能希望保存使用時(shí)間收到的信息。幸運(yùn)的是,有一個(gè)格式選項(xiàng)可以讓您將命令輸出寫入文件。

如果您使用 GNU time 命令,-o選項(xiàng)將讓您做到這一點(diǎn)——它將創(chuàng)建一個(gè)新的輸出文件,其中包含有關(guān)其他命令的信息。

例如,輸入以下命令將hostinger.com的ping信息及其進(jìn)程的詳細(xì)信息保存到一個(gè)新文件中:

$ time -o hostinger-ping-info.log ping hostinger.com

請(qǐng)注意,如果您使用 Bash shell 并想使用 -o 或任何其他選項(xiàng),則必須使用顯式路徑usr/bin/time而不是僅使用time來調(diào)用外部時(shí)間命令。

$ usr/bin/time -o hostinger-ping-info.log ping hostinger.com

要檢查hostinger-ping-info.log的內(nèi)容,請(qǐng)使用cat命令:

$ cat hostinger-ping-info.log

在文件中獲取詳細(xì)輸出

默認(rèn)時(shí)間命令輸出可能不包含您想了解的有關(guān)特定進(jìn)程的所有詳細(xì)信息。要顯示詳細(xì)輸出,請(qǐng)將 -v 選項(xiàng)添加到 Linux 中的時(shí)間命令。

例如,如果要查找hostinger.com的ping或響應(yīng)時(shí)間,并查看進(jìn)程的詳細(xì)信息,請(qǐng)輸入以下命令:

$ time -v ping hostinger.com

如果您不使用 GNU 時(shí)間命令或遇到標(biāo)準(zhǔn)錯(cuò)誤流,請(qǐng)嘗試通過輸入完整路徑usr/bin/time來觸發(fā)外部時(shí)間命令:

$ usr/bin/time -v ping hostinger.com

或者,用戶可以使用以下輸出格式選項(xiàng)自定義他們希望在輸入時(shí)間命令時(shí)在輸出中看到的信息類型:

% 文字“%”。
C 正在計(jì)時(shí)的命令的名稱和命令行參數(shù)。
d 進(jìn)程非共享數(shù)據(jù)區(qū)的平均大小,以千字節(jié)為單位。
進(jìn)程使用的經(jīng)過的實(shí)際(掛鐘)時(shí)間,以(小時(shí):)分鐘:秒為單位。
F 進(jìn)程運(yùn)行時(shí)發(fā)生的主要頁(yè)面錯(cuò)誤或需要 I/O 的頁(yè)面錯(cuò)誤的數(shù)量。這些是頁(yè)面已遷移出主內(nèi)存的故障。
進(jìn)程輸入的文件系統(tǒng)的第 i 個(gè)數(shù)。
進(jìn)程的平均總內(nèi)存使用量(以千字節(jié)為單位)。
進(jìn)程在其生命周期內(nèi)的最大駐留集大小,以千字節(jié)為單位。
進(jìn)程輸出的文件系統(tǒng)數(shù)量。
P 此作業(yè)獲得的 CPU 百分比。這只是用戶和系統(tǒng)時(shí)間除以總運(yùn)行時(shí)間。它還打印一個(gè)百分號(hào)。
R 次要或可恢復(fù)頁(yè)面錯(cuò)誤的數(shù)量。這些是無效但尚未被其他虛擬頁(yè)面聲明的頁(yè)面。因此頁(yè)面上的數(shù)據(jù)仍然正確,但必須更新系統(tǒng)表。
小號(hào) 系統(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)的頁(yè)面大小,以字節(jié)為單位。作為每個(gè)系統(tǒng)的常量,它可能因系統(tǒng)而異。
C 進(jìn)程非自愿上下文切換的次數(shù)(因?yàn)闀r(shí)間片已過期)。
這是 進(jìn)程使用的實(shí)際(掛鐘)時(shí)間,以秒為單位。
k 傳遞給進(jìn)程的信號(hào)數(shù)。
p 進(jìn)程的平均非共享堆棧大小,以千字節(jié)為單位。
r 進(jìn)程收到的套接字消息數(shù)。
進(jìn)程發(fā)送的套接字消息數(shù)。
進(jìn)程的平均駐留集大小,以千字節(jié)為單位。
程序主動(dòng)進(jìn)行上下文切換的次數(shù),例如,在等待 I/O 操作完成時(shí)。
X 命令的退出狀態(tài)。

例如,如果要顯示命令接收到的套接字消息數(shù),請(qǐng)?jiān)?shell 中輸入以下內(nèi)容:

$ /usr/bin/time -f “接收到的套接字消息:%r”命令

或者,如果您使用 Bash shell,您可能更喜歡內(nèi)置時(shí)間命令的 TIMEFORMAT。TIMEFORMAT 使用特定的格式字符串讓用戶指定計(jì)時(shí)信息的顯示方式。

下面是 TIMEFORMAT 參數(shù)值的列表:

%% 一個(gè)字面的 %。
%[p][l]R 經(jīng)過的時(shí)間(以秒為單位)。
%[p][l]U 進(jìn)程在用戶模式下花費(fèi)的 CPU 秒數(shù)。
%[p][l]S 進(jìn)程在系統(tǒng)模式下花費(fèi)的 CPU 秒數(shù)。
%P CPU 百分比,計(jì)算方式為 (%U + %S) / %R。

結(jié)論

Linux 中的 time 命令是檢查特定進(jìn)程的執(zhí)行時(shí)間和整體性能的絕佳工具。在本指南中,您了解了 Linux 時(shí)間命令、它的用途、語(yǔ)法和輸出。我們希望本指南能幫助您了解如何更有效地駕馭 Linux 系統(tǒng)。