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