Linux登录时自动显示CPU硬盘内存使用信息(彩色进度条)

写了一个linux命令行(不依赖任何三方库,兼容所有主流Linux发行版),在ssh登录时自动显示当前机器的CPU内存硬盘的使用情况,还有彩色进度条的效果,非常直观。

这是运行效果图:

image-20211107234130702

通过Shell登录后会分别显示内存使用进度条、硬盘使用进度条、CPU负载信息。

黄色内存部分表示已经正在使用的内存;蓝色内存部分表示buffer/cache内存;绿色部分表示空闲内存。

黄色硬盘部分表示已经使用的硬盘空间;绿色硬盘部分表示空闲的硬盘空间。

唯一有点遗憾的就是CPU负载有3个值,分别代表1min内的负载,5min内的负载,15min以内的负载,不太好用进度条来表示。


下面是具体的代码,分为3部分(内存、硬盘、处理器)每个部分都是一个独立的linux命令,直接复制到终端里然后按回车,就能立即看到效果

大概是思路是使用free -kdfupdate等指令输出硬件资源使用情况,然后使用awk指令来处理输出的文本。

命令行主要是awk指令占了一多半,awk是Linux上用来处理文本的指令(非常强大),可以使用专门的awk脚本(语法很像c语言)来处理输入的文本信息


设置为登录信息的方法:(下面的命令请使用root权限操作)

  1. 创建文件/etc/update-motd.d/11-hardware-usage-summary,然后编辑(文件名其实可以随便取)
  2. 将下方你喜欢的代码块粘贴到这个shell脚本里(如果你愿意,可以将3块代码都粘贴进去)
  3. 添加执行权限:chmod +x 11-hardware-usage-summary
  4. 退出shell重新登陆即可看到效果

  1. 内存使用情况
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. 硬盘使用情况
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. 处理器负载情况
1
uptime | awk -F "[ ,]" '{printf("CPU Load: %.2f  %.2f  %.2f\n", $(NF-2), $(NF-1), $(NF))}'