mod 中的 htop 状态栏

mod 中的 htop 状态栏

我想htop在我的 MOTD 中放置显示 CPU 使用率和内存百分比的状态栏,以便每次登录时都能看到有关系统健康状态的概述。

知道如何实现这个吗?

更新:我想要的是带有百分比条的可视化效果。不仅仅是数值。

答案1

我按照自己的方式做了。(抱歉有太多的 bash 代码)

#
# cpu usage
#
cpu_cores=$(cat /proc/cpuinfo | grep "processor" | wc -l)
i=0
cpu_out_1=($(cat /proc/stat | grep "cpu"))
# the longer we sleep the more accurate is the calculated percentage
sleep 0.3
cpu_out_2=($(cat /proc/stat | grep "cpu"))

cpu_out_colcount=($(cat /proc/stat | head -n 1))
cpu_out_colcount=${#cpu_out_colcount[@]}

while [ $i -lt $cpu_cores ]; do
    cpu_index=$(($i * $cpu_out_colcount + $cpu_out_colcount + 1))
    cpu_load_1=(${cpu_out_1[@]:$cpu_index:4})
    cpu_load_2=(${cpu_out_2[@]:$cpu_index:4})
    cpu_sum_1=$((cpu_load_1[0] + cpu_load_1[1] + cpu_load_1[2] + cpu_load_1[3]))
    cpu_sum_2=$((cpu_load_2[0] + cpu_load_2[1] + cpu_load_2[2] + cpu_load_2[3]))
    cpu_sum_diff=$((cpu_sum_2 - cpu_sum_1))
    cpu_idle_1=${cpu_load_1[3]}
    cpu_idle_2=${cpu_load_2[3]}
    cpu_idle_diff=$((cpu_idle_2 - cpu_idle_1))
    cpu_perc=$((100 - (100 * $cpu_idle_diff / $cpu_sum_diff)))
    printf "${COLOR_HEADER}"
    printf '  CPU %-2d ' "$i"
    printf "${COLOR_NONE}"
    print_bar $cpu_perc 30 60
    printf "\n"
    i=$((i+1));
done;

print_bar一个生成彩色百分比条的函数:

function print_bar() {
    prcntg=$1
    warn=$2
    crit=$3
    bar_color=$COLOR_OK
    if [ $prcntg -gt $warn ]; then
        bar_color=$COLOR_WARN
    fi
    if [ $prcntg -gt $crit ]; then
        bar_color=$COLOR_CRIT
    fi

    bar_width_fill=$((BAR_WIDTH * prcntg / 100))
    bar_width_empty=$((BAR_WIDTH - bar_width_fill))

    printf -v bar "%${bar_width_fill}s" ""
    printf -v nbar "%${bar_width_empty}s" ""
    printf "${bar_color}"
    printf '%3d%% %s' "$prcntg" "${bar// /█}"
    printf "${COLOR_NONE}"
    printf '%s' "${nbar// /▒}"
}

答案2

检查一下:

https://stackoverflow.com/questions/17534591/htop-output-to-human-readable-file

特别是 htop 作者 Hisham HM 的回答

简短回答:你真的做不到,ps而是使用

相关内容