建立自定義删除腳本:
vim /usr/bin/safe_remove
#!/bin/bash
TRASH_DIR="/tmp/user/${USER}/.trash"
mkdir -p $TRASH_DIR
RMPATH=""
# 周遊rm指令參數(e.g. rm -rf時要去掉-rf參數,隻需後面的path清單即可)
for arg in "$@"
do
IS_ARG=$(echo "$arg" | grep "^-")
if [ -z "$IS_ARG" ]; then
if [ -n "$RMPATH" ]; then
RMPATH="${RMPATH} "
fi
RMPATH="${RMPATH} $arg"
fi
done
if [ -n "$RMPATH" ]; then
FILE_PARENT_DIR=$(pwd $RMPATH)
SUFFIX=$(echo `date "+%y%m%d%H%M%S"`)
# 拼接欲删除檔案的目錄,在資源回收筒中的目錄名稱(直接将目标檔案或目錄的父目錄作為在資源回收筒的名稱,這樣做好處是無論删除的是檔案或目錄都可統一處理)
FILE_TRASH_DIR="${TRASH_DIR}${FILE_PARENT_DIR}.children.rm.${SUFFIX}.tmp"
if [ ! -d "$FILE_TRASH_DIR" ]; then
mkdir -p $FILE_TRASH_DIR
fi
mv $RMPATH "${FILE_TRASH_DIR}"
fi
配置安全删除腳本生效
vim /root/.bashrc
新增一行即可:
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# 安全rm
alias rm='sh /usr/bin/safe_remove'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
使其生效
. /root/.bashrc
效果測試
生成測試檔案和目錄
useradd testing
cd /home/testing
echo 111 > a.txt
echo 222 > b.txt
mkdir -p log
echo 333 > log/test.log
rm删除
rm -rf a.txt b.txt log
檢視資源回收筒
ll /tmp/user/root/.trash/home/testing.children.rm.190521102654.tmp/
操作效果:
FAQ:
1,安全删除測試不成功?
排查是否與本文操作一緻,同時檢視是否有mv目标檔案或目錄的linux權限。
2,如何清理資源回收筒?
直接\rm -rf xxx (加個反斜杠)就可以使用linux原生rm指令了。
3,定時清理資源回收筒?
自己建立個crontab任務咯~!