Skip to main content
 首页 » 操作系统

Shell 脚本监控磁盘空间

2022年07月19日136daizhj

df 命令可以展示文件系统的磁盘有效空间信息。如果不指定文件名,则当前所有挂载的文件系统有效空间信息。

实现步骤

  1. 使用 df 查看磁盘信息
  2. 使用 grep命令 过滤文件系统,获取空间使用百分比
  3. 通过Shell 脚本进行监控

获取磁盘空间

df -H 
# output 
Filesystem      Size  Used Avail Use% Mounted on 
udev            2.1G     0  2.1G   0% /dev 
tmpfs           412M  6.6M  405M   2% /run 
/dev/sda1        63G   16G   44G  27% / 
tmpfs           2.1G  218k  2.1G   1% /dev/shm 
tmpfs           5.3M  4.1k  5.3M   1% /run/lock 
tmpfs           2.1G     0  2.1G   0% /sys/fs/cgroup 
tmpfs           412M   78k  412M   1% /run/user/1000 
 

过滤文件系统获取空间占用百分比

df -H | grep -vE '^Filesystem|tmpfs|udev' | awk '{ print $5 " " $1 }' 
# output 
27% /dev/sda1 

df 的输出结果通过 grep 进行过滤:不包括 Filesystem|tmpfs|udev ,然后再传递给 awk 仅 打印第五列 和 第一列。

写shell监控脚本

上面命令显示第五列和第一列。现在需要查看磁盘空间占用是否 >= 90% :

#!/bin/sh 
 
# 获取磁盘占用情况,并按行循环读取至output 
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' |  while read output; 
do 
  echo $output  # 输出结果 
   
  # 通过 awk 获取占用百分比  cut -d 指定分隔符 获取 占比数字 
  usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  ) 
  # 获取文件路径 
  partition=$(echo $output | awk '{ print $2 }' ) 
  # ; 用于分割命令,一行包括多个命令 
  if [ $usep -ge 80 ]; then 
    echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)" ## 也可以发送报警邮件 
  fi 
done 

输出结果:

81% /dev/sda1 
Running out of space "/dev/sda1 (81%)" on ubuntu as on Thu Jun 10 15:10:40 CST 2021 
 

cut 命令说明

cut 命令用于获取每一行的部分内容并输出至标准输出。可以按照字节、字符进行分界,也可以分割类似CSV文件的数据。

按字节分割

echo 'baz' | cut -b 2 
a 
echo 'baz' | cut -b 1-2 
ba 
echo 'baz' | cut -b 1,3 
bz 

按字符切分

echo '♣foobar' | cut -c 1,6 
♣a 
echo '♣foobar' | cut -c 1-3 
♣fo 

♣ 占三个字节,利用-c 按照字符分割。

按分隔符切分

分隔符使用 -d选项,一般于 -f 选项一起使用,指定需要获取的特定字段。下面数据来自文件 names.csv :

John,Smith,34,London 
Arthur,Evans,21,Newport 
George,Jones,32,Truro 

获取第一列:

cut -d ',' -f 1 names.csv 
# output 
John 
Arthur   
George 

获取第一列和第四列:

cut -d ',' -f 1,4 names.csv 
# output 
John,London 
Arthur,Newport 
George,Truro 

总结

本文介绍了利用Shell获取磁盘空间占用情况。详细介绍了shell脚本实现,并说明了cut命令的用法。


本文参考链接:https://blog.csdn.net/neweastsun/article/details/117787951