導航:首頁 > 編程系統 > linuxpatch下載

linuxpatch下載

發布時間:2021-12-07 14:17:27

linux查看補丁的方法

linux下patch命令使用詳解---linux打補丁命令
功能說明:修補文件
語法:patch
[-bceEflnNRstTuvZ][-B
<備份字首字元串>][-d
<工作目錄>][-D
<標示符號>][-F
<監別列數>][-g
<控制數值>][-i
<修補文件>][-o
<輸出文件>][-p
<剝離層級>][-r
<拒絕文件>][-V
<備份方式>][-Y
<備份字首字元串>][-z
<備份字尾字元串>][--backup-if
-mismatch][--binary][--help][--nobackup-if-mismatch][--verbose][原始文件
<修補文件>]

path
[-p
<剝離層級>]
<
[修補文件]
補充說明:patch指令讓用戶利用設置修補文件的方式,修改,更新原始文件。倘若一次僅修改一個文件,可直接在指令列中下達指令依序執行。如果配合修補文件的方式則能一次修補大批文件,這也是Linux系統核心的升級方法之一。
參數:
-b或--backup
備份每一個原始文件。
-B<備份字首字元串>或--prefix=<備份字首字元串>
設置文件備份時,附加在文件名稱前面的字首字元串,該字元串可以是路徑名稱。
-c或--context
把修補數據解譯成關聯性的差異。
-d<工作目錄>或--directory=<工作目錄>
設置工作目錄。
-D<標示符號>或--ifdef=<標示符號>
用指定的符號把改變的地方標示出來。
-e或--ed
把修補數據解譯成ed指令可用的敘述文件。
-E或--remove-empty-files
若修補過後輸出的文件其內容是一片空白,則移除該文件。
-f或--force
此參數的效果和指定-t參數類似,但會假設修補數據的版本為新版本。
-F<監別列數>或--fuzz<監別列數>
設置監別列數的最大值。
-g<控制數值>或--get=<控制數值>
設置以RSC或SCCS控制修補作業。
-i<修補文件>或--input=<修補文件>
讀取指定的修補問家你。
-l或--ignore-whitespace
忽略修補數據與輸入數據的跳格,空格字元。
-n或--normal
把修補數據解譯成一般性的差異。
-N或--forward
忽略修補的數據較原始文件的版本更舊,或該版本的修補數據已使用過。
-o<輸出文件>或--output=<輸出文件>
設置輸出文件的名稱,修補過的文件會以該名稱存放。
-p<剝離層級>或--strip=<剝離層級>
設置欲剝離幾層路徑名稱。
-f<拒絕文件>或--reject-file=<拒絕文件>
設置保存拒絕修補相關信息的文件名稱,預設的文件名稱為.rej。
-R或--reverse
假設修補數據是由新舊文件交換位置而產生。
-s或--quiet或--silent
不顯示指令執行過程,除非發生錯誤。
-t或--batch
自動略過錯誤,不詢問任何問題。
-T或--set-time
此參數的效果和指定-Z參數類似,但以本地時間為主。
-u或--unified
把修補數據解譯成一致化的差異。
-v或--version
顯示版本信息。
-V<備份方式>或--version-control=<備份方式>
用-b參數備份目標文件後,備份文件的字尾會被加上一個備份字元串,這個字元串不僅可用-z參數變更,當使用-V參數指定不同備份方式時,也會產生不同字尾的備份字元串。
-Y<備份字首字元串>或--basename-prefix=--<備份字首字元串>
設置文件備份時,附加在文件基本名稱開頭的字首字元串。
-z<備份字尾字元串>或--suffix=<備份字尾字元串>
此參數的效果和指定-B參數類似,差別在於修補作業使用的路徑與文件名若為src/linux/fs/super.c,加上backup/字元串後,文件super.c會備份於/src/linux/fs/backup目錄里。
-Z或--set-utc
把修補過的文件更改,存取時間設為UTC。
--backup-if-mismatch
在修補數據不完全吻合,且沒有刻意指定要備份文件時,才備份文件。
--binary
以二進制模式讀寫數據,而不通過標准輸出設備。
--help
在線幫助。
--nobackup-if-mismatch
在修補數據不完全吻合,且沒有刻意指定要備份文件時,不要備份文件。
--verbose
詳細顯示指令的執行過程。
patch,是打補丁的命令,有很多用法,見幫助#man
patch
patch
-p0
(「p」指的是路徑,後面的數字表示去掉路徑的第幾部分。0,表示不去掉,為全路徑)
patch
-p1
(「p」後面的數字1,表示去掉前第一個路徑)fetch
http://people.freebsd.org/~delphij/misc/patch-bge-releng62
fetch
http://people.freebsd.org/~delphij/misc/patch-bce-watchdog-rewritecd
/sys/dev/bge
fetch
...
patch
-p0
<
...fetch
http://people.freebsd.org/~delphij/misc/patch-tcp_auto_buf-20061212-RELENG_6.diff
patch
-p
<
patch-tcp_auto_buf-20061212-RELENG_6.diff
也可以把文件中的目錄全改成系統已在的目錄如/usr/src/sys.....注意:
1,確認目錄
然後確認目錄,如不在默認目錄下,就寫下要打補丁的當前絕對目錄。如/usr/src/sys/dev/bge/if_bce.c2,P的使用
可以使用不帶數字的參數。
patch
後的軟體安裝

telnetd伺服器的問題及補丁
在當前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守護進程中存在一個致命的緩沖區溢出漏洞,該問題是由於telnetd在處理telnet協議選項的函數中沒有進行有效的邊界檢查,當使用某些選項(\'AYT\')時,可能發生緩沖區溢出。這會導致遠程root級別的安全威脅。
因此,如果一定要使用telnet服務的話,必須為伺服器打上最新的patch,該patch可以從以下鏈接獲得:
(註:通常有兩個版本的telnetd伺服器,有crypto及無crypto的版本,因此需要判斷主機使用的是哪種版本的telnetd,這通常可以通過察看src文件來判斷,比如#
ls
/usr/src/crypto/telnet/telnetd,如果不存在,則說明使用的是無crypto的版本了,在判別清楚之後再分別下載相關補丁文件)
crypto版本補丁:
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-01:49/telnetd-crypto.patch
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-01:49/telnetd-crypto.patch.asc
patch方法:
#
cd
/usr/src/
#
patch
-p
<
/path/to/patch
#
cd
/usr/src/secure/libexec/telnetd
#
make
depend
&&
make
all
install
無crypto版本補丁:
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-01:49/telnetd.patch
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-01:49/telnetd.patch.asc
patch方法:
#
cd
/usr/src/
#
patch
-p
<
/path/to/patch
#
cd
/usr/src/libexec/telnetd
#
make
depend
&&
make
all
install
例子來源http://toby.bokee.com/文件:isp1161-2.6.12.patch(在/root下)
由於patch文件的首行已經指明了路徑,所以根據當前所在的目錄,加不同的參數使用patch命令:
1:如果當前的目錄是和linux-2.6.12的同級目錄:
[root@
www.linuxidc.com]#patch
-p0
</root/isp1161-2.6.12.patch
2:如果當前的目錄為
linux-2.6.12/:
[root@
www.linuxidc.com]#patch
-p1
</root/isp1161-2.6.12.patch
3:如果當前的目錄為
linux-2.6.12/drivers/:
[root@
www.linuxidc.com]#patch
-p2
</root/isp1161-2.6.12.pathc
0,1,2,是指略去的patch文件中的前幾級目錄。
ln
命令的使用
這是linux中一個非常重要的命令。它的功能是為某一個文件在另外一個位置建立一個不同的鏈接,這個命令最常用的參數是-s,具體用法是:ln
-s
源文件
目標文件。
當我們需要在不同的目錄,用到相同的文件時,我們不需要在每一個需要的目錄下都放一個必須相同的文件,我們只要在某個固定的目錄放上該文件,然後在其它的目錄下用ln命令鏈接(link)它就可以,不必重復的佔用磁碟空間。
例如:ln
-s
/bin/less
/usr/local/bin/less
-s
是代號(symbolic)的意思。
這里有兩點要注意:
第一,ln命令會保持每一處鏈接文件的同步性。也就是說,不論你改動了哪一處,其它的文件都會發生相同的變化。
patch附帶有一個很好的幫助,其中羅列了很多選項,但是99%的時間只要兩個選項就能滿足我們的需要:
patch
-p1
<
[patchfile]
patch
-R
<
[patchfile]
(used
to
undo
a
patch)
-p1選項代表patchfile中文件名左邊目錄的層數,頂層目錄在不同的機器上有所不同。要使用這個選項,就要把你的patch放在要被打補丁的目錄下,然後在這個目錄中運行path
-p1
<
[patchfile]。來自Linux內核patch的一個簡短的引用可以這樣實現:
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;
應用來自本段中使用-p1開關拷貝的patch可以有效地減短patch定位的路徑;patch會查找當前目錄下一個名為/mm的子目錄,接著應該會在這兒發現swapfile.c文件,然後等待打補丁。在這個過程中,以破折號(「-」號,譯者注)開始的行會被一個以加號(「+」號,譯者注)開始的行代替。一個典型的patch會包含對多個文件的更新,每個部分中都由對兩個版本的文件運行diff
-u命令的輸出結果組成。
patch在操作時把自己的輸出結果顯示在屏幕上,但是這種輸出通常都滾屏太快,來不及觀看。原來准備patch的文件名為*.orig,新的patch文件會覆蓋這個初始文件名。
打補丁的問題
使用不同版本的patch問題來源可能不同,所有的版本在網路上都是可用的。Larry
Wall近年來已經不再做很多工作來更新patch了,這可能是由於他最後發行的一個版本在大部分情況下都能正常運行。最近幾年以來,一直是GNU項目的
FSF程序員發行新版本的patch。他們首先修訂有問題的patch,但是我最近一直使用沒有問題的2.5版本(這是Debian2.0的發行版本號)。過去,我的2.1版本也一直運行的很好。當前的GNU
patch的版本可以從GNU
FTP站點上獲取,然而大部分人都只使用他們Linux發行版中所提供的版本。
讓我們假定你已經對一個目錄下的源程序文件進行了patch修補工作,但是patch並沒有清晰地發揮作用。這可能會偶然發生,在打補丁的過程中會顯示錯誤信息,其中帶有行號,說明哪一個文件出現了問題。有時錯誤是很明顯的,例如缺少了分號,��種錯誤可以不費多大力氣就能改正。另外一種可能是從
patch部分刪除了產生問題的部分,但是這樣根據所涉及到的文件的不同可能會正常工作,也可能不能正常工作了。
另外一種常見的錯位為:假設你有一個未使用tar打包的內核源程序文件,在/linux/arch/下瀏覽各個子目錄時你會發現各種機器體系結構子目錄,例如alpah、sparc等等。如果你和大多數Linux用戶一樣,使用的是Intel的處理器(或者是Intel系列),你可以決定刪除這些目錄,這些目錄對於編譯你特殊的內核並不需要,只是白白佔用了磁碟空間。一段時間之後發行了一個新的內核patch,此時試圖進行patch操作,當它發現不能找到自己打補丁需要的Alpha或者PPC文件,就會停頓下來。幸運的是patch在這些地方允許用戶參與,它會詢問Skip
this
patch?回答y,patch就可以按照正確的路徑繼續執行。也許你需要回答這個問題很多次,因此允許自己不需要的目錄保留在磁碟上是一種很好的方法。

⑵ 求教LINUX的PATCH命令無法執行問題

apt-get沒有搜索到patch這個包。

  1. 你可以在網上搜索patch的源碼包,自己編譯安裝。

  2. 自己添加一些源。(在網上搜索一些知名的源)

⑶ linux patch 找不到文件

你是不是沒有進入目錄呀,還是沒有linux這個目錄呀
要不你看一下有沒有這個文件
linux/.config
要不你嘗試一下pathch -p0<config.dff

⑷ linux 下的 驅動patch要打到哪兒

linux 下的 驅動patch要打到哪兒

格式:patch [選項] [原始文件 [補丁文件]]
常用參數:
-r 是一個遞歸選項,設置了這個選項,diff會將兩個不同版本源代碼目錄中的所有對應文件全部都進行一次比較,包括子目錄文件。
-N 選項確保補丁文件將正確地處理已經創建或刪除文件的情況。
-u 選項以統一格式創建補丁文件,這種格式比預設格式更緊湊些。
-p0 選項從當前目錄查找目的文件(夾)(直接使用補丁文件裡面指定的路徑)
-p1 選項忽略掉第一層目錄,從當前目錄查找(去掉補丁文件指定路徑最左的第1個'/'及前面所有內容)。
-E 選項說明如果發現了空文件,那麼就刪除它

⑸ suse linux的etc文件夾下,suse-release裡面suse的版本中PATCHLEVEL = 1 如何升級成 PATCHLEVEL 2

手動編輯~

⑹ linux下的patch命令

patch命令用於為特定軟體包打補丁,該命令使用diff命令對源文件進行操作。

格式:patch [選項] [原始文件 [補丁文件]]
常用參數:
-r 是一個遞歸選項,設置了這個選項,diff會將兩個不同版本源代碼目錄中的所有對應文件全部都進行一次比較,包括子目錄文件。
-N 選項確保補丁文件將正確地處理已經創建或刪除文件的情況。
-u 選項以統一格式創建補丁文件,這種格式比預設格式更緊湊些。
-p0 選項從當前目錄查找目的文件(夾)(直接使用補丁文件裡面指定的路徑)
-p1 選項忽略掉第一層目錄,從當前目錄查找(去掉補丁文件指定路徑最左的第1個'/'及前面所有內容)。
-E 選項說明如果發現了空文件,那麼就刪除它
-R 選項說明在補丁文件中的「新」文件和「舊」文件現在要調換過來了(實際上就是給新版本打補丁,讓它變成老版本)

示例:
1、單個文件
首先將兩個文件的內容顯示如下:
$ cat test0
00000000
00000000
00000000
$ cat test1
00000000
11111111
00000000

*生成補丁:
$ diff -uN test0 test1 >test1.patch
這樣將通過比較,生成test1的補丁文件。這里選項u表示使用同一格式輸出這樣產生的輸出便於閱讀易於修改,N表示把不存在的文件看做empty的.就算文件test0不存在,也會生成補丁。

*把test0通過打補丁變成test1文件:
$ patch -p0 <test1.patch
或$patch <test1.patch
這樣,test0的內容將和test1的內容一樣,但是文件名稱還是test0。關於patch的選項見後面多文件有說明。當前目錄下可以有test1.如果比較的時候test0是不存在的,那麼這時候會生成一個test0文件。

*把打過補丁的test0還原:
$ patch -RE -p0<test1.patch
或$patch -R <test1.patch
這樣,test0的內容將還原為原來沒有打過補丁的狀態。當前目錄下可以有test1.這里的-E選項是要求patch在文件為空的時候刪除文件,這個選項是不必要的因為patch是根據時間戳來判斷一個文件是否存在。如果比較的時候test0是不存在的,這將會刪除test0文件。
**

2、多個文件的:
首先查看文件結構如下:
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

*創建補丁:
$ diff -uNr prj0 prj1 > prj1.patch
這里項u表示使用同一格式輸出這樣產生的輸出便於閱讀易於修改,N表示把不存在的文件看做empty的,r表示遞歸地比較子目錄,比較的結果被標准重定向到文件prj1.patch中了。
運行之後,輸出的就是一個補丁,描述了兩個文件的不同,這個補丁就是把diff參數的第一個文件打補丁變成第二個文件的補丁文件。
實際過程依次比較兩個目錄下的同名文件,如果這里不加-N就會指明prj0name和test0隻在prj0中存在,prj1name和test1隻在prj1中存在,這就無法比較了,所以這里為了能夠比較,加上了-N選項。
為了便於理解,這里給出prj1.patch文件的內容:
$ 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選項接數字n,意思是去掉補丁文件里指定路徑的前n個'/'前綴.
例如補丁文件中指定路徑是/u/howard/src/blurfl/blurfl.c,那麼p0選項處理之後的路徑還是原來路徑不變,而p1選項處理之後的路徑是u/howard/src/blurfl/blurfl.c,同理p4處理之後的路徑是:blurfl/blurfl.c.
注意:如果在外層目錄運行這個命令,那麼會在外層目錄創建兩個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的內容打補丁成prj1的內容:
$ls -p
prj0/ prj1.patch
$patch -p0 <prj1.patch
這樣prj0中的內容變成了prj1中的內容,但是prj0的目錄名仍舊是prj0,如下:
$ls -p prj0
prj1name test1
注意:當前文件夾下面不能prj1目錄,否則會出現一些警告提示。

*在外層目錄把prj0的內容反打補丁還原成原來prj0的內容:
$ patch -R -p0 <prj1.patch
這樣原來的文件如下:
$ ls -p prj0
prj0name test0
**

⑺ linux怎麼運行patch

通過diff工具生成補丁, patch工具打上補丁.在使用diff之前, 你需要保留一份未修改過的源碼, 然後在其它地方修改源碼的一份拷貝. diff對比這兩份源碼生成patch. 修改過的源碼必須保留原來的文件名, 例如, 如果你修改源碼中的a.c文件, 那麼, 修改後的文件還是名為a.c, 在修改之前你可以復制a.c為a.orig.c進行備份.
diff命令必須在整個Linux源碼的根目錄的上一級目錄中執行.
1. 為單個文件生成補丁
diff -up linux-2.6.28.8/net/sunrpc/svc.orig.c linux-2.6.28.8/net/sunrpc/svc.c
這條命令會產生類似如下的輸出, 你將它重定向到一個文件中, 這個文件就是patch.
--- linux-2.6.28.8/net/sunrpc/svc.orig.c 2009-03-17 08:50:04.000000000 +0800
+++ linux-2.6.28.8/net/sunrpc/svc.c 2009-03-30 19:18:41.859375000 +0800
@@ -1050,11 +1050,11 @@ svc_process(struct svc_rqst *rqstp)
參數詳解:
-u 顯示有差異行的前後幾行(上下文), 默認是前後各3行, 這樣, patch中帶有更多的信息.
-p 顯示代碼所在的c函數的信息.

閱讀全文

與linuxpatch下載相關的資料

熱點內容
可編程式控制制器控制什麼 瀏覽:320
iphone取消阻止來電後 瀏覽:590
asp接收form表單上傳文件 瀏覽:437
用手機共享電腦網路 瀏覽:696
電腦文件路徑前綴 瀏覽:811
游戲編程都需要學哪些軟體下載 瀏覽:357
組成合同文件內容 瀏覽:895
黑寡婦燈光配置文件 瀏覽:833
前戲電影 瀏覽:668
linuxwgetcurl 瀏覽:636
河東區愛琴海影院影訊 瀏覽:601
反映女中介和客戶的台灣電影 瀏覽:341
網路技術專業前景 瀏覽:108
韓國古裝電影 床戲 瀏覽:933
哈薩克電影全集免費 瀏覽:405
韓國電影比尿尿尿的遠 瀏覽:340
一部悲傷的電影用英語怎麼說 瀏覽:303
大數據的論壇有哪些 瀏覽:854
筆記本沒網路怎麼上網 瀏覽:518
國產 電影區 小說區 圖片 瀏覽:379

友情鏈接