zoukankan      html  css  js  c++  java
  • Linux命令 diff cmp patch

    diff: 以行为单位进行比对

    $ cat passwd | sed -e '4d' -e '6c no six line' > passwd.new

    1 $ cat -n passwd.new  
    2      1    root:x:0:0:root:/root:/bin/bash
    3      2    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    4      3    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    5      4    sync:x:4:65534:sync:/bin:/bin/sync
    6      5    no six line
    7      6    man:x:6:12:man:/var/cache/man:/usr/sbin/nologin

    $ diff passwd passwd.new
    4d3                                                                                # 左边第4行被删掉(d)了,基准是右边的第3行
    < sys:x:3:3:sys:/dev:/usr/sbin/nologin                           # 列出左边(<)文件中被删除的一行
    6c5                                                                                # 左边文件的第6行被替换为右边文件的第5行
    < games:x:5:60:games:/usr/games:/usr/sbin/nologin   # 左边文件第6行的内容
    ---
    > no six line                                                                   # 右边文件第5行的内容

    不要用diff 去比对两个完全不相干的文件,没意义。

    diff 也可以比对整个目录下的差异,

    cmp: 以字节为单位进行比对

    $ cmp passwd passwd.new
    passwd passwd.new 不同:第 120 字节,第 4 行  # 第一个发现的不同点在第4行第120字节处。

    cmp可以用来比对binary文件。

    patch: 该指令与diff 密不可分

    示例: 将旧文件(passwd)更新为新文件(passwd.new)

    1). 先制作补丁文件

    $ diff -Naur passwd passwd.new > passwd.patch

    2). 更新旧文件

    $ patch -pN < patch_file      <==更新

    $ patch -R -pN < patch_file <==还原

    $ patch -p0 < passwd.patch       # 更新

    $ patch -R -p0 < passwd.patch  # 还原

    使用'-p0'的原因,因为在比对新旧文件是在同一个目录下,因此不需要减去目录。如果是使用整体目录比对时,就得要依据建立patch文件所在目录来进行目录删减了。不懂??

  • 相关阅读:
    针对C#、VB.NET、VB6的WINDOWS API引用
    VBNET的一些特殊能力
    [模块]可以搜索内存中存在的PE结构
    将Excel和XML导入数据库
    VB.NET中使用List
    VBNET使用EXCEL常见操作
    Linux下的C编程实战之开辟平台搭建
    若何进步Linux桌面零碎的速度4
    Linux把持体系中若何布置Tomcat
    如何进步Linux桌面系统的速率1
  • 原文地址:https://www.cnblogs.com/yangxiaoling/p/10553367.html
Copyright © 2011-2022 走看看