CentOS 回收站监控与告警实战
一、监控目标与总体思路
二、快速落地方案(命令行回收站 + 定时巡检)
sudo yum install -y trash-cli~/.local/share/Trash/files(内容)与 ~/.local/share/Trash/info(元数据,含删除时间等)。/usr/local/bin/check_trash.sh#!/usr/bin/env bash
set -Eeuo pipefail
TRASH_DIR="${TRASH_DIR:-$HOME/.local/share/Trash/files}"
MAX_KB=102400 # 100MB
LOG="/var/log/trash-monitor.log"
HOST=$(hostname)
ts() { date '+%F %T'; }
if [[ ! -d "$TRASH_DIR" ]]; then
echo "$(ts) WARN: Trash dir not found: $TRASH_DIR" >> "$LOG"
exit 0
fi
cur_kb=$(du -sk "$TRASH_DIR" 2>/dev/null | awk '{print $1}')
if (( cur_kb > MAX_KB )); then
msg="CRIT: Trash usage ${cur_kb}KB > ${MAX_KB}KB (threshold) on $HOST"
echo "$(ts) $msg" >> "$LOG"
# 示例:发邮件(需本机 MTA 或替换为 Webhook)
echo "$msg" | mail -s "Trash Alert $HOST" admin@example.com 2>/dev/null || true
# 可选:清理最旧文件(按修改时间),直到低于阈值
# find "$TRASH_DIR" -mindepth 1 -printf '%T@ %p\n' | sort -n | cut -d' ' -f2- \
# | while IFS= read -r f; do du -sk "$TRASH_DIR" | awk -v m="$MAX_KB" '$1<=m{exit 1}'; [[ $? -ne 1 ]] && rm -rf "$f"; done
else
echo "$(ts) OK: Trash usage ${cur_kb}KB" >> "$LOG"
fi
sudo chmod +x /usr/local/bin/check_trash.shsudo crontab -e 添加:*/10 * * * * /usr/local/bin/check_trash.sh/usr/local/bin/cleanup_trash.sh#!/usr/bin/env bash
set -Eeuo pipefail
TRASH_DIR="${TRASH_DIR:-$HOME/.local/share/Trash/files}"
MAX_AGE_DAYS=7
LOG="/var/log/trash-cleanup.log"
ts() { date '+%F %T'; }
if [[ -d "$TRASH_DIR" ]]; then
cnt=$(find "$TRASH_DIR" -mindepth 1 -mtime +"$MAX_AGE_DAYS" -print -quit | wc -l)
if (( cnt > 0 )); then
echo "$(ts) INFO: Removing $cnt items older than $MAX_AGE_DAYS days" >> "$LOG"
find "$TRASH_DIR" -mindepth 1 -mtime +"$MAX_AGE_DAYS" -delete
fi
fi
0 2 * * * /usr/local/bin/cleanup_trash.sh.trash 目录,只需将脚本中的 TRASH_DIR 改为你的目录即可。三、进阶方案(审计级监控与自动拦截)
sudo auditctl -a always,exit -S unlink -S rmdir -k rm_audit(持久化写入 /etc/audit/rules.d/audit.rules)ausearch -k rm_audit | tail -n 50alias rm='trash'(或放入 /etc/bashrc/~/.bashrc 统一生效)#!/usr/bin/env bash
TRASH="$HOME/.local/share/Trash/files"
mkdir -p "$TRASH"
for f in "$@"; do
if [[ -e "$f" ]]; then
mv -t "$TRASH" "$f"
fi
done
gvfs-trash --list、gvfs-trash --info <uri>(需 GUI 会话与相应组件)。四、可视化与告警集成
/var/log/trash-*.log 接入 rsyslog 或 Fluent Bit,再由 Grafana Loki/Prometheus 展示趋势图(如:按主机/用户统计回收站大小与清理次数)。mail 命令(需配置本地 MTA 或 SMTP)。