Linux磁盘空间清理脚本
安全清理系统垃圾文件、日志、缓存、旧内核,释放磁盘空间
详细内容
#!/bin/bash
# ==========================================
# Linux磁盘空间清理脚本
# 用途:安全清理系统垃圾、日志、缓存,释放磁盘空间
# 注意:清理前会显示可释放空间,需要确认后才执行
# 使用方法:bash disk_cleanup.sh
# ==========================================
echo "========== 磁盘空间清理工具 =========="
echo ""
# 显示清理前磁盘使用
echo "【清理前磁盘使用】"
df -h / | awk 'NR>1{printf " 总空间: %s, 已用: %s, 可用: %s, 使用率: %s\n", $2, $3, $4, $5}'
echo ""
TOTAL_FREE=0
# 1. 清理apt缓存
if command -v apt-get &>/dev/null; then
APT_CACHE=$(du -sh /var/cache/apt/archives 2>/dev/null | cut -f1)
echo "【1. APT缓存】 可清理: $APT_CACHE"
read -p " 是否清理? (y/n): " CONFIRM
if [ "$CONFIRM" = "y" ]; then
sudo apt-get clean
sudo apt-get autoclean
echo " ✓ 已清理"
fi
echo ""
fi
# 2. 清理yum缓存
if command -v yum &>/dev/null; then
YUM_CACHE=$(du -sh /var/cache/yum 2>/dev/null | cut -f1)
echo "【2. YUM缓存】 可清理: $YUM_CACHE"
read -p " 是否清理? (y/n): " CONFIRM
if [ "$CONFIRM" = "y" ]; then
sudo yum clean all
echo " ✓ 已清理"
fi
echo ""
fi
# 3. 清理系统日志
echo "【3. 系统日志】"
LOG_SIZE=$(du -sh /var/log 2>/dev/null | cut -f1)
echo " /var/log 总大小: $LOG_SIZE"
echo " 大日志文件:"
find /var/log -type f -size +100M -exec ls -lh {} \; 2>/dev/null | awk '{print " "$9" ("$5")"}'
read -p " 是否清空大日志文件(>100M)? (y/n): " CONFIRM
if [ "$CONFIRM" = "y" ]; then
find /var/log -type f -size +100M -exec truncate -s 0 {} \;
echo " ✓ 已清空大日志文件"
fi
echo ""
# 4. 清理journal日志
if command -v journalctl &>/dev/null; then
JOURNAL_SIZE=$(journalctl --disk-usage 2>/dev/null)
echo "【4. Journal日志】 $JOURNAL_SIZE"
read -p " 是否只保留最近7天日志? (y/n): " CONFIRM
if [ "$CONFIRM" = "y" ]; then
sudo journalctl --vacuum-time=7d
echo " ✓ 已清理"
fi
echo ""
fi
# 5. 清理用户缓存
echo "【5. 用户缓存目录】"
for dir in ~/.cache ~/.npm ~/.pip/cache /tmp; do
if [ -d "$dir" ]; then
SIZE=$(du -sh "$dir" 2>/dev/null | cut -f1)
echo " $dir: $SIZE"
fi
done
read -p " 是否清理用户缓存(~/.cache等)? (y/n): " CONFIRM
if [ "$CONFIRM" = "y" ]; then
rm -rf ~/.cache/*
[ -d ~/.npm ] && npm cache clean --force 2>/dev/null
echo " ✓ 已清理用户缓存"
fi
echo ""
# 6. 清理旧内核
if command -v dpkg &>/dev/null; then
OLD_KERNELS=$(dpkg -l 'linux-image-*' | grep '^ii' | awk '{print $2}' | grep -v "$(uname -r)")
echo "【6. 旧内核】"
if [ -z "$OLD_KERNELS" ]; then
echo " 无旧内核"
else
echo "$OLD_KERNELS" | sed 's/^/ /'
read -p " 是否删除旧内核? (y/n): " CONFIRM
if [ "$CONFIRM" = "y" ]; then
sudo apt-get purge -y $OLD_KERNELS
echo " ✓ 已删除旧内核"
fi
fi
echo ""
fi
# 显示清理后磁盘使用
echo "【清理后磁盘使用】"
df -h / | awk 'NR>1{printf " 总空间: %s, 已用: %s, 可用: %s, 使用率: %s\n", $2, $3, $4, $5}'
echo ""
echo "========== 清理完成 =========="
适配环境
适配系统:CentOS 7+,Ubuntu 18.04+,Debian 10+
依赖环境:bash 4.0+
参数说明
[]