命令行操作中,难以避免 rm 命令的使用,如果脑袋昏了或者慢摆拍,很容易误删重要的文件,尤其是用户目录下的,不像根目录那样需要权限确认。
这里可以使用 safe-rm 工具来防止这种意外情况,在对被保护的目录/文件进行删除时,会打印提示并忽略。
安装及配置
Debian/Ubuntu 可以通过命令 apt install safe-rm 来安装,这个工具本质是对 rm 的一层包装,加了目标目录的检查。
安装后当前用户的默认 rm 指令就会指向 safe-rm /usr/share/safe-rm/bin/rm ,这个可以通过 which rm 来确认。接下来,我们可以通过配置
全局和用户级别的 safe-rm 文件来保护需要的目录和文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# 全局配置文件路径: /etc/safe-rm.conf
# 这里已经有一些预制的目录,主要是重要的系统级别目录
/
/bin
/boot
/dev
/etc
/home
/initrd
/lib
/proc
/root
/sbin
/sys
/usr
/usr/bin
/usr/include
/usr/lib
/usr/local
/usr/local/bin
/usr/local/include
/usr/local/sbin
/usr/local/share
/usr/sbin
/usr/share
/usr/src
/var
# 在下面,我们可以添加自己需要保护的全局目录/文件,可以使用通配符
/home/*
/home/*/Documents
/home/*/.config
/home/*/.ssh
/home/*/.mozilla
|
用户级别配置文件在 ~/.config/safe-rm :
1
2
3
|
# 该配置仅对当前用户有效
# 建议与全局配置一样,用绝对路径配合通配符
/home/*/.local
|
然后在删除时,如果不小心误写,也可以提醒并忽略:
1
2
|
rm -rf /
safe-rm: Skipping /.
|
应用到 sudo 环境
以上配置对当前用户有效,但对 root 命令中调用的 rm 却无效,因为 sudo 会使用安全的环境,safe-rm 无法优先于 rm 调用。
方法是通过命令 sudo visudo 编辑sudoers 文件,找到 Defaults secure_path 行,将 safe-rm 加入:
1
2
|
# 将 /usr/share/safe-rm/bin 加入 secure_path 中并优先
Defaults secure_path="/usr/share/safe-rm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
然后通过命令 sudo which rm 来确认是否生效:
1
2
|
sudo which rm
/usr/share/safe-rm/bin/rm
|