linux patch命令

 patch指令让用户利用补丁文件来修改,更新原始文件,达到升级原始文件功能的目的。linux内核的升级方式也是采用这种。

1、生成补丁文件:

我们通过diff命令来生成补丁文件,diff -Naur a.txt b.txt

首先我们来看两个文件:a.txt,b.txt

$ vim -O a.txt b.txt 

sadfasdfas                            |sadfasdfas
1212                                  |0000
                                      |1212
hello hadoop                          |
openresty is very good                |hello java
~                                     |openresty is very very good

通过执行diff -Naur命令生成补丁文件:

$ diff -Naur a.txt b.txt 
--- a.txt	2020-07-28 22:12:11.547358887 +0800
+++ b.txt	2020-07-28 21:34:30.379661137 +0800
@@ -1,5 +1,6 @@
 sadfasdfas
+0000
 1212
 
-hello hadoop
-openresty is very good
+hello java
+openresty is very very good

可以通过重定向命令,将diff的输出保存到文件,作为补丁文件。diff -Naur a.txt b.txt > 1.diff

2、打补丁:

1)自动打补丁:

有了补丁文件文件,我们可以通过patch命令来升级原始文件。

$ patch < 1.diff 
patching file a.txt

 这样,a.txt文件就打好了补丁。如果想撤销补丁则执行:diff -R < 1.diff

$ patch -R < 1.diff 
patching file a.txt

 :使用diff命令生成补丁文件时,参数后的第一个文件名(a.txt)是原始文件,生成的补丁文件(1.diff)也是针对原始文件做的diff,所以执行patch < 1.diff 时,就会自动将1.diff打进a.txt中。注意顺序不能高反了。

2)手动打补丁:

上面是正常情况下的自动打补丁。但还有一种情况,假设:b.txt 在 a.txt基础上做了一些修改,然后生成了1.diff补丁文件,与此同时,某个人也在a.txt上同样的某行上做了一些修改。这时,使用补丁文件对a.txt进行升级就有可能会失败,假设失败就需要手动打补丁。

失败原始:我们看补丁文件中,某行的修改上下都会有一些托衬内容,如果源文件对托衬内容也做了修改,而且修改的完全无法识别,这时补丁文件就无法识别,所以只能手工打了。

示例1:

还是上例,我们生成1.diff后,对a.txt首行字母s变成a,然后执行打补丁:

$ patch < 1.diff 
patching file a.txt
Hunk #1 succeeded at 1 with fuzz 1.
$ ll
total 16
-rw-r--r-- 1 root root 213 Jul 28 22:15 1.diff
-rw-r--r-- 1 root root  61 Jul 28 22:17 a.txt
-rw-r--r-- 1 root root  53 Jul 28 22:17 a.txt.orig
-rw-r--r-- 1 root root  61 Jul 28 21:34 b.txt

我们看虽然打成功了,但是多了一个a.txt.orig原始文件。而且会给出一个提示。

示例2:

还是上例回到最初状态,生成1.diff后,对a.txt首行、后两行做一个“恶魔”修改,执行打补丁命令:

$ patch < 1.diff 
patching file a.txt
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file a.txt.rej
$ ll
total 20
-rw-r--r-- 1 root root 213 Jul 28 22:15 1.diff
-rw-r--r-- 1 root root  62 Jul 28 22:18 a.txt
-rw-r--r-- 1 root root  62 Jul 28 22:18 a.txt.orig
-rw-r--r-- 1 root root 213 Jul 28 22:18 a.txt.rej
-rw-r--r-- 1 root root  61 Jul 28 21:34 b.txt

提示失败,生成了orig、rej两个文件。这是就需要手动打补丁了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值