Depois do caso que aconteceu com o rapaz que deletou todos os dados da empresa por causa de um comando errado nós temos que ficar mais espertos com nossos códigos e principalmente com scripts prontos que baixamos de terceiros, por exemplo, scripts do Gist, dentre outros.
Importante: Sempre leia os comandos antes de executar scripts de terceiros.
Deletando arquivos via terminal
O comando que o rapaz executou em específico foi
rm -rf *
Vamos por parte:
rm
- é o comando pra deletar arquivos via terminal.
-r
- faz com que delete os arquivos recursivamente, ou seja, deleta tudo das pastas e subpastas.
f
- indica que a ação deve ser forçada, ou seja, não envia nenhuma mensagem de solicitação ou qualquer outro aviso.
Em resumo:
rm -rf *
Deleta tudo das pastas e subpastas sem avisar nada.
Julio Neves em seu artigo Papo de Botequim dá uma dica sobre como contornar esse problema da seguinte forma:
rm \*
Quando usamos barra invertida ele “anula” o parâmetro seguinte, no caso o *
.
O mesmo efeito pode ser obtido no comando a seguir:
rm -rf \*
Uma outra dica que eu falo no meu post Renomeando comandos, é você editar o seu arquivo ~/.bashrc
, escrevendo o seguinte comando:
alias rm='rm -i'
Reinicie o terminal para surtir efeito, ou digite
source ~/.bashrc
A partir de agora quando você usar o comando rm
ele vai pedir confirmação antes de deletar.
Ou você pode desativar o comando enviando uma mensagem. Edite o ~/.bashrc
.
alias rm='echo "rm is disabled."'
Redirecionamento perigoso
Quando digitamos o comando
ls /etc/ > arquivo.txt
Nós redirecionamos a saída do comando ls
para o arquivo.txt. Até ai tudo bem.
O perigo vem agora:
cat arquivo.txt > arquivo.txt
Nós redirecionamos a saída do arquivo.txt para ele próprio. Pronto, acabamos de perder o conteúdo do nosso arquivo.
Isto é perigoso porque se você fizer isso num arquivo importante. Já era!!!
Outro exemplo:
echo "texto" > arquivo.txt
O conteúdo do arquivo.txt é texto.
Se você fizer
echo "palavra" > arquivo.txt
Agora o conteúdo do arquivo.txt é palavra.
Solução
Uma solução para estes problemas é você usar >>
. Assim, ele insere o novo conteúdo numa nova linha de texto, mantendo o conteúdo original.
echo "palavra" >> arquivo.txt
Fazendo
cat arquivo.txt
Teremos
texto
palavra