0%

远看高低各不同 diff

.. note::
草色烟光残照里,无言谁会凭阑意
宋代 柳永《蝶恋花·伫倚危楼风细细》

Linux diff 命令用于比较文件的差异。

当然还有很多比较文件的专业工具,但是如果在Linux命令行,这个是最原始最初的,也是开机即用的。

官方定义为:

GNU diff - compare files line by line

diff 会以逐行的方式,比较文本文件的不同。

如果指定要比较目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录。

语法

1
$ diff [OPTION]... FILES

参数

  • -c 显示所有内容,并标出不同之处。
  • -u 以合并的方式来显示文件内容的不同。
  • -y--side-by-side  两列输出显示文件的异同之处。

假定有两个文件ab,内容分别为:

1
2
3
4
5
6
7
8
9
$ cat a
This is a.
Hello a.
Hello World.

$ cat b
This is b.
Hello b.
Hello World.

默认比较两个文件

默认情况下,直接输入下面命令即可:

1
2
3
4
5
6
7
8
9
$  diff a b
1,2c1,2
< This is a.
< Hello a.
---
> This is b.
> Hello b.
3a4
> One more line.

可以看到1,2c1,2,中间有一个字母c3a4,中间有一个字母a

那么ac什么含义呢,中间的字母表示需要在第一个文件上做的操作(a=add,c=change,d=delete),然后才有后面的文件一致。

所以1,2c1,2表示1,2行更换后一致;3a4表示,增加一行后一致。

并排显示方便比较

这种方式相对而言,就很亲民了,左右两边两列方便比对。

1
2
3
4
5
$ diff a b -y
This is a. | This is b.
Hello a. | Hello b.
Hello World. Hello World.
> One more line.

那么:

  • “|”表示前后2个文件内容有不同;

  • “<”表示后面文件比前面文件少了1行内容

  • “>”表示后面文件比前面文件多了1行内容

context模式比较

这种模式会输出所有的文件内容,并显示不同之处,还包括具体的时间。

如下*** 表示a的内容,--- 表示b的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ diff a b -c
*** a 2013-03-04 23:20:20.322345200 +0800
--- b 2013-03-04 23:26:30.712130000 +0800
***************
*** 1,3 ****
! This is a.
! Hello a.
Hello World.
--- 1,4 ----
! This is b.
! Hello b.
Hello World.
+ One more line.

unified模式比较

这种模式会混合输出所有的文件内容,并显示不同之处,还包括具体的时间。

如下--- 表示a的内容,+++ 表示b的内容。

1
2
3
4
5
6
7
8
9
10
$  diff a b -u
--- a 2013-03-04 23:20:20.322345200 +0800
--- b 2013-03-04 23:26:30.712130000 +0800
@@ -1,3 +1,4 @@
-This is a.
-Hello a.
+This is b.
+Hello b.
Hello World.
+One more line.

对比时忽略空格

1
2
3
4
5
# diff -w name_list.txt name_list_new.txt

2c2,3
< John Doe --- > John M Doe
> Jason Bourne

Linux diff 命令

Linux diff 命令用于比较文件的差异。

当然还有很多比较文件的专业工具,但是如果在Linux命令行,这个是最原始最初的,也是开机即用的。

官方定义为:

GNU diff - compare files line by line

diff 会以逐行的方式,比较文本文件的不同。

如果指定要比较目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录。

语法

1
$ diff [OPTION]... FILES

参数

  • -c 显示所有内容,并标出不同之处。
  • -u 以合并的方式来显示文件内容的不同。
  • -y--side-by-side  两列输出显示文件的异同之处。

假定有两个文件ab,内容分别为:

1
2
3
4
5
6
7
8
9
$ cat a
This is a.
Hello a.
Hello World.

$ cat b
This is b.
Hello b.
Hello World.

默认比较两个文件

默认情况下,直接输入下面命令即可:

1
2
3
4
5
6
7
8
9
$  diff a b
1,2c1,2
< This is a.
< Hello a.
---
> This is b.
> Hello b.
3a4
> One more line.

可以看到1,2c1,2,中间有一个字母c3a4,中间有一个字母a

那么ac什么含义呢,中间的字母表示需要在第一个文件上做的操作(a=add,c=change,d=delete),然后才有后面的文件一致。

所以1,2c1,2表示1,2行更换后一致;3a4表示,增加一行后一致。

并排显示方便比较

这种方式相对而言,就很亲民了,左右两边两列方便比对。

1
2
3
4
5
$ diff a b -y
This is a. | This is b.
Hello a. | Hello b.
Hello World. Hello World.
> One more line.

那么:

  • “|”表示前后2个文件内容有不同;

  • “<”表示后面文件比前面文件少了1行内容

  • “>”表示后面文件比前面文件多了1行内容

context模式比较

这种模式会输出所有的文件内容,并显示不同之处,还包括具体的时间。

如下*** 表示a的内容,--- 表示b的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ diff a b -c
*** a 2013-03-04 20:30:20.322345200 +0800
+++ b 2013-03-04 20:26:30.712130000 +0800
***************
*** 1,3 ****
! This is a.
! Hello a.
Hello World.
--- 1,4 ----
! This is b.
! Hello b.
Hello World.
+ One more line.

unified模式比较

这种模式会混合输出所有的文件内容,并显示不同之处,还包括具体的时间。

如下--- 表示a的内容,+++ 表示b的内容。

1
2
3
4
5
6
7
8
9
10
$  diff a b -u
--- a 2013-03-04 20:30:20.322345200 +0800
+++ b 2013-03-04 20:26:30.712130000 +0800
@@ -1,3 +1,4 @@
-This is a.
-Hello a.
+This is b.
+Hello b.
Hello World.
+One more line.
  • -<行数>  指定要显示多少行的文本。此参数必须与-c或-u参数一并使用。

  • -a或–text  diff预设只会逐行比较文本文件。

  • -b或–ignore-space-change  不检查空格字符的不同。

  • -B或–ignore-blank-lines  不检查空白行。

  • -C<行数>或–context<行数>  与执行”-c-<行数>”指令相同。

  • -d或–minimal  使用不同的演算法,以较小的单位来做比较。

  • -D<巨集名称>或ifdef<巨集名称>  此参数的输出格式可用于前置处理器巨集。

  • -e或–ed  此参数的输出格式可用于ed的script文件。

  • -f或-forward-ed  输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处。

  • -H或–speed-large-files  比较大文件时,可加快速度。

  • -I<字符或字符串>或–ignore-matching-lines<字符或字符串>  若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异。

  • -i或–ignore-case  不检查大小写的不同。

  • -l或–paginate  将结果交由pr程序来分页。

  • -n或–rcs  将比较结果以RCS的格式来显示。

  • -N或–new-file  在比较目录时,若文件A仅出现在某个目录中,预设会显示:

  • Only in目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。

  • -p  若比较的文件为C语言的程序码文件时,显示差异所在的函数名称。

  • -P或–unidirectional-new-file  与-N类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空白的文件做比较。

  • -r或–recursive  比较子目录中的文件。

  • -s或–report-identical-files  若没有发现任何差异,仍然显示信息。

  • -S<文件>或–starting-file<文件>  在比较目录时,从指定的文件开始比较。

  • -t或–expand-tabs  在输出时,将tab字符展开。

  • -T或–initial-tab  在每行前面加上tab字符以便对齐。

  • -w或–ignore-all-space  忽略全部的空格字符。

  • -W<宽度>或–width<宽度>  在使用-y参数时,指定栏宽。

  • -x<文件名或目录>或–exclude<文件名或目录>  不比较选项中所指定的文件或目录。

  • -X<文件>或–exclude-from<文件>  您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件。

  • –left-column  在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容。

  • –suppress-common-lines  在使用-y参数时,仅显示不同之处。

     Mandatory arguments to long options are mandatory for short options too.
    
     --normal
            output a normal diff (the default)
    
     -q, --brief
            report only when files differ
    
     -s, --report-identical-files
            report when two files are the same
    
     -c, -C NUM, --context[=NUM]
            output NUM (default 3) lines of copied context
    
     -e, --ed
            output an ed script
    
     -n, --rcs
            output an RCS format diff
    
     -W, --width=NUM
            output at most NUM (default 130) print columns
    
     --left-column
            output only the left column of common lines
    
     --suppress-common-lines
            do not output common lines
    
     -p, --show-c-function
            show which C function each change is in
             -F, --show-function-line=RE
                show the most recent line matching RE
    
         --label LABEL
                use LABEL instead of file name and timestamp (can be repeated)
    
         -t, --expand-tabs
                expand tabs to spaces in output
    
         -T, --initial-tab
                make tabs line up by prepending a tab
    
         --tabsize=NUM
                tab stops every NUM (default 8) print columns
    
         --suppress-blank-empty
                suppress space or tab before empty output lines
    
         -l, --paginate
                pass output through 'pr' to paginate it
    
         -r, --recursive
                recursively compare any subdirectories found
    
         --no-dereference
                don't follow symbolic links
    
         -N, --new-file
                treat absent files as empty
    
         --unidirectional-new-file
                treat absent first files as empty
    
         --ignore-file-name-case
                ignore case when comparing file names
    
         --no-ignore-file-name-case
                consider case when comparing file names
    
         -x, --exclude=PAT
                exclude files that match PAT
    
         -X, --exclude-from=FILE
                exclude files that match any pattern in FILE
    
         -S, --starting-file=FILE
                start with FILE when comparing directories
                
                 --from-file=FILE1
                compare FILE1 to all operands; FILE1 can be a directory
    
         --to-file=FILE2
                compare all operands to FILE2; FILE2 can be a directory
    
         -i, --ignore-case
                ignore case differences in file contents
    
         -E, --ignore-tab-expansion
                ignore changes due to tab expansion
    
         -Z, --ignore-trailing-space
                ignore white space at line end
    
         -b, --ignore-space-change
                ignore changes in the amount of white space
    
         -w, --ignore-all-space
                ignore all white space
    
         -B, --ignore-blank-lines
                ignore changes where lines are all blank
    
         -I, --ignore-matching-lines=RE
                ignore changes where all lines match RE
    
         -a, --text
                treat all files as text
    
         --strip-trailing-cr
                strip trailing carriage return on input
    
         -D, --ifdef=NAME
                output merged file with '#ifdef NAME' diffs
    
         --GTYPE-group-format=GFMT
                format GTYPE input groups with GFMT
    
         --line-format=LFMT
                format all input lines with LFMT
                
                      These format options provide fine-grained control over the output
    
                of diff, generalizing -D/--ifdef.
    
         LTYPE is 'old', 'new', or 'unchanged'.
                GTYPE is LTYPE or 'changed'.
    
                GFMT (only) may contain:
    
         %<     lines from FILE1
    
         %>     lines from FILE2
    
         %=     lines common to FILE1 and FILE2
    
         %[-][WIDTH][.[PREC]]{doxX}LETTER
                printf-style spec for LETTER
    
                LETTERs are as follows for new group, lower case for old group:
    
         F      first line number
    
         L      last line number
    
         N      number of lines = L-F+1
    
         E      F-1
    
         M      L+1
    
         %(A=B?T:E)
                if A equals B then T else E
    
                LFMT (only) may contain:
    
         %L     contents of line
    
         %l     contents of line, excluding any trailing newline
    
         %[-][WIDTH][.[PREC]]{doxX}n
                printf-style spec for input line number
    
                Both GFMT and LFMT may contain:
    
         %%     %
         
          %c'C'  the single character C
    
         %c'\OOO'
                the character with octal code OOO
    
         C      the character C (other characters represent themselves)
    
         -d, --minimal
                try hard to find a smaller set of changes
    
         --horizon-lines=NUM
                keep NUM lines of the common prefix and suffix
    
         --speed-large-files
                assume large files and many scattered small changes
    
         --color[=WHEN]
                colorize the output; WHEN can be 'never', 'always', or 'auto' (the default)
    
         --palette=PALETTE
                the colors to use when --color is active; PALETTE is a colon-separated list of terminfo capabilities
    
    
    
         FILES  are  'FILE1  FILE2'  or 'DIR1 DIR2' or 'DIR FILE' or 'FILE DIR'.  If --from-file or --to-file is given,
         there are no restrictions on FILE(s).  If a FILE is '-', read standard input.  Exit status is 0 if inputs  are
         the same, 1 if different, 2 if trouble.
    

linux命令行快捷键

  • C-k: 先按住Ctrl键,然后再按k键;
  • M-k:先单击Esc键,然后再按k键。

移动光标

  • C-a:移到行首
  • C-e:移到行尾
  • C-b:往回(左)移动一个字符
  • C-f:往后(右)移动一个字符
  • M-b:往回(左)移动一个单词
  • M-f:往后(右)移动一个单词

删除字符

  • C-h:删除光标左方位置的字符
  • C-d:删除光标右方位置的字符(注意:当前命令行没有任何字符时,会注销系统或结束终端)

删除单词

  • M-d:由光标位置开始,删除单词,直到该单词结束。
  • C-w:由光标位置开始,往左删除单词。

删除行

  • C-k:由光标所在位置开始,删除右方所有的字符,直到该行结束。
  • C-u:由光标所在位置开始,删除左方所有的字符,直到该行开始。
  • C-a C-k 或 C-e C-u 或 C-k C-u 组合可删除整行。
  • C-l:清除屏幕,然后,在最上面重新显示目前光标所在的这一行的内容。

复原操作

  • C-_:回复之前的状态。撤销操作。

粘贴

C-y:把之前删除的字符或字符串,贴到光标所在位置。

重复执行操作动作:

  • M-操作次数 操作动作: 指定操作次数,重复执行指定的操作。

查找历史命令

  • C-p:显示当前命令的上一条历史命令
  • C-n:显示当前命令的下一条历史命令
  • C-r:搜索历史命令,随着输入会显示历史命令中的一条匹配命令,Enter键执行匹配命令;ESC键在命令行显示而不执行匹配命令。

执行历史命令中的特定命令

在下面的例子中,如果你想再次执行第四条命令,执行!4即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# history | more

1 service network restart

2 exit

3 id

4 cat /etc/redhat-release

# !4

cat /etc/redhat-release

Fedora release 9 (Sulphur)

开发IDE环境

xwpe

xwpe:Fred Kruse开发的一个基于字符的文件管理器和文件编辑器,网址为:http://www.identicalsoftware.com/xwpe/

c-Forge IDE

C-Forge是一个集成的开发工具,支持多种语言开发环境,能够为你提供完善的开发环境,支持的语言包括C、C++、HTML、QT、GTK等等。

Kdevelop

KDevelop,是一个支持多程序设计语言的集成开发环境。它运行于Linux和其它类Unix环境。它本身不包含编译器,而是调用其它编译器来编译程序。
目前的版本4.3.0。它建立在 KDE 4 技术之上,并有良好的 C、C++ 和 PHP 开发支援。
KDevelop 3.5.5已支持Ada、Bash、C、C++、Fortran、Haskell、Java、Pascal、Perl、Python、Ruby、SQL等程序设计语言。
gbuilder

anjuta

Anjuta是一个建立在GNU/Linux下为C、C++提供编译的集成开发环境。它最初旨在为GTK/GNOME设计,并且自身具有很好的编程属性。这其中包括项目管理、应用开发、交互调试以及强大的代码编辑和语法增彩的性质。
Anjuta成为Gnome环境下最理想的开发工具,其主要功能和KDE下的Kdevelop相似,目前最新的版本是3.2.0。

Kylix

Kylix是Borland公司推出的GNU/Linux版的开发环境,相对于Windows下的Delphi以及C++ Builder。通过Kylix,程序员可以在GNU/Linux下使用Object Pascal、C++或者C语言,进行软件开发

Eclipse

Eclipse是著名的跨平台开源集成开发环境(IDE)。最初主要用来Java语言开发,目前亦有人通过插件使其作为C++、Python、PHP等其他语言的开发工具。
Eclipse的本身只是一个框架平台,但是众多插件的支持,使得Eclipse拥有较佳的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。

C语言学习方法

参考 http://sunxiunan.com/?p=1661sunxiunan

C语言学习顺序:阅读参考书,阅读代码,编写调试实际程序,上网参与讨论,研究高级话题。

1,参考书籍

  • 《The C Programming Language》 如果你只想买一本书学习C语言,只需要买这一本就够了。用三个词语来形容它就是:经典!经典!经典!这本薄薄的只有二百多页的小书涵盖了C语言的方方面面,前无古人而且后无来者,任何溢美之词都不足以形容它。
  • 《C程序设计语言(第2版·新版)》这是K&R的中文译本,可以先从中文译本看起,然后再读一遍英文原版,既可以学习英文,又可以体会原文那种简约优美的风格。
  • 《C陷阱与缺陷》 《C专家编程》 这两本书也是学习及使用C语言的朋友必备的两本书,比如《C专家编程》,专门用两三个章节详细介绍C语言中数组与指针的不同之处,这两本书在某种程度上算是对K&R略过的地方做了详细补充,强烈推荐。
  • 《C语言参考手册》可以看作是C语言编程的《新华字典》,全面而权威。里面还涵盖了C99的内容,紧跟时代潮流。
  • 《C和指针》 指针的重要性如何,学过C语言(或者C++)的朋友都知道,这本书更是把指针拔高到了与C语言平起平坐的地位,其实也是从头开始介绍,作为教学参考书也是可以的。
  • 《C标准库》 这本书是专门介绍C语言的标准库如何实现的,比如malloc算法,用标准的C语言该如何写?strlen这个函数应该如何实现?尽管书中不少代码与真实的C标准库相差很多(由于标准库需要考虑性能优化,很多函数有一些特定的trick),但是绝对值得参考。
  • 《你必须知道的495个C语言问题》 这本书其实就是C-FAQ的印刷版本,C-FAQ在各种编程语言的FAQ中可以称得上质量一流。如果你想应聘或者招聘C语言相关程序员,这本书一定要参考。
  • 《Linux C编程一站式学习》 这本书是基于特定操作系统Linux来介绍C语言编程,可作为计算机相关专业的教科书或入门参考书,也是书单里面唯一一本国人原创的编程书籍,非常难得。书中几乎所有内容都在网上直接公开,针对读者的意见进行修改,这也是非常难得的一种开放态度。非常推荐大家买一本。

学习C语言,一定不能只读书,应该动手练习完成书里面的项目需求(比如编写一个目录浏览器)以及每章的练习题目。这就需要有可以实验的环境,下面针对不同操作系统简单做一下介绍。

2,开发环境

Windows系统下推荐大家使用Code::blocks这个软件。这个软件最大优点是自带了基于mingw的GCC以及GDB,只要下载70M左右软件包,就可以完整支持C++、C语言编程了。各种功能(比如调试功能)也很强大,版本更新也比较快。注意下载选择名字有mingw的文件,比如最新版本是codeblocks-10.05mingw-setup.exe(版本也许有所不同)。

主页:http://www.codeblocks.org/

另外推荐codelite,相比codeblock,这个更新的更频繁一些。也支持各种比较有用的插件、调试特性、WX等等。

主页 http://codelite.org/

如果需要做Windows操作系统的开发,可以下载Visual C++ 2010 Express。

因为Code::Blocks不包含Windows编程头文件(实际是因为没有Windows SDK),无法编写Windows操作系统相关的界面应用程序或者服务类程序。而VC++Express自带了这些头文件以及编程库,虽然功能稍微简陋,但对于练习使用基本够用。

主页:http://www.microsoft.com/express/windows/

对于计算机专业的学生朋友,建议大家使用Linux操作系统,或者更详细一点是使用Xubuntu操作系统作为桌面,使用Netbeans和GCC这个组合(当然也可以选择Code::Blocks)。在Xubuntu下可以通过apt-get install build-essential这个命令安装gcc相关程序,已经可以在Terminal下编译C语言程序了,但为了使用方便,大家可以选择Netbeans的C++支持包,在Netbeans网站上就能下载。

主页:http://netbeans.org/features/cpp/index.html

如果使用苹果Mac系统,毫无疑问XCode就是编程的绝佳选择,XCode可以在苹果开发者网站上免费下载,在IPhone SDK中也包含了XCode。

主页:http://developer.apple.com/technologies/tools/xcode.html

如果手头没有合适的编程环境,还需要实验一些简单的代码,可以用http://codepad.org/提供的服务,在线编写运行代码。

另外建议大家申请一个github.com的账号,在gist.github.com可以保存自己的练习代码,就不需要随身带着U盘了。

C语言编程电子书及教程:

gcc对文件扩展名的解释

  • .c:c语言源代码
  • .cc:c++源代码
  • .i:预处理后的C源代码
  • .ii:预处理后的C++源代码
  • .S,.s:汇编语言源代码
  • .o:编译后的目标代码
  • .a,.so:编译后的库代码

前缀:

  • UP=Ultra-sharp with Premier color 最高端、出厂带校正颜色
  • U=Ultra-sharp 最高端
  • P=Productivity 生产力,面向商用
  • S=Stylish 时尚,面向家用
  • E=Essential 基本款

四位数字:

  • 前两位=尺寸后两位=首发财年(比实际年份晚一年左右)

后缀:

  • H:FullHD 1920*1080,16:9
  • M:WUXGA 1920*1200,16:10
  • Q:4K
  • W:Wide 21:9 带鱼屏
  • D:QHD 2560*1440

作者:王昭
链接:https://www.zhihu.com/question/23978102/answer/293333495

id 我也是有身份…证的人

id命令用于显示用户的以及其所属群组的ID。

官方定义为:

id - print real and effective user and group IDs

语法

1
$ id [OPTION]... [USER]

参数说明

  • -g, --group:仅仅显示组的ID
  • -G, --groups:显示所有组的IDs
  • -u, --user:打印用户的ID

默认使用

显示当前用户信息

1
2
$ id 
uid=1000(user) gid=1000(user) groups=1000(user),980(data),1006(monitor)

可以看到用户user的ID及组ID均为1000,该用户还属于data和monitor组。

显示用户群组的ID

1
2
$ id -g
1000

仅显示用户组的ID

id 我也是有身份…证的人

id命令用于显示用户的以及其所属群组的ID。

官方定义为:

id - print real and effective user and group IDs

语法

1
$ id [OPTION]... [USER]

参数说明

  • -g, --group:仅仅显示组的ID
  • -G, --groups:显示所有组的IDs
  • -u, --user:打印用户的ID

默认使用

显示当前用户信息

1
2
$ id 
uid=1000(user) gid=1000(user) groups=1000(user),980(data),1006(monitor)

可以看到用户user的ID及组ID均为1000,该用户还属于data和monitor组。

显示用户群组的ID

1
2
$ id -g
1000

仅显示用户组的ID

时光总是催人老 time

.. note::

林花谢了春红,太匆匆。无奈朝来寒雨晚来风。

  • 李煜《相见欢·林花谢了春红》

Linux time命令的用途,在于测量指定命令消耗的时间。

最常用的在于大概评估一个程序的运行时间。

这个命令很容易给人的印象是与date混淆起来

官方定义为:

time - time a simple command or give resource usage

可以给出包括系统的粗略时间。

语法

1
$ time [options] command [arguments...]

参数

​ - 可以认为没有参数

示例

会显示程序或命令执行的消耗时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ time ls /var
account crash games lib log ......

real 0m0.014s
user 0m0.003s
sys 0m0.010s


$ time ps -aux
root 295490 0.0 0.0 0 0 ? S Feb20 0:10 [ldlm_cb00_019
root 297717 0.0 0.0 0 0 ? S< Jan29 0:04 [kworker/58:1H
root 304801 0.0 0.0 0 0 ? S Mar19 0:00 [kworker/1:1]
root 311110 0.0 0.0 0 0 ? S Mar20 0:00 [kworker/66:0]
root 313146 0.0 0.0 0 0 ? S Mar20 0:01 [kworker/73:2]
root 313461 0.0 0.0 0 0 ? S< Jan29 0:00 [kworker/44:2H
root 313914 0.0 0.0 0 0 ? S Feb21 0:10 [kworker/9:2]
root 314118 0.0 0.0 0 0 ? S Feb21 3:34 [kworker/18:1]
root 315801 0.0 0.0 0 0 ? S Mar20 0:00 [kworker/79:2]

real 0m0.180s
user 0m0.019s
sys 0m0.114

唯一需要留意的是上面的三个含义:

  1. real : 程序从开始调用到最后终止之间经过的实时时间
  2. user : 程序本身,以及它所调用的库中的子例程使用的CPU 时间
  3. sys : 程序直接或间接调用的系统调用执行的CPU 时间