#!/bin/bash # LXS - System Infos # Description: Essential system monitoring and diagnostic tools # Author: LXS # Date: 2025 # Load LXS common library (colors, separator, run_spinner, loggers) LXS_RAW_BASE="${LXS_RAW_BASE:-https://git.hyko.cx/hykocx/lxs/raw/branch/main}" _lib=$(curl -fsSL "${LXS_RAW_BASE}/lib/common.sh") || { echo "Failed to fetch lib/common.sh" >&2; exit 1; } eval "$_lib" unset _lib export LXS_LOG_FILE="/tmp/lxs_system_infos.log" # Menu: System Infos menu_system_infos() { while true; do clear show_box_top "SYSTEM INFOS" echo "" show_menu_item "1" "View system informations" show_menu_item "2" "Check disk space" show_menu_item "3" "Check memory usage" show_menu_item "4" "Check CPU load" show_menu_item "5" "Check network" show_menu_item "6" "View system logs (last 50 lines)" show_menu_item "7" "Show top resource-consuming processes" show_menu_item "8" "Check disk health (SMART)" show_menu_item "0" "Exit" "" exit echo "" show_box_bottom echo "" show_prompt read -r choice echo "" case $choice in 1) # View system informations clear show_box_top "SYSTEM INFORMATION" echo "" echo -e "${CYAN}${BOLD}Operating System:${NC}" echo -e " $(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2)" echo "" echo -e "${CYAN}${BOLD}Kernel Version:${NC}" echo -e " $(uname -r)" echo "" echo -e "${CYAN}${BOLD}System Uptime:${NC}" echo -e " $(uptime -p 2>/dev/null || uptime | awk -F'up ' '{print $2}' | awk -F',' '{print $1}')" echo "" echo -e "${CYAN}${BOLD}Load Average:${NC}" echo -e " $(uptime | awk -F'load average:' '{print $2}')" echo "" echo -e "${CYAN}${BOLD}CPU Information:${NC}" echo -e " Model: $(lscpu | grep "Model name" | cut -d':' -f2 | xargs)" echo -e " Cores: $(nproc)" echo -e " Architecture: $(uname -m)" echo "" echo -e "${CYAN}${BOLD}Memory:${NC}" local total_mem=$(free -h | awk '/^Mem:/ {print $2}') local used_mem=$(free -h | awk '/^Mem:/ {print $3}') local available_mem=$(free -h | awk '/^Mem:/ {print $7}') echo -e " Total: $total_mem" echo -e " Used: $used_mem" echo -e " Available: $available_mem" echo "" echo -e "${CYAN}${BOLD}Disk Space:${NC}" echo -e " Total: $(df -h / | awk 'NR==2 {print $2}')" echo -e " Used: $(df -h / | awk 'NR==2 {print $3}')" echo -e " Available: $(df -h / | awk 'NR==2 {print $4}')" echo -e " Usage: $(df -h / | awk 'NR==2 {print $5}')" echo "" echo -e "${CYAN}${BOLD}Network:${NC}" echo -e " Hostname: $(hostname)" echo -e " Local IP: $(hostname -I | awk '{print $1}')" echo -e " Public IP: $(get_public_ip)" echo "" echo -e "${CYAN}${BOLD}Installed Software:${NC}" if command -v git &> /dev/null; then echo -e " ${GREEN}[✓]${NC} Git: $(git --version 2>/dev/null | cut -d' ' -f3)" else echo -e " ${GRAY}[ ]${NC} Git: Not installed" fi if command -v docker &> /dev/null; then echo -e " ${GREEN}[✓]${NC} Docker: $(docker --version 2>/dev/null | cut -d' ' -f3 | tr -d ',')" else echo -e " ${GRAY}[ ]${NC} Docker: Not installed" fi if command -v node &> /dev/null; then echo -e " ${GREEN}[✓]${NC} Node.js: $(node --version 2>/dev/null)" else echo -e " ${GRAY}[ ]${NC} Node.js: Not installed" fi if command -v python3 &> /dev/null; then echo -e " ${GREEN}[✓]${NC} Python3: $(python3 --version 2>/dev/null | cut -d' ' -f2)" else echo -e " ${GRAY}[ ]${NC} Python3: Not installed" fi ;; 2) # Check disk space echo -e "${CYAN}${BOLD}Disk Space Usage:${NC}" echo "" df -h echo "" show_separator echo -e "${CYAN}${BOLD}Inode Usage:${NC}" echo "" df -i ;; 3) # Check memory usage echo -e "${CYAN}${BOLD}Memory Usage:${NC}" echo "" free -h echo "" show_separator echo -e "${CYAN}${BOLD}Detailed Memory Info:${NC}" echo "" cat /proc/meminfo | head -10 ;; 4) # Check CPU load echo -e "${CYAN}${BOLD}CPU Load and Top Processes:${NC}" echo "" uptime echo "" show_separator echo "" top -bn1 | head -20 ;; 5) # Check network echo -e "${CYAN}${BOLD}Network Check:${NC}" echo "" echo -e "${CYAN}[1/5]${NC} Network Interfaces:" echo "" ip -brief addr show 2>/dev/null || ifconfig -a echo "" echo -e "${CYAN}[2/5]${NC} Public IP Address:" PUBLIC_IP=$(get_public_ip) echo -e " ${WHITE}$PUBLIC_IP${NC}" echo "" echo -e "${CYAN}[3/5]${NC} DNS Resolution Test:" echo -e -n " Testing google.com... " if nslookup google.com >/dev/null 2>&1; then echo -e "${GREEN}OK${NC}" else echo -e "${RED}FAILED${NC}" fi echo "" echo -e "${CYAN}[4/5]${NC} Internet Connectivity Test:" echo -e -n " Pinging google.com... " if ping -c 1 google.com >/dev/null 2>&1; then echo -e "${GREEN}OK${NC}" else echo -e "${RED}FAILED${NC}" fi echo "" echo -e "${CYAN}[5/5]${NC} Open Ports:" echo "" if command -v ss &> /dev/null; then ss -tulpn 2>/dev/null | grep LISTEN || echo " No listening ports or insufficient permissions" elif command -v netstat &> /dev/null; then netstat -tulpn 2>/dev/null | grep LISTEN || echo " No listening ports or insufficient permissions" else echo " ${YELLOW}Neither ss nor netstat available${NC}" fi ;; 6) # View system logs echo -e "${CYAN}${BOLD}System Logs (last 50 lines):${NC}" echo "" sudo journalctl -n 50 --no-pager ;; 7) # Show top resource-consuming processes echo -e "${CYAN}${BOLD}Top Memory-Consuming Processes:${NC}" echo "" ps aux --sort=-%mem | head -15 echo "" show_separator echo "" echo -e "${CYAN}${BOLD}Top CPU-Consuming Processes:${NC}" echo "" ps aux --sort=-%cpu | head -15 ;; 8) # Check disk health echo -e "${CYAN}${BOLD}Disk Health Check (SMART):${NC}" echo "" if command -v smartctl &> /dev/null; then disks=$(lsblk -d -n -p -o NAME,TYPE | grep "disk" | awk '{print $1}') if [ -z "$disks" ]; then echo -e "${RED}[✗] No disks found${NC}" else for disk in $disks; do disk_name=$(basename "$disk") show_separator echo -e "${WHITE}Disk: $disk${NC}" # Get disk info disk_size=$(lsblk -d -n -o SIZE "$disk" 2>/dev/null) disk_model=$(lsblk -d -n -o MODEL "$disk" 2>/dev/null | xargs) disk_rota=$(cat /sys/block/$disk_name/queue/rotational 2>/dev/null) echo -e " Size: ${CYAN}$disk_size${NC}" [ -n "$disk_model" ] && echo -e " Model: ${CYAN}$disk_model${NC}" [ "$disk_rota" == "0" ] && echo -e " Type: ${CYAN}SSD/Virtual${NC}" || echo -e " Type: ${CYAN}HDD${NC}" echo "" # Check if it's a virtual disk if [[ $disk == *"/dev/vd"* ]] || [[ $disk == *"/dev/xvd"* ]]; then echo -e " ${YELLOW}[!] Virtual disk detected - SMART not available${NC}" echo -e " ${GRAY}[i] Virtual disks don't support SMART monitoring${NC}" else # Try SMART check for physical disks smart_output=$(sudo smartctl -H "$disk" 2>&1) if echo "$smart_output" | grep -q "PASSED"; then echo -e " ${GREEN}[✓] SMART Status: PASSED${NC}" elif echo "$smart_output" | grep -q "FAILED"; then echo -e " ${RED}[✗] SMART Status: FAILED${NC}" echo -e " ${RED}[!] WARNING: Disk may be failing!${NC}" else echo -e " ${YELLOW}[!] SMART not available for this disk${NC}" fi fi echo "" done show_separator fi else echo -e "${RED}[✗] smartmontools is not installed${NC}" echo "" read -p "Would you like to install it? (y/n): " install_smart if [[ $install_smart =~ ^[Yy]$ ]]; then echo "" export DEBIAN_FRONTEND=noninteractive export NEEDRESTART_MODE=a export NEEDRESTART_SUSPEND=1 run_spinner "Updating package list..." "sudo apt update -qq" run_spinner "Installing smartmontools..." "sudo apt install -y -qq smartmontools -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold'" echo "" echo -e "${GRAY}[i] Run this option again to check disk health${NC}" fi fi ;; 0) exit 75 ;; *) echo -e "${RED}[✗] Invalid option. Please select 0-8.${NC}" sleep 2 continue ;; esac echo "" show_separator echo "" read -p "Press Enter to continue..." done } menu_system_infos