Решил немного заморочиться и вывести немного больше информации в строке приглашения для удобства. Помимо стандартных данных которые ранее выводились, такие как время, хост, пользователь и каталог, решил добавить в вывод 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
Теперь заходя в консоль я всегда могу оценить приблизительное состояние системы, что для меня является достаточно удобным.
Добавить комментарий