Небольшая заметка по обновленной строке приглашения bash

📅 22 Июл 2024 12:19 | 👁 626 | 🕐 3 мин.

Решил немного заморочиться и вывести немного больше информации в строке приглашения для удобства. Помимо стандартных данных которые ранее выводились, такие как время, хост, пользователь и каталог, решил добавить в вывод ip, наличие свободного места и inode, среднею загрузку системы. Эта заметка дополнение к давней заметки про настройку строки приглашения в bash.

Получилось вот так:

# ~/.bashrc: executed by bash(1) for non-login shells.

# Функция для получения первого IP-адреса (IPv4 или IPv6)
get_ip_address() {
    hostname -I | cut -d' ' -f1
}

# Функция для получения информации о дисковом пространстве
# Аргументы:
#   $1 - раздел (например, /)
#   $2 - колонка (1: файловая система, 2: размер, 3: использовано, 4: доступно, 5: использовано %, 6: смонтирован на)
#   $3 - ключ (-h для человеко-читаемого формата, -i для использования inodes)
#   $4 - пороговое значение свободного места в процентах
get_disk_info() {
    local partition=$1
    local column=$2
    local option=$3
    local used_percent=$4
    local available_space
    local available_inode
    local used_percent_space
    local used_percent_inode

    case $option in
        -h)
            available_space=$(df -h $partition | awk -v col=$column 'NR==2 {print $col}')
            used_percent_space=$(df -h $partition | awk 'NR==2 {print $5}' | tr -d '%')

            # Проверка в процентах
            if [ "$used_percent_space" -gt "$used_percent" ]; then
                echo -e "\e[1;31m$available_space\e[0m\e[1;32m"  # Красный цвет, если меньше порога
            else
                echo $available_space
            fi

            ;;
        -i)
            available_inode=$(df -i $partition | awk -v col=$column 'NR==2 {print $col}')
            used_percent_inode=$(df -i $partition | awk 'NR==2 {print $5}' | tr -d '%')

            # Проверка в процентах
            if [ "$used_percent_inode" -gt "$used_percent" ]; then
                echo -e "\e[1;31m$available_inode\e[0m\e[1;32m"  # Красный цвет, если меньше порога
            else
                echo $available_inode
            fi

            ;;
        *)
            echo "Invalid option df"
            return
            ;;
    esac

}

# Функция для получения среднего значения загрузки системы
# Аргумент:
#   $1 - интервал (1: за последнюю минуту, 2: за последние 5 минут, 3: за последние 15 минут)
#   $2 - коэффициент нагрузки в процентах
get_load_average() {
    local interval=$1
    local load_k=$2
    local cpu_k=$(nproc)
    local avg=$(uptime | awk -v idx=$interval -F'load average: ' '{split($2, a, ", "); gsub(",", ".", a[idx]); print a[idx]}')

    # Преобразование avg в число с плавающей запятой
    local avg_x=$(echo $avg | awk '{printf "%.2f", $0}')

    # Вычисление порогового значения
    local threshold=$(awk -v cpu_k=$cpu_k -v load_k=$load_k 'BEGIN {printf "%.2f", cpu_k * (load_k / 100)}')

    if awk -v avg_x=$avg_x -v threshold=$threshold 'BEGIN {exit !(avg_x > threshold)}'; then
        echo -e "\e[1;31m$avg\e[0m\e[1;32m"  # Красный цвет, если средняя загрузка превышает порог
    else
        echo $avg
    fi
}


export PS1='\[\e[1;32m\]\342\224\214[$(date "+%H:%M %d.%m.%Y")][\H($(get_ip_address))][FSpace: $(get_disk_info / 4 -h 80)/$(get_disk_info / 2 -h 100)(IUse: $(get_disk_info / 5 -i 90))][LAvg: $(get_load_average 1 80) $(get_load_average 2 85) $(get_load_average 3 90)]\n\342\224\224\342\225\274[\u][\w]\$\[\e[0m\] '
export PS2='\[\e[1;35m\][\A] -->\[\e[0m\] '  # Исправлен символ '>'

umask 022
export LS_OPTIONS='--color=auto'
eval "$(dircolors)"
alias grep='grep "$LS_OPTIONS"'
alias fgrep='fgrep "$LS_OPTIONS"'
alias egrep='egrep "$LS_OPTIONS"'
alias ll='ls "$LS_OPTIONS" -l'  # Кавычки для $LS_OPTIONS
alias iptbshow='iptables -n -L -v --line-numbers'
shopt -s histappend
PROMPT_COMMAND='history -a'
shopt -s cdspell
export HISTCONTROL="ignoredups"
export HISTIGNORE="&:ls:[bf]g:exit"
shopt -s cmdhist
export HISTTIMEFORMAT='%d.%m.%Y %H:%M:%S '
export TIMEFORMAT=$'\nreal %3R\tuser %3U\tsys %3S\tpcpu %P\n'

TZ='Asia/Krasnoyarsk'; export TZ

Теперь заходя в консоль я всегда могу оценить приблизительное состояние системы, что для меня является достаточно удобным.

 

Поделиться

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

(Required)