引言

        在 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…