linux系統(tǒng)打補(bǔ)丁常用的方式很多,如果是聯(lián)網(wǎng)的情況下,直接使用yum update命令即可。如果沒有聯(lián)網(wǎng)或者有特殊的情況也可以使用diff 和patch命令來打補(bǔ)丁。
成都創(chuàng)新互聯(lián)公司秉承專業(yè)、誠信、服務(wù)、進(jìn)取的價(jià)值觀,堅(jiān)持以客戶為中心、客戶至上的服務(wù)理念,以“關(guān)注企業(yè)需求,實(shí)現(xiàn)企業(yè)價(jià)值”為導(dǎo)向,努力為企業(yè)提供全面優(yōu)質(zhì)的互聯(lián)網(wǎng)應(yīng)用服務(wù)。服務(wù)包括域名與空間、虛擬空間、企業(yè)郵箱、網(wǎng)站建設(shè)、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)營銷解決方案和咨詢服務(wù),以幫助企業(yè)客戶應(yīng)用互聯(lián)網(wǎng)。
方法:
1、生成補(bǔ)丁
補(bǔ)丁?件是使用diff命令?成的,?成補(bǔ)丁?件的命令使?格式如下:
diff -uNr oldfile newfile patch_file.patch
diff命令,它的功能就是逐??較兩個(gè)?件的不同,然后輸出?較的結(jié)果輸出到補(bǔ)丁文件。
參數(shù)解析:
-u:選項(xiàng)以統(tǒng)?格式創(chuàng)建補(bǔ)丁?件,這種格式?缺省格式更緊湊些
-N:選項(xiàng)確保補(bǔ)丁?件將正確地處理已經(jīng)創(chuàng)建和刪除?件的情況
-r:遞歸選項(xiàng),設(shè)置了這個(gè)選項(xiàng),會(huì)將兩個(gè)不同版本源代碼?錄中的所有對(duì)應(yīng)?件全部都進(jìn)??次?較,包括??錄?件
oldfile:源?件(?錄),未進(jìn)?修改的
newfile:以oldfile為基礎(chǔ),根據(jù)需求對(duì)??的?件內(nèi)容修改之后結(jié)果
patch_file.patch補(bǔ)丁文件?般以.patch為后綴。
注解:
補(bǔ)丁命令的功能就是逐個(gè)?較源?件(夾)和?標(biāo)?件(夾)的所有?件,將差異信息記錄到patch_file.patch中。下面對(duì)補(bǔ)丁文件內(nèi)容進(jìn)行講解:
補(bǔ)丁頭部分:
1、--- test1.txt 表示源文件(被修改的文件)
2、+++ test2.txt 表示目的文件
塊部分(@@ @@ 表示一個(gè)塊的開始):
3、@@ -1,3 表示源文件從第1行開始,一共有3行有差異
4、@@ 1,3 表示目的文件從第1行開始,一共有3行有差異
正文:
5、-zzzzzxxccv 表示被修改的文件要?jiǎng)h除這一行
6、+bbbbbbbbgd表示被修改的文件要增加這一行
?
2、打補(bǔ)丁
打補(bǔ)丁是通過patch命令完成的。?般情況下,打補(bǔ)丁命令使?格式如下(這?只介紹了對(duì)源?件(夾)進(jìn)?打補(bǔ)丁操作):
patch -pN xxx.patch
參數(shù)解析:
-pN:選項(xiàng)打補(bǔ)丁時(shí)要忽略掉第N層?錄。
舉個(gè)例子: 如果補(bǔ)丁文件包含路徑名稱 /curds/whey/src/blurfl/blurfl.c,那么:
-p 0 使用完整路徑名
-p 1 除去前導(dǎo)斜杠,留下 curds/whey/src/blurfl/blurfl.c。
-p 4 除去前導(dǎo)斜杠和前三個(gè)目錄,留下 blurfl/blurfl.c。
下面給大家舉個(gè)例子:
1、在/tmp目錄下創(chuàng)建test1.txt ,并查看文件內(nèi)容
?
2、同樣在/tmp目錄下創(chuàng)建test2.txt,并查看文件內(nèi)容
?
3、制作補(bǔ)丁,并檢查補(bǔ)丁內(nèi)容
?
4、打補(bǔ)丁
?
5、檢查test1.txt打補(bǔ)丁是否成功,內(nèi)容是否被修改
?
此時(shí)可以看到test1.txt 和test2.txt的內(nèi)容已經(jīng)一致,說明打補(bǔ)丁成功。
diff 命令
diff -Nur file.old file.new xxx.patch
打補(bǔ)丁 patch -R -P[num] xxx.patch
git diff 命令 現(xiàn)在都在用版本管理,git 是很不錯(cuò)的工具
git format-patch HEAD 上一次提交的補(bǔ)丁
git format-patch commit1..commit2 提交點(diǎn)1 到 提交點(diǎn)2 之間所有的補(bǔ)丁
建議你學(xué)習(xí)git 版本管理
patch 命令用于打補(bǔ)丁,補(bǔ)丁文件是使用diff產(chǎn)生的.
patch 命令語法 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 命令失敗或拒絕接受補(bǔ)丁時(shí),會(huì)產(chǎn)生一個(gè)和原文件同名,以".rej"為后綴的差異文件。
當(dāng)知道 -b 時(shí),會(huì)產(chǎn)生一個(gè)和原文件同名,以".orig"為后綴的備份文件。
常使用的 patch 參數(shù):
-p 指定目錄級(jí)別(從路徑全稱中除去幾層目錄)
如,如果補(bǔ)丁文件包含路徑名稱 /curds/whey/src/blurfl/blurfl.c,
那么: -p 0 使用完整路徑名
-p 1 除去前導(dǎo)斜杠,留下 curds/whey/src/blurfl/blurfl.c。
-p 4 除去前導(dǎo)斜杠和前三個(gè)目錄,留下 blurfl/blurfl.c。
-d Directory 打補(bǔ)丁前,更改當(dāng)前目錄到指定目錄
-i PatchFile 從指定文件,而不是從標(biāo)準(zhǔn)輸入中讀取補(bǔ)丁信息
-R 逆向補(bǔ)丁
patch命令用于為特定軟件包打補(bǔ)丁,該命令使用diff命令對(duì)源文件進(jìn)行操作。
格式:patch [選項(xiàng)] [原始文件 [補(bǔ)丁文件]]
常用參數(shù):
-r 是一個(gè)遞歸選項(xiàng),設(shè)置了這個(gè)選項(xiàng),diff會(huì)將兩個(gè)不同版本源代碼目錄中的所有對(duì)應(yīng)文件全部都進(jìn)行一次比較,包括子目錄文件。
-N 選項(xiàng)確保補(bǔ)丁文件將正確地處理已經(jīng)創(chuàng)建或刪除文件的情況。
-u 選項(xiàng)以統(tǒng)一格式創(chuàng)建補(bǔ)丁文件,這種格式比缺省格式更緊湊些。
-p0 選項(xiàng)從當(dāng)前目錄查找目的文件(夾)(直接使用補(bǔ)丁文件里面指定的路徑)
-p1 選項(xiàng)忽略掉第一層目錄,從當(dāng)前目錄查找(去掉補(bǔ)丁文件指定路徑最左的第1個(gè)'/'及前面所有內(nèi)容)。
-E 選項(xiàng)說明如果發(fā)現(xiàn)了空文件,那么就刪除它
-R 選項(xiàng)說明在補(bǔ)丁文件中的“新”文件和“舊”文件現(xiàn)在要調(diào)換過來了(實(shí)際上就是給新版本打補(bǔ)丁,讓它變成老版本)
示例:
1、單個(gè)文件
首先將兩個(gè)文件的內(nèi)容顯示如下:
$ cat test0
00000000
00000000
00000000
$ cat test1
00000000
11111111
00000000
*生成補(bǔ)?。?/p>
$ diff -uN test0 test1 test1.patch
這樣將通過比較,生成test1的補(bǔ)丁文件。這里選項(xiàng)u表示使用同一格式輸出這樣產(chǎn)生的輸出便于閱讀易于修改,N表示把不存在的文件看做empty的.就算文件test0不存在,也會(huì)生成補(bǔ)丁。
*把test0通過打補(bǔ)丁變成test1文件:
$ patch -p0 test1.patch
或$patch test1.patch
這樣,test0的內(nèi)容將和test1的內(nèi)容一樣,但是文件名稱還是test0。關(guān)于patch的選項(xiàng)見后面多文件有說明。當(dāng)前目錄下可以有test1.如果比較的時(shí)候test0是不存在的,那么這時(shí)候會(huì)生成一個(gè)test0文件。
*把打過補(bǔ)丁的test0還原:
$ patch -RE -p0test1.patch
或$patch -R test1.patch
這樣,test0的內(nèi)容將還原為原來沒有打過補(bǔ)丁的狀態(tài)。當(dāng)前目錄下可以有test1.這里的-E選項(xiàng)是要求patch在文件為空的時(shí)候刪除文件,這個(gè)選項(xiàng)是不必要的因?yàn)閜atch是根據(jù)時(shí)間戳來判斷一個(gè)文件是否存在。如果比較的時(shí)候test0是不存在的,這將會(huì)刪除test0文件。
**
2、多個(gè)文件的:
首先查看文件結(jié)構(gòu)如下:
1)外層目錄列表:
$ ls -p
prj0/ prj1/
2)子目錄prj0列表:
$ ls -p prj0
prj0name test0
3)子目錄prj1列表:
$ ls -p prj1
prj1name test1
4)文件prj0/prj0name:
$ cat prj0/prj0name
--------
prj0/prj0name
--------
5)文件prj1/prj1name:
$ cat prj1/prj1name
---------
prj1/prj1name
---------
6)文件prj0/test0:
$ cat prj0/test0
0000000
0000000
0000000
0000000
0000000
0000000
0000000
7)文件prj1/test1:
$ cat prj1/test1
1111111
1111111
1111111
1111111
1111111
1111111
1111111
*創(chuàng)建補(bǔ)丁:
$ diff -uNr prj0 prj1 prj1.patch
這里項(xiàng)u表示使用同一格式輸出這樣產(chǎn)生的輸出便于閱讀易于修改,N表示把不存在的文件看做empty的,r表示遞歸地比較子目錄,比較的結(jié)果被標(biāo)準(zhǔn)重定向到文件prj1.patch中了。
運(yùn)行之后,輸出的就是一個(gè)補(bǔ)丁,描述了兩個(gè)文件的不同,這個(gè)補(bǔ)丁就是把diff參數(shù)的第一個(gè)文件打補(bǔ)丁變成第二個(gè)文件的補(bǔ)丁文件。
實(shí)際過程依次比較兩個(gè)目錄下的同名文件,如果這里不加-N就會(huì)指明prj0name和test0只在prj0中存在,prj1name和test1只在prj1中存在,這就無法比較了,所以這里為了能夠比較,加上了-N選項(xiàng)。
為了便于理解,這里給出prj1.patch文件的內(nèi)容:
$ cat prj1.patch
diff -uNr prj0/prj0name prj1/prj0name
--- prj0/prj0name 2009-08-24 10:44:19.000000000 +0800
+++ prj1/prj0name 1970-01-01 08:00:00.000000000 +0800
@@ -1,5 +0,0 @@
---------
-
-prj0/prj0name
-
---------
diff -uNr prj0/prj1name prj1/prj1name
--- prj0/prj1name 1970-01-01 08:00:00.000000000 +0800
+++ prj1/prj1name 2009-08-24 10:45:05.000000000 +0800
@@ -0,0 +1,5 @@
+---------
+
+prj1/prj1name
+
+---------
diff -uNr prj0/test0 prj1/test0
--- prj0/test0 2009-08-24 11:21:12.000000000 +0800
+++ prj1/test0 1970-01-01 08:00:00.000000000 +0800
@@ -1,7 +0,0 @@
-0000000
-0000000
-0000000
-0000000
-0000000
-0000000
-0000000
diff -uNr prj0/test1 prj1/test1
--- prj0/test1 1970-01-01 08:00:00.000000000 +0800
+++ prj1/test1 2009-08-24 11:21:33.000000000 +0800
@@ -0,0 +1,7 @@
+1111111
+1111111
+1111111
+1111111
+1111111
+1111111
+1111111
*將prj0中的所有文件打補(bǔ)丁成為prj1中的所有文件:
步驟如下:
1)$ cp prj1.patch ./prj0
2)$ cd prj0
3)$ patch -p1 prj1.patch
這里,把補(bǔ)丁文件復(fù)制到了prj0下面,然后將該文件夾下面的文件"變成"prj1下的文件了.
$ ls -p
prj1name prj1.patch test1
關(guān)于patch命令的-p選項(xiàng)接數(shù)字n,意思是去掉補(bǔ)丁文件里指定路徑的前n個(gè)'/'前綴.
例如補(bǔ)丁文件中指定路徑是/u/howard/src/blurfl/blurfl.c,那么p0選項(xiàng)處理之后的路徑還是原來路徑不變,而p1選項(xiàng)處理之后的路徑是u/howard/src/blurfl/blurfl.c,同理p4處理之后的路徑是:blurfl/blurfl.c.
注意:如果在外層目錄運(yùn)行這個(gè)命令,那么會(huì)在外層目錄創(chuàng)建兩個(gè)prj1name和test1文件。
*將打好補(bǔ)丁的prj0中的所有文件還原成為原來打補(bǔ)丁之前的文件:
$ patch -R -p1 prj1.patch
運(yùn)行之后文件變成原來的文件了,如下:
$ ls -p
prj0name prj1.patch test0
*將prj1中的所有文件反向打補(bǔ)丁成為prj0中的所有文件:
$ patch -R -p1 prj1.patch
運(yùn)行之后prj1中的文件變成prj0的文件了,如下:
$ ls -p
prj0name prj1.patch test0
*將prj1中反打補(bǔ)丁后的文件還原成原來的prj1中的文件:
$ patch -p1 prj1.patch
運(yùn)行之后,prj1中的文件被還原了,如下:
$ ls -p
prj1name prj1.patch test1
*在外層目錄把prj0的內(nèi)容打補(bǔ)丁成prj1的內(nèi)容:
$ls -p
prj0/ prj1.patch
$patch -p0 prj1.patch
這樣prj0中的內(nèi)容變成了prj1中的內(nèi)容,但是prj0的目錄名仍舊是prj0,如下:
$ls -p prj0
prj1name test1
注意:當(dāng)前文件夾下面不能prj1目錄,否則會(huì)出現(xiàn)一些警告提示。
*在外層目錄把prj0的內(nèi)容反打補(bǔ)丁還原成原來prj0的內(nèi)容:
$ patch -R -p0 prj1.patch
這樣原來的文件如下:
$ ls -p prj0
prj0name test0
**
本文題目:linux生成補(bǔ)丁命令 linux 命令補(bǔ)全
當(dāng)前URL:http://www.muchs.cn/article4/doociie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、關(guān)鍵詞優(yōu)化、域名注冊(cè)、網(wǎng)站內(nèi)鏈、建站公司、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)