在linux系统中安装应用时,经常需要升级系统,而对比新旧文本配置文件的差异是运维必须做的事情。diff就是这样的命令,它能排查配置修改、核对日志差异、校验脚本变更,无需复杂配置,核心优势是能直观显示具体差异行,搭配场景化参数,能高效解决各类文本比对需求。
一.diff命令
diff是Linux自带的文本比对工具,作用是逐行对比两个文本文件,能显示差异细节(修改、删除、新增),仅支持纯文本文件(.txt、.conf、.yml等),不支持二进制文件。核心语法:
diff [参数] 文件名1 文件名2。
二.基础用法
1. 快速查看差异
#对比1.txt和2.txt,默认格式输出差异diff 1.txt 2.txt
适用场景:临时快速校验两个小文本是否有差异,适合日常快速排查。
2. 上下文格式
#-c参数:输出差异行上下文,清晰易读diff -c 1.txt 2.txt
适用场景:需要查看差异行周围内容,快速定位修改前后的上下文。
3.仅判断是否有差异
#-q参数:静默模式,仅提示是否有差异,无多余输出diff -q 1.txt 2.txt
三、5个运维高频场景
结合运维日常工作,以下场景覆盖配置、日志、脚本等核心需求。
场景1:排查配置文件修改差异
生产环境中,配置文件(如nginx.conf、application.yml)修改后,需确认修改内容是否正确,避免误改导致服务异常:
#对比修改前(备份)和修改后的配置文件,查看具体修改内容diff -c nginx.confbak nginx.conf
能够直观显示修改的具体行,清晰区分新增、删除、变更内容。
场景2:比对日志文件差异
排查服务异常时,常需比对不同时间段的日志文件,定位异常出现的位置:
#比对两个日志文件,忽略空格和空行差异,聚焦核心内容diff -cbB access1.log access.log
其中-c(上下文)、-b(忽略空格)、-B(忽略空行)组合,过滤日志中无关的格式差异,快速找到异常信息。
场景3:批量比对目录下的配置文件
多台机器部署相同服务时,需确认配置目录是否一致,避免因配置不同导致服务异常
#-r 递归比对两个目录下的所有文本文件,输出所有差异diff -r /etc/nginx /data/nginx
适用场景:同步多台机器配置后,批量校验配置一致性,快速排查配置不一致问题。
场景4:生成差异补丁
修改脚本、配置文件后,生成差异补丁,方便同步到其他机器或后续回滚:
#生成file1.txt到file2.txt的差异补丁(udiff格式)diff -u file1.txt file2.txt > file.diff#应用补丁(将file1.txt更新为file2.txt)patch file1.txt < file.diff
适用场景:批量同步配置修改、脚本更新,避免重复手动修改,提升效率。patch需要安装,
场景5:忽略大小写/空格,精准比对
比对配置文件时,常因大小写误写、多余空格运行失败,用参数过滤无关差异:
#-i忽略大小写,-b 忽略空格差异,组合使用更精准diff -ibc app.conf1 app.conf
适用场景:比对配置文件、脚本模板,避免格式干扰。
四、注意事项
•ddif不支持二进制文件:不能对比图片、压缩包、镜像,否则输出乱码,如果需要比对这类文件,需用dd if进行比对;
•diff旧文件新文件,顺序颠倒会导致差异输出反向,排查时易混淆;
•大文件慎用默认格式:几GB的超大日志,用默认格式比对会卡顿,建议搭配-q参数快速判断。
diff命令的核心价值的是可视化差异,尤其适合需要手动排查修改点的场景。
大家日常工作中都如何进行文本内容比较,是托到windows中比对还有更好的办法?欢迎评论区留言讨论。觉得本文有用,点赞➕转发。
#运维 #linux运维 #ddif文本比较