#!/bin/bash # Log file for errors, warnings, and output log_file="system_info.log" # Redirect both stdout and stderr to the log file exec > >(tee -a "$log_file") 2>&1 if ! command -v dmidecode &> /dev/null; then echo "dmidecode is not installed. Please install it." >&2 exit 1 fi # Color escape codes RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Define a divider line divider="----------------------------------------------------------------------------------------------------------------------------------------------------------------------------" # Function to print section header print_section_header() { echo "$divider" echo -e "${YELLOW}$1${NC}" echo "$divider" } # Function to convert bytes to human-readable sizes human_readable_size() { num=$1 unit=("B" "KB" "MB" "GB" "TB") index=0 while [ $num -ge 1024 ] && [ $index -lt 4 ]; do num=$((num / 1024)) index=$((index + 1)) done echo "$num ${unit[$index]}" } # Get system information hostname=$(hostname) kernel=$(uname -r) cpu=$(cat /proc/cpuinfo | grep "model name" | head -n 1 | cut -d ':' -f 2 | xargs) memory=$(free -b | grep "Mem:" | awk '{print $2}') disk=$(df -h / | awk 'NR==2{print $2}') uptime=$(uptime -p) ip_address=$(ip route get 1.1.1.1 | grep -oP 'src \K\S+') motherboard_brand=$(sudo dmidecode -s baseboard-manufacturer) motherboard=$(sudo dmidecode -s baseboard-product-name) gpu=$(lspci | grep -i vga | cut -d ":" -f3) audio=$(lspci | grep -i audio | cut -d ":" -f3) # Create a timestamp for the filename # d=$(date +"%Y-%m-%d") # t=$(date +"%H-%M-%S") # filename="${hostname}_${d}_${t}.log" filename="${hostname}.log" # Get the number of CPU cores cpu_cores=$(nproc) # Write information to the file echo "System Information" > "$filename" print_section_header "System Information" echo "Hostname: $hostname" >> "$filename" echo "IP Address: $ip_address" >> "$filename" echo "Uptime: $uptime" >> "$filename" echo "Kernel Version: $kernel" >> "$filename" echo "CPU: $cpu ($cpu_cores cores)" >> "$filename" # Display CPU cores here echo "Memory: $(human_readable_size $memory)" >> "$filename" echo "Disk Space: $disk" >> "$filename" echo "Motherboard: $motherboard_brand $motherboard" >> "$filename" echo "GPU:$gpu" >> "$filename" echo "Audio:$audio" >> "$filename" echo "$divider" >> "$filename" # System Health Check print_section_header "System Health Check" cpu_usage=$(top -n 1 -b | grep "%Cpu" | awk '{print $2}') memory_usage=$(free -m | awk 'NR==2{print $3}') disk_usage=$(df -h / | awk 'NR==2{print $5}') echo "CPU Usage: $cpu_usage%" >> "$filename" echo "Memory Usage: $memory_usage MB" >> "$filename" echo "Disk Usage: $disk_usage" >> "$filename" echo "$divider" >> "$filename" # Installed Packages print_section_header "Installed Packages" installed_packages=$(dpkg -l) # or rpm -qa for Red Hat-based systems echo "Package Name | Version" >> "$filename" echo "$installed_packages" | awk 'NR>5{print}' >> "$filename" # Skip header lines echo "$divider" >> "$filename" echo -e "${GREEN}System information saved to $filename${NC}"