引言
- 背景 :
rm命令误操作导致系统文件丢失、无法恢复 - 核心价值:自动拦截危险操作,保护核心系统目录
- 适用场景:Linux 服务器日常运维、开发环境
前置条件
- 系统要求
- Ubuntu/Debian/CentOS 等 Linux 发行版
- Bash 4.0+
- sudo 权限(部分操作)
- 工具准备
- 文本编辑器(vim/nano)
安装安全别名
1️⃣ 编辑 ~/.bashrc
vim ~/.bashrc
2️⃣ 在文件末尾添加以下内容
# ================================
# Linux 安全防误删保护
# 放到 ~/.bashrc 最后面
# ================================
# 防止 > 覆盖文件
set -o noclobber
# history 时间
export HISTTIMEFORMAT="%F %T "
# 防止重复 history
export HISTCONTROL=ignoredups
# 核心系统目录
PROTECTED_DIRS=(
/
/bin
/boot
/dev
/etc
/lib
/lib64
/proc
/root
/run
/sbin
/srv
/sys
/usr
/var
)
# 判断危险目录
is_protected_path() {
local target
for target in "${PROTECTED_DIRS[@]}"; do
for arg in "$@"; do
local clean_arg
clean_arg=$(readlink -f "$arg" 2>/dev/null)
if [[ "$clean_arg" == "$target" ]]; then
return 0
fi
done
done
return 1
}
# 安全 rm
safe_rm() {
if is_protected_path "$@"; then
echo "❌ 禁止删除系统核心目录:"
printf ' %s\n' "$@"
return 1
fi
command rm -Iv --preserve-root "$@"
}
# 安全 mv
safe_mv() {
if is_protected_path "$@"; then
echo "❌ 禁止移动系统核心目录:"
printf ' %s\n' "$@"
return 1
fi
command mv -iv "$@"
}
# 安全 cp
safe_cp() {
command cp -iv "$@"
}
# 安全 chmod
safe_chmod() {
if is_protected_path "$@"; then
echo "❌ 禁止修改系统目录权限"
return 1
fi
command chmod -v "$@"
}
# 安全 chown
safe_chown() {
if is_protected_path "$@"; then
echo "❌ 禁止修改系统目录归属"
return 1
fi
command chown -v "$@"
}
# 高危命令确认
danger() {
echo
echo "⚠️ 高危命令"
echo "$*"
echo
read -p "请输入 YES 确认执行: " confirm
if [[ "$confirm" == "YES" ]]; then
eval "$@"
else
echo "❌ 已取消"
fi
}
# 别名替换
alias rm='safe_rm'
alias mv='safe_mv'
alias cp='safe_cp'
alias chmod='safe_chmod'
alias chown='safe_chown'
# 常用安全 alias
alias rd='rm -rIv'
alias mkdir='mkdir -pv'
# 防止误 rm *
rmall() {
echo "❌ 禁止直接使用 rm *"
}
# 提示不要使用 rm(可选,取消注释启用)
# alias rm='echo "不要使用 rm,使用 trash-put."; false'
echo "🛡️ Linux 安全保护已启用"
3️⃣ 生效配置
source ~/.bashrc
功能说明
✅ 保护的核心目录
/ /bin /boot /dev /etc /lib /lib64 /proc /root /run /sbin /srv /sys /usr /var
🛡️ 拦截命令
| 命令 | 功能 | 拦截示例 |
|---|---|---|
rm |
删除文件 | rm /etc/passwd ❌ |
mv |
移动文件 | mv /etc/hosts /tmp ❌ |
chmod |
修改权限 | chmod 777 /etc ❌ |
chown |
修改归属 | chown root /etc ❌ |
cp |
复制文件 | cp /etc > /tmp ✅(安全) |
📝 常用安全命令
# 删除普通文件
rm file.txt
# 递归删除目录(需确认)
rm -r folder/
# 快速删除
rd folder/
# 创建目录
mkdir new_folder
# 清空回收站(推荐)
trash-empty
额外增强:使用 trash-cli
安装 trash-cli
sudo apt install trash-cli
常用命令
trash-put # 把文件或目录移动到回收站
trash-empty # 清空回收站
trash-list # 列出回收站文件
trash-restore # 恢复回收站文件
trash-rm # 删除回收站文件
配置默认行为
编辑 ~/.bashrc:
# 取消注释以下行,强制使用 trash-put
alias rm='echo "不要使用 rm,使用 trash-put."; false'
验证安装
执行以下命令,查看安全保护是否生效:
rm /etc/passwd
预期输出:
❌ 禁止删除系统核心目录:
/etc/passwd
常见问题
Q1:安全别名影响正常删除?
✔ 可以删除非系统目录的文件,如 rm ~/file.txt ✅
Q2:如何临时禁用保护?
取消别名:
unalias rm
unalias mv
unalias cp
Q3:多用户环境是否适用?
可以,但建议为每个用户单独配置
Q4:如何恢复原 rm 行为?
编辑 ~/.bashrc,注释掉安全别名相关行,重新 source ~/.bashrc
结语
- 实测效果:有效防止多次误操作,保护系统稳定性
- 建议:配合 trash-cli 使用,实现"可恢复删除"
- 如果有什么问题,欢迎评论留言讨论,看到会回复
- 如果你觉得这个回答对你有帮助,欢迎关注我的微信公众号【一行梦境】,我会在那里分享更多深度内容和实用技巧。