linux生成補(bǔ)丁命令 linux 命令補(bǔ)全

linuxos7.6打補(bǔ)丁

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ǔ)丁成功。

linux 如何制作補(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 版本管理

linux patch 如何用

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ǔ)丁

linux下的patch命令

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)

綿陽服務(wù)器托管