diff 和 patch 是一对工具,使用这对工具可以获取更新文件与历史文件的差异,并将更新应用到历史文件上。在数学上说,diff就是对两个集合的差运算,patch就是对两个集合的和运算。在数学上我们知道: A - B = C, 这样我们知道 A、B、C中任意两个数都可以得到第三个数:
下面我们以linux-3.0内核举例说明:
如下图所示,linux目录下有从官网下载的内核源码
linux-3.0,还有经过自己DIY重新改过的linux内核
linux-3.0.changed。

通过diff命令,生成自己命名的补丁文件。
diff —Nuar linux-3.0 linux-3.0-changed > linux-3.0-patch


此时三个文件的关系是:
linux-3.0
+
linux-3.0-patch
=
linux-3.0-changed
保存patch补丁后,每次只需使用如下命令,就能给文件打上补丁
:
patch -p0 <linux-3.0-patch
patch -p1 <../linux-3.0-patch
两个命令的区别如图:

-R能将打过补丁的文件还原:
patch -R -p0 < linux-3.0-patch
再一次牢记这四个命令
diff -Nuar linux-3.0 linux-3.0-changed > linux-3.0-patch
patch -p0 <linux-3.0-patch
patch -p1 <../linux-3.0-patch
patch -R -p0 < linux-3.0-patch