linux之打补丁

简介:

linux内核打补丁

将帮助文件另存为的方法:

BingGongtekiMacBook-Pro:~ binggong$ man cp |col -b >cp.man


1、比较文件的区别,创建补丁:diff

功能就是比较两个文件或目录的不同,并记录下来。

语法:

diff [option] sourcefile(旧) objectsfile(新)

-c:文件比较

-r:递归选项,将两个不同版本源代码目录中所有对应文件进行一次比较,包括子目录。

-N:该选项确保补丁文件将正确的处理已经创建和删除文件的情况,就是比较一个有而另一个没有的文件。

-u:放在一起比较,统一格式创建补丁文件,这种格式比缺省格式更紧凑些。

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

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

-I:忽略大小写的变化

-q:概要显示比较的文件有无差别,而不做详细显示。

-x或者—exclude <文件或目录>:不比较指定的文件或者目录。

-X<文件>或者—exclude-from<文件>:指定不比较的文件类型,使用exclude的话,可以将类型写在文件中,在进行指定。

打补丁:diff  oldfile newfile >1.patch

2、打补丁:patch

文件打补丁

patch file1<1.patch

还原到源文件

patch -R file<1.patch

BingGongtekiMacBook-Pro:~ binggong$ patch 2.txt<1.patch 

patching file 2.txt

Reversed (or previously applied) patch detected!  Assume -R? [n] y

BingGongtekiMacBook-Pro:~ binggong$ more 2.txt

1111111

2222222

BingGongtekiMacBook-Pro:~ binggong$ patch -R 2.txt<1.patch 

patching file 2.txt

Unreversed patch detected!  Ignore -R? [n] y

BingGongtekiMacBook-Pro:~ binggong$ more 2.txt

1111111


3333333


就是利用diff制作的补丁来实现源文件夹和目标文件夹的转换。

-p0:选项是要从当前目录查找目的文件或文件夹

-p1:忽略第一层目录,从当前目录开始查找。

-E:表示如果发现了空文件,就删除他。

-R:说明在补丁文件中“新”文件和“旧”文件现在调换位置,也就是还原会老版本。

补丁文件说明:

补丁头分别由—和+++开头的两行,用来表示要打补丁的文件,---表示旧文件,+++表示新文件。

BingGongtekiMacBook-Pro:~ binggong$ more 1.patch 

Binary files patch/.DS_Store and snap/.DS_Store differ

diff -ruN patch/ConsoleKit/seats.d/00-primary.seat snap/ConsoleKit/seats.d/00-primary.seat

--- patch/ConsoleKit/seats.d/00-primary.seat    1970-01-01 08:00:00.000000000 +0800

+++ snap/ConsoleKit/seats.d/00-primary.seat     2016-08-08 19:03:53.000000000 +0800


一个补丁文件中可能包含多个—和+++,每一节用来打一个补丁,所以一个补丁文件中包含多个补丁块。

块是补丁要修改的地方,通常以@@开头到另一个补丁头结束。

块的缩进,表示缩进的列要进行增加或删除的操作。

+表示这一行是要加上去的。

-表示这一行是要删除的。

3、实验

进入需要打补丁的文件目录

cd patch_dir

3.1创建补丁文件

查看目录之间的差异:

BingGongtekiMacBook-Pro:~ binggong$ diff -ruN patch/ snap/ >1.patch


打补丁(文件夹)

旧文件夹和新文件夹比较,删除新文件夹中没有而旧文件夹中有的文件,更新新文件夹中文件的内容到旧文件夹中。

打补丁前的情况

BingGongtekiMacBook-Pro:~ binggong$ ls patch/ snap/

patch/:

111 2.txt 222 22222


snap/:

1.txt 222

111 未命名文件夹

打补丁

ngGongtekiMacBook-Pro:~ binggong$ diff -ruN snap/ patch/ >snap-to-patch.patch

BingGongtekiMacBook-Pro:~ binggong$ cp snap-to-patch.patch snap/

BingGongtekiMacBook-Pro:~ binggong$ cd snap

BingGongtekiMacBook-Pro:snap binggong$ patch -p1 <snap-to-patch.patch 

patching file 1.txt

patching file 111

patching file 2.txt

patching file 222

patching file 22222/222222

patching file 未命名文件夹/1的副本.txt


打补丁后

BingGongtekiMacBook-Pro:~ binggong$  ls snap/ patch/

patch/:

111 2.txt 222 22222


snap/:

111 222 snap-to-patch.patch

2.txt 22222 未命名文件夹

BingGongtekiMacBook-Pro:~ binggong$ 


-p:忽略补丁路径的“/”数目。建议直接将补丁文件放在需要打补丁到的文件里,方便打补丁。实际上在实际应用中,只要有源文件(夹)旧的和补丁文件就可以打补丁了,而不必要有目的文件。

patch oldfile <1.patch

还原会未打补丁状态

patch -R old_file 1.patch


通过patch来进行源码更新。

通常对于一个安装好了的程序,由于版本更新会推出新的版本,实际上是对上一个版本的部分更新和变动。所以没有必要重新安装,只需要将修改的内容进行更新即可,其实需要软件商在发布软件更新版本的同时也提供了patch文件。



本文转自 blackstome 51CTO博客,原文链接:http://blog.51cto.com/137783/1916976,如需转载请自行联系原作者

相关文章
|
Linux API C语言
Linux 内核补丁提交的清单 【ChatGPT】
Linux 内核补丁提交的清单 【ChatGPT】
|
缓存 安全 Ubuntu
在Linux中,如何进行系统更新和补丁管理?
在Linux中,如何进行系统更新和补丁管理?
|
存储 安全 Linux
Linux存储安全:系统更新和补丁管理的策略与实践
【8月更文挑战第19天】安全是一个持续的过程,需要不断地评估、更新和改进策略。
440 0
|
存储 Linux
华为工程师发布最新补丁,实现对 AArch64 硬件的 Linux 镜像内存支持
早在 2015 年,Linux 内核就已支持 x86/x86_64 的 UEFI 镜像内存功能,而对于华为来说,为 AArch64 添加该功能也是他们一直在努力的事情。4 月 14 日,华为工程师 Wupeng Ma 发布了最新补丁集,实现了对 AArch64 硬件的这种 Linux 镜像内存支持。
375 0
华为工程师发布最新补丁,实现对 AArch64 硬件的 Linux 镜像内存支持
|
Shell Linux 开发者
【Shell 命令集合 文件管理】Linux 补丁文件应用命令 patch命令使用指南
【Shell 命令集合 文件管理】Linux 补丁文件应用命令 patch命令使用指南
367 0
|
Java Linux 虚拟化
VMware Linux下拖拽补丁vmtools的安装和卸载
VMware Linux下拖拽补丁vmtools的安装和卸载
495 0
|
Rust 网络协议 Linux
共计 37.9 万行代码,Rust for the Linux kernel 第六版补丁发布
共计 37.9 万行代码,Rust for the Linux kernel 第六版补丁发布
204 0
共计 37.9 万行代码,Rust for the Linux kernel 第六版补丁发布
|
Linux API 开发者
庞大的2.3k补丁系列将缩短 Linux 内核构建时间和解决依赖地狱
庞大的2.3k补丁系列将缩短 Linux 内核构建时间和解决依赖地狱
240 0
庞大的2.3k补丁系列将缩短 Linux 内核构建时间和解决依赖地狱
|
Linux 开发工具
|
Rust Linux 编译器
Rust for Linux 新补丁:为 Linux 内核增加对 Rust 作为第二语言的支持
Rust for Linux 新补丁:为 Linux 内核增加对 Rust 作为第二语言的支持
299 0
Rust for Linux 新补丁:为 Linux 内核增加对 Rust 作为第二语言的支持