文件比较

我们经常会遇到需要比较两个文件的内容的情况。例如已经将可以工作的代码进行的备份,如果哪一天不小心误操作了导致代码不能工作,只需要将出问题的工程中的代码和我们备份的进行比较,替换掉不同的文件即可。

文件比较可以同时检查文本文件和二进制文件。

1、文本文件

我们首先创建两个文本文件来进行比较。文件内容包含用户的帮助信息,在终端中运行以下命令:

adduser --help > adduser.1
adduser --help > adduser.2

通过以上命令创建了两个文本文件 adduser.1和adduser.2。文件的内容为adduser的帮助信息输出的重定向在我的其他博客中有讲。

现在我们来比较这两个相同的文本文件,在终端中运行以下命令:

diff adduser.1 adduser.2

按下回车时会返回提示信息,如果没有任何信息返回则表示两个文件没有什么不同。

现在我们来对文件adduser.2做一些修改,打开adduser.2,把其中的”--“全部替换为”---“,然后保存。

再次执行文件比较命令,观察两个文件的不同。

输出信息的开头一部分如下:

1,3c1,3
< adduser [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
< [--firstuid ID] [--lastuid ID] [--gecos GECOS] [--ingroup GROUP | --gid ID]
< [--disabled-password] [--disabled-login] [--encrypt-home] USER
---
> adduser [---home DIR] [---shell SHELL] [---no-create-home] [---uid ID]
> [---firstuid ID] [---lastuid ID] [---gecos GECOS] [---ingroup GROUP | ---gid ID]
> [---disabled-password] [---disabled-login] [---encrypt-home] USER

第一行表示第一行到第三行之间有改动,’c‘表示’change‘。二到四行中’<‘开头表示文件一的内容,六到八行中’>‘开头表示文件二的内容。

接下来我们删除adduser.2的内容并将adduser.1的内容复制给adduser.2。然后运行以下命令:

sed -i '/^$/d' adduser.2

这个命令将删除文件中的空行。接着再运行文件比较命令:

diff adduser.1 adduser.2

返回的输出文本如下:

5d4
< 
10d8
< 
14d11
< 
17d13
< 
20d15
< 
29d23
< 

第一行’5d4‘表示第一个文件(’<‘)的第5行被删除了,现在是第4行。接下来的表示第10行被删了现在是第8行。。。。

接着我们将adduser.1的内容复制给adduser.2:

cp adduser.1 adduser.2

打开文件adduser.2,在‘general options:’ 上面加一个回车,再运行’diff‘命令,得到结果如下:

20a21
> new line

可以看到在文件2中(>)在第20行添加了一行,并且变为21行。

2、二进制文件

二进制文件由计算机可以直接识别的机器码组成,文本文件人们可以看懂,但是二进制文件就不可能了。

我们在 ‘/usr/bin’ 目录下找到diff文件,并将它复制到主目录下命名为’diff1.bin‘和'diff2.bin'。

使用以下命令比较这两个二进制文本:

cmp diff1.bin diff2.bin

改动二进制文本需要使用十六进制编辑器如”okteta“,执行安装命令:

sudo apt install okteta

之后并对文件diff2.bin进行修改,修改其中一个字符,保存之后再运行”cmp“命令,结果如下:

diff1.bin diff2.bin differ: byte 2, line 1

还有一种方法是使用使用命令 ‘md5sum’为二进制文件生成校验和。命令如下:

md5sum diff1.bin
md5sum diff2.bin

我们可以看到两个文件生成的校验和是不一样的。

上面的命令可以简化为:

md5sum diff1.bin diff2.bin

我们还可以把二进制文件的校验和放到文本文件中然后比较两个文本文件的内容是否由差异:

md5sum diff1.bin > diff1.txt
md5sum diff2.bin > diff2.txt
diff diff1.txt diff2.txt

这里就告一段落了,在做大型库的管理的时候,文件的比较是不可避免的,所以我们要熟悉这几条命令。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值