首页/系统/Linux 运维命令速查/场景:对比两份配置的差异
文本处理77 条

场景:对比两份配置的差异

巡检或发布前核对配置:小文件直接 diff -u;顺序不敏感的配置先排序再比;整目录用 rsync -n 干跑看清单。

Linux 运维命令速查系统更新于 2026-10-13

这个场景解决什么

配置对比在两个时刻最有用:发布前确认改动内容符合预期,以及巡检时核对多台机器的配置是否一致。小文件直接 diff 最直观;顺序不敏感的配置(规则列表、include 清单)先排序再比,能过滤掉纯粹的排列差异;整个目录用递归对比或干跑同步,得到的是一份可执行的文件级差异清单。

基本信息

场景对比两份配置、两台机器或两个目录的差异
工具组合diff 系列、sort 预处理、rsync 干跑、摘要比对
关键前提比对前统一行尾与字符集,否则满屏都是假差异
输出建议统一用统一格式(-u),便于评审与存档

典型使用场景

  • 发布评审:把新配置与线上版本对比,确认只改了预期的那几行
  • 多机一致性巡检:抽查若干台机器的同名配置是否一致
  • 故障复盘:对比故障前后的配置快照,判断是否有隐性改动
  • 迁移核对:迁移到新环境后确认配置项一条不落
  • 快速定位差异文件:用摘要比对先找出内容不同的文件,再逐个查看

文件与远程对比

文件与远程对比
diff -u app.conf app.conf.new | less
ssh web1 'cat /etc/nginx/nginx.conf' | diff -u /etc/nginx/nginx.conf - | less
diff -y --width=160 a.conf b.conf | grep -n '|' | head   # 并排视图
diff -q -r /etc/app /data/backup/app                      # 只报哪些文件不同
diff -u --strip-trailing-cr win.conf linux.conf | head     # 忽略行尾差异

顺序不敏感与目录级对比

顺序不敏感与目录级对比
sort /etc/app/rules.conf > /tmp/a.txt
ssh web2 'sort /etc/app/rules.conf' > /tmp/b.txt
diff -u /tmp/a.txt /tmp/b.txt
diff -u <(sort a.conf) <(sort b.conf) | head        # 进程替换,少写临时文件
rsync -navc /etc/app/ web2:/etc/app/                # -n 只看不写,-c 按内容校验
find /etc/app -type f -exec sha256sum {} + | sort > /tmp/h1.txt   # 摘要清单比对

diff 常用选项

选项作用使用建议
-u统一格式输出评审与存档的首选格式
-y并排显示人工快速扫差异
-q只报告是否不同批量筛查时用
-r递归比较目录整目录对比
-w / -b忽略空白差异格式美化导致的假差异
-i忽略大小写配置项大小写不规范时
--strip-trailing-cr忽略行尾回车跨平台文件对比必备
排序后对比会丢掉顺序信息。配置顺序敏感(路由规则、include 顺序)时,先做原始对比,再做排序对比,两步结合才能同时看到「有差异」与「差异是否只是顺序」。
比对前先对齐行尾与字符集,否则 Windows 行尾与 UTF-8 之外编码会产生大量假差异,把真正的改动淹没掉。

易错点

  • 目录级对比直接全量按内容校验:大目录会跑很久,日常巡检用快速算法或摘要清单即可
  • 忽略行尾与字符集差异:假差异会掩盖真实改动,跨平台文件先转换再比
  • 用排序对比替代原始对比:顺序敏感配置的改动会被掩盖掉
  • 对生产配置做对比时直接覆盖:对比是只读操作,任何写入动作都要单独评估

数据来源与参考

  • man 1 diff
  • man 1 rsync

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌