【Linux】patch補丁的生成與使用方法總結

引言

????????在 Linux 和開源世界中,patch 是一個極其強大且常用的工具。它允許開發者和系統管理員以增量方式修改文件,特別適用于源代碼的更新、錯誤修復、功能補丁的分發與應用。

目錄

引言

一、patch介紹

二、生成補丁文件

三、補丁文件內容解析

四、patch:應用補丁

1、基本語法

2、常見用法

五、常見應用場景

六、總結

參考資料


一、patch介紹

? ?patch 是一個命令行工具,用于將一個“補丁”(patch)文件應用到目標文件或目錄上,從而實現對文件內容的修改。補丁文件通常由 diff 命令生成,記錄了兩個文件之間的差異。

二、生成補丁文件

在使用 patch 之前,通常需要先用 diff 生成補丁文件。

最常用的是 統一格式(unified format),使用 -u 選項:

diff -u original.txt modified.txt > changes.patch

三、補丁文件內容解析

--- original.txt    2025-08-07 10:00:00.000000000 +0800
+++ modified.txt    2025-08-07 10:05:00.000000000 +0800
@@ -1,5 +1,6 @@This is the original file.It has several lines.
-Line to be removed.
+This line is added.A line in the middle.Another line.
+New line at the end.
  • ---:原始文件
  • +++:修改后的文件
  • @@ -1,5 +1,6 @@:表示從原始文件第1行開始的5行,變為修改后文件第1行開始的6行。
  • -?開頭的行:表示刪除
  • +?開頭的行:表示添加

四、patch:應用補丁

1、基本語法

patch [選項] [目標文件] <補丁文件>
-p<num>

從補丁文件中的文件路徑名中剝離 <num>層前導目錄

如:-p1?會移除路徑中的第一級目錄(如?/a/b/file.txt?變成?/b/file.txt

-b備份每個被修改文件的原始內容。備份文件名通常是原文件名加?~?后綴
-s靜默模式,不輸出錯誤信息
-f強制應用,忽略有錯誤前置條件的補丁,并假設補丁不是反向的
-N忽略已應用的補丁忽略已反向的或已應用過的補丁,防止重復應用或錯誤地反向應用
-r <file>將無法成功應用的補丁片段(拒絕的 hunks)輸出到指定的?FILE?文件中,指定拒絕文件名(默認為?.rej
--dry-run模擬運行不實際修改任何文件,只打印出將會發生什么。
-o <file>將打完補丁后的文件輸出到指定的?FILE
--merge使用沖突標記(<<<<<<<,?=======,?>>>>>>>),而不是創建拒絕文件
--help:

輸出幫助信息

2、常見用法

  • 應用單個文件補丁

patch original.txt < changes.patch
  • 剝離前導目錄安裝補丁(常用在源碼目錄

cd /path/to/source
patch -p1 < ../changes.patch

其中,-p1:表示去掉補丁文件中文件路徑的第一層目錄。

例如,補丁中路徑為?a/src/main.c,使用?-p1?后會查找?src/main.c

  • 安裝當前路徑下的所有patch文件(需統一補丁文件后綴,如“.patch”)
for patch in *.patch; dopatch -p1 < "$patch"
done
  • 備份原文件

patch -b original.txt < changes.patch
  • 指定工作目錄

patch -d /path/to/dir < changes.patch
  • 反向打補丁(回退到合并該補丁前)

patch -R < changes.patch
  • 模擬運行合并補丁
patch --dry-run original.txt < changes.patch

五、常見應用場景

  • 開源項目貢獻

????????開發者修改源碼后,使用 diff 生成補丁,提交給項目維護者審核。

  • 內核或軟件熱修復

????????在不重新編譯整個系統的情況下,通過打補丁快速修復安全漏洞。

  • 自動化構建與持續集成

????????CI/CD 流程中,自動應用配置補丁或代碼修復。

  • 版本控制輔助

????????雖然 Git 等工具已內置 diff/patch 功能,但在某些場景下仍需手動處理補丁。如??

#生成標準差異補丁
git diff > my-changes.patch#為單個提交生成補丁
git format-patch -1 <commit-hash>#為最近 N 個提交生成補丁
git format-patch -3#為從某個提交之后的所有提交生成補丁
#如生成所有在當前分支但不在 main 分支上的提交的補丁文件
git format-patch main

六、總結

? ?patchLinux 系統中不可或缺的工具之一,尤其在開源協作、系統維護和自動化部署中發揮著重要作用。掌握 diffpatch 的使用,不僅能提升工作效率,還能深入理解文件變更的本質。

參考資料

  • man diff
  • man Patch
  • GNU Patch Manual
  • Linux Documentation Project (tldp.org)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94846.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94846.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94846.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

雜談 001 · VScode / Copilot 25.08 更新

原文鏈接https://www.castamerego.com/blog/talk-001 2025.08.08 , VS code 發布八月更新&#xff0c;同一天 Copilot 也更新了 GPT-5, 淺體驗一下 VS code 更新 發行說明更新頁面內跳轉顯示 AI 比例頁面內跳轉 Copilot 更新 對話回溯 checkpoints頁面內跳轉進度列表頁面內…

微軟發布Project Ire項目:可自主檢測惡意軟件的人工智能系統

微軟Project Ire項目利用AI自主逆向工程并分類軟件性質微軟近日公布了Project Ire項目&#xff0c;這是一個能夠自主進行逆向工程并分類軟件性質的人工智能&#xff08;AI&#xff09;系統。該系統由大型語言模型&#xff08;LLM&#xff09;驅動&#xff0c;通過使用反編譯器等…

k8s核心組件——kubelet詳解

&#x1f680;Kubernetes 核心組件解析&#xff1a;什么是 Kubelet&#xff1f;它的作用是什么&#xff1f; 在 Kubernetes&#xff08;K8s&#xff09;集群中&#xff0c;Kubelet 是最重要的 Node 組件之一&#xff0c;它負責管理和維護 Pod 的生命周期&#xff0c;確保容器在…

C++ 部署LSTM(.onnx)

0、 背景 在工業自動化控制領域&#xff0c;預測某些變量是否關鍵。根據工廠的數據&#xff0c;訓練好模型之后&#xff0c;將其轉我通用的onnx 模型&#xff0c;并實現高效的推理。 模型訓練 import numpy as np from para import * from data_utils import MyDataset from da…

深度學習-卷積神經網絡CNN-1×1卷積層

1x1卷積核&#xff0c;又稱為網中網&#xff08;Network in Network&#xff09;&#xff1a;NIN卷積的本質是有效提取相鄰像素間的相關特征&#xff0c;而11的卷積顯然沒有此作用。它失去了卷積層的特有能力——在高度和寬度維度上&#xff0c;識別相鄰元素間相互作用的能力。…

使用 Python 異步爬蟲抓取豆瓣電影Top250排行榜

導讀 在現代網絡爬蟲開發中,面對 海量網頁數據、慢速響應的網絡接口,傳統的同步爬蟲方式已經不能滿足高效抓取需求。本文將手把手帶你構建一個 基于 aiohttp + asyncio 的異步爬蟲系統,實戰目標是抓取豆瓣電影 Top250 排行榜中的電影名稱、評分和詳情頁地址。 目錄 導讀 …

云原生開發全面解析:從核心理念到實踐挑戰與解決方案

1. 云原生開發的核心理念與定義 云原生&#xff08;Cloud Native&#xff09;是一種基于云計算環境設計和運行應用程序的方法論&#xff0c;其三大技術支柱為容器化、微服務和聲明式API。根據CNCF定義&#xff0c;云原生技術通過標準化接口和自動化管理&#xff0c;使應用具備…

WebForms 實例

WebForms 實例 引言 WebForms 是 ASP.NET 技術中的一種重要技術,它允許開發者以表單的形式創建動態網頁。本文將通過具體的實例,深入探討 WebForms 的基本概念、實現方法以及在實際項目中的應用。 WebForms 簡介 WebForms 是一種用于創建動態網頁的框架,它允許開發者以類…

Java 之 多態

一、多態 多態故名思義&#xff0c;多種狀態。比如Animal 這個類中&#xff0c;eat 方法是 公共的方法&#xff0c;但是當 People&#xff0c;Dog , Cat,繼承時&#xff0c;我們知道人要吃的是米飯&#xff0c;狗要吃的是狗糧&#xff0c;貓要吃的是貓糧。所以當不同類型的引用…

文件結構樹的├、└、─ 符號

目錄一、├、└、─符號的背景二、├、└、─ 符號的含義2.1 ├ 帶豎線的分支符號2.2 └不帶豎線的分支符號2.3 ─橫線符號三、Windows系統中生成目錄樹一、├、└、─符號的背景 我們在編程中&#xff0c;可能會經常遇到一些特殊符號├、└、─。這并非偶然&#xff0c;二十由…

微軟XBOX游戲部門大裁員

近日有報道稱&#xff0c;微軟正計劃對Xbox游戲部門進行另外一次裁員&#xff0c;影響的將是整個團隊&#xff0c;而不是特定崗位或者部門&#xff0c;大概10%至20%的Xbox團隊成員受到影響&#xff0c;這是微軟這次對Xbox業務重組的一部分。 據報道&#xff0c;微軟已經開始新…

【關于Java 8 的新特性】

問&#xff1a;“Java 8 有啥新東西&#xff1f;” 你憋了半天&#xff0c;只說出一句&#xff1a;“嗯……有 Lambda 表達式。”別慌&#xff01;Java 8 可不只是“語法糖”那么簡單。它是一次真正讓 Java 從“老派”走向“現代” 的大升級&#xff01;一、Lambda 表達式&…

《嵌入式數據結構筆記(六):二叉樹》

1. ??樹數據結構的基本定義和屬性??樹是一種重要的非線性數據結構&#xff0c;用于表示層次關系。??基本定義??&#xff1a;樹是由 n&#xff08;n ≥ 0&#xff09;個結點組成的有限集合。當 n 0 時&#xff0c;稱為空樹&#xff1b;當 n > 0 時&#xff0c;樹必須…

sqlite的sql語法與技術架構研究

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 參考&#xff1a;參考提示詞與豆包AI交互輸出內容。 sqlite作為最常用的本地數據庫&#xff0c;其支持的sql語法也比較全面&#xff0c;歷經了二十多年經久不衰&#xff0c;其技術架構設計也是非常優秀的。 一&#xff1a…

Javascript中的一些常見設計模式

1. 單例模式&#xff08;Singleton Pattern&#xff09; 核心思想 一個類只能有一個實例&#xff0c;并提供一個全局訪問點。 場景 全局緩存Vuex / Redux 中的 store瀏覽器中的 localStorage 管理類 示例 const Singleton (function () {let instance;function createInstance…

2025 年最佳 AI 代理:工具、框架和平臺比較

目錄 什么是 AI Agents 應用 最佳 AI Agents&#xff1a;綜合列表 LangGraph AutoGen CrewAI OpenAI Agents SDK Google Agent Development Kit (ADK) 最佳no-code和open-source AI Agents Dify AutoGPT n8n Rasa BotPress 最佳預構建企業 AI agents Devin AI …

Linux 學習 ------Linux 入門(上)

Linux 是一種自由和開放源代碼的類 Unix 操作系統。它誕生于 1991 年&#xff0c;由芬蘭程序員林納斯?托瓦茲&#xff08;Linus Torvalds&#xff09;發起并開發。與 Windows 等閉源操作系統不同&#xff0c;Linux 的源代碼是公開的&#xff0c;任何人都可以查看、修改和傳播&…

[202403-E]春日

[202403-E]春日 題目背景 春水初至&#xff0c; 文筆亦似花開。 題目描述 坐看萬紫千紅&#xff0c; 提筆洋洋灑灑&#xff0c; 便成篇文章。 現在給你這篇文章&#xff0c; 這篇文章由若干個單詞組成&#xff0c; 沒有標點符號&#xff0c; 兩兩單詞之間由一個空格隔開。 為了…

Unity筆記(三)——父子關系、坐標轉換、Input、屏幕

寫在前面寫本系列的目的(自用)是回顧已經學過的知識、記錄新學習的知識或是記錄心得理解&#xff0c;方便自己以后快速復習&#xff0c;減少遺忘。這里只有部分語法知識。九、父子關系1、獲取、設置父對象(1)獲取父對象可以通過this.transform.parent獲取當前對象的父對象Trans…

基于Dubbo的高并發服務治理與流量控制實戰指南

基于Dubbo的高并發服務治理與流量控制實戰指南 在微服務架構的大規模應用場景中&#xff0c;如何保證服務在高并發壓力下的穩定與可用&#xff0c;是每位后端開發者必須面對的挑戰。本文結合實際生產環境經驗&#xff0c;分享基于Apache Dubbo的高并發服務治理與流量控制方案&a…