Network Interface and Disk Monitoring Scripts for Linux Servers

Real-time Network Trafffic Monitoring Script

#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin;
export PATH

monitor_interface() {
  local interface=$1
  local os_info=$(sed -n '1p' /etc/issue)

  if [ ! -d /sys/class/net/$interface ]; then
      echo "Interface not found"
      echo "Available interfaces: $(ls /sys/class/net)"
      exit 1
  fi

  while true; do
    local status="normal"
    
    local rx_prev=$(cat /proc/net/dev | grep $interface | tr : " " | awk '{print $2}')
    local tx_prev=$(cat /proc/net/dev | grep $interface | tr : " " | awk '{print $10}')

    sleep 1
    
    local rx_curr=$(cat /proc/net/dev | grep $interface | tr : " " | awk '{print $2}')
    local tx_curr=$(cat /proc/net/dev | grep $interface | tr : " " | awk '{print $10}')
    
    clear
    
    local rx_diff=$((rx_curr - rx_prev))
    local tx_diff=$((tx_curr - tx_prev))

    if [[ $rx_diff -lt 1024 ]]; then
      rx_diff="${rx_diff}B/s"
    elif [[ $rx_diff -gt 1048576 ]]; then
      rx_diff=$(echo $rx_diff | awk '{print $1/1048576 "MB/s"}')
      status="high"
    else
      rx_diff=$(echo $rx_diff | awk '{print $1/1024 "KB/s"}')
    fi

    if [[ $tx_diff -lt 1024 ]]; then
      tx_diff="${tx_diff}B/s"
    elif [[ $tx_diff -gt 1048576 ]]; then
      tx_diff=$(echo $tx_diff | awk '{print $1/1048576 "MB/s"}')
    else
      tx_diff=$(echo $tx_diff | awk '{print $1/1024 "KB/s"}')
    fi

    echo "==================================="
    echo "Traffic Monitor Utility"
    echo "Version: 1.0"
    echo "Date: $(date +%F)"
    echo "Time: $(date +%H:%M:%S)"
    echo "Interface: $interface"
    echo "Status: $status"
    echo "-----------------------------------"
    echo -e "\tRX\tTX"
    echo "-----------------------------------"
    echo -e "$interface\t$rx_diff\t$tx_diff"
    echo "-----------------------------------"
    echo "Press Ctrl+C to quit"
  done
}

if [[ $# -eq 1 ]]; then
  monitor_interface $1
else
  echo "Usage: $0 <network_interface>"
  echo "Example: $0 eth0"
fi

Disk Storage Aanlysis Script

#!/bin/bash

analyze_storage() {
  local work_dir="/tmp/disk_analysis"
  mkdir -p $work_dir
  
  fdisk -l | grep "Disk /dev/" | awk '{print $2,$3$4}' | tr -d ',:' > $work_dir/disks.log
  
  local disk_index=1
  
  while read disk_entry; do
    local disk_name=$(echo $disk_entry | awk '{print $1}')
    local disk_size=$(echo $disk_entry | awk '{print $2}')
    
    df -h | grep "$disk_name" | sort > $work_dir/partitions_${disk_index}.log
    
    echo
    echo "** Disk $disk_index ($disk_name): $disk_size **"
    echo "----------------------------------------"
    
    printf "%-12s %-10s %-8s %-6s %-6s %-12s %-10s %-4s %-10s %-8s %-12s\n" \
      "Partition" "Mount" "Size" "Used" "Free" "Usage" "FS Type" "ID" "System" "Blk Size" "Reserved"
    printf "%-12s %-10s %-8s %-6s %-6s %-12s %-10s %-4s %-10s %-8s %-12s\n" \
      "==========" "======" "====" "====" "====" "======" "=======" "==" "======" "========" "========"
    
    local partition_count=$(cat $work_dir/partitions_${disk_index}.log | wc -l)
    local part_index=1
    
    while read partition_data; do
      local part_name=$(echo $partition_data | awk '{print $1}')
      local mount_point=$(echo $partition_data | awk '{print $6}')
      local total_size=$(echo $partition_data | awk '{print $2}')
      local used_space=$(echo $partition_data | awk '{print $3}')
      local free_space=$(echo $partition_data | awk '{print $4}')
      local usage_percent=$(echo $partition_data | awk '{print $5}')
      local fs_type=$(mount | grep $part_name | awk '{print $5$6}')
      local part_id=$(fdisk -l | grep $part_name | tr -d '\*' | awk '{print $5}')
      local system_type=$(fdisk -l | grep $part_name | tr -d '\*' | awk '{print $6}')
      
      local block_size=$(tune2fs -l $part_name | grep "Block size" | awk '{print $3}')
      local reserved_blocks=$(tune2fs -l $part_name | grep "Reserved block count:" | awk '{print $4}')
      
      local kb_block_size=$((block_size / 1024))
      local reserved_mb=$((reserved_blocks * kb_block_size / 1024))
      
      printf "%-12s %-10s %-8s %-6s %-6s %-12s %-10s %-4s %-10s %-8s %-12s\n" \
        "$part_name" "$mount_point" "$total_size" "$used_space" "$free_space" \
        "$usage_percent" "$fs_type" "$part_id" "$system_type" "${kb_block_size}K" "${reserved_mb}M"
      
      ((part_index++))
    done < $work_dir/partitions_${disk_index}.log
    
    ((disk_index++))
  done < $work_dir/disks.log
  
  rm -rf $work_dir
}

analyze_storage

Tags: Linux network-monitoring disk-monitoring bash-scripting system-administration

Posted on Fri, 10 Jul 2026 16:01:01 +0000 by J.Daniels