文件对比工具

本文介绍了三种文件对比工具:diff、cmp和patch。diff主要用于ASCII文本文件的行级对比,适用于软件版本间的差异分析;cmp则以字节为单位对比文件,适合二进制文件;patch则能根据diff生成的补丁文件进行升级或还原操作。通过实例展示了这些工具的使用方法和选项。

对比工具

通常,一个软件包的不同版本之间,比较配置文件与原始文件包的差异时会用到对比工具,而很多时候所说的对比都是之在ASCII纯文本文件上的对比, 最常见的文本对比工具就是diff了,除此之外,比较非文本文档文件之间的差异时,可以用cmp命令。

1.diff

diff顾名思义,对比两个文件之间的差异的,并且是以行为单位来进行对比的。一般用在ASCII纯文本文件上。
因此,diff通常用在对比同一文件或软件的新旧版本差异上。

语法,选项与参数
语法

diff [-bBi] from-file to-file

选项与参数
参数含义
from-file文件名,作为原始对比文件
to-file文件名,作为目标对比文件

注:from-file或to-file可以用-(stdin)来代替,另外不要对比两个完全不相同的文件,没有意义,也比不出来什么

选项含义
-b忽略一行中仅有空白的差异,如"about me"和"about me"会被是为相同
-B忽略空白行的差异
-i忽略大小写的差异
使用样例

首先我们利用前面学过的命令,进行如下操作:
将/etc/passwd文件的第4行删除,并且将第6行的内容替换为"no six line",然后将编辑过的内容输出到passwd.new文件

cat /etc/passwd | sed -e ‘4d’ -e ‘6c no six line’ > passwd.new

然后我们来对比一下文件内容

diff /etc/passwd passwd.new

在这里插入图片描述

4d3:左边第四行被删除了,基础是右边的第三行
< adm:x:3:4:adm:/var/adm:/sbin/nologin:左边(<)被删除的内容
6c5:左边第6行的内容被右边第5行的内容做取代了
< sync:x:5:0:sync:/sbin:/bin/sync:左边第6行的内容
---
> no six line:右边第5行的内容

除了对比文本文件内容的差异之外,还可以对比整个目录下的差异。
比如我们想知道,不同的开机运行级别(runlevel)之间有什么不同内容,这里拿运行级别0和5做比较:

diff /etc/rc.d/rc0.d /etc/rc.d/rc5.d
在这里插入图片描述

2.cmp

相对于diff的广泛用途,cmp似乎就用的没那么多了,cmp主要也是用于对比2个文件,不过,它主要是利用字节为单位去做对比,因此,cmp也可以用来去比较binary file

语法,选项
语法

cmp [-l] file1 file2

选项与
选项含义
-l将所有不同都列出来,因为cmp默认只会输出第一个发现的不同

下面我们来用cmp命令比较一下上面做成的文件。
在这里插入图片描述
上面的对比结果显示,第4行发现了共有106个字节有差异。

3.patch

path与diff命令密不可分,diff可以用来比较两个文件之间的差异,我们可以将差异制作成升级补丁,这样就可以利用升级补丁来进行升级。

diff -Naur /etc/passwd passwd.new > passwd.patch

首先利用diff命令,进行文件内容对比,并将差异内容输出到passwd.patch

在这里插入图片描述

--- /etc/passwd 2019-04-15 06:07:09.121284470 +0800	<<====新旧文件差异
+++ passwd.new  2019-10-20 09:42:16.303122230 +0800
@@ -1,9 +1,8 @@ <<====新旧文档要修改数据的界定范围,旧文档在1-9行,新文档在1-8行
 root:x:0:0:root:/root:/bin/bash
 bin:x:1:1:bin:/bin:/sbin/nologin
 daemon:x:2:2:daemon:/sbin:/sbin/nologin
-adm:x:3:4:adm:/var/adm:/sbin/nologin <<====左侧文件删除内容
 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
-sync:x:5:0:sync:/sbin:/bin/sync <<====左侧文件删除内容
+no six line <<====右侧文件新增内容
 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
 halt:x:7:0:halt:/sbin:/sbin/halt
 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
语法,选项
语法

patch -pN < patch_file 更新
patch -R -pN < patch_file 还原

选项与
选项含义
-p数字,取消几层目录的意思
-R代表还原,将新的文件还原成原来的旧文件版本
使用样例

这里我们将passwd.new还原成/etc/passwd原来的内容

// p0表示要还原的文件和补丁文件在同一个目录下,所以无需删减目录层数
patch -R -p0 < passwd.patch

在这里插入图片描述
发现,还原后,文件的大小一样
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值