Linux - Shell - diff

  1. 概述
    1. linux diff 命令
  2. 背景
    1. 一个 比较文本差异 的工具
    2. 老实说, 之前 git/gitlab 上比较代码差异, 我是有点懵逼的
    3. diff 命令, 可以作为理解这些东西的基础
      1. diff 命令很实用
        1. 支持多种比较对象
          1. 文本
          2. 目录
          3. 标准输入
          4. 今天只讲文本, 因为其他的还不会
    4. 学会了, 可以有很多场景, 稳赚不赔啊
      1. diff
      2. vimdiff
      3. git
      4. gitlab
      5. svn
  3. 环境
    1. os
      1. centos7
  4. 思路
    1. 基础的比较
      1. 命令怎么用
      2. 命令结果
    2. 慢慢的拓展
      1. 各个参数的使用
    3. 总结
      1. 参数

1. 基础: 最简命令与参数

  1. 概述
    1. 简述 diff 的基本思路
  2. 思路
    1. 两个参数
      1. 作为一个 用来比较 的命令, 通常会需要 两个对象
        1. 比如各种广告
          1. 植发前, 植发后, 效果一下, 就出来了
    2. 参照
      1. 找不同
        1. 比较的目的, 肯定是为了 找不同
        2. 这个还是比较简单, 只要把不同的地方圈出来, 就可以了
      2. 描述不同
        1. 如果想要比较清晰的描述不同, 那么就需要一个参照
          1. 植发广告的参照, 大家默认都是 植发前
            1. 你看那个秃子, 植发了之后, 多了多少头发
            2. 植发前, 就是基准
            3. 这样的结果, 就是描述起来, 会清晰很多
      3. diff
        1. 参数
          1. 文本1
            1. 参照
          2. 文本2
            1. 变化
              1. 以 文本1 为基础
              2. 所有的不同和变化, 都作为 文本1的变化 为准来描述
  3. 命令
    1. 格式

      # doc1 是基准
      # doc2 是相对 doc1 的变化
      > diff [-option] <doc1> <doc2>

2. 场景1: 两个文本一模一样

  1. 概述
    1. 场景, 没有变化
  2. 命令

    # 1. 假设文本叫 note
    > diff note note
  3. 结果
    1. 不会有任何输出
      1. 这是一个简单但又必须知道的场景
      2. 如果不信, 可以在 参数前加上 -y 的选项

3. 场景2: 变化 - 变化

  1. 概述
    1. 比较简单的变化
  2. 文本
    1. note1

      1
      2
      3
      4
      5
      6
      7
      8
      9
      0
    2. note2

      10
      2
      30
      40
      50
      6
      70
      71
      72
      8
      90
  3. 命令

    > diff note1 note2
  4. 结果

    # 1. 1c1: note1 的 第1行, 经过了 修改, 变成了 note2 的 第1行
    1c1
    # < 开头, 是 note1 的内容
    < 1
    # --- 华丽的分割线
    ---
    # > 开头, 是 note2 的内容
    > 10
    # 2. 3,5c3,5: note1 的 3到5行, 改成了 note2 的 3到5行
    3,5c3,5
    < 3
    < 4
    < 5
    ---
    > 30
    > 40
    > 50
    # 3. 7c7,9: note1 的 7 行, 改成了 note2 的 7到9行
    7c7,9
    < 7
    ---
    > 70
    > 71
    > 72
    # 4. 9,10c11: note1 的 9到10行, 改成了 note2 的 11行
    9,10c11
    < 9
    < 0
    ---
    > 90
    # 5. 还会有 左右 不对称 的 多对多, 我就不讲了, 大家应该能够理解

4. 场景3: 变化 - 添加

  1. 概述
    1. 稍微麻烦点的变化
    2. 主要是 不好理解
  2. 文本
    1. note1

      1
      2
      3
      4
      5
    2. note2

      1
      10
      2
      3
      4
      40
      41
      42
      5
      51
  3. 命令

    > diff note1 note2
  4. 结果

    # 为了变成 note2, note1 的 第1行 后面, 添加了内容, 对应 note2 的 第2行
    1a2
    # 为了变成 note2, note2 里添加的内容
    > 10
    # 为了变成 note2, note1 的 第4行 后面, 添加了内容, 对应 note2 的 第6到8行
    4a6,8
    > 40
    > 41
    > 42
    # 为了变成 note2, note1 的 第5行 后面, 添加了内容, 对应 note2 的 第10行
    5a10
    > 51

5. 场景4: 变化 - 删除

  1. 概述
    1. 稍微麻烦点的变化
    2. 主要是 不好理解
  2. 文本
    1. note1

      1
      10
      2
      3
      4
      40
      41
      42
      5
      51
    2. note2

      1
      2
      3
      4
      5
  3. 命令

    # 也可以直接用上一个场景的文件, 命令是 diff note2 note1
    > diff note1 note2
  4. 结果

    # 为了变成note2, note1 的 第2行 被删除了, 被删除的行, 本该在 note2 第1行 的后面
    2d1
    < 10
    # 为了变成note2, note1 的 第6到8行 被删除了, 被删除的行, 本该在 note2 第4行 的后面
    6,8d4
    < 40
    < 41
    < 42
    # 为了变成note2, note1 的 第10行 被删除了, 被删除的行, 本该在 note2 第5行 的后面
    10d5
    < 51

6. 场景5: 并列模式

  1. 概述
    1. 并列展示内容
  2. 文本
    1. 同 场景1
  3. 命令

    # 还可以加 选项 -W <宽度> 来调整宽度
    > diff -y note1 note2
  4. 结果

    # | 两边有不同
    1     | 10
    2       2
    3     | 30
    4     | 40
    5     | 50
    6       6
    7     | 70
    # > 只有 note2 有的内容
          > 71
          > 72
    8       8
    9     | 90
    # < 只有 note1 有的内容
    0     <

7. 场景6: -c 输出

  1. 概述
    1. 另一种 style, 但我不知道它叫什么
  2. 文本
    1. 同 场景1
  3. 命令

    > diff -c note1 note2
  4. 结果

    *** note1   2020-01-12 00:32:18.418000000 +0800
    --- note2   2020-01-12 00:32:24.255000000 +0800
    ***************
    *** 1,10 ****
    ! 1
      2
    ! 3
    ! 4
    ! 5
      6
    ! 7
      8
    ! 9
    ! 0
    --- 1,11 ----
    ! 10
      2
    ! 30
    ! 40
    ! 50
      6
    ! 70
    ! 71
    ! 72
      8
    ! 90

8. 场景7: -u 输出

  1. 概述
    1. 另一种 style, 但我不知道它叫什么
  2. 文本
    1. 同 场景1
  3. 命令

    > diff -u note1 note2
  4. 结果

    # 感觉并不是很友好的样子
    --- note1   2020-01-12 00:32:18.418000000 +0800
    +++ note2   2020-01-12 00:32:24.255000000 +0800
    @@ -1,10 +1,11 @@
    -1
    +10
     2
    -3
    -4
    -5
    +30
    +40
    +50
     6
    -7
    +70
    +71
    +72
     8
    -9
    -0
    +90

ps

  1. ref
    1. Linux diff command
    2. Linux命令之diff
  2. 后续
    1. git diff
    2. vimdiff
    3. 其他
  3. 感觉
    1. 其实 diff 的知识点不多
      1. 但是为啥我两句三句, 就扯了这么长一篇?
      2. 但愿能成功入门吧
上一篇:linux中zookeeper的安装与配置


下一篇:恭喜长征五号遥三运载火箭发射,浅谈编程语言在军事方面的运用!