Linux 补丁 的简单使用: 制作补丁,打补丁,撤销补丁

背景:

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

制作补丁:

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   撤销已打的补丁

原文地址:https://www.cnblogs.com/schips/p/12105127.html

时间: 2024-10-09 10:26:47

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

linux mini模式下如何制作本地yum源,并用远程工具安装 vim

linux mini模式下如何制作本地yum源,并用远程工具安装 vim 打开虚拟机 启动centos 系统 点右下角的光盘图标 出现连接(或是断开).设置,下拉菜单,选择 "设置" 在虚拟机设置对话框内如图所示 [[email protected] ~]# vim -bash: /usr/bin/vim: 没有那个文件或目录 光盘挂载: 查看系统中所有的挂载信息 [[email protected] ~]# mount /dev/sda3 on / type ext4 (rw) pr

Linux终端下简单的登录程序 密码不回显

在Linux进行登录是输入密码不会被回显,所以我也写了个简单的登入程序,使得在输入密码时不再进行回显. #include <stdio.h> #include <stdlib.h> #include <termios.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <stdbool.h> #define USER_NAME &qu

[软件测试]Linux环境中简单清爽的Google Test (GTest)测试环境搭建(初级使用)

本文将介绍单元测试工具google test(GTEST)在linux操作系统中测试环境的搭建方法.本文属于google test使用的基础教程.在linux中使用google test之前,需要对如下知识有一些了解: (1)C/C++编程方法 (2)makefile的编写 (3)linux命令行操作 (4)GTEST背景知识:它是用来干什么的?它用什么语言编写的?它的一些基本语法?等等 以上知识不需要做到熟能生巧,只要达到入门级别,使用GTEST不会费任何力气,毕竟GTEST也不是一个高门槛的

Linux awk命令简单操作

AWK Command: 一 : print print item1,item2,.......... 要点: 1.各项目之间使用逗号隔开,而输入时则以空白字符分隔 2.输出的item可以为字符串或树枝,当前记录的字段(如$1).变来那个或awk的表达式,树枝会转换成字符串 3.print命令后面的item可以省略,此时其功能相当于print $0,以此,如果想输出空白行,则需要print "" 例子: 1.awk 'BEGIN { pring "line one\n lin

Linux curl使用简单介绍

http://www.linuxidc.com/Linux/2008-01/10891.htm -------------------------------------------------- Linux curl使用简单介绍 [日期:2008-01-29]     来源:Linux公社  作者:notech Curl是Linux下一个很强大的http命令行工具,其功能十分强大. 1) 二话不说,先从这里开始吧!$ curl http://www.linuxidc.com回车之后,www.l

Linux下搭建简单的DHCP服务器

在RHEL6.5下搭建简单的DHCP服务器 实验目标 1.为192.168.10.0/24网段的客户机自动配置网络参数 用来给客户机自动分配地址的IP地址范围是:192.168.10.50-192.168.10.100.192.168.10.120-192.168.10.200 客户机的默认网关地址设为192.168.10.1 客户机所使用的DNS服务器设为202.106.0.20.8.8.8.8,默认域后缀是"tarena.com" 将默认租期设为2小时,最大租期设置为4小时 2.为

linux入门和简单应用举例

1. 账户 windows 管理员 administrator linux 管理员 root 2. 图形模式与字符模式切换 ctrl+alt+Fn (n=1~6) 从图形切换到字符 alt+Fn    从字符切换到其他模式 alt+F7    回到图形模式 3. 命令提示符 # 代表管理员 $ 代表普通用户 [登录用户@主机名 工作目录]# Linux下文件颜色意义 蓝色    -->  目录 绿色    -->  可执行文件 红色    -->  压缩文件 浅蓝色  -->  链

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

1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息, 包括:变量名称及其值.消息结构定义.函数返回值及其执行情况.脚本执行及调用情况等.通过阅读日志文件,我们能够较快地跟踪程序流程,并发现程序问题. 因此,熟练掌握日志系统的编写方法并快速地阅读日志文件,是对一个软件开发工程师的基本要求. 本文详细地介绍了Linux下一个简单的日志系统的设计方法,并给出了其C代码实现.本文为相关开发项目Linux

【Unity 3D】学习笔记二十九:游戏实例——简单小地图制作

任何的学习,光看不练是学不好的.所以这次就总结回顾下怎么制作MMROPG类游戏中的小地图.在MMROPG类游戏里,主角在游戏世界里走动时,一般在屏幕右上角都会有一个区域来显示当前游戏场景的小地图.主角在游戏世界里走动,小地图里代表着主角的小标记也会随之移动.那怎么实现咧? 首先需要确定两个贴图,第一个是右上角的小地图背景贴图,应该是从Y轴俯视向下截取主角所在的位置大地图.第二个就是主角的位置大贴图.在本例中,因为没有学习unity地图制作,所以地图用一个面对象代替,主角用立方体代替,使用GUI来