Linux 补丁生成与使用
我们在升级Linux 内核的时候,难免会接触到补丁的知识。下面对如何生成补丁和如何打补丁作讲解。
生成补丁:
制作 hello.c 和 hello_new.c 两个文件如如下所示。
➜ diff ls
hello.c hello_new.c hello_test.c hi.patch
➜ diff cat hello.c
#include "stdio.h"
int main(int argc ,char **argv)
{
printf("Hello World");
}
➜ diff cat hello_new.c
#include "stdio.h"
int main(int argc ,char **argv)
{
printf("Hello World\n");
return ;
}
使用 diff -uN 命令 进行生成patch
➜ diff diff -uN hello_new.c hello.c > hi.patch
➜ diff cat hi.patch
--- hello_new.c -- ::23.679704122 +
+++ hello.c -- ::59.190677641 +
@@ -, +, @@
#include "stdio.h"
int main(int argc ,char **argv)
{
- printf("Hello World\n");
- return ;
+ printf("Hello World");
}
至此,patch 已经创建完毕。
之后,我们进行使用 patch 命令 对 hello.c 文件进行打补丁。
➜ diff patch -p0 <hi.patch
patching file hello.c
Reversed (or previously applied) patch detected! Assume -R? [n] y
➜ diff cat hello.c
#include "stdio.h"
int main(int argc ,char **argv)
{
printf("Hello World\n");
return ;
}
➜ diff ls
hello.c hello.c.orig hello_new.c hello_test.c hi.patch
➜ diff cat hello.c.orig
#include "stdio.h"
int main(int argc ,char **argv)
{
printf("Hello World");
}
➜ diff cat hello.c
#include "stdio.h"
int main(int argc ,char **argv)
{
printf("Hello World\n");
return ;
}
➜ diff
可见,补丁已经成功应用,并且生成了 .orig 源文件。 --backup-if-mismatch 选项,可以不进行生成orig 文件。
➜ diff patch -p0 --no-backup-if-mismatch < hi.patch
patching file hello.c
Reversed (or previously applied) patch detected! Assume -R? [n] y
➜ diff ls
hello.c hello_new.c hello_test.c hi.patch
➜ diff cat hello.c
#include "stdio.h"
int main(int argc ,char **argv)
{
printf("Hello World\n");
return ;
}
diff 和 patch 命令介绍:
-pnum or --strip=num
Strip the smallest prefix containing num leading slashes from each file name found in the patch file. A sequence of one or more adjacent slashes is counted as a
single slash. This controls how file names found in the patch file are treated, in case you keep your files in a different directory than the person who sent out
the patch. For example, supposing the file name in the patch file was
/u/howard/src/blurfl/blurfl.c
setting -p0 gives the entire file name unmodified, -p1 gives
u/howard/src/blurfl/blurfl.c
without the leading slash, -p4 gives
blurfl/blurfl.c
and not specifying -p at all just gives you blurfl.c. Whatever you end up with is looked for either in the current directory, or the directory specified by the -d
option.
具体的使用说明,可以使用 man diff 和 man patch 命令来进行查看。
保持更新,转载请注明出处。
Linux 补丁生成与使用的更多相关文章
- Linux下生成patch和打patch
转自:http://blog.csdn.net/dl0914791011/article/details/17299103 通过diff工具生成补丁, patch工具打上补丁. 在使用diff之前, ...
- linux下生成core dump文件方法及设置
linux下生成core dump文件方法及设置 from:http://www.cppblog.com/kongque/archive/2011/03/07/141262.html core ...
- random and password 在Linux下生成crypt加密密码的方法,shell 生成指定范围随机数与随机字符串
openssl rand -hex n (n is number of characters) LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head ...
- linux c生成唯一文件名称
linux c生成唯一文件名称可用mktemp()或mkstemp()函数
- 【linux】在linux上生成SSH-key 简单原理介绍+生成步骤
1.首先什么是SSH Secure Shell (SSH) 是一个允许两台电脑之间通过安全的连接进行数据交换的网络协议.通过加密保证了数据的保密性和完整性.SSH采用公钥加密技术来验证远程主机,以及( ...
- linux 模拟生成 CAN 设备
/************************************************************************************** * linux 模拟生成 ...
- 1.Linux下生成密钥
1.Linux下生成密钥 ssh-keygen的命令手册,通过”man ssh-keygen“命令: 通过命令”ssh-keygen -t rsa“ 生成之后会在用户的根目录生成一个 “.ssh”的文 ...
- Linux中生成Core Dump系统异常信息记录文件的教程
Linux中生成Core Dump系统异常信息记录文件的教程 http://www.jb51.net/LINUXjishu/473351.html
- linux c 生成uuid
/********方法一**********/#include <stdio.h> #include <stdlib.h> #include <string.h> ...
随机推荐
- Redis学习之实现优先级消息队列
很久没有写博客了,最近简单的学习了一下Redis,其中学习了一下用Redis实现优先级消息队列.关于更多更为详细的可以在www.redis.cn找到相关资料. 对于熟悉Redis的童鞋提到队列很自然的 ...
- ELK常用命令
1.查询当前所有的索引 #curl 'localhost:9200/_cat/indices?v' 2.查看集群健康状态 #curl 'localhost:9200/_cat/health?v' 绿色 ...
- Quart2D矩阵变换
如果想让它可以有前面介绍的那种反射变化的效果,在绘图中也是可以的. 一.首先看一下未加任何矩阵变换时的图像 CGContextRef context=UIGraphicsGetCurrentConte ...
- [转]Winform开发框架的重要特性总结
本文转自:https://www.cnblogs.com/wuhuacong/p/3199829.html 从事Winform开发框架的研究和推广,也做了有几个年头了,从最初的项目雏形到目前各种重要特 ...
- C++11 Lambda表达汇总总结
C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作.Lambda的语法形式如下: [函数对象参数] (操作符重载函数参数) mutable或ex ...
- 乐字节-Java8新特性之函数式接口
上一篇小乐带大家学过 Java8新特性-Lambda表达式,那什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口 ...
- 【Spring】3、BeanFactory 和 ApplicationContext的区别
转自:http://blog.csdn.net/intlgj/article/details/5660587 在spring中,两个最基本最重要的包是 org.springframework.bean ...
- Alice and Bob(博弈)
Alice and Bob Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users ...
- Codeforces35E(扫描线)
E. Parade time limit per test:2 seconds memory limit per test:64 megabytes input:input.txt output:ou ...
- HDU1069(KB12-C)
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...