diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff在命令行中打印每一个行的改动。最新版本的diff还支持二进制文件。diff程序的输出被称为补丁 (patch),因为Linux系统中还有一个patch程序,可以根据diff的输出将a.c的文件内容更新为b.c。diff是svn、cvs、git等版本控制工具不可或缺的一部分。
语法
diff(选项)(参数)
选项
1 | -<行数>:指定要显示多少行的文本。此参数必须与-c或-u参数一并使用; |
参数
- 文件1:指定要比较的第一个文件;
- 文件2:指定要比较的第二个文件。
功能
diff命令能比较单个文件或者目录内容。如果指定比较的是文件,则只有当输入为文本文件时才有效。以逐行的方式,比较文本文件的异同处。如果指定比较的是目录的时候,diff命令会比较两个目录下名字相同的文本文件。列出不同的二进制文件、公共子目录和只在一个目录出现的文件。
常用实例
1)比较两个文件
1 | # diff log2014.log log2013.log |
说明:
上面的“3c3”和“8c8”表示log2014.log和log20143log文件在3行和第8行内容有所不同;”11,12d10”表示第一个文件比第二个文件多了第11和12行。
diff 的normal 显示格式有三种提示:
a - add
c - change
d - delete
2)并排格式输出
1 | # diff log2014.log log2013.log -y -W 50 |
说明:
“|”表示前后2个文件内容有不同
“<”表示后面文件比前面文件少了1行内容
“>”表示后面文件比前面文件多了1行内容
3)上下文输出格式
1 | # diff log2013.log log2014.log -c |
说明:
这种方式在开头两行作了比较文件的说明,这里有三中特殊字符:
“+” 比较的文件的后者比前着多一行
“-” 比较的文件的后者比前着少一行
“!” 比较的文件两者有差别的行
4)统一格式输出
1 | # diff log2014.log log2013.log -u |
说明:
它的第一部分,也是文件的基本信息:
— log2014.log 2012-12-07 18:01:54.000000000 +0800
+++ log2013.log 2012-12-07 16:36:26.000000000 +0800
“—“表示变动前的文件,”+++”表示变动后的文件。
第二部分,变动的位置用两个@作为起首和结束。
@@ -1,12 +1,10 @@
前面的”-1,12”分成三个部分:减号表示第一个文件(即log2014.log),”1”表示第1行,”12”表示连续12行。合在一起,就表示下面是第一个文件从第1行开始的连续12行。同样的,”+1,10”表示变动后,成为第二个文件从第1行开始的连续10行。
5)比较文件夹不同
1 | # diff test3 test6 |
6)比较两个文件不同,并生产补丁
1 | # diff -ruN log2013.log log2014.log >patch.log |
7)打补丁
1 | # cat log2013.log |
参考链接:
http://www.cnblogs.com/peida/archive/2012/12/12/2814048.html