Linux diff与patch命令用法

来源:互联网 发布:淘宝店越来越少 编辑:程序博客网 时间:2024/04/30 05:24
diff 命令常用来比较文件、目录,也可以用来制作补丁文件──所谓“补丁文件” 就是“修改后的文
件” 与“原始文件” 的差别。
常用的选项有:


① “-u” :表示在比较结果中输出上下文中一些相同的行,这有利于人工定位;
② “-r” :表示递归比较各个子目录下的文件;
③ “-N” :将不存在的文件当作空文件;
④ “-w” :忽略对空格的比较;
⑤ “-B” :忽略对空行的比较。
例如: 假设 linux-2.6.22.6目录中是原始的内核, linux-2.6.22.6_ok 目录中是修改过的内核, 可以使
用以下命令制作补丁文件 linux-2.6.22.6_ok.diff(原始目录在前,修改过的目录在后) :
$ diff -urNwB linux-2.6.22.6 linux-2.6.22.6_ok > linux-2.6.22.6_ok.diff
由于 linux-2.6.22.6是标准的代码,可以从网上自由下载,要发布 linux-2.6.22.6_ok 中所做的修改
时,只需要提供补丁文件 linux-2.6.22.6_ok.diff(它通常是很小的) 。


patch 命令被用来打补丁──就是依据补丁文件来修改原始文件。 比如对于上面的例子, 可以使用以下
命 令 将 补 丁 文 件 linux-2.6.22.6_ok.diff 应 用 到 原 始 目 录 linux-2.6.22.6 上 去 。 假 设

linux-2.6.22.6_ok.diff 和 linux-2.6.22.6位于同一个目录下。

$ cd linux-2.6.22.6
$ patch -p1 < ../ linux-2.6.22.6_ok.diff

patch 命令中最重要的选项是“-pn” : 补丁文件中指明了要修改的文件的路径, “-pn” 表示忽略路径
中第“n” 个斜线之前的目录。假设 linux-2.6.22.6_ok.diff 中有如下几行:

diff -urNwB linux-2.6.22.6/A/B/C.h linux-2.6.22.6_ok/A/B/C.h
--- linux-2.6.22.6/A/B/C.h 2007-08-31 02:21:01.000000000 -0400
+++ linux-2.6.22.6_ok/A/B/C.h 2007-09-20 18:11:46.000000000 -0400
……

使用上述命令打补丁时, patch 命令根据“linux-2.6.22.6/A/B/C.h” 寻找源文件, “-p1” 表示忽略
第1个斜线之前的目录,所以要修改的源文件是当前目录下的: A/B/C.h。




0 0