无论您是系统管理员还是虚拟专用服务器 (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 系统。