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