写了一个linux命令行(不依赖任何三方库,兼容所有主流Linux发行版),在ssh登录时自动显示当前机器的CPU内存硬盘的使用情况,还有彩色进度条的效果,非常直观。
最开始是我在树莓派实验室的一篇文章找到的灵感,但用纯文字方式输出的方式我不喜欢,我要用彩色进度条来显示!
这是运行效果图:
通过Shell登录后会分别显示内存使用进度条、硬盘使用进度条、CPU负载信息。
黄色内存部分表示已经正在使用的内存;蓝色内存部分表示buffer/cache内存;绿色部分表示空闲内存。
黄色硬盘部分表示已经使用的硬盘空间;绿色硬盘部分表示空闲的硬盘空间。
唯一有点遗憾的就是CPU负载有3个值,分别代表1min内的负载,5min内的负载,15min以内的负载,不太好用进度条来表示。
下面是具体的代码,分为3部分(内存、硬盘、处理器)每个部分都是一个独立的linux命令,直接复制到终端里然后按回车,就能立即看到效果
大概是思路是使用free -k
、df
、update
等指令输出硬件资源使用情况,然后使用awk
指令来处理输出的文本。
命令行主要是awk指令占了一多半,awk是Linux上用来处理文本的指令(非常强大),可以使用专门的awk脚本(语法很像c语言)来处理输入的文本信息
设置为登录信息的方法:(下面的命令请使用root权限操作)
- 创建文件
/etc/update-motd.d/11-hardware-usage-summary
,然后编辑(文件名其实可以随便取) - 将下方你喜欢的代码块粘贴到这个shell脚本里(如果你愿意,可以将3块代码都粘贴进去)
- 添加执行权限:
chmod +x 11-hardware-usage-summary
- 退出shell重新登陆即可看到效果
- 内存使用情况
free -k | awk '
function draw_bar(percnet, total, fill, color)
{
for(i=0;i<percnet * total;i++)
printf(color fill color_reset)
}
{
color_black = "\033[30m"
color_white = "\033[37m"
color_green = "\033[32m"
color_darkgreen = "\033[36m"
color_blue = "\033[34m"
color_yellow = "\033[33m"
color_purple = "\033[35m"
color_reset = color_white
fill_char = "#"
bar_len = 30
if(NR==2)
{
mem_total = $2
mem_shard = $5
mem_used = $3 + mem_shard
mem_buffcache = $6
mem_free = $4
# mem_available = $7
printf("Memory: %.1f / %.1f Gb [", mem_used / 1024 / 1024, mem_total / 1024 / 1024)
draw_bar(mem_used / mem_total, bar_len, fill_char, color_yellow)
draw_bar(mem_buffcache / mem_total, bar_len, fill_char, color_darkgreen)
draw_bar(mem_free / mem_total, bar_len, fill_char, color_green)
printf(" %.1f%%]\n", mem_used * 100 / mem_total)
}
}'
- 硬盘使用情况
df | awk '
function draw_bar(percnet, total, fill, color)
{
for(i=0;i<percnet * total;i++)
printf(color fill color_reset)
}
{
color_black = "\033[30m"
color_white = "\033[37m"
color_green = "\033[32m"
color_blue = "\033[34m"
color_yellow = "\033[33m"
color_purple = "\033[35m"
color_reset = color_white
fill_char = "#"
bar_len = 30
if($NF=="/")
{
disk_total = $2
disk_used = $3
disk_available = $4
disk_used_progress = $5
printf("Disk: %.1f / %.1f Gb [", disk_used / 1024 / 1024, disk_total / 1024 / 1024)
draw_bar(disk_used / disk_total, bar_len, fill_char, color_yellow)
draw_bar(disk_available / disk_total, bar_len, fill_char, color_green)
printf(" %s]\n", disk_used_progress)
}
}'
- 处理器负载情况
uptime | awk -F "[ ,]" '{printf("CPU Load: %.2f %.2f %.2f\n", $(NF-2), $(NF-1), $(NF))}'