您的位置:首页 > 运维架构 > Linux

linux系统工具程序diff使用小结

2017-11-14 09:31 302 查看
###########################################################
# linux系统工具程序"diff"使用小结
###########################################################

# 功能:用来比较两个文本文件的差异,常用来查看源代码程序的修改
# 语法:
diff <file_changed_before> <file_changed_after>

# 格式:
正常格式(normal diff)
上下文格式(context diff)
合并格式(unified diff)

# 例子:
file_changed_before.txt(修改前的文件,每行一个a,一共8行)
-------------------
a
a
a
a
a
a
a
a
-------------------

file_changed_after.txt(修改后的文件,将第5行修改为b)
-------------------
a
a
a
a
b
a
a
a
-------------------

# 正常格式(normal diff)
diff file_changed_before.txt file_changed_after.txt
终端输出结果:		注释:
-------------------
5c5			#用来说明变动位置,分成三部分,5表示第一个文件第5行有变化,c表示变动模式是内容改变(change),
#其他模式还有“增加”(a,代表addition)和“删除”(d,代表deletion),5表示变动后成为第二个文
#件的第5行。
< a			#<表示从第一个文件中去除该行,a表示该行内容。
---			#仅用作分割线
> b			#>表示第二个文件增加了该行,b表示该行内容
-------------------

# 上下文格式(context diff)
diff -c file_changed_before.txt file_changed_after.txt
终端输出结果:								注释:
----------------------------------------------------------------------
*** file_changed_before.txt	2017-11-14 16:32:00.563363807 +0800 #前两行表示文件的基本信息:文件名和时间
--- file_changed_after.txt	2017-11-14 16:31:55.643363947 +0800 #***表示修改前的文件,---表示修改后的文件
***************							    #分割线,无特殊含义
*** 2,8 ****	#显示发生变化的第5行,另外包括前三行和后三行表示上下文,"2,8"表示显示从第2行到第8行总共7行
a		#另外文件内容每一行前面有一个标记位,为空表示该行无变化,"!"表示有改动,"-"表示被删除,"+"表示新增
a
a
! a
a
a
a
--- 2,8 ----		#显示修改后的上下文总共7行
a
a
a
! b
a
a
a
----------------------------------------------------------------------

# 合并格式(unified diff)
diff -u file_changed_before.txt file_changed_after.txt
终端输出结果:								#注释:
----------------------------------------------------------------------
--- file_changed_before.txt	2017-11-14 16:32:00.563363807 +0800 #文件基本信息
+++ file_changed_after.txt	2017-11-14 16:31:55.643363947 +0800 #"---"表示修改前文件,"+++"表示修改后文件
@@ -2,7 +2,7 @@		#文件修改的位置,用两个"@"作为起始和结束,"-2,7"表示修改前的文件从第2行开始连续7行
a			#"+2,7"表示修改后的文件从第2行开始连续7行
a			#每行前有一个标志位,空表示无变化,"-"表示修改前文件删除的行,"+"表示修改后文件增加的行
a
-a
+b
a
a
a
----------------------------------------------------------------------

# git格式的diff
# 版本管理系统git使用的是合并格式的变体
git diff
终端显示结果:(此处不在使用上面使用的例子文件,随便拿一个文件作介绍)
----------------------------------------------------------------------
diff --git a/readme.txt b/readme.txt	#表示结果为git格式的diff,进行比较的是a版本和b版本的readme.txt
index a9c5755..f16b476 100644		#表示两个版本的git哈希值(index区域的a9c5755对象,与工作目录区
#域的f16b476对象),最后的六位数字是对象的模式(普通文件,644权限)
--- a/readme.txt			#从该行开始与合并格式的diff相同
+++ b/readme.txt
@@ -1,4 +1,4 @@
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
-Git tracks changes of files.
+Git tracks changes of files.h
----------------------------------------------------------------------


参考链接:读懂diff
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux diff