新建自定义删除脚本:
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任务咯~!