Linux下diff的操作详解

总述
linux diff命令用于比较文件的差异 。diff以逐行的方式,比较文本文件的异同处 。特别是比较两个版本不同的文件,如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中的目录 。diff命令可以同时输出成补丁文件,并且Linux中还有一个patch命令,可以依据diff生成的.patch补丁文件,将a.c与b.c两个文件差异部分更新到需要修改的文件 。此外diff在SVN 、GIT、CVS等版本控制工具中也是不可或缺的一部分 。
下面我就详细描述一下diff命令的使用:
作者:良知犹存
转载授权以及围观:欢迎添加微信公众号:羽林君
1 指令格式在Linux 中,我们可以使用 diff --help 查看详细指导(篇幅有限只截图了一部分作为展示)
Linux下diff的操作详解

文章插图
 

Linux下diff的操作详解

文章插图
 
常用命令格式:
diff[参数][文件1或目录1][文件2或目录2]
 
常用命令展示:
 
1.Linux内核diff自定义的补丁
 
diff -ruN linux-4.19-rc3_lyn linux-4.19-rc3 > linux-4.19-rc3_lyn.patch
Linux下diff的操作详解

文章插图
 
这个是我经常使用的命令,用来比较生成我修改后的代码的补丁包,最后用patch命令打补丁到需要使用的内核源码中去
Linux下diff的操作详解

文章插图
 

Linux下diff的操作详解

文章插图
 
?
 
2.在git中也会有diff可以查看两次版本的差异
git diff 04120e84525eca1c590d30b84ce7463b9e8a1497 f88b0054170b99b149bd0fbe5f138c66c64dd1c6
Linux下diff的操作详解

文章插图
 
其中diff之后的版本号通过git log 打印出来进行比较
Linux下diff的操作详解

文章插图
 

Linux下diff的操作详解

文章插图
 
?
【Linux下diff的操作详解】 
2 命令参数详细解释-<行数>:指定要显示多少行的文本 。此参数必须与-c或-u参数一并使用;
-a或--text:diff预设只会逐行比较文本文件;
-b或--ignore-space-change:不检查空格字符的不同;
-B或--ignore-blank-lines:不检查空白行;
-c:显示全部内容,并标出不同之处;
-C<行数>或--context<行数>:与执行“-c-<行数>”指令相同;
-d或——minimal:使用不同的演算法,以小的单位来做比较;
-D<巨集名称>或ifdef<巨集名称>:此参数的输出格式可用于前置处理器巨集;
-e或——ed:此参数的输出格式可用于ed的script文件;
-f或-forward-ed:输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处;
-H或--speed-large-files:比较大文件时,可加快速度;
-l<字符或字符串>或--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类似,但只有当第二个目录包含了第一个目录所没有的文件时,才会将这个文件与空白的文件做比较;
-q或--brief:仅显示有无差异,不显示详细的信息;
-r或——recursive:比较子目录中的文件;
-s或--report-identical-files:若没有发现任何差异,仍然显示信息;
-S<文件>或--starting-file<文件>:在比较目录时,从指定的文件开始比较;
-t或--expand-tabs:在输出时,将tab字符展开;
-T或--initial-tab:在每行前面加上tab字符以便对齐;
-u,-U<列数>或--unified=<列数>:以合并的方式来显示文件内容的不同;


推荐阅读