Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 實現回收站功能:Bash 腳本替代 rm 命令防誤刪

編輯:關於 Linux

Linux 原生無回收站,rm -rf 一鍵毀系統。本文提供基於 Bash 的完整回收站實現:delete 替代 rm、自動過期清理、一鍵恢復,構建企業級誤刪防護體系。

設計目標

  • ✅ 大文件(>2GB)直接刪除,不佔用回收站空間
  • ✅ 普通文件移至 $HOME/trash,保留目錄結構
  • ✅ 支持恢復至原路徑
  • ✅ 超過 7 天自動清理
  • ✅ 兼容 rm 參數習慣(-f 強制刪除)

三大核心腳本

1. delete - 核心替代命令

#!/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

2. restoreTrash - 文件恢復

#!/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"

3. logTrashDir - 定時清理(配合 crontab)

#!/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"

部署使用

  1. 保存三腳本至 /usr/local/bin/
  2. chmod +x /usr/local/bin/delete /usr/local/bin/restoreTrash /usr/local/bin/logTrashDir
  3. 添加定時清理:crontab -e → 0 3 * * * /usr/local/bin/logTrashDir
  4. 可選:alias rm=delete 加入 ~/.bashrc(慎用,建議習慣用 delete)

使用示例

delete important.txt        # 移至回收站
delete -f useless.log       # 直接刪除
delete bigfile.iso          # >2GB 直接刪除
restoreTrash                # 交互式恢復

企業級擴展建議

  • 集中化回收站:NFS 掛載共享 /trash 目錄
  • 審計日誌:記錄操作用戶、時間、文件元數據
  • 配額限制:quota 限制用戶回收站佔用空間
  • 圖形化界面:配合 zenity 實現 GUI 恢復

部署回收站機制,為 Linux 系統添加「後悔藥」,守護數據安全底線。

Copyright © Windows教程網 All Rights Reserved