Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1725099
  • 博文数量: 362
  • 博客积分: 10587
  • 博客等级: 上将
  • 技术积分: 4098
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-10 18:15
文章分类

全部博文(362)

文章存档

2014年(1)

2013年(58)

2011年(115)

2010年(112)

2009年(76)

分类:

2010-09-20 11:35:59

下来讨论一下关于 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 啦! ^_^
  • patch
  • patch 这个指令与 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) |
    给主人留下些什么吧!~~