Linux中patch檔案的產生與使用
首先介紹一下diff和patch。在這裡不會把man線上文件上所有的選項都介紹一下,那樣也沒有必要。在99%的時間裡,我們只會用到幾個選項。所以必須學會這幾個選項。
1、diff 命令
--------------------
NAME
diff - find differences between two files
SYNOPSIS
diff [options] from-file to-file
--------------------
簡單的說,diff的功能就是用來比較兩個檔案的不同,然後記錄下來,也就是所謂的diff補丁。語法格式:diff 【選項】 原始檔(夾)目的檔案(夾),就是要給原始檔(夾)打個補丁,使之變成目的檔案(夾),術語也就是“升級”。
下面介紹三個最為常用選項:
-r 是一個遞迴選項,設定了這個選項,diff會將兩個不同版本原始碼目錄中的所有對應檔案全部都進行一次比較,包括子目錄檔案。
-N 選項確保補丁檔案將正確地處理已經建立或刪除檔案的情況。
-u 選項以統一格式建立補丁檔案,這種格式比預設格式更緊湊些。
簡單的示例:
$ diff -uN File0.cpp File1.cpp > diff.patch
diff.patch就是生成的patch檔案。後面會簡單的介紹一下patch檔案的結構。
2、patch 命令
------------------
NAME
patch - apply a diff file to an original
SYNOPSIS
patch [options] [originalfile [patchfile]]
but usually just
patch -pnum <patchfile>
------------------
簡單的說,patch就是利用diff製作的補丁來實現原始檔(夾)和目的檔案(夾)的轉換。這樣說就意味著你可以由原始檔(夾)――>目的檔案(夾),也可以由目的檔案(夾)――>原始檔(夾)。
下面介紹幾個最常用選項:
-p0 選項要從當前目錄查詢目的檔案(夾)
-p1 選項要忽略掉第一層目錄,從當前目錄開始查詢。
************************************************************
在這裡以例項說明:
---old/modules/pcitable Mon Sep 27 11:03:561999
+++new/modules/pcitable Tue Dec 19 20:05:412000
如果使用引數-p0,那就表示從當前目錄找一個叫做old的資料夾,在它下面尋找modules下的pcitable檔案來執行patch操作。
如果使用引數-p1,那就表示忽略第一層目錄(即不管old),從當前目錄尋找modules的資料夾,在它下面找pcitable。這樣的前提是當前目錄必須為modules所在的目錄。而diff補丁檔案則可以在任意位置,只要指明瞭diff補丁檔案的路徑就可以了。當然,可以用相對路徑,也可以用絕對路徑。不過我一般習慣用相對路徑。
************************************************************
-E 選項說明如果發現了空檔案,那麼就刪除它
-R 選項說明在補丁檔案中的“新”檔案和“舊”檔案現在要調換過來了(實際上就是給新版本打補丁,讓它變成老版本)
簡單的示例:
方式一:$patch File0.cpp diff.patch
方式二:$patch -p0 < diff.patch
通過下面的命令,可以去除補丁,恢復舊版本
$ patch -RE -p0 < diff.patch
3、patch檔案的結構
(1)補丁頭:
補丁頭是分別由---/+++開頭的兩行,用來表示要打補丁的檔案。---開頭表示舊檔案,+++開頭表示新檔案。
(2)塊:
塊是補丁中要修改的地方。它通常由一部分不用修改的東西開始和結束。他們只是用來表示要修改的位置。他們通常以@@開始,結束於另一個塊的開始或者一個新的補丁頭。
塊的縮排:塊會縮排一列,而這一列是用來表示這一行是要增加還是要刪除的。
塊的第一列:
+號表示這一行是要加上的。
-號表示這一行是要刪除的。
沒有加號也沒有減號表示這裡只是引用的而不需要修改。
--- File0.cpp 2013-08-01 13:40:35.579447633 +0800
+++ File1.cpp 2013-08-01 13:41:04.609447640 +0800
@@ -1 +1 @@
-The First file.
+The Second File.
相關文章
- patch檔案的製作與使用
- Patch檔案的生成和使用
- 產生的檔案找不到
- 在Linux下產生並除錯core檔案Linux除錯
- 利用linux的/dev/urandom檔案產生較好的隨機數Linuxdevrandom隨機
- 使用vim修改linux中的檔案Linux
- 從spfile二進位制檔案中產生init.ora文字檔案
- 利用MATLAB產生COE檔案Matlab
- trace 檔案產生過多,使用者不能登陸
- 如何製作patch檔案及如何打patch 附帶linux打補丁命令Linux
- 對於MultipartFile使用tika判斷檔案型別,不會產生臨時檔案的方法型別
- Linux中檔案與目錄的區別Linux
- sqlplus 能生產xls的excel檔案SQLExcel
- 使用adpatch打patch時log檔案生成目錄
- Spring中如何為屬性配置檔案自動產生文件?Spring
- VMware複製檔案產生的快取路徑快取
- 用MATLAB產生VIVADO可用的coe檔案Matlab
- EM執行後產生大量err檔案
- 控制檔案自動備份報錯併產生TRACE檔案
- 如何使用diff 和 patch 命令對檔案進行協作?
- 使用 matlab 產生GK101任意波資料檔案的方法Matlab
- LINUX 的patch 製作,及打patchLinux
- spring-boot-route(十六)使用logback生產日誌檔案Springboot
- Linux中隱藏檔案與資料夾Linux
- 差異檔案(diff)和補丁檔案(patch)簡介
- [20170414]產生很大trace檔案.txt
- API檔案產生器-javadoc.exe(轉)APIJava
- Windows、Linux下檔案操作(寫、刪除)錯誤的產生原因、及解決方法WindowsLinux
- Linux----12 檔案與檔案操作Linux
- linux 生產者與消費者問題Linux
- oracle檢視昨天產生歸檔日誌檔案總量Oracle
- oracle 使用spool 生產離線檔案時,每行有多餘的空格怎麼辦?Oracle
- Linux中目標與檔案的編輯管理(詳細)Linux
- Linux中檔案的壓縮與解壓縮(轉貼)Linux
- 在Linux中,如何使用grep命令查詢檔案中的內容?Linux
- 10g採用共享模式連線db產生的tracel檔案放在了bdump中!模式
- webpack watch模式產生*.hot-update.json檔案Web模式JSON
- 生產庫MySQL配置檔案my.cnf詳解MySql