使用diff和patch工具打补丁

对比单个文件的差异

diff制作补丁文件的原理:告诉我们怎么修改第一个文件后能得到第二个文件。
这样如果第一个版本的脚本有漏洞,我们不需要将整个脚本都替换,仅需要修改有问题的一小部分代码即可,diff刚好可以满足这个需求!
像Linux内核这样的大块头,一旦发现有一个小漏洞,我们不可能把整个内核都重新下载,全部替换一遍,而仅需要更新有问题的那一小部分代码即可!
diff命令常用选项:
-u 输出统一内容的头部信息(打补丁使用),计算机知道是哪个文件需要修改
-r 递归对比目录中的所有资源(可以对比目录)
-a 所有文件视为文本(包括二进制程序)
-N 无文件视为空文件(空文件怎么变成第二个文件)

-N选项备注说明:
A目录下没有txt文件,B目录下有txt文件
diff比较两个目录时,默认会提示txt仅在B目录有(无法对比差异,修复文件)
diff比较时使用N选项,则diff会拿B下的txt与A下的空文件对比,补丁信息会明确说明如何从空文件修改后变成txt文件,打补丁即可成功

编写俩个文件:

~]# cat a.txt
hello
nihao
~]# cat b.txt
hello
hello the world
~]# diff -u a.txt b.txt > c.patch
~]# yum -y install patch
~]# patch -p0 < c.patch   //将a文件的内容与b文件同步
patching file a.txt
~]# patch -RE < c.txt    //退回到旧版本

patch -pnum(其中num为数字,指定删除补丁文件中多少层路径前缀)
如原始路径为/u/howard/src/blurfl/blurfl.c
-p0则整个路径不变
-p1则修改路径为u/howard/src/blurfl/blurfl.c
-p4则修改路径为blurfl/blurfl.c
-R(reverse)反向修复,-E修复后如果文件为空,则删除该文件

对比目录下所有文件的差异

[root@ecs-proxy ~]# mkdir demo1
[root@ecs-proxy ~]# cd demo1/
[root@ecs-proxy demo1]# mkdir c d
[root@ecs-proxy demo1]# echo 'cccc' > c/c1.txt
[root@ecs-proxy demo1]# echo 'dddd' > d/d1.txt
[root@ecs-proxy demo1]# cp /etc/hosts c/
[root@ecs-proxy demo1]# cp /etc/hosts d/
[root@ecs-proxy demo1]# tree c/
c/
├── c1.txt
└── hosts

0 directories, 2 files
[root@ecs-proxy demo1]# tree d/
d/
├── d1.txt
└── hosts

0 directories, 2 files
[root@ecs-proxy demo1]# 

2)打补丁

[root@proxy demo]# diff -u source1/ source2/
//仅对比了文本文件test.sh;二进制文件、tmp都没有对比差异,仅提示,因为没有-a和-N选项
[root@proxy demo]# diff -Nu source1/ source2/
//对比了test.sh,并且使用source2目录的tmp.txt与source1的空文件对比差异。
[root@proxy demo]# diff -Nua source1/ source2/
//对比了test.sh、tmp.txt、find(程序)

3)生成补丁文件

[root@proxy demo]# diff -Nuar source1/ source2/ > source.patch

4)使用patch命令打补丁

[root@ecs-proxy demo1]# ls
c  d  source.patch
[root@proxy demo]# cd c
[root@proxy source1]# patch  -p1 < ../source.patch

目录a下的文件会与目录b保持一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用.diff文件打补丁的步骤如下: 1. 首先,使用diff命令生成.diff文件,该文件记录了源文件和目标文件之间的差异。语法格式为:diff 【选项】源文件(夹)目标文件(夹)\[1\]。 2. 然后,使用git apply命令将.diff文件应用到源文件上,使其变成目标文件。语法格式为:git apply ~/patch/patch/test.diff\[2\]。 3. 如果打补丁失败,可以尝试使用git apply命令的--reject选项和--ignore-whitespace选项来解决冲突。语法格式为:git apply --reject --ignore-whitespace ~/patch/patch/test.diff\[3\]。 请注意,打补丁前最好先检查diff文件是否可用,可以使用git apply --check命令来检查\[2\]。如果打补丁失败,可以查看错误信息以及使用日志文件来进行排查\[3\]。 #### 引用[.reference_title] - *1* [Linux使用diffpatch制作及打补丁](https://blog.csdn.net/qq_21148843/article/details/107239113)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [git apply、git am打补丁.diff 和 .patch](https://blog.csdn.net/qq_31811537/article/details/82215938)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值