Linux开发环境及应用·第三周·文件比较

本文整理了第三周课程有关文件比较的笔记

相关命令

cmp

该命令用法为:cmp file1 file2

该命令会逐字节比较两个文件的内容,当文件内容完全相同的时候,不给出任何的提示,也就是没有输出;当文件不同时,输出第一个不同的位置。

(此命令类似Windows中的COMP命令)

例:
有以下文件:

$ cat test1.txt 
aasd
zxcaw
456
1234
as
$ cat test2.txt 
aasd
zxcaw
456
1234
as
$ cat test3.txt 
123

文件test1.txt和test2.txt内容相同

$ cmp test1.txt test2.txt 
$ 

文件test1.txt和test3.txt内容不同

$ cmp test1.txt test3.txt 
test1.txt test3.txt differ: byte 1, line 1

md5sum/sha1sum

md5sum和sha1sum命令分别使用md5和sha-1算法生成文件的hash值,其中md5sum生成16字节hash值,sha1sum生成20字节hash值,通过比较hash值是否相同即可判断文件内容是否相同。

使用方法(以md5sum为例):

  • md5sum file1 file2 file3 ... 计算文件的hash值
  • md5sum file1 > test.sum 将生成的test.sum文件放到另一台计算机上运行命令:md5sum -c test.sum 即可验证文件file1的完整性

例:
计算上面提到的三个文件的hash值

$ md5sum test1.txt test2.txt test3.txt 
d08a81eeaf86e095fa5fbbbcb6936344  test1.txt
d08a81eeaf86e095fa5fbbbcb6936344  test2.txt
ba1f2511fc30423bdbb183fe33f3dd0f  test3.txt

验证文件的完整性

$ md5sum test1.txt test2.txt test3.txt > test.sum
$ md5sum -c test.sum 
test1.txt: OK
test2.txt: OK
test3.txt: OK

diff

此命令用于找出两个文件的差别

基本用法:

  • diff file1 file2 使用normal格式输出
  • diff -u file1 file2 使用unified格式输出

使用normal输出格式,将列出一个如何将file1转换成file2的指令,具体指令如下:

  • a — add 添加
  • c — change 改变
  • d — delete 删除

指令字母左边的行号是file1的行号,右面是file2的行号,列出内容的时候,大于号>右边的内容是需要在file1文件中增加的内容;小于号<右边的内容是需要从file1文件中删除的内容

举个例子:
现有以下文件:

$ cat 1.txt 
feather
feather
Lee
lee
feather
Linux
$ cat 2.txt 
feather
feather
lee
abc
feather
LInux
hello

使用diff命令得到输出:

$ diff 1.txt 2.txt 
3d2
< Lee
4a4
> abc
6c6,7
< Linux
---
> LInux
> hello

删除文件file1第3行的内容Lee可得到文件file2的第2行,对应指令为:

3d2
< Lee

在文件file1的第4行添加内容abc可以得到文件file2的第4行,对应指令为:

4a4
> abc

修改文件file1的第6行可变为file2的第6,7行,对应指令为:

6c6,7
< Linux
---
> LInux
> hello

至于unified格式,这种格式和git版本管理使用的文件比较的输出类似,不详谈。

重要应用:基于文件比较可以实现版本管理系统