让rm -fr执行起来没那么可怕

这貌似是我用linux以来不下5次后悔用rm -fr删除不希望被删掉的文件了,其中甚至包括一次误操作删除了/etc导致服务器异常,只能还原到以前的备份。

虽然rm -fr删除的文件可以被找回,但是如果一次性删除的文件太多,需要还原太过复杂基本是不可能的。这个想法是我在搜索如何恢复rm -fr命令时无意间发现的。而且也很简单,原理就是利用alias别名把rm操作改成执行一个脚本,新建一个rm文件,然后chmod +x rm给予执行权限,如下:

#!/bin/bash
PARA_CNT=$#
TRASH_DIR="/home/shingle/.local/share/Trash/files"
 
for i in $*; do
    STAMP=`date -d today +"%Y-%m-%d-%T"`
    fileName=`basename $i`
    mv $i $TRASH_DIR/$fileName.$STAMP
done

因为mvrm在执行结果方面操作很像,利用脚本可以将需要删除的文件移动到回收站,回收站的位置在.local/share/Trash/files,这里我是为了让root用户也能使用这个脚本,所以写的完整路径。下一步就是修改~/.bashrc文件,在普通用户的文件.bashrc添加一行alias rm='~/bin/rm',对应填写脚本所在的位置。因为有时候我们需要切换到root用户进行某些更高级的操作,所以也需要修改root用户让别名生效,所以同样要在/root下的~/.bashrc添加别名,记得改成该脚本的绝对路径。

最后source ~/.bashrc让别名生效,试一下rm a看下效果

以上是我用在平时使用的电脑上的,如果用在服务器没有回收站这种东西,可以把脚本中的TRASH_DIR改成你想移动的位置,我用的是/tmp/rm

关于清理这些文件,这就很随意了,自己的电脑我觉得手动清理回收站即可,服务器上可以添加一个定时任务,删除不是很频繁可以选择一个月清理一次

0 0 1 * * rm -fr /tmp/rm/*