用一条 Shell 脚本给 Linux 开发环境做一次体检
为什么要做这件事
换一台新机器、或者进到一个别人留下的服务器,最常见的问题不是「不会写代码」,而是「不知道这台机器现在是什么状态」。Python 是哪个版本?工作目录在哪?磁盘还有多少?时区对不对?这些信息如果每次靠手敲五六条命令去确认,既慢又容易漏。
这篇短文给出一条可以直接落地的思路:写一个小的体检脚本,把常用检查项一次性打印出来,以后每换一个环境先跑一遍,几十秒就能看清底子。
脚本本身
把下面的内容保存成 check_env.sh,放在项目根目录或 ~/bin 下都可以。
#!/usr/bin/env bash
set -u
echo "===== 环境体检 ====="
echo "时间 : $(date '+%Y-%m-%d %H:%M:%S %Z')"
echo "主机 : $(hostname)"
echo "当前目录 : $(pwd)"
echo "系统 : $(uname -srm)"
if command -v python3 >/dev/null 2>&1; then
echo "Python : $(python3 --version 2>&1)"
else
echo "Python : 未安装"
fi
if command -v node >/dev/null 2>&1; then
echo "Node : $(node --version)"
else
echo "Node : 未安装"
fi
echo "磁盘 : $(df -h . | awk 'NR==2 {print $4" 可用 / "$2" 总量"}')"
echo "内存 : $(free -h 2>/dev/null | awk '/Mem/ {print $7" 可用 / "$2" 总量"}')"
echo "===================="
加执行权限后跑一次:
chmod +x check_env.sh
./check_env.sh
在我这边的一台 Linux 容器里,输出是这样的:
===== 环境体检 =====
时间 : 2026-11-06 01:07:30 CST
主机 : devspace
当前目录 : /root/workspace
系统 : Linux 6.1.0 x86_64
Python : Python 3.11.16
Node : v20.11.0
磁盘 : 38G 可用 / 50G 总量
内存 : 5.2Gi 可用 / 7.8Gi 总量
====================
几个容易踩的坑
第一,不要用 set -e。体检脚本的定位是「尽量把所有信息都打出来」,某一项命令不存在不应该让整个脚本提前退出。这里用 set -u,只对未定义变量报错,反而能帮你发现自己写错的变量名。
第二,命令存在性要先判断。python、node 这类工具在很多精简镜像里根本没有,直接调用会刷一屏 command not found,反而干扰阅读。用 command -v 判断一下,没有就明确打印「未安装」,信息更干净。
第三,把 2>&1 加上。python3 --version 在部分老版本里是往 stderr 输出的,不重定向就会在日志里丢掉。
第四,时间一定要带时区。服务器时区经常是 UTC,本地是东八区,两者差 8 小时。脚本里用 %Z 把时区名一起打出来,对日志排查很有用——很多「数据对不上」的问题,追到最后其实是时区。
再往前走一步
这个脚本可以很自然地接进日常流程:
- 放进 CI 的流水线第一步,构建日志开头就带上环境快照,出问题不用再去猜镜像里装了什么。
- 放进 Docker 镜像的 entrypoint,容器启动时打印一遍,排查「本地能跑、线上不能跑」时非常省事。
- 用 cron 每天写一份到文件,机器慢慢变化的过程就有据可查。
脚本本身不超过三十行,但它把「先看清环境,再动手」变成了一个不依赖记忆的动作。比起记住一堆零散命令,这更值得长期保留。
- 点赞
- 收藏
- 关注作者
评论(0)