linuxos7.6打补丁

linuxos7.6打补丁,第1张

linux系统打补丁常用的方式很多,如果是联网的情况下,直接使用yum update命令即可。如果没有联网或者有特殊的情况也可以使用diff 和patch命令来打补丁

方法:

1、生成补丁

补丁⽂件是使用diff命令⽣成的,⽣成补丁⽂件的命令使⽤格式如下:

diff -uNr oldfile newfile >patch_file.patch

diff命令,它的功能就是逐⾏⽐较两个⽂件的不同,然后输出⽐较的结果输出到补丁文件

参数解析:

-u:选项以统⼀格式创建补丁⽂件,这种格式⽐缺省格式更紧凑些

-N:选项确保补丁⽂件将正确地处理已经创建和删除⽂件的情况

-r:递归选项,设置了这个选项,会将两个不同版本源代码⽬录中的所有对应⽂件全部都进⾏⼀次⽐较,包括⼦⽬录⽂件

oldfile:源⽂件(⽬录),未进⾏修改的

newfile:以oldfile为基础,根据需求对⾥⾯的⽂件内容修改之后结果

patch_file.patch补丁文件⼀般以.patch为后缀。

注解:

补丁命令的功能就是逐个⽐较源⽂件(夹)和⽬标⽂件(夹)的所有⽂件,将差异信息记录到patch_file.patch中。下面对补丁文件内容进行讲解:

补丁头部分:

1、--- test1.txt 表示源文件(被修改的文件)

2、+++ test2.txt 表示目的文件

块部分(@@@@ 表示一个块的开始):

3、@@ -1,3 表示源文件从第1行开始,一共有3行有差异

4、@@ 1,3 表示目的文件从第1行开始,一共有3行有差异

正文:

5、-zzzzzxxccv 表示被修改的文件要删除这一行

6、+bbbbbbbbgd表示被修改的文件要增加这一行

2、打补丁

打补丁是通过patch命令完成的。⼀般情况下,打补丁命令使⽤格式如下(这⾥只介绍了对源⽂件(夹)进⾏打补丁 *** 作):

patch -pN <xxx.patch

参数解析:

-pN:选项打补丁时要忽略掉第N层⽬录。

举个例子: 如果补丁文件包含路径名称 /curds/whey/src/blurfl/blurfl.c,那么:

-p 0 使用完整路径名

-p 1 除去前导斜杠,留下 curds/whey/src/blurfl/blurfl.c。

-p 4 除去前导斜杠和前三个目录,留下 blurfl/blurfl.c。

下面给大家举个例子:

1、在/tmp目录下创建test1.txt ,并查看文件内容

2、同样在/tmp目录下创建test2.txt,并查看文件内容

3、制作补丁,并检查补丁内容

4、打补丁

5、检查test1.txt打补丁是否成功,内容是否被修改

此时可以看到test1.txt 和test2.txt的内容已经一致,说明打补丁成功。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

用KERNEL——PATCH升级KERNEL

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

无名指 兄写的大作

在kernel源码的README中有说明,如果你下载的PATCH是形如patch-2.4.X.gz的话使用gzip -cd patch-2.4.x.gz|patch -p0 如果是BZ格式的压缩包则使用bzip2 -dc patch-2.4.x.bz|patch -p0

但这样使用的话简直就是恶梦,你需要一个个的去替换文件,一般使用脚本来PATCH。这里假设你的源码目录为/src/linux,补丁下载到/src目录下,PATCH的步骤如下:

cd /src

linux/scripts/patch-kernel linux

脚本会自动找到补丁并应用,这里我解释一下:

linux/scripts/patch-kernel是个脚本文件,linux则是你的源码目录,如果要使这个命令完整的话后面还应该写上补丁所在的目录,这里因为补丁在当前目录下所以就省了。在补丁目录后面还可写上所要使用的补丁的最高版本号,比如你的源代码为2.4.10,而你下载了从2.4.10到2.4.20的所有软件包,并都放在同一目录下。在patch时你只想升级到2.4.19,不想使用2.4.20。命令格式就该象下面这个样子:

源码目录/scripts/patch-kernel 源码目录 补丁所在目录 2.4.19

这样的话版本号到2.4.19为止的所有补丁都会被使用,而2.4.20则被忽略不会被patch上。

如果不写上最高的版本号则目录下的所有补丁都会被使用。哇!写的手软,不过还没完,为了让大家不会再象我一样为打补丁而死大量的脑细胞,我接着写!!

上面的格式只能patch标准的补丁,而有时kernel会发布些pre或ac补丁,一般格式如下:

patch-2.4.x-pre*.gz

patch-2.4.x-ac*.gz

patch-2.4.x-pre*-ac*.gz

patch-2.4.x-pre*-acl*.gz

这时就要加参数才能patch了,对于ac补丁要这样使用

linux/scripts/patch-kernel linux -ac*

*为0到9的数字,比如patch-2.4.5-ac3.gz 这时的参数就为-ac3,也就是说参数同版本号的最后一个域相同。但有个例外象patch-2.4.x-pre*.gz这样的补丁就不能这样使用,我就是被这样的补丁搞的头大。最后分析脚本才发现,它居然没为pre设置参数,不知这是不是疏乎。这样的话你可以自己改脚本,不过我偷了点懒没改脚本,而是改了补丁的文件名:

mv patch-2.4.x-pre1.gz patch-2.4.x.gz

这样的话就可以使用了,而且并没有出现问题,可以正常编译。对于-pre*-ac*这样的补丁也是一样 *** 作把其中的pre*删除再使用-ac*参数patch就可以了。

当然你也可以直接使用patch命令来安装,为了不回答那么多的问题,就不能使用patch -p0而要把命令改为如下形式:

gzip -cd patch-2.4.x-pre2-ac1.gz|patch -p1 -s -N -E -d 源码目录

可以使用这种方式来安装任何补丁,而不用管它的文件名了。

哇总算写完了,这是我今天和补丁作斗争的战果!!拿出来希望能对大家有点帮助!!


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8530974.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存