Linux-学习patch命令打补丁,diff命令制作补丁(3)

摘要:
“1”表示删除第一个//“˂”表示补丁文件的位置。//“../”表示返回上一个目录。因为补丁文件和原始文件位于同一目录中,为什么需要输入-p1?
  • patch:通过补丁文件,来对原文件打补丁
  • diff: 比较两个文件,然后生成一个补丁文件

1.patch用法

patch -p[剥离层级] <[补丁文件]

2.patch命令示例

cd u-boot-1.1.6/             //进入原文件目录      

patch -p1  <../u-boot-1.1.6_jz2440.patach   
//“p”    表示去掉补丁文件里路径的第几部分。"1",表示去掉第1个
//“<”    指补丁文件位置
//“../” 表示返回上一个目录,因为这补丁文件和原文件在同一目录下

为什么需要输入-p1?

如下图所示,可以看到补丁文件里,每个需要改的文件,都有u-boot-1.1.6目录,而我们之前已经cd进入了,所以需要输入-p1,去掉它

Linux-学习patch命令打补丁,diff命令制作补丁(3)第1张

3.patch文件内容补充

diff -urN u-boot-1.1.6/common/cmd_bootm.c u-boot-1.1.6_jz2440/common/cmd_bootm.c  //绿色代表原文件名以及文件地址,红色代表打上补丁后的新文件名以及地址
--- u-boot-1.1.6/common/cmd_bootm.c    2006-11-02 22:15:01.000000000 +0800
+++ u-boot-1.1.6_jz2440/common/cmd_bootm.c    2010-11-26 12:54:38.150155640 +0800
                                            //--- 对文件里代码删减     +++ 对文件里代码添加
@@ -318,5 +318,5 @@                         //-318,5 表示在原文件里第318行内有删减,接下来显示5段。+318,5同样类似
                                                   //第318行,第一段
    switch (hdr->ih_comp) {                        //第319行,第二段
     case IH_COMP_NONE:                            //第320行,第三段
-        if(ntohl(hdr->ih_load) == addr) {         //第321行,删减第四段
+        if(ntohl(hdr->ih_load) == data) {         //第322行,增加第五段

4.diff常用参数

  • -u: 表示在比较结果中输出上下文中一些相同的行,这有利于人工定位
  • -r: 表示递归比较各个子目录下的文件
  • -N“:将不存在的文件当作空文件
  • -B: 忽略对空行的比较

5.diff命令示例

 diff -urN   u-boot-2012.04.01   u-boot-2012.04.01_new > u-boot-2012.04.01_new.patch
             //u-boot-2012.04.01:原文件
             //u-boot-2012.04.01_new:修改后的新文件

当一个文件有多个补丁需要打,则使用for循环批处理命令

比如,在tmp/目录下打上../patches/目录下的所有补丁文件:

cd tmp/
for file in ../patches/*.patch; do patch -p1 < $file; done      

免责声明:文章转载自《Linux-学习patch命令打补丁,diff命令制作补丁(3)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇go get下载慢、安装goland【Python】爬取百度图片下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux| |对于UDP的学习

# 前序 UDP(用户数据报协议)没有连接的,是面向数据报的,是不可靠 # 套接字就是IP地址+端口号 IP地址:4字节 端口号:2字节,也就是说范围是0~65536 端口号分为 知名端口号 0--1023:http,ssh,ftp,telnet等一些协议端口号都是固定的,对于操作系统来说是不能对其进行分配的 一些固定的端口号 ssh服务器,使用22端口...

C#远程访问linux(ubuntu)或windows的mysql数据库

 1、远程访问数据库大概模型 2、mysql在win7、linux上如何设置:2.1、分配权限(linux和win7) 进行mysql命令行,进行分配权限、执行 GRANTALLPRIVILEGESON*.*TO'Lucy'@'192.168.1.102' IDENTIFIED BY'123'WITHGRANTOPTION; ALL PRIVILEGE...

Linux终端的几个常用快捷方式,记下!

一、初识linux的终端种类:本地、远程    查看本终端命令:     #tty 命令,看到当前所处的终端     #(w)who 命令,看到系统中所有登录的用户     其中,tty 终端为表示在本地命令行模式下打开的终端;pts/0,1,2,3 终端为虚拟终端,多为图形界面下打开的终端或者远程登录的终端                     (这个...

linux sed 批量替换字符串

比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做: sed -i "s/zhangsan/lisi/g" `grep zhangsan -rl /modules` 解释一下:-i 表示inplace edit,就地修改文件 -r 表示搜索子目录 -l 表示输出匹配的文件名 这个命令组合很强大,要注意备份文件。(1)...

CentOS 安装Chrome

1:运行A或B查看Linux版本   A、[root@linuxzgf ~]#file /sbin/init   /sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared...

(转载)linux中shell变量

(转载)http://blog.csdn.net/zahuopuboss/article/details/8633891 为使shell编程更有效,系统提供了一些shell变量。shell变量可以保存诸如路径名、文件名或者一个数字这样的变量名。shell将其中任何设置都看做文本字符串。有两种变量,本地和环境。严格地说可以有4种,但其余两种是只读的,可以认为...