watch -d 可高亮终端输出的行级变化,需保持输出格式固定以避免误标;配合 md5sum、colordiff 或自定义脚本,实现文件修改监控与差异可视化。

watch 命令本身不支持高亮差异,但可以结合 diff、colordiff 或 git diff 等工具实现周期性检查 + 差异高亮效果。关键在于用 watch -d(或 --differences)触发视觉高亮,再配合脚本输出可比对内容。
用 watch -d 高亮变化的核心技巧
watch -d 会自动对比相邻两次输出,将新增/删除/变动的行用背景色标出(默认是反白)。它不比较文件内容,而是比较终端输出的文本变化——所以必须让脚本每次输出**结构一致、便于比对的结果**。
- 避免打印时间戳、随机数、进程 PID 等动态内容,否则整行都会被标为“变化”
- 推荐输出固定格式的摘要,例如:file1.md5: a1b2c3...、file2.size: 4096
- 使用 watch -d -n 5 表示每 5 秒执行一次并高亮变动
检查单个文件是否被修改(MD5 + watch -d)
适合监控配置文件、脚本等关键文本文件是否被意外改动:
watch -d -n 3 'echo "config.conf:"; md5sum /etc/config.conf | cut -d" " -f1'
执行后,只要 md5 值变了,那一行就会被高亮(因为整个字符串不同)。注意:-d 默认只高亮“行内变化”,若整行替换(如新旧 MD5 完全不同),watch 会把整行标为新增/删除 —— 这正是我们想要的。
对比两个文件差异并高亮(需 colordiff 支持)
如果想看到具体哪几行变了,不能只靠 watch -d,得用带颜色的 diff 工具:
- 先安装:sudo apt install colordiff(Debian/Ubuntu)或 sudo yum install colordiff(CentOS)
- 命令示例(每 10 秒检查 test1.txt 和 test2.txt 差异):
watch -n 10 'colordiff -u <(sort /tmp/test1.txt) <(sort /tmp/test2.txt) 2>/dev/null || echo "No difference"'
说明:
• <() 是进程替换,让 diff 像读文件一样读命令输出
• sort 保证顺序一致,避免因行序不同导致大量“假差异”
• 2>/dev/null 屏蔽 colordiff 的警告(如文件不存在)
• 若无差异,显示 “No difference”,避免 watch 报错退出
封装成可复用的检查脚本(推荐方式)
把逻辑写进脚本,watch 只负责调度,更清晰可控。例如创建 /usr/local/bin/check-conf.sh:
#!/bin/bash FILE="/etc/nginx/nginx.conf" echo "== Last modified: $(stat -c '%y' "$FILE" | cut -d' ' -f1,2) ==" echo "== MD5 checksum: $(md5sum "$FILE" | cut -d' ' -f1) ==" echo "== First 3 lines:" head -3 "$FILE" | sed 's/^/ /'
赋予执行权限:chmod +x /usr/local/bin/check-conf.sh
然后运行:watch -d -n 5 /usr/local/bin/check-conf.sh
这样每次只有真正变动的部分(如时间、MD5、首三行内容)会被高亮,信息量足且干扰少。


















