Linux下patch和diff的用法介紹

2021-08-14 15:19:25 字數 3649 閱讀 9917

(1)、7z安裝

如果ubuntu中沒有安裝7z軟體,則可通過下列命令進行安裝:

sudo apt-get install p7zip p7zip-full p7zip-rar

(2)、7z解壓

一般而言推薦選用 7z x 《壓縮檔案》.7z來解壓,因為其是將壓縮檔案解壓到壓縮包命名的目錄下,即解壓到當前資料夾。

此外,還有7z e *.7z,其為將檔案解壓到當前路徑。

ps:7z a 《工程檔名》.7z 《工程檔名》為壓縮命令,將資料夾壓縮為7z檔案來便於傳輸。

diff  [option]  > ***.patch

(1)[option]選項介紹:

-a  treat  all  files  as text and compare them line-by-line, even if they do not seem to be text.

-n,--new-file

in  directory  comparison, if a file is found in

only one directory, treat it as present but empty

in the other directory.

-r  when comparing directories, recursively compare any subdirectories found.

-u  use the unified output format.

一般而言,如果資料夾中只有**檔案,則option選項可以選為-nur,但如果**資料夾裡面還有**檔案之類,則最好選擇-nura,這樣在使用patch命令打補丁的時候便可生成對應的**檔案。

當然,-nur與-nura生成的patch檔案的最大區別是-nura生成的檔案比較大。此外,這一介紹一些別的option選項:

-《行數》:指定要顯示多少行的文字。此引數必須與-c或-u引數一併使用;

-n或--new-file:在比較目錄時,若檔案a僅出現在某個目錄中,缺省會顯示:only in目錄,檔案a 若使用-n引數,則diff會將檔案a 與乙個空白的檔案比較;

-u,-u《列數》或--unified=《列數》:以合併的方式來顯示檔案內容的不同;

-r或——recursive:比較子目錄中的檔案;

-b或--ignore-space-change:不檢查空格字元的不同;

-b或--ignore-blank-lines:不檢查空白行;

-c:顯示全部內容,並標出不同之處;

-c《行數》或--context《行數》:與執行「-c-《行數》」指令相同;

-d或——minimal:使用不同的演演算法,以小的單位來做比較;

-d《巨集名稱》或ifdef《巨集名稱》:此引數的輸出格式可用於前置處理器巨集;

-e或——ed:此引數的輸出格式可用於ed的script檔案;

-f或-forward-ed:輸出的格式類似ed的script檔案,但按照原來檔案的順序來顯示不同處;

-h或--speed-large-files:比較大檔案時,可加快速度;

-l《字元或字串》或--ignore-matching-lines《字元或字串》:若兩個檔案在某幾行有所不同,而之際航同時都包含了選項中指定的字元或字串,則不顯示這兩個檔案的差異;

-i或--ignore-case:不檢查大小寫的不同;

-l或——paginate:將結果交由pr程式來分頁;

-n或——rcs:將比較結果以rcs的格式來顯示;

-p:若比較的檔案為c語言的程式碼檔案時,顯示差異所在的函式名稱;

-p或--unidirectional-new-file:與-n類似,但只有當第二個目錄包含了第乙個目錄所沒有的檔案時,才會將這個檔案與空白的檔案做比較;

-q或--brief:僅顯示有無差異,不顯示詳細的資訊;

-s或--report-identical-files:若沒有發現任何差異,仍然顯示資訊;

-s《檔案》或--starting-file《檔案》:在比較目錄時,從指定的檔案開始比較;

-t或--expand-tabs:在輸出時,將tab字元展開;

-t或--initial-tab:在每行前面加上tab字元以便對齊;

-v或——version:顯示版本資訊;

-w或--ignore-all-space:忽略全部的空格字元;

-w《寬度》或--width《寬度》:在使用-y引數時,指定欄寬;

-x《檔名或目錄》或--exclude《檔名或目錄》:不比較選項中所指定的檔案或目錄;

-x《檔案》或--exclude-from《檔案》;您可以將檔案或目錄型別存成文字檔案,然後在=《檔案》中指定此文字檔案;

-y或--side-by-side:以並列的方式顯示檔案的異同之處;

--help:顯示幫助;

--left-column:在使用-y引數時,若兩個檔案某一行內容相同,則僅在左側的字段顯示該行內容;

--suppress-common-lines:在使用-y引數時,僅顯示不同之處。

patch [  -b [ -b prefix ] ] [  -f ] [ -l ] [ -n ] [ -r ] [  -s ] [  -v ] [  -c | -e | -n ] [  -d directory ] [  -d define ] [  -f number ] [  -i patchfile ] [  -o outfile ][  -p number ] [  -r rejectfile ] [  -x number ] [ file ]

patch 命令失敗或拒絕接受補丁時,會產生乙個和原檔案同名,以".rej"為字尾的差異檔案。    當知道 -b 時,會產生乙個和原檔案同名,以".orig"為字尾的備份檔案。

常使用的 patch 引數:

-p 指定目錄級別(從路徑全稱中除去幾層目錄),如果補丁檔案包含路徑名稱 /1/2/3/4/5.c ,那麼:

-p 0 使用完整路徑名   -p 1 除去前導斜槓,留下 1/2/3/4/5.c。   -p 4 除去前導斜槓和前三個目錄,留下 4/5.c。

-d directory 打補丁前,更改當前目錄到指定目錄

-i patchfile 從指定檔案,而不是從標準輸入中讀取補丁資訊

-r 逆向補丁,可用來在打錯補丁後進行檔案的恢復

一般而言,補丁可能不止乙個版本,所以在打補丁的時候,需要注意該補丁之前幾個版本的,因為可能補丁需要一級一級地打,也可能可以直接打,這需要看補丁提供者的說明了。

一般而言,打補丁的檔案檔案是未經修改過的,否則會出錯。

(1)-- 製作補丁         命令:diff -urna linux-3.4.2 linux-3.4.2-my  > linux-3.4.2.patch

說明:當前路徑為:./ 。

該路徑(./ )下有 linux-3.4.2 目錄,其是linux-3.4.2的原始碼壓縮包解壓所得(linux-3.4.2原始碼未做任何修改的)。

該路徑(./ )下有 linux-3.4.2-my 目錄,其是由linux-3.4.2的原始碼修改後,符合開發板正常使用的原始碼(根據linux-3.4.2原始碼修改後的)。

生成 linux-3.4.2.patch 補丁檔案。

(2)-- 打補丁

命令:patch -p1 < ../linux-3.4.2.patch

說明:當前路徑為:./linux-3.4.2,進入到未做任何修改的linux-3.4.2的目錄下執行patch命令

Linux下diff和patch命令以及簡單補丁

補丁 就是對舊版本進行更新。在原有的版本下修改或者新增,減少內容。利用補丁,我們可以方便快捷的修改我們以前的版本。1.製作補丁 先建立兩個檔案a,b 假設b是a的新版本。yangni yangni mypatch touch a b yangni yangni mypatch ls內容分別為 yan...

Linux下使用diff和patch製作及打補丁

diff 是對兩個集合的差運算 patch 是對兩個集合的和運算 diff a b c表達了c a b a 表達了原始檔案,b 表示修改後的檔案。c 表示補丁檔案 由於歷史原因,diff有三種格式 正常格式 normal diff 上下文格式 context diff 合併格式 unified di...

Linux下生成patch和打patch

通過diff工具生成補丁,patch工具打上補丁.在使用diff之前,你需要保留乙份未修改過的原始碼,然後在其它地方修改原始碼的乙份拷貝.diff對比這兩份原始碼生成patch.修改過的原始碼必須保留原來的檔名,例如,如果你修改原始碼中的a.c檔案,那麼,修改後的檔案還是名為a.c,在修改之前你可以...