Linux:Patch补丁、Diff使用

what的问题

diff命令,记录两个文件的差别,通过diff得到一个patch文件,也应用patch到另外一个文件,通过patch命令

diff and patch are intended to be used on text files.

why的问题

Reason 1: diff can be useful by itself to see what has changed between files, even if you never use patch.

Reason 2: Sometimes you can get patches from third parties and apply them to your files. This can be beneficial in cases when the files being patched are large, but the number of changes is relatively small: transferring a patch file is more efficient than transferring the entire file.

Reason 3: You can apply patches to files that don't perfectly match the original file used in diff.

Diff命令

diff [options] [original filename] [changed filename]
[root@localhost patch_diff]# diff hello1 hello2
2c2
< hello
---
> h9ello
4c4
< lll
---
> ll0l

[root@localhost patch_diff]# diff -u  hello1 hello2
--- hello1	2024-03-25 22:36:35.270690767 +0800
+++ hello2	2024-03-25 22:38:45.174768675 +0800
@@ -1,5 +1,6 @@
 
-hello
+h9ello
 world
-lll
+ll0l
 llll
+gap
[root@localhost patch_diff]# diff -y hello1 hello2

hello							      |	h9ello
world								world
lll							      |	ll0l
llll								llll
							      >	gap
OptionDescription
-NIgnores absent files
-r

Recursively executes diff through a directory. Used to compare multiple files at once. Note: this is not the same as -R, which is a patch option

一次性比较多个文件

-uDisplays output in an easier to read format. This may remove some information, such as context lines.
-yForces output to display differences side by side.

阅读结果:

LetterMeaning
cContent was replaced
aContent was added or appended
dContent was deleted

上面表示,11和12行被第替换为了第二个文件的11行

Patch命令

patch is a command that takes the output from the diff and puts it into a file. Then, it can take the filed output and overwrite another file with with the changes. For example, a common use is to use the patch to transfer changes from the changed file to the original file, thus making them identical. While this can also be accomplished by copy/pasting the updated file into the original file, patch is much faster and efficient.

作用:

1、将文件的改变应用到原始文件,使得两个文件相同;

2、复制粘贴更新的文件到原文件;

-bCreates a backup of the original file
-iForces the command to read the patch from the .patch file instead of from standard input
-p[#]Instructs the command to strip # number of slashes from the filepath to the filename. You’ll see in most of our examples, we use -p0 so that no slashes are stripped away
-RReverses the previous patch
-sRuns the command silently. It will only show process if there are errors
[root@localhost patch_diff]# diff -u hello1 hello2 > patchfile.patch
[root@localhost patch_diff]# cat patchfile.patch 
--- hello1	2024-03-25 22:36:35.270690767 +0800
+++ hello2	2024-03-25 22:38:45.174768675 +0800
@@ -1,5 +1,6 @@
 
-hello
+h9ello
 world
-lll
+ll0l
 llll
+gap

Overwrite文件的改变,hello1和hello2一样了

[root@localhost patch_diff]# patch hello1 patchfile.patch
patching file hello1
[root@localhost patch_diff]# cat hello
cat: hello: 没有那个文件或目录
[root@localhost patch_diff]# cat hello1

h9ello
world
ll0l
llll
gap

回滚patch

patch -p0 -R -i patchfile.patch

您提供的命令是用于Linux系统中的补丁应用命令。这个命令使用`patch`程序来应用一个补丁文件(在您的例子中是`patchfile.patch`)到现有的文件中。下面是这个命令的详细解释:

  • - `patch`: 这是执行补丁操作的命令本身。
  • - `-p0`: 这个选项告诉`patch`程序在应用补丁时不剥离(strip)任何前导目录。通常,补丁文件会包含相对路径,`-p0`意味着不会对这些路径进行任何修改。
  • - `-R`: 这个选项指示`patch`程序反向应用补丁。这通常用于撤销补丁所做的更改。
  • - `-i`: 这个选项后面跟着的是补丁文件的名字,`patch`程序会读取这个文件来应用或撤销更改。
  • - `patchfile.patch`: 这是补丁文件的名称,`patch`程序将根据这个文件来修改目标文件。

所以,如果您在一个Linux环境中执行这个命令,它将尝试反向应用(撤销)`patchfile.patch`中包含的更改。如果您是想要正常应用补丁,而不是撤销,那么您应该去掉`-R`选项。如果您是想要应用补丁,命令应该是这样的:

```bash
patch -p0 -i patchfile.patch
```

请确保您在正确的目录中执行这个命令,且`patchfile.patch`文件存在于当前目录或者您提供了正确的路径。同时,您需要有适当的权限来修改目标文件。

[root@localhost patch_diff]# diff -p2 hello1_bak hello2_bak 
*** hello1_bak	2024-03-25 22:54:55.104445692 +0800
--- hello2_bak	2024-03-25 22:54:50.144448378 +0800
***************
*** 1,5 ****
  
! hello
  world
! lll
  llll
--- 1,6 ----
  
! h9ello
  world
! ll0l
  llll
+ gap


如果你想严格指定是 应用补丁 可以使用下面命令(就是增加N参数):

# patch -Np0 < foo.patch

如果你想严格指定是 还原补丁 可以使用下面命令(就是增加R参数):

# patch -Rp0 < foo.patch

命令 `diff -Naur old new > foo.patch` 是一个在类 Unix 系统中使用的命令行工具,用于生成一个补丁文件,该文件包含了两个目录或文件之间的差异。这个命令的各个部分具体含义如下:

- `diff`: 这是用来比较文件或目录差异的命令。

- `-N`: 这个选项告诉 `diff`,如果新文件(new)在比较中不存在,应该将其视为空文件,而不是报错。这在生成补丁时很有用,因为你可能想要更新或添加新文件。

- `-a`: 这个选项表示 "all",它告诉 `diff` 以 ASCII 格式输出结果,这样可以更好地显示二进制文件的差异(如果有的话)。

- `-u`: 这个选项表示 "unified",它会以统一格式输出差异,这种格式在应用补丁时非常有用。每个差异都会被标记为特定的行号,以及是添加(+)还是删除(-)。

- `-r`: 这个选项表示 "recursive",它会递归地比较目录中的所有文件。

- `old`: 这是你要比较的旧目录或文件的路径。

- `new`: 这是你要比较的新目录或文件的路径。

- `>`: 这是重定向操作符,它将命令的标准输出(stdout)重定向到一个文件中。

- `foo.patch`: 这是生成的补丁文件的名称。

综合起来,`diff -Naur old new > foo.patch` 命令会递归地比较 `old` 目录(或文件)和 `new` 目录(或文件)之间的差异,并将这些差异以统一格式输出到 `foo.patch` 文件中。这个补丁文件之后可以用 `patch` 命令应用到其他系统或环境中,以同步更新。

请注意,命令中的 `old` 和 `new` 应该是你想要比较的两个实体的路径。如果你想要比较的是文件而不是目录,那么这两个参数应该是文件的路径。如果你想要比较的是目录,那么这两个参数应该是目录的路径,并且你可能需要确保你在正确的父目录下执行命令。

实际问题

// TODO 待补充

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/508201.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何实现多个PDF文件合并为一个PDF文件

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~ hi&#xff0c;我是白特。 最近看到一个功能&#xff0c;十分感兴趣&#xff0c;也就是我们要将多个文件服务器中的PDF文件合并为一个PDF文件并以此进行下载打印操作。 那么直接让我们一起看下它的实现思路吧。 …

OpenHarmony实战:硬件适配之HCS应用

一、HCS 配置管理 HCS(HDF Configuration Source)是 HDF 驱动框架的配置描述参数文件&#xff0c;内容以 Key-Value 为主要形式。它实现了配置代码与驱动代码解耦&#xff0c;便于开发者进行配置管理。 HC-GEN(HDF Configuration Generator)是 HCS 配置转换工具&#xff0c;可…

Git、TortoiseGit、SVN、TortoiseSVN 的关系和区别

Git、TortoiseGit、SVN、TortoiseSVN 的关系和区别 &#xff08;二&#xff09;Git&#xff08;分布式版本控制系统&#xff09;:&#xff08;二&#xff09;SVN&#xff08;集中式版本控制系统&#xff09;&#xff08;三&#xff09;TortoiseGit一、下载安装 git二、安装过程…

“转行做程序员”很难?这里有4个建议

近几年来&#xff0c;传统行业多处于经济下行&#xff0c;加上互联网行业的赚钱效应&#xff0c;想要转行到这一行的人越来越多&#xff0c;其中程序员这个行业更是很多人梦寐以求的。 但另一方面&#xff0c;我们也发现&#xff0c;这些想要转行的同学们往往会遇到很多困扰。…

企业员工在线培训系统功能介绍

随着信息技术的飞速发展&#xff0c;企业员工培训方式正逐步从传统的面授转向灵活高效的在线培训。一个综合性的企业员工在线培训系统能够为员工提供多样化的学习资源、便捷的学习途径和有效的学习监督&#xff0c;以下是该系统的主要功能详细介绍&#xff1a; 1. 课程功能 线…

如何应对光模块故障,只需一条命令!

你们好&#xff0c;我的网工朋友。 是设备就有故障&#xff0c;光模块也不例外&#xff0c;而且很多项目的故障首先要排除光模块的问题。 像光模块型号选用是否正确&#xff1f; 使用的跳线是否正确&#xff1f; 交换机接口是否用匹配&#xff1f; ....各种各样的问题&…

MySQL中count(*) 和 count(1)区别

MySQL 中 count(*) 和 count(1) 的异同 count() 函数的基本原理 语法&#xff1a; COUNT(expr)其中&#xff1a; expr 可以是字段名、常量、表达式或星号 (*)。 用法&#xff1a; count() 函数用于统计满足特定条件的记录数量。它可以有以下几种用法&#xff1a; 1. 统计…

【带你了解下前端开发语言有那些】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

JavaEE初阶之线程安全(一)

目录 题外话 正题 1.线程调度是随机的 2.修改共享数据 知识点 线程同步机制 线程异步机制 举例说明 synchronized() 知识点 举例说明 举例代码详解 死锁 举个例子: 代码 小结 题外话 这两天忽冷忽热的感冒了,昨天状态特别不好断更了一天,今天继续加油! 我会把…

【RT_Thread】---stm32f407zgt6使用env配置工程

用rt_thread env配置工程 1. git rt_thread 源码 2.找到对应芯片厂家扳机支持包 3 重新命名一个自己项目的工程 4 打开env 配置驱动 具体参考官方&#xff1a;Env 用户手册 (rt-thread.org) 5 修改路径为英文 6 修改完boad init 就应该可以用了(还有系统时钟不然会有问题)…

基于stm32的h5的spi屏幕调试

基于stm32的h5的spi屏幕调试 本文目标&#xff1a;基于stm32的基础实验 按照本文的描述&#xff0c;应该可以跑通实验并举一反三。 先决条件&#xff1a;装有编译和集成的开发环境&#xff0c;比如&#xff1a;Keil uVision5、STM32CubeMX 使用外设&#xff1a;GPIO、SPI …

Redis中的复制功能(一)

复制 概述 在Redis中&#xff0c;用户可以通过执行SLAVEOF命令或者设置slaveof选项&#xff0c;让一个服务器去复制(replicate)另一个服务器&#xff0c;我们称呼被复制的服务器为主服务器(master)&#xff0c;而对主服务器进行复制的服务器则被称为从服务器(slave),如图所示…

Python 全栈体系【四阶】(十八)

第五章 深度学习 一、基本理论 4. 神经网络的改进 4.1 神经网络的局限 全连接神经网络的局限&#xff08;一&#xff09; 未考虑数据的“形状”&#xff0c;会破坏数据空间结构。例如&#xff0c;输入数据是图像时&#xff0c;图像通常是高长通道方向上的 3 维形状。但是&a…

基于springboot+vue实现的房源出租信息系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

Java学习之类和对象、内存底层

目录 表格结构和类结构 表格的动作和类的方法 与面向过程的区别 具体实现 对象和类的详解 类的定义 属性&#xff08;field 成员变量&#xff09; 方法 示例--编写简单的学生类 简单内存分析(理解面向对象) 构造方法(构造器 constructor) 声明格式&#xff1a; 四…

深入探究Shrio反序列化漏洞

Shrio反序列化漏洞 什么是shrio反序列化漏洞环境搭建漏洞判断rememberMe解密流程代码分析第一层解密第二层解密2.1层解密2.2层解密 exp 什么是shrio反序列化漏洞 Shiro是Apache的一个强大且易用的Java安全框架,用于执行身份验证、授权、密码和会话管理。使用 Shiro 易于理解的…

FittenChat:程序员写代码的最好辅助利器,没有之一

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师&#xff0c;大模型&#xff0c;爬虫、ACM算法 &#x1f492; 公众号&#xff…

如何评估基于指令微调的视觉语言模型的各项能力-MMBench论文解读

1. 传统基准的固有局限 VQAv2:视觉问题回答数据集,主要用于评估视觉理解与推理能力。COCO Caption:图像描述生成数据集,用于评估模型对图像内容的理解与描述能力。GQA:结合常识的视觉问题回答数据集。OK-VQA:需要外部知识的视觉问题回答数据集。TextVQA:图像中包含文本的…

Linux系统网络的实时性评估

目录 1.使用 cyclictest 测试系统实时性2.测试系统通信实时性2.1 PingPlotter2.2 使用 ping 测试通讯实时性 3. 使用 iperf 测试带宽4.网络性能测试 1.使用 cyclictest 测试系统实时性 安装cyclictest sudo apt-get update sudo apt-get install rt-testscyclictest -p 99 -i…

TS学习01 基本类型、编译选项、打包ts代码

TS学习 TypeScript00 概念01 开发环境搭建02 基本类型基本使用⭐类型 03 编译选项tsconfig.jsoncompilerOptions语法检查相关 04 webpack打包ts代码错误解决 05 babel TypeScript BV1Xy4y1v7S2学习笔记 00 概念 以 JavaScript 为基础构建的语言 一个 JavaScript 的超集 Type…