linux打patch简单示例
在项目中,有些模块是开源的,没有源码或者不能改动源码,想要修复、优化里面的Bug,这时就需要用到patch了。
1. 生成patch
制作补丁有两种法法,diff和quilt。
1.1 diff方法制作patch
1.1.1 示例
l 第一步,创建两个文件,test.c源文件和修改后的文件test_1.c。
ubuntu:~/code/test/patch$ cat test.c aa bb ubuntu:~/code/test/patch$ cat test_1.c aa bb
l 第二步,生成补丁,diff -u test.c test_1.c > 01_test.patch
ubuntu:~/code/test/patch$ cat 01_test.patch --- test.c -- ::43.694824855 + +++ test_1.c -- ::08.650825272 + @@ -, +, @@ aa + + bb
1.1.2 diff命令
简 单的说,diff的功能就是用来比较两个文件的不同,然后记录下来,也就是所谓的diff补丁。
diff [options] from-file to-file
from-file 源文件
to-file 根据源文件修改后的文件
option:
-u 显示有差异行的前后几行(上下文), 默认是前后各3行, 这样, patch中带有更多的信息.
-p显示代码所在的c函数的信息
-N 选项确保补丁文件将正确地处理已经创建或删除文件的情况。
-a逐行比较文本文件
-r比较子目录中的文件
1.2 quilt方式制作patch
quilt是一个制作和应用补丁的工具,它适合于管理较多补丁。
1.2.1 示例
l 第一步,quilt new 02_test.patch新加一个补丁文件
l 第二步,修改文件quilt edit test.c,进入文本框进行文件编辑
aa bb ^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos ^X Exit ^J Justify ^W Where Is ^V Next Page ^U UnCut Text ^T To Spell
l 第三步,quilt refresh将改动保存到patch中。
当前目录下增量了pathc目录,补丁文件02_test.patch即放在了改目录下。
ubuntu:~/code/test/patch$ cat patches/02_test.patch Index: patch/test.c =================================================================== --- patch.orig/test.c -- ::43.694824855 + +++ patch/test.c -- ::31.490842723 + @@ -, +, @@ aa + + bb
1.2.2 quilt命令
quilt top 查看最近的一个patch
quilt add {files} 关联文件
quilt remove files 取消关联文件,是add相反的操作
quilt diff 查看对比修改的内容
quilt files 查看当前patch关联的文件
quilt series 查看左右的patch
quilt pop 回退刚才文件的改动
2. 打patch
2.1 示例
l 第一步,存在两个文件,源文件test.c和patch文件01_test.patch
ubuntu:~/code/test/patch$ cat test.c aa bb ubuntu:~/code/test/patch$ cat 01_test.patch --- test.c -- ::43.694824855 + +++ test_1.c -- ::08.650825272 + @@ -, +, @@ aa + + bb
l 第二步,打patch,patch test.c < 01_test.patch,查看源文件,已经有了补丁上的修改。
ubuntu:~/code/test/patch$ cat test.c aa bb
2.2 命令
patch -RE < 01_test.patch 取消patch对源文件的修改
patch -p1 < patch1.diff
p表示跳过几级目录,0标识不去掉为全路径,1标识去掉第一层路径
注意:patch -p后面是不能带负数 的。不使用p参数的时候,patch命令会 忽略 任何目录,直接使用文件。
linux打patch简单示例的更多相关文章
- Linux字符设备简单示例
1. Linux字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,这样的驱动通常实现open.close.read和write系统调用.例如:串口.Led.按键等. 2. 通过字符设备文件 ...
- Qt Opencv 在Linux下摄像头简单示例(转)
下面写的文章也许网上也有类似的,但是大多数都没有给出思路及背景,让初学者每次都只能学到一点皮毛,不少知识需要大量搜索零碎地拼凑起来.题外话,虽然现在是碎片化信息时代,但正是这样信息整合能力也显得非常重 ...
- Linux网络编程简单示例
linux 网络编程是通过socket(套接字)接口实现,Socket是一种文件描述符,socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭& ...
- [pthread]Linux C 多线程简单示例
#include <stdio.h> #include <pthread.h> pthread_mutex_t mutex; pthread_cond_t cond; void ...
- Linux下的C Socket编程 -- server端的简单示例
Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...
- Linux I2C驱动--用户态驱动简单示例
1. Linux内核支持I2C通用设备驱动(用户态驱动:由应用层实现对硬件的控制可以称之为用户态驱动),实现文件位于drivers/i2c/i2c-dev.c,设备文件为/dev/i2c-0 2. I ...
- Linux内核模块简单示例
1. Linux 内核的整体结构非常庞大,其包含的组件也非常多,使用这些组件的方法有两种: ① 直接编译进内核文件,即zImage或者bzImage(问题:占用内存过多) ② 动态添加 * 模块本身并 ...
- 如何实现在Windows上运行Linux程序,附示例代码
微软在去年发布了Bash On Windows, 这项技术允许在Windows上运行Linux程序, 我相信已经有很多文章解释过Bash On Windows的原理, 而今天的这篇文章将会讲解如何自己 ...
- dubbo+zookeeper+springboot简单示例
目录 dubbo+zookeeper+springboot简单示例 zookeeper安装使用 api子模块 生产者producer 消费者consumer @(目录) dubbo+zookeeper ...
随机推荐
- Linux入门-3 Linux磁盘及文件系统管理
1. 磁盘基本概念 1.1 磁盘结构:盘片(单碟vs多碟).磁头(读写数据) 1.2 磁盘在Linux中的表示 1.3 分区概念 2 使用fdisk进行磁盘管理 3 Linux文件系统 mke2fs ...
- Java学习---Excel读写操作
1.1.1. 简介 Apache POI 使用Apache POI 完成Excel读写操作 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API ...
- 淘宝NPM镜像源
npm install -g cnpm --registry=https://registry.npm.taobao.org
- python源码学习(一)——python的总体架构
python源码学习(一)——python的总体架构 学习环境: 系统:ubuntu 12.04 STLpython版本:2.7既然要学习python的源码,首先我们要在电脑上安装python并且下载 ...
- Bootstrap3.0和bootstrap2.x的区别
bootstrap已经推出了3.0的新版,看起来2.3.x版本也不会再更新了.那么bootstrap 2.3版与3.0版的区别在哪里呢?下面我们就来介绍一下. Bootstrap 3.0增加了一些新的 ...
- Eclipse 连接真实机器调试
一.手机开启调试模式 二.安装adb.exe 1.确信 \android-sdk-windows\tools\下有 adb.exe AdbWinApi.dll AdbWinUsbApi ...
- 组合数取模方法总结(Lucas定理介绍)
1.当n,m都很小的时候可以利用杨辉三角直接求. C(n,m)=C(n-1,m)+C(n-1,m-1): 2.n和m较大,但是p为素数的时候 Lucas定理是用来求 c(n,m) mod p,p为素数 ...
- Kafka TimeoutException: Batch Expired 问题排查
当前系统中produer配置request.timeout.ms=30000(30秒),但是broker端配置zookeeper.connection.timeout.ms=1000000,kafka ...
- [TJOI2013]攻击装置
题目 癌我竟然会做 发现我们要求的是一个最大独立集问题 发现一个格子和能攻击到的格子的奇偶性和它都不同,于是我们就可以按照\(i+j\)的奇偶性把整张图分成两个部分 两个部分之间没有连边 于是二分图最 ...
- ssrf绕过记录
第一道题来自2018 上海市大学生网络安全大赛线上赛web01 if(isset($_POST['url']) && parse_url($_POST['url'])['host']= ...