通过shell编写内存监视的脚本来介绍一些基本shell脚本操作

目录

知识概览

总体脚本编写

date

awk

grep

bc


知识概览

总体脚本编写


#!/bin/bash#定义日志的文件名和日期
cdate=$(date +%Y%m%d%H%M%S)
logfile="/tmp/memlog_{$0}.log"#拿到ip
ip_addr=$(ip add|grep "ens33$"|awk '{print $2}')#总内存和使用的内存
mem_all=$(free -m|head -2|tail -1|awk '{print $2}')
mem_used=$(free -m|head -2|tail -1|awk '{print $3}')#计算使用率
percent=$(echo "scale=2;$mem_used/$mem_all*100"|bc)#定义一个警告的阈值,然后进行比较
thereshold=80
flag=$(echo "$percent > $thereshold"|bc)
if (( $flag == 1 ));thenecho "$cdate $ip_addr Total:{$mem_all}M Mem used:${percent}%" >>$logfile
elseecho "内存的使用率在合理范围内"
fi

date

这里写一个日志,所以获取具体时间来做日志命名,非常需要注意的是date与+之间一定要打一个空格,没有空格的话就会报错:

#定义日志的文件名和日期
cdate=$(date +%Y%m%d%H%M%S)
logfile="/tmp/memlog_{$0}.log"

awk

(head和tail在前面的文章中已经讲过,所以这里不做过多的赘述,两者通过管道符号,可以获得你想要的任何一行)

#总内存和使用的内存
mem_all=$(free -m|head -2|tail -1|awk '{print $2}')
mem_used=$(free -m|head -2|tail -1|awk '{print $3}')

free -m:这个可以获取内存的信息

 total--->总内存大小
used--->使用了的内存大小
free--->没有使用的
shared---->共享内存,其实也是使用的,有的程序可以共享内存空间
buff/cache--->buff是指缓存,是属于内存空间的,临时存放数据的地方。cache是读取磁盘里的数据到内存里的临时存放数据的地方
available--->可用的内存空间,给下一个程序可以使用的内存空间,一个理论值。

获得了指定行之后,使用awk可以做文本提取,这里每个空格代表一个位置变量,通过$2,$3可以获得对应的数字。

grep

#拿到ip
ip_addr=$(ip add|grep "ens33$"|awk '{print $2}')

ip add命令可以获取机器ip:

grep作为文本抓取工具,通过" "引起要找的关键字,可以找到对应的行数,这里找到ens33结尾的行,这一行正好是ip所在行,由此获得ip地址。

bc

bc是linux自带的运算器。

[root@localhost ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
4*4
16
quit

输入quit就可以退出。
可以用bc进行小数运算:

[root@localhost ~]# echo 4.6+4.6|bc
9.2

保留小数的运算,scale表示精确到小数点后两位:

[root@localhost ~]# echo "scale=2;56/5"|bc
11.20

所以下面这一段代码的意义是:使用bc工具算出使用率,但是小数在bc中的0会被隐藏,所以乘以100,并且保留两位小数。

#计算使用率
percent=$(echo "scale=2;$mem_used/$mem_all*100"|bc)

最后一段:这里使用bc做比较判断是否超出我们定的阈值80,超出就把它记录到日志中,没有超出就提示监管者没有超出。这样就写了一个工作中可以使用的简易的内存监控脚本。

#定义一个警告的阈值,然后进行比较
thereshold=80
flag=$(echo "$percent > $thereshold"|bc)
if (( $flag == 1 ));thenecho "$cdate $ip_addr Total:{$mem_all}M Mem used:${percent}%" >>$logfile
elseecho "内存的使用率在合理范围内"
fi

如果有问题,欢迎评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/707576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用Fastapi上传文件?先从请求体数据讲起

文章目录 1、请求体数据2、form表单数据3、小文件上传1.单文件上传2.多文件上传 4、大文件上传1.单文件上传2.多文件上传 1、请求体数据 前面我们讲到,get请求中,我们将请求数据放在url中,其实是非常不安全的,我们更愿意将请求数…

第三百七十二回

文章目录 1. 概念介绍2. 实现方法2.1 maskFilter2.2 shader 3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"两种阴影效果"相关的内容,本章回中将介绍如何绘制阴影效果.闲话休提,让我们一起Talk Flutter吧。 1. 概…

java多线程并发实战,java高并发场景面试题

阶段一:筑基 Java基础掌握不牢,对于一个开发人员来说无疑是非常致命的。学习任何一个技术知识无疑不是从基础开始;在面试的时候,面试官无疑不是从基础开始拷问。 内容包括:Java概述、Java基本语法、Java 执行控制流程、…

html5盒子模型

1.边框的常用属性 border-color 属性 说明 示例 border-top-color 上边框颜色 border-top-color:#369; border-right-color 右边框颜色 border-right-color:#369; border-bottom-color 下边框颜色 border-bottom-color:#fae45b; border-left-color 左边框颜色…

java springmvc/springboot 项目通过HttpServletRequest对象获取请求体body工具类

请求 测试接口 获取到的 获取到打印出的json字符串里有空格这些,在json解析的时候正常解析为json对象了。 工具类代码 import lombok.extern.slf4j.Slf4j; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.we…

pikachu之xss获取键盘记录

前备知识 跨域 跨域(Cross-Origin)是指在互联网中,浏览器为了保护用户信息安全而实施的一种安全策略——同源策略(Same-Origin Policy),即浏览器禁止一个域上的文档或者脚本(如通过JavaScript发…

从零开始学习Netty - 学习笔记 -Netty入门-ChannelFuture

5.2.2.Channel Channel 的基本概念 在 Netty 中,Channel 是表示网络传输的开放连接的抽象。它提供了对不同种类网络传输的统一视图,比如 TCP 和 UDP。 Channel 的生命周期 Channel 的生命周期包括创建、激活、连接、读取、写入和关闭等阶段。Netty 中…

QT C++实战:实现用户登录页面及多个界面跳转

主要思路 一个登录界面,以管理员Or普通用户登录管理员:一个管理员的操作界面,可以把数据录入到数据库中。有返回登陆按钮,可以选择重新登陆(管理员Or普通用户普通用户:一个主界面,负责展示视频…

vue组件中data为什么必须是一个函数

查看本专栏目录 关于作者 还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas&#x…

Spring与SpringBoot入门

Spring入门 要使用Spring最起码需要引入两个依赖: <!-- Spring Core&#xff08;核心&#xff09; --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.20</version>…

密码学系列(四)——对称密码2

一、RC4 RC4&#xff08;Rivest Cipher 4&#xff09;是一种对称流密码算法&#xff0c;由Ron Rivest于1987年设计。它以其简单性和高速性而闻名&#xff0c;并广泛应用于网络通信和安全协议中。下面是对RC4的详细介绍&#xff1a; 密钥长度&#xff1a; RC4的密钥长度可变&am…

GPT 的基础 - T(Transformer)

我们知道GPT的含义是&#xff1a; Generative - 生成下一个词 Pre-trained - 文本预训练 Transformer - 基于Transformer架构 我们看到Transformer模型是GPT的基础&#xff0c;这篇博客梳理了一下Transformer的知识点。 BERT: 用于语言理解。&#xff08;Transformer的Encoder…

九州金榜|父亲在教育中的作用及重要性

随着社会进步&#xff0c;对比以前教育&#xff0c;现在父亲在教育中的作用越来越明显&#xff0c;孩子的教育离不开父亲&#xff0c;父亲在孩子教育中有什么作用&#xff1f;重要性又是什么呢&#xff1f;下面九州金榜家庭教育就带大家一起分析一下作为父亲&#xff0c;在孩子…

VUE3搭载到服务器

1.搭建服务器 使用 Windows 自带的 IIS 作为服务器。 步骤如下&#xff1a;https://blog.csdn.net/qq_62464995/article/details/130140673 同时&#xff0c;上面的步骤中&#xff0c;还使用了 cpolar 将 IIS 本地网址映射到公共网址。 注&#xff1a; cpolar客户端&#xf…

Ant for Blazor做单个表的增删查改

Ant for Blazor做单个表的增删查改 2024年02月27日花了一天时间弄出来了&#xff0c;基本弄好了&#xff0c;vs2022blazor servernet8,引用的AntDesign版本是0.17.4 代码里的model和repository是用自己牛腩代码生成器生成的东西&#xff0c;sqlsugar的&#xff0c;记得在prog…

括号生成(力扣题目22)

题目描述&#xff1a; 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())()&q…

Modern C++ std::any的实现原理

1. 前言 std::any 是 C17 中引入的一个新特性&#xff0c;它是一个类型安全的容器&#xff0c;可以在其中存储任何类型(但此类型必须可拷贝构造)的值&#xff0c;包括基本类型、自定义类型、指针等。相比于void* 指针&#xff0c;std::any 更为类型安全&#xff0c;可以避免由…

NC65 rest接口 开发 NC65接口开发

一、在对应模块META-INF下编写 xxx.rest 文件,也要放在Home里对应的目录下。 二、开发接口&#xff0c;继承extends AbstractUAPRestResource&#xff0c;&#xff08;有的项目会继承别的方法如&#xff1a;AbstractNCCRestResource&#xff0c;MTFRestResource&#xff1b;有…

使用 kubeadm 部署k8s集群

一、所有节点系统初始化 1、常规初始化 2、内核版本升级以及内核限制文件参数修改 还可以考虑将旧版本的内核卸载 二、准备nginx负载均衡器和keepalived nginx四层代理&#xff1a; keepalived配置&#xff1a; nginx检测脚本&#xff1a; 三、所有节点部署docker&#xff0c…

SQL函数学习记录

聚合函数 函数是编程语言的基础之一&#xff0c;在对数字的运算中&#xff0c;我们用的最多的就是聚合函数&#xff0c;本篇接下来就详细阐述下SQL中聚合函数的运用。 什么是聚合函数&#xff08;aggregate function&#xff09;&#xff1f; 聚合函数指的是对一组值执行计算…