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