目 录CONTENT

文章目录

防止rm误操作,替换rm操作逻辑为移动到回收站

成培培
2025-08-18 / 0 评论 / 0 点赞 / 4 阅读 / 0 字

前几天登录到家里软路由上整理我的nas硬盘,准备把不太需要的东西删一删,需要的东西搬到新搭建的nas服务器上,期间总在使用du -sh ./*查看文件大小,同时也在使用rm -rf删除一些不需要的文件,这时在操作一个比较大的文件夹时,不小心把命令输入错了并顺手敲了回车,当时人就傻了。

解决方案

这还解决个毛线啊,远程操作也拔不了硬盘了,救是救不回来了,反正看了下也不是特别重要的文件,就放弃这些数据了。但是为了防止此类事情的再次发生,决定把rm命令的操作逻辑换掉,改成移动到回收站,后续有机会再手动物理删除,就类似windows的回收站。

创建回收站

找一个空间还比较大的目录,比如我这里是/mnt/m2,创建回收站文件夹

mkdir -p /mnt/m2/trash
chmod 777 /mnt/m2/trash

创建安全删除脚本

新建一个脚本,比如 /usr/local/bin/safe_rm

#!/bin/sh
TRASH_DIR="/mnt/m2/trash"

# 时间戳目录避免重名覆盖
TODAY=$(date +%Y-%m-%d_%H-%M-%S)
DEST="$TRASH_DIR/$TODAY"
mkdir -p "$DEST"

# 遍历参数
for target in "$@"; do
    # 忽略选项 -r -f -v 等
    case "$target" in
        -*) continue ;;
        *)  
            if [ -e "$target" ]; then
                mv "$target" "$DEST"/
            fi
            ;;
    esac
done

赋予权限:chmod +x /usr/local/bin/safe_rm

替换rm命令

/etc/profile 里加:

alias rm='/usr/local/bin/safe_rm'

保存后,执行source /etc/profile,当前登录的shell 就生效了
再次操作rm命令就会把目标文件夹或文件移动到/mnt/m2/trash文件夹了,如果要物理删除文件,可以指定原始的rm脚本:/bin/rm

定期自动清理回收站

这里可以创建一个crontab任务,比如执行:crontab -e,增加:

0 3 * * * find /mnt/sda1/trash -type d -mtime +7 -exec rm -rf {} +

意思是每天凌晨 3 点清理 7 天前的文件,这样OpenWrt 上的 rm -rf 就会变成移动到回收站,并自动定期清理了。
当然你也可以不定时清理,每次都手动清理,就跟windows上差不多,其他系统也是类似的。

后记

但是工作中的正式服务器上还是不太推荐这种方式去操作的,因为以下几种原因:

  1. 某些脚本运行可能依赖rm,导致一些未知错误
  2. 如果养成习惯觉得 rm 永远安全,其实在别的服务器(没有 alias)上执行就真删了

最好还是养成好习惯,不要使用rm命令,而是使用其他命令代替它,比如上面新建的safe_rm,或者第三方的现成工具 trash-cli等,严格的区别物理删除与移动回收站操作,才是真正的好习惯。

0

评论区