直接 alias watch -d 不够用,因为 watch 默认剥离 ANSI 颜色序列,导致高亮失效;必须加 --color 参数透传颜色,且 alias 需用引号包裹完整命令避免解析错误。

为什么直接 alias watch -d 不够用
因为 watch 默认不启用颜色,即使命令本身支持(如 ls --color 或 top -c),watch 会剥离终端颜色控制序列。你看到的只是灰白文本,高亮差异也仅靠反色闪烁,根本没法区分 CPU、内存、磁盘等不同字段的语义变化。
必须加 --color 参数才能真高亮
CentOS/RHEL 7+ 和大多数现代发行版的 watch(procps-ng ≥ 3.3.12)已支持 --color(或简写 -c)。它不是让子命令“自己渲染颜色”,而是告诉 watch:别过滤 ANSI 转义码,原样透传给终端。
-
watch --color -d 'free -h'→ 内存数值变动时高亮,且free自带的绿色/红色单位(如G、M)正常显示 -
watch --color -n 3 'df -h / | grep -E "(Use%|/)$"'→ 使用率数字变红(如果grep --color=always已启用) - 没加
--color,哪怕grep --color=always也只会输出纯文本
alias 定义要包裹完整命令,避免 shell 提前解析
alias 本质是字符串替换,遇到管道、重定向、变量扩展时极易出错。错误写法:alias mem='watch -d free -h' —— 这实际执行的是 watch -d free,再把 -h 当作 watch 的参数丢掉,报错 watch: unknown option -- h。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 正确做法:用单引号包裹整个命令,强制作为单一参数传递:
alias mem="watch --color -d 'free -h'" - 监控多行混合输出(如 uptime + top 头部)必须用双引号套单引号:
alias cpu="watch --color -n 2 'uptime && echo \"---\" && top -bn1 | head -15'" - 避免在 alias 中写
$HOME或$(date):它们会在定义时求值,不是每次运行时求值
推荐一套开箱即用的 alias 监控包
把下面内容追加到 ~/.bashrc,然后 source ~/.bashrc:
alias dfh="watch --color -d 'df -h | grep -E \"(Use%|/)$\"'" alias mem="watch --color -d 'free -h'" alias iops="watch --color -n 3 'iostat -x 1 2 | tail -5'" alias net="watch --color -n 2 'ss -s; ss -tuln | wc -l | sed \"s/^/LISTEN: /\"'" alias load="watch --color -d 'uptime | sed \"s/.*load average: //\"'"
注意 iostat 需提前装 sysstat;ss 在老内核可能需换 netstat。这些 alias 全部启用 --color 和 -d,且规避了常见 shell 解析陷阱——真正能直接敲 mem 就看到带色高亮的内存变化,而不是先 debug 半小时。
终端配色是否生效,最终取决于你当前 terminal emulator 是否支持 ANSI 颜色(绝大多数都支持),以及 LS_COLORS 或 GREP_COLORS 环境变量是否被意外清空——这点比 alias 写法更隐蔽,容易忽略。

















