Last active
May 19, 2023 07:53
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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