df
命令可以展示文件系统的磁盘有效空间信息。如果不指定文件名,则当前所有挂载的文件系统有效空间信息。
实现步骤
- 使用
df
查看磁盘信息 - 使用
grep
命令 过滤文件系统,获取空间使用百分比 - 通过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