SECURITY:补丁

diff逐行比较

  • diff制作补丁文件的原理:
  • 告诉我们怎么修改第一个文件后能得到第二个文件。

这样如果第一个版本的脚本有漏洞,我们不需要将整个脚本都替换,仅需要修改有问题的一小部分代码即可,diff刚好可以满足这个需求!
像Linux内核这样的大块头,一旦发现有一个小漏洞,我们不可能把整个内核都重新下载,全部替换一遍,而仅需要更新有问题的那一小部分代码即可!

  • diff命令常用选项:
    -u 输出统一内容的头部信息(打补丁使用),计算机知道是哪个文件需要修改
    -r 递归对比目录中的所有资源(可以对比目录)
    -a 所有文件视为文本(包括二进制程序)
    -N 无文件视为空文件(空文件怎么变成第二个文件)
    -N选项备注说明:
    A目录下没有txt文件,B目录下有txt文件
    diff比较两个目录时,默认会提示txt仅在B目录有(无法对比差异,修复文件)
    diff比较时使用N选项,则diff会拿B下的txt与A下的空文件对比,补丁信息会明确说明如何从空文件修改后变成txt文件,打补丁即可成功!

diff文件对比

  • 准备实验环境
cat test1.sh                                //v1版本脚本
#!/bin/bash
echo "hello wrld"

cat test2.sh                                //v2版本脚本
#!/bin/bash
echo "hello the world"
echo "test file"
  • 对比,
diff -u test1.sh test2.sh     #查看差异,包含头部信息
--- test1.sh    2018-02-07 22:20:02.723971251 +0800
+++ test2.sh    2018-02-07 22:20:13.358760687 +0800
@@ -1,3 +1,3 @@
 #!/bin/bash
-echo "hello world"
-echo "test"
+echo "hello the world"
+echo "test file"

diff目录对比

  • 准备实验环境
mkdir demo
cd demo
mkdir {source1,source2}

echo "hello world"       > source1/test.sh
cp /bin/find source1/
tree source1/
├──find
└──test.sh

echo "hello the world"  > source2/test.sh
echo "test" > source2/tmp.txt
cp /bin/find source2/
echo "1" >> source2/find
tree source2/ 
├──find
├──test.sh
└──tmp.txt
#注意:两个目录下find和test.sh文件内容不同,source2有tmp.txt而source1没有该文件
  • 对比
diff -u source1/ source2/
#仅对比了文本文件test.sh;二进制文件、tmp都没有对比差异,仅提示,因为没有-a和-N选项
diff -Nu source1/ source2/
#对比了test.sh,并且使用source2目录的tmp.txt与source1的空文件对比差异。
diff -Nua source1/ source2/
#对比了test.sh、tmp.txt、find(程序)。

patch打补丁

使用patch命令对目录下的所有代码打补丁

  • 使用前面创建的source1和source2目录下的代码为素材,生成补丁文件
cd demo
diff -Nuar /root/demo/source1/ /root/demo/source2/ > source.patch
  • 使用patch命令为代码打补丁
pwd
/root/demo
patch -p3 < source.patch
patching file test.sh
patching file tmp.txt
patching file find
//patch -pnum(其中num为数字,指定删除补丁文件中多少层路径前缀)
//如原始路径为/root/demo/source1/tmp.txt
//-p0则整个路径不变
//-p1则修改路径为oot/demo/source1/tmp.txt
//-p3则修改路径为source1/tmp.txt
//-R(reverse)反向修复,-E修复后如果文件为空,则删除该文件
 
patch -RE < source.patch      #还原旧版本,反向修复
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值