[linux]循序渐进学运维-基础命令篇-diff
写在前面: 博主是一名投身教培事业的标准八零后,叛逆而且追求*,昵称取自于苏轼的《水调歌头》中的“高处不胜寒”,时刻提醒自己要耐得住寂寞,受的了孤独,在技术的道路上,不畏艰难,勇往直前。 我已经将全部的linux运维体系发到了gitee上,https://gitee.com/gaosh08/LinuxFamily 欢迎star,投稿,交流。
文章目录
小手一抖,点赞走起
diff的基本语法及参数
diff的用法,diff后面直接加选项,主要用来逐行对比文件
参数:
- -<行数> 指定要显示多少行的文本。此参数必须与-c或-u参数一并使用。
- -a或–text diff预设只会逐行比较文本文件。
- -b或–ignore-space-change 不检查空格字符的不同。
- -B或–ignore-blank-lines 不检查空白行
- -c 显示全部内文,并标出不同之处。
- -H或–speed-large-files 比较大文件时,可加快速度。
- -i或–ignore-case 不检查大小写的不同。
- -u,-U<列数>或–unified=<列数> 以合并的方式来显示文件内容的不同。
- -v或–version 显示版本信息。
- -w或–ignore-all-space 忽略全部的空格字符。
- –help 显示帮助。
举栗子:
1. 比较两个文件
[aaa@qq.com ~]# diff passwd passwd1
2a3
> aaa
[aaa@qq.com ~]#
2. 并排格式输出
[aaa@qq.com ~]# diff passwd passwd1 -y -W 10
tc tc
my my
> aa
[aaa@qq.com ~]#
注: 这里的
-y表示并排显示
-W 指定行宽
"<"表示后面文件比前面文件少了1行内容
">"表示后面文件比前面文件多了1行内容
3. -u 以合并文件的方式显示不同
[aaa@qq.com ~]# diff -u passwd passwd1
--- passwd 2020-06-19 20:17:37.535217346 +0800
+++ passwd1 2020-06-19 20:17:57.605397654 +0800
@@ -1,2 +1,3 @@
tcpdump:x:72:72::/:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
+aaa
注:
—开头的是原始文件
+++开头的是目标文件
以-开头的是只出现在原始文件中的
以+开头的是只出现在目标文件中的
以空格 开始的行是在目标文件和原始文件中都出现的行
补充: 三个文本比较命令:
comm , diff, patch
comm: 比较相同的文本,特点是: 如果文本中有空格就无法识别
[aaa@qq.com ~]# cat a.txt
aaa
bbb
[aaa@qq.com ~]# cat b.txt
aaa
bbb
[aaa@qq.com ~]# comm a.txt b.txt
aaa (输出形同的文本)
bbb(输出不同的文本)
bbb
[aaa@qq.com ~]#
其实bbb是相同的,只是一个有空格,一个没有空格,会被当成不同来显示。
patch 补丁:
通常在更新几百万行的项目时,如果只有几行有变化,全部打包过来根本是不可能的,因为它太大了,而且全部拷过来也没有意义,最大的问题是人力难以对比。 这个时候我们可以用到patch
patch主要用于修补文件
举例:
创建两个文件
[aaa@qq.com ~]# cat a.txt
11111
11111
11111
11111
[aaa@qq.com ~]# cat b.txt
22222
11111
22222
11111
使用diff 创建补丁 b.txt.patch
[aaa@qq.com ~]# diff -uN a.txt b.txt > b.txt.patch
[aaa@qq.com ~]# cat b.txt.patch
--- a.txt 2020-06-19 20:54:54.115330192 +0800
+++ b.txt 2020-06-19 20:55:34.924697772 +0800
@@ -1,4 +1,5 @@
+22222
11111
+22222
11111
-11111
-11111
+
备注:
补丁头是分别由—/+++开头的两行,用来表示要打补丁的文件。—开头表示旧文件,+++开头表示新文件。
*diff命令会在补丁文件中记录这两个文件的首次创建时间,如下
— a.txt 2020-06-19 20:54:54.115330192 +0800
+++ b.txt 2020-06-19 20:55:34.924697772 +0800
接下来开始打补丁:
[aaa@qq.com ~]# patch -p0 < b.txt.patch
patching file a.txt
[aaa@qq.com ~]# cat a.txt
22222
11111
22222
11111
可以看到a.txt变得和b.txt一样了
我们也可以去除补丁
[aaa@qq.com ~]# patch -RE -p0 < b.txt.patch
patching file a.txt
[aaa@qq.com ~]# cat a.txt
11111
11111
11111
11111
[aaa@qq.com ~]#
可以看到又恢复到了原版本的a.txt
后记
学习Linux基础命令,最好的方法就是根据一个命令去联想类似的命令的使用方法,你会发现很多参数,虽然命令不同,但表示的意思基本相同。
计算机行业,无论是编程还是运维,都需要多练习,熟能生巧。
下一篇: 时令三阙——夏至、小暑、大暑