天天看點

Linux之rm -rf 安全删除

參考本人簡書

建立自定義删除腳本:

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任務咯~!

繼續閱讀