写了一个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重新登陆即可看到效果
- 内存使用情况
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| 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) } }'
|
- 硬盘使用情况
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| 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) } }'
|
- 处理器负载情况
1
| uptime | awk -F "[ ,]" '{printf("CPU Load: %.2f %.2f %.2f\n", $(NF-2), $(NF-1), $(NF))}'
|