背景:

补丁的使用对于嵌入式开发人员来说,在维护或者开发中都比较方便。

制作补丁:

diff - 逐行比较文件。

格式: diff 参数 旧文件/旧文件夹 新文件/新文件夹 (注意顺序 新旧文件夹的顺序)

diff有很多参数,但是在制作补丁中主要使用以下参数。

-N   将不存在的文件看作是空的

-a   将所有文件都视为文本文件

-u   以合并的方式来显示文件内容的不同

-r   以递归地方式比较所有子目录
// 比较Test2在Test1版本上的更新并输出
diff -Naru Test1 Test2
// 比较Test2在Test1版本上的更新并输出到文件diff.patch
diff -Naru Test1 Test2 > diff.patch

例如:

$ cat a.c1234567890abcdefghijklmnopqrst
$ cat b.c1234567908abcdefgABCDEFGhijklmnoq

运行看看,只要将其重定向文件就相当于制作成文件:

$ diff a.c b.c -Naur
--- a.c 2019-12-26 22:47:23.826403400 +0800
+++ b.c 2019-12-26 22:47:21.287250500 +0800
@@ -1,6 +1,6 @@
12345
-67890   // -代表删除此行
+67908   // +增加此行; 先-后+ 相当于等于将67890改为67908
abcdefg
+ABCDEFG // +增加此行
hijklmn
-opq    // -代表删除此行
-rst   // -代表删除此行
+oq     // +增加此行

只要将其重定向文件就相当于制作成补丁:

diff -Naru a.c b.c > diff.patch

打补丁:

patch - 将一个diff文件应用到一个原始文件

格式:

patch   参数   <   补丁

-b   备份原始文件,打补丁时,会复制或者重命名原始文件来备份

-R   撤销补丁

-p(num)   表示忽略num层路径

对于文件打补丁

直接使用以下命令即可:

patch -b < diff.patch

效果:让a.c 的内容变成与 b.c 一模一样,保留一份后缀为.orig但内容与a.c之前的内容一样的文件。

对于目录的补丁

使用 -pN (N代表数字)指定目录的补丁从第几级路径开始。

kernel_a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c   kernel_b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c

假设补丁头是上面一行

如果使用 -p0,就从 / 目录开始,也就是从 kernel_a 目录开始;

如果使用 -p1,就从 drivers 目录开始,也就是从 kernel/drivers 目录开始,忽略 kernel 当前目录下的差异文件;

以此类推。

来到两个差异目录的根目录,输入下面命令,让补丁从根目录开始改动差异

patch -bp0 < diff.patch

可以使用 -x 排除指定的路径

撤销补丁:

patch - 将一个diff文件应用到一个原始文件

格式

patch -R [其他参数] < 补丁

-R 撤销已打的补丁

Linux 补丁 的简单使用: 制作补丁,打补丁,撤销补丁的更多相关文章

  1. Linux 制作补丁 打补丁 撤销补丁

    1.制作补丁 diff - 逐行比较文件 格式 diff   参数   旧文件/旧文件夹   新文件/新文件夹 -N   将不存在的文件看作是空的 -a   将所有文件都视为文本文件 -u   以合并 ...

  2. 『学了就忘』Linux软件包管理 — 48、给源码包打补丁

    目录 1.补丁的生成 2.补丁的打入 在以前的软件源码包,需要打补丁的时候比较多.现在的源码包很少进行打补丁了,因为根据需求安装不同的版本即可,比较商业化了.(也就是知道如何给源码包打补丁就可以了,了 ...

  3. Linux测试环境简单使用教程

    0. 本blog 简单说明一下 Linux测试环境尤其是 CentOS测试环境的开发测试使用, 教程可能不会很长, 主要是入门. 0.1 Linux简介: Linux 的历史基本上不用阐述, linu ...

  4. Linux中LVM2原理及制作LVM2

    Linux中LVM2原理及制作LVM2 一.LVM原理 [MD]:Multi Device 多设备 Mdadm是一个用户空间工具,是RAID的管理工具,与真正的RAID工作没有太大关系.真正的RAID ...

  5. Linux curl使用简单介绍

    在两台新搬迁的微信服务器上执行命令: curl -H "Content-Type: application/json" -d '{"partner_no":&q ...

  6. Linux下一个简单的日志系统的设计及其C代码实现

    1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息, 包括:变量名称及其值.消息结构定义.函数返回 ...

  7. [转帖] Linux 创建一个简单的私有CA、发证、吊销证书

    原创帖子地址:   https://blog.csdn.net/mr_rsq/article/details/71001810 Linux 创建一个简单的私有CA.发证.吊销证书 2017年04月30 ...

  8. Linux——帮助命令简单学习笔记

    Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...

  9. Linux守护进程简单介绍和实例具体解释

    Linux守护进程简单介绍和实例具体解释 简单介绍 守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程. ...

随机推荐

  1. ubuntu 16.04 XDRP实现Windows远程访问

    如何通过XDRP实现Windows远程访问 下面才是本文的重点,本文主要是讲xrdp在目前最新版Ubuntu 16.04下,如果实现Windows远程访问.网上也很多相关教程,但是都需要安装xfac4 ...

  2. php 高级 PHP的垃圾回收机制

    PHP可以自动进行内存管理,清楚不再需要的对象.PHP使用了引用计数这种单纯的垃圾回收机制.每个对象都内含一个引用计数器,每个reference链接到对象,计数器加1,当reference离开生存空间 ...

  3. 设计模式课程 设计模式精讲 3-10 里氏替换原则coding

    1 代码演练 1.1 继承关系判别(是否是真正意义的继承) 1.2 入参控制 1.3 出参控制 1 代码演练 1.1 继承关系判别(是否是真正意义的继承)(其实我觉得这个例子有点牵强) 1.1.1 反 ...

  4. springboot+mybatis多数据源

    首先,既然是多数据源,那么我们就先看下数据源怎么配置的: javaconfig类似下面这样: MapperScan注解常用配置如下: basePackages:Base packages to sca ...

  5. 7 JavaScript函数调用&this关键字&全局对象&函数调用&闭包

    JavaScript函数有4种调用方式,每种方式的不同之处在于this的初始化 一般而言,在JavaScript中,this指向函数执行时的当前对象 如果函数不属于任何对象,那么默认为全局对象,即HT ...

  6. 吴裕雄--天生自然ORACLE数据库学习笔记:Oracle 11g的闪回技术

    alter system set db_recovery_file_dest_size=4g scope=both; connect system/1qaz2wsx as sysdba; archiv ...

  7. struts标签 解析html标签

    参考:http://blog.csdn.net/shuangrenyu1234/article/details/24527745

  8. VS Code 入门

    将VSCode设置成中文语言环境 快捷键[Ctrl+Shift+P]—输入[Configure Display Language]—将“en”改为“zh-CN”—打开extention输入[Chine ...

  9. Controller 层类

    package com.thinkgem.jeesite.modules.yudengji.web; import java.util.Date; import javax.servlet.http. ...

  10. 「luogu4366」最短路

    「luogu4366」最短路 传送门 直接连边显然不行,考虑优化. 根据异或的结合律和交换律等优秀性质,我们每次只让当前点向只有一位之别的另一个点连边,然后就直接跑最短路. 注意点数会很多,所以用配对 ...