diff命令本身很简单,需要注意的是要会阅读其输出。
diff 的模式有三种
* 正常格式(normal diff)
* 上下文格式(context diff)
* 合并格式(unified diff)
一、正常模式
不带参数输出就是正常模式
11]# diff /dfs/acf/INDEX/202010/10/A1350AOIL05.TXT /dfs/acf/INDEX/202010/11/A1350AOIL05.TXT |more 1,101494c1,26841 < 002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\FORMAT\A1350A10A902RCH.TXT < 002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\GlassID\A1350A10A902RCH-Mark9.JPG < 002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\GlassID\A1350A10A902RCH-Mark10.JPG < 002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\GRAYIMAGE\A1350A10A902RCHDM.JPG < 002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\GRAYIMAGE\A1350A10A902RCHFPIP000001.JPG
1,101494c1,26841
它分成三个部分:前面的"1,101494",表示f1的第1-101494行有变化;中间的"c"表示变动的模式是内容改变(change),其他模式还有"增加"(a,代表addition)和"删除"(d,代表deletion);后面的"1,26841",表示变动后变成f2的1,26841
- <002538\A1575A1BPK1\A10A9\A10A902R\A10A902RCH\FORMAT\A1350A10A902RCH.TXT
前面的小于号,表示要从/dfs/acf/INDEX/202010/10/A1350AOIL05.TXT 当中去除该行(也就是1 - 101494),后面的是内容
- > 013033 \A1575A1BPK1\A10AA\A10AA04W\A10AA04WCD\GRAYIMAGE\A1350A10AA04WCDDM.JPG
前面的大于号表示/dfs/acf/INDEX/202010/11/A1350AOIL05.TXT增加了该行,后面的表示该行的内容。
这个和正则中的环视有点像,可以对比理解。
二、上下文格式(context diff)
使用参数 c
11]# diff -c /dfs/acf/INDEX/202010/10/A1350AOIL05.TXT /dfs/acf/INDEX/202010/11/A1350AOIL05.TXT |more *** /dfs/acf/INDEX/202010/10/A1350AOIL05.TXT 2020-10-10 23:59:37.108102000 +0800 --- /dfs/acf/INDEX/202010/11/A1350AOIL05.TXT 2020-10-11 03:13:37.984228000 +0800 *************** *** 1,101494 **** ! 002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\FORMAT\A1350A10A902RCH.TXT ! 002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\GlassID\A1350A10A902RCH-Mark9.JPG ! 002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\GlassID\A1350A10A902RCH-Mark10.JPG ! 002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\GRAYIMAGE\A1350A10A902RCHDM.JPG ! 002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\GRAYIMAGE\A1350A10A902RCHFPIP000001.JPG
第一部分的两行,显示两个文件的基本情况:文件名和时间信息。
*** /dfs/acf/INDEX/202010/10/A1350AOIL05.TXT 2020-10-10 23:59:37.108102000 +0800
--- /dfs/acf/INDEX/202010/11/A1350AOIL05.TXT 2020-10-11 03:13:37.984228000 +0800
"***"表示变动前的文件,"---"表示变动后的文件。
第二部分显示变动前的文件即10号的文件
*** 1,101494 ****
! 002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\FORMAT\A1350A10A902RCH.TXT
! 002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\GlassID\A1350A10A902RCH-Mark9.JPG
! 002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\GlassID\A1350A10A902RCH-Mark10.JPG
文件内容的每一行最前面有一个标记位。 如果为空,表示该行无变化 如果是感叹号(!),表示该行有改动 如果是减号(-),表示该行被删除 如果是加号(+),表示该行为新增。
三、合并格式的diff
使用参数 u 代表unified
如果两个文件相似度很高,那么上下文格式的diff,将显示大量重复的内容,很浪费空间。1990年,GNU diff率先推出了"合并格式"的diff,将f1和f2的上下文合并在一起显示。
11]# diff -u /dfs/acf/INDEX/202010/10/A1350AOIL05.TXT /dfs/acf/INDEX/202010/11/A1350AOIL05.TXT |more --- /dfs/acf/INDEX/202010/10/A1350AOIL05.TXT 2020-10-10 23:59:37.108102000 +0800 +++ /dfs/acf/INDEX/202010/11/A1350AOIL05.TXT 2020-10-11 03:13:37.984228000 +0800 @@ -1,101494 +1,26841 @@ -002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\FORMAT\A1350A10A902RCH.TXT -002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\GlassID\A1350A10A902RCH-Mark9.JPG -002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\GlassID\A1350A10A902RCH-Mark10.JPG -002538 \A1575A1BPK1\A10A9\A10A902R\A10A902RCH\GRAYIMAGE\A1350A10A902RCHDM.JPG
第一部分
"---"表示变动前的文件,"+++"表示变动后的文件。
第二部分
@@ -1,101494 +1,26841 @@
前面的"-1,101494 "分成三个部分:减号表示第一个文件(即f1),"1"表示第1行,"101494"表示连续101494行。合在一起,就表示下面是第一个文件从第1行开始的连续101494行。同样的,"+1,26841"表示变动后,成为第二个文件从第1行开始的连续26841行。