在生产服务器上禁用 rm *

Ada*_*tan 2 unix rm

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

rm test *
Run Code Online (Sandbox Code Playgroud)

代替

rm test*
Run Code Online (Sandbox Code Playgroud)

Kyl*_*ith 7

这是一个可以从 .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

}
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 6

不是没有更换外壳。rm甚至没有看到*因为 shell 在将它们传递给rm.

  • 就 Ignacio 而言,即使是 bash 函数或别名也不会将 * 视为传递的参数,而是将所有文件或目录与 *. 如果您编写了一个名为 rm() 的小型 bash 函数,它在 $@ 中执行了 `for a; 做回声 $a; done` 如果 * 被传递,你会看到很多行。 (3认同)