我想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
而是使用