linux patch 给文件打补丁,Linux补丁工具patch生成使用补丁用法示例
一、原理
diff比较两个文件或文件集合的差异,并记录下来,生成一个diff文件,这也是我们常说的patch文件,即补丁文件。
patch能将diff文件运用于 原来的两个集合之一,从而得到另一个集合。
举个例子来说文件A和文件B,经过diff之后生成了补丁文件C,那么着个过程相当于 A -B = C ,那么patch的过程就是B+C = A 或A-C =B。
因此我们只要能得到A, B, C三个文件中的任何两个,就能用diff和patch这对工具生成另外一个文件。
二、用法
1. diff的用法
diff后面可以接两个文件名或两个目录名。 如果是一个目录名加一个文件名,那么只作用在那么个目录下的同名文件。
如果是两个目录的话,作用于该目录下的所有文件,不递归。如果我们希望递归执行,需要使用-r参数。
命令diff A B >C ,一般A是原始文件,B是修改后的文件,C称为A的补丁文件。
不加任何参数生成的diff文件格式是一种简单的格式,这种格式只标出了不一样的行数和内容。我们需要一种更详细的格式,可以标识出不同之处的上下文环境,这样更有利于提高patch命令的识别能力。这个时候可以用-c开关。通常的参数为 -Nuar。
2. patch的用法
patch用于根据原文件和补丁文件生成目标文件。还是拿上个例子来说
patch A C 就能得到B, 这一步叫做对A打上了B的名字为C的补丁。
之一步之后,你的文件A就变成了文件B。如果你打完补丁之后想恢复到A怎么办呢?
patch -R B C 就可以重新还原到A了。
所以不用担心会失去A的问题。
其实patch在具体使用的时候是不用指定原文件的,因为补丁文件中都已经记载了原文件的路径和名称。 patch足够聪明可以认出来。但是有时候会有点小问题。比如一般对两个目录diff的时候可能已经包含了原目录的名字,但是我们打补丁的时候会进入到目 录中再使用patch,着个时候就需要你告诉 patch命令怎么处理补丁文件中的路径。可以利用-pn开关,告诉patch命令忽略的路径分隔符的个数。举例如下:
A文件在 DIR_A下,修改后的B文件在DIR_B下,一般DIR_A和DIR_B在同一级目录。我们为了对整个目录下的所有文件一次性diff,我们一般会到DIR_A和DIR_B的父目录下执行以下命令
复制代码代码如下:
diff -rc DIR_A DIR_B >C
这个时候补丁文件C中会记录了原始文件的路径为 DIR_A/A
现在另一个用户得到了A文件和C文件,其中A文件所在的目录也是DIR_A。 一般,他会比较喜欢在DIR_A目录下面进行patch操作,它会执行
复制代码代码如下:
patch
但是这个时候patch分析C文件中的记录,认为原始文件是 DIR_A/A,但实际上是./A,此时patch会找不到原始文件。为了避免这种情况我们可以使用-p1参数如下
复制代码代码如下:
patch -p1
此时,patch会忽略掉第1个”/”之前的内容,认为原始文件是 ./A,这样就正确了。
最后有以下几点注意:
1. 一次打多个patch的话,一般这些patch有先后顺序,得按次序打才行。
2. 在patch之前不要对原文件进行任何修改
3. 如果patch中记录的原始文件和你得到的原始文件版本不匹配(很容易出现),那么你可以尝试使用patch, 如果幸运的话,可以成功。大部分情况下,会有不匹配的情况,此时patch会生成rej文件,记录失败的地方,你可以手工修改。
三、举例
通常情况下,diff与patch一起使用。即使用patch调用diff文件。如下面这个例子:
有两个目录为old和new,old中有f1.c,f2.c;new中有f1.c,f3.c。现要将new补到old上。
复制代码代码如下:
[fsy@localhost ~]$ mkdir old new
[fsy@localhost ~]$ cd old
[fsy@localhost old]$ touch f1.c f2.c
###建立两个文件夹和old中的文件
[fsy@localhost old]$ echo 1 > f1.c
[fsy@localhost old]$ cat f1.c
1
[fsy@localhost old]$ echo 2 > f2.c
###在old的文件中写入内容
[fsy@localhost old]$ cd ../new
[fsy@localhost new]$ touch f1.c f3.c
[fsy@localhost new]$ echo new 1 > f1.c
[fsy@localhost new]$ cat f1.c
new 1
[fsy@localhost new]$ echo 3 > f3.c
###建立new文件并写入内容
[fsy@localhost new]$ cd ..
[fsy@localhost ~]$ diff -Nuar old new >dir.diff
[fsy@localhost ~]$ cat dir.diff
diff -Nuar ./old/f1.c ./new/f1.c
--- old/f1.c 2011-08-30 12:32:21.553737454 +0800
+++ new/f1.c 2011-08-30 12:34:28.444148124 +0800
@@ -1 +1 @@
-1
+new 1
diff -Nuar ./old/f2.c ./new/f2.c
--- old/f2.c 2011-08-30 12:32:40.334207279 +0800
+++ new/f2.c 1970-01-01 08:00:00.000000000 +0800
@@ -1 +0,0 @@
-2
diff -Nuar ./old/f3.c ./new/f3.c
--- old/f3.c 1970-01-01 08:00:00.000000000 +0800
+++ new/f3.c 2011-08-30 12:34:42.331754293 +0800
@@ -0,0 +1 @@
+3
###可以清楚的看见两个文件夹下文件的不同之处
[fsy@localhost ~]$ cd old ..........................................必须进入到要打补丁的文件夹
[fsy@localhost old]$ patch -p1 < ../dir.diff
patching file old/f1.c
patching file old/f2.c
patching file old/f3.c
[fsy@localhost old]$ ls
f1.c f3.c
[fsy@localhost old]$ cat f1.c
new 1
[fsy@localhost old]$ cat f3.c
3
[fsy@localhost old]$
###f2.c被删除,f1.c和f3.c被更新。
linux patch 给文件打补丁,Linux补丁工具patch生成使用补丁用法示例相关推荐
- linux 几个文件夹作用,linux下每一个文件夹的作用.docx
目录结构及主要内容 "/"根冃录部分有以F子冃录: /usr 口录包含所有的命令.程序库.文档和英它文件.这些文件在正常操作中不会被改变的.这个目录也包含你的Linux 发行版本的 ...
- linux 穿件文件_关于Linux的25件事
linux 穿件文件 今天是Linux 25年的历史,这是有史以来最成功的软件. 在本周的LinuxCon上,Linux基金会的Jim Zemlin在主题演讲中表达了钦佩,赞美和激动,他说:" ...
- linux文件系统中文件基本权限,Linux文件权限基本属性图文详解
[概述] 在 Linux 系统中,不同的用户处于不同的地位,拥有不同的权限,为保护系统安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定. Linux 系统的每一个文 ...
- linux终端传文件,如何使用Linux FTP命令传输文件
FTP(文件传输协议)是一种标准的网络协议,用于在远程网络之间传输文件. 在本教程中,我们将通过实际示例向您展示如何使用Linux ftp命令. 在大多数情况下,您将使用桌面FTP客户端连接到远程服务 ...
- linux系统访问文件夹ls,Linux系统目录结构,文件类型以及ls、alias命令
一.Linux目录结构 登录系统之后,在当前命令窗口输入以下指令,/是Linux操作系统里最核心的一个目录,所有的文件和目录全部在它下面,所以称为"根目录": # ls / //列 ...
- linux的日记文件放哪,linux的日记文件在哪_网站服务器运转保护,linux
日记文件是特地用于纪录体系操纵事宜的纪录文件或文件鸠合,日记文件一般保留在/var/log目录下. 下面是几个主要的日记文件: /var/log/messages:包括团体体系信息,个中也包括体系启动 ...
- linux 定时传送文件,Windows与Linux之间定时文件传输
需要的朋友点击链接,这里有更详细的实现过程 一.获取WinSCP windows上装上Winscp程序,使用这个程序通过sftp协议把本地的文件传输到linux服务器上. winscp下载链接 二.编 ...
- 两个linux系统拷贝文件,两台linux文件拷贝
scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用ssh1,并且和ssh1使用相同的认证方式,提供相同的安全保证.与rcp不同的是,scp会要求你输入密码如果需要的话. 最简单的 ...
- linux给文件夹加密码,如何使用linux命令给文件上锁?linux命令文件加密方法
如何用linux命令给文件夹加密上锁呢?这是很多linux用户会碰到的问题,今天小编给大家介绍下linux命令给文件加密上锁的方法. 怎么用linux命令给自己的文件上锁 原因: 有些时候一个工程需要 ...
- linux批量对文件改名,在Linux中对文件进行批量重命名文件的方法
在Linux中,当你想要改变一个文件名,使用mv命令就好了.然而mv不能使用通配符重命名多个文件.可以用sed.awk或者与xargs结合使用来处理多个文件的情况.然而,这些命令行即繁琐又不友好,并且 ...
最新文章
- *:教育产品 规范销售
- CentOS6.4_X86_64 安装Drupal-7.31必须成功版!
- 网工路由基础(7)策略路由PBR
- Opengl超级宝典笔记——空间绘图画点
- 压箱底总结:流系统端到端一致性对比
- lua面向对象编程之点号与冒号的差异详细比较
- python数据库增删改查_python对数据库mysql的操作(增删改查)
- UVALive 7077 Little Zu Chongzhi's Triangles (有序序列和三角形的关系)
- P1879 [USACO06NOV]玉米田Corn Fields
- 麻省理工18年春软件构造课程阅读10“抽象数据类型”
- java如何实现web页面聊天_Java和websocket实现网页聊天室
- 全国计算机技术与软件专业资格(水平)考试报考指南
- Spring Cloud Gateway 没有链路信息,我 TM 人傻了(下)
- 安卓虚拟键盘_安卓这些年变化多惊人?那些老玩家才懂的回忆
- mac下 iterm+Zsh+Oh My Zsh+tmux 配置方案
- SOIC8E (EXPOSED PAD)
- 计算机视觉中头部姿态估计的研究综述--Head Pose Estimation in Computer Vision - A Survey
- ssm毕设项目酒店管理系统08281(java+VUE+Mybatis+Maven+Mysql+sprnig)
- 我国不同类别水泥对应的质量标准及物理性能
- C语言小白初试 7-1 求一元二次方程的根 (20 分)
热门文章
- i7 9750h和i5 9400参数对比哪个好
- ICEM: 合并混合网格
- OFDM子载波频率 知乎_频谱中射频干扰信号流化、分析与回放
- Win10极限精简版Tiny10发布:仅占C盘4.3GB
- 引导扇区维护工具linux,bootice引导扇区维护工具(bootice1.3.4新版及1.3.3经典版)...
- 超30亿人脸数据被泄露,美国AI公司遭科技巨头联合“封杀”
- linux rarcrack破解rar、zip和7z压缩包简单密码的工具
- 距离2022年研究生考试还有多少天?倒计时天数用便签设置
- VS2017好用的插件推荐
- VS Code插件离线安装教程