Desativar rm * em servidores de produção

2

Existe uma maneira de bloquear rm com um único * em servidores de produção? Isso ajudaria a evitar acidentes como:

rm test *

em vez de

rm test*
    
por Adam Matan 13.06.2011 / 14:40

5 respostas

2

Use zsh --- ele pergunta automaticamente se você deseja excluir todos os arquivos em um diretório.

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

(Eu suponho que este é um recurso padrão --- eu não consigo encontrar nenhuma opção de configuração que foi configurada para ativá-lo, mas eu não escrevi meu .zshrc)

    
por 13.06.2011 / 18:07
7

Aqui está uma função bash que pode ser originada em .bashrc para adicionar um aviso quando você usa rm com mais de 2 argumentos:

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

}
    
por 13.06.2011 / 16:22
6

Não sem substituir o shell. rm nem mesmo o * , já que o shell globs os nomes de arquivos apropriados antes de passá-los para rm .

    
por 13.06.2011 / 14:42
3

Não é uma solução, mas uma pequena solução alternativa. Alias rm as rm -i .

Esta solução alternativa não ajuda quando a flag -f é usada.

    
por 13.06.2011 / 14:43
0

Você também pode fornecer um alias especial que o usuário que você está interessado fará com que esse erro seja usado. por exemplo,

alias rm-test="rm test*"

Mais uma vez, é mais uma solução, mas, em geral, * nix assume que você sabe o que está fazendo e pretende fazer o que diz.

    
por 13.06.2011 / 16:29

Tags