飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

『学了就忘』Linux软件包管理 — 48、给源码包打补丁

时间:2021-12-04  作者:liuyuelinfighting  

目录
  • 1、补丁的生成
  • 2、补丁的打入

在以前的软件源码包,需要打补丁的时候比较多。现在的源码包很少进行打补丁了,因为根据需求安装不同的版本即可,比较商业化了。(也就是知道如何给源码包打补丁就可以了,了解即可。)

从开发者的角度,补丁就是软件新版本和现有版本的不同。这个不同包括缺少的文件和修改的内容。

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 域名 
our 
school

# 文件域名
[root@localhost test]# vi 域名 
our 
school 
in 
Beijing

比较下两个文件的不同,并生成补丁文件域名h,命令如下:

# 比较两个文件的不同,同时生成域名h补丁文件
[root@localhost test]# diff -Naur /root/test/域名 /root/test/域名 > 域名h

# 注意:
# -Naur是常用选项,是用的时候直接用。
# 两个文件一定要使用绝对路径。
# 最后的文件名不需要绝对路径。

# 查看下这个文件
[root@localhost test]# vi 域名h

# 前一个文件,减号代表少内容的文件
---/root/test/域名 2012-11-23 05:51:域名54373 +0800
# 后一个文件,加号代表多内容的文件
+++/root/test/域名 2012-11-23 05:50:域名88210 +0800

# 后一个文件比前一个文件多两行(+表示)
@@ -2,3 + 2,5 @@
our
school
+in
+beijing

2、补丁的打入

# 按照补丁文件进行更新
[root@localhost test]# patch -pn <补丁文件

选项:
 -pn:n为数字。代表按照补丁文件中的路径,指定更新文件的位置。

可以看到上面打入补丁的命令中,没有写需要打补丁的是哪个文件。因为在补丁文件中都有记录,新文件和旧文件的位置。

如下图所示:

image

-pn不好理解,我们说明下。

  • 补丁文件是要打入旧文件的,但是你当前所在的目录和补丁文件中的记录的目录是不一定匹配的,所以就需要-pn来同步两个目录的位置。(也就是说补丁文件中记录的旧文件目录,会追加到当前目录上。p几就是消除补丁文件中旧文件目录的几级目录。)
  • 比如我当前是在/root/test目录中(我要打补丁的旧文件就在当前目录下),补丁文件中记录的文件目录为/root/test/域名,这时如果写入-p1(在补丁文件目录中取消一级目录)
  • 那么补丁文件就会打入/root/test/root/test/域名文件中,这显然是不对的。那如果写入的是-p2(在补丁文件目录中取消二级目录)那么补丁文件打入的就是/root/test/test/域名,这显然也不对。如果写入的是-p3(在补丁文件目录中取消三级目录)那么补丁文件就是打入的
    /root/test/域名,我们的域名文件就在这个目录下,所以就应该是-p3

那么我们更新下域名文件,命令如下:

# 给域名文件打补丁
[root@localhost test]# patch -p3 < 域名h 
patching file 域名(patch文件已经打入到域名文件中)

# 查看下域名的内容吧。多出来了in Beiiing两行
[root@localhost test]# cat 域名
our
school
in
Beijing

标签:编程
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。