Linux 原生無回收站,rm -rf 一鍵毀系統。本文提供基於 Bash 的完整回收站實現:delete 替代 rm、自動過期清理、一鍵恢復,構建企業級誤刪防護體系。
$HOME/trash,保留目錄結構rm 參數習慣(-f 強制刪除)#!/bin/bash
realrm="/bin/rm"
trash_dir="$HOME/trash"
# 初始化回收站目錄
[ ! -d "$trash_dir" ] && mkdir -p "$trash_dir" && chmod 777 "$trash_dir"
# 幫助信息
[ $# -eq 0 ] && echo "Usage: delete file1 [file2 ...]" && echo "Use -f for direct delete" && exit 0
# 參數解析:-f 直接刪除
while getopts "dfiPRrvW" opt; do
case $opt in
f) exec $realrm "$@" ;;
*) ;; # 忽略其他參數
esac
done
shift $((OPTIND-1))
# 處理每個文件/目錄
for file in "$@"; do
[ ! -e "$file" ] && echo "Not exist: $file" && continue
# 大文件直接刪除
size=$(du -sb "$file" | cut -f1)
[ $size -gt 2147483648 ] && $realrm -rf "$file" && continue
# 移至回收站,保留相對路徑
dest="$trash_dir/$(date +%s)_$(basename "$file")"
mv "$file" "$dest"
echo "$(realpath "$file")|$dest" >> "$trash_dir/.trash.log"
done
#!/bin/bash
trash_dir="$HOME/trash"
log_file="$trash_dir/.trash.log"
[ ! -f "$log_file" ] && echo "No trash log" && exit 1
# 交互式恢復
while IFS='|' read -r orig_path trash_path; do
[ ! -e "$trash_path" ] && continue
echo "Restore $orig_path ? [y/N]"
read -n1 ans; echo
[[ $ans =~ [yY] ]] && mkdir -p "$(dirname "$orig_path")" && mv "$trash_path" "$orig_path"
done < "$log_file"
#!/bin/bash
trash_dir="$HOME/trash"
find "$trash_dir" -type f -mtime +7 ! -name ".trash.log" -delete
# 清理日誌中不存在的條目
[ -f "$trash_dir/.trash.log" ] && awk -F'|' '{system("[ -e \""$2"\" ] || echo "$0")}' "$trash_dir/.trash.log" > "$trash_dir/.trash.log.tmp" && mv "$trash_dir/.trash.log.tmp" "$trash_dir/.trash.log"
/usr/local/bin/chmod +x /usr/local/bin/delete /usr/local/bin/restoreTrash /usr/local/bin/logTrashDircrontab -e → 0 3 * * * /usr/local/bin/logTrashDiralias rm=delete 加入 ~/.bashrc(慎用,建議習慣用 delete)delete important.txt # 移至回收站
delete -f useless.log # 直接刪除
delete bigfile.iso # >2GB 直接刪除
restoreTrash # 交互式恢復
/trash 目錄quota 限制用戶回收站佔用空間zenity 實現 GUI 恢復部署回收站機制,為 Linux 系統添加「後悔藥」,守護數據安全底線。