Linux系统应用与设置(1):比较、生成补丁以及应用补丁(diff与patch指令)

1. 简述

        在我们应用Linux系统或基于Linux系统做一些软件应用开发时,经常会遇到需要将文件的改动记录下来,并且讲这些改动和差异应用到其他的Linux系统时,我们会用到diff和patch指令。

        在Linux中,diff和patch是两个非常有用的命令行工具,它们通常一起使用,用于比较文件差异和应用这些差异。这两个工具在软件开发、版本控制和系统管理中特别有用。

2. diff指令(生成补丁)

        diff命令用于比较两个文件的差异。它将显示两个文件之间的不同之处,并输出一个差异脚本。

        diff指令的语法如下。

 diff [options] file1 file2 

        其常用的选项如下。

-u:以统一格式输出差异,这是创建补丁文件的常用格式。

-r:递归地比较两个目录中的文件。

-c:以上下文格式输出差异。

        如果我们想要比较两个文件的差异,我们可以参考如下指令。

diff -u file1.txt file2.txt

        如果我们要比较的是文件夹,而且文件夹中存在一些文件和子目录,那么我们可以按照如下指令完成差异的比较。

diff -ru dir1 dir2

3. patch(打补丁)

        patch指令用于打补丁,即将diff生成的补丁应用到其他原始的文件中,是的打补丁后的文件和之前修改的文件相匹配。这一种场景经常用在发布一些内核文件以后,定期迭代、增删改查一些东西,无需再发布内核,只需要每次发布补丁即可。

        patch指令的语法如下。

patch [options] originalfile < patchfile

patch [options] -p[num] < patchfile

        常用的options如下,其他参数可参照文末附录:

-p<n>:指定路径剥离级别,表示去除路径中前面的 <n> 个目录名。通常,-p1 是最常用的选项,用于去除路径中的第一个目录名。   patch -p 后面是不能带负数 的。不使用 p 参数的时候,patch 命令会 忽略 任何目录,直接使用文件。

-i <补丁文件>:指定要应用的补丁文件。

-d <目录>:指定工作目录,用于指定补丁文件和源文件所在的目录。

        举个例子来说明,假设补丁文件中的路径为 d0/d1/d2/file.txt,使用不同的 -p 参数来打补丁的效果如下:

    patch -p0 < 补丁文件名

    补丁文件中的完整路径d0/d1/d2/file.txt将会被保留, file.txt 将被应用到当前工作目录下的d0/d1/d2/file.txt文件上。

    使用 -p1 参数:

    patch -p1 < 补丁文件名

    补丁文件中的路径d0/d1/d2/file.txt的第一个目录名d0将会被剥离,只剩下 d1/d2/file.txt。这样,file.txt 将被应用到当前工作目录下的d1/d2/file.txt文件上。

        应用补丁到文件,可以执行如下指令。

patch original.txt < patchfile.txt

        应用补丁到文件夹,可以参照如下指令。

patch -p1 < patchfile.txt

4. 附录

-b或--backup  备份每一个原始文件。 
-B<备份字首字符串>或--prefix=<备份字首字符串>  设置文件备份时,附加在文件名称前面的字首字符串,该字符串可以是路径名称。 
-c或--context  把修补数据解译成关联性的差异。 
-d<工作目录>或--directory=<工作目录>  设置工作目录。 
-D<标示符号>或--ifdef=<标示符号>  用指定的符号把改变的地方标示出来。 
-e或--ed  把修补数据解译成ed指令可用的叙述文件。 
-E或--remove-empty-files  若修补过后输出的文件其内容是一片空白,则移除该文件。 
-f或--force  此参数的效果和指定-t参数类似,但会假设修补数据的版本为新 版本。 
-F<监别列数>或--fuzz<监别列数>  设置监别列数的最大值。 
-g<控制数值>或--get=<控制数值>  设置以RSC或SCCS控制修补作业。 
-i<修补文件>或--input=<修补文件>  读取指定的修补问家你。 
-l或--ignore-whitespace  忽略修补数据与输入数据的跳格,空格字符。 
-n或--normal  把修补数据解译成一般性的差异。 
-N或--forward  忽略修补的数据较原始文件的版本更旧,或该版本的修补数据已使 用过。 
-o<输出文件>或--output=<输出文件>  设置输出文件的名称,修补过的文件会以该名称存放。 
-p<剥离层级>或--strip=<剥离层级>  设置欲剥离几层路径名称。 
-f<拒绝文件>或--reject-file=<拒绝文件>  设置保存拒绝修补相关信息的文件名称,预设的文件名称为.rej。 
-R或--reverse  假设修补数据是由新旧文件交换位置而产生。 
-s或--quiet或--silent  不显示指令执行过程,除非发生错误。 
-t或--batch  自动略过错误,不询问任何问题。 
-T或--set-time  此参数的效果和指定-Z参数类似,但以本地时间为主。 
-u或--unified  把修补数据解译成一致化的差异。 
-v或--version  显示版本信息。 
-V<备份方式>或--version-control=<备份方式>  用-b参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用-z参数变更,当使用-V参数指定不同备份方式时,也会产生不同字尾的备份字符串。
-Y<备份字首字符串>或--basename-prefix=--<备份字首字符串>  设置文件备份时,附加在文件基本名称开头的字首字符串。
-z<备份字尾字符串>或--suffix=<备份字尾字符串>  此参数的效果和指定-B参数类似,差别在于修补作业使用的路径与文件名若为src/linux/fs/super.c,加上backup/字符串后,文件super.c会备份于/src/linux/fs/backup目录里。 
-Z或--set-utc  把修补过的文件更改,存取时间设为UTC。 
--backup-if-mismatch  在修补数据不完全吻合,且没有刻意指定要备份文件时,才备份文件。 
--binary  以二进制模式读写数据,而不通过标准输出设备。 
--help  在线帮助。 
--nobackup-if-mismatch  在修补数据不完全吻合,且没有刻意指定要备份文件时,不要备份文件。 
--verbose  详细显示指令的执行过程。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络基础】深入理解TCP协议:协议段、可靠性、各种机制

文章目录 1. TCP协议段格式1.1. 如何解包 / 向上交付1.1.1. 交付1.1.2. 解包 1.2. 如何理解可靠性1.2.1. 确认应答机制&#xff08;ACK&#xff09;1.2.2. 序号 与 确认序号 2. TCP做到全双工的原因2.1. 16位窗口大小2.2. 6个标记位 3. 如何理解连接3.1 连接管理机制3.1.1. 三次…

44. UE5 RPG 初始化敌人的属性

在正常的游戏中&#xff0c;我们应该考虑如何去初始化角色属性&#xff0c;并且要给角色分好类型。比如&#xff0c;在我们游戏中&#xff0c;我们如何去初始化小兵的属性&#xff0c;并且还要实现小兵随着等级的增长而增加属性。而且就是小兵也有类型的区分&#xff0c;比如我…

【数组】Leetcode 26. 删除有序数组中的重复项【简单】

删除有序数组中的重复项 其他算法导航栏 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 …

【C++STL】String类的常用函数用法总结

String类 一&#xff1a;String类的初始化方式二&#xff1a;String类的访问方式三&#xff1a;String的大小和容量四&#xff1a;string的插入&#xff1a;push_back() 和 insert()五&#xff1a;string拼接字符串&#xff1a;append() & 操作符六&#xff1a; string的删…

PhpAdmin-getshell

PhpAdmin-getshell 通过未授权成功写入&#xff0c;然后getshell 路径&#xff1a;C:\phpstudy_pro\Extensions\MySQL5.7.26\ 写入木马&#xff1a; into写入文件&#xff1a; 使用需看要secure_file_priv的值。 当value为“null”时&#xff0c;不允许读取任意文件 当value为…

Android 文件传输

经常写adb命令传文件&#xff0c;结果发现Android studio有自带的文件管理器&#xff0c;可以上传下载文件。

高扬程消防水泵在火灾中的关键作用/恒峰智慧科技

在火灾这一无情的灾难面前&#xff0c;每一秒都至关重要。而在这一分一秒的较量中&#xff0c;高扬程消防水泵无疑扮演着举足轻重的角色。它不仅是灭火战斗的得力助手&#xff0c;更是保障人民生命财产安全的守护神。 高扬程消防水泵&#xff0c;顾名思义&#xff0c;其扬程远超…

Gson打印按照想要的key顺序

默认大家都知道这个吧&#xff1f; val gson GsonBuilder().setPrettyPrinting().create() log(gson.toJson(bean))它是用于将对象bean&#xff0c;转成json以后&#xff0c;能够比较漂亮的打印出json的结构。我常用的是如下4个函数。 //就是jsonStr&#xff0c;使用该函数来…

qt对话框功能介绍

1、颜色对话框 //方式一QColor color QColorDialog::getColor(Qt::red, this, QString::fromLocal8Bit("颜色对话框"),QColorDialog::ShowAlphaChannel);qDebug() <<"color:" <<color;//方式二QColorDialog dialog(Qt::red, this); // 创建对…

通过自然语言处理执行特定任务的AI Agents;大模型控制NPC执行一系列的动作;个人化的电子邮件助手Panza

✨ 1: OpenAgents 通过自然语言处理执行特定任务的AI代理 OpenAgents是一个开放平台&#xff0c;旨在使语言代理&#xff08;即通过自然语言处理执行特定任务的AI代理&#xff09;的使用和托管变得更加便捷和实用。它特别适合于日常生活中对数据分析、工具插件获取和网络浏览…

vue2编写主体页面

目录 一. 导入两张图片 二. 新建主体vue 三. 修改路由 1. 新增主体界面Main.vue的路由 2. 完整router/index.js代码如下: 在Vue 2中编写一个主体页面通常意味着创建一个包含导航栏、侧边栏、内容区域等的布局。以下是使用Vue 2和Element UI框架来构建一个简单的主体页面的…

Kalfka是如何保证消息消费的顺序性和一致性的

Kafka通过一系列机制来确保消息消费的顺序性和一致性。以下是一些关键的方法&#xff1a; 分区&#xff08;Partitions&#xff09;&#xff1a; Kafka中的每个主题&#xff08;Topic&#xff09;都可以被分割成多个分区。消息在发布时会被追加到特定的分区中&#xff0c;而在每…

2024年第二十一届 五一杯 (B题)大学生数学建模挑战赛 | 最大流问题,深度学习分析 | 数学建模完整代码解析

DeepVisionary 每日深度学习前沿科技推送&顶会论文&数学建模与科技信息前沿资讯分享&#xff0c;与你一起了解前沿科技知识&#xff01; 本次DeepVisionary带来的是五一杯的详细解读&#xff1a; 完整内容可以在文章末尾全文免费领取&阅读&#xff01; 第一个问题…

张大哥笔记:学什么都不如学赚钱

很多人总是这样认为&#xff1a;好好读书&#xff0c;考上好学校&#xff0c;将来可以找到一份不错的工作&#xff0c;这样的思想观念&#xff0c;可能会导致你一辈子都无法实现财富自由。 财富的多少&#xff0c;和你的努力程度没有直接关系。我们可以清楚看到那些每天辛苦劳动…

虚拟机软件:VMware VirtualBox Hyper-v

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 虚拟机软件是程序员必备的开发…

Leetcode—2739. 总行驶距离【简单】

2024每日刷题&#xff08;121&#xff09; Leetcode—2739. 总行驶距离 实现代码 class Solution { public:int distanceTraveled(int mainTank, int additionalTank) {int consume 0;int ans 0;while(mainTank ! 0) {mainTank--;consume;if(consume 5 && additio…

【20】JAVASE-网络编程【从零开始学JAVA】

Java零基础系列课程-JavaSE基础篇 Lecture&#xff1a;波哥 Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。…

python u是什么意思

u&#xff1a;表示unicode字符串&#xff0c;默认模式&#xff0c;里边的特殊字符会被识别。 作用&#xff1a;后面字符串以unicode格式进行编码&#xff0c;一般用在中文字符串前面&#xff0c;防止因为源码储存格式问题&#xff0c;导致再次使用时出现乱码。 用法&#xff…

人脸识别 人脸识别insightFace项目使用详解

人脸识别 人脸识别insightFace项目使用详解 recognition人脸识别模型Arcface(mxnet)训练项目地址 recognition人脸识别模型 注意:该模块是有深度学习框架mxnet实现,为了加速训练,需要GPU支持, Arcface(mxnet)训练 1、安装gpu版的MXNet,我的cuda版本是10.2 pip in…

【精选文献】JAG|基于时序Sentinel-1 SAR影像小农耕作区烟草空间分布制图

目录 文章简介 01 文章摘要 02 研究背景、目标及创新点 03 研究区域与数据集 04 研究方法 05 研究结果 06 研究讨论 07 研究结论 08 文章引用 文章简介 论文名称&#xff1a;Mapping tobacco planting areas in smallholder farmlands using Phenological-Spatial-Te…