diff和patch工具打补丁

article/2025/9/25 2:34:06

在这里插入图片描述

diff和patch工具打补丁

  • 1 对比单个文件差异
    • 1.1 编写两个版本的脚本,一个为v1版本,一个为v2版本。
    • 2.2 使用diff命令语法
  • 2 使用patch命令对单文件代码打补丁
    • 2.1 生成补丁文件
    • 2.2 使用patch命令打补丁
  • 3 对比目录中所有文件的差异
    • 3.1 准备实验环境
    • 3.2 对比差异
  • 4 patch命令对目录下的所有代码打补丁
    • 4.1 前面创建的source1和source2目录下的代码为素材,生成补丁文件
    • 4.2 使用patch命令为代码打补丁

1 对比单个文件差异

1.1 编写两个版本的脚本,一个为v1版本,一个为v2版本。

vim test1.sh                         #v1版本脚本
#!/bin/bash
echo "hello wrld"
vim test2.sh                         #v2版本脚本#!/bin/bash
echo "hello the world"
echo "test file"

2.2 使用diff命令语法

使用diff命令查看不同版本文件的差异。

diff  test1.sh test2.sh                     #查看文件差异2c2,3
< echo "hello wrld"
---
> echo "hello the world"
> echo "test file"diff -u test1.sh test2.sh                #查看差异,包含头部信息--- test1.sh    2020-08-13 14:59:39.161420021 +0800
+++ test2.sh    2020-08-13 14:59:57.121420407 +0800
@@ -1,2 +1,3 @@#!/bin/bash
-echo "hello wrld"
+echo "hello the world"
+echo "test file"

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

这样如果第一个版本的脚本有漏洞,我们不需要将整个脚本都替换,仅需要修改有问题的一小部分代码即可,diff刚好可以满足这个需求!

像Linux内核这样的大块头,一旦发现有一个小漏洞,我们不可能把整个内核都重新下载,全部替换一遍,而仅需要更新有问题的那一小部分代码即可!

  • diff 命令常用选项:
    • -u 输出统一内容的头部信息(打补丁使用),计算机知道是哪个文件需要修改

    • -r 递归对比目录中的所有资源(可以对比目录)

    • -a 所有文件视为文本(包括二进制程序)

    • -N 无文件视为空文件(空文件怎么变成第二个文件)

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

2 使用patch命令对单文件代码打补丁

2.1 生成补丁文件

diff -u test1.sh test2.sh > test.patch

2.2 使用patch命令打补丁

在代码相同目录下为代码打补丁

yum -y install patch
patch -p0 < test.patch                    #打补丁
patching file test1.sh
#patch -pnum(其中num为数字,指定删除补丁文件中多少层路径前缀)
#如原始路径为/u/howard/src/blurfl/blurfl.c
#-p0则整个路径不变
#-p1则修改路径为u/howard/src/blurfl/blurfl.c
#-p4则修改路径为blurfl/blurfl.c
#-R(reverse)反向修复,-E修复后如果文件为空,则删除该文件cat test1.sh 
#!/bin/bash
echo "hello the world"
echo "test file"patch -RE < test.patch                     #还原旧版本,反向修复
cat test1.sh 
#!/bin/bash
echo "hello wrld"

3 对比目录中所有文件的差异

3.1 准备实验环境

mkdir demo
cd demo
mkdir {source1,source2}
echo "hello world"       > source1/test.sh
cp /bin/find source1/
tree source1/                        #source1目录下2个文件source1/
├── find
└── test.sh0 directories, 2 files[root@proxy demo]# echo "hello the world"  > source2/test.sh
[root@proxy demo]# echo "test" > source2/tmp.txt
[root@proxy demo]# cp /bin/find source2/
[root@proxy demo]# echo "1" >> source2/find 
[root@proxy demo]#  tree source2/                        #source1目录下3个文件
source2/
├── find
├── test.sh
└── tmp.txt0 directories, 3 files#注意:两个目录下find和test.sh文件内容不同,source2有tmp.txt而source1没有该文件

3.2 对比差异

diff -u source1/ source2/
#仅对比了文本文件test.sh;二进制文件、tmp都没有对比差异,仅提示,因为没有-a和-N选项
Binary files source1/find and source2/find differ
diff -u source1/test.sh source2/test.sh
--- source1/test.sh     2020-08-13 15:12:51.233437049 +0800
+++ source2/test.sh     2020-08-13 15:14:20.849438976 +0800
@@ -1 +1 @@
-hello world
+hello the world
只在 source2/ 存在:tmp.txtdiff -Nu source1/ source2/
#对比了test.sh,并且使用source2目录的tmp.txt与source1的空文件对比差异。
Binary files source1/find and source2/find differ
diff -Nu source1/test.sh source2/test.sh
--- source1/test.sh     2020-08-13 15:12:51.233437049 +0800
+++ source2/test.sh     2020-08-13 15:14:20.849438976 +0800
@@ -1 +1 @@
-hello world
+hello the world
diff -Nu source1/tmp.txt source2/tmp.txt
--- source1/tmp.txt     1970-01-01 08:00:00.000000000 +0800
+++ source2/tmp.txt     2020-08-13 15:14:25.569439078 +0800
@@ -0,0 +1 @@
+testdiff -Nua source1/ source2/
#对比了test.sh、tmp.txt、find(程序)。

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

4.1 前面创建的source1和source2目录下的代码为素材,生成补丁文件

diff -Nuar source1/ source2/ > source.patch

4.2 使用patch命令为代码打补丁

ls
source1  source2  source.patchcat source.patch                #对比的文件有路径信息cd source1
patch  -p1 < ../source.patch

在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/InsxPDQ3.shtml

相关文章

【知识点】patch补丁文件格式

linux补丁文件格式 “补丁” 指的是文件之间一系列差异。 在原始文件的基础上进行修改后&#xff0c;然后根据所做的修改生成补丁文件&#xff08;使用diff命令&#xff09;。 一个持有原始文件的人&#xff0c;将该补丁打到原始文件上&#xff08;使用patch命令&#xff09…

Git 补丁— diff 和 patch 使用详解

Git 补丁— diff 和 patch 使用详解 1. diff 和 patch 的区别2. 生成patch2.1 git diff3. git format-patch 3. 应用patch4. 冲突解决题外话 1. diff 和 patch 的区别 Git 提供了两种补丁方案&#xff0c;一种是通过 git diff 生成的 .diff 文件&#xff0c;第二种是通过 git …

手把手教你使用patch-package给npm包打补丁

具体文档https://github.com/ds300/patch-package 一、背景 故事从日常团队协作开发展开&#xff0c;整个team使用react antd4搭建前端页面&#xff0c;在开发中我发现antd4.9.*版本的Input.TextArea组件存在一个bug&#xff0c;该bug表现为maxLength属性限制不符合预期&…

patch-package打补丁

如何修改node_modules源码&#xff1f; 首先&#xff0c;我们能想到的思路是直接修改第三方库的代码&#xff0c;不过这会带来团队协作的问题&#xff0c;你的改动需要同步到团队所有成员&#xff0c;比较麻烦。 好在&#xff0c;我们可以使用patch-package这个库来解决这类问题…

Git 打patch (打补丁)的使用

patch 的使用 一般是diff ,apply ,format-patch,am 1 生成patch git diff > test.patch 这个是打补丁(test.patch自己取的名字,这个命令可以看出没有指定修改的问题所以默认把所有修改的文件都打patch了,同时还需要注意,这里是本地修改的没有执行add缓存的) 如果想指定某…

linux基本功系列之fdisk命令实战

文章目录 前言一. fdisk命令介绍二. 语法格式及常用选项三. 参考案例3.1 列出每个分区的大小3.2 分区操作3.2.1 添加硬盘3.2.2 开启虚拟机并分区3.3.3 分区完成后进行格式化挂载 四 . 设置分区自动挂载 前言 大家好&#xff0c;又见面了&#xff0c;我是沐风晓月&#xff0c;本…

fdisk磁盘分区

fdisk磁盘分区 fdisk磁盘分区 fdisk磁盘分区文件系统类型fdisk分区过程 文件系统类型 EXT4 第四代扩展文件系统 存放数据 SWAP 交换文件系统 交换分区 fdisk fdisk 参数 fdisk -l 查看所有磁盘磁盘分区 fdisk命令 格式fdisk 磁盘设备 常用选项&#xff1a; m&#xff1a;查…

linux fdisk原理,fdisk详细剖析笔记

fdisk 简单使用 fdisk 工具原理就是修改磁盘的分区表&#xff0c;和分区信息。 查看帮助 #fdisk --help (1)磁盘列表 #fdisk -l (2)管理某个磁盘 #fdisk /dev/sdb 交互模式&#xff0c;可以直接m查看帮助信息&#xff0c;后面可以使用非交互模式&#xff0c;脚本自动格式化 磁盘…

Linux基础命令-fdisk管理磁盘分区表

文章目录 fdisk 命令介绍 命令格式 基本参数 1&#xff09;常用参数 2&#xff09;fdisk菜单操作说明 创建一个磁盘分区 1&#xff09;创建分区 2&#xff09;创建交换分区 参考实例 1&#xff09; 显示当前分区的信息 2&#xff09; 显示每个磁盘的分区信息 命令…

linux磁盘分区fdisk命令详解及云硬盘挂载实操

linux磁盘分区fdisk命令详解 1、什么是分区&#xff1f; 分区是将一个硬盘驱动器分成若干个逻辑驱动器&#xff0c;分区是把硬盘连续的区块当做一个独立的磁硬使用。分区表是一个硬盘分区的索引,分区的信息都会写进分区表。 2、为什么要有多个分区&#xff1f; 防止数据丢失…

linux磁盘挂载之fdisk

linux磁盘挂载&#xff0c;使用fdisk命令 fdisk可以支持2T以下的分区的挂载&#xff0c;如果分区大于2T需要使用parted工具 磁盘情况查看 fdisk -l 可以看到有两块物理盘 名称磁盘符号磁盘大小备注Disk/dev/sda214.7G已分区Disk/dev/sdb1073.7G未分区 如果disk中有Device项…

fdisk分区命令

fdisk是Linux系统中最常用的分区工具&#xff0c;通过这个命令也可以查看系统中所有可用的分区&#xff0c;但是这个命令只支持MBR的分区表(这句话应该只对某些系统&#xff0c;CentOS7-1810适用&#xff0c;Debian9.5和openSUSE15应该已经支持GPT分区表&#xff0c;下面对fdis…

fdisk分区工具

fdisk分区工具 Linux磁盘分区步骤常见Linux分区方案 常见分区表MBR分区表使用fdisk进行分区fdisk手动创建主分区0查看磁盘详情1执行fdisk2选择新建分区3选择主分区4输入分区编号5输入起始扇区6输入结束扇区7查看分区表信息8保存分区9查看分区是否新增成功10同步分区信息11再次查…

linux中磁盘分区fdisk,管理磁盘分区之fdisk详解

Mozatr的不定期更新,处于学习阶段的Mozart,愿不断分享,不断进步。 此次分享一个重要的管理分区命令:fdisk ,我们一一阐述。 (一)分区 首先我们了解下什么是分区,分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁盘使用。分区表是一个…

一天一个 Linux 命令(26):fdisk 命令

本文为joshua317原创文章,转载请注明&#xff1a;转载自joshua317博客 一天一个 Linux 命令&#xff08;26&#xff09;&#xff1a;fdisk 命令 - joshua317的博客 一、简介 Linux里的fdisk&#xff08;英文全称&#xff1a;"Partition table manipulator for Linux&quo…

Linux命令之磁盘分区fdisk

概述 fdisk 命令可以查看磁盘分区情况和为磁盘进行分区。分区类似于让一个大房子用墙壁按照功能划分为卧室、厕所、厨房、阳台等。 注&#xff1a;物理硬盘可以分为一个或多个逻辑磁盘&#xff0c;称之为分区。但不要在当前的硬盘上尝试该命令&#xff0c;一定要再找一块新磁盘…

UNetVNet

Unet论文地址&#xff1a;https://arxiv.org/abs/1505.04597 Vnet论文地址&#xff1a;http://campar.in.tum.de/pub/milletari2016Vnet/milletari2016Vnet.pdf UNet被广泛应用于医学图像处理&#xff0c;encoder下采样4次&#xff0c;一共下采样16倍&#xff0c;对称地&#…

黑科技VNET——最好用的Android抓包神器

VNET是Android平台下功能最强大的网络抓包工具&#xff0c;支持HTTP&HTTPS&#xff0c;TCP&UDP&#xff0c;IPv6&IPv4&#xff0c;多终端显示&#xff0c;功能十分的强大。

[Azure - VNet] 解决办法:Azure P2S VNet无法建立网络连接。“parameter is incorrect“ (Error 87 参数错误)

问题描述&#xff1a; 在一台新服务器&#xff0c;尝试连接Azure的时候出现了如下错误&#xff0c;这台机器是一台新Server Win10配置。 使用Azure的P2S VPN连接时候出现参数错误87如下&#xff1a; “parameter is incorrect” (Error 87) 原因分析&#xff1a; 当尝试在IP…

安卓 VNET 抓取 快手极速版cookie 教程

请根据个人系统设置进行证书安装操作 图可以参考 下载抓包文件base.apk - 蓝奏云 文字描述&#xff1a; 打开 VNET>点击右下角 ▶ 保存 CA.pem 证书> 打开手机系统设置搜索 证书 >点击安装刚刚保存的 CA.pem > 返回 VNET > 点击 菜单 选择 添加应用 > …