Linux源代码补丁文件如何安装

时间:2019-11-20 08:54:10  来源:igfitidea点击:

在Linux中,Linux补丁文件使用up2date或yum命令安装。

而Linux和UNIX源软件通常带有安全性和其他补丁。源代码补丁文件是通过patch命令来安装的。

patch命令获取一个包含由diff程序生成的差异列表的补丁文件patchfile,并将这些差异应用于一个或多个原始文件,从而生成修补版本。通常,打补丁的版本会代替原始版本。

patch命令语法

基本语法如下:

$ patch < patch.file
$ patch source.code.file < patch.file
$ patch -p LEVEL < {/path/to/patch/file}

要应用补丁,可以在shell中运行以下命令:

$ patch < /path/to/file

在此示例中,使用patch.diff文件修补foo.c:

$ patch foo.c < patch.diff

可以使用-R选项撤消或反转补丁:

$ patch -R < /path/to/file

如何创建补丁?

要创建补丁,可以运行以下diff命令:

$ diff -u oldfile-name-here newfile-name-here > patch.diff

示例:在类似Linux或Unix的系统上为hello.c示例程序创建和应用补丁

创建hello.c,如下所示:

#include<stdio.h>
 
main(){
	printf("Hello, world!\n");
}

复制hello.c;这两个文件必须位于同一目录中:

$ cp hello.c hello-new.c

编辑文件hello-new.c,做一些修改。

#include<stdio.h>
 
int main(void){
	printf("Hello, world!\n");
	return 0;
}

接下来,使用命令diff创建一个名为hello.patch的统一diff补丁文件:

$ diff -u hello.c hello-new.c > hello.patch

要查看补丁,请使用cat命令,如下所示:

$ cat hello.patch

输出示例:

--- hello.c	2014-04-29 17:59:49.000000000 +0530
+++ hello-new.c	2014-04-29 18:00:43.000000000 +0530
@@ -1,5 +1,6 @@
#include<stdio.h>
 
-main(){
+int main(void){
	printf("Hello, world!\n");
+	return 0;
}

要从hello.patch应用补丁,请输入:

### The hello.patch patchfile knows the name of the file to be patched ##
patch < hello.patch

输出示例:

patching file hello.c

最后,这是我更新和修补后的hello.c:

$ cat hello.c

输出示例:

#include<stdio.h>
 
int main(void){
	printf("Hello, world!\n");
	return 0;
}

您现在可以编译程序:

$ cc hello.c -o hello

如下运行:

$ ./hello

输出示例:

Hello, world!

在整个源代码树上应用补丁

首先,复制源树:

## Original source code is in lighttpd-1.4.35/ directory ##
$ cp -R lighttpd-1.4.35/ lighttpd-1.4.35-new/

转到lighttpd-1.4.35-new目录,然后根据您的要求进行更改:

$ cd lighttpd-1.4.35-new/
$ vi geoip-mod.c
$ vi Makefile

最后,使用以下命令创建补丁:

$ cd ..
$ diff -rupN lighttpd-1.4.35/ lighttpd-1.4.35-new/ > my.patch

您可以使用my.patch文件通过上述patch命令在另一台计算机/服务器上修补lighttpd-1.4.35源代码:

patch -p1 < my.patch

有关更多信息和用法,请参见patch和其他命令的手册页。