Linux磁盘空间自动检测脚本用df -P获取使用率,while true循环+sleep实现每分钟检查,提取第5列去%转整数,超阈值(如85%)告警并记录时间;可限定监控/、/var等关键分区,加日志、邮件通知及防重复告警,推荐systemd托管确保长期稳定运行。

在 Linux 中编写自动检测磁盘空间的循环脚本,核心是用 df 获取使用率,配合 while 或 for 循环定期检查,并加入阈值判断和告警逻辑。不依赖复杂工具,纯 Shell 即可实现。
基础循环检测(每分钟查一次)
用 while true 搭配 sleep 实现持续监控:
- 用
df -h查看所有挂载点,df -P更适合脚本解析(POSIX 格式,列对齐稳定) - 跳过标题行,逐行提取使用率(第5列),去掉
%后转为整数便于比较 - 设定阈值(如 85%),超限时输出警告并记录时间
示例脚本片段:
#!/bin/bash
THRESHOLD=85
while true; do
df -P | awk 'NR>1 {gsub(/%/,"",$5); if ($5 >= ENVIRON["THRESHOLD"]) print "ALERT: " $1 " is " $5 "% full at " strftime("%Y-%m-%d %H:%M")}'
sleep 60
done
只监控关键分区(避免干扰)
生产环境通常只需关注 /、/home、/var 等核心挂载点,减少误报:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 用
df -P / /var /home 2>/dev/null显式指定路径,忽略不存在或不可读的分区 - 配合
awk提取对应行,避免匹配到子路径(如/var/log被/var规则误捕) - 检查前先确认挂载点是否真实存在:
mountpoint -q /var && df -P /var
加入日志与简单告警
光打印不够,需留存记录并支持基础通知:
- 将警告追加到日志文件:
echo "$(date): / is 92% full" >> /var/log/disk-alert.log - 超限时发邮件(需配置本地 MTA 如
mailutils):echo "Disk full alert" | mail -s "DISK ALERT" admin@example.com - 避免重复刷屏:用临时标记文件记录上次告警时间,1小时内同类分区不再重复提醒
作为系统服务长期运行
手动运行易中断,推荐用 systemd 托管:
- 写一个 service 文件(如
/etc/systemd/system/disk-monitor.service),设置Type=oneshot+Restart=always - 脚本末尾去掉
while true,改用单次检查 + 退出;systemd 用RestartSec=60控制间隔 - 启用服务:
sudo systemctl daemon-reload && sudo systemctl enable --now disk-monitor
这样既稳定又便于启停和查状态(systemctl status disk-monitor)。










