1. diff是对两个集合的差运算,patch是对两个集合的和运算。
2. diff以逐行的方式,比较文本文件的异同处。所是指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录,如果我们希望递归执行,需要使用-r参数。
**diff
-b :忽略一行当中,仅有多个空白的差异(例如 “about me” 于 “about me”视为相同。
-B :忽略空白行的差异。
-i :忽略大小写的不同
[root@www test]# diff passwd.old passwd.new
4d3 <==左边第四行被删除 (d) 掉了,基准是右边癿第三行
< adm:x:::adm:/var/adm:/sbin/nologin <==这边列出左边(<)档案被删除
癿那一行内容
6c5 <==左边档案的第六行被取代 (c) 成右边档案的第五行
< sync:x:::sync:/sbin:/bin/sync <==左边(<)档案第六行内容
---
> no six line <==右边(>)档案第五行内容
其他模式还有”增加”(a,代表 addition),如4a4。
**patch
diff是用来分变两个版本之间的差异,要将旧的档案升级成新的档案需要;
先比较新旧版本的差异,并将差异制作成补丁档,再由补丁档更新旧档案。
- 建立patch文件
-
范例一:以 /tmp/test 内癿 passwd.old 不 passwd.new 制作补丁档案
[root@www test]# diff -Naur passwd.old passwd.new > passwd.patch
[root@www test]# cat passwd.patch
--- passwd.old -- ::09.000000000 + <==新旧档案癿信
息
+++ passwd.new -- ::18.000000000 +
@@ -, +, @@ <==新旧档案要修改数据癿界定范围,旧档在 - 行,新
檔在 - 行
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
-adm:x:::adm:/var/adm:/sbin/nologin <==左侧档案删除
lp:x:::lp:/var/spool/lpd:/sbin/nologin
-sync:x:::sync:/sbin:/bin/sync <==左侧档案删除
+no six line <==右侧新档加入
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin - 更新与还原
[root@www ~]# patch -pN < patch_file <==更新
[root@www ~]# patch -R -pN < patch_file <==还原
选项不参数:
-p :后面可以接『取消几层目彔』的意思。
-R :代表还原,将新的文件还原成原本的版本。
范例二:将刚刚制作出来的 patch file 用来更新旧版数据
[root@www test]# patch -p0 < passwd.patch
patching file passwd.old
[root@www test]# ll passwd*
-rw-r--r-- root root Feb : passwd.new
-rw-r--r-- root root Feb : passwd.old <==档案一模一样!
范例三:恢复旧档案内容
[root@www test]# patch -R -p0 < passwd.patch
[root@www test]# ll passwd*
-rw-r--r-- root root Feb : passwd.new
-rw-r--r-- root root Feb : passwd.old
# 档案就这样恢复成为旧版本啰