Bash脚本实现每次登录到Shell时可以查看Linux系统信息
在Linux系统中,通过编写Bash脚本,可以在每次登录Shell时自动显示系统信息,这不仅方便管理员快速了解系统状态,还能帮助用户及时发现潜在问题,下面将详细介绍如何实现这一功能,并提供相关示例代码。
一、脚本
该脚本主要分为六个部分,每部分展示不同类型的系统信息:
1、通用系统信息:包括主机名、制造商、产品名称、序列号等。
2、CPU/内存当前使用情况:显示内存和CPU的使用率。
3、硬盘使用率超过80%的分区:列出使用率超过80%的磁盘分区。
4、列出系统WWN详情:如果系统是物理机,则列出光纤通道主机总线适配器(HBA)的WWN(World Wide Name)。
5、Oracle DB实例:检查并列出正在运行的Oracle数据库实例。
6、可更新的包:显示系统中可以更新的软件包。
二、脚本代码
以下是完整的Bash脚本代码,保存为/opt/scripts/system-info.sh
:
#!/bin/bash 打印通用系统信息 echo -e "------------------------------System Information----------------------------" echo -e "Hostname:ttt$(hostname)" echo -e "Uptime:ttt$(uptime | awk '{print $3,$4}' | sed 's/,//')" echo -e "Manufacturer:tt$(cat /sys/class/dmi/id/chassis_vendor)" echo -e "Product Name:tt$(cat /sys/class/dmi/id/product_name)" echo -e "Version:ttt$(cat /sys/class/dmi/id/product_version)" echo -e "Serial Number:tt$(cat /sys/class/dmi/id/product_serial)" echo -e "Machine Type:tt$(vserver=$(lscpu | grep Hypervisor | wc -l); if [ $vserver -gt 0 ]; then echo "VM"; else echo "Physical"; fi)" echo -e "Operating System:t$(hostnamectl | grep "Operating System" | cut -d ' ' -f5-)" echo -e "Kernel:ttt$(uname -r)" echo -e "Architecture:tt$(arch)" echo -e "Processor Name:t$(awk -F':' '/^model name/ {print $2}' /proc/cpuinfo | uniq | sed -e 's/^[ t]*//')" echo -e "Active User:tt$(w | cut -d ' ' -f1 | grep -v USER | xargs -n1)" echo -e "System Main IP:t$(hostname -I)" echo "" 打印CPU和内存使用情况 echo -e "------------------------------CPU/Memory Usage------------------------------" echo -e "Memory Usage:tt$(free | awk '/Mem/{printf("%.2f%"), $3/$2*100}')" echo -e "Swap Usage:tt$(free | awk '/Swap/{printf("%.2f%"), $3/$2*100}')" echo -e "CPU Usage:tt$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *([0-9.]*)%* id.*/1/" | awk '{print int($1+$2)}')%" echo "" 打印磁盘使用率超过80%的分区 echo -e "------------------------------Disk Usage >80%------------------------------" df -Ph | sed 's/%//g' | awk '{ if($5 > 80) print $0;}' echo "" 打印WWN详情 echo -e "------------------------------For WWN Details-------------------------------" vserver=$(lscpu | grep Hypervisor | wc -l) if [ $vserver -gt 0 ]; then echo "$(hostname) is a VM" else cat /sys/class/fc_host/host?/port_name fi echo "" 打印Oracle DB实例 echo -e "------------------------------Oracle DB Instances---------------------------" if id oracle >/dev/null 2>&1; then ps -ef | grep pmon else echo "oracle user does not exist on $(hostname)" fi echo "" 打印可更新的包 if [ -f /etc/redhat-release ] || [ -f /etc/centos-release ] || [ -f /etc/fedora-release ]; then echo -e "------------------------------Package Updates-------------------------------" yum updateinfo summary | grep 'Security|Bugfix|Enhancement' echo -e "-----------------------------------------------------------------------------" elif [ -f /etc/debian_version ] || [ -f /etc/lsb-release ]; then echo -e "------------------------------Package Updates-------------------------------" apt list --upgradable else echo "No package management system found." fi echo ""
三、单元表格
部分 | 命令示例 | 输出示例 | |
通用系统信息 | hostname ,uptime ,cat /sys/class/dmi/id/ |
Hostname: server Uptime: 1 day, 23:54 Manufacturer: Dell |
|
CPU/内存使用情况 | free ,top |
Memory Usage: 75.34% CPU Usage: 15% |
|
硬盘使用率超过80% | df -Ph |
/dev/sda1 92% | |
WWN详情 | lscpu |
grep Hypervisor,cat /sys/class/fc_host/host?/port_name |
server is a VM /sys/class/fc_host/host0/port_name: 10:00:00:00:c9:7a |
Oracle DB实例 | id oracle ,ps -ef |
grep pmon | pmon (multiple lines) |
可更新的包 | yum updateinfo ,apt list --upgradable |
httpd-2.4.6-45.el7.centos.x86_64 updates available |
四、相关问题与解答
1.如何修改脚本以适应不同的Linux发行版?
解答:脚本中已经包含了对不同Linux发行版的支持,对于Red Hat、CentOS和Fedora,使用yum updateinfo
命令;对于Debian和Ubuntu,使用apt list --upgradable
命令,你可以根据需要添加或修改这些命令以支持其他发行版。
2.如何确保脚本在每次登录时自动执行?
解答:可以通过修改用户的shell配置文件(如~/.bashrc
或~/.profile
),在文件末尾添加一行来调用该脚本:
source /opt/scripts/system-info.sh
确保脚本具有执行权限,可以使用以下命令赋予权限:
chmod +x /opt/scripts/system-info.sh
通过编写和配置上述Bash脚本,你可以在每次登录到Linux Shell时自动查看系统信息,这有助于提高系统管理效率并及时发现潜在问题。
以上就是关于“Bash脚本实现每次登录到Shell时可以查看Linux系统信息”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/709873.html