PRF:20181107 How To Find The Execution Time Of A Command Or Process In Linux.md

@caixiangyue 恭喜您完成了第一篇翻译。
This commit is contained in:
Xingyu.Wang 2018-11-21 15:59:49 +08:00
parent 1e841b031b
commit d7fce0699c

View File

@ -1,24 +1,25 @@
linux中如何查找一个命令或进程的执行时间
Linux 中如何查找一个命令或进程的执行时间
======
![](https://www.ostechnix.com/wp-content/uploads/2018/11/time-command-720x340.png)
你可能知道一个命令或进程开始执行的时间和在类Unix系统中[**一个命令运行了多久**][1]。 但是,你如何知道这个命令或进程何时结束或者它完成运行所花费的总时间呢? 在类Unix系统中,这是非常容易的! 有一个程序专门为此设计名叫 **GNU time**。 使用time程序, 我们可以轻松地测量Linux操作系统中命令或程序的总执行时间。 time命令在大多数Linux发行版中都有预装, 所以你不必去安装它。
在类 Unix 系统中,你可能知道一个命令或进程开始执行的时间,以及[一个进程运行了多久][1]。 但是,你如何知道这个命令或进程何时结束或者它完成运行所花费的总时长呢? 在类 Unix 系统中,这是非常容易的! 有一个专门为此设计的程序名叫 **GNU time**。 使用 `time` 程序,我们可以轻松地测量 Linux 操作系统中命令或程序的总执行时间。 `time` 命令在大多数 Linux 发行版中都有预装,所以你不必去安装它。
### 在 Linux 中查找一个命令或进程的执行时间
要测量一个命令或程序的执行时间,运行
要测量一个命令或程序的执行时间,运行
```
$ /usr/bin/time -p ls
```
或者,
或者
```
$ time ls
```
输出样例:
输出样例
```
dir1 dir2 file1 file2 mcelog
@ -26,7 +27,9 @@ dir1 dir2 file1 file2 mcelog
real 0m0.007s
user 0m0.001s
sys 0m0.004s
```
```
$ time ls -a
. .bash_logout dir1 file2 mcelog .sudo_as_admin_successful
.. .bashrc dir2 .gnupg .profile .wget-hsts
@ -37,23 +40,25 @@ user 0m0.001s
sys 0m0.005s
```
以上命令显示出了 **ls** 命令的总执行时间。 你可以将 “ls” 替换为任何命令或进程,以查找总的执行时间。
以上命令显示出了 `ls` 命令的总执行时间。 你可以将 `ls` 替换为任何命令或进程,以查找总的执行时间。
输出详解:
1. **real** -指的是命令或程序所花费的总时间
2. **user** 指的是在用户模式下程序所花费的时间,
3. **sys** 指的是在内核模式下程序所花费的时间
1. `real` —— 指的是命令或程序所花费的总时间
2. `user` —— 指的是在用户模式下程序所花费的时间
3. `sys` —— 指的是在内核模式下程序所花费的时间
我们也可以将命令限制为仅运行一段时间。
我们也可以将命令限制为仅运行一段时间。参考如下教程了解更多细节:
### time vs /usr/bin/time
- [在 Linux 中如何让一个命令运行特定的时长](https://www.ostechnix.com/run-command-specific-time-linux/)
你可能注意到了, 我们在上面的例子中使用了两个命令 **time** and **/usr/bin/time** 。 所以,你可能会想知道他们的不同。
### time 与 /usr/bin/time
首先, 让我们使用 type 命令看看 time 命令到底是什么。对于那些我们不知道的Linux命令, **Type** 命令用于查找相关命令的信息。 更多详细信息, [**请参阅本指南**][2]。
你可能注意到了, 我们在上面的例子中使用了两个命令 `time``/usr/bin/time` 。 所以,你可能会想知道他们的不同。
首先, 让我们使用 `type` 命令看看 `time` 命令到底是什么。对于那些我们不了解的 Linux 命令,`type` 命令用于查找相关命令的信息。 更多详细信息,[请参阅本指南][2]。
```
$ type -a time
@ -61,41 +66,37 @@ time is a shell keyword
time is /usr/bin/time
```
正如你在上面的输出中看到的一样, 这两个都是time,
正如你在上面的输出中看到的一样`time` 是两个东西:
* 一个是 BASH shell 中内建的关键字
* 一个是可执行文件 如 **/usr/bin/time**
* 一个是可执行文件,如 `/usr/bin/time`
由于 shell 关键字的优先级高于可执行文件,当你没有给出完整路径只运行 `time` 命令时,你运行的是 shell 内建的命令。 但是,当你运行 `/usr/bin/time` 时,你运行的是真正的 **GNU time** 命令。 因此,为了执行真正的命令你可能需要给出完整路径。
在大多数 shell 中如 BASH、ZSH、CSH、KSH、TCSH 等,内建的关键字 `time` 是可用的。 `time` 关键字的选项少于该可执行文件,你可以使用的唯一选项是 `-p`
由于shell关键字的优先级高于可执行文件, 当你没有给出完整路径只运行`time`命令时, 你运行的是shell内建的命令。 但是,当你运行 `/usr/bin/time`时, 你运行的是真正的 **GNU time** 命令。 因此,为了执行真正的命令你可能需要给出完整路径。
你现在知道了如何使用 `time` 命令查找给定命令或进程的总执行时间。 想进一步了解 GNU time 工具吗? 继续阅读吧!
在大多数shell中如 BASH, ZSH, CSH, KSH, TCSH 等内建的关键字time是可用的。 time 关键字的选项少于可执行文件. 你可以使用的唯一选项是 **-p**。
### 关于 GNU time 程序的简要介绍
你现在知道如何使用 time 命令查找给定命令或进程的总执行时间。 想进一步了解 GNU time 工具吗? 继续阅读吧!
GNU time 程序运行带有给定参数的命令或程序,并在命令完成后将系统资源使用情况汇总到标准输出。 与 `time` 关键字不同GNU time 程序不仅显示命令或进程的执行时间还显示内存、I/O 和 IPC 调用等其他资源。
### 关于 GNU time 程序的简要介绍
Gnu time程序运行带有给定参数的命令或程序并在命令完成后将系统资源使用情况汇总到标准输出。 与 time 关键字不同, Gnu time程序不仅显示命令或进程的执行时间还显示内存I/O和IPC调用等其他资源。
time 命令的语法是:
`time` 命令的语法是:
```
/usr/bin/time [options] command [arguments...]
```
语法中的options是指一组可以与time命令一起使用去执行特定功能的选项。 下面给出了可用的options
上述语法中的 `options` 是指一组可以与 `time` 命令一起使用去执行特定功能的选项。 下面给出了可用的选项:
* **-f, format** 使用此选项可以根据需求指定输出格式。
* **-p, portability** 使用简要的输出格式。
* **-o file, output=FILE** 将输出写到指定文件中而不是到标准输出。
* **-a, append** 将输出追加到文件中而不是覆盖它。
* **-v, verbose** 此选项显示 time 命令输出的详细信息。
* **quiet** 此选项可以防止 time 命令报告程序的状态.
* `-f, format` —— 使用此选项可以根据需求指定输出格式。
* `-p, portability` —— 使用简要的输出格式。
* `-o file, output=FILE` —— 将输出写到指定文件中而不是到标准输出。
* `-a, append` —— 将输出追加到文件中而不是覆盖它。
* `-v, verbose` —— 此选项显示 `time` 命令输出的详细信息。
* `quiet` 此选项可以防止 `time` 命令报告程序的状态.
当不带任何选项使用 GNU time 命令时, 你将看到以下输出。
当不带任何选项使用 GNU time 命令时,你将看到以下输出。
```
$ /usr/bin/time wc /etc/hosts
@ -104,7 +105,7 @@ $ /usr/bin/time wc /etc/hosts
0inputs+0outputs (0major+73minor)pagefaults 0swaps
```
如果你用shell关键字 time 运行相同的命令, 输出会有一点儿不同:
如果你用 shell 关键字 `time` 运行相同的命令, 输出会有一点儿不同:
```
$ time wc /etc/hosts
@ -115,14 +116,14 @@ user 0m0.001s
sys 0m0.004s
```
有时,你可能希望将系统资源使用情况输出到文件中而不是终端上。 为此, 你可以使用 **-o** 选项,如下所示。
有时,你可能希望将系统资源使用情况输出到文件中而不是终端上。 为此 你可以使用 `-o` 选项,如下所示。
```
$ /usr/bin/time -o file.txt ls
dir1 dir2 file1 file2 file.txt mcelog
```
正如你看到的, time命令不会显示到终端上. 因为我们将输出写到了file.txt的文件中。 让我们看一下这个文件的内容:
正如你看到的`time` 命令不会显示到终端上。因为我们将输出写到了`file.txt` 的文件中。 让我们看一下这个文件的内容:
```
$ cat file.txt
@ -130,15 +131,15 @@ $ cat file.txt
0inputs+0outputs (0major+106minor)pagefaults 0swaps
```
当你使用 **-o** 选项时, 如果你没有一个文件名叫 file.txt, 它会创建一个并把输出写进去。 如果文件存在, 它会覆盖文件原来的内容。
当你使用 `-o` 选项时, 如果你没有一个名为 `file.txt` 的文件,它会创建一个并把输出写进去。如果文件存在,它会覆盖文件原来的内容。
你可以使用 **-a** 选项将输出追加到文件后面,而不是覆盖它的内容。
你可以使用 `-a` 选项将输出追加到文件后面,而不是覆盖它的内容。
```
$ /usr/bin/time -a file.txt ls
```
**-f** 选项允许用户根据自己的喜好控制输出格式。 比如说, 以下命令的输出仅显示用户,系统和总时间。
`-f` 选项允许用户根据自己的喜好控制输出格式。 比如说,以下命令的输出仅显示用户,系统和总时间。
```
$ /usr/bin/time -f "\t%E real,\t%U user,\t%S sys" ls
@ -146,15 +147,15 @@ dir1 dir2 file1 file2 mcelog
0:00.00 real, 0.00 user, 0.00 sys
```
请注意shell中内建的 time 命令并不具有Gnu time程序的所有功能。
请注意 shell 中内建的 `time` 命令并不具有 GNU time 程序的所有功能。
有关Gnu time程序的详细说明可以使用man命令来查看。
有关 GNU time 程序的详细说明可以使用 `man` 命令来查看。
```
$ man time
```
想要了解有关Bash 内建 Time 关键字的更多信息, 请运行:
想要了解有关 Bash 内建 `time` 关键字的更多信息,请运行:
```
$ help time
@ -175,7 +176,7 @@ via: https://www.ostechnix.com/how-to-find-the-execution-time-of-a-command-or-pr
作者:[SK][a]
选题:[lujun9972][b]
译者:[caixiangyue](https://github.com/caixiangyue)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出