Debian系统避免清理误删重要文件的实用方案
一 事前预防 删除前的安全策略
二 事中监控 删除时的告警与拦截
三 事后恢复 快速找回与还原
四 安全清理 包管理与临时文件的要点
五 可直接套用的安全删除脚本模板
#!/usr/bin/env bash
set -Eeuo pipefail
# 1) 受保护路径(可按需增删)
protected=( "/" "/boot" "/etc" "/home" "/usr" "/var" )
# 2) 简单通配符展开为绝对路径列表
expand() {
local p="$1"
if [[ -e "$p" ]]; then
realpath -L "$p"
else
# 若通配符未匹配到文件,交给 rm 报错即可
echo "$p"
fi
}
# 3) 检查是否触及受保护路径
check_protected() {
local tgt
for tgt in "$@"; do
for pp in "${protected[@]}"; do
if [[ "$tgt" == "$pp" || "$tgt" == "$pp"/* ]]; then
echo "Blocked: $tgt is inside protected path $pp" >&2
return 1
fi
done
done
return 0
}
# 4) 主逻辑
args=()
for a in "$@"; do
# 展开通配符(如 *.log),保留不存在的通配符由 rm 报错
while IFS= read -r -d '' f; do
args+=( "$f" )
done < <(expand "$a")
done
if ((${#args[@]} == 0)); then
echo "Usage: $0 <file|dir> ..." >&2
exit 1
fi
check_protected "${args[@]}" || exit 1
printf "About to delete:\n"
printf " %s\n" "${args[@]}"
read -rp "Confirm? [y/N]: " ans
[[ "$ans" =~ ^[Yy]$ ]] || { echo "Aborted."; exit 1; }
exec rm -i "${args[@]}"