Linux 下常常须要给别人提供 patch 以及合 patch,这时须要用到 Linux 的 diff 和 patch 命令。linux
1. diff 命令bash
diff 命令经常使用来比较文件、目录,也能够用来制做补丁文件。所谓 “补丁文件” 就是 “修改后的文件” 与 “修改前(原始文件) ” 的差异。spa
经常使用选项以下:blog
1. “-u” : 表示在比较结果中输出上下文中一些相同的行,这有利于人工定位。递归
2. “-r” :表示递归比较各个子目录下的文件。文档
3. “-N”:将不存在的文档当作空文件。class
4. “-w”:忽略对空格的比较。下载
5. “-B” :忽略对空行的比较。di
EX:假设 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 (一般文件很小)。
2. patch 命令
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 -pl < ../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.00000000 -0400 +++ linux-2.6.22.6_ok/A/B/C.h 2007-09-20 18:11:46.00000000 -0400 ......
使用上述命令打补丁是,patch命令依据 “linux-2.6.22.6/A/B/C.h ”,寻找源文件,“ -p1 ” 表示忽略第1个斜线以前的目录,
因此要修改的源文件是当前目录下的:
A/B/C.h