Skip to content

Instantly share code, notes, and snippets.

@vkoori
Last active May 19, 2023 07:53
Show Gist options
  • Save vkoori/a8c4a0d60570e5b0986d2a9cee27d3e2 to your computer and use it in GitHub Desktop.
Save vkoori/a8c4a0d60570e5b0986d2a9cee27d3e2 to your computer and use it in GitHub Desktop.
Use this shell script to find out about your server's resource usage.
#!/bin/bash
# Get CPU information
CPU_MODEL=$(grep "model name" /proc/cpuinfo | awk -F: '{print $2}' | sed 's/^[\t]*//' | head -1)
CPU_CORES=$(grep "cpu cores" /proc/cpuinfo | awk -F: '{print $2}' | sed 's/^[\t]*//' | head -1)
CPU_THREADS=$(grep "siblings" /proc/cpuinfo | awk -F: '{print $2}' | sed 's/^[\t]*//' | head -1)
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
# Get memory information
MEM_TOTAL=$(cat /proc/meminfo | grep MemTotal | awk '{print $2}')
MEM_FREE=$(cat /proc/meminfo | grep MemFree | awk '{print $2}')
MEM_USED=$((MEM_TOTAL - MEM_FREE))
# Get disk information
DISK_USED=$(df -h --output=source,used /dev/* | awk '/^\/dev/{print $1" "$2}')
DISK_FREE=$(df -h --output=source,avail /dev/* | awk '/^\/dev/{print $1" "$2}')
DISK_TOTAL=$(df -h --output=source,size /dev/* | awk '/^\/dev/{print $1" "$2}')
# Get network information
IP_ADDRESS=$(hostname -I | awk '{print $1}')
NETMASK=$(ip addr show | grep -w "inet" | awk '{print $2}')
GATEWAY=$(ip route show default | awk '/default via/ {print $3}')
# Get user information
USERS=$(who | awk '{print $1}')
# Get uptime information
UPTIME=$(uptime -p)
# Get swap information
SWAP_ENABLED=$(swapon -s | tail -n +2 | wc -l)
if [ "$SWAP_ENABLED" != "0" ]; then
SWAP_TOTAL=$(free -b | awk 'NR==4{print $2}')
SWAP_USED=$(free -b | awk 'NR==4{print $3}')
SWAP_FREE=$(free -b | awk 'NR==4{print $4}')
else
SWAP_TOTAL="N/A"
SWAP_USED="N/A"
SWAP_FREE="N/A"
fi
# Get list of network interfaces
INTERFACES=($(cat /proc/net/dev | awk -F':' '{print $1}' | grep -vE "^ *(Inter|face)"))
# Output results
echo "CPU Model: $CPU_MODEL"
echo "CPU Cores: $CPU_CORES"
echo "CPU Threads: $CPU_THREADS"
echo "CPU Usage: $CPU_USAGE %"
echo "Total Memory: $MEM_TOTAL B"
echo "Used Memory: $MEM_USED B"
echo "Free Memory: $MEM_FREE B"
echo "Disk Information:"
echo "$DISK_TOTAL" | while read disk size; do
used=$(echo "$DISK_USED" | grep "$disk" | awk '{sum += $2} END {print sum "GB"}')
free=$(echo "$DISK_FREE" | grep "$disk" | awk '{sum += $2} END {print sum "GB"}')
echo " $disk: Used $used, Free $free"
done
echo "IP Address: $IP_ADDRESS"
echo "Netmask: $NETMASK"
echo "Gateway: $GATEWAY"
echo "Users: $USERS"
echo "Uptime: $UPTIME"
echo "Swap Total: $SWAP_TOTAL"
echo "Swap Used: $SWAP_USED"
echo "Swap Free: $SWAP_FREE"
# Print table header
printf '%-12s %-20s %s\n' "INTERFACE" "RX" "TX"
# Loop through each interface and retrieve RX and TX stats
for INTERFACE in "${INTERFACES[@]}"; do
if [[ "$INTERFACE" == *":"* ]]; then
INTERFACE="${INTERFACE%:*}"
fi
STATS=$(cat /proc/net/dev | grep -w "$INTERFACE" | awk '{print $2,$10}')
RX=$(echo "$STATS" | awk '{print $1}')
TX=$(echo "$STATS" | awk '{print $2}')
if [[ $RX != "" && $TX != "" ]]; then
printf '%-12s %-20s %s\n' "$INTERFACE" "$RX bytes" "$TX bytes"
else
printf '%-12s %-20s %s\n' "$INTERFACE" "No RX or TX traffic" ""
fi
done
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment