CentOS回收站怎么监控
导读:CentOS 回收站监控与告警实战 一、监控目标与总体思路 明确对象:区分图形会话回收站(如 GNOME 的 ~/.local/share/Trash/)与命令行回收站(如 trash-cli 的同路径)。无桌面环境的服务器通常只有命令行...
CentOS 回收站监控与告警实战
一、监控目标与总体思路
- 明确对象:区分图形会话回收站(如 GNOME 的 ~/.local/share/Trash/)与命令行回收站(如 trash-cli 的同路径)。无桌面环境的服务器通常只有命令行回收站。
- 监控维度:
- 容量:回收站目录当前占用大小。
- 数量:回收站中文件/目录个数。
- 滞留时间:文件在回收站中的存放时长。
- 删除行为:谁在何时删了什么(需要审计/增强手段)。
- 处置动作:达到阈值时告警、自动清理最旧文件或拒绝删除。
- 说明:Linux 默认没有统一的图形化回收站;命令行推荐使用 trash-cli,桌面环境可用 gvfs-trash。
二、快速落地方案(命令行回收站 + 定时巡检)
- 安装与确认路径
- 安装 trash-cli:
sudo yum install -y trash-cli - 回收站目录:
~/.local/share/Trash/files(内容)与~/.local/share/Trash/info(元数据,含删除时间等)。
- 安装 trash-cli:
- 容量阈值巡检脚本(示例阈值 100MB)
- 保存为:
/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.sh - 加入定时任务(每 10 分钟巡检一次):
sudo crontab -e添加:*/10 * * * * /usr/local/bin/check_trash.sh
- 保存为:
- 滞留时间巡检脚本(示例:清理 7 天前)
- 保存为:
/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 - 赋权并加入 cron(每天 02:00 清理):
0 2 * * * /usr/local/bin/cleanup_trash.sh
- 保存为:
- 说明:上述路径与命令适用于 trash-cli;若使用自定义
.trash目录,只需将脚本中的 TRASH_DIR 改为你的目录即可。
三、进阶方案(审计级监控与自动拦截)
- 审计谁在删除什么(系统级)
- 使用 auditd 记录 unlink/rmdir 等调用,便于追溯:
- 添加规则:
sudo auditctl -a always,exit -S unlink -S rmdir -k rm_audit(持久化写入/etc/audit/rules.d/audit.rules) - 查询:
ausearch -k rm_audit | tail -n 50
- 添加规则:
- 注意:审计会产生日志开销,建议按需开启并配合日志轮转。
- 使用 auditd 记录 unlink/rmdir 等调用,便于追溯:
- 拦截危险的 rm 并转入回收站(更安全删除)
- 方式 A:用 trash-cli 替代 rm(推荐)
- 在交互式 shell 中:
alias rm='trash'(或放入/etc/bashrc/~/.bashrc统一生效)
- 在交互式 shell 中:
- 方式 B:自定义 rm 包装脚本(示例)
#!/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
- 方式 A:用 trash-cli 替代 rm(推荐)
- 桌面会话回收站监控(GNOME)
- 若使用 gvfs-trash,回收站同样位于用户主目录的 ~/.local/share/Trash/;可直接复用上面的容量/时间巡检脚本。
- 列出/查看回收站内容可用:
gvfs-trash --list、gvfs-trash --info < uri>(需 GUI 会话与相应组件)。
四、可视化与告警集成
- 日志到可视化:将
/var/log/trash-*.log接入 rsyslog 或 Fluent Bit,再由 Grafana Loki/Prometheus 展示趋势图(如:按主机/用户统计回收站大小与清理次数)。 - 告警渠道:
- 邮件:脚本内使用
mail命令(需配置本地 MTA 或 SMTP)。 - 企业微信/钉钉/Slack:脚本内调用 Webhook,发送 Markdown 告警卡片。
- 邮件:脚本内使用
- 容量治理联动:当回收站容量告警时,可自动触发“清理最旧 N 个文件”或“拒绝新删除”的策略,避免磁盘被占满影响业务。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS回收站怎么监控
本文地址: https://pptw.com/jishu/754461.html
