获取linuxIP、内存、cpu、磁盘IO等信息的Shell脚本及其讲解

shell基础知识

1.grep

grep是一个在Unix和Unix-like系统上使用的命令行工具,用于在文本文件中搜索匹配指定模式的行。它的名字来自于"global regular expression print"(全局正则表达式打印)的缩写。grep的基本用法是通过指定一个正则表达式模式和一个文件名(或者从标准输入读取数据),来查找和打印与模式匹配的行。它可以用于简单的文本搜索,也可以与其他命令结合使用来实现更复杂的操作。Linux管道(Pipeline)是一种将多个命令连接在一起形成一个处理数据流的方法。通过管道,一个命令的输出可以直接作为另一个命令的输入,实现数据的连续处理,提高命令行的灵活性和效率。当在两个命令之间设置管道时,管道符|左边命令的输出就变成了右边命令的输入。只要第一个命令向标准输出写入,而第二个命令是从标准输入读取,那么这两个命令就可以形成一个管道。大部分的 Linux 命令都可以用来形成管道。举个例子:

history |grep "find"

在这里插入图片描述

2.awk

awk是一种强大的文本处理工具,用于从文本文件中提取和处理数据。它以逐行方式扫描文件,并根据指定的规则执行操作。

这将打印文件中每行的第一列和第三列:

awk '{print $1, $3}' file
选项参数功能
-F指定输入文件分隔符
-v赋值一个用户定义变量

3.cut

cut的工作就是剪,具体的说就是在文件中负责剪数据用的。cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。

选项参数功能
-f列号,提取第几列
-d分隔符,按照指定分割符分割列

1.获取要监控的本地服务器IP地址

IP=`ifconfig | grep inet | grep -vE 'inet6|127.0.0.1' | awk '{print $2}'`
echo "IP地址:"$IP

在这里插入图片描述

2.获取cpu总核数

cpu_num=`grep -c "model name" /proc/cpuinfo`
echo "cpu总核数:"$cpu_num

在这里插入图片描述

  • 在linux的/proc目录下存放了系统运行的很多系统资源信息,其中**/proc/cpuinfo**存放了系统运行时cpu的很多重要信息。
    所有的cpu核信息由model name字符串给出,
  • 通过命令grep -c “model name” /proc/cpuinfo 可以计算出文件 /proc/cpuinfo中出现字符串model name出现的次数,就可以得到cpu总核数。-c 表示统计字符串出现次数。

3.获取CPU利用率

top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。
在这里插入图片描述

  • us 用户空间占用CPU百分比
  • sy 内核空间占用CPU百分比
  • ni 用户进程空间内改变过优先级的进程占用CPU百分比
  • id 空闲CPU百分比
  • wa 等待输入输出的CPU时间百分比
  • hi 硬件中断
  • si 软件中断
# 获取用户空间占用CPU百分比
cpu_user=`top -b -n 1 | grep Cpu | awk '{print $2}'`
echo "用户空间占用CPU百分比:"$cpu_user# 获取内核空间占用CPU百分比
cpu_system=`top -b -n 1 | grep Cpu | awk '{print $4}'`
echo "内核空间占用CPU百分比:"$cpu_system# 获取空闲CPU百分比
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $8}'`
echo "空闲CPU百分比:"$cpu_idle# 获取等待输入输出占CPU百分比
cpu_iowait=`top -b -n 1 | grep Cpu | awk '{print $10}'`
echo "等待输入输出占CPU百分比:"$cpu_iowait

4.获取CPU上下文切换和中断次数

在这里插入图片描述

这是vmstat命令的输出结果,它显示了系统的各种指标,包括进程、内存、交换空间、IO、系统和CPU利用率等。以下是各列的含义:

  • procs:进程统计信息

    • r:运行队列中的进程数
    • b:处于非中断睡眠状态的进程数
  • memory:内存统计信息

    • 交换:交换空间的使用量
    • 空闲:空闲内存量
    • 缓冲:用作缓冲的内存量
    • 缓存:用作缓存的内存量
  • swap:交换空间统计信息

    • si:每秒从磁盘交换到内存的数据量
    • so:每秒从内存交换到磁盘的数据量
  • io:IO统计信息

    • bi:每秒从块设备读取的块数
    • bo:每秒写入块设备的块数
  • system:系统统计信息

    • in:每秒中断的数量
    • cs:每秒上下文切换的数量
  • cpu:CPU统计信息

    • us:用户空间占用CPU的百分比
    • sy:内核空间占用CPU的百分比
    • id:CPU空闲时间的百分比
    • wa:等待IO的CPU时间的百分比
    • st:被虚拟化偷取的时间的百分比
# 获取CPU中断次数
cpu_interrupt=`vmstat -n 1 1 | sed -n 3p | awk '{print $11}'`
echo "CPU中断次数:"$cpu_interrupt# 获取CPU上下文切换次数
cpu_context_switch=`vmstat -n 1 1 | sed -n 3p | awk '{print $12}'`
echo "CPU上下文切换次数:"$cpu_context_switch# 获取任务队列(就绪状态等待的进程数)
cpu_task_length=`vmstat -n 1 1 | sed -n 3p | awk '{print $1}'`
echo "CPU任务队列长度:"$cpu_task_length

5.获取CPU负载信息

uptime命令显示了系统的运行时间以及系统的平均负载(load average)。

在这里插入图片描述

输出解释如下:

  • 16:28:42:当前系统时间。
  • up 3:17:系统已经运行了3小时17分钟。
  • 1 user:当前有1个用户登录系统。
  • load average: 1.26, 1.62, 1.85:系统的平均负载,分别表示过去1分钟、5分钟和15分钟的平均负载情况。在这个例子中,1分钟的平均负载是1.26,5分钟的平均负载是1.62,15分钟的平均负载是1.85。
# 获取CPU15分钟前到现在的负载平均值
cpu_load_15min=`uptime | awk '{print $10}'`
echo "CPU 15分钟前到现在的负载平均值:"$cpu_load_15min# 获取CPU5分钟前到现在的负载平均值
cpu_load_5min=`uptime | awk '{print $9}' | cut -f 1 -d ','`
echo "CPU 5分钟前到现在的负载平均值:"$cpu_load_5min# 获取CPU1分钟前到现在的负载平均值
cpu_load_1min=`uptime | awk '{print $8}' | cut -f 1 -d ','`
echo "CPU 1分钟前到现在的负载平均值:"$cpu_load_1min

6.获取内存信息

在这里插入图片描述

# 获取物理内存总量
mem_total=`free | grep "内存" | awk '{print $2}'`
echo "物理内存总量:"$mem_total# 获取操作系统已使用内存总量
mem_sys_used=`free | grep "内存" | awk '{print $3}'`
echo "已使用内存总量(操作系统):"$mem_sys_used# 获取操作系统未使用内存总量
mem_sys_free=`free | grep "内存" | awk '{print $4}'`
echo "剩余内存总量(操作系统):"$mem_sys_free

7. 获取指定设备磁盘I/O统计信息

iostat命令用于显示CPU使用情况和磁盘I/O统计信息。如果没有指定选项或参数,iostat将显示所有活动的设备的平均统计信息,包括CPU利用率、设备的传输速率、请求队列长度等。

在这里插入图片描述

echo "指定设备(/dev/sda)的统计信息"
# 每秒向设备发起的读请求次数
disk_sda_rs=`iostat -kx | grep sda| awk '{print $2}'`
echo "每秒向设备发起的读请求次数:"$disk_sda_rs# 每秒向设备发起的写请求次数
disk_sda_ws=`iostat -kx | grep sda| awk '{print $8}'`
echo "每秒向设备发起的写请求次数:"$disk_sda_ws# 向设备发起的I/O请求队列长度平均值
disk_sda_avgqu_sz=`iostat -kx | grep sda| awk '{print $22}'`
echo "向设备发起的I/O请求队列长度平均值"$disk_sda_avgqu_sz# 向设备发起I/O请求的CPU时间百分占比
disk_sda_util=`iostat -kx | grep sda| awk '{print $23}'`
echo "向设备发起I/O请求的CPU时间百分占比:"$disk_sda_util

完整脚本

在这里插入图片描述

#!/bin/bash
# 获取要监控的本地服务器IP地址
IP=`ifconfig | grep inet | grep -vE 'inet6|127.0.0.1' | awk '{print $2}'`
echo "IP地址:"$IP# 获取cpu总核数
cpu_num=`grep -c "model name" /proc/cpuinfo`
echo "cpu总核数:"$cpu_num# 1、获取CPU利用率
# 获取用户空间占用CPU百分比
cpu_user=`top -b -n 1 | grep Cpu | awk '{print $2}'`
echo "用户空间占用CPU百分比:"$cpu_user# 获取内核空间占用CPU百分比
cpu_system=`top -b -n 1 | grep Cpu | awk '{print $4}'`
echo "内核空间占用CPU百分比:"$cpu_system# 获取空闲CPU百分比
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $8}'`
echo "空闲CPU百分比:"$cpu_idle# 获取等待输入输出占CPU百分比
cpu_iowait=`top -b -n 1 | grep Cpu | awk '{print $10}'`
echo "等待输入输出占CPU百分比:"$cpu_iowait#2、获取CPU上下文切换和中断次数
# 获取CPU中断次数
cpu_interrupt=`vmstat -n 1 1 | sed -n 3p | awk '{print $11}'`
echo "CPU中断次数:"$cpu_interrupt# 获取CPU上下文切换次数
cpu_context_switch=`vmstat -n 1 1 | sed -n 3p | awk '{print $12}'`
echo "CPU上下文切换次数:"$cpu_context_switch#3、获取CPU负载信息
# 获取CPU15分钟前到现在的负载平均值
cpu_load_15min=`uptime | awk '{print $10}'`
echo "CPU 15分钟前到现在的负载平均值:"$cpu_load_15min# 获取CPU5分钟前到现在的负载平均值
cpu_load_5min=`uptime | awk '{print $9}' | cut -f 1 -d ','`
echo "CPU 5分钟前到现在的负载平均值:"$cpu_load_5min# 获取CPU1分钟前到现在的负载平均值
cpu_load_1min=`uptime | awk '{print $8}' | cut -f 1 -d ','`
echo "CPU 1分钟前到现在的负载平均值:"$cpu_load_1min# 获取任务队列(就绪状态等待的进程数)
cpu_task_length=`vmstat -n 1 1 | sed -n 3p | awk '{print $1}'`
echo "CPU任务队列长度:"$cpu_task_length#4、获取内存信息
# 获取物理内存总量
mem_total=`free | grep "内存" | awk '{print $2}'`
echo "物理内存总量:"$mem_total# 获取操作系统已使用内存总量
mem_sys_used=`free | grep "内存" | awk '{print $3}'`
echo "已使用内存总量(操作系统):"$mem_sys_used# 获取操作系统未使用内存总量
mem_sys_free=`free | grep "内存" | awk '{print $4}'`
echo "剩余内存总量(操作系统):"$mem_sys_free#5、获取磁盘I/O统计信息
echo "指定设备(/dev/sda)的统计信息"
# 每秒向设备发起的读请求次数
disk_sda_rs=`iostat -kx | grep sda| awk '{print $2}'`
echo "每秒向设备发起的读请求次数:"$disk_sda_rs# 每秒向设备发起的写请求次数
disk_sda_ws=`iostat -kx | grep sda| awk '{print $8}'`
echo "每秒向设备发起的写请求次数:"$disk_sda_ws# 向设备发起的I/O请求队列长度平均值
disk_sda_avgqu_sz=`iostat -kx | grep sda| awk '{print $22}'`
echo "向设备发起的I/O请求队列长度平均值"$disk_sda_avgqu_sz# 向设备发起I/O请求的CPU时间百分占比
disk_sda_util=`iostat -kx | grep sda| awk '{print $23}'`
echo "向设备发起I/O请求的CPU时间百分占比:"$disk_sda_util

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

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

相关文章

Redis之十:Spring Data Redis --- CrudRepository方式

SpringData Redis CrudRepository方式 Spring Data Redis 的 CrudRepository 是 Spring Data 框架中用于提供基础 CRUD(创建、读取、更新和删除)操作的一个接口。在与 Redis 集成时,尽管 Redis 是一个键值存储系统,并没有像关系型…

iOS卡顿原因与优化

iOS卡顿原因与优化 1. 卡顿简介 卡顿: 指用户在使用过程中出现了一段时间的阻塞,使得用户在这一段时间内无法进行操作,屏幕上的内容也没有任何的变化。 卡顿作为App的重要性能指标,不仅影响着用户体验,更关系到用户留…

零拷贝技术深入分析

一、零拷贝 在前面的文章“深浅拷贝、COW及零拷贝”中对零拷贝进行过分析,但没有举例子,也没有深入进行展开分析。本文将结合实际的例程对零拷贝进行更深入的分析和说明。 在传统的IO操作中,以文件通过网络传输为例 ,一般会经历以…

深度学习 精选笔记(4)线性神经网络-交叉熵回归与Softmax 回归

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

并查集(Disjoint Set)

目录 1.定义 2.初始化 3.查找 4.合并 4.1.按秩合并(启发式合并) 5.例题 题目描述 输入格式 输出格式 输入输出样例 说明/提示 1.定义 并查集,也称为不相交集合数据结构,是一种用于管理元素分组以及查找元素所属组的数…

MWC 2024丨世界移动通信大会圆满结束,美格智能5G-A、端侧AI解决方案掀热潮

2月26日—29日,全球瞩目的2024世界移动通信大会(MWC)在西班牙巴塞罗那隆重举办。本届MWC以“未来先行”为主题,围绕“超越5G”、“智联万物”、“AI人性化”等话题展开,吸引了全球2400多家电信运营商、通信设备和终端制…

亿道信息新品EM-T195轻薄型工业平板,隆重登场!

EM-T195是一款轻巧但坚固的平板电脑,仅 650克重、10.5mm毫米厚,即使没有额外的便携配件进行辅助,您也可以轻松将其长时间随身携带。耐用性外壳完全密封,防尘防潮;出色的坚固性和可靠性,使T195天生适合在苛刻…

政府采购标书制作的要点解析

导语:政府采购是政府为满足公共利益,按照法定程序和标准,通过招标、竞争性谈判等方式,购买商品、工程和服务的行为。标书作为政府采购活动中的重要文件,其制作质量直接影响到项目的顺利进行。本文将围绕政府采购标书制…

导览系统厂家|景区电子导览|手绘地图|AR导览|语音导览系统

随着元宇宙、VR、AR等新技术的快速发展,旅游服务也更加多元化、智能化。景区导览系统作为旅游服务的重要组成部分,其形式更加多元化智能化。智能导览系统作为一种新的服务方式,能够为游客提供更加便捷的旅游服务和游览体验,也逐渐…

Android Gradle开发与应用 (四) : Gradle构建与生命周期

1. 前言 前几篇文章,我们对Gradle中的基本知识,包括Gradle项目结构、Gradle Wrapper、GradleUserHome、Groovy基础语法、Groovy语法概念、Groovy闭包等知识点,这篇文章我们接着来介绍Gradle构建过程中的知识点。 2. Project : Gradle中构建…

平台工程: 用Backstage构建开发者门户 - 1

本文介绍了如何使用开源Backstage构建自己的开发者门户,并基于此实践平台工程。本系列共两篇文章,这是第一篇。原文: Platform Engineering: Building Your Developer Portal with Backstage — Part 1 在上一篇文章(平台工程与安全)中,我们介…

Python实现PPT演示文稿中视频的添加、替换及提取

无论是在教室、会议室还是虚拟会议中,PowerPoint 演示文稿都已成为一种无处不在的工具,用于提供具有影响力的可视化内容。PowerPoint 提供了一系列增强演示的功能,在其中加入视频的功能可以大大提升整体体验。视频可以传达复杂的概念、演示产…

Linux - 基本开发工具

1、软件包管理器 yum 1.1、什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方…

泰迪智能科技企业数据挖掘平台使用场景

企业数据挖掘平台助力企业数据挖掘,数据挖掘平台也在多个领域发挥着重要的作用。 企业数据挖掘平台具有数据抓取、数据清洗、数据分析、机器学习等多项功能,广泛应用于企业的各个领域,包括:金融行业、医疗行业、交通领域、教育、制…

【SVN】使用TortoiseGit删除Git分支

使用TortoiseGit删除Git分支 前言 平时我在进行开发的时候,比如需要开发一个新功能,这里以蘑菇博客开发服务网关-gateway功能为例 一般我都会在原来master分支的基础上,然后拉取一个新的分支【gateway】,然后在 gateway分支上进…

SpringBoot:Invalid bound statement (not found)的原因和解决方案

🐓 报错信息: (无效绑定声明)找不到 解析: 你的mapper实例对象和对应的mapper.xml对象未找到 🐓 排查: 情况一: 1.排除相对应的mapper实例对象路径是否正确 查看相对应的mapper中…

无人机飞行控制系统技术,四旋翼无人机控制系统建模技术详解

物理建模是四旋翼无人机控制系统建模的基础,主要涉及到无人机的物理特性和运动学特性。物理建模的目的是将无人机的运动与输入信号(如控制电压)之间的关系进行数学描述。 四旋翼无人直升机是具有四个输入力和六个坐标输出的欠驱动动力学旋翼…

【前端素材】推荐优质后台管理系统网页Stisla平台模板(附源码)

一、需求分析 1、系统定义 后台管理系统是一种用于管理和控制网站、应用程序或系统的管理界面。它通常被设计用来让网站或应用程序的管理员或运营人员管理内容、用户、数据以及其他相关功能。后台管理系统是一种用于管理网站、应用程序或系统的工具,通常由管理员使…

kubectl 声明式资源管理方式

目录 介绍 YAML 语法格式 命令 应用yaml文件指定的资源 删除yaml文件指定的资源 查看资源的yaml格式信息 查看yaml文件字段说明 查看 api 资源版本标签 修改yaml文件指定的资源 离线修改 在线修改 编写yaml文件 创建资源对象 查看创建的pod资源 创建service服务对…

STL容器之string类

文章目录 STL容器之string类1、 什么是STL2、STL的六大组件3、string类3.1、string类介绍3.2、string类的常用接口说明3.2.1、string类对象的常见构造3.2.2、string类对象的容量操作3.2.3、string类对象的访问及遍历操作3.2.4、 string类对象的修改操作3.2.5、 string类非成员函…