本文目录导读:

在Shell脚本中,检查磁盘分区容量有多种方法,以下是最常用和可靠的方式:
使用 df 命令(最常用)
基本用法
# 查看所有分区 df -h # 查看特定挂载点 df -h /home # 查看特定设备 df -h /dev/sda1
脚本检查示例
#!/bin/bash
# 检查根分区使用率
usage=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
echo "根分区使用率: ${usage}%"
# 阈值检查
threshold=80
if [ "$usage" -gt "$threshold" ]; then
echo "警告: 根分区使用率超过${threshold}%"
fi
获取具体数值
获取使用率(数字)
# 获取根分区使用率(不带%)
usage=$(df / | awk 'NR==2 {print $5}' | tr -d '%')
echo $usage
获取可用空间(GB)
# 获取根分区可用空间(GB)
available=$(df -BG / | awk 'NR==2 {print $4}' | sed 's/G//')
echo "可用空间: ${available}GB"
完整检查脚本
#!/bin/bash
# 定义要检查的分区列表
partitions="/ /home /var /tmp"
threshold=85
echo "磁盘分区使用情况检查..."
echo "=========================="
for partition in $partitions; do
# 检查分区是否挂载
if mountpoint -q "$partition" 2>/dev/null; then
# 获取使用率
usage=$(df -h "$partition" | awk 'NR==2 {print $5}' | tr -d '%')
echo -n "分区 $partition: 使用率 ${usage}%"
if [ "$usage" -gt "$threshold" ]; then
echo " ⚠️ 警告: 超过阈值 ${threshold}%"
else
echo " ✅ 正常"
fi
else
echo "分区 $partition: 未挂载"
fi
done
高级检查 - 发送告警
#!/bin/bash
# 检查多个分区并发送邮件告警
check_disk_space() {
local threshold=$1
local alert_email="admin@example.com"
local alert_message=""
# 获取所有挂载的分区(排除临时和虚拟文件系统)
df -h | grep -E "^/dev/" | while read line; do
filesystem=$(echo $line | awk '{print $1}')
mount_point=$(echo $line | awk '{print $6}')
usage=$(echo $line | awk '{print $5}' | tr -d '%')
if [ "$usage" -gt "$threshold" ]; then
alert_message+="警告: 分区 $mount_point ($filesystem) 使用率已达 ${usage}%\n"
fi
done
# 如果有警告,发送邮件
if [ -n "$alert_message" ]; then
echo -e "$alert_message" | mail -s "磁盘空间警告" "$alert_email"
fi
}
# 执行检查,阈值设为90%
check_disk_space 90
使用 stat 命令检查特定目录
#!/bin/bash
# 检查特定目录所在分区的空间
directory="/var/log"
if [ -d "$directory" ]; then
# 获取所在分区的使用情况
df -h "$directory" | tail -1 | awk '{print "挂载点:", $6, "使用率:", $5}'
# 获取具体数值
available=$(df "$directory" | awk 'NR==2 {print $4}')
echo "可用inode: $available"
fi
实时监控脚本
#!/bin/bash
# 持续监控磁盘使用
monitor_disk() {
local interval=300 # 5分钟
local threshold=90
while true; do
echo "$(date): 检查磁盘空间..."
df -h | awk 'NR>1 {print $6, $5}' | while read mount usage; do
usage_num=${usage%\%}
if [ "$usage_num" -gt "$threshold" ]; then
echo "⚠️ $mount 使用率 $usage"
fi
done
sleep $interval
done
}
# 运行监控
# monitor_disk
使用 findmnt 命令(更详细信息)
#!/bin/bash
# 获取分区详细信息
findmnt -T / | awk 'NR==2 {print "源设备:", $1, "挂载点:", $2, "大小:", $3, "已用:", $4, "可用:", $5}'
# 或直接使用
findmnt -o TARGET,SOURCE,FSTYPE,SIZE,USED,AVAIL,USE% -t ext4,xfs
综合检查脚本
#!/bin/bash
echo "=== 磁盘分区容量检查 ==="
echo
# 1. 简单查看
echo "1. 所有分区概览:"
df -h --total | grep -v tmpfs
echo
# 2. 关键分区详细检查
echo "2. 关键分区状态:"
partitions=("/" "/home" "/var" "/tmp" "/boot")
for part in "${partitions[@]}"; do
if mountpoint -q "$part" 2>/dev/null; then
df_output=$(df -h "$part" | awk 'NR==2')
echo " $part: $(echo $df_output | awk '{print "总大小:", $2, "已用:", $3, "可用:", $4, "使用率:", $5}')"
fi
done
echo
# 3. 警报检查
echo "3. 警报检查:"
warning_threshold=80
critical_threshold=90
df -h | awk 'NR>1 && $1 ~ /^\// {print $6, $5}' | while read mount usage; do
usage_num=$(echo $usage | tr -d '%')
if [ "$usage_num" -ge "$critical_threshold" ]; then
echo " 🔴 严重: $mount 使用率 $usage"
elif [ "$usage_num" -ge "$warning_threshold" ]; then
echo " 🟡 警告: $mount 使用率 $usage"
else
echo " 🟢 正常: $mount 使用率 $usage"
fi
done
常用参数说明
| 命令 | 参数 | 说明 |
|---|---|---|
df |
-h |
人类可读格式(GB/MB) |
df |
-H |
人类可读(1000进制) |
df |
-k |
KB 为单位 |
df |
-m |
MB 为单位 |
df |
-i |
显示 inode 使用情况 |
df |
-T |
显示文件系统类型 |
df |
-x tmpfs |
排除某些文件系统 |
df |
--total |
显示总计 |
最佳实践
- 始终使用
-h参数 使其更易读 - 设置合理的阈值(通常80%警告,90%严重)
- 排除临时文件系统:
df -x tmpfs -x devtmpfs - 定期检查:配合 cron 实现自动检查
- 记录日志:将检查结果写入日志文件
这些方法涵盖了从简单到复杂的不同需求,可以根据具体场景选择合适的实现方式。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播