每次登录 Linux 服务器,我都会先看 CPU、内存和磁盘状态。这些信息很重要,但每次都手动敲命令去查,确实麻烦。尤其服务器一多,这种重复操作就特别费时间。
所以后来我干脆把它做成了自动化:一登录,系统就直接展示关键状态。今天分享两个我自己常用的开机检查脚本,配置不复杂,登录就能看,日常排查很方便。
这个脚本来自openEuler系统,我稍微优化了一下。它展示的信息不多,但够用:
优点是输出清爽,一屏就能看完,适合追求简洁的运维兄弟。
#/bin/bash# Copyright (c) [2019] Huawei Technologies Co., Ltd.# generic-release is licensed under the Mulan PSL v2.# Welcomewelcome=$(uname -r)# Memorymemory_total=$(cat /proc/meminfo | awk '/^MemTotal:/ {printf($2)}')memory_free=$(cat /proc/meminfo | awk '/^MemFree:/ { printf($2)}')buffers=$(cat /proc/meminfo | awk '/^Buffers:/ { printf($2)}')cached=$(cat /proc/meminfo | awk '/^Cached:/ { printf($2)}')sreclaimable=$(cat /proc/meminfo | awk '/^SReclaimable:/ { printf($2)}')swap_total=$(cat /proc/meminfo | awk '/^SwapTotal:/ { printf($2)}')swap_free=$(cat /proc/meminfo | awk '/^SwapFree:/ { printf($2)}')if [ $memory_total -gt 0 ]then memory_usage=`echo"scale=1; ($memory_total - $memory_free - $buffers - $cached - $sreclaimable) * 100.0 / $memory_total" |bc` memory_usage="${memory_usage}%"else memory_usage=0.0%fi# Swap memoryif [ $swap_total -gt 0 ]then swap_mem=`echo"scale=1; ($swap_total - $swap_free) * 100.0 / $swap_total" |bc` swap_mem="${swap_mem}%"else swap_mem=0.0%fi# Usageusageof=$(df -h / | awk '/\// {print $(NF-1)}')# System loadload_average=$(awk '{print $1}' /proc/loadavg)# WHO I AMwhoiam=$(whoami)# Timetime_cur=$(date)# Ip addressip_pre=""if [ -x "/sbin/ip" ]then ip_pre=$(/sbin/ip a | grep inet | grep -v "127.0.0.1" | grep -v inet6 | awk '{print $2}')fiecho -e "\n"echo -e "Welcome to $welcome\n"echo -e "System information as of time: \t$time_cur\n"echo -e "System load: \t\033[0;33;40m$load_average\033[0m"echo -e "Memory used: \t$memory_usage"echo -e "Swap used: \t$swap_mem"echo -e "Usage On: \t$usageof"for line in$ip_predo ip_address=${line%/*}echo -e "IP address: \t$ip_address"doneecho -e "Users online: \t$user_num"if [ "$whoiam" == "root" ]thenecho -e "\n"elseecho -e "To run a command as administrator(user \"root\"),use \"sudo <command>\"."fi保存为 system_info.sh,效果是这样的:

是不是很清爽?
如果你觉得上面的信息太少,这个脚本绝对适合你。
它能展示:
这个脚本信息量大,但经过我优化,输出依然清晰可读。
前提条件:需要安装 bc 命令
yum -y install bc完整脚本代码:
#!/bin/bashclearLogFileName=polling.$(date +%F-%T) EchoFormat=$(for (( i=0;i<30;i++ ));doecho -n "=";done)# 系统信息SystemInfo(){printf"${EchoFormat} 系统信息 ${EchoFormat}\n"printf"系统类型: %-10s\n" $(uname -a| awk '{print $NF}') printf"系统版本: %-10s\n""$(cat /etc/redhat-release)"printf"内核信息: %-10s\n" $(uname -r) printf"主机名: %-10s\n" $(uname -n)printf"编码格式: %-10s\n"${LANG}printf"系统当前时间: %-10s %-10s\n" $(date +%F) $(date +%T) printf"系统运行负载: %-4s %-1s\n" $(uptime | awk -F: '{print $5 }'|awk -F, '{print $1,"%"}') printf"系统运行天数: %-10s\n" $(uptime |awk '{print $3}') printf"在线用户人数: %-3s\n" $(w|tail -n +3|wc -l)printf"SELinux: %-10s\n" $(grep "SELINUX=[d|e|p]" /etc/selinux/config |awk -F= '{print $2}') echo -e "最后一次修改时间: $(uptime -p)"echo -e "IP地址: $(hostname -I | cut -d' ' -f1)"echo -e "Cpu处理器: $(lscpu | grep "Model name:" | sed 's/Model name:\s*//')"echo -e "内存空间: $(free -h | awk '/^Mem:/ { print $3 "/" $2 }')"echo -e "交换空间: $(free -h | awk '/^Swap:/ { print $3 "/" $2 }')"}# CPU信息CpuInfo(){ MemonyId=$(top -b -n1|awk 'NR==3'|awk -F, '{print $4}'| cut -c 1-5) MemonyUse=$(echo"100-${MemonyId}" |bc)printf"${EchoFormat} CPU信息 ${EchoFormat}\n"printf"逻辑CPU核数: %-3s\n" $(grep "processor" /proc/cpuinfo|sort -u|wc -l)printf"物理CPU核数: %-3s\n" $(grep "physical id" /proc/cpuinfo |sort -u|wc -l) printf"CPU架构: %-3s\n" $(uname -m)printf"CPU设置型号: %-3s\n""$(grep "model name" /proc/cpuinfo |awk -F: '{print $2}'|sort -u|cut -c 2-50)"echo -e "CPU 1分钟负载: `awk '{printf "%15s",$1}' /proc/loadavg`"echo -e "CPU 5分钟负载: `awk '{printf "%15s",$2}' /proc/loadavg`"echo -e "CPU10分钟负载: `awk '{printf "%15s",$3}' /proc/loadavg`"printf"使用CPU占比: %-1s %-1s\n"${MemonyUse} %printf"空闲CPU占比: %-1s %-1s\n"${MemonyId} %printf"占用CPU Top10信息:\n\n" ps -eo user,pid,pcpu,pmem,args --sort=-pcpu |head -n 10}# Memory信息MemoryInfo(){printf"${EchoFormat} 内存信息 ${EchoFormat}\n"printf"总共内存: %-1s\n" $(free -mh|awk "NR==2"|awk '{print $2}') printf"使用内存: %-1s\n" $(free -mh|awk "NR==2"|awk '{print $3}') printf"剩余内存: %-1s\n" $(free -mh|awk "NR==2"|awk '{print $4}') printf"内存使用占比: %-1s %-1s\n" $(free | grep -i mem |awk '{print $6/$2*100}'|cut -c1-5) %printf"占用内存排名前10的soft:\n\n" ps -eo user,pid,pcpu,pmem,args --sort=-pmem |head -n 10}# 磁盘使用量排序:Disk_Info() {printf"${EchoFormat} 各分区使用率 ${EchoFormat}\n" df -hecho}# Swap信息SwapInfo(){printf"${EchoFormat} Swap信息 ${EchoFormat}\n"printf"Swap总大小: %-1s\n" $(free -mh|awk "NR==3"|awk '{print $2}') printf"已用Swap: %-1s\n" $(free -mh|awk "NR==3"|awk '{print $3}') printf"可用Swap: %-1s\n" $(free -mh|awk "NR==3"|awk '{print $4}')}# 网络信息NetworkInfo(){printf"${EchoFormat} 网络信息 ${EchoFormat}\n"printf"IP地址: %-1s %-1s %-1s %-1s\n" $(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:") printf"网关: %-1s %-1s %-1s %-1s\n" $(ifconfig -a|grep "netmask"|grep -v 127.0.0.1|awk '{print $4}') printf"DNS: %-1s %-1s %-1s %-1s %-1s\n" $(grep "nameserver" /etc/resolv.conf | awk '{print $2}')if (ping -c2 -w2 www.baidu.com &>/dev/null);thenprintf"网络是否连通: %s\n" 是 printf"公网IP地址: %s\n" $(curl -s ip.sb) elseprintf"网络是否连通: %s\n" 否fi}# docker检查DockerInfo(){printf"${EchoFormat} docker运行情况 ${EchoFormat}\n"printf"当前正在运行的容器:\n $(docker ps --format "{{.Names}}")\n"printf"当前没有运行的容器:\n $(docker ps --format "{{.Names}}"|grep Exited)\n"}#直接登录后打印SystemInfo CpuInfoMemoryInfoDisk_InfoSwapInfoNetworkInfo保存为 system_info1.sh,效果更强大:



重点来了,怎么让这些脚本在登录时自动运行?
超简单,把脚本扔到 /etc/profile.d/ 目录下就行了:
# 脚本1cp system_info.sh /etc/profile.d/chmod +x /etc/profile.d/system_info.sh# 脚本2cp system_info1.sh /etc/profile.d/chmod +x /etc/profile.d/system_info1.sh下次登录,信息自动展示,无需手动执行。
运维工作,细节决定效率。
这两个脚本虽然简单,但能帮你省去大量重复劳动,登录即查看,问题早发现。
说到底,工具就是工具,关键是你怎么用。
你还有哪些常用的开机检查脚本?欢迎在评论区分享,我们一起学习进步。
另外我给大家整理了一些技术资料有需要直接下载即可
链接:https://pan.quark.cn/s/bc5c2c2700f8
需要什么资料也可在评论区留言
或者添加小编咨询

4、2026版 Linux服务器运维命令速查手册(全新整理)
5、告别 Zabbix!这款开源神器让你丝滑监控 1000 台服务器!
看完本文有收获?请分享给更多人
推荐关注「Linux 运维进阶之路」,提升Linux技能
