学习资料收集比较简单思路方法类似于这种初级问题网上资料非常丰富google或者baidu搜索下然后选择有价值资料思路方法 2是阅读man在线文档完成收集工作当然最终要在自己Linux上作实验比较整理总结消化吸收为自己东西要除去这么种思想:定要学全要知道次学全是不可能只能先学习最为常用在以后不断实战过程中逐步丰富最终达到比较高水平把握原则是:日有所学学以致用用以促学
首先介绍下df和patch在这里不会把man在线文档上所有选项都介绍下那样也没有必要在99%时间里我们只会用到几个选项所以必须学会这几个选项
1、df
--------------------
NAME
df - find dferences between two files
SYNOPSIS
df [options] from-file to-file
--------------------
简单说df功能就是用来比较两个文件区别然后记录下来也就是所谓df补丁语法格式:df 【选项】 源文件(夹) 目文件(夹)就是要给源文件(夹)打个补丁使的变成目文件(夹)术语也就是“升级”下面介绍 3个最为常用选项:
-r 是个递归选项设置了这个选项df会将两个区别版本源代码目录中所有对应文件全部都进行次比较包括子目录文件
-N 选项确保补丁文件将正确地处理已经创建或删除文件情况
-u 选项以统格式创建补丁文件这种格式比缺省格式更紧凑些
2、patch
------------------
NAME
patch - apply a df file to an original
SYNOPSIS
patch [options] [originalfile [patchfile]]
but usually just
patch -pnum <patchfile>
------------------
简单说patch就是利用df制作补丁来实现源文件(夹)和目文件(夹)转换这样说就意味着你可以有源文件(夹)――>目文件(夹)也可以目文件(夹)――>源文件(夹)下面介绍几个最常用选项:
-p0 选项要从当前目录查找目文件(夹)
-p1 选项要忽略掉第层目录从当前目录开始查找
************************************************************
在这里以例子介绍说明:
--- old/modules/pcitable Mon Sep 27 11:03:56 1999
+ /modules/pcitable Tue Dec 19 20:05:41 2000
如果使用参数-p0那就表示从当前目录找个叫做old文件夹在它下面寻找modules下pcitable文件来执行patch操作
如果使用参数-p1那就表示忽略第层目录(即不管old)从当前目录寻找modules文件夹在它下面找pcitable这样前提是当前目录必须为modules所在目录而df补丁文件则可以在任意位置只要指明了df补丁文件路径就可以了当然可以用相对路径也可以用绝对路径不过我般习惯用相对路径
************************************************************
-E 选项介绍说明如果发现了空文件那么就删除它
-R 选项介绍说明在补丁文件中“新”文件和“旧”文件现在要调换过来了(实际上就是给新版本打补丁让它变成老版本)
下面结合具体例子来分析和解决分为两种类型:为单个文件打补丁和为文件夹内多个文件打补丁
环境:在RedHat 9.0下面以armlinux用户登陆
目录树如下:
|-- bootloader
|-- debug
|-- images
|-- kernel
|-- program
|-- rootfiles
|-- software
|-- source
|-- sysapps
|-- tmp
`-- tools
下面在program文件夹下面建立patch文件夹作为实验用然后进入patch文件夹
、为单个文件进行补丁操作
1、建立测试文件test0、test1
[armlinux@lqm patch]$ cat >>test0<<EOF
> 111111
> 111111
> 111111
> EOF
[armlinux@lqm patch]$ more test0
111111
111111
111111
[armlinux@lqm patch]$ cat >>test1<<EOF
> 222222
> 111111
> 222222
> 111111
> EOF
[armlinux@lqm patch]$ more test1
222222
111111
111111
2、使用df创建补丁test1.patch
[armlinux@lqm patch]$ df -uN test0 test1 > test1.patch
【注:单个文件所以不需要-r选项选项顺序没有关系即可以是-uN也可以是-Nu】
[armlinux@lqm patch]$ ls
test0 test1 test1.patch
[armlinux@lqm patch]$ more test1.patch
************************************************************
patch文件结构
补丁头
补丁头是分别由---/+开头两行用来表示要打补丁文件---开头表示旧文件+开头表示新文件
个补丁文件中多个补丁
个补丁文件中可能包含以---/+开头很多节每节用来打个补丁所以在个补丁文件中可以包含好多个补丁
块
块是补丁中要修改地方它通常由部分不用修改东西开始和结束他们只是用来表示要修改位置他们通常以@@开始结束于另个块开始或者个新补丁头
块缩进
块会缩进列而这列是用来表示这行是要增加还是要删除
块第列
+号表示这行是要加上
-号表示这行是要删除
没有加号也没有减号表示这里只是引用而不需要修改
************************************************************
***df命令会在补丁文件中记录这两个文件首次创建时间如下***
--- test0 2006-08-18 09:12:01.000000000 +0800
+ test1 2006-08-18 09:13:09.000000000 +0800
@@ -1,3 +1,4 @@
+222222
111111
-111111
+222222
111111
[armlinux@lqm patch]$ patch -p0 < test1.patch
patching file test0
[armlinux@lqm patch]$ ls
font face="Times New Roman">test0 test1 test1.patch
[armlinux@lqm patch]$ cat test0
222222
111111
222222
111111
3、可以去除补丁恢复旧版本
[armlinux@lqm patch]$ patch -RE -p0 < test1.patch
patching file test0
[armlinux@lqm patch]$ ls
test0 test1 test1.patch
[armlinux@lqm patch]$ cat test0
111111
111111
111111
2、为多个文件进行补丁操作
最新评论