详解Linux patch命令参数及用法

2019-10-13 15:05:52丽君

在xx目录下创建补丁文件xx.patch,并查看

[King@Fedora xxx]$ cd ..
 [King@Fedora xx]$ diff -Naru xxx/xxx1 xxx/xxx2 > xx.patch
 [King@Fedora xx]$ cat xx.patch 
--- xxx/xxx1 2009-12-19 22:28:26.582959182 +0800
 +++ xxx/xxx2 2009-12-19 22:28:42.798928591 +0800
 @@ -1,2 +1,2 @@
 111111
-111111
 +222222

在x目录下创建补丁文件x.patch,并查看

[King@Fedora xx]$ cd ..
 [King@Fedora x]$ diff -Nu xx/xxx/xxx1 xx/xxx/xxx2 > x.patch
 [King@Fedora x]$ cat x.patch 
--- xx/xxx/xxx1 2009-12-19 22:28:26.582959182 +0800
 +++ xx/xxx/xxx2 2009-12-19 22:28:42.798928591 +0800
 @@ -1,2 +1,2 @@
 111111
-111111
 +222222

现将patch文件都拷贝到xxx目录下去。

[King@Fedora x]$ cp x.patch xx/xxx/
 [King@Fedora x]$ cp xx/xx.patch xx/xxx/

进入xxx目录开始实验

[King@Fedora x]$ cd xx/xxx
 [King@Fedora xxx]$ ls
 x.patch xx.patch xxx1 xxx2 xxx.patch

 [King@Fedora xxx]$ patch-p0< xxx.patch #用第二个的 补丁 修改 第一个文件
patching file xxx1
 [King@Fedora xxx]$ cat xxx1
 111111
 222222
 [King@Fedora xxx]$ patch -RE < xxx.patch #用第一个的 补丁 修改 第一个文件
patching file xxx1
 [King@Fedora xxx]$ cat xxx1
 111111
 111111

 [King@Fedora xxx]$ patch -p1 < xx.patch
patching file xxx1
 [King@Fedora xxx]$ cat xxx1
 111111
 222222
 [King@Fedora xxx]$ patch -RE < xxx.patch
 patching file xxx1
 [King@Fedora xxx]$ cat xxx1
 111111
 111111

 [King@Fedora xxx]$ patch -p2 < x.patch
patching file xxx1
 [King@Fedora xxx]$ cat xxx1
 111111
 222222
 [King@Fedora xxx]$ patch -RE < x.patch
 patching file xxx1
 [King@Fedora xxx]$ cat xxx1
 111111
 111111

------------------------------------------------------------

[King@Fedora xx]$ patch-p0 < xx.patch # 用第二个的 补丁 修改 第一个文件
patching file xxx1
 [King@Fedora xxx]$ cat xxx1
 111111
 222222
 [King@Fedora xxx]$ patch -RE < xxx.patch #用第一个的 补丁 修改 第一个文件
patching file xxx1
 [King@Fedora xxx]$ cat xxx1
 111111
 111111

 [King@Fedora xxx]$ patch -p1 < x.patch
patching file xxx1
 [King@Fedora xxx]$ cat xxx1
 111111
 222222
 [King@Fedora xxx]$ patch -RE < xxx.patch
 patching file xxx1
 [King@Fedora xxx]$ cat xxx1
 111111
 111111

--------------------------------------------------------------------------

[King@Fedora x]$ patch-p0< x.patch # 用第二个的 补丁 修改 第一个文件
patching file xxx1
 [King@Fedora xxx]$ cat xxx1
 111111
 222222
 [King@Fedora xxx]$ patch -RE < xxx.patch #用第一个的 补丁 修改 第一个文件
patching file xxx1
 [King@Fedora xxx]$ cat xxx1
 111111
 111111

这里唯一需要说明的是p0的含义,因为在x.patch补丁文件里的路径信息是这样的:
--- xx/xxx/xxx1   

p表示跳过几级目录,因为是在x目录下使用的patch命令,xx目录就在x目录下,所以不必跳过任何目录,而应该使用--- xx/xxx/xxx1   完整路径,所以此时使用的是p0。