Linux 内置一个名为 time
的命令,它可以用来测量命令的执行时间。使用 time
命令非常简单,只需要在要测量的命令前面加上 time
关键字即可。例如,我们想测量 ls
命令的执行时间,可以运行以下命令:
time ls
执行完毕后,我们会看到类似如下的输出信息:
real 0m0.002s
user 0m0.000s
sys 0m0.002s
这个输出包含三个指标:
通过这三个指标,我们可以了解命令的整体执行时间以及在用户模式和内核模式下的执行时间。
除直接在命令前加 time
关键字,我们还可以通过手动调用 time
命令来测量命令的执行时间。这种方式更加灵活,可以用于需要更复杂的输出格式或者需要测量多个命令的场景。
例如,我们想测量 ls
命令的执行时间并将结果保存到一个文件中,可以运行以下命令:
/usr/bin/time -o time_result.txt ls
这里我们使用 /usr/bin/time
命令,并通过 -o
参数指定输出文件的路径。执行完成后,我们可以查看 time_result.txt
文件中的内容,其内容与前面直接使用 time
命令的输出相同。
除输出到文件,我们还可以通过 -f
参数自定义输出格式。例如,我们想输出命令名称、实际执行时间和用户 CPU 时间,可以使用以下命令:
/usr/bin/time -f "%C\nReal time: %e s\nUser time: %U s" ls
这样,我们就可以得到如下格式的输出:
ls
Real time: 0.002 s
User time: 0.000 s
除使用 time
命令,Linux 系统还提供其他一些方法来测量命令的执行时间。
Bash shell 提供一个名为 TIMEFORMAT
的内置变量,可以用于自定义 time
命令的输出格式。例如,我们可以设置 TIMEFORMAT
变量来只显示实际执行时间:
TIMEFORMAT=%E
time ls
这样,我们就只会看到类似 0.002s
的输出,而不会看到用户 CPU 时间和系统 CPU 时间。
strace
命令是一个强大的系统调用跟踪工具,它不仅可以输出命令的执行情况,还可以统计命令的执行时间。例如,我们可以使用以下命令来测量 ls
命令的执行时间:
strace -tT ls
输出结果如下:
19:20:45.123456 execve("/usr/bin/ls", ["ls"], 0x7ffee6315090 /* 23 vars */) = 0 <0.000203>
19:20:45.123659 open("/etc", O_RDONLY|O_CLOEXEC) = 3 <0.000032>
19:20:45.123691 close(3) = 0 <0.000008>
19:20:45.123699 stat("/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 <0.000035>
19:20:45.123734 write(1, "bin\tdoc\tetc\tinclude\tlib\tlib64"..., 4096) = 4096 <0.000090>
19:20:45.123824 close(1) = 0 <0.000009>
19:20:45.123833 close(2) = 0 <0.000008>
19:20:45.123841 exit_group(0) = ?
其中,<0.000203>
表示 execve
系统调用的执行时间为 0.000203 秒。通过分析这些系统调用的执行时间,我们可以了解命令的整体执行情况。
Linux 系统提供多种方式来测量命令的执行时间,包括使用内置的 time
命令、调用 time
命令以及使用 Bash 的内置变量和 strace
命令等。通过这些方法,我们可以了解命令的整体执行时间以及在用户模式和内核模式下的执行时间,从而更好地优化系统性能和诊断问题。选择合适的方式取决于具体的需求,比如是否需要自定义输出格式或者需要更细致的系统调用跟踪信息。无论使用哪种方式,学会测量命令执行时间都是一项非常实用的 Linux 技能。