linux原始碼包公升級程式

2021-10-09 04:22:48 字數 3510 閱讀 4062

選項:

-a:將任何文件當作文字文件處理;

-b:忽略空格造成的不同;

-b:忽略空白行造成的不同;

-i: 忽略大小寫造成的不同;

-n:當比較兩個目錄時,如果某個檔案只在乙個目錄中,則在另乙個目錄中視作空檔案;

-r:當比較目錄時,遞迴比較子目錄;

-u:使用同一輸出格式;

我們舉乙個簡單的例子,來看看補丁是怎麼來的,然後應用一下這個補丁,看看有什麼效果

,這樣就可以說明補丁的作用了。先寫兩個檔案,命令如下:

[root@localhost ~]# mkdir test

#建立測試目錄

[root@localhost ~]# cd test

#進入測試目錄

[root@localhost test]# vi old.txt

ourschool

islampbrother

#檔案old.txt,為了便於比較,將每行分開

[root@localhost test]# vi new.txt

ourschool

islampbrother

inbeijing

#檔案new.txt

比較一下兩個檔案的不同,並生成補丁檔案"txt.patch",命令如下:

[root@localhost test]# diff -naur /root/test/old.txt /root/test/new.txt > txt. patch

#比較兩個檔案的不同,同時生成txt.patch補丁檔案

[root@localhost test]#vi txt.patch

#檢視一下這個檔案

–/root/test/old.txt 2012-11-23 05:51:14.347954373 +0800

#前乙個檔案

/root/test/new.txt 2012-11-23 05:50:05.772988210 +0800

#後乙個檔案

@@-2, 3+2, 5@@

school

islampbrother

+in+beijing

#後乙個檔案比前乙個檔案多兩行(用+表示)

既然"new.txt"比"old.txf檔案多了兩行,那麼我們能不能讓"old.txt"檔案按照補丁檔案"txt.patch"進行更新呢?當然可以,使用命令 patch 即可。命令格式如下:

[root@localhost test]# patch -pn < 補丁檔案

#按照補丁檔案進行更新

選項:-pn:n為數字。代表按照補丁檔案中的路徑,指定更新檔案的位置;

「-pn"不好理解,我們說明一下。補丁檔案是要打入舊檔案的,但是你當前所在的目錄和補丁檔案中記錄的目錄不一定是匹配的,所以就需要」-pn"選項來同步兩個目錄。

比如,我當前在"/root/test/「目錄中(我要打補丁 的舊檔案就在當前目錄下),補丁檔案中記錄的檔案目錄為」/root/test/dd.txt",

這時如果寫入"-p1"(在補丁檔案目錄中取消一級目錄),那麼補丁檔案就會打入"root/test/root/test/old.txt"檔案中,這顯然是不對的。那如果寫入的是"-p2"(在補丁檔案目錄中取消二級目錄),

那麼補丁檔案就會打入"/root/test/test/old.txt"檔案中,這顯然也不對。如果寫入的是"-p3"(在補丁檔案目錄中取消**目錄),那麼補丁檔案就會打入"/root/test/old.txt檔案中,

我們的old.txt檔案就在這個目錄下,所以應該用"-p3"選項。

如果我的當前所在目錄是"/root/「目錄呢?

因為補丁檔案中記錄的檔案目錄為」/root/test/old.txt",所以這裡就應該用"-p2"選項,

代表取消兩級目錄,補丁打在當前目錄下的"test/old.txt"檔案上。

那麼我們更新一下"old.txt"檔案,命令如下:

[root@localhost test]# patch -p3 < txt.patch

patching file old.txt

#給old.txt檔案打補丁

[root@localhost test]# cat old.txt

#檢視一下dd.txt檔案的內容

ourschool

islampbrother

inbeijing

#多出了in beijing兩行

注意以下兩點:

給舊檔案打補丁依賴的不是新檔案,而是補丁檔案,所以即使檔案被刪除也沒有關係。

補丁檔案中記錄的目錄和你當前所在目錄是需要通過"-pn"選項來同步的。

給apache打入補丁

我們再舉乙個實際的例子。前面章節中我們安裝了 httpd-2.2.9 這個版本的程式,在官網上有這個版本的乙個補丁"mod_proxy_ftp_cve-2008-2939.diff",

這個補丁修補了 apache ** ftp 站點時,模組空指標引用拒絕服務攻擊的漏洞。下面我們來看看如何安裝這個補丁。

把補丁檔案複製到 apache 原始碼包解壓目錄中

打入補丁

#進入apache原始碼目錄

#檢視補丁檔案

–modules/proxy/mod_proxy_ftp.c (revision 682869)

modules/proxy/mod_proxy_ftp.c (revision 682870)

…省略部分輸出…

#檢視一下補丁檔案中記錄的目錄,以便一會兒和當前所在目錄同步

#打入補丁

為什麼是"-p0"呢?因為我當前在"/root/httpd-2.2.9"目錄中,

但是補丁檔案中記錄的目錄是"modules/proxy/mod_proxy_ftp.c",

這就在我當前所在目錄中,乙個"/「都不需要去掉,所以是」-p0"。

重新編譯

重新安裝

打補丁的方法會比重新安裝少了"./configure"步驟,而且編譯時也只是編譯變化的地方,

所以編譯速度也更快。但是如果沒有安裝過 httpd-2.2.9,就需要先打入補丁,再依次執行"./configure" 「make」 "make install"命令。

如果我不想要補丁中的內容呢?可以恢復嗎?當然可以,命令如下:

mysql原始碼公升級 MySQL原始碼公升級

mysql原始碼公升級 公升級的方法一般有兩類 1.利用mysqldump來直接匯出sql檔案,匯入到新庫中,這種方法是最省事兒的,也是最保險的,缺點的話,也顯而易見,大庫的mysqldump費時費力。2.直接替換掉mysql的安裝目錄和my.cnf,利用mysql upgrade 來完成系統表的公...

Linux Openssh原始碼公升級

yum install y telnet server xinetd systemctl start xinetd systemctl start telnet.socket 監聽埠23,公升級實施完應關閉telnet服務 zlib 是通用的壓縮庫,提供了一套 in memory 壓縮和解壓函式,並...

linux 原始碼包安裝gcc

首先在配置gcc的過程中會出現錯誤 gcc configure error building gcc requires gmp 4.2 mpfr 2.3.1 and mpc 0.8.0 先開始安裝gmp。解壓gmp的壓縮包後,得到源 目錄gmp 4.3.2。在該目錄的同級目錄下建立乙個臨時的編譯目錄...