Linux 更换系统软件源及 Docker 安装脚本

引言

  • 背景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 使用,实现"可恢复删除"
  • 如果有什么问题,欢迎评论留言讨论,看到会回复
  • 如果你觉得这个回答对你有帮助,欢迎关注我的微信公众号【一行梦境】,我会在那里分享更多深度内容和实用技巧。
相关推荐
m0_752753121 小时前
Linux‑SQLite3 数据库
linux
渡我白衣1 小时前
Util工具类功能设计与类设计
linux·服务器·网络·c++·人工智能·目标检测·机器学习
小此方1 小时前
Linux网络(十一):HTTP重定向与请求方法详解:从301/302状态码到GET/POST,再认识Fiddler抓包
linux·网络·http
KANGBboy1 小时前
doris+kafka安装部署(单机+集群)六安装部署
linux
爱和冰阔落2 小时前
【Linux】手写日志与固定线程池:任务队列、工作线程和安全退出
linux·运维·c++·redis·安卓
inkuu2 小时前
WSL启动慢问题分析与修复
linux
JJJennie7774 小时前
MAI Gateway技术揭秘:大模型网关能做什么?从原理到落地
linux·服务器·网络·ai网关
风哥2号6 小时前
数据库教程FGMT02‑生产环境Linux+Oracle19c安装配置与项目实战
linux·数据库·ffmpeg
wuminyu9 小时前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++