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