Q:为什么要找不同,为什么要打补丁?

A:

  在Linux应用中,作为DBA,我们知道MySQL跑在Linux系统之上,数据库最重要的追求就是性能,“稳”是重中之重,所以不能动不动就是换系统或是换这换那的,这个时候除非是万不得已,要不然都是在原有基础上改改就行了,也就是给内核及下载的一些源码打补丁或者说是升级,那么在Linux下使用diff制作补丁以及如何使用patch打补丁显得尤为重要。

一、找不同:diff命令(differences)

  -- compare files line by line

  一行一行的比较文本文件

作用:

  比较两个文件之间的差异,输出结果为两个文件的不同之处。

  使用diff命令制作补丁。

格式:

diff  [OPTION]...  FILES

选项:

  -u:会将不同的地方放在一起,紧凑易读

    diff -u test1 test2 > test.patch   (利用diff命令生成补丁patch)

  -r:递归比较目录下的所有文件(比较文件夹时候一定要接-r)

1、diff命令:找不同

shell> cp fruit.txt shuiguo.txt
shell> diff fruit.txt shuiguo.txt
  //因为是复制的文件,所以文件内容没有差异,也就没有输出结果 shell> echo "banana" >>fruit.txt
shell> diff fruit.txt shuiguo.txt
9d8
< banana
  //diff命令后面,第一个文件有9行,第二个文件有8行,<表示右边文件内容缺失 shell> echo "cherry" >>shuiguo.txt
shell> diff fruit.txt shuiguo.txt
9c9
< banana
---
> cherry
  //diff命令后面,两个文件都是9行,<右边文件缺失banana,>左边文件缺失cherry

2、diff命令:制作补丁文件

shell> cat ni.txt
jinan
changqing
linux
chinaitsoft
shell> cp ni.txt wo.txt
shell> diff ni.txt wo.txt
shell> diff -u ni.txt wo.txt
  //copy文件没有内容差异

shell> echo "zhangjiacai" >>wo.txt
shell> diff -u ni.txt wo.txt
--- ni.txt -- ::35.253976996 +
+++ wo.txt -- ::50.037971397 +
@@ -, +, @@
changqing
linux
chinaitsoft
+zhangjiacai shell> vim ni.txt
shell> cat ni.txt
jinan
linux
chinaitsoft shell> diff -u ni.txt wo.txt
--- ni.txt -- ::32.930978061 +
+++ wo.txt -- ::50.037971397 +
@@ -, +, @@
jinan
+changqing
linux
chinaitsoft
+zhangjiacai

解析:

  @@ 代表一段范围

  - 代表ni.txt

  + 代表wo.txt

使用 > 输出重定向生成补丁文件ni-to-wo.patch

shell> diff -u ni.txt wo.txt > ni-to-wo.patch
shell> cat ni-to-wo.patch
--- ni.txt -- ::32.930978061 +
+++ wo.txt -- ::50.037971397 +
@@ -, +, @@
jinan
+changqing
linux
chinaitsoft
+zhangjiacai

如此,我们就做好了一个补丁文件。

二、打补丁:patch命令

  --- apply a diff file to an original.

用途:

  用来打补丁---修补文件

格式:

patch  [选项]  原始文件 < 补丁文件

  -pN:N表示忽略N层路径

  -R: 还原到老版本

注意事项:

  ①如果打多个补丁,注意先后顺序;

  ②打补丁前不要修改源文件;

1、文件和文件的比较

shell> diff ni.txt wo.txt
1a2
> changqing
3a5
> zhangjiacai
shell> diff ni.txt wo.txt >ni-to-wo.patch  //生成补丁文件 shell> patch ni.txt <ni-to-wo.patch  //打补丁
patching file ni.txt
shell> diff ni.txt wo.txt  //打补丁成功 shell> patch -R ni.txt <ni-to-wo.patch  //还原到原来的版本(撤销打补丁)
patching file ni.txt shell> diff ni.txt wo.txt
1a2
> changqing
3a5
> zhangjiacai

2、目录和目录的比较

[root@localhost test]# tree qq-v1
qq-v1
├── hosts
└── image
└── .txt [root@localhost test]# tree qq-v2
qq-v2
├── hosts
├── image
│ └── .txt
├── passwd
└── sound
└── .txt [root@localhost test]# diff -ur qq-v1 qq-v2
Only in qq-v2: passwd
Only in qq-v2/sound: .txt [root@localhost test]# diff -Nur qq-v1 qq-v2
diff -Nru qq-v1/passwd qq-v2/passwd
--- qq-v1/passwd -- ::00.000000000 +
+++ qq-v2/passwd -- ::47.664980339 +
@@ -, +, @@
+root:x:::root:/root:/bin/bash
+bin:x:::bin:/bin:/sbin/nologin

解析:

  -N --new-file(Treat absent files as empty)如果没有文件,就拿一个空文件和别的目录里的文件比较

制作补丁文件进行对目录的打补丁

[root@localhost test]# diff -Nur qq-v1 qq-v2 >patch-v2.txt  #比较文件夹生成补丁文件--备用:补丁文件patch-v2.txt在test目录下

-pnum  or  --strip=num

Strip the smallest prefix containing num leading slashes from each file name

found in the patch file.

例如:/a/b/c/d/e/f/g

  -p3 的效果就是去掉第3个/前面的内容,效果:c/d/e/f/g

  -p4 的效果就是去掉第4个/前面的内容,效果:d/e/f/g

1> 内层打补丁

[root@localhost test]# cd qq-v1  #进入qq目录,进去里面进行打补丁
[root@localhost qq-v1]# patch -p1 <../patch-v2.txt
patching file passwd
patching file sound/.txt [root@localhost qq-v1]# cd ..
[root@localhost test]# diff -Nru qq-v1 qq-v2
  //没有输出结果说明打补丁成功 [root@localhost test]# cd qq-v1
[root@localhost qq-v1]# patch -R -p1 <../patch-v2.txt  //撤销补丁
patching file passwd
patching file sound/.txt [root@localhost qq-v1]# cd ..
[root@localhost test]# diff -Nru qq-v1 qq-v2
diff -Nru qq-v1/passwd qq-v2/passwd
--- qq-v1/passwd -- ::00.000000000 +
+++ qq-v2/passwd -- ::47.664980339 +
@@ -, +, @@
+root:x:::root:/root:/bin/bash
+bin:x:::bin:/bin:/sbin/nologin

2> 外层打补丁

//如果qq-v1和qq-v2在相同目录下,就不需要去掉一层路径
[root@localhost test]# patch -p0 <patch-v2.txt
patching file qq-v1/passwd
patching file qq-v1/sound/.txt

墙裂建议:

  任何操作前,记得对文件、目录做好备份,防止操作失败导致数据丢失。

找不同diff-打补丁patch的更多相关文章

  1. diff生成补丁与patch打补丁

    1.使用diff生成补丁: diff是Linux下的文件比较命令,参数这里就不说了,直接man一下就行了,不仅可以比较文件,也可以比较两个目录,并且可以将不同之处生成补丁文件,其实就是一种打补丁的命令 ...

  2. 补丁(patch)的制作与应用

    命令简介 用到的两个命令是diff和patch. diff diff可以比较两个东西,并可同时记录下二者的区别.制作补丁时的一般用法和常见选项为: diff [选项] 源文件(夹) 目的文件(夹) - ...

  3. 打补丁patch 命令使用

    打补丁patch 命令使用 http://www.cnblogs.com/huanghuang/archive/2011/07/14/2106402.html patch 命令用于打补丁,补丁文件是使 ...

  4. diff命令和patch命令

    diff命令和patch命令 Linux就这个范儿 2.9.5 文件对比命令——diff diff命令搭建网站离不开数据库,在Linux系统上我们使用源码安装了MySQL服务器.不久我们发现 Goog ...

  5. Linux下创建 code diff 和 合并 patch

    Linux 下经常需要给别人提供 patch 以及合 patch,这时需要用到 Linux 的 diff 和 patch 命令. 1. diff 命令 diff 命令常用来比较文件.目录,也可以用来制 ...

  6. 补丁patch 漏洞 bug或glitch

    补丁patch漏洞 bug或glitch    

  7. 【UE4】 补丁Patch 与 DLC

    概述 UE4 中主要使用 Project Launcher 来进行补丁和DLC的制作 补丁与 DLC 都需要基于某个版本而制作 补丁 与 DLC 最后以 Pak 形式表现, 补丁的 pak 可以重命名 ...

  8. GIT打补丁 - patch和diff应用

    一. 准备工作: [root@guangzhou gittest]# git br * master [root@guangzhou gittest]# git chk -b patch-test1 ...

  9. 使用diff制作补丁

    1.制作补丁包 命令格式 diff -uNr  oldfile.c newfile.c > x.patch 2.打补丁 命令格式 patch -p0 < x.patch 总结一下:单个文件 ...

随机推荐

  1. 解决:No qualifying bean of type [org.springframework.jdbc.core.JdbcTemplate] found for dependency

    错误: Description: Field jdbcTemplate in com.gwd.dao.impl.IUserDaoImpl required a bean of type 'org.sp ...

  2. Hadoop HDFS分布式文件系统 常用命令汇总

    引言:我们维护hadoop系统的时候,必不可少需要对HDFS分布式文件系统做操作,例如拷贝一个文件/目录,查看HDFS文件系统目录下的内容,删除HDFS文件系统中的内容(文件/目录),还有HDFS管理 ...

  3. 【转】web前端到底怎么学?干货资料!

    一般据我经验,在喜欢并且决定和她恋爱之前,我都会做一下充分准备和调查,有必要了解和研究清楚 ‘她’ 的几个特性和习惯 web前端的基本工作职责 和基础技能(要清楚) web前端的分类和门派(简要概述, ...

  4. Sword ACE编译

    1.设置环境变量 #ACE_ROOT是指ACE解压目录 export ACE_ROOT=/home/person/2/ACE_wrappers export LD_LIBRARY_PATH=$ACE_ ...

  5. Ogre Compositor解析

    Compositor脚本与类型 我们先看下面一张基本的Compositor的脚本图: 上面就是一个Composition资源.在解析时,主要是使用CompositionPass, Compositio ...

  6. java 5.0引入的新特性-枚举

    概念 首先,枚举并不是一种新技术,而是一种基础数据类型.它隶属于两种基础类型中的值类型,如下: 2.  为什么要有枚举 枚举在真正的开发中是非常常用的,它的作用很简单也很纯粹:它定义了一种规范,就是要 ...

  7. 第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表、验证码表、轮播图表

    第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表.验证码表.轮播图表 创建Django项目 项目 settings.py ...

  8. Microsoft Jet 数据库引擎打不开文件,它已经被别的用户以独占方式打开,或没有查看数据的权限。

    System.Data.OleDb.OleDbException (0x80004005): Microsoft Jet 数据库引擎打不开文件'D:\wwwroot\gonghouxie\wwwroo ...

  9. (转) UDP包的大小与MTU

    在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好?当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对像ICQ一类的发送聊天消息的情况作分 ...

  10. 在Eclipse中设置进行JNI的头文件编译方法(转 http://blog.csdn.net/mirkerson/article/details/17187109)

    这两天在搞NDK开发,JNI的头文件进行编译的时候,要跑到对应的class文件路径下(通常是工程的bin目录),进行编译生成,很是不便,也容易出错,所以考虑在Eclipse中作为外部工具引入,所以便查 ...