玩客云 armbian清理脚本

玩客云资源有限,可以设置脚本一键清理

创建脚本

vim  cleaner.sh

添加脚本 

#!/bin/bash

# 清理工具配置
VERSION="1.1"
AUTHOR="Shell Cleaner"
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
RESET='\033[0m'

# 清理项目配置
declare -A CLEAN_ITEMS=(
    ["apt_cache"]="APT缓存 /var/cache/apt/archives"
    ["temp_files"]="临时文件 /tmp /var/tmp"
    ["old_logs"]="系统日志 /var/log"
    ["browser_cache"]="浏览器缓存 /root/.cache /home/*/.cache"
)

# 显示帮助信息
show_help() {
    echo -e "${GREEN}Armbian 系统清理工具 v${VERSION}${RESET}"
    echo "用法: $0 [选项]"
    echo "选项:"
    echo "  -s, --simulate  模拟运行(仅显示可清理内容)"
    echo "  -y, --yes       自动确认清理"
    echo "  -h, --help      显示帮助信息"
}

# 计算目录大小
calculate_size() {
    local path="$1"
    [ ! -d "$path" ] && echo 0 && return
    du -bs "$path" 2>/dev/null | awk '{print $1}' || echo 0
}

# APT缓存清理
clean_apt_cache() {
    local action="$1"
    local path="/var/cache/apt/archives"
    case $action in
        scan) calculate_size "$path" ;;
        clean) [ -d "$path" ] && rm -rf "${path}"/*.deb ;;
    esac
}

# 临时文件清理
clean_temp_files() {
    local action="$1"
    local total=0
    for path in /tmp /var/tmp; do
        case $action in
            scan) total=$((total + $(calculate_size "$path"))) ;;
            clean) [ -d "$path" ] && find "$path" -mindepth 1 -delete 2>/dev/null ;;
        esac
    done
    [ "$action" == "scan" ] && echo "$total"
}

# 旧日志清理
clean_old_logs() {
    local action="$1"
    local total=0
    while IFS= read -r -d $'\0' file; do
        case $action in
            scan) total=$((total + $(stat -c %s "$file"))) ;;
            clean) rm -f "$file" ;;
        esac
    done < <(find /var/log -type f \( -name "*.gz" -o -name "*.old" -o -regex ".*\.[0-9]+" \) -print0 2>/dev/null)
    [ "$action" == "scan" ] && echo "$total"
}

# 浏览器缓存清理
clean_browser_cache() {
    local action="$1"
    local total=0
    while IFS= read -r -d $'\0' dir; do
        case $action in
            scan) total=$((total + $(calculate_size "$dir"))) ;;
            clean) [ -d "$dir" ] && rm -rf "${dir:?}"/* ;;
        esac
    done < <(find /root/.cache /home/*/.cache -maxdepth 0 -type d -print0 2>/dev/null)
    [ "$action" == "scan" ] && echo "$total"
}

# 格式化存储单位
format_size() {
    local size=$1
    if [ $size -ge $((1024**3)) ]; then
        printf "%.2f GB" $(echo "$size/1024/1024/1024" | bc -l)
    elif [ $size -ge $((1024**2)) ]; then
        printf "%.2f MB" $(echo "$size/1024/1024" | bc -l)
    elif [ $size -ge 1024 ]; then
        printf "%.2f KB" $(echo "$size/1024" | bc -l)
    else
        printf "%d B" "$size"
    fi
}

# 主清理流程
main_cleaner() {
    declare -A results
    local total_size=0
    local auto_confirm=0

    # 参数解析
    while [[ $# -gt 0 ]]; do
        case $1 in
            -s|--simulate) SIMULATE=1 ;;
            -y|--yes) auto_confirm=1 ;;
            -h|--help) show_help; exit 0 ;;
            *) echo -e "${RED}错误:未知参数 $1${RESET}"; exit 1 ;;
        esac
        shift
    done

    # 扫描阶段
    echo -e "${BLUE}\n正在扫描可清理项目...${RESET}"
    for key in "${!CLEAN_ITEMS[@]}"; do
        read -r name paths <<< "${CLEAN_ITEMS[$key]}"
        size=$("clean_${key}" scan)
        results["$key"]="$size"
        total_size=$((total_size + size))
        printf "%-12s %-30s %12s\n" "[${key^^}]" "$name" "$(format_size $size)"
    done

    # 结果显示
    echo -e "\n${BLUE}总计可释放空间: ${YELLOW}$(format_size $total_size)${RESET}"
    [ -n "$SIMULATE" ] && exit 0

    # 用户确认
    if [ $auto_confirm -eq 0 ]; then
        echo -en "\n${RED}确认执行清理?(y/N): ${RESET}"
        read -r answer
        [[ ! "$answer" =~ ^[Yy] ]] && echo "操作已取消。" && exit 0
    fi

    # 执行清理
    echo -e "\n${GREEN}开始清理...${RESET}"
    for key in "${!CLEAN_ITEMS[@]}"; do
        read -r name paths <<< "${CLEAN_ITEMS[$key]}"
        echo -n "清理 $name ... "
        "clean_${key}" clean
        echo -e "${GREEN}✓${RESET}"
    done

    echo -e "\n${GREEN}清理完成!${RESET}"
}

# 主入口
[ "$(id -u)" -ne 0 ] && echo -e "${RED}请使用sudo运行此脚本${RESET}" && exit 1
main_cleaner "$@"

给权限 

chmod +x  cleaner.sh

运行

./cleaner.sh

*****************************************************************************************

@内存操作

*****************************************************************************************

 物理内存运行过高清理一次缓存  

创建脚本

vim cache_clean.sh

添加脚本

#!/bin/bash

# 定义日志文件(使用系统标准日志目录)
LOG_FILE="/root/cache_clean.log"

# 检查日志目录权限
if [ ! -w "$(dirname "$LOG_FILE")" ]; then
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] ❌ 日志目录不可写,脚本退出。" >&2
    exit 1
fi

# 记录执行开始
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始执行缓存清理脚本" >> "$LOG_FILE"

# 1. 读取内存数据(使用绝对路径避免环境问题)
FREE_CMD="/usr/bin/free"
mem_line=$($FREE_CMD -h | grep 'Mem:')  # 示例输出:"Mem: 989Mi 408Mi 580Mi ..."

# 2. 提取并清理单位(使用正则保留数字)
total_mem_raw=$(echo "$mem_line" | awk '{print $2}')  # 原始值:"989Mi"
free_mem_raw=$(echo "$mem_line" | awk '{print $4}')    # 原始值:"580Mi"

total_num=$(echo "$total_mem_raw" | sed 's/[^0-9.]//g')  # 提取数字:989
free_num=$(echo "$free_mem_raw" | sed 's/[^0-9.]//g')    # 提取数字:580

# 3. 验证数据有效性
if [[ -z "$total_num" || -z "$free_num" || ! "$total_num" =~ ^[0-9]+$ || ! "$free_num" =~ ^[0-9]+$ ]]; then
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] ❌ 内存值解析失败(total: $total_mem_raw, free: $free_mem_raw)" >> "$LOG_FILE"
    exit 1
fi

# 4. 计算内存使用
used_mem=$((total_num - free_num))                          # 整数运算
used_percentage=$(echo "scale=2; $used_mem / $total_num * 100" | bc)  # 浮点运算

# 5. 输出带单位的结果(保留原始单位)
unit="${total_mem_raw//[0-9.]/}"  # 提取单位(如 "Mi")
echo "物理内存总计:${total_num}${unit}" >> "$LOG_FILE"    # 正确格式:989Mi
echo "空闲内存:${free_num}${unit}" >> "$LOG_FILE"          # 正确格式:580Mi
echo "已用内存:${used_mem}${unit}" >> "$LOG_FILE"          # 正确格式:409Mi
echo "物理内存使用率:${used_percentage}%" >> "$LOG_FILE"

# 6. 阈值判断(85%)
threshold=85.0
if (( $(echo "$used_percentage > $threshold" | bc -l) )); then
    echo "已用内存超过 ${threshold}%,正在清理缓存..." >> "$LOG_FILE"
    sync && echo 3 > /proc/sys/vm/drop_caches
    if [ $? -ne 0 ]; then
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] ❌ 清理缓存失败(权限不足或内核限制)" >> "$LOG_FILE"
    fi
else
    echo "未达到 ${threshold}%,无需清理。" >> "$LOG_FILE"
fi

# 记录执行完成
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 脚本执行完成" >> "$LOG_FILE"
echo "---------------------------" >> "$LOG_FILE"

给权限

chmod +x cache_clean.sh 

定时运行

 crontab -e

在列表添加定时任务

0 * * * * /root/cache_clean.sh  # 每小时运行一次

观察/root目录下有没有生成 cache_clean.log 查看日志

$ cat cache_clean.log 
[2025-03-19 15:54:04] 开始执行缓存清理脚本
物理内存总计:989Mi
空闲内存:552Mi
已用内存:437Mi
物理内存使用率:44.00%
未达到 85.0%,无需清理。
[2025-03-19 15:54:05] 脚本执行完成
---------------------------

*********************************************************************

@日志目录下清除

*********************************************************************

新建deletelog.sh

vim deletelog.sh

添加脚本 

#!/bin/bash

# 获取当前目录
current_dir=$(pwd)

# 删除当前目录下所有 .log 后缀的文件
find "$current_dir" -maxdepth 1 -type f -name "*.log" -delete

# 删除用户主目录下的 .wget-hsts 文件
rm -f ~/.wget-hsts

# 删除用户主目录下的 .viminfo 文件
rm -f ~/.viminfo

# 删除用户主目录下所有以 .zcompdump 开头的文件
rm -f ~/.zcompdump*

echo "已删除当前路径下所有 .log 后缀的文件,以及用户主目录下的 .wget-hsts、.viminfo 和以 .zcompdump 开头的文件。"
    

 给权限

chmod +x deletelog.sh

run

./deletelog.sh  
已删除当前路径下所有 .log 后缀的文件,以及用户主目录下的 .wget-hsts、.viminfo 和以 .zcompdump 开头的文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chem4111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值