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文件所在目录来进行目录删减了。不懂??

 

posted @ 2019-03-18 17:10  羊小羚  阅读(220)  评论(0编辑  收藏  举报