centos

如何优化CentOS回收站的性能

小樊
40
2025-11-18 00:19:49
栏目: 智能运维

CentOS 回收站性能优化指南

一 基线方案与工具选型

二 存储与清理策略

三 脚本化回收站与别名的安全做法

四 性能优化要点清单

五 示例脚本与定时任务

#!/usr/bin/env bash
set -Eeuo pipefail

TRASH_ROOT="${TRASH_ROOT:-$HOME/.local/share/Trash}"
FILES_DIR="$TRASH_ROOT/files"
INFO_DIR="$TRASH_ROOT/info"
MAX_AGE_DAYS="${MAX_AGE_DAYS:-7}"
MAX_SIZE_MB="${MAX_SIZE_MB:-10240}"  # 10GB

cleanup() {
  local now ts keep_before
  now=$(date +%s)
  keep_before=$((now - MAX_AGE_DAYS * 86400))

  # 1) 按时间删除过期文件
  find "$FILES_DIR" -mindepth 1 -maxdepth 1 -mtime +"$MAX_AGE_DAYS" -print0 | while IFS= read -r -d '' f; do
    rm -rf -- "$f"
    [ -e "$INFO_DIR/$(basename "$f").trashinfo" ] && rm -f -- "$INFO_DIR/$(basename "$f").trashinfo"
  done

  # 2) 按容量上限清理最旧文件
  local size_mb
  size_mb=$(du -sm "$FILES_DIR" 2>/dev/null | awk '{print $1}')
  if [ -n "$size_mb" ] && [ "$size_mb" -gt "$MAX_SIZE_MB" ]; then
    find "$FILES_DIR" -mindepth 1 -maxdepth 1 -printf '%T@ %p\0' | sort -z -n \
      | while IFS= read -r -d '' line; do
        ts=${line%% *}
        f=${line#* }
        rm -rf -- "$f"
        [ -e "$INFO_DIR/$(basename "$f").trashinfo" ] && rm -f -- "$INFO_DIR/$(basename "$f").trashinfo"
        size_mb=$(du -sm "$FILES_DIR" 2>/dev/null | awk '{print $1}')
        [ "$size_mb" -le "$MAX_SIZE_MB" ] && break
      done
  fi
}

# 避免并发执行
LOCK="$TRASH_ROOT/cleanup.lock"
exec 200>"$LOCK"
flock -n 200 || { echo "Another cleanup is running." >&2; exit 1; }
trap 'rm -f "$LOCK"' EXIT
cleanup
0 2 * * * /usr/local/bin/trash-clean >>/var/log/trash-cleanup.log 2>&1

0
看了该问题的人还看了