/
freeoneed
/
shell_fetch
Обзор
Документация
Войти
/
freeoneed
/
shell_fetch
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
shell_fetch.sh
156 строк
6 KB
freeoneed
first_commit
02 июл 2024, 15:02
02 июл 2024, 15:02
cc1befb
Код
Авторство
О чём код?
#!/bin/bash # Функция для подсветки текста color_text() { echo -e -n "\e[$1m$2\e[0m" } # Цветовые коды color_red=31 color_green=32 color_yellow=33 color_blue=34 color_magenta=35 color_cyan=36 color_white=37 # echo # ascii_art=$(cat <<'EOF' # ********************************** # * █████╗ ███╗ ███╗██╗ ██╗ * # * ██╔══██╗████╗ ████║██║ ██║ * # * ███████║██╔████╔██║██║ ██║ * # * ██╔══██║██║╚██╔╝██║╚██╗ ██╔╝ * # * ██║ ██║██║ ╚═╝ ██║ ╚████╔╝ * # * ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═══╝ * # ********************************** # EOF # ) # # Вывод ASCII арта # color_text "$color_white" "$ascii_art" # Информация о системе echo color_text "$color_white" " **************************************" # color_text "$color_cyan" " Информация о системе:" echo color_text "$color_white" " * █████╗ ███╗ ███╗ ██╗ ██╗ *" color_text "$color_cyan" " Хост: " color_text "$color_red" "$(hostname)" echo color_text "$color_white" " * ██╔══██╗ ████╗ ████║ ██║ ██║ *" color_text "$color_cyan" " Время работы: " color_text "$color_white" "$(uptime -p | sed 's/up //') | " color_text "$color_cyan" "AVG: " color_text "$color_white" "$(cat /proc/loadavg | cut -d ' ' -f 1-3)" echo color_text "$color_white" " * ███████║ ██╔████╔██║ ██║ ██║ *" color_text "$color_cyan" " Дистрибутив: " # color_text "$color_white" "$(lsb_release -d | awk -F'\t' '{print $2}')" color_text "$color_white" "$(grep PRETTY_NAME /etc/os-release | cut -d'"' -f2)" echo color_text "$color_white" " * ██╔══██║ ██║╚██╔╝██║ ╚██╗ ██╔╝ *" color_text "$color_cyan" " Ядро: " color_text "$color_white" "$(uname -r)" echo color_text "$color_white" " * ██║ ██║ ██║ ╚═╝ ██║ ╚████╔╝ *" color_text "$color_cyan" " CPU & MEM: " color_text "$color_white" "$(grep -c '^processor' /proc/cpuinfo) Cores / $(free -h | awk '/Mem:/ {print $2}') | ($(grep 'model name' /proc/cpuinfo | uniq | awk -F': ' '{print $2}'))" echo color_text "$color_white" " * ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═══╝ *" # Информация о сетевых интерфейсах ip addr | awk '/^[0-9]+:/ {print $2}' | sed 's/://' | while read -r iface; do # Исключаем lo и интерфейсы Docker'а if [[ "$iface" != "lo" && "$iface" != docker* && "$iface" != br-* && "$iface" != veth* ]]; then # Получаем IP-адреса с маской подсети ip_address=$(ip addr show "$iface" | grep -oP '(?<=inet\s)\d+(\.\d+){3}/\d+') # ip6_address=$(ip addr show "$iface" | grep -oP '(?<=inet6\s)[\da-f:]+/\d+') # Получаем MAC-адрес mac_address=$(ip addr show "$iface" | awk '/ether/ {print $2}') color_text "$color_cyan" " Сеть: " color_text "$color_red" "$ip_address " color_text "$color_white" "| $iface " color_text "$color_white" "($mac_address)" fi done echo color_text "$color_white" " **************************************" # Информация о дисках echo color_text "$color_cyan" " Информация о дисках:" echo df -h --output=fstype,size,used,avail,pcent,target,source | tail -n +2 | grep -v -e 'tmpfs' -e 'devtmpfs' | while read -r line; do # Разбор строки device=$(echo "$line" | awk '{print $7}') fs_type=$(echo "$line" | awk '{print $1}') size=$(echo "$line" | awk '{print $2}') used=$(echo "$line" | awk '{print $3}') avail=$(echo "$line" | awk '{print $4}') pcent=$(echo "$line" | awk '{print $5}' | sed 's/%//') mount=$(echo "$line" | awk '{print $6}') # Определение цвета по проценту использования if [ "$pcent" -ge 90 ]; then color_left=$color_red color_right=$color_red elif [ "$pcent" -ge 75 ]; then color_left=$color_yellow color_right=$color_yellow else color_left=$color_cyan color_right=$color_white fi # Вывод информации о диске color_text "$color_left" " $device ($mount) [$fs_type]: " color_text "$color_right" "$pcent% использовано, $avail свободно из $size" echo done # Информация о удалённых подключениях echo color_text "$color_cyan" " Информация об удаленных подключениях:" echo # Выполняем команду и сохраняем вывод в переменную output=$(last -n 5 -i -w | grep "pts") # Проверяем, есть ли результаты if [ -z "$output" ]; then color_text "$color_white" " Удаленные подключения отсутствуют!" echo exit 0 fi # Обрабатываем каждую строку while IFS= read -r line; do # Извлекаем необходимые части строки user=$(echo "$line" | awk '{print $1}') pts=$(echo "$line" | awk '{print $2}') ip=$(echo "$line" | awk '{print $3}') date=$(echo "$line" | awk '{print $4" "$5" "$6" "$7}') state=$(echo "$line" | awk '{for(i=8;i<=NF;i++) printf $i" "; print ""}' | sed 's/\s\+/ /g' | xargs) # Определяем, активна ли сессия if [[ "$state" == "still logged in" ]]; then state="(logged in)" else state="($state)" fi # Форматируем и выводим результат if [[ "$ip" != 0.0.0.0 ]]; then if [[ "$state" == "(logged in)" ]]; then color_text "$color_yellow" " $user@$ip: $pts, $date $state" echo else color_text "$color_white" " $user@$ip: $pts, $date $state" echo fi fi done <<< "$output" echo