在 .bashrc 末尾的登录横幅脚本: ✅ 登录自动打印 CPU、内存、负载、磁盘、开机时间、主机信息 ✅ 兼容 Ubuntu / Debian /openEuler/ CentOS / Oracle Linux ✅ 不依赖额外包(只靠 free、uptime、lscpu、df 等系统自带命令) ✅ 生产友好,色彩柔和,不刷屏,可一键关闭 ✅ 和你上一份 .bashrc 模板可以直接拼接在一起
注意:如果是 root 用户,信息读取权限更好;普通用户大部分信息也正常。
一、直接追加到~/.bashrc 的横幅代码
# ====================== 服务器登录横幅(基础监控)======================
# 开关:不想显示改成 BANNER_ENABLE=0
BANNER_ENABLE=1
if [[ ${BANNER_ENABLE} -eq 1 ]]; then
# 颜色定义
COLOR_GREEN="\033[32m"
COLOR_YELLOW="\033[33m"
COLOR_BLUE="\033[34m"
COLOR_RED="\033[31m"
COLOR_RESET="\033[0m"
# 主机名 & IP(优先内网ip)
HOSTNAME=$(hostname)
LOCAL_IP=$(hostname -I | awk '{print $1}')
# 负载、开机时长
LOAD_1=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}')
LOAD_5=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $2}')
LOAD_15=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $3}' | sed 's/,//')
UPTIME=$(uptime -p | sed 's/up //')
# CPU
CPU_CORE=$(lscpu | grep '^CPU(s):' | awk '{print $2}')
CPU_MODEL=$(lscpu | grep 'Model name' | cut -d: -f2 | xargs)
# 内存(单位 GB)
MEM_TOTAL=$(free -g | awk '/^Mem:/{print $2}')
MEM_USED=$(free -g | awk '/^Mem:/{print $3}')
MEM_FREE=$(free -g | awk '/^Mem:/{print $4}')
MEM_PERCENT=$(free | awk '/^Mem:/{printf "%.1f", $3/$2*100}')
# 根磁盘 /
ROOT_TOTAL=$(df -h / | awk 'NR==2{print $2}')
ROOT_USED=$(df -h / | awk 'NR==2{print $3}')
ROOT_AVAIL=$(df -h / | awk 'NR==2{print $4}')
ROOT_PERCENT=$(df -h / | awk 'NR==2{print $5}')
# 负载告警颜色判断
LOAD_COLOR=${COLOR_GREEN}
if (( $(echo "${LOAD_1} > ${CPU_CORE}" | bc -l) )); then
LOAD_COLOR=${COLOR_RED}
elif (( $(echo "${LOAD_1} > ${CPU_CORE*0.7}" | bc -l) )); then
LOAD_COLOR=${COLOR_YELLOW}
fi
# 内存告警颜色
MEM_COLOR=${COLOR_GREEN}
if (( $(echo "${MEM_PERCENT} > 85" | bc -l) )); then
MEM_COLOR=${COLOR_RED}
elif (( $(echo "${MEM_PERCENT} > 70" | bc -l) )); then
MEM_COLOR=${COLOR_YELLOW}
fi
cat << BANNER
${COLOR_BLUE}============================================================${COLOR_RESET}
🖥 Host: ${COLOR_GREEN}${HOSTNAME}${COLOR_RESET} IP: ${COLOR_GREEN}${LOCAL_IP}${COLOR_RESET}
⏱ Uptime: ${COLOR_GREEN}${UPTIME}${COLOR_RESET}
${COLOR_BLUE}------------------------------------------------------------${COLOR_RESET}
🧠 CPU: ${COLOR_GREEN}${CPU_CORE}核${COLOR_RESET} | ${CPU_MODEL}
📊 Load(1/5/15): ${LOAD_COLOR}${LOAD_1} ${LOAD_5} ${LOAD_15}${COLOR_RESET}
📈 Mem: ${MEM_COLOR}${MEM_USED}G / ${MEM_TOTAL}G (${MEM_PERCENT}%)${COLOR_RESET} Free: ${MEM_FREE}G
💾 Root /: ${COLOR_GREEN}${ROOT_USED}/${ROOT_TOTAL}${COLOR_RESET} Avail: ${ROOT_AVAIL} Used: ${ROOT_PERCENT}
${COLOR_BLUE}============================================================${COLOR_RESET}
BANNER
fi
# ======================================================================
二、生效命令
source ~/.bashrc
之后每次 ssh 登录这台机器,就自动打印横幅。
三、效果样例
============================================================
🖥 Host: app-01 IP: 10.0.0.12
⏱ Uptime: 12 days, 4 hours, 22 minutes
------------------------------------------------------------
🧠 CPU: 4核 | Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz
📊 Load(1/5/15): 0.32 0.45 0.41
📈 Mem: 6G / 16G (38.2%) Free: 9G
💾 Root /: 23G/100G Avail: 72G Used: 24%
============================================================
四、适配与避坑(生产重点)
openEuler / 银河麒麟 / Oracle Linux:
lscpu、free、uptime都自带,直接用WSL2:也可以跑,但是 uptime 是 WSL 内核启动时间,不是 Windows
最小化容器(alpine):没有
lscpu,这个脚本不适合 alpine想关闭横幅:修改第一行
BANNER_ENABLE=0,不用删代码多网卡机器:
hostname -I取第一个 IP,如果想要公网 IP 可以替换成:PUBLIC_IP=$(curl -s ifconfig.me)⚠️ 生产服务器尽量不要默认请求外网查公网 IP,会有依赖风险
五、可选增强(你按需加)
增加磁盘 IO 等待
iowait(需要mpstat,sysstat 包)增加 TCP 连接数、zombie 进程统计
增加时区、当前时间、登录用户
做成独立文件
~/.banner.sh,在.bashrc里source ~/.banner.sh,方便管理
本文原创作者:易君召,详见:https://www.yijunzhao.cc/about,转载请注明出处。
原文链接
欢迎访问