『学了就忘』Linux软件包管理 — 48、给源码包打补丁
在以前的软件源码包,需要打补丁的时候比较多。现在的源码包很少进行打补丁了,因为根据需求安装不同的版本即可,比较商业化了。(也就是知道如何给源码包打补丁就可以了,了解即可。)
从开发者的角度,补丁就是软件新版本和现有版本的不同。这个不同包括缺少的文件和修改的内容。
1、补丁的生成
# 比较old和new文件的不同
[root@localhost ~]# diff 选项 old new
选项:
-a:将任何文档当做文本文档处理。
-b:忽略空格造成的不同。
-B:忽略空白行造成的不同。
-I:忽略大小写造成的不同。
-N:当比较两个目录时,如果某个文件只在一个目录中,则在另一个目录中视作空文件。
-r:当比较目录时,递归比较子目录。
-u:使用统一的输出格式。
常用的选项为-N、-a、-u、-r
。
示例:
# 建立测试目录
[root@localhost ~]# mkdir test
# 进入测试目录
[root@localhost ~]# cd test
# 文件old txt,为了一会输出便于比较,每行分开
[root@localhost test]# vi old.txt
our
school
# 文件new.txt
[root@localhost test]# vi new.txt
our
school
in
Beijing
比较下两个文件的不同,并生成补丁文件txt.patch
,命令如下:
# 比较两个文件的不同,同时生成txt.patch补丁文件
[root@localhost test]# diff -Naur /root/test/old.txt /root/test/new.txt > txt.patch
# 注意:
# -Naur是常用选项,是用的时候直接用。
# 两个文件一定要使用绝对路径。
# 最后的文件名不需要绝对路径。
# 查看下这个文件
[root@localhost test]# vi txt.patch
# 前一个文件,减号代表少内容的文件
---/root/test/old.txt 2012-11-23 05:51:14.347954373 +0800
# 后一个文件,加号代表多内容的文件
+++/root/test/new.txt 2012-11-23 05:50:05.772988210 +0800
# 后一个文件比前一个文件多两行(+表示)
@@ -2,3 + 2,5 @@
our
school
+in
+beijing
2、补丁的打入
# 按照补丁文件进行更新
[root@localhost test]# patch -pn <补丁文件
选项:
-pn:n为数字。代表按照补丁文件中的路径,指定更新文件的位置。
可以看到上面打入补丁的命令中,没有写需要打补丁的是哪个文件。因为在补丁文件中都有记录,新文件和旧文件的位置。
如下图所示:
-pn
不好理解,我们说明下。
- 补丁文件是要打入旧文件的,但是你当前所在的目录和补丁文件中的记录的目录是不一定匹配的,所以就需要
-pn
来同步两个目录的位置。(也就是说补丁文件中记录的旧文件目录,会追加到当前目录上。p
几就是消除补丁文件中旧文件目录的几级目录。)- 比如我当前是在
/root/test
目录中(我要打补丁的旧文件就在当前目录下),补丁文件中记录的文件目录为/root/test/old.txt
,这时如果写入-p1
(在补丁文件目录中取消一级目录)- 那么补丁文件就会打入
/root/test/root/test/old.txt
文件中,这显然是不对的。那如果写入的是-p2
(在补丁文件目录中取消二级目录)那么补丁文件打入的就是/root/test/test/o1d.txt
,这显然也不对。如果写入的是-p3
(在补丁文件目录中取消三级目录)那么补丁文件就是打入的
/root/test/old.txt
,我们的old.txt
文件就在这个目录下,所以就应该是-p3
。
那么我们更新下old.txt
文件,命令如下:
# 给old.txt文件打补丁
[root@localhost test]# patch -p3 < txt.patch
patching file old.txt(patch文件已经打入到old.txt文件中)
# 查看下old.txt的内容吧。多出来了in Beiiing两行
[root@localhost test]# cat old.txt
our
school
in
Beijing
『学了就忘』Linux软件包管理 — 48、给源码包打补丁的更多相关文章
- 『学了就忘』Linux服务管理 — 79、源码包安装的服务管理
目录 1.源码包服务的启动管理 2.源码包服务的自启动管理 3.让源码包服务被服务管理命令识别 1.源码包服务的启动管理 # 通过源码包的安装路径,找到该服务的启动脚本, # 也就是获得该服务的启动脚 ...
- 『学了就忘』Linux软件包管理 — 44、在RPM包中提取文件
目录 1.RPM包中文件的提取 2.在RPM包中提取文件的操作 (1)cpio命令介绍 (2)提取RPM包中文件 1.RPM包中文件的提取 为什么要做这个事呢? 在操作Linux系统的时候误删除一个文 ...
- 『学了就忘』Linux软件包管理 — 40、Linux系统软件包介绍
目录 1.Linux系统软件包分类 2.源码包说明 3.二进制包说明 4.RPM包的优缺点 4.RPM包的两种安装方法 5.总结 1.Linux系统软件包分类 Linux系统下的软件包只有源码包和二进 ...
- 『学了就忘』Linux软件包管理 — 47、Linux源码包的安装和卸载
目录 1.源码包安装服务的注意事项 2.源码包安装服务的过程 3.源码包安装服务的删除 4.源码包安装服务的启动 5.源码包安装服务的关闭 1.源码包安装服务的注意事项 (1)安装服务选择哪种软件包? ...
- 『学了就忘』Linux软件包管理 — 42、对RPM软件包的查询操作
目录 1.查询RPM软件包是否安装 2.查询系统中所有已安装的RPM软件包 3.查询RPM软件包的详细信息 4.查询RPM软件包中的文件列表 5.查询系统文件属于哪个RPM包 6.查询RPM软件包所依 ...
- 『学了就忘』Linux软件包管理 — 46、yum命令详细介绍
目录 1.yum命令的查询操作 2.使用yum命令安装服务 3.使用yum命令升级服务 4.使用yum命令卸载服务 5.yum组管理命令 (1)查询可以安装的软件组 (2)查询软件组内包含的软件 (3 ...
- 『学了就忘』Linux软件包管理 — 49、拓展:Linux中通过脚本安装程序
目录 1.脚本程序简介 2.Webmin安装 (1)简介 (2)安装 (3)使用 1.脚本程序简介 脚本程序包并不多见,所以在软件包分类中并没有把它列为一类.它更加类似于Windows下的程序安装,有 ...
- 『学了就忘』Linux软件包管理 — 43、RPM包的校验和证书
目录 1.RPM包的校验 (1)RPM包校验基本命令 (2)校验某个系统文件是否被修改举例 (3)验证内容中8个信息的具体内容 (4)文件类型有哪些 2.RPM包的证书 (1)数字证书 (2)数字证书 ...
- 『学了就忘』Linux软件包管理 — 45、yum源文件详细说明
目录 1.yum源文件解析 2.查看yum源文件 3.搭建本地光盘yum源 第一步: 第二步: 第三步: 提示:RPM包的在线安装就是yum安装,yum安装需要依据yum源文件内容配置来寻找软件.本文 ...
随机推荐
- VUE -input输入框字母转大写
示例: 输入自动转--->大写 <input type="text" placeholder="请输入证件号码" maxlength="1 ...
- 由于坏块导致DG的mrp0进程中断
由于坏块导致DG的mrp0进程中断1.Environment11.2.0.4 ADG 2.SymptomsDG的mrp0进程中断,重启后,还是卡住.查看alert,在1.47存在报错,进一步查看trc ...
- js正则格式化日期时间自动补0
原文 js正则格式化日期时间自动补0 背景 时间日期格式化的需求很常见,也有很多工具类转换方法,比如需要将2022-3-4这种日期格式转化为2022-03-04,也就是实现个位数月份或天数日期自动前置 ...
- 第29篇-调用Java主类的main()方法
在第1篇中大概介绍过Java中主类方法main()的调用过程,这一篇介绍的详细一点,大概的调用过程如下图所示. 其中浅红色的函数由主线程执行,而另外的浅绿色部分由另外一个线程执行,这个线程最终也会负责 ...
- linux下nginx编译安装、版本信息修改
环境 centos 7 安装依赖包 yum install -y gcc gcc-c++ glibc glibc-devel pcre pcre-devel zlib zlib-devel opens ...
- RabbitMQ的消息可靠性(五)
一.可靠性问题分析 消息的可靠性投递是使用消息中间件不可避免的问题,不管是使用哪种MQ都存在这种问题,接下来要说的就是在RabbitMQ中如何解决可靠性问题:在前面 在前面说过消息的传递过程中有三个对 ...
- uoj279题目交流通道(dp)
题目大意: 神犇星球有 \(n\) 座小城.对于任意两座小城 \(v,u\)\((v≠u)\),吉米多出题斯基想在 \(v,u\) 之间建立一个传送时间为 \(w(v,u)\)的无向传送通道,其中 \ ...
- v72.01 鸿蒙内核源码分析(Shell解析) | 应用窥伺内核的窗口 | 百篇博客分析OpenHarmony源码
子曰:"苟正其身矣,于从政乎何有?不能正其身,如正人何?" <论语>:子路篇 百篇博客系列篇.本篇为: v72.xx 鸿蒙内核源码分析(Shell解析篇) | 应用窥视 ...
- k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
前言:上一篇通过rancher管理k8s,部署服务应用扩容,高可用,本篇介绍kubectl命令行部署高可用集群节点,测试升级.扩容等 1.测试环境:3节点k3s,使用其中2节点(ubuntunode1 ...
- 让全链路压测变得更简单!Takin2.0重磅来袭!
自Takin社区版1.0发布两个多月以来,有很多测试同学陆续在各自的工作中运用了起来,其中包括金融.电商.物流.出行服务等行业.这个过程中我们收到了很多同学的反馈建议,同时也了解到很多同学在落地全链路 ...