#!/bin/bash
# System Monitor Script
# Displays system information and resource usage
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# Function to print section headers
print_header() {
echo -e "\n${BLUE}========================================${NC}"
echo -e "${CYAN}$1${NC}"
echo -e "${BLUE}========================================${NC}"
}
# System Information
print_header "SYSTEM INFORMATION"
echo -e "${GREEN}Hostname:${NC} $(hostname)"
echo -e "${GREEN}OS:${NC} $(uname -s)"
echo -e "${GREEN}Kernel:${NC} $(uname -r)"
echo -e "${GREEN}Architecture:${NC} $(uname -m)"
echo -e "${GREEN}Uptime:${NC} $(uptime -p)"
# CPU Information
print_header "CPU INFORMATION"
echo -e "${GREEN}CPU Model:${NC} $(lscpu | grep 'Model name' | cut -d ':' -f 2 | xargs)"
echo -e "${GREEN}CPU Cores:${NC} $(nproc)"
echo -e "${GREEN}CPU Usage:${NC}"
top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print " " 100 - $1"%"}'
# Memory Information
print_header "MEMORY USAGE"
free -h | awk 'NR==2{printf " Total: %s\n Used: %s (%.2f%%)\n Free: %s\n", $2, $3, $3*100/$2, $4}'
# Disk Usage
print_header "DISK USAGE"
df -h | awk 'NR==1 || /^\/dev/ {printf " %-20s %10s %10s %10s %6s\n", $1, $2, $3, $4, $5}'
# Network Information
print_header "NETWORK INFORMATION"
echo -e "${GREEN}IP Addresses:${NC}"
ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | while read ip; do
echo " $ip"
done
# Top Processes by CPU
print_header "TOP 5 PROCESSES BY CPU"
ps aux --sort=-%cpu | awk 'NR<=6{printf " %-10s %5s %5s %s\n", $1, $3"%", $4"%", $11}'
# Top Processes by Memory
print_header "TOP 5 PROCESSES BY MEMORY"
ps aux --sort=-%mem | awk 'NR<=6{printf " %-10s %5s %5s %s\n", $1, $3"%", $4"%", $11}'
# Logged in Users
print_header "LOGGED IN USERS"
who | awk '{printf " %-15s %-15s %s\n", $1, $2, $3" "$4}'
# System Load
print_header "SYSTEM LOAD"
uptime | awk -F'load average:' '{print " " $2}'
# Check if running as root for additional info
if [ "$EUID" -eq 0 ]; then
print_header "RECENT LOGINS (Last 10)"
last -n 10 | awk '{printf " %-15s %-15s %-20s %s\n", $1, $3, $4" "$5" "$6" "$7, $9}'
fi
echo -e "\n${GREEN}Monitoring complete!${NC}\n"