当前位置:   article > 正文

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

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

shell基础知识

1.grep

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

history |grep "find"
  • 1

在这里插入图片描述

2.awk

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

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

awk '{print $1, $3}' file
  • 1
选项参数功能
-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
  • 1
  • 2

在这里插入图片描述

2.获取cpu总核数

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

在这里插入图片描述

  • 在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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

完整脚本

在这里插入图片描述

#!/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
  • 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
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/185050
推荐阅读
相关标签
  

闽ICP备14008679号