Linux下patch的制作和应用(转)

Linux Patch 文件代码补丁 Linux补丁文件的学习和记录 阅读详情

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 选项以统一格式创建补丁文件,这种格式比缺省格式更紧凑些。


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:56 1999
+++ new/modules/pcitable       Tue Dec 19 20:05:41 2000
    如果使用参数-p0,那就表示从当前目录找一个叫做old的文件夹,在它下面寻找modules下的pcitable文件来执行patch操作。
    如果使用参数-p1,那就表示忽略第一层目录(即不管old),从当前目录寻找modules的文件夹,在它下面找pcitable。这样的前提是当前目 录必须为modules所在的目录。而diff补丁文件则可以在任意位置,只要指明了diff补丁文件的路径就可以了。当然,可以用相对路径,也可以用绝 对路径。不过我一般习惯用相对路径。
************************************************************

-E 选项说明如果发现了空文件,那么就删除它

-R 选项说明在补丁文件中的“新”文件和“旧”文件现在要调换过来了(实际上就是给新版本打补丁,让它变成老版本)

下面结合具体实例来分析和解决,分为两种类型:为单个文件打补丁和为文件夹内的多个文件打补丁。

环境:在RedHat 9.0下面以armlinux用户登陆。

目录树如下:

    |-- bootloader
    |-- debug
    |-- images
    |-- kernel
    |-- program
    |-- rootfiles
    |-- software
    |-- source
    |-- sysapps
    |-- tmp
    |-- tools

下面在program文件夹下面建立patch文件夹作为实验用,然后进入patch文件夹。

一、为单个文件进行补丁操作

1、建立测试文件test0、test1

[armlinux@lqm patch]$ cat >>test0<<EOF
> 111111
> 111111
> 111111
> EOF

[armlinux@lqm patch]$ more test0
111111
111111
111111

[armlinux@lqm patch]$ cat >>test1<<EOF
> 222222
> 111111
> 222222
> 111111
> EOF

[armlinux@lqm patch]$ more test1
222222
111111
222222
111111

2、使用diff创建补丁test1.patch

[armlinux@lqm patch]$ diff -uN test0 test1 > test1.patch

【注:因为单个文件,所以不需要-r选项。选项顺序没有关系,即可以是-uN,也可以是-Nu。】

[armlinux@lqm patch]$ ls
test0 test1 test1.patch

[armlinux@lqm patch]$ more test1.patch
************************************************************
patch文件的结构
补丁头
补丁头是分别由---/+++开头的两行,用来表示要打补丁的文件。---开头表示旧文件,+++开头表示新文件。
一个补丁文件中的多个补丁
一个补丁文件中可能包含以---/+++开头的很多节,每一节用来打一个补丁。所以在一个补丁文件中可以包含好多个补丁。
块
块是补丁中要修改的地方。它通常由一部分不用修改的东西开始和结束。他们只是用来表示要修改的位置。他们通常以@@开始,结束于另一个块的开始或者一个新的补丁头。
块的缩进
块会缩进一列,而这一列是用来表示这一行是要增加还是要删除的。
块的第一列
+号表示这一行是要加上的。
-号表示这一行是要删除的。
没有加号也没有减号表示这里只是引用的而不需要修改。
************************************************************
***diff命令会在补丁文件中记录这两个文件的首次创建时间,如下***
--- test0       2006-08-18 09:12:01.000000000 +0800
+++ test1       2006-08-18 09:13:09.000000000 +0800
@@ -1,3 +1,4 @@
+222222
111111
-111111
+222222
111111

[armlinux@lqm patch]$ patch -p0 < test1.patch
patching file test0

[armlinux@lqm patch]$ ls
test0 test1 test1.patch

[armlinux@lqm patch]$ cat test0
222222
111111
222222
111111

3、可以去除补丁,恢复旧版本

[armlinux@lqm patch]$ patch -RE -p0 < test1.patch
patching file test0

[armlinux@lqm patch]$ ls
test0 test1 test1.patch

[armlinux@lqm patch]$ cat test0
111111
111111
111111

二、为多个文件进行补丁操作

1、创建测试文件夹

[armlinux@lqm patch]$ mkdir prj0
[armlinux@lqm patch]$ cp test0 prj0
[armlinux@lqm patch]$ ls
prj0 test0 test1 test1.patch

[armlinux@lqm patch]$ cd prj0/
[armlinux@lqm prj0]$ ls
test0

[armlinux@lqm prj0]$ cat >>prj0name<<EOF
> --------
> prj0/prj0name
> --------
> EOF

[armlinux@lqm prj0]$ ls
prj0name test0

[armlinux@lqm prj0]$ cat prj0name
--------
prj0/prj0name
--------

[armlinux@lqm prj0]$ cd ..
[armlinux@lqm patch]$ mkdir prj1
[armlinux@lqm patch]$ cp test1 prj1
[armlinux@lqm patch]$ cd prj1
[armlinux@lqm prj1]$ cat >>prj1name<<EOF
> ---------
> prj1/prj1name
> ---------
> EOF

[armlinux@lqm prj1]$ cat prj1name
---------
prj1/prj1name
---------

[armlinux@lqm prj1]$ cd ..


2、创建补丁

[armlinux@lqm patch]$ diff -uNr prj0 prj1 > prj1.patch

[armlinux@lqm patch]$ more prj1.patch

diff -uNr prj0/prj0name prj1/prj0name
--- prj0/prj0name       2006-08-18 09:25:11.000000000 +0800
+++ prj1/prj0name       1970-01-01 08:00:00.000000000 +0800
@@ -1,3 +0,0 @@
---------
-prj0/prj0name
---------
diff -uNr prj0/prj1name prj1/prj1name
--- prj0/prj1name       1970-01-01 08:00:00.000000000 +0800
+++ prj1/prj1name       2006-08-18 09:26:36.000000000 +0800
@@ -0,0 +1,3 @@
+---------
+prj1/prj1name
+---------
diff -uNr prj0/test0 prj1/test0
--- prj0/test0 2006-08-18 09:23:53.000000000 +0800
+++ prj1/test0 1970-01-01 08:00:00.000000000 +0800
@@ -1,3 +0,0 @@
-111111
-111111
-111111
diff -uNr prj0/test1 prj1/test1
--- prj0/test1 1970-01-01 08:00:00.000000000 +0800
+++ prj1/test1 2006-08-18 09:26:00.000000000 +0800
@@ -0,0 +1,4 @@
+222222
+111111
+222222
+111111

[armlinux@lqm patch]$ ls
prj0 prj1 prj1.patch test0 test1 test1.patch

[armlinux@lqm patch]$ cp prj1.patch ./prj0

[armlinux@lqm patch]$ cd prj0

[armlinux@lqm prj0]$ patch -p1 < prj1.patch
patching file prj0name
patching file prj1name
patching file test0
patching file test1

[armlinux@lqm prj0]$ ls
prj1name prj1.patch test1

[armlinux@lqm prj0]$ patch -R -p1 < prj1.patch
patching file prj0name
patching file prj1name
patching file test0
patching file test1

[armlinux@lqm prj0]$ ls
prj0name prj1.patch test0

-------------------------------------------------
总结一下:
单个文件
diff –uN from-file to-file >to-file.patch
patch –p0 < to-file.patch
patch –RE –p0 < to-file.patch

多个文件
diff –uNr from-docu to-docu >to-docu.patch
patch –p1 < to-docu.patch
patch –R –p1 <to-docu.patch
-------------------------------------------------

制作patch文件 打patch 附带linux打补丁命令 对某个版本的Linux内核做了修改以后,如果希望发布出去给别人用,那么就需要制作针对此版本的patch文件。 patch文件是一个文本文档,这个文档包含了在两个不同版本的源代码树之间的变化。 补丁是通过diff命令来创建的。 为了正确地打上一个补丁,你需要知道这个补丁是从哪个基础版本产生的以及这个补丁要把目前的源代码树变化到什么新版本。 这些信息或者会出现在补丁原数据中,或 阅读详情

相关推荐

linux patch 的制作方式

patch制作和使用的基本操作

细雨青峦的博客 1226

【Shell 命令集合 文件管理】Linux 补丁文件应用命令 patch命令使用指南

在Linux中,`patch`命令用于将补丁文件应用到源代码文件中,从而实现对源代码的修改。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 8254

[MTK][Android P]如何去掉差分包中的preloader分区

最近碰到一个问题,在进行差分升级的时候,会因为某些原因导致preloader hash值不匹配,升级失败,所以需要在差分升级的时候不升级preloader。 解决的方法,就是在制作AB分区的差分升级包的时候,把目标zip解压出来,把ab_partitions.txt中的分区名去掉,同时把preloader.img去掉 修改如下: Project/build/tools/releasetool...

thonmin的专栏 1434

Linux patch的生成与使用

生成patch的方法: 使用diff命令生成patch diff -uprN org chg > patch2 命令解释: 上面的命令表示,将chg文件夹基于org文件夹操作修改的内容生成一个patch2 简单点的就是:org文件夹是你的原始文件夹,chg文件夹是你在org文件夹的文件夹上面做了修改。那么现在你想把这些修改提取出来。就可以通过上面的命令把修改的内容放patch2里面。 参数解释: -uprN 多个文件的patch合并在一起 org 原始的代码 chg 修改后的代码 patch2 生

a3121772305的博客 4230

深入浅出:CosineLRScheduler 调度器的原理与实战应用

本文深入解析了CosineLRScheduler调度器的核心原理与实战应用,详细介绍了余弦退火算法及其在深度学习模型训练中的优势。通过参数配置建议、PyTorch实现示例和常见问题解决方案,帮助开发者高效应用该调度器提升模型性能,特别适用于计算机视觉和自然语言处理任务。

sss66的博客 859

CAN通信:EB中配置CAN驱动,配置参数解析

以S32K314芯片说明,其他芯片不同,参数配置也有差异。

zhangxiaio1的博客 2173

Linux patch命令教程:如何在Linux中应用和创建补丁(附实例详解和注意事项)

patch命令在Linux和其他类Unix操作系统中,用于将一个文件的修改应用到另一个文件。这个命令可以读取一个补丁文件,并使用其中的内容作为一组指令。通过遵循这些指令,修改后的文件中的更改可以在原始文件中复制。

u012964600的博客 1万+

S7-200 SMART Modbus RTU从站配置与调试实战指南

本文提供了一份详细的S7-200 SMART PLC配置为Modbus RTU从站的实战指南。内容涵盖从硬件基础、软件准备、指令库调用、核心编程到地址映射与调试排错的完整流程。重点解析了MBUS_INIT与MBUS_SLAVE指令的关键参数配置,并深入探讨了Modbus地址与PLC内部V存储区的对应关系,帮助工程师快速打通通讯链路,实现与上位机、触摸屏等主站设备的稳定数据交互。

potato的博客 754

为内核制作补丁patches

需要为kernel制作补丁 原始的kernel命名为linux-x.y.z 作了修改的kernel就命名为linux 为2个生成补丁 diff –urN linux-x.y.z/ linux/ > my-patch -u参数指定将会使用统一的diff格式,如果没有这个参数的话,这个补丁将会是很丑陋、不适合阅读的。 -r参数指定遍历的diff所有的目录。 -N参数指定在修改中出现的新文

hjwsm1989的专栏 837

TensorRT量化实战教程:从PTQ到QAT,让你的模型推理速度飞起来

无论是PTQ的“快速落地”,还是QAT的“精度极致”,TensorRT量化技术都能成为你模型部署路上的“性能引擎”。通过本教程的实战项目,你已掌握从技术原理到工程落地的全流程能力——现在,不妨将你的模型代入其中,亲眼见证它在速度与精度的双重提升中“焕发生机”。若你在实操中遇到任何卡点,随时可以针对具体问题交流,我会尽全力帮你突破量化部署的每一个瓶颈。

FJN110的博客 239

Dify框架面试内容整理-如何优化Dify的应用性能?

为1536维)可选用 PCA、FAISS 的量化压缩方法降低维度(如128、256、512);对知识库预览、任务流配置等页面,使用 nginx/cache-control 减少请求。API 响应耗时(P50/P95)、Token 使用量、缓存命中率、向量检索耗时;对 Prompt+输入内容计算 Hash,缓存相同请求的返回结果;使用占位符 + 函数拼接,按需组合 Prompt,而非静态长模板;数据量大时,应在构建索引前清洗冗余段落、统一格式,避免重复向量。维度越低,检索越快,但可能影响召回准确度,需平衡。

不务正业的猿 1551

linux打patch和patch制作的方法(diff和patch命令)

linux下常用的补丁命令有两个:diff和patch,diff用来制作补丁文件,patch用来给源文件打补丁。 一、diff命令 格式:$ diff [options] src_file dest_file [> patchfile.patch] 说明:src_file表示原始文件,dest_file表示修改后的文件,patchfile.patch表示生成的补丁文件。options的常用选项如下: -r 递归选项,用于将两个目录下所有文件(包括子目录下的子文件)逐一比对,通常用于对多个文件或者文件

weixin_39270987的博客 5996

thinkphp6/8 - 实现评论区发表评论、回复评论功能数据库表设计与整个逻辑思路过程分析,tp5 评论盖楼等功能(附带源码稍加改造即可使用)

tp5评论区数据库表设计,tp5发表回复评论功能设计,thinkphp5如何做评论功能,tp5 php评论区实现发表回复删除评论,tp5评论区盖楼源码及数据表设计思路,thinkphp评论功能详细教程,thinkphp实现评论与回复功能,thinkphp实现文章评论和回复评论功能,tp5实现评论回复功能,thinkphp如何实现评论区,tp5网站PC移动端h5怎么做评论区发表留言及回复功能,thinkphp实现评论区插件,thinkphp评论区相互发表回复功能详细教程,thinkphp有没有评论区的组件插件

✅ 精选推荐文章 3159

Linux下patch的制作和应用

Linux下patch的制作和应用 学习资料的收集比较简单,方法一类似于这种初级问题网上资料非常丰富,google或者baidu搜索一下,然后选择有价值的资料,方法二是阅读man在线文档。完成收集工作,当然最终要在自己的Linux上作实验,比较总结,消化吸收为自己的东西。要除去这么一种错误思想:一定要学全。要知道,一次学全是不可能的,只能先学习最为常用的,在以后不断

nlcchina的专栏 564

【Windows Server 2019】邮件服务器配置与管理——安装及配置Winmail服务器(上)

博文介绍了如何安装邮件服务器 Winmail,如何配置Winmail,包括运行服务器,Winmail管理工具介绍和域名配置。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 2万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

如何制作LINUX的patch文件及如何打patch

本文转载于 https://blog.youkuaiyun.com/zhenwenxian/article/details/8393731 在此感谢原博主的分享 如何制作LINUX的patch文件及如何打patch 对某个版本的Linux内核做了修改以后,如果希望发布出去给别人用,那么就需要制作针对此版本的patch文件。 patch文件也叫补丁,就是一个文本文档,这个文档包含了在两个不同版本的源代码树之间的...

weixin_37778713的博客 581

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

linux内核patch文件夹,如何制作patch文件及如何打patch 附带linux打补丁命令

对某个版本的Linux内核做了修改以后,如果希望发布出去给别人用,那么就需要制作针对此版本的patch文件。比如基于Linux-2.6.25内核 做了修改,修改后的内容放在文件夹Linux-2.6.25-yuanbor下,那么制作patch文件的命令为:diff -uNr Linux-2.6.25 Linux-2.6.25-yuanbor > yuanbor.patch 这时就 可以把yua...

weixin_29459473的博客 2518

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【转】Linux下使用diff和patch制作及打补丁

在做开发的过程中难免需要给内核及下载的一些源码打补丁,所以我们先学习下Linux下使用如如何使用diff制作补丁以及如何使用patch打补丁。(本篇文章系转载自网友。)首先介绍一下diff和patch。1、diff--------------------NAME       di

jaylondon的技术博客 1107

Linux 下 如何打 PATCH 及制作 DIFF

 Linux下patch的制作和应用 <br />因为在u-boot移植过程中,有几处通用文件要修改,如果每次都要手动修改就太麻烦了。制作补丁可以解决这个问题。<br />学习资料的收集比较简单,方法一类似于这种初级问题网上资料非常丰富,google或者baidu搜索一下,然后选择有价值的资料,方法二是阅读man在线文档。完成收集工作,当然最终要在自己的Linux上作实验,比较总结,消化吸收为自己的东西。要除去这么一种错误思想:一定要学全。要知道,一次学全是不可能的,只能先学习最为常用的,在以后不断实践的过

qupanpan110的专栏 1971

linux生成补丁命令,补丁制作与应用—diff和patch命令的使用

谈及linux补丁(patch)及其patch操作,自然而然地觉其复杂,故一直存敬畏之心,所以也就一直远离它。但像做嵌入式linux开发,有时候patch是无法绕过的。对于补丁制作与应用,实际上就是掌握linuxdiff和patch命令的使用,而这两个命令与linux其它命令一样,也是比较容易掌握的。如果你也有与我之前一样的敬畏心理,建议你不如早早放下这个心理包袱,赶紧掌握这个知识点。关于di...

weixin_42576410的博客 730
上一篇: 从2.4 到2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
下一篇: 如何在linux/unix中设置线程的优先级
freenaut
博客等级 码龄19年 5粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值