一、diff命令
1.功能
- diff可以对比两个文件之间的差异,并且是以行为单位来对比的,一般用在ASCII纯文本文件的对比上
- diff也可以对两个目录进行对比(比较目录下有哪些不同的文件)
- diff还可以根据两个文件的差异,制作出补丁文件(补丁文件后缀名一般为.patch)
2.注意事项
- diff不要用在两个完全不相干没有关系的文件上面,否则比较出来的东西没有意义
- 参数中的文件名可以用-(stdin)替换
3.格式
- diff [参数] 原始文件名 目标文件名
- 制作补丁文件:diff -Nuar 源文件 新文件 >补丁文件.patch
相关参数与选项
- -b:忽略一行中,多个空白的差异(例如:"a b"与“a b”)
- -B:忽略空白行的差异
- -i:忽略大小写的不同
- 原始文件名:相对于目标文件还要旧的文件
- 目标文件名:相对于原始文件,经过更改的文件
4.演示案例
- 案例一:我们将一个文件更改,然后比较两个文件的内容
- 第一步:我们复制/etc/passwd到当前目录下,命名为passwd.old作为原始文件
- 第二步:使用cat读取passwd.old的内容并用sed删除第4行的内容,第6行替换为Hello。最后用输出流>将这些内容写入一个passwd.new文件中
- 第二步:查看两个文件的差异
图中的信息为:
4d3(左边文件的第4行被删除,基准是右边文件的第3行)。<......(这些内容代表左边第4行被删除的内容)
6c5(左边文件第6行的内容被替换为右边文件第5行的内容)。<......(这些内容代表左边文件第6行的内容),>......(这些内容代表右边文件第5行的内容)
- 案例二:比较两个目录的差异
- 案例三:制作补丁文件并用cat查看补丁文件的内容
制作补丁文件的流程:先用diff比较两个文件之间的差异,然后将两个文件的差异使用输出流>制作成一个文件
- 第一个箭头处:代表新旧文件之间数据有差异需要修改的地方(-1,9代表旧文件在1-9行,+1,8代表新文件在1-8行)
- 第二个、第三个箭头处:左侧文件删除的内容
- 第四个箭头:右侧文件新增的内容
三、patch命令
1.功能
- patch与diff有着密不可分的关系,diff可以用来制作补丁文件
- patch可以配合diff制作出来的补丁文件:将新文件还原为旧文件,也可以将旧文件更新为新文件
2.命令格式
- 更新文件:patch -p < 补丁文件
- 还原文件:patch -R -p < 补丁文件
相关参数与选项
- -p:后面接数字,代表处理的新旧文件在哪个目录下,需要去哪里查找补丁文件
- -R:代表还原,将新文件还原为旧文件
3.演示案例
- 案例一:更新文件(将passwd.old文件更新成为passwd.new文件的内容)
-p0代表要对比的新旧文件与补丁文件都在当前目录下(同一个目录下),不需要减去目录来查找
- 第一步:将刚刚制作出来的补丁文件用来更新passwd.old文件的内容
- 第二步:查看两个文件的内容,发现一模一样
- 案例二:还原文件(将刚才passwd.old文件再重新还原回去)
四、cmp命令
1.功能
- 以字节为单位对两个文件进行比较,也可以对二进制文件进行比较
- cmp以字节去比对,默认只输出第一个不同的字节处
2.命令格式
- cmp [-l] file1 file2
相关参数与选项
- -l:cmp默认只显示第一个不同的子节处。加上这个参数,所有不同的地方都会输出
3.演示案例
- 案例一:比较两个文件
在120字节处出现不同,位于第4行
- 案例二:比较所有不同的地方