小易说IT 小易说IT

bashrc增加输出服务器基础信息(CPU / 内存 / 负载)的登录横幅

在 .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%
============================================================

四、适配与避坑(生产重点)

  1. openEuler / 银河麒麟 / Oracle Linux:lscpu、free、uptime 都自带,直接用

  2. WSL2:也可以跑,但是 uptime 是 WSL 内核启动时间,不是 Windows

  3. 最小化容器(alpine):没有 lscpu,这个脚本不适合 alpine

  4. 想关闭横幅:修改第一行 BANNER_ENABLE=0,不用删代码

  5. 多网卡机器: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,转载请注明出处。

原文链接 https://www.yijunzhao.cc/archives/bashrc-login-banner-server-cpu-memory-load-info

欢迎访问 https://www.yijunzhao.cc/

https://www.yijunzhao.cc/