『無慾則無求』Linux軟件包管理 — 47、Linux源碼包的補丁(瞭解即可)

在以前的軟件源碼包,需要打補丁的時候比較多。現在的源碼包很少進行打補丁了,因爲根據需求安裝不同的版本即可,比較商業化了。

從開發者的角度,補丁就是軟件新版本和現有版本的不同。這個不同包括缺少的文件和修改的內容。

1、補丁的生成

#比較old和new文件的不同
[root@localhost ~] # diff 選項 old new 

選項:
-a:將任何文檔當做文本文檔處理。
-b:忽略空格造成的不同。
-B:忽略空白行造成的不同。
-I:忽略大小寫造成的不同。
-N:當比較兩個目錄時,如果某個文件只在一個目錄中,則在另一個目錄中視作空文件。
-r:當比較目錄時,遞歸比較子目錄。
-u:使用統一的輸出格式。

常用的選項爲-N、-a、-u、-r

舉例

#建立測試目錄
[root@localhost ~ ] # mkdir test

#進入測試目錄
[root@localhost ~ ] # cd test

#文件old txt,爲了一會輸出便於比較,每行分開
[root@localhost test] # vi old.txt 
our 
school

#文件new.txt
[root@localhost test] # vi new.txt 
our 
school 
in 
Beijing

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

#比較兩個文件的不同,同時生成txt.patch補丁文件
[root@localhost test] # diff -Naur /root/test/old.txt /root/test/new.txt > txt.patch
注意:
-Naur是常用選項,是用的時候直接用。
兩個文件一定要使用絕對路徑。
最後的文件名不需要絕對路徑。

#查看下這個文件
[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 @@
our 
school 
+in
+beijing

2、打入補丁

#按照補丁文件進行更新
[root@localhost test ] # patch -pn <補丁文件

選項:
-pn:n爲數字。代表按照補丁文件中的路徑,指定更新文件的位置。

可以看到上面打入補丁的命令中,沒有寫需要打補丁的是哪個文件。因爲在補丁文件中都有記錄,新文件和舊文件的位置。如下圖:
在這裏插入圖片描述

-pn不好理解,我們說明下。

  • 補丁文件是要打入舊文件的,但是你當前所在的目錄和補丁文件中的記錄的目錄是不一定匹配的,所以就需要"-pn"來同步兩個目錄的位置。(也就是說補丁文件中記錄的舊文件目錄,會追加到當前目錄上。p幾就是消除補丁文件中舊文件目錄的幾級目錄。)
  • 比如我當前是在/root/test目錄中(我要打補丁的舊文件就在當前目錄下),補丁文件中記錄的文件目錄爲/root/test/old.txt,這時如果寫入-p1(在補丁文件目錄中取消一級目錄)
  • 那麼補丁文件就會打入/root/test/root/test/old.txt文件中,這顯然是不對的。那如果寫入的是-p2(在補丁文件目錄中取消二級目錄)那麼補丁文件打入的就是/root/test/test/o1d.txt,這顯然也不對。如果寫入的是-p3(在補丁文件目錄中取消三級目錄)那麼補丁文件就是打入的
    /root/test/old.txt,我們的old.txt文件就在這個目錄下,所以就應該是-p3

那麼我們更新下"old.txt"文件,命令如下:

#給old.txt文件打補丁
[root@localhost test] # patch -p3 < txt.patch 
patching file old.txt(patch文件已經打入到old.txt文件中)

#查看下old.txt的內容吧。多出來了in Beiiing兩行
[root@localhost test ] # cat old.txt
our 
school 
in 
Beijing
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章