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 使用,实现"可恢复删除"
  • 如果有什么问题,欢迎评论留言讨论,看到会回复
  • 如果你觉得这个回答对你有帮助,欢迎关注我的微信公众号【一行梦境】,我会在那里分享更多深度内容和实用技巧。
相关推荐
lisanmengmeng9 小时前
NRPE 添加命令(一)
linux·运维·服务器
树下水月10 小时前
Typora破解
linux·服务器·前端
沫璃染墨10 小时前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
wuminyu10 小时前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++
深念Y11 小时前
rime-雾凇拼音-配置记录
linux·junit·软件·拼音·kde
殷色玫瑰12 小时前
C++ string类详解:常用接口、字符串操作与模拟实现
java·linux·c语言·开发语言·数据结构·c++
忆挽篱笙歌12 小时前
gcc,g++
linux
l1t13 小时前
修复WSL CreateInstance/E_UNEXPECTED和 mounted read-only 错误
linux·windows·wsl
Ruiery13 小时前
Linux 6.6内核 CPU 深度解析(九):时钟与 TSC — 内核怎么从 PIT/HPET 切到 TSC
linux·运维·服务器
91刘仁德14 小时前
Linux网络编程从入门到实战:UDP/TCP协议与socket编程全解析
linux·网络·笔记·tcp/ip·udp