利用 patch 更新原始码

news/2024/7/8 13:43:39 标签: patch, header, file, makefile, 工作, c
cle class="baidu_pl">
cle_content" class="article_content clearfix">
content_views" class="htmledit_views">

在前面介绍如何进行套件的升级࿰c;这是很重要的喔!那假如我是以 Tarball 来进行某个套件的安装࿰c;那么是否当我要升级这个套件时࿰c;就得要下载这个套件的完整全新的 Tarball 呢?举个例子来说࿰c;鸟哥有个讨论区在 http://phorum.vbird.org 这个网址࿰c;这个讨论区是以 phpBB 这个套件来架设的࿰c;而鸟哥的讨论区版本为 phpbb2.0.1.tar.gz ࿰c;目前( 2004/04/10 )最新释出的版本则是phpbb2.0.8.tar.gz 。那我是否需要下载全新的 phpbb2.0.8.tar.gz 这个档案来更新原本的旧程序呢?
  事实上࿰c;当我们发现一些套件的漏洞࿰c;通常是某一段程序代码写的不好所致。因此࿰c;所谓的『更新原始码』常常是只有更改部分档案的小部分内容而已。既然 如此的话࿰c;那么我们是否可以就那些被更动的档案来进行修改可以咯?也就是说࿰c;旧版本到新版本间没有更动过的档案就不要理他࿰c;仅将有修订过的档案部分来处 理即可。这有什么好处呢?首先࿰c;没有更动过的档案的目标文件( objectclass="tags" href="/tags/FILE.html" title=file>file )根本就不需要重新编译࿰c;而且有更动过的档案又可以利用 make 来自动 update ( 更新 )࿰c;如此一来࿰c;呵呵!我们原先的设定( makeclass="tags" href="/tags/FILE.html" title=file>file 档案里面的规则 )将需要重新改写或侦测!呵呵!可以节省很多宝贵的时间呢( 例如后续章节会提到的核心的编译! )
  从上面的说明当中࿰c;我们可以发现࿰c;如果可以将旧版的原始码数据改写成新版的版本࿰c;那么就能直接编译了࿰c;而不需要将全部的新版 Tarball 重新下载一次呢!可以节省频宽与时间说!那么如何改写原始码?难道要我们一个档案一个档案去参考然后修订吗?当然没有这么没人性!我们在正规表示法的时候有提到一个比对两个档案的指令࿰c;那就是 diff ࿰c;这个指令可以将『两个档案之间的差异性列出来』呢!那我们也知道新旧版本的档案之间࿰c;其实只有修改一些程序而已࿰c;那么我们可以透过diff 比对出新旧版本之间的文字差异࿰c;然后再以相关的指令来将旧版的档案更新吗?!呵呵!当然可以啦!那就是 class="tags" href="/tags/PATCH.html" title=patch>patch 这个指令啦!很多的套件开发商在更新了原始码之后࿰c;几乎都会释出所谓的class="tags" href="/tags/PATCH.html" title=patch>patch class="tags" href="/tags/FILE.html" title=file>file࿰c;也就是直接将原始码 update 而已的一个方式喔!我们底下以一个简单的范例来说明给您了解喔!
  假设我们有两个档案࿰c;分别是 exclass="tags" href="/tags/PATCH.html" title=patch>patch.old 与 exclass="tags" href="/tags/PATCH.html" title=patch>patch.new ࿰c;他们的内容是这样的:
 [guest@test guest]# vi exclass="tags" href="/tags/PATCH.html" title=patch>patch.old

   echo "check your postfix's body and class="tags" href="/tags/HEADER.html" title=header>header drop settings"
   echo "postmap -q - regexp:class="tags" href="/tags/HEADER.html" title=header>header_checks < class="tags" href="/tags/HEADER.html" title=header>header_checks"
   postmap -q - regexp:class="tags" href="/tags/HEADER.html" title=header>header_checks < class="tags" href="/tags/HEADER.html" title=header>header_checks
   echo "postmap -q - regexp:body_checks < body_checks"
   postmap -q - regexp:body_checks < body_checks
   [guest@test guest]# vi exclass="tags" href="/tags/PATCH.html" title=patch>patch.new
   echo "check your postfix's body and class="tags" href="/tags/HEADER.html" title=header>header drop settings"
   echo "postmap -q - regexp:class="tags" href="/tags/HEADER.html" title=header>header_checks < class="tags" href="/tags/HEADER.html" title=header>header_checks This's right"
   postmap -q - regexp:class="tags" href="/tags/HEADER.html" title=header>header_checks < class="tags" href="/tags/HEADER.html" title=header>header_checks
   echo "postmap -q - regexp:body_checks < body_checks This's right"
   postmap -q - regexp:body_checks < body_checks
   两个档案的不同点在于:
   [guest@test guest]# diff exclass="tags" href="/tags/PATCH.html" title=patch>patch.old exclass="tags" href="/tags/PATCH.html" title=patch>patch.new
   2c2
   < echo "postmap -q - regexp:class="tags" href="/tags/HEADER.html" title=header>header_checks < class="tags" href="/tags/HEADER.html" title=header>header_checks"
   ---
   > echo "postmap -q - regexp:class="tags" href="/tags/HEADER.html" title=header>header_checks < class="tags" href="/tags/HEADER.html" title=header>header_checks This's right"
   4c4
   < echo "postmap -q - regexp:body_checks < body_checks"
   ---
   > echo "postmap -q - regexp:body_checks < body_checks This's right"
 
上面显示出两个档案的不同点࿰c;详细的意义请参考正规表示法那个章节的介绍。 好了࿰c;假如我以『diff -c exclass="tags" href="/tags/PATCH.html" title=patch>patch.old exclass="tags" href="/tags/PATCH.html" title=patch>patch.new 』以及上面显示的信息࿰c;做成一个档案࿰c;内容是这样的:
[guest@test guest]# vi exclass="tags" href="/tags/PATCH.html" title=patch>patch.class="tags" href="/tags/PATCH.html" title=patch>patch
*** exclass="tags" href="/tags/PATCH.html" title=patch>patch.old 2004-04-09 14:22:49.000000000 +0800
--- exclass="tags" href="/tags/PATCH.html" title=patch>patch.new 2004-04-09 14:23:18.000000000 +0800
2c2
< echo "postmap -q - regexp:class="tags" href="/tags/HEADER.html" title=header>header_checks < class="tags" href="/tags/HEADER.html" title=header>header_checks"
---
> echo "postmap -q - regexp:class="tags" href="/tags/HEADER.html" title=header>header_checks < class="tags" href="/tags/HEADER.html" title=header>header_checks This's right"
4c4
< echo "postmap -q - regexp:body_checks < body_checks"
---
> echo "postmap -q - regexp:body_checks < body_checks This's right"
注意到࿰c;这个档案的第一行显示出旧版本的文件名࿰c;而第二行则为新版本的档名与时间࿰c;第三行以后则是两个档案的差异性。那么我们将以 class="tags" href="/tags/PATCH.html" title=patch>patch 来进行更新࿰c;将 exclass="tags" href="/tags/PATCH.html" title=patch>patch.old 更新到 exclass="tags" href="/tags/PATCH.html" title=patch>patch.new 看看。class="tags" href="/tags/PATCH.html" title=patch>patch 的基本语法是这样的:
class="tags" href="/tags/PATCH.html" title=patch>patch -p数字 < class="tags" href="/tags/PATCH.html" title=patch>patch_class="tags" href="/tags/FILE.html" title=file>file
特别留意那个 -p数字࿰c;那是与 class="tags" href="/tags/PATCH.html" title=patch>patch_class="tags" href="/tags/FILE.html" title=file>file 里面列出的文件名有关的信息。假如在 class="tags" href="/tags/PATCH.html" title=patch>patch_class="tags" href="/tags/FILE.html" title=file>file 第一行写的是这样:
*** /home/guest/example/exclass="tags" href="/tags/PATCH.html" title=patch>patch.old
那么当我下达『 class="tags" href="/tags/PATCH.html" title=patch>patch -p0 < class="tags" href="/tags/PATCH.html" title=patch>patch_class="tags" href="/tags/FILE.html" title=file>file 』时࿰c;则更新的档案是『 /home/guest/example/exclass="tags" href="/tags/PATCH.html" title=patch>patch.old
』࿰c;如果『 class="tags" href="/tags/PATCH.html" title=patch>patch -p1 < class="tags" href="/tags/PATCH.html" title=patch>patch_class="tags" href="/tags/FILE.html" title=file>file』࿰c;则更新的档案为『home/guest/example/exclass="tags" href="/tags/PATCH.html" title=patch>patch.od』࿰c;如果
class="tags" href="/tags/PATCH.html" title=patch>patch -p4 < class="tags" href="/tags/PATCH.html" title=patch>patch_class="tags" href="/tags/FILE.html" title=file>file』则更新『exclass="tags" href="/tags/PATCH.html" title=patch>patch.old』࿰c;也就是说࿰c; -pxx 那个 xx 代表『拿掉几个斜线(/)』
的意思!这样可以理解了吗?!好了࿰c;那么我要开始来更新我的 exclass="tags" href="/tags/PATCH.html" title=patch>patch.old 了࿰c;可以这样搞定:
[guest@test guest]# class="tags" href="/tags/PATCH.html" title=patch>patch -p0 < exclass="tags" href="/tags/PATCH.html" title=patch>patch.class="tags" href="/tags/PATCH.html" title=patch>patch
# 注意喔࿰c;这个时候我的class="tags" href="/tags/GongZuo.html" title=工作>工作目录底下会存在 exclass="tags" href="/tags/PATCH.html" title=patch>patch.old 才对!
# 然后立刻察看一下࿰c;您会发觉࿰c; exclass="tags" href="/tags/PATCH.html" title=patch>patch.new 与 exclass="tags" href="/tags/PATCH.html" title=patch>patch.old 变成一模一样的了!很容易了解吧!上面三个档案您可以在底下的网址取得:
http://linux.vbird.org/download/books/basic/source_code/exclass="tags" href="/tags/PATCH.html" title=patch>patch.tgz加油的啦!另外࿰c;如果您是以 class="tags" href="/tags/PATCH.html" title=patch>patch 更新原始码࿰c;那么记得࿰c;您可能必须要重新编译࿰c;并且重新install 才算成功更新喔!并不是 class="tags" href="/tags/PATCH.html" title=patch>patch 就好了!因为 class="tags" href="/tags/PATCH.html" title=patch>patch 的功能主要仅只是更新原始码档案而已!
切记切记!

cle>

http://www.niftyadmin.cn/n/761673.html

相关文章

JAVA程序员不一定非得要会SSH

感觉这个文章写的不错&#xff0c;作为菜鸟的我应该好好学习。 http://thoughtfly.iteye.com/blog/968054#bc2313885 SSH框架架构对于国内来说是大行其道。国内一大半的软件公司你要是去应聘java程序员&#xff0c;则都会被问一句&#xff0c;会SSH吗&#xff0c;好像不会SSH…

md5sum命令以及ldd命令

[roottest root]# md5sum [-bct] filename[roottest root]# md5sum [--status|--warn] --check filename参数说明&#xff1a;-b &#xff1a;使用 binary 的读档方式&#xff0c;预设为 Windows/DOS 档案型态的读取方式&#xff1b;-c &#xff1a;检验 md5sum 档案指纹&#…

编码问题之:java.io.UTFDataFormatException: Invalid byte 2 of 2-byte UTF-8 sequence.

我的myeclipse的工作空间中同时部署了两个项目&#xff0c;一个是utf-8编码的新项目&#xff0c;一个是gbk编码的旧项目&#xff0c;因为后来一直在开发新项目&#xff0c;在一次乱码问题后&#xff0c;在myeclipse中将General--Content Types中的所有java文件&#xff0c;xml文…

logrotate相关说明

touch admin.loglscdclearchattr a /var/log/admin.loglsattr /var/log/admin.logvi /etc/logrotate.d/admin/etc/logrotate.d/admin的内容为#this configuration is from LIUCHAO 2009/5/8/var/log/admin.log{ monthly size10M rotate 5 nocompre…

Linux日志文件utmp、wtmp、lastlog、messages

1、有关当前登录用户的信息记录在文件utmp中&#xff1b;who命令2、登录进入和退出纪录在文件wtmp中&#xff1b;w命令3、最后一次登录文件可以用lastlog命令察看&#xff1b;4、messages从syslog中记录信息注意&#xff1a;wtmp和utmp文件都是二进制文件&#xff0c;他们不能被…

java date and calendar

http://www.cnblogs.com/springcsc/archive/2009/12/03/1616347.html Date类 在JDK1.0中&#xff0c;Date类是唯一的一个代表时间的类&#xff0c;但是由于Date类不便于实现国际化&#xff0c;所以从JDK1.1版本开始&#xff0c;推荐使用Calendar类进行时间和日期处理。这里简单…

[转]History命令用法 15 例

如果你经常使用 Linux 命令行&#xff0c;那么使用 history命令可以有效地提升你的效率。本文将通过实例的方式向你介绍 history 命令的 15 个用法。 使用 HISTTIMEFORMAT 显示时间戳 当你从命令行执行 history 命令后&#xff0c;通常只会显示已执行命令的序号和命令本身。如…

自定义函数 判断oracle指定字段的值是否是数值类型

http://hi.baidu.com/yljf1314/item/59c27962e3f9262669105b89 Oracle PL/SQL并没有提供一个判断值是否为数字的函数&#xff0c;所以我们在实际中遇到以下的问题时&#xff0c; 常常会很郁闷。 例如有一个表&#xff0c; SQL> desc userlogin 名称 …