同一个软件的不同版本之间, 比较配置文件与源文件的差异
1. diff
通常是比较同一的ASCII纯文本文件(软件)之间的差异, 以行为单位
diff -bBi old new
-b: 忽略一行中仅有多个空白的区别, 例如"about me"与"about me"视为相同
-B: 忽略空白行的区别
-i: 忽略大小写的不同
old: 欲比较文件的文件名
new: 目的比较文件的文件名
#注: old与new可以用"-"替换, 这个"-"表示standinput之意
diff -Naur old new > diff_old_new.patch #一般用这个命令生成后缀为.patch的补丁文件
-N: 在比较目录时, 若文件A仅出现在某个目录中, 预设会显示: Only in 目录: 文件A 若使用-N参数, 则diff会将文件A与一个空白的文件比较
-a: 将两个文件视为ASCII文件进行比较
-u: 以合并的方式来显示文件内容的不同
-r: ——recursive, 递归的比较子目录中的内容
#实例: 比较passwd.old与passwd.new的区别
# old中的内容:
# abcd
# new中的内容:
#
# abcdef
diff old new
1c1,2 #左边文件中的第一行被右边文件的第1, 2行替换了
< abcd #这是左边文件的内容
---
> #右边文件的第一行内容
> abcdef #右边文件的第二行内容
diff from_dir to_dir #还可以比较两个不同目录中的内容
diff /etc/rc3.d/ /etc/rc5.d/
Only in /etc/rc3.d/: K00rgmanager
Only in /etc/rc5.d/: K01rgmanager
2. cmp
比较非纯文本文件, 例如二进制文件 - compare two files byte by byte, 以字节为单位
cmp [-s] file1 file2
-s: --silent output nothing, yield exit status only #yield: v.产生, 放弃, 屈服 n.产量
cmp old new
old new differ: byte 1, line 1
3. patch
先比较新旧文件的区别, 再生成补丁文件, 最后将补丁文件更新旧文件
如果配合修补文件的方式则能一次修补大批文件, 这也是Linux系统核心的升级方法之一
diff -Naur old new > diff_old_new.patch
patch -pN old diff_old_new.patch #更新旧文件, -p选项的意思为拿掉几个斜线(/)
patch -R -pN old diff_old_new.patch #将更新后的文件还原
下面是非常详细的关于-p选项的用法说明, 个人觉得解释地很清楚:
reference: https://www.jb51.net/article/98185.htm
网友评论