linux命令diff和patch实例(1)

 

diff命令最常用的是比较文件目录或者文件 然后输出到文本文件显示处理 一目了然

(1)diff -urN  文件夹1 文件夹2 > 文件夹1to文件夹2.patch

-urN 这个选项为组合选项

”-u”:表示在比较结果中输出上下文中一些相同的行,这有利于人工定位

“-r“:表示递归比较各个子目录下的文件

“-N“:将不存在的文件当作空文件

这种组合运用一般情况是工程项目制作补丁文件 完全照搬 效果最好

(2)diff -urNwB  文件1 文件2 > 文件1to文件2.patch

-urNwB 这个选项为组合选项

”-u”:表示在比较结果中输出上下文中一些相同的行,这有利于人工定位

“-r“:表示递归比较各个子目录下的文件

“-N“:将不存在的文件当作空文件

“-w“:忽略对空格的比较

“-B“:忽略对空行的比较

这种组合运用一般情况是单个文件制作补丁 效果最好

(3)diff -urNa linux-3.0.56_old linux-3.0.56_new > out.patch

 

-urNa 这个选项为组合选项

”-u”:表示在比较结果中输出上下文中一些相同的行,这有利于人工定位

“-r“:表示递归比较各个子目录下的文件

“-N“:将不存在的文件当作空文件

“-a“:所有的文件都视为文本文件来逐行比较,甚至他们似乎不是文本文件.

这种组合运用一般情况是linux内核制作补丁文件 效果还可以

这种情况 完全可以还用diff -urN  文件夹1 文件夹2 > 文件夹1to文件夹2.patch 替代

实例:

例如:假设Linux-2.6.22.6目录中是原始的内核,Linux-2.6.22.6_ok目录中是修改后的内核,可以使用以下命令制作补丁文件linux-2.6.22.6_ok.diff(原始目录在前,修改过的目录在后)

diff  –urN -w -B  linux-2.6.22.6  linux-2.6.22.6_ok  >  linux-2.6.22.6.diff

由于linux-2.6.22.6是标准的代码,可以从网上自由下载,要发布的linux-2.6.22.6_ok中所做的修改时,只需要提供补丁文件linux-2.6.22.6_ok.diff(它通常是很小的)

         patch 命令被用来打补丁----就是依据补丁文件来修改原始文件。比如对于上面的例子,可以使用以下命令将补丁文件linux-2.6.22.6_ok.diff 应用到原始目录linux-2.6.22.6上去。假设linux-2.6.22.6_ok.diff 和linux-2.6.22.6位于同一个目录下.

cd  linux-2.6.22.6

patch   -p1  <  ../linux-2.6.22.6_ok.diff

 patch 命令中最重要的选项是“-pn”: 补丁文件中指明了要修改的文件的路径,“-pn”表示忽略路径中第n个斜线之前的目录。

上面命令为制作补丁名

而patch为打补丁命令

首先简单列出安装补丁包和卸载补丁包的命令格式:

安装补丁包:patch  -p(n)  < [补丁包路径] patch_name

卸载补丁包:patch  -p(n)  -R  < [补丁包路径] patch_name

基本命令语法:
  patch [-R] {-p(n)} [--dry-run] < patch_file_name
  p:为path的缩写。
  n:指将patch文件中的path第n条’/’及其左边部分取消。
  -R:卸载patch包。
  --dry-run:尝试patch软件,并不真正修改软件。

patch,是打补丁的命令,有很多用法,见帮助#man patch
patch -px     (“p”指的是路径,后面的数字x表示去掉路径的第几部分)

-p Number     设置路径名的剥离数目,它控制如何处理在补丁文件中找到的路径名称(e.g.:--- old/uClinux-dist/linux-2.4.x/arch/armnommu/config.in)。如果将需打补丁的文件(.uClinux-dist/linux-2.4.x/arch/armnommu/config.in )保留在与补丁文件中所指定的不同路径中(old/uClinux-dist/linux-2.4.x/arch/armnommu/config.in),此标志就有用。剥离数目指定了从路径名前去除多少个斜杠,同时去除所有中间的目录名。例如,假定补丁文件中指定要更新的文件: old/uClinux-dist/linux-2.4.x/arch/armnommu/config.in:

  • -p 0 留下未修改的完整路径名。
  • -p 1 除去前导斜杠,留下 uClinux-dist/linux-2.4.x/arch/armnommu/config.in。
  • -p 4 卸下四个斜杠和三个目录,留下armnommu/config.in。

常用命令为

 patch   -p0  <  x.diff

 patch   -p1  <  ../x.diff

 单个文件 
  diff –uN from-file to-file >to-file.patch       制作补丁
  patch –p0 < to-file.patch                          打补丁
  patch –RE –p0 < to-file.patch                  还原

  多个文件 
  diff –uNr from-docu to-docu >to-docu.patch 
  patch –p1 < to-docu.patch 
  patch –R –p1 

参考内容地址

1 https://www.cnblogs.com/zengkefu/p/7266913.html

2 https://blog.csdn.net/menghuanbeike/article/details/78741077

3 https://www.cnblogs.com/sky-heaven/p/4514099.html

4 https://mp.csdn.net/postedit

你可能感兴趣的:(linux命令)