自动清理apt缓存的脚本

wen 实用脚本 2

本文目录导读:

自动清理apt缓存的脚本

  1. 使用方法
  2. 功能说明
  3. 设置定时任务(可选)
  4. 注意事项
#!/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

功能说明

  1. 清理部分下载的包 - 删除 /var/cache/apt/archives/partial/ 中不完整的下载
  2. 清理 apt 缓存 - 执行 apt-get clean,删除所有已下载的 .deb 包
  3. 自动移除 - 执行 apt-get autoremove,删除不再需要的依赖包
  4. 清理列表缓存 - 可选清理旧的软件源列表

设置定时任务(可选)

如果你希望自动执行清理:

# 编辑 crontab
sudo crontab -e
# 添加以下行(每周日凌晨2点执行)
0 2 * * 0 /usr/local/bin/apt-cleanup.sh

注意事项

  • ⚠️ 需要 root 权限 - 必须使用 sudo 运行
  • 🔒 安全清理 - 脚本使用 set -e,遇到错误会停止
  • 📁 不会删除配置文件 - 只清理缓存和不再需要的包
  • 💾 可以定制 - 你可以根据需要注释或修改某些步骤

这个脚本适合定期运行,可以帮助保持系统整洁,释放磁盘空间。

抱歉,评论功能暂时关闭!