使用diff同patch工具

Linux命令使用

在给客户提供技术支持工作的时候,常会遇到需要修改各种不同的配置文件。过去的方式,通常是描述修改的地方,然后由用户自行修改,或使用sed等工具写 一个脚本给用户运行。但这样会带来一些问题:如果用户不会vi,或者他理解错、找错配置的位置,这样带来的问题可能更难预计。

此时,或许可以试试我的方法,借用diff和patch直接帮用户修改,然后把生成的“patch补丁”发给他运行即可。这样工作量小,而且也能控制修改后的结果,当然也方便Email发送咯。

一、介绍

diff 和patch是一对工具,在数学上来说,diff是对两个集合的差运算,patch是对两个集合的和运算。diff比较两个文件或文件集合的差异,并记录 下来,生成一个差异文件,这也是我们常说的补丁文件。补丁文件能运用于原来的两个集合之一,从而得到另一个集合。

举个例子来说文件A和文件B,经过diff之后生成了补丁文件C,那么着个过程相当于 A -B = C ,那么patch的过程就是B+C = A 或A-C =B。

因此我们只要能得到A, B, C三个文件中的任何两个,就能用diff和patch这对工具生成另外一个文件。

二、使用

实例说明是最快的方法,假设现在有a、b两个文件,内容如下:

引用

$ cat a

123456

$ cat b

abcdef

其中a是用户发给我的文件,而b是我修改后的文件。

那我们可以这样生成c文件:

$ diff -Naur a b > c

然后,可以把c文件发给用户,运行如下的命令即可自行修改a->b:

$ patch -p0 a < c

patching file a

结果如下:

$ cat a

abcdef

三、恢复

上面的操作很简单吧。那如果万一a修改有误,如何恢复呢?通过前面的说明可以知道,通过c文件是可以直接恢复的:

引用

$ patch -R -p0 a < c

patching file a

$ cat a

123456

可以看到使用diff和patch是比较安全的,请注意-R选项哦!

另外,diff生成的c文件是有记录文件名的,在不指定原文件的情况下,可以自动识别:

$ patch -p0 < c

patching file a

反了会这样:

$ patch -p0 b < c

patching file b

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

Apply anyway? [n] n

Skipping patch.

1 out of 1 hunk ignored — saving rejects to file b.rej

所以,一般是不会搞错新旧文件的。

四、路径问题

很多时候,我们还会遇到一个问题。就是为了防止文件修改错,或需要同时修改多个文件,可能会建立多一层目录,例如:

引用

$ ls -R

.:

new old

./new:

b

./old:

a

diff是可以识别路径:

$ diff -Naur old/ new/ > c

补丁需要这样打:

$ cd old/

$ patch -p1 < ../c

patching file a

patching file b

结果如下:

引用

$ ls

b

$ cat b

abcdef

※注意咯,这样会把整个目录的文件内容和文件名都改掉的。另外,如果目录中有多个文件,除了new目录中的空文件外,会把old下的所有文件都换成new的文件和内容;new没有,而old有的文件,会删除。

引用

-pN参数的意思是:取消N层目录,也就是把old/改为./

五、注意事项

引用

1、在patch之前不要对原文件进行任何修改,否则补丁可能会失效;

2、如果做了多个补丁,请注意先后顺序,要按次序打才行;

3、如果打补丁出现问题,会生成.rej文件,其中包括原文件和补丁差异的地方。

原创地址:http://www.wangchao.net.cn/bbsdetail_1632751.html

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/102904

(0)
FelixFelix
上一篇 2018-07-14 18:26
下一篇 2018-07-14 20:41

相关推荐

  • KeepAlive高可用双主lvs-dr模型集群

    1.环境: RS1  :  192.168.0.117 RS2 :192.168.0.118 VS1 :192.168.0.106 VS2 :  192.168.0.114 VIP1:192.168.0.90     VIP2:192.168.0.99 2.在RS上安装httpd服务:yum install httpd 编辑网页: vi /var/www/h…

    Linux笔记 2018-07-23
  • linux基础

    计算机的组成及其功能 计算机初始设计出的时候,就遵循冯诺依曼体系,主要有四部分组成,cpu(中央处理器;运算器和控制器),存储器,输入设备和输出设备 cpu: 运算器、控制器、寄存器,缓存(为了提高cpu性能的加速部件) 存储器:内存,RAM(随机访问存储器) 输入:对计算机下指令,提供让机器操作的数据等;不如键盘,鼠标 输出:输出数据加工后的结果;比如显示…

    Linux笔记 2018-06-24
  • YUM配置安装使用

    一、YUM简介     1. YUM: Yellowdog Update Modifier 完成RHEL系列前端自动解决依赖关系安装工具,依赖rpm存在     2.工作模式:C/S 架构       Server端(yum仓库):依赖关系库、原文件、校验码文件       Client端:yum客户端程序、配置文件(连接Server路径信息)     3.…

    Linux笔记 2018-04-22
  • 磁盘管理

    本章节主要介绍磁盘分区、文件系统、挂载、以及swap,另外还有工具dd的使用等等。

    2018-04-25
  • 硬连接和软连接

    多情自古伤离别

    2018-04-04
  • 如何在虚拟机上安装centos6系统

    VMware Workstation  是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,以及可便于携带的虚拟机器,  下图以VMware14.1.1版本为例: 第一步打开VMware并选择创建新的虚拟机。 第二步此处我们选择典型配置,并开始下一步 第三步选择稍后安装操作系统并开始下一步 第四步:选择liux操作系统,版本号…

    2018-03-29