高级运维工程师带你从0到1写读取Linux服务器硬盘剩余信息并插入Mysql数据库的shell脚本全网最详细_获取剩余内存脚本

echo "总大小:$total\_size"
echo "已使用:$used\_capacity"
echo "可用空间:$available\_space"
echo "使用率:$usage\_percentage"
echo "挂载点:$mount\_point"
echo "主机地址:$host"

TABLE=“diskcheck_fb”
SQL_LIST=“use monitor”

mysql -h 192.168.1.225 -P 3306 -uroot -p123456 << EOF

$SQL_LIST

INSERT INTO diskcheck_fb (avail,used,size,host,mounted,cpu,date) VALUES(‘ a v a i l a b l e _ s p a c e ′ , ′ available\_space',' available_space,usage_percentage’,‘ t o t a l _ s i z e ′ , ′ total\_size',' total_size,host’,' m o u n t _ p o i n t ′ , " mount\_point'," mount_point,"usage_percentage",NOW());
EOF
echo ‘nasen told you insert db success!’
done < output.txt


这段代码使用一个 while 循环来读取 output.txt 文件的每一行,并将每行分割成字段。然后,它将字段的值分别存储在变量中,并通过一些命令和脚本来获取主机地址。最后,它使用 mysql 命令将这些信息插入到数据库中,并打印出一些信息表示插入成功。


#### 5.mysql监控数据库的监控表DEMO


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ded721144bff432d8360c0210cfc9810.png)



CREATE TABLE diskcheck\_fb (
avail varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT ‘硬盘空余空间’,
used varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT ‘硬盘已用空间’,
size varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT ‘硬盘空间大小’,
host varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT ‘所检查主机ip’,
mounted varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT ‘所检查硬盘目录’,
cpu varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT ‘cpu使用率’,
date timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更新时间’
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC;


### 二、完整shell脚本代码



#!/bin/bash

echo 'get bigest disk info ’

largest_partition=“nasen”

执行 df -m 命令获取磁盘分区信息

disk_usage=$(df -m)

使用 awk 来处理 df 命令的输出,找到容量最大的分区

largest_partition= ( e c h o " (echo " (echo"disk_usage" | awk ‘NR>1 {if ($2>=max) {max=$2; part=$1} } END {print part}’)

输出容量最大的分区名称

echo “容量最大的分区名称是: $largest_partition”

如果需要同时显示最大容量数值和分区名称,可以稍作修改

largest_size_and_partition= ( e c h o " (echo " (echo"disk_usage" | awk 'NR>1 {if ($2>max) {max=$2; part=KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲ } END {printf …largest_size_and_partition"

echo ‘nasen shell 20240307’

检查 output.txt 文件是否存在,如果不存在则创建

if [ ! -f “output.txt” ]; then
touch output.txt
fi

清空 output.txt 文件内容

output.txt

target_partition=“$largest_partition” # 设置外部变量

echo ‘system auto get bigest disk:’
echo “$target_partition”

执行 df -h 命令获取硬盘分区信息

df -h | awk '{
filesystem = $1
size = $2
used = $3
avail = $4
use_percentage = $5
mounted_on = $6

声明变量并赋值

file_system_name = filesystem
total_size = size
used_capacity = used
available_space = avail
usage_percentage = use_percentage
mount_point = mounted_on

只匹配文件系统名称为 /dev/mapper/VolGroup-lv_home 的数据

if (filesystem == “‘$target_partition’”) {

total_size = substr(total_size, 0, length(total_size) - 1)
available_space = substr(available_space, 0, length(available_space) - 1)
used_capacity = substr(used_capacity, 0, length(used_capacity) - 1)
usage_percentage = substr(usage_percentage, 0, length(usage_percentage) - 1)
host=“192.168.1.44”

输出变量值到文件

print file_system_name, total_size, used_capacity, available_space, usage_percentage, mount_point, host >> “output.txt”

}
}’
echo ‘nasen told you system info get success!’

读取文件并输出变量值

while IFS= read -r line; do
fields=( l i n e ) f i l e _ s y s t e m _ n a m e = " line) file\_system\_name=" line)file_system_name="{fields[0]}"
total_size=“ f i e l d s [ 1 ] " u s e d _ c a p a c i t y = " {fields[1]}" used\_capacity=" fields[1]"used_capacity="{fields[2]}”
available_space=“ f i e l d s [ 3 ] " u s a g e _ p e r c e n t a g e = " {fields[3]}" usage\_percentage=" fields[3]"usage_percentage="{fields[4]}”
mount_point=“ f i e l d s [ 5 ] " h o s t = " {fields[5]}" host=" fields[5]"host="{fields[6]}”

host=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`

echo "文件系统名称:$file\_system\_name"
echo "总大小:$total\_size"
echo "已使用:$used\_capacity"
echo "可用空间:$available\_space"
echo "使用率:$usage\_percentage"
echo "挂载点:$mount\_point"
echo "主机地址:$host"

TABLE=“diskcheck_fb”
SQL_LIST=“use monitor”

mysql -h 192.168.1.225 -P 3306 -uroot -p123456 << EOF

$SQL_LIST

INSERT INTO diskcheck_fb (avail,used,size,host,mounted,cpu,date) VALUES(‘ a v a i l a b l e _ s p a c e ′ , ′ available\_space',' available_space,used_capacity’,‘ t o t a l _ s i z e ′ , ′ total\_size',' total_size,host’,' m o u n t _ p o i n t ′ , " mount\_point'," mount_point,"usage_percentage",NOW());
EOF
echo ‘nasen told you insert db success!’

done < output.txt


### 三、代码实际验证


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/9de740ef9fb949488287648dcb5b9d0a.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0db2ba366a284f64b52ce1b4bdc82850.png)  
 ***亲测有效,同学们可以自己试试!***


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/70fd0f470cad45a9bec96ae99fe38446.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/80e80a58f8f4403399a16c580033f1b8.png)  
 ***网卡IP可以自己改一下匹配逻辑***



host=/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"


### 四、其他思路的实现代码案例



#!/bin/sh

check_disk status

author yang

datetime=date +"%Y-%m-%d/%H:%M:%S" #获取当前时间

avail=df -h | awk '{print $4}' | grep -v 已用 | tail -1| cut -d "G" -f1 -
used=df -h | awk '{print $3}' | tail -1| cut -d "G" -f1 -

host=/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"
mounted=df -h | awk '{print $6}' | tail -1

zyl=df -h | awk '{print $5}' | tail -1| cut -d "%" -f 1

size=df -h | awk '{print $2}' | tail -1| cut -d "G" -f1 -

use= ( ( (( ((used/$size))

echo $use

TIME_INTERVAL=5
time= ( d a t e " + L A S T _ C P U _ I N F O = (date "+%Y-%m-%d %H:%M:%S") LAST\_CPU\_INFO= (date"+LAST_CPU_INFO=(cat /proc/stat | grep -w cpu | awk '{print $2,$3,$4,$5,$6,$7,KaTeX parse error: Expected 'EOF', got '}' at position 2: 8}̲') LAST\_SYS\_I…(echo $LAST_CPU_INFO | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲') LAST\_TOTAL\…(echo $LAST_CPU_INFO | awk ‘{print $1+$2+$3+$4+$5+$6+$7}’)
sleep T I M E _ I N T E R V A L N E X T _ C P U _ I N F O = {TIME\_INTERVAL} NEXT\_CPU\_INFO= TIME_INTERVALNEXT_CPU_INFO=(cat /proc/stat | grep -w cpu | awk '{print $2,$3,$4,$5,$6,$7,KaTeX parse error: Expected 'EOF', got '}' at position 2: 8}̲') NEXT\_SYS\_I…(echo $NEXT_CPU_INFO | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲') NEXT\_TOTAL\…(echo $NEXT_CPU_INFO | awk ‘{print $1+$2+$3+$4+$5+$6+$7}’)

#系统空闲时间
SYSTEM_IDLE=echo ${NEXT\_SYS\_IDLE} ${LAST\_SYS\_IDLE} | awk '{print $1-$2}'
#CPU总时间
TOTAL_TIME=echo ${NEXT\_TOTAL\_CPU\_T} ${LAST\_TOTAL\_CPU\_T} | awk '{print $1-$2}'

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
img

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

-1713097767895)]

给大家整理的电子书资料:

[外链图片转存中…(img-RWrS3cpD-1713097767895)]

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-TsadmXCi-1713097767896)]

  • 19
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值