玩客云资源有限,可以设置脚本一键清理
创建脚本
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 开头的文件。