实现目标:

在Linux上使用shell脚本回显系统当前的CPU使用率、内存使用率和磁盘空间使用率


1.CPU使用率:

使用top命令能够实时显示系统中各个进程的资源占用状况,所以这边可以使用top命令,截取CPU占用情况的那一段,之后输出想要的结果。

由于“top”命令是实时回显信息,不方便操作。所以使用“top -n1”,通过添加参数让top命令只显示一次结果。使用“top -n1”输出如下信息:

根据上图所显示的结果可以看出,CPU占用数据在第三行,所以我现在只需要第三行的数据。第三行的数据里有关键字“Cpu(s)”,使用fgrep命令可以根据关键字按行查找信息。所以此时我的命令变成了“top -n1 | fgrep “Cpu(s)””,运行结果如下图所示:

上图显示的是CPU的各类占用率:

  • us:用户空间占用CPU百分比
  • sy:内核空间占用CPU百分比
  • ni:用户进程空间内改变过优先级的进程占用CPU百分比
  • id:空闲CPU百分比
  • wa:等待输入输出的CPU时间百分比
  • hi:硬件中断
  • si:软件中断
  • st:虚拟机占用物理机的百分比

我想要获得CPU当前占用率,只需要使用100减去空闲CPU即可。
使用awk命令获取空闲CPU。awk默认按空格切割字符串,根据上图显示可以确认id的数值在第8个,使用100减去该值即可获取当前CPU占用率,所以使用命令“top -n1 | fgrep “Cpu(s)” | awk ‘{print 100-$8}’”,显示如下图所示:

2.内存使用率:

使用free命令可以查看系统当前内存使用情况,加上-m参数能够将数据以MB大小显示出来,这里使用命令“free -m”显示当前系统内存使用情况,结果如下图所示:

  • Men:物理内存
  • Swap:交换内存
  • total:总内存大小
  • used:已使用的大小
  • free:空闲大小
  • shared:被共享使用的物理内存大小
  • buff/cache:显示被 buffer 和 cache 使用的物理内存大小
  • available:显示还可以被应用程序使用的物理内存大小

我想要获得系统当前内存的占用率,只需要使用used的物理内存除以total的物理内存即可。
首先使用fgrep获取Mem的数据,如下图所示:

之后使用awk截取并显示内存占用率,使用输出函数printf来保留一位小数,结果如下图所示:


3.磁盘使用率:

使用df命令可以查看磁盘使用情况,添加参数-h将数据以可读形式输出,结果如下图所示:

/dev/vda1这行显示的是当前总磁盘使用情况,先使用fgrep命令获取这一行的数据,之后直接awk输出磁盘使用率(Use%)即可。结果如下图所示:

4.编写shell脚本

在知道了需要使用的命令之后,就可以开始编写shell脚本了。先使用date获取当前系统时间,之后获取CPU使用率,内存使用率和磁盘使用率。然后echo输出即可。代码如下:

#!/bin/bash
##############################################
#Filename: hellome.sh
#Description: 监控cpu、磁盘、内存使用率
##############################################logFile=/tmp/jiankong.log
#获取报警时间
now_time=`date '+%F %T'`#获取cpu使用率
#cpuUsage=`top -b -n5 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' '{split($1, vs, ","); v=vs[length(vs)]; sub(/\s+/, "", v);sub(/\s+/, "", v); printf "%d", 100-v;}'`
cpuUsage=`top -b -n1 | fgrep "Cpu" | awk '{print 100-$8,"%"}'`
#统计内存使用率
#mem_used_persent=`free -m | awk -F '[ :]+' 'NR==2{printf "%d", ($3)/$2*100}'`
mem_used_persent=`free -m | fgrep "Mem" | awk '{printf "%d", ($3)/$2*100}'`
#获取磁盘使用率
#data_name="/dev/vda1"
#diskUsage=`df -h | grep $data_name | awk -F '[ %]+' '{print $5}'`
diskUsage=`df -h | fgrep "/dev/vda1" | awk '{print $5}'`function check(){echo "当前时间:"${now_time}echo -e "CPU使用率:${cpuUsage}%\n磁盘使用率:${diskUsage}%\n内存使用率:${mem_used_persent}%"
#    if [[ "$cpuUsage" > 80 ]] || [[ "$diskUsage" > 80 ]] || [[ "$mem_used_persent" > 80 ]];then
#        echo "报警时间:${now_time}" > $logFile
#       echo -e "CPU使用率:${cpuUsage}% --> 磁盘使用率:${diskUsage}% --> 内存使用率:${mem_used_persent}%" >> $logFile
#    fi
}
function main(){check
}
main

执行脚本获得如下输出:

本学习笔记脚本所参考的文章:https://cloud.tencent.com/developer/article/1931440

【Linux学习笔记】Linux获取CPU使用率,内存使用率和磁盘使用率相关推荐

  1. java 收集系统资源_方法:Linux 下用JAVA获取CPU、内存、磁盘的系统资源信息

    CPU使用率: InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; StringTok ...

  2. [Linux学习笔记] Linux历史发展与应用

    2019独角兽企业重金招聘Python工程师标准>>> UNIX发展历史: (1) 1965年,美国麻省理工学院(MIT).通用电气公司(GE)及AT&T的贝尔实验室联合开发 ...

  3. linux学习笔记-- linux的 shell和linux C 程序 获取命令行参数和环境变量

    常用的linux指令基本都支持命令行参数 例如 : ls -l rm -r rm -f cp -r 那么 这些参数都是如何去被应用程序获取的呢? 学习记录一下 1. shell 脚本 1.1 shel ...

  4. Linux学习笔记——Linux、命令 01

    操作系统的发展史 Unix 1965年之前的时候,电脑并不像现在一样普遍,它可不是一般人能碰的起的,除非是军事或者学院的研究机构,而且当时大型主机至多能提供30台终端(30个键盘.显示器),连接一台电 ...

  5. Linux学习笔记-Linux下读写文件

    在Linux编程需要读写文件时,有两种方式: (1)ANSIC: 使用stdio.h里的函数.fopen, fclose, fwrite, fread (2)Linux API:Linux提供了另外一 ...

  6. 嵌入式linux学习笔记--sysinfo获取linux的开机时间

    // 这里是linux 2.3.48以上版本的内核的信息 #include <sys/sysinfo.h> // 需要包含的头文件 int sysinfo(struct sysinfo * ...

  7. linux学习笔记 linux内核6.0.2目录结构

    一.linux内核目录 arch 包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386.arm.arm64.powerpc.mips等.Linux内核目前已经支持30种左右的体系结构.在 ...

  8. Linux学习笔记——Linux磁盘管理

    Linux中的分区管理工具主要有:fdisk, parted, sfdisk fdisk命令 对于一块硬盘最多只能管理15个分区 命令格式:fdisk -l [-u] [device...] fdis ...

  9. Linux学习笔记-Linux下的设备文件

    在Linux下,有一种文件的类型叫设备文件. 在/dev目录下的文件基本上都是设备文件,文件属性以c或b打头(charactor, block) 设备文件用于代表一个物理设备 例如,声卡.显卡.键盘. ...

  10. linux内核字符驱动设备,Linux学习笔记——linux内核字符设备驱动-Go语言中文社区...

    尝试在树莓派安装的raspbian系统上进行linux字符设备驱动 1.更新安装kernel header源码 sudo apt-get update sudo apt-get install ras ...

最新文章

  1. 有谁还不会找技能Call跟我来(以打坐为例子)
  2. python函数结构_Python函数基础
  3. (转)DOS批处理的字符串功能
  4. Spring Boot 集成 Druid 监控数据源
  5. 居中的文字在小屏幕下后面的换行
  6. mysql重置所有表_Mysql脚本之清空当前数据库下的所有表中数据,并重置自增id
  7. unknow host service.gradle.org, proxy settings in gradle
  8. Unity的序列化机制探索
  9. LeetCode160相交链表
  10. 【python】matplotlib绘图显示不了中文,且没有SimHei、FangSong等字体
  11. php 判断是否为中文,php判断是否为中文正则表达式大全
  12. LINUX无法定位软件包
  13. HDU 5336 XYZ and Drops (模拟+搜索,详解)
  14. 产品生命周期管理(PLM)的内涵
  15. 一个软件项目如何做成本预估
  16. 用vivo手机拍照一定要先打开这个设置,不然白浪费这么强大的手机
  17. javaWeb项目跑起来吧
  18. 汽车电子之功能安全介绍
  19. 验证身份证号码是否有效
  20. discuz 模版 php函数,dz function template 函数解析

热门文章

  1. 将数据导入到MATLAB
  2. Vue实战篇四:创建多步骤表单
  3. chrome控制台酷炫主题
  4. python经济学函数_Sargent的量化经济学(8):Python工作原理
  5. azurecdn搭建https_Azure CDN配置SSL
  6. Java中字符串连接符“+“
  7. 在家运维不用慌 | 盘点那些远程运维中的云上利器
  8. 编程计算并输出加工资后的员工工资。
  9. c语言指针指向数组首地址,C语言指向数组元素的指针
  10. HTML标签解释大全h1_h6,html标题标签h1-h6讲解