Linux 修改 rm 命令防止误操作

本文最后更新于:2024年6月30日 晚上

一直以来 rm 就是一个危险的操作,关于这个命令还有不少幽默段子以及真实经历,为了自己的人生不戏剧化,所以我决定对它进行改造改造。

思路上最简单的就是两种:

1. 一是修改系统登录用户根目录下的~/.bashrc文件,这种方式定制性强,只针对单独用户生效。

2. 二是修改/etc/bashrc文件,这种方式对系统中所有用户有效。

两种方式的区别仅为是否所有用户生效,所使用的代码是一致的,本文以第二种方式说明。

其实有很多桌面发行版已经做好了对 rm 命令的限制,比如判读一下删除目录是不是**/根目录啥的,所以想到这里就先去网上搜一搜看看有没有轮子,不重复造轮子可以节约你人生的很多时间**。

于是乎找到了一位网游分享出来的成果,链接在文章底部附上,本文代码笔者略有优化:

执行以下命令对bashrc文件进行编辑,建议先备份原文件:

1
2
3
4
#备份文件
cp /etc/bashrc /etc/bashrc.bak
#使用vi编辑文件,替代品很多例nano,vim,哪个顺手用哪个即可
vi /etc/bashrc

在文件最底部输入如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# replace 'rm' with 'saferm'
TRASH_PATH=/.trash
saferm()
{
if [ ! -d ${TRASH_PATH} ]
then
mkdir -p ${TRASH_PATH}
chmod 777 ${TRASH_PATH}
if [ $? -ne 0 ]
then
echo "Error: 'saferm' failed to create path ${TRASH_PATH}"
echo "If you do it convinced, please use '/bin/rm' to continue."
echo "If you want disable 'saferm',please 'vi /etc/bashrc' and 'source /etc/bashrc' to make it valid."
fi
fi

local dst=`mktemp -d -p ${TRASH_PATH}`
local arg=`echo $* | sed "s/\(^-\w\+\)\|\(\s-\w\+\)/ /g"`
echo "safe-rm ${arg} to ${dst}"
mv ${arg} ${dst}
}
alias rm='saferm'

其中TRASH_PATH可以指定为你喜欢的目录,退出编辑后执行source命令来让文件生效:

1
source /etc/bashrc

同理判断删除路径是否为/也可以在该方法中判断,建议自己完善,当作学习Linux的课后作业。

参考链接:https://www.cnblogs.com/aslongas/p/6015454.html


Linux 修改 rm 命令防止误操作
https://blog.doracoin.cc/posts/Linux/25196.html
作者
Doracoin
发布于
2018年7月18日
更新于
2024年6月30日
许可协议