文本比较工具常见的有:
diff 以行为单位,常用在ASCII纯文本文件的比较上,常用于同一文件(软件)新旧版本之间的差异比较上
cmp 比较两个文件,以字节为单位,使用较少
这里主要介绍一下diff的用法和后续的patch 命令
[root @localhost ~]#mkdir -p /tmp/vitest #创建目录
[root @localhost ~]#cd /tmp/vitest
[root @localhost vitest]#cp /etc/passwd passwd.old
[root @localhost vitest]#cat /etc/passwd | sed -e '4d' -e '6c no six line' > passwd.new
注意:sed 后面接超过两个以上的动作时,每一个动作前都要加上-e
现在来比较一下两个文件的区别,如何使用 diff
[root @localhost ~]#diff [-bBi] from-file to-file
参数解析:
-b 忽略一行当中有多个空白的差异,如 l Love 与 I Love的差异
-B 忽略空白行的区别
-i 忽略大小写的差异
from-file 作为欲比较的文件,to-file作为基准文件,from-file额to-file可以与 - 替换,表示stanard input之意
现在来比较 passwd.old 和 passwd.new 的差异
[root @localhost vitest]#diff passwd.old passwd.new
解析:依次是,左边第4行被删除,基准是右边的第3行,注意这里的
左边第6行被替换成右边的第5行
右边 “>”第5行内容
新建的passwd.old和passwd.new之间是两个不同的版本,如果要软件升级怎么办?就是将旧的文件升级为新的文件,可以先比较新旧版本,再将区别文件制作成不定文件,再由补丁文件更新旧文件
[root @localhost vitest]#diff -Naur passwd.old passwd.new > passwd.patch
[root @localhost vitest]#cat passwd.patch
以行为单位,找到不一样的地方,新文件看到-会删除,看到+会增加。那如何将旧文件更新为新的内容呢,就是讲passwd.old文件更新为passwd.new文件
[root @localhost vitest]#patch -pN < patch.file #更新
[root @localhost vitest]#patch -R -pN < patch.file #还原
参数解析:
-p 后面的N表示取消第几层目录的意思
-R 表示还原,将新的文件还原成旧的文件
现在,将刚才制作的patch file用来更新就版本
[root @localhost vitest]#patch -p0 < passwd.patch
[root @localhost vitest]#ll passwd*
版本回退到原来的旧版本呢
关于这里为什么是 -p0,因为我们比较新旧版本的数据是在同一个目录下,因此不需要减去目录了