下来讨论一下关于 diff 的用法吧!
[root@linux ~]# diff [-bBi] from-file to-file
参数:
from-file :一个档名,作为原始比对档案的档名;
to-file :一个档名,作为目的比对档案的档名;
注意,from-file 或 to-file 可以 - 取代,那个 - 代表『Standard input』之意。
-b :忽略一行当中,仅有多个空白的差异(例如 "about me" 与 "about me" 视为相同
-B :忽略空白行的差异。
-i :忽略大小写的不同。
范例:
范例一:比对 /tmp/test/passwd 与 /etc/passwd 的差异:
[root@linux ~]# diff /etc/passwd /tmp/test/passwd
4d3 <==这里是说,左边档案(/etc/passwd)第四行被删除 (d)
< adm:x:3:4:adm:/var/adm:/sbin/nologin
6c5 <==这里是说,左边档案的第六行被取代成右边档案(/tmp/test/passwd)的第五行
< sync:x:5:0:sync:/sbin:/bin/sync
---
> no six line
# 很聪明吧!用 diff 就把我们刚刚的处理给比对完毕了!
|
用 diff 比对档案真的是很简单喔!另外, diff 也可以比对整个目录下的差异喔!
cmp相对于 diff 的广泛用途, cmp 似乎就用的没有这么多了~ cmp 主要也是在比对两个档案,他主要利用『位』单位去比对,因此, 当然也可以比对 binary file 啰~(还是要再提醒喔, diff 主要是以『行』为单位比对, cmp 则是以『位』为单位去比对,这并不相同!)
[root@linux ~]# cmp [-s] file1 file2
参数:
-s :将所有的不同点的位处都列出来。因为 cmp 预设仅会输出第一个发现的不同点。
范例:
范例一:用 cmp 比较一下 /etc/passwd 与 /tmp/test/passwd
[root@linux ~]# cmp /etc/passwd /tmp/test/passwd
/etc/passwd /tmp/test/passwd differ: byte 106, line 4
|
看到了吗?第一个发现的不同点在第四行,而且位数是在第 106 个位处! 这个 cmp 也可以用来比对 binary 啦! ^_^
patchpatch 这个指令与 diff 可是有密不可分的关系啊!我们前面提到, diff 可以用来分辨两个版本之间的差异,举例来说,刚刚我们所建立的 /tmp/test/passwd 与 /etc/passwd 就是两个不同版本之间的档案。那么,如果要『升级』呢? 就是『将旧的档案升级成为新的档案』时,应该要怎么做呢? 举例来说,我们可以这样做测试:
[root@linux ~]# mkdir /tmp/old; cp /etc/passwd /tmp/old
[root@linux ~]# mkdir /tmp/new; cp /tmp/test/passwd /tmp/new
[root@linux ~]# cd /tmp ; diff -Naur old/ new/ > test.patch
|
此时,在 /tmp/test.patch 档案之中,就记录了新旧的档案之间的差异, 对了!您必须要了解的是,用 diff 制作这个档案时,旧的档案必须是在前面,亦即是 diff oldfile newfile 才行喔!此外,新旧档案的『相对目录位置』最好也是一样比较好喔! OK!那么如何将旧的内容 (/tmp/old/passwd) 更新到新版 (/tmp/new/passwd) 的内容呢? 简单的说,可以用这样:
[root@linux ~]# patch -pN < patch_file
参数:
-p :后面可以接『取消几层目录』的意思。
范例:
范例一:将刚刚制作出来的 patch file 用来更新旧版数据
[root@linux ~]# cd /tmp/old
[root@linux ~]# patch -p1 < /tmp/test.patch
patching file passwd
# 为什么这里会使用 -p1 呢?因为我们在比对新旧版的数据时,是在 /tmp 底下,
# 而实际的数据是在 /tmp/old 里面,因此,当我们进入到 /tmp/old 时,
# 再查阅 /tmp/test.patch 的第一行如下:
# diff -Naur old/passwd new/passwd (用 head -n 1 /tmp/test.patch)
# 发现到,我们所在的目录其实是 old 里面,所以,就必须要减去一层目录。
|
更详细的 patch 用法我们会在后续的第五章跟大家介绍, 这里仅是介绍给您,呵呵!我们可以利用 diff 来比对两个档案之间的差异, 更可进一步利用这个功能来制作修补档案 (patch file) ,让大家更容易进行比对与升级呢! 很不赖吧! ^_^
阅读(839) | 评论(0) | 转发(0) |