温馨提示×

Linux中recycle怎么设置

小樊
43
2025-11-23 15:07:07
栏目: 智能运维

Linux 回收站设置指南

一 系统自带回收站与 trash cli

  • 多数桌面环境(如 GNOME/KDE/XFCE)已内置回收站机制,图形界面删除会进入回收站,无需额外配置。命令行建议使用 trash-cli 来获得“删除/列出/恢复/清空”的完整回收站体验。
  • 安装与常用命令(Debian/Ubuntu 示例):
    • 安装:sudo apt-get install trash-cli
    • 使用:
      • 删除到回收站:trash file_or_dir
      • 列出回收站:trash-list
      • 恢复文件:trash-restore(按编号选择)
      • 清空回收站:trash-empty
  • 说明:命令行直接执行 rm 并不会进入回收站;若希望 rm 更安全,可用别名或包装脚本将其改为移动到回收站(见下文)。

二 命令行回收站方案一 使用别名或函数封装 mv

  • 思路:在家目录创建隐藏回收站目录(如 ~/.trash~/.Recycle_bin),用 alias/函数 将删除动作改为 mv 到该目录,并配套“列出/恢复/清空”的便捷命令。
  • 示例(写入 ~/.bashrc 后执行 source ~/.bashrc 生效):
    • 创建目录:mkdir -p ~/.trash
    • 基本删除与交互式恢复:
      alias rm='mv -i -t ~/.trash "$@"'
      alias rl='ls -l ~/.trash'
      unrm() { mv -i ~/.trash/"$@" .; }
      cleartrash() { read -p "Clear ~/.trash? [y/N] " c; [[ $c =~ ^[Yy]$ ]] && /bin/rm -rf ~/.trash/*; }
      
    • 进阶示例(按时间戳重命名,便于同名文件多次删除与追溯):
      mkdir -p ~/.Recycle_bin
      Recycle_bin() { for f; do [ -e "$f" ] || continue; ts=$(date +%Y%m%d-%H%M%S); d="${f%/*}"; [ "$d" = "$f" ] && d="."; bn=$(basename "$f"); mv -i "$f" "$d/.Recycle_bin/${bn}.$ts"; done; }
      undelfile() { mv -i ~/.Recycle_bin/"$@" .; }
      alias dl='ls ~/.Recycle_bin'
      clearall() { read -p "Clear Recycle_bin? [y/N] " c; [[ $c =~ ^[Yy]$ ]] && /bin/rm -rf ~/.Recycle_bin/*; }
      
  • 提示:
    • 使用 mv -i 可在覆盖同名文件前提示;-t ~/.trash 便于一次移动多个参数。
    • 若担心误用真正的 rm,可在脚本中将 rm 重命名为 safe-rm 或移出 PATH,避免覆盖系统 rm 的行为。

三 命令行回收站方案二 使用脚本统一管理 delete 命令

  • 思路:将删除逻辑集中到一个脚本(如 /usr/local/bin/delete),统一处理确认、时间戳、移动与日志,并可按需设置别名 alias rm='/usr/local/bin/delete'
  • 最小可用脚本框架:
    #!/usr/bin/env bash
    TRASH=/tmp/.recycle
    mkdir -p "$TRASH"
    now=$(date +%Y-%m-%d-%H:%M:%S)
    
    for f; do
      [ -e "$f" ] || { echo "Not exist: $f"; continue; }
      bn=$(basename "$f")
      dest="$TRASH/${bn}.$now"
      mv -i "$f" "$dest" && echo "Moved to $dest"
    done
    
  • 可扩展项:
    • 交互确认、按大小/类型排除、记录操作日志、按日期分层存放等。
    • 定时清理:在 root 的 crontab 添加如 0 2 * * * /bin/rm -rf /tmp/.recycle/*(示例为每天 02:00 清空,请按需求调整)。

四 Samba 共享回收站设置

  • 若需为 Samba 共享提供“回收站”,使用 vfs_recycle 模块,把共享内删除的文件移到指定目录(可按用户隔离)。
  • 示例(Samba 3/4,写入共享段):
    [share]
        path = /srv/samba/share
        read only = No
        vfs objects = recycle
        recycle:repository = .recycle/%U      # 每个用户独立回收站目录
        recycle:keeptree = Yes                # 保留原目录结构
        recycle:versions = Yes                # 同名文件保留历史版本
        recycle:touch = Yes                  # 移动后更新访问时间
        recycle:exclude = *.tmp|*.temp|~$*   # 排除临时文件
        recycle:excludedir = /tmp|/temp|/cache
    
  • 说明:修改后重启 Samba 服务(如 systemctl restart smbd nmbdsmbd 对应服务)使配置生效。

五 维护与安全建议

  • 定期清理:为回收站设置周期性清理(如 crontab),避免长期占用磁盘;示例:0 1 * * * /bin/rm -rf ~/.trash/*(每天 01:00 清空,可按需改为保留 7/30 天)。
  • 最小权限:系统级回收站目录(如 /tmp/.recycle)权限建议设为 0700,仅允许属主操作,降低被他人误删或滥用风险。
  • 慎用 rm -rf 别名:若用别名替换 rm,务必保留紧急通道(如 \rm/bin/rm)处理系统维护场景,避免脚本或自动化任务受影响。
  • 备份优先:回收站并非备份;关键数据请配合 定时/异地/版本化 备份策略。

0