在生产服务器上禁用 rm *

在生产服务器上禁用 rm *

有没有办法在生产服务器中rm使用单个服务器进行阻止*?这将有助于防止以下事故:

rm test *

代替

rm test*

答案1

使用 zsh --- 它会自动询问您是否要删除目录中的所有文件。

server:~/dir/processing> rm *                                                                                                                    
zsh: sure you want to delete all the files in /home/wheel/dja/dir/processing [yn]?

(我认为这是一个默认功能 --- 我找不到任何设置为打开它的配置选项,但我没有写我的 .zshrc)

答案2

这是一个可以从 .bashrc 中获取的 bash 函数,当您使用带有 2 个以上参数的 rm 时会添加警告:

unalias rm 2>/dev/null
real_rm=/bin/rm
rm_opts=""

function confirm {
  echo -n "Do you want to continue (Y/N)? "
  read v
  v=$(echo $v|tr '[a-z]' '[A-Z]')
  if [[ "$v" == "Y" ]]; then
    return 0
  elif [[ "$v" == "N" ]]; then
    return 1
  else
    confirm
  fi
}

function rm {

  if [ $# -gt 2 ]; then
    echo "WARNING: You have passed a list of files and directories that is $# entries long!  Is this what you intended?"
    echo "Here is the list of files:"
    echo "$@"
    confirm
    if [ $? -eq 0 ]; then
      $real_rm $rm_opts $@
    fi
  else
    $real_rm $rm_opts $@
  fi

}

答案3

不更换外壳rm就不行。甚至不因为*shell 在将适当的文件名传递给 之前会先将它们组合起来rm

答案4

您还可以提供一个特殊的别名,让您担心会犯此错误的用户可以改用它。例如

alias rm-test="rm test*"

再次,这更像是一种解决方法,但一般来说,*nix 假定您知道自己在做什么,并且会按照您说的去做。

相关内容