patch 命令用于打補(bǔ)丁,補(bǔ)丁文件是使用diff產(chǎn)生的.
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供丹陽網(wǎng)站建設(shè)、丹陽做網(wǎng)站、丹陽網(wǎng)站設(shè)計(jì)、丹陽網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、丹陽企業(yè)網(wǎng)站模板建站服務(wù),10年丹陽做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
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í),會產(chǎn)生一個(gè)和原文件同名,以".rej"為后綴的差異文件。
當(dāng)知道 -b 時(shí),會產(chǎn)生一個(gè)和原文件同名,以".orig"為后綴的備份文件。
常使用的 patch 參數(shù):
-p 指定目錄級別(從路徑全稱中除去幾層目錄)
如,如果補(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系統(tǒng)當(dāng)然有漏洞,linux的更新是很快的。一般幾個(gè)月半年就有一個(gè)小版本更新,不只是漏洞還有新功能。
一般叫系統(tǒng)更新,可以使用系統(tǒng)自帶的更新工具?;蚴怯脃um upgrade或apt-get 這些命令,看系統(tǒng)而定。當(dāng)然就是全自動了。
當(dāng)然可以手動,但要知道自己想更新什么以及下載所有包,很難找。
一般linux給某個(gè)特定軟件打補(bǔ)丁用patch命令。
在 CentOS/RHEL7 系統(tǒng)上配置自動安全更新
在 CentOS/RHEL 7/6 系統(tǒng)上,你需要安裝下面的安裝包:
# yum update -y ; yum install yum-cron -y
安裝完成以后,打開/etc/yum/yum-cron.conf,然后找到下面這些行內(nèi)容,你必須確保它們的值和下面展示的一樣
update_messages = yes
download_updates = yes
apply_updates = yes
第一行表明自動更新命令行應(yīng)該像這樣:
# yum --security upgrade
而其它的行保證了能夠通知并自動下載、安裝安全升級。
為了使來自 root@localhost 的通知能夠通過郵件發(fā)送給同一賬戶(再次說明,你可以選擇其他賬戶,如果你想這樣的話),下面這些行也是必須的。 《Linux就該這么學(xué)》 一起學(xué)習(xí)linux
emit_via = email
email_from = root@localhost
email_to = root
在 CentOS/RHEL 6 上啟用自動安全更新
默認(rèn)情況下, cron 任務(wù)被配置成了立即下載并安裝所有更新,但是我們可以通過在 /etc/sysconfig/yum-cron 配置文件中把下面兩個(gè)參數(shù)改為yes,從而改變這種行為。
# 不要安裝,只做檢查(有效值: yes|no)
CHECK_ONLY=yes
# 不要安裝,只做檢查和下載(有效值: yes|no)
# 要求 CHECK_ONLY=yes(先要檢查后才可以知道要下載什么)
DOWNLOAD_ONLY=yes
為了啟用關(guān)于安裝包更新的郵件通知,你需要把MAILTO 參數(shù)設(shè)置為一個(gè)有效的郵件地址。
# 默認(rèn)情況下 MAILTO 是沒有設(shè)置的,crond 會將輸出發(fā)送郵件給自己
# (執(zhí)行 cron 的用戶,這里是 root)
# 例子: MAILTO=root
MAILTO=admin@tecmint.com
最后,打開并啟用yum-cron 服務(wù):
------------- On CentOS/RHEL 7 -------------
systemctl start yum-cron
systemctl enable yum-cron
------------- On CentOS/RHEL 6 -------------
# service yum-cron start
# chkconfig --level 35 yum-cron on
恭喜你,你已經(jīng)成功的在 CentOS/RHEL 7/6 系統(tǒng)上設(shè)置了自動升級。
patch命令用于為特定軟件包打補(bǔ)丁,該命令使用diff命令對源文件進(jìn)行操作。
格式:patch [選項(xiàng)] [原始文件 [補(bǔ)丁文件]]
常用參數(shù):
-r 是一個(gè)遞歸選項(xiàng),設(shè)置了這個(gè)選項(xiàng),diff會將兩個(gè)不同版本源代碼目錄中的所有對應(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不存在,也會生成補(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í)候會生成一個(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是不存在的,這將會刪除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就會指明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è)命令,那么會在外層目錄創(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目錄,否則會出現(xiàn)一些警告提示。
*在外層目錄把prj0的內(nèi)容反打補(bǔ)丁還原成原來prj0的內(nèi)容:
$ patch -R -p0 prj1.patch
這樣原來的文件如下:
$ ls -p prj0
prj0name test0
**
linux下patch命令使用詳解---linux打補(bǔ)丁命令
功能說明:修補(bǔ)文件。
語法:patch [-bceEflnNRstTuvZ][-B 備份字首字符串][-d 工作目錄][-D 標(biāo)示符號][-F 監(jiān)別列數(shù)][-g 控制數(shù)值][-i 修補(bǔ)文件][-o 輸出文件][-p 剝離層級][-r 拒絕文件][-V 備份方式][-Y 備份字首字符串][-z 備份字尾字符串][--backup-if -mismatch][--binary][--help][--nobackup-if-mismatch][--verbose][原始文件 修補(bǔ)文件] 或 path [-p 剝離層級] [修補(bǔ)文件]
補(bǔ)充說明:patch指令讓用戶利用設(shè)置修補(bǔ)文件的方式,修改,更新原始文件。倘若一次僅修改一個(gè)文件,可直接在指令列中下達(dá)指令依序執(zhí)行。如果配合修補(bǔ)文件的方式則能一次修補(bǔ)大批文件,這也是Linux系統(tǒng)核心的升級方法之一。
參數(shù):
-b或--backup 備份每一個(gè)原始文件。
-B備份字首字符串或--prefix=備份字首字符串 設(shè)置文件備份時(shí),附加在文件名稱前面的字首字符串,該字符串可以是路徑名稱。
-c或--context 把修補(bǔ)數(shù)據(jù)解譯成關(guān)聯(lián)性的差異。
-d工作目錄或--directory=工作目錄 設(shè)置工作目錄。
-D標(biāo)示符號或--ifdef=標(biāo)示符號 用指定的符號把改變的地方標(biāo)示出來。
-e或--ed 把修補(bǔ)數(shù)據(jù)解譯成ed指令可用的敘述文件。
-E或--remove-empty-files 若修補(bǔ)過后輸出的文件其內(nèi)容是一片空白,則移除該文件。
-f或--force 此參數(shù)的效果和指定-t參數(shù)類似,但會假設(shè)修補(bǔ)數(shù)據(jù)的版本為新 版本。
-F監(jiān)別列數(shù)或--fuzz監(jiān)別列數(shù) 設(shè)置監(jiān)別列數(shù)的最大值。
-g控制數(shù)值或--get=控制數(shù)值 設(shè)置以RSC或SCCS控制修補(bǔ)作業(yè)。
-i修補(bǔ)文件或--input=修補(bǔ)文件 讀取指定的修補(bǔ)問家你。
-l或--ignore-whitespace 忽略修補(bǔ)數(shù)據(jù)與輸入數(shù)據(jù)的跳格,空格字符。
-n或--normal 把修補(bǔ)數(shù)據(jù)解譯成一般性的差異。
-N或--forward 忽略修補(bǔ)的數(shù)據(jù)較原始文件的版本更舊,或該版本的修補(bǔ)數(shù)據(jù)已使 用過。
-o輸出文件或--output=輸出文件 設(shè)置輸出文件的名稱,修補(bǔ)過的文件會以該名稱存放。
-p剝離層級或--strip=剝離層級 設(shè)置欲剝離幾層路徑名稱。
-f拒絕文件或--reject-file=拒絕文件 設(shè)置保存拒絕修補(bǔ)相關(guān)信息的文件名稱,預(yù)設(shè)的文件名稱為.rej。
-R或--reverse 假設(shè)修補(bǔ)數(shù)據(jù)是由新舊文件交換位置而產(chǎn)生。
-s或--quiet或--silent 不顯示指令執(zhí)行過程,除非發(fā)生錯誤。
-t或--batch 自動略過錯誤,不詢問任何問題。
-T或--set-time 此參數(shù)的效果和指定-Z參數(shù)類似,但以本地時(shí)間為主。
-u或--unified 把修補(bǔ)數(shù)據(jù)解譯成一致化的差異。
-v或--version 顯示版本信息。
-V備份方式或--version-control=備份方式 用-b參數(shù)備份目標(biāo)文件后,備份文件的字尾會被加上一個(gè)備份字符串,這個(gè)字符串不僅可用-z參數(shù)變更,當(dāng)使用-V參數(shù)指定不同備份方式時(shí),也會產(chǎn)生不同字尾的備份字符串。
-Y備份字首字符串或--basename-prefix=--備份字首字符串 設(shè)置文件備份時(shí),附加在文件基本名稱開頭的字首字符串。
-z備份字尾字符串或--suffix=備份字尾字符串 此參數(shù)的效果和指定-B參數(shù)類似,差別在于修補(bǔ)作業(yè)使用的路徑與文件名若為src/linux/fs/super.c,加上backup/字符串后,文件super.c會備份于/src/linux/fs/backup目錄里。
-Z或--set-utc 把修補(bǔ)過的文件更改,存取時(shí)間設(shè)為UTC。
--backup-if-mismatch 在修補(bǔ)數(shù)據(jù)不完全吻合,且沒有刻意指定要備份文件時(shí),才備份文件。
--binary 以二進(jìn)制模式讀寫數(shù)據(jù),而不通過標(biāo)準(zhǔn)輸出設(shè)備。
--help 在線幫助。
--nobackup-if-mismatch 在修補(bǔ)數(shù)據(jù)不完全吻合,且沒有刻意指定要備份文件時(shí),不要備份文件。
--verbose 詳細(xì)顯示指令的執(zhí)行過程。
patch,是打補(bǔ)丁的命令,有很多用法,見幫助#man patch
patch -p0 (“p”指的是路徑,后面的數(shù)字表示去掉路徑的第幾部分。0,表示不去掉,為全路徑)
patch -p1 (“p”后面的數(shù)字1,表示去掉前第一個(gè)路徑)fetch
fetch /sys/dev/bge
fetch ...
patch -p0 ...fetch
patch -p patch-tcp_auto_buf-20061212-RELENG_6.diff
也可以把文件中的目錄全改成系統(tǒng)已在的目錄如/usr/src/sys.....注意:
1,確認(rèn)目錄
然后確認(rèn)目錄,如不在默認(rèn)目錄下,就寫下要打補(bǔ)丁的當(dāng)前絕對目錄。如/usr/src/sys/dev/bge/if_bce.c2,P的使用
可以使用不帶數(shù)字的參數(shù)。
patch 后的軟件安裝
telnetd服務(wù)器的問題及補(bǔ)丁 在當(dāng)前FreeBSD所有版本中,也就是FreeBSD 5.0、FreeBSD 4.3、FreeBSD 4.2、FreeBSD 4.1.1、FreeBSD 4.1、FreeBSD 4.0、FreeBSD 3.x、FreeBSD 2.x的版本,其telnetd守護(hù)進(jìn)程中存在一個(gè)致命的緩沖區(qū)溢出漏洞,該問題是由于telnetd在處理telnet協(xié)議選項(xiàng)的函數(shù)中沒有進(jìn)行有效的邊界檢查,當(dāng)使用某些選項(xiàng)(\'AYT\')時(shí),可能發(fā)生緩沖區(qū)溢出。這會導(dǎo)致遠(yuǎn)程root級別的安全威脅。
因此,如果一定要使用telnet服務(wù)的話,必須為服務(wù)器打上最新的patch,該patch可以從以下鏈接獲得: (注:通常有兩個(gè)版本的telnetd服務(wù)器,有crypto及無crypto的版本,因此需要判斷主機(jī)使用的是哪種版本的telnetd,這通常可以通過察看src文件來判斷,比如# ls /usr/src/crypto/telnet/telnetd,如果不存在,則說明使用的是無crypto的版本了,在判別清楚之后再分別下載相關(guān)補(bǔ)丁文件) crypto版本補(bǔ)?。?/p>
patch方法:
# cd /usr/src/
# patch -p /path/to/patch
# cd /usr/src/secure/libexec/telnetd
# make depend make all install 無crypto版本補(bǔ)?。?/p>
patch方法:
# cd /usr/src/
# patch -p /path/to/patch
# cd /usr/src/libexec/telnetd
# make depend make all install 例子來源文件:isp1161-2.6.12.patch(在/root下)
由于patch文件的首行已經(jīng)指明了路徑,所以根據(jù)當(dāng)前所在的目錄,加不同的參數(shù)使用patch命令:
1:如果當(dāng)前的目錄是和linux-2.6.12的同級目錄:
[root@ ]#patch -p0 /root/isp1161-2.6.12.patch
2:如果當(dāng)前的目錄為 linux-2.6.12/:
[root@ ]#patch -p1 /root/isp1161-2.6.12.patch
3:如果當(dāng)前的目錄為 linux-2.6.12/drivers/:
[root@ ]#patch -p2 /root/isp1161-2.6.12.pathc
0,1,2,是指略去的patch文件中的前幾級目錄。
ln 命令的使用
這是linux中一個(gè)非常重要的命令。它的功能是為某一個(gè)文件在另外一個(gè)位置建立一個(gè)不同的鏈接,這個(gè)命令最常用的參數(shù)是-s,具體用法是:ln -s 源文件 目標(biāo)文件。
當(dāng)我們需要在不同的目錄,用到相同的文件時(shí),我們不需要在每一個(gè)需要的目錄下都放一個(gè)必須相同的文件,我們只要在某個(gè)固定的目錄放上該文件,然后在其它的目錄下用ln命令鏈接(link)它就可以,不必重復(fù)的占用磁盤空間。
例如:ln -s /bin/less /usr/local/bin/less
-s 是代號(symbolic)的意思。
這里有兩點(diǎn)要注意:
第一,ln命令會保持每一處鏈接文件的同步性。也就是說,不論你改動了哪一處,其它的文件都會發(fā)生相同的變化。
patch附帶有一個(gè)很好的幫助,其中羅列了很多選項(xiàng),但是99%的時(shí)間只要兩個(gè)選項(xiàng)就能滿足我們的需要:
patch -p1 [patchfile]
patch -R [patchfile] (used to undo a patch)
-p1選項(xiàng)代表patchfile中文件名左邊目錄的層數(shù),頂層目錄在不同的機(jī)器上有所不同。要使用這個(gè)選項(xiàng),就要把你的patch放在要被打補(bǔ)丁的目錄下,然后在這個(gè)目錄中運(yùn)行path -p1 [patchfile]。來自Linux內(nèi)核patch的一個(gè)簡短的引用可以這樣實(shí)現(xiàn):
diff -u --recursive --new-file v2.1.118/linux/mm/swapfile.c linux/mm/swapfile. c--- v2.1.118/linux/mm/swapfile.c Wed Aug 26 11:37:45 1998 +++ linux/mm/swapfile.c Wed Aug 26 16:01:57 1998 @@ -489,7 +489,7 @@
int swap_header_version;
int lock_map_size = PAGE_SIZE;
int nr_good_pages = 0; - char tmp_lock_map = 0; + unsigned long tmp_lock_map = 0;
應(yīng)用來自本段中使用-p1開關(guān)拷貝的patch可以有效地減短patch定位的路徑;patch會查找當(dāng)前目錄下一個(gè)名為/mm的子目錄,接著應(yīng)該會在這兒發(fā)現(xiàn)swapfile.c文件,然后等待打補(bǔ)丁。在這個(gè)過程中,以破折號(“-”號,譯者注)開始的行會被一個(gè)以加號(“+”號,譯者注)開始的行代替。一個(gè)典型的patch會包含對多個(gè)文件的更新,每個(gè)部分中都由對兩個(gè)版本的文件運(yùn)行diff -u命令的輸出結(jié)果組成。
patch在操作時(shí)把自己的輸出結(jié)果顯示在屏幕上,但是這種輸出通常都滾屏太快,來不及觀看。原來準(zhǔn)備patch的文件名為*.orig,新的patch文件會覆蓋這個(gè)初始文件名。
打補(bǔ)丁的問題
使用不同版本的patch問題來源可能不同,所有的版本在網(wǎng)絡(luò)上都是可用的。Larry Wall近年來已經(jīng)不再做很多工作來更新patch了,這可能是由于他最后發(fā)行的一個(gè)版本在大部分情況下都能正常運(yùn)行。最近幾年以來,一直是GNU項(xiàng)目的 FSF程序員發(fā)行新版本的patch。他們首先修訂有問題的patch,但是我最近一直使用沒有問題的2.5版本(這是Debian2.0的發(fā)行版本號)。過去,我的2.1版本也一直運(yùn)行的很好。當(dāng)前的GNU patch的版本可以從GNU FTP站點(diǎn)上獲取,然而大部分人都只使用他們Linux發(fā)行版中所提供的版本。
讓我們假定你已經(jīng)對一個(gè)目錄下的源程序文件進(jìn)行了patch修補(bǔ)工作,但是patch并沒有清晰地發(fā)揮作用。這可能會偶然發(fā)生,在打補(bǔ)丁的過程中會顯示錯誤信息,其中帶有行號,說明哪一個(gè)文件出現(xiàn)了問題。有時(shí)錯誤是很明顯的,例如缺少了分號,??種錯誤可以不費(fèi)多大力氣就能改正。另外一種可能是從 patch部分刪除了產(chǎn)生問題的部分,但是這樣根據(jù)所涉及到的文件的不同可能會正常工作,也可能不能正常工作了。
另外一種常見的錯位為:假設(shè)你有一個(gè)未使用tar打包的內(nèi)核源程序文件,在/linux/arch/下瀏覽各個(gè)子目錄時(shí)你會發(fā)現(xiàn)各種機(jī)器體系結(jié)構(gòu)子目錄,例如alpah、sparc等等。如果你和大多數(shù)Linux用戶一樣,使用的是Intel的處理器(或者是Intel系列),你可以決定刪除這些目錄,這些目錄對于編譯你特殊的內(nèi)核并不需要,只是白白占用了磁盤空間。一段時(shí)間之后發(fā)行了一個(gè)新的內(nèi)核patch,此時(shí)試圖進(jìn)行patch操作,當(dāng)它發(fā)現(xiàn)不能找到自己打補(bǔ)丁需要的Alpha或者PPC文件,就會停頓下來。幸運(yùn)的是patch在這些地方允許用戶參與,它會詢問Skip this patch?回答y,patch就可以按照正確的路徑繼續(xù)執(zhí)行。也許你需要回答這個(gè)問題很多次,因此允許自己不需要的目錄保留在磁盤上是一種很好的方法。