本文目录导读:

#!/bin/bash
# ============================================
# APT 缓存自动清理脚本
# 功能:安全清理 apt 缓存和不再需要的包
# ============================================
set -e # 遇到错误立即退出
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查 root 权限
check_root() {
if [ "$(id -u)" -ne 0 ]; then
log_error "此脚本需要 root 权限运行,请使用 sudo"
exit 1
fi
}
# 清理 apt 缓存
clean_apt_cache() {
log_info "开始清理 APT 缓存..."
# 1. 清理已下载的包文件 (.deb)
local cache_size_before=$(du -sh /var/cache/apt/archives 2>/dev/null | cut -f1)
log_info "清理前的缓存大小: ${cache_size_before}"
# 执行清理
apt-get clean
local cache_size_after=$(du -sh /var/cache/apt/archives 2>/dev/null | cut -f1)
log_info "清理后的缓存大小: ${cache_size_after}"
log_info "APT 缓存清理完成"
}
# 移除不再需要的依赖包
remove_autoremove() {
log_info "检查并移除不再需要的依赖包..."
# 获取可自动移除的包列表
local autoremove_list=$(apt-get -s autoremove 2>/dev/null | grep "^Remv" | awk '{print $2}')
if [ -z "$autoremove_list" ]; then
log_info "没有需要自动移除的包"
else
log_info "以下包将被移除:"
echo "$autoremove_list"
# 执行自动移除
apt-get autoremove -y
log_info "孤立的依赖包已移除"
fi
}
# 清理部分下载的包
clean_partial() {
log_info "清理部分下载的包..."
if [ -d /var/cache/apt/archives/partial ] && [ "$(ls -A /var/cache/apt/archives/partial 2>/dev/null)" ]; then
rm -rf /var/cache/apt/archives/partial/*
log_info "部分下载的包已清理"
else
log_info "没有需要清理的部分下载包"
fi
}
# 清理 apt 列表缓存(可选)
clean_lists() {
log_warn "是否要清理旧的软件源列表缓存?[y/N]"
read -r response
if [[ "$response" =~ ^[Yy]$ ]]; then
log_info "清理旧的软件源列表..."
# 备份当前列表
if [ -d /var/lib/apt/lists ]; then
# 只清理备份文件,保留当前使用的
apt-get clean
log_info "软件源列表已清理"
fi
else
log_info "跳过清理软件源列表"
fi
}
# 显示磁盘空间信息
show_disk_info() {
log_info "系统磁盘使用情况:"
echo "----------------------------------------"
df -h / /var 2>/dev/null | grep -v "^Filesystem" | awk '{print " "$NF": "$3" / "$2" ("$5")"}'
echo "----------------------------------------"
}
# 主函数
main() {
echo "======================================"
echo " APT 缓存自动清理工具"
echo "======================================"
echo ""
check_root
show_disk_info
# 更新包索引(推荐先更新)
log_warn "是否先更新软件包索引?[y/N]"
read -r update_response
if [[ "$update_response" =~ ^[Yy]$ ]]; then
log_info "更新软件包索引..."
apt-get update
fi
# 执行清理步骤
clean_partial
clean_apt_cache
remove_autoremove
clean_lists
echo ""
log_info "清理完成!"
show_disk_info
echo ""
echo "======================================"
echo " 清理完成"
echo "======================================"
}
# 运行主函数
main
使用方法
创建脚本文件
sudo nano /usr/local/bin/apt-cleanup.sh
粘贴脚本内容
设置执行权限
sudo chmod +x /usr/local/bin/apt-cleanup.sh
运行脚本
sudo /usr/local/bin/apt-cleanup.sh
功能说明
- 清理部分下载的包 - 删除
/var/cache/apt/archives/partial/中不完整的下载 - 清理 apt 缓存 - 执行
apt-get clean,删除所有已下载的 .deb 包 - 自动移除 - 执行
apt-get autoremove,删除不再需要的依赖包 - 清理列表缓存 - 可选清理旧的软件源列表
设置定时任务(可选)
如果你希望自动执行清理:
# 编辑 crontab sudo crontab -e # 添加以下行(每周日凌晨2点执行) 0 2 * * 0 /usr/local/bin/apt-cleanup.sh
注意事项
- ⚠️ 需要 root 权限 - 必须使用 sudo 运行
- 🔒 安全清理 - 脚本使用
set -e,遇到错误会停止 - 📁 不会删除配置文件 - 只清理缓存和不再需要的包
- 💾 可以定制 - 你可以根据需要注释或修改某些步骤
这个脚本适合定期运行,可以帮助保持系统整洁,释放磁盘空间。