• 第2章 Linux的文件管理(四)


    文档配套视频讲解链接地址

    1. 腾讯课堂视频链接地址 : 33_文件管理_文件比较与补丁

    8.6 文件比较与补丁

    1. diff 比较文件

    ​ diff命令来自于英文单词different的缩写,其功能是用于比较文件内容差异。如果有多个内容相近的文件,如何快速定位到不同内容所在位置?此时用diff命令就再合适不过了!

    **语法格式:**diff [参数] 文件1 文件2

    常用参数:

    -a逐行比较文本文件
    -b不检查空格字符的不同
    -W指定栏宽
    -x不比较选项中所指定的文件或目录
    -X将文件或目录类型存成文本文件
    -y以并列的方式显示文件的异同之处
    –brief仅判断两个文件是否不同
    –help查看帮助信息
    –left-column若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容
    –suppress-common-lines在使用-y参数时,仅显示不同之处

    参考实例

    linux@ubuntu:~/work$ ls
    99.c
    linux@ubuntu:~/work$ cp 99.c 100.c
    linux@ubuntu:~/work$ ls
    100.c  99.c
    linux@ubuntu:~/work$ diff 99.c 100.c   #判断2个文件是否相同, 相同没有输出, 不同会告诉不同之处 
    linux@ubuntu:~/work$ vi 100.c 
    linux@ubuntu:~/work$ diff 99.c 100.c   # 后面的文件比前面的文件 多(>) 还是少(<)
    11a12
    >         printf("\n");  # 100.c 比 99.c 多的内容
    12a14
    >     return 0;
    linux@ubuntu:~/work$ diff 100.c 99.c
    12d11
    <         printf("\n");   # 99.c 比 100.c 少的内容
    14d12
    <     return 0;
    linux@ubuntu:~/work$ diff -c 99.c 100.c    # 100.c 比 99.c 多(+) 少(-)
    *** 99.c	2022-08-02 11:02:02.482386000 +0800
    --- 100.c	2022-08-25 08:53:35.968734345 +0800
    ***************
    *** 9,14 ****
    --- 9,16 ----
                  printf("%d x %d = %-2d  ",j,i,i*j);
              }
              printf("\n");
    +         printf("\n");
          }
          return 0;
    +     return 0;
      }
    linux@ubuntu:~/work$ 
    linux@ubuntu:~/work$ diff -c 100.c 99.c   # 99.c 比 100.c 少(-)
    *** 100.c	2022-08-25 08:53:35.968734345 +0800
    --- 99.c	2022-08-02 11:02:02.482386000 +0800
    ***************
    *** 9,16 ****
                  printf("%d x %d = %-2d  ",j,i,i*j);
              }
              printf("\n");
    -         printf("\n");
          }
          return 0;
    -     return 0;
      }
    --- 9,14 ----
    linux@ubuntu:~/work$ 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    2. diff 生成补丁

    ​ diff 除了可以比较文件外, 也可以用于生成补丁文件

    diff  -uNr 1.1.c 1.2.c  >1.1_1.2.patch   # 生成补丁, 1.2.c是升级的版本, 1.1.c要升级的版本 
    
    • 1

    例如

    linux@ubuntu:~/work$ ls
    100.c  99.c
    linux@ubuntu:~/work$ vi 100.c 
    linux@ubuntu:~/work$ mv 99.c 1.1.c
    linux@ubuntu:~/work$ mv 100.c 1.2.c
    linux@ubuntu:~/work$ diff -uNr 1.1.c 1.2.c >1.1_1.2.patch
    linux@ubuntu:~/work$ cat 1.1_1.2.patch 
    --- 1.1.c	2022-08-02 11:02:02.482386000 +0800
    +++ 1.2.c	2022-08-25 09:05:51.270640423 +0800
    @@ -7,8 +7,11 @@
             for(int j=1;j<i+1;j++) // 控制列数 
             {
                 printf("%d x %d = %-2d  ",j,i,i*j);
    +            printf("%d x %d = %-2d  ",j,i,i*j);
             }
             printf("\n");
    +        printf("\n");
         }
         return 0;
    +    return 0;
     }
    linux@ubuntu:~/work$ 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    3. patch 打补丁

    ​ patch命令让用户利用设置修补文件的方式,修改,更新原始文件。倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行。如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一 。

    **语法格式:**patch [参数]

    patch -p0 <1.1_1.2.patch  # 1.1_1.2.patch 补丁包会自动找当前目录下的文件进行打补丁 
    # -p0 : 是在同级目录进行 , 主要是确认补丁的源文件在哪一个目录下 
    # -p1 : 是在子1级目录进行, 以此类推 
    
    • 1
    • 2
    • 3

    参考实例

    linux@ubuntu:~/work$ ls
    1.1_1.2.patch  1.1.c  1.2.c
    linux@ubuntu:~/work$ diff -c 1.1.c 1.2.c 
    *** 1.1.c	2022-08-25 09:14:04.399767049 +0800
    --- 1.2.c	2022-08-25 09:05:51.270640423 +0800
    ***************
    *** 7,14 ****
    --- 7,17 ----
              for(int j=1;j<i+1;j++) // 控制列数 
              {
                  printf("%d x %d = %-2d  ",j,i,i*j);
    +             printf("%d x %d = %-2d  ",j,i,i*j);
              }
              printf("\n");
    +         printf("\n");
          }
          return 0;
    +     return 0;
      }
    linux@ubuntu:~/work$ patch -p0 <1.1_1.2.patch 
    patching file 1.1.c
    linux@ubuntu:~/work$ diff -c 1.1.c 1.2.c 
    linux@ubuntu:~/work$ 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    【ESP32调试-快速入门】
    CODEFORCES Problem-1954A.Painting the Ribbon(好题,非常打开思维)
    【无标题】
    Trello与Notion的开源替代项目管理利器Focalboard本地安装与远程访问
    3D灌篮高手
    简述for in 和 for of 的区别
    Kafka生产者
    超级简单的SSM框架(全注解,源码+分析,看一眼就会)
    绘制散点图、曲线图、折线图和环形图失败, 设置迭代次数和进度无法保存图片
    ADO.NET 之sqlConnection 对象使用摘要
  • 原文地址:https://blog.csdn.net/shengli001842/article/details/127454381