日常运维工作中,每次通过 SSH 登录服务器时,我们往往需要快速了解当前系统的运行状态:负载高不高?``内存是否充足?关键服务(如 Nginx、MySQL、Redis)是否正常运行?IP 地址是多少?
虽然可以通过手动执行 top、free、df、systemctl status 等命令逐一查看,但效率较低,尤其在管理多台服务器时体验更差。为此,我整理并优化了一个轻量级的 登录欢迎脚本(system-info.sh),部署后可在每次用户登录时自动显示关键系统信息,帮助运维人员快速掌握服务器状态。该脚本已在 CentOS 7/8、Rocky Linux、Ubuntu 等主流发行版上验证可用,无额外依赖,安全可靠。
编写脚本
以 root 用户登录系统,system-info.sh 在 kylin 系统下一已存在,可自定义脚本文件名。
注意:脚本复制粘贴进去,有可能会存在 windows 字符集、全角空格等问题。可参考文章进行转换:Linux Shell 脚本执行报错
sudo vi /etc/profile.d/system-info.sh
#!/bin/bash
# 获取内核版本
welcome=$(uname -r)
# 内存
memory_total=$(free -m | awk '/Mem:/ { print $2 }')
if [ "$memory_total" -gt 0 ]; then
memory_usage=$(free -m | awk '/Mem:/ { printf("%3.1f%%", $3/$2*100) }')
else
memory_usage="0.0%"
fi
# 交换内存
swap_total=$(free -m | awk '/Swap:/ { print $2 }')
if [ "$swap_total" -gt 0 ]; then
swap_mem=$(free -m | awk '/Swap:/ { printf("%3.1f%%", $3/$2*100) }')
else
swap_mem="0.0%"
fi
# 磁盘使用情况
usageof=$(df -h / | awk '/\// {print $(NF-1)}')
# 系统负载
load_average=$(awk '{print $1}' /proc/loadavg)
# 当前用户
whoiam=$(whoami)
# 时间
time_cur=$(date)
# 进程数
processes=$(ps aux | wc -l)
# 在线用户数
user_num=$(users | wc -w)
# IP地址
ip_pre=$(/sbin/ip a | grep inet | grep -v 127.0.0.1 | grep -v inet6 | awk '{print $2}' | head -1)
ip_address=${ip_pre%/*}
# 中间件检测
nginx_process=$(ps aux | grep -v grep | grep nginx)
java_count=$(ps aux | grep -v grep | grep -c java)
mysql_process=$(ps aux | grep -v grep | grep mysql)
redis_process=$(ps aux | grep -v grep | grep redis-server)
# 输出格式
bold=$(tput bold)
normal=$(tput sgr0)
yellow=$(tput setaf 3)
echo -e "\n"
echo -e "${bold}欢迎访问系统版本 $welcome${normal}\n"
echo -e "系统信息(当前时间:${bold}$time_cur${normal})\n"
echo -e "系统负载:\t${yellow}$load_average${normal}"
echo -e "进程数:\t$processes"
echo -e "内存使用:\t$memory_usage"
echo -e "交换内存使用:\t$swap_mem"
echo -e "磁盘使用:\t$usageof"
echo -e "IP地址:\t$ip_address"
echo -e "在线用户数:\t$user_num"
echo -e "中间件安装情况:\n"
if [ -n "$nginx_process" ]; then
echo -e "Nginx:\t\t已安装"
else
echo -e "Nginx:\t\t未发现"
fi
if [ "$java_count" -gt 0 ]; then
echo -e "Java:\t\t已安装(进程数:$java_count)"
else
echo -e "Java:\t\t未发现"
fi
if [ -n "$mysql_process" ]; then
echo -e "MySQL:\t\t已安装"
else
echo -e "MySQL:\t\t未发现"
fi
if [ -n "$redis_process" ]; then
echo -e "Redis:\t\t已安装"
else
echo -e "Redis:\t\t未发现"
fi
if [ "$whoiam" == "root" ]; then
echo -e "\n"
else
echo -e "要以管理员身份运行命令,请使用 sudo <command>"
fi
# 添加可执行权限
sudo chmod +x /etc/profile.d/system-info.sh
温馨提示:进入系统后,还可以通过调用此脚本实时查看:
sudo sh /etc/profile.d/system-info.sh