linux patch解析
Patch 解析
前言:
记录一下我在工作中对patch操作积累的相关知识,因为此方面的内容在网络上记录得比较片面与零散,特此记录总结一下以方便学习使用patch。
基本命令介绍:
- diff:
Diff命令为系统自带的文件比较命令,可以比较两个文件或文件夹的差异、并将差异信
息按照用户指定的方式输出。
处理单个文件的比较:
diff -uN [old-file] [new-file] > [old-to-new.patch]
文件夹比较:
diff -uNr [old-dir] [new-dir] > [old-to-new.patch]
2.git diff:
此命令为git工具集中patch生成的工具,可以比较git仓库中两个版本中改动的文件差异信息,且用法较之于diff命令更为简洁。
获取当前工作区与当前分支最后一次提交的差异:
git diff
获取两次提交的差异信息:
git diff [old-commit-hash] [new-commit-hash]
3.patch:
patch命令为应用patch的命令,可以根据patch文件对源文件进行升级(打补丁)或降级(去补丁)。
应用补丁(升级):
patch -p1 < [patch_name.patch]
撤销补丁的应用(降级):
patch -Rp1 < [patch_name.patch]
4.quilt:
quilt是一个大批量补丁集的操作工具,加载补丁后会在执行加载命令的目录下生成.pc
目录以用于quilt的操作的记录以及已应用补丁的备份。
若执行quilt相关命令显示“No series file found”,可以通过设置“QUILT_PATCHES”环境变量解决。
debian系linux发行版一般设置为:
export QUILT_PATCHES=debian/patches
应用所有记录在series的补丁:
quilt push -a
应用下一个记录在series且未加载的补丁:
quilt push
应用series中某一个未加载的补丁:
quilt push [name.patch]
取消最后应用的那个补丁:
quilt pop
取消所有的补丁:
quilt pop -a
使用quilt新建某个补丁:
1).初始化新建补丁
quilt new [file_name.patch]
2).添加追踪文件
quilt add [todo_file_a] [todo_file_b] [todo_file_c] ...
3).修改文件
此时可以使用patch指令修改或者手动修改
4).生成修改记录到补丁
quilt refresh
- 其他指令
加载所有补丁以及生成dsc文件:
dpkg-source -b ./
使changelog的修改生效:
dpkg-source --commit
Patch简单分析:
本示例采用两个文件内容如下:
dest-info-fit-orig.list:
1 123456789
2 123456789
3 123456789
4 123456789
5 123456789
6 123456789
7 123456789
8 123456789
9 123456789
10 123456789
11
12
13
14
15
16
17
18
19
20
dest-info-fit-new.list:
1 123456789
2 changeigfo
3 123456789
4 123456789
5 123456789
6 123456789
8 123456789
9 123456789
10 123456789
11
12 add new info
13
14
addline
15
16
17
18
19
20
- diff常规格式补丁
由diff 命令不带参数时生成,由以上两个文件生成的patch内容如下:
生成该补丁的命令为:
diff dest-info-fit-orig.list dest-info-fit-new.list
2c2
< 2 123456789
---
> 2 changeigfo
7d6
< 7 123456789
12c11
< 12
---
> 12 add new info
14a14
> addline
2c2:操作C(change),左侧数字为原始文件中需要被改变的行,右侧数字为修改后补丁中信息所应该存在的行。
符号<:表示原始文件信息
符号---:原始文件信息与待填充信息的分隔符
符号>:新信息提示符
7d6:操作D(delet),左侧只能是一个数字,记录原始文件应该删除的行数7,右侧数字6为去除patch时应当在第6行后面插入该删除信息,用于恢复原始文件。
14a14:操作A(append),左侧数字14代表在第14行插入信息,右侧数字14代表插入的信息在新文件中的第14行
- 上下文格式补丁
由diff命令使用C参数生成,具体操作命令如下:
diff -c dest-info-fit-orig.list dest-info-fit-new.list
*** dest-info-fit-orig.list 2020-06-23 13:26:36.268788853 +0800
--- dest-info-fit-new.list 2020-06-23 17:34:45.963815387 +0800
***************
*** 1,17 ****1 123456789
! 2 1234567893 1234567894 1234567895 1234567896 123456789
- 7 1234567898 1234567899 12345678910 12345678911
! 121314151617
--- 1,17 ----1 123456789
! 2 changeigfo3 1234567894 1234567895 1234567896 1234567898 1234567899 12345678910 12345678911
! 12 add new info1314
+ addline151617
***:原始文件名提示符,后跟原始文件文件名以及最后修改时间
---:升级后文件名提示符,后跟新文件文件名以及最后修改时间
***************:大代码块提示符(15个*)
***1,17****:表示下方信息对应的原始文件的1-17行范围
---1,17----:表示下方信息对应的新版本文件的1-17行范围
!:标记此行有修改
+:标记此行有插入
-:标记此行有删除
- 统一格式补丁
由diff命令使用u 参数生成,具体操作命令如下:
diff -u dest-info-fit-orig.list dest-info-fit-new.list
--- dest-info-fit-orig.list 2020-06-23 13:26:36.268788853 +0800
+++ dest-info-fit-new.list 2020-06-23 17:34:45.963815387 +0800
@@ -1,17 +1,17 @@1 123456789
-2 123456789
+2 changeigfo3 1234567894 1234567895 1234567896 123456789
-7 1234567898 1234567899 12345678910 12345678911
-12
+12 add new info1314
+addline151617
---:原始文件路径、文件名、最后修改时间
+++:原始文件路径、文件名、最后修改时间
@@ -1,17 +1,17 @@: -1,17代表下面的文本信息对应原始文件的1-17行;+1,17代表下面文本信息对应新文件的1-17行
-:代表本行文本在升级时应当在新文件中删除
+:代表本行文本在升级时应当在新文件中增加
- 参考资料以及链接
- linux patch 格式与说明(收录) - 吴雨欣 - 博客园
- quilt.pdf (/usr/share/doc/quilt/quilt.pdf)
- Introduction to Using Diff and Patch — A Cloud Guru
linux patch解析相关推荐
- Linux进程状态解析
Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有 不同的状态. Linux进程状态:R (TASK_RUNNING),可执行状态. 只有在该 ...
- linux ini文件,Shell script - Linux下解析ini配置文件
导语Linux 有时候需要统计多台主机上面的数据,比如合并N多主机的日志,然后进行下一步的分析.这个时候如果直接把所有主机IP写死到脚本中的话,下次新增一台主机,就需要再去修改脚本,如果涉及到多个脚本 ...
- linux下解析域名
linux下解析域名<?xml version="1.0" encoding="UTF-8"?> vi /etc/resolv.conf names ...
- Linux C解析命令行参数代码
背景 Linux下解析main函数参数,使用getopt,依赖头文件:#include <unistd.h>. 代码如下: static char g_deviceid[32] = {0} ...
- Linux全面解析讲解
Linux全面解析讲解 目录
- linux patch使用方法,Linux patch命令
patch 英 [pætʃ] 美 [pætʃ] n.补丁,补片;眼罩;斑点;小块 vt.修补,拼凑;暂时遮掩一下;修理,平息(吵架等);用美人斑装饰(脸) vi.打补丁 第三人称单数: patch ...
- 最全面的 linux 信号量解析
一.什么是信号量 信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有. 信号量的值为正的时候,说明它空闲.所测试的线程可以锁定而使用它.若为 0,说明它被占用,测试的线程 ...
- Linux合入patch命令,Linux patch命令
Linux patch命令 Linux patch命令用于修补文件. patch指令让用户利用设置修补文件的方式,修改,更新原始文件.倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行.如果配合 ...
- Linux下解析域名命令-dig 命令使用详解
Linux下解析域名除了使用nslookup之外,开可以使用dig命令来解析域名,dig命令可以得到更多的域名信息.dig 命令主要用来从 DNS 域名服务器查询主机地址信息.dig的全称是 (dom ...
最新文章
- ajax为什么会全局刷新,为什么发送ajax请求页面也会刷新呢?
- Sybase中字符串替换函数 STR REPLACE
- 【收藏】keepalived配置文件解读
- MATLAB调用Python自定义函数(类、函数等) Python调用MATLAB
- 训练日志 2019.7.24
- 以数据库思维理解区块链
- 会动的图解 | 既然IP层会分片,为什么TCP层也还要分段?
- 2012.02.17
- 项目的权限设计的小计
- security工作笔记003---SpringSecurity框架启动报错.bcrypt.BCryptPasswordEncoder‘ that could not be found.
- 有20万3年不用,怎样理财呢?
- 拿来即用的 Python 时间范围判断方法
- 在TFS2013上删除项目
- HTTP session的原理
- [转]ASP.NET Web API系列教程(目录)
- JavaScript设计模式入坑 1
- 工作篇-错误的代价及反思
- vue-awsome-swiper安装和css引入问题
- plc通过无线通讯连接服务器,PLC无线通讯
- 身份证阅读器二次开发说明