本文目录导读:

Linux Shell 脚本
基础版 - 显示磁盘空间使用情况
#!/bin/bash echo "==========================================" echo " 硬盘使用报告 - $(date '+%Y-%m-%d %H:%M:%S')" echo "==========================================" echo "" echo "=== 磁盘分区使用情况 ===" df -h | grep -v "tmpfs\|devtmpfs\|overlay" echo "" echo "=== 磁盘总容量和已用空间 ===" df -h --total | grep "total" echo "" echo "=== inode 使用情况 ===" df -i | grep -v "tmpfs\|devtmpfs\|overlay"
进阶版 - 带阈值警告的详细报告
#!/bin/bash
# 报告文件路径
REPORT_FILE="/tmp/disk_report_$(date +%Y%m%d).txt"
WARNING_THRESHOLD=80 # 警告阈值(百分比)
echo "正在生成硬盘使用报告..."
echo "==========================================" > "$REPORT_FILE"
echo "硬盘使用报告 - 生成时间: $(date)" >> "$REPORT_FILE"
echo "==========================================" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
echo "1. 磁盘分区使用情况:" >> "$REPORT_FILE"
df -h >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
echo "2. 磁盘性能统计:" >> "$REPORT_FILE"
if command -v iostat &> /dev/null; then
iostat -x 1 1 >> "$REPORT_FILE"
else
echo "iostat 未安装" >> "$REPORT_FILE"
fi
echo "" >> "$REPORT_FILE"
echo "3. 主要挂载点详情:" >> "$REPORT_FILE"
# 检查主要挂载点
df -h | grep -v "tmpfs\|devtmpfs\|overlay\|loop" | while read line; do
if [[ $line == *"Filesystem"* ]]; then
echo "$line" >> "$REPORT_FILE"
continue
fi
usage=$(echo $line | awk '{print $5}' | sed 's/%//')
mount_point=$(echo $line | awk '{print $6}')
filesystem=$(echo $line | awk '{print $1}')
if [ "$usage" -ge "$WARNING_THRESHOLD" ] 2>/dev/null; then
echo "⚠️ 警告: $mount_point ($filesystem) 使用率 $usage% 超过阈值 $WARNING_THRESHOLD%" >> "$REPORT_FILE"
fi
done
echo "" >> "$REPORT_FILE"
echo "4. 大型目录搜索(超过1GB):" >> "$REPORT_FILE"
find / -type d -maxdepth 3 -exec du -sh {} \; 2>/dev/null | sort -rh | head -20 >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
echo "报告已保存至: $REPORT_FILE"
echo "报告文件大小: $(du -h "$REPORT_FILE" | cut -f1)"
# 发送邮件(需配置 sendmail 或 mail 命令)
if command -v mail &> /dev/null; then
mail -s "硬盘使用报告" admin@example.com < "$REPORT_FILE"
echo "报告已发送至 admin@example.com"
fi
Windows PowerShell 脚本
# disk_report.ps1
Write-Host "正在生成硬盘使用报告..." -ForegroundColor Green
$reportDate = Get-Date -Format "yyyyMMdd"
$reportPath = "C:\Reports\DiskReport_$reportDate.html"
# 创建报告目录
if (!(Test-Path "C:\Reports")) {
New-Item -ItemType Directory -Path "C:\Reports" -Force
}
# HTML 报告头部
$htmlHead = @"
<!DOCTYPE html>
<html>
<head>硬盘使用报告</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
h1 { color: #333; border-bottom: 2px solid #4CAF50; }
h2 { color: #666; }
table { border-collapse: collapse; width: 100%; margin: 20px 0; }
th { background-color: #4CAF50; color: white; padding: 12px; text-align: left; }
td { padding: 10px; border-bottom: 1px solid #ddd; }
tr:hover { background-color: #f5f5f5; }
.warning { color: red; font-weight: bold; }
.ok { color: green; }
.summary { background-color: #f9f9f9; padding: 20px; border-radius: 5px; }
</style>
</head>
<body>
<h1>硬盘使用报告</h1>
<p>生成时间: $(Get-Date)</p>
<hr>
"@
# 获取磁盘信息
$disks = Get-WmiObject Win32_LogicalDisk -Filter "DriveType=3" | ForEach-Object {
$used = $_.Size - $_.FreeSpace
$usedPercent = [math]::Round(($used / $_.Size) * 100, 2)
[PSCustomObject]@{
Drive = $_.DeviceID
Total = "{0:N2} GB" -f ($_.Size / 1GB)
Used = "{0:N2} GB" -f ($used / 1GB)
Free = "{0:N2} GB" -f ($_.FreeSpace / 1GB)
UsedPercent = $usedPercent
Status = if ($usedPercent -gt 80) { "⚠️ 警告" } else { "✓ 正常" }
}
}
# 生成 HTML 表格
$tableRows = ""
foreach ($disk in $disks) {
$rowClass = if ($disk.UsedPercent -gt 80) { "warning" } else { "ok" }
$tableRows += @"
<tr class="$rowClass">
<td>$($disk.Drive)</td>
<td>$($disk.Total)</td>
<td>$($disk.Used)</td>
<td>$($disk.Free)</td>
<td>$($disk.UsedPercent)%</td>
<td>$($disk.Status)</td>
</tr>
"@
}
$summary = @"
<div class="summary">
<h2>lt;/h2>
<p>总共磁盘数: $($disks.Count)</p>
<p>警告磁盘数: $(($disks | Where-Object { $_.UsedPercent -gt 80 }).Count)</p>
<p>正常磁盘数: $(($disks | Where-Object { $_.UsedPercent -le 80 }).Count)</p>
<p>总容量: $(($disks | ForEach-Object { [double]($_.Total -replace ' GB','') } | Measure-Object -Sum).Sum.ToString("N2")) GB</p>
</div>
"@
# 完整 HTML 内容
$htmlContent = @"
$htmlHead
<h2>磁盘使用详情</h2>
<table>
<tr>
<th>驱动器</th>
<th>总容量</th>
<th>已用空间</th>
<th>可用空间</th>
<th>使用率</th>
<th>状态</th>
</tr>
$tableRows
</table>
$summary
<h2>建议操作</h2>
<ul>
"@
# 添加建议
$warningDisks = $disks | Where-Object { $_.UsedPercent -gt 80 }
if ($warningDisks.Count -gt 0) {
foreach ($disk in $warningDisks) {
$htmlContent += "<li><strong>$($disk.Drive)</strong>: 使用率 $($disk.UsedPercent)%,建议清理或扩展空间</li>"
}
} else {
$htmlContent += "<li>所有磁盘使用率正常</li>"
}
$htmlContent += @"
</ul>
</body>
</html>
"@
# 保存报告
$htmlContent | Out-File -FilePath $reportPath -Encoding UTF8
Write-Host "报告已生成: $reportPath" -ForegroundColor Green
Write-Host "磁盘使用摘要:" -ForegroundColor Yellow
$disks | Format-Table Drive, UsedPercent, Status -AutoSize
# 打开报告
Start-Process $reportPath
定时任务设置
Linux - crontab
# 每天凌晨1点运行 0 1 * * * /path/to/disk_report.sh # 每小时运行一次 0 * * * * /path/to/disk_report.sh
Windows - 任务计划程序
# 创建定时任务(每天上午9点运行) $action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\disk_report.ps1" $trigger = New-ScheduledTaskTrigger -Daily -At "09:00AM" $principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount Register-ScheduledTask -TaskName "DiskReport" -Action $action -Trigger $trigger -Principal $principal
使用说明
-
Linux 脚本:
- 保存为
disk_report.sh - 添加执行权限:
chmod +x disk_report.sh - 运行:
./disk_report.sh
- 保存为
-
Windows PowerShell:
- 以管理员身份运行 PowerShell
- 设置执行策略:
Set-ExecutionPolicy RemoteSigned - 运行:
.\disk_report.ps1
-
自定义配置:
- 修改
WARNING_THRESHOLD变量调整告警阈值 - 修改报告路径和格式
- 可添加邮件发送功能
- 修改
这些脚本可以满足日常硬盘监控需求,你可以根据实际环境进行修改和扩展。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播