Linux源码安装包快速升级方法

Linux系统中更新用源码包安装的软件,除了卸载重装这种方法外,还可以下载补丁文件更新源码包,用新的源码包重新编译安装软件。使用补丁文件更新源码包,省去了用./configured生成新的Makefile文件,还省去了大量编译工作,因此效率更高。

一、Linux补丁文件的生成和使用

Linux系统中可以使用diff命令对比出新旧软件的不同,并生成补丁文件。

diff命令基本格式:[root@localhost ~]# diff 选项 old new  #比较old和new文件的不同

此命令中可使用如下几个选项:

-a:将任何文档当做文本文档处理

-b:忽略空格造成的不同

-B:忽略空白行造成的不同

-l:忽略大小写造成的不同

-N:当比较两个目录时,如果某个文件只在一个目录中,则在另一个目录中视作空文件

-r:当比较目录时,递归比较子目录

-u:使用同一输出格式

从生成补丁文件,到使用其实现更新软件的目的,为了让读者清楚地了解整个过程的来龙去脉,下面我们自己创建两个文件(分别模拟旧软件和新软件),通过对比新旧文件生成补丁文件,最后利用补丁文件更新旧文件,具体步骤如下:

  1. 创建两个文件,执行如下命令:
    [root@localhost ~]# mkdir test  #建立测试目录
    [root@localhost ~]# cd test  #进入测试目录
    [root@localhost test]# vi old.txt
    our
    school
    is
    lampbrother
    #文件old.txt,为了便于比较,将每行分开
    [root@localhost test]# vi new.txt
    our
    school
    is
    lampbrother
    in
    Beijing
    #文件new.txt

  2. 利用 diff 命令,比较两个文件(old.txt 和 new.txt)的不同,并生成补丁文件(txt.patch),执行代码如下:
    [root@localhost test]# diff -Naur /root/test/old.txt /root/test/new.txt > txt. patch
    #比较两个文件的不同,同时生成txt.patch补丁文件
    [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@@
    school
    is
    lampbrother
    +in
    +beijing
    #后一个文件比前一个文件多两行(用+表示)

  3. 利用补丁文件 txt.patch 更新 old.txt 旧文件,实现此步操作需利用 patch 命令,该命令基本格式如下:
  4. [root@localhost test]# patch -pn < 补丁文件
    #按照补丁文件进行更新
    -pn 选项中,n 为数字(例如 p1、p2、p3 等),pn 表示按照补丁文件中的路径,指定更新文件的位置。

    这里对 -pn 选项的使用做一下额外说明。我们知道,补丁文件是要打入旧文件的,但是当前所在目录和补丁文件中记录的目录不一定是匹配的,需要 "-pn" 选项来同步两个目录。

    例如,当前位于 "/root/test/" 目录下(要打补丁的旧文件就在当前目录下),补丁文件中记录的文件目录为 "/root/test/dd.txt",如果写入 "-p1"(在补丁文件目录中取消一级目录),那么补丁文件会打入 "root/test/root/test/old.txt" 文件中,这显然是不对的;如果写入的是 "-p2"(在补丁文件目录中取消二级目录),补丁文件会打入 "/root/test/test/old.txt" 文件中,这显然也不对。如果写入的是 "-p3"(在补丁文件目录中取消三级目录),补丁文件会打入 "/root/test/old.txt" 文件中,old.txt 文件就在这个目录下,所以应该用 "-p3" 选项。

    如果当前所在目录是 "/root/" 目录呢?因为补丁文件中记录的文件目录为 "/root/test/old.txt",所以这里就应该用 "-p2" 选项(代表取消两级目录),补丁打在当前目录下的 "test/old.txt" 文件上。

    因此,-pn 选项可以这样理解,即想要在补丁文件中所记录的目录中取消几个 "/",n 就是几。去掉目录的目的是和当前所在目录匹配。
     
    现在更新 "old.txt" 文件,命令如下:
    [root@localhost test]# patch -p3 < txt.patch
    patching file old.txt
    #给old.txt文件打补丁
    [root@localhost test]# cat old.txt
    #查看一下dd.txt文件的内容
    our
    school
    is
    lampbrother
    in
    Beijing
    #多出了in Beijing两行
    可以看到,通过使用补丁文件 txt.patch 对旧文件进行更新,使得旧文件和新文件完全相同。


通过这个例子,大家要明白以下两点:

  1. 给旧文件打补丁依赖的不是新文件,而是补丁文件,所以即使新文件被删除也没有关系。
  2. 补丁文件中记录的目录和当前所在目录需要通过 "-pn" 选项实现同步,否则更新可能失败。

原文:Linux源码包快速升级方法详解

配置yum:Linux配置yum源(本地源和网络源) - 墨鱼菜鸡 - 博客园

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亲爱的老少女

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值