1. 磁盤空間檢查基礎命令
1.1 查看磁盤使用情況
# 查看所有掛載點的磁盤使用情況
df -h
# 查看指定目錄的磁盤使用情況
df -h /home
1.2 查找大文件和目錄
# 查找當前目錄下大於100MB的文件
find . -type f -size +100M -exec ls -lh {} \;
# 查找根目錄下大於1GB的文件
find / -type f -size +1G -exec ls -lh {} \;
2. 高級大文件查找方法
2.1 使用du命令
# 查看當前目錄下最大的10個目錄
du -sh * | sort -rh | head -10
# 查看根目錄下最大的10個目錄
du -sh /* | sort -rh | head -10
# 查看特定目錄下的大文件
du -ah /var/log | sort -rh | head -20
2.2 綜合查找腳本
#!/bin/bash
# 查找系統中最大的文件和目錄
echo "=== 最大的10個目錄 ==="
du -h / 2>/dev/null | sort -hr | head -10
echo -e "\n=== 最大的10個文件 ==="
find / -type f -size +100M 2>/dev/null | xargs ls -lh | sort -k5 -hr | head -10
3. 常見大文件類型分析
3.1 日誌文件清理
# 查看日誌目錄大小
du -sh /var/log/*
# 清理舊的日誌文件(保留最近7天)
find /var/log -name "*.log" -mtime +7 -delete
# 壓縮舊日誌文件
find /var/log -name "*.log" -mtime +3 -exec gzip {} \;
3.2 緩存文件清理
# 查看緩存目錄大小
du -sh /tmp /var/tmp /var/cache/*
# 清理臨時文件
rm -rf /tmp/*
rm -rf /var/tmp/*
# 清理包管理器緩存
yum clean all # CentOS/RHEL
apt-get clean # Ubuntu/Debian
4. 實用清理腳本
4.1 自動化清理腳本
#!/bin/bash
# disk_cleanup.sh - 自動清理大文件腳本
LOG_FILE="/var/log/disk_cleanup.log"
# 記錄日誌函數
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}
# 檢查磁盤使用率
check_disk_usage() {
local usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $usage -gt 80 ]; then
log_message "警告:磁盤使用率過高: ${usage}%"
return 1
fi
return 0
}
# 清理日誌文件
cleanup_logs() {
log_message "開始清理日誌文件..."
# 刪除超過30天的日誌
find /var/log -name "*.log" -mtime +30 -delete
# 壓縮舊日誌
find /var/log -name "*.log" -mtime +7 -exec gzip {} \;
log_message "日誌清理完成"
}
# 清理臨時文件
cleanup_temp() {
log_message "開始清理臨時文件..."
# 清理過期的臨時文件
find /tmp -type f -mtime +1 -delete
find /var/tmp -type f -mtime +1 -delete
log_message "臨時文件清理完成"
}
# 主執行流程
main() {
log_message "=== 開始磁盤清理任務 ==="
if check_disk_usage; then
cleanup_logs
cleanup_temp
log_message "=== 磁盤清理任務完成 ==="
else
log_message "磁盤使用率過高,跳過清理操作"
fi
}
main
4.2 定時清理任務
# 添加到crontab中定期執行
# 每週日凌晨2點執行清理
0 2 * * 0 /path/to/disk_cleanup.sh
# 每天凌晨3點檢查磁盤使用情況
0 3 * * * df -h | grep -E "(Filesystem|/)" > /tmp/disk_usage.txt
5. 安全清理注意事項
5.1 清理前檢查
# 查看文件詳細信息,避免誤刪重要文件
ls -la /var/log/
ls -la /tmp/
# 查看文件權限和所有者
ls -l /var/log/messages
5.2 驗證清理操作
# 使用dry-run模式預覽將要刪除的文件
find /var/log -name "*.log" -mtime +7 -print
# 先備份再刪除
cp /var/log/syslog /var/log/syslog.backup
rm /var/log/syslog
6. 監控和預警
6.1 磁盤監控腳本
#!/bin/bash
# disk_monitor.sh - 磁盤監控腳本
THRESHOLD=80
EMAIL="admin@example.com"
# 檢查磁盤使用率
check_disks() {
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | while read line; do
usage=$(echo $line | awk '{print $5}' | sed 's/%//')
partition=$(echo $line | awk '{print $1}')
mount_point=$(echo $line | awk '{print $6}')
if [ $usage -gt $THRESHOLD ]; then
echo "警告:$mount_point 磁盤使用率 $usage%"
# 發送郵件通知
echo "磁盤使用率過高,請及時處理" | mail -s "磁盤警告" $EMAIL
fi
done
}
check_disks
6.2 創建監控服務
# 創建systemd服務用於定時監控
cat > /etc/systemd/system/disk-monitor.service << EOF
[Unit]
Description=Disk Usage Monitor
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/disk_monitor.sh
User=root
[Install]
WantedBy=multi-user.target
EOF
# 啓用服務
systemctl enable disk-monitor.service
7. 常見問題解決
7.1 已刪除但仍在使用的文件
# 查找已刪除但仍被進程佔用的文件
lsof +L1
# 重啓相關服務釋放文件
systemctl restart nginx
systemctl restart httpd
7.2 大文件恢復
# 如果誤刪了重要文件,可以嘗試使用以下方法:
# 1. 使用testdisk或photorec恢復
# 2. 檢查是否有備份
# 3. 檢查文件系統日誌
journalctl -f
8. 最佳實踐建議
- 定期監控:設置定期的磁盤使用情況檢查
- 備份重要數據:清理前確保重要數據已備份
- 分步清理:先小範圍測試,再大規模執行
- 記錄操作:詳細記錄清理過程和結果
- 設置閾值:建立合理的磁盤使用率預警機制
通過以上方法,可以有效地管理和維護Linux服務器的磁盤空間,確保系統穩定運行。