blob: d99c21f0cefb97250ff83fd5fccd4a83d59875b3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
#!/bin/bash
clear
refresh_interval=1
tput civis
trap "tput cnorm; clear; exit" SIGINT SIGTERM
bar_char="█"
bar_len=20
while true; do
tput cup 0 0
c_host="\033[34m"
c_user="\033[32m"
c_date="\033[33m"
c_kernel="\033[31m"
c_distro="\033[33m"
c_uptime="\033[35m"
c_ram="\033[36m"
c_disk="\033[33m"
c_ip="\033[36m"
c_wifi="\033[35m"
c_reset="\033[0m"
echo "Svarog 1.0 - By: SrWyatt"
echo
hostname_=$(hostname)
user_=$USER
date_=$(date '+%Y-%m-%d %H:%M:%S')
kernel_=$(uname -r)
if [ -f /etc/os-release ]; then
distro=$(grep -Po '(?<=^PRETTY_NAME=).+' /etc/os-release | tr -d '"')
elif [ -f /etc/debian_version ]; then
distro="Debian $(cat /etc/debian_version)"
elif [ -f /etc/redhat-release ]; then
distro=$(cat /etc/redhat-release)
else
distro="Linux (Unknown)"
fi
uptime_=$(uptime -p)
ram_total=$(free -m | awk '/Mem:/ {print $2}')
ram_used=$(free -m | awk '/Mem:/ {print $3}')
disk_usage=$(df -h / | awk 'NR==2 {print $3 "/" $2 " (" $5 ")"}')
if command -v curl &>/dev/null; then
ip_public=$(curl -s ifconfig.me)
else
ip_public="curl not installed"
fi
ram_ratio=$((ram_used*bar_len/ram_total))
ram_bar=$(printf "%0.s$bar_char" $(seq 1 $ram_ratio))
ram_bar+=$(printf "%0.s " $(seq $ram_ratio $bar_len))
ram_pct=$((ram_used*100/ram_total))
iface_default=$(ip route 2>/dev/null | grep '^default' | awk '{print $5}')
[ -z "$iface_default" ] && iface_default="(none)"
interfaces=()
max_iface_len=5; max_ip4_len=4; max_ip6_len=4; max_mac_len=3; max_tx_len=2; max_rx_len=2
while IFS= read -r line; do
iface=$(echo "$line" | awk '{print $1}')
ip4=$(echo "$line" | awk '{print $2}')
ip6=$(ip -6 addr show dev "$iface" 2>/dev/null | grep 'scope global' | awk '{print $2}' | head -n1)
ip6=${ip6:-"(no IPv6)"}
mac=$(ip link show "$iface" | awk '/ether/ {print $2}')
tx=$(cat /sys/class/net/$iface/statistics/tx_bytes 2>/dev/null || echo 0)
rx=$(cat /sys/class/net/$iface/statistics/rx_bytes 2>/dev/null || echo 0)
status=$(cat /sys/class/net/$iface/operstate 2>/dev/null)
[[ "$status" != "up" ]] && status="down"
marker=" "; [[ "$iface" == "$iface_default" ]] && marker=">"
(( ${#iface} > max_iface_len )) && max_iface_len=${#iface}
(( ${#ip4} > max_ip4_len )) && max_ip4_len=${#ip4}
(( ${#ip6} > max_ip6_len )) && max_ip6_len=${#ip6}
(( ${#mac} > max_mac_len )) && max_mac_len=${#mac}
(( ${#tx} > max_tx_len )) && max_tx_len=${#tx}
(( ${#rx} > max_rx_len )) && max_rx_len=${#rx}
interfaces+=("$marker|$iface|$ip4|$ip6|$mac|$tx|$rx|$status")
done < <(ip -o -4 addr show 2>/dev/null | awk '{print $2, $4}')
if command -v iwgetid &>/dev/null; then
ssid=$(iwgetid -r)
[ -z "$ssid" ] && ssid="(N/A)"
else
ssid="(iwgetid not installed)"
fi
printf "${c_host}%-10s${c_reset} %s\n" "Host:" "$hostname_"
printf "${c_user}%-10s${c_reset} %s\n" "User:" "$user_"
printf "${c_date}%-10s${c_reset} %s\n" "Date:" "$date_"
printf "${c_kernel}%-10s${c_reset} %s\n" "Kernel:" "$kernel_"
printf "${c_distro}%-10s${c_reset} %s\n" "Distro:" "$distro"
printf "${c_uptime}%-10s${c_reset} %s\n" "Uptime:" "$uptime_"
printf "${c_ram}%-10s${c_reset} [%s] %s/%s MB (%d%%)\n" "RAM:" "$ram_bar" "$ram_used" "$ram_total" "$ram_pct"
printf "${c_disk}%-10s${c_reset} %s\n" "Disk:" "$disk_usage"
printf "${c_ip}%-10s${c_reset} %s\n" "Public IP:" "$ip_public"
printf "${c_wifi}%-10s${c_reset} %s\n\n" "WiFi SSID:" "$ssid"
echo "Interfaces:"
printf "%-2s %-*s %-*s %-*s %-*s %-10s %-10s %-8s\n" "" $max_iface_len "IFACE" $max_ip4_len "IPv4" $max_ip6_len "IPv6" $max_mac_len "MAC" "TX (B)" "RX (B)" "STATUS"
echo "-------------------------------------------------------------------------------------------------"
for iface in "${interfaces[@]}"; do
IFS='|' read -r marker name ip4 ip6 mac tx rx status <<< "$iface"
if [ "$tx" -ge 1048576 ]; then tx_val="$(awk "BEGIN{printf \"%.1f MB\",$tx/1048576}")"; else tx_val="$((tx/1024)) KB"; fi
if [ "$rx" -ge 1048576 ]; then rx_val="$(awk "BEGIN{printf \"%.1f MB\",$rx/1048576}")"; else rx_val="$((rx/1024)) KB"; fi
printf "%-2s %-*s %-*s %-*s %-*s %-10s %-10s %-8s\n" \
"$marker" $max_iface_len "$name" $max_ip4_len "$ip4" $max_ip6_len "$ip6" $max_mac_len "$mac" \
"$tx_val" "$rx_val" "$status"
done
sleep $refresh_interval
done
|