Linux(入门基础):72---文件对比、补丁、更新、还原工具(diff、cmp、patch)

时间:2024-04-04 21:59:32

一、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作为原始文件

Linux(入门基础):72---文件对比、补丁、更新、还原工具(diff、cmp、patch)

  • 第二步:使用cat读取passwd.old的内容并用sed删除第4行的内容,第6行替换为Hello。最后用输出流>将这些内容写入一个passwd.new文件中

Linux(入门基础):72---文件对比、补丁、更新、还原工具(diff、cmp、patch)

  • 第二步:查看两个文件的差异

图中的信息为:

4d3(左边文件的第4行被删除,基准是右边文件的第3行)。<......(这些内容代表左边第4行被删除的内容)

6c5(左边文件第6行的内容被替换为右边文件第5行的内容)。<......(这些内容代表左边文件第6行的内容),>......(这些内容代表右边文件第5行的内容)

Linux(入门基础):72---文件对比、补丁、更新、还原工具(diff、cmp、patch)

 

  • 案例二:比较两个目录的差异 

Linux(入门基础):72---文件对比、补丁、更新、还原工具(diff、cmp、patch)

  • 案例三:制作补丁文件并用cat查看补丁文件的内容

制作补丁文件的流程:先用diff比较两个文件之间的差异,然后将两个文件的差异使用输出流>制作成一个文件

  • 第一个箭头处:代表新旧文件之间数据有差异需要修改的地方(-1,9代表旧文件在1-9行,+1,8代表新文件在1-8行)
  • 第二个、第三个箭头处:左侧文件删除的内容
  • 第四个箭头:右侧文件新增的内容

Linux(入门基础):72---文件对比、补丁、更新、还原工具(diff、cmp、patch)

三、patch命令

1.功能

  • patch与diff有着密不可分的关系,diff可以用来制作补丁文件
  • patch可以配合diff制作出来的补丁文件:将新文件还原为旧文件,也可以将旧文件更新为新文件

2.命令格式

  • 更新文件:patch  -p < 补丁文件
  • 还原文件:patch  -R -p <  补丁文件

相关参数与选项

  • -p:后面接数字,代表处理的新旧文件在哪个目录下,需要去哪里查找补丁文件
  • -R:代表还原,将新文件还原为旧文件

3.演示案例

  • 案例一:更新文件(将passwd.old文件更新成为passwd.new文件的内容)

-p0代表要对比的新旧文件与补丁文件都在当前目录下(同一个目录下),不需要减去目录来查找

  • 第一步:将刚刚制作出来的补丁文件用来更新passwd.old文件的内容

Linux(入门基础):72---文件对比、补丁、更新、还原工具(diff、cmp、patch)

  • 第二步:查看两个文件的内容,发现一模一样

Linux(入门基础):72---文件对比、补丁、更新、还原工具(diff、cmp、patch)

  • 案例二:还原文件(将刚才passwd.old文件再重新还原回去)

Linux(入门基础):72---文件对比、补丁、更新、还原工具(diff、cmp、patch)

Linux(入门基础):72---文件对比、补丁、更新、还原工具(diff、cmp、patch)

四、cmp命令

1.功能

  • 以字节为单位对两个文件进行比较,也可以对二进制文件进行比较
  • cmp以字节去比对,默认只输出第一个不同的字节处

2.命令格式

  • cmp  [-l]  file1  file2

相关参数与选项

  • -l:cmp默认只显示第一个不同的子节处。加上这个参数,所有不同的地方都会输出

3.演示案例

  • 案例一:比较两个文件

在120字节处出现不同,位于第4行

Linux(入门基础):72---文件对比、补丁、更新、还原工具(diff、cmp、patch)

  • 案例二:比较所有不同的地方

Linux(入门基础):72---文件对比、补丁、更新、还原工具(diff、cmp、patch)