RM - Prevenindo Acidentes
Tópicos:
- Comando 'rm' não tem 'trash' (lixeira)
- Solução nº 1 - interactive mode
- Solução nº 2 - um alias para o interactive mode
- Solução nº 3 - trash-cli - lixeira na linha de comando
Comando rm não tem trash
Cuidado!!! No terminal, na linha de comando, quando se digita:
# rm segredo_mundial.txt
O arquivo "segredo_mundial.txt" já era. Não tem mais o que fazer.
Solução nº 1 - Interactive Mode
Sempre use a opção '-i', ou '--interactive' com o comando 'rm' e torne isto um hábito. Esta opção se prontifica a nos perguntar se realmente desejamos deletar o arquivo:
rm -i segredo_mundial.txt
$ rm --interactive segredo_mundial.txt
Cuidado com a flag '-f' ou '--force'. Com ela, as opções '-' ou '--interactive' se tornam inúteis, ou seja, eles são completamente ignorados.
Há um truque que pode ser aplicado, digamos que temos um diretório contendo arquivos muito importantes. Podemos criar um arquivo chamado '-i' dentro deste diretório.
Como o arquivo contém '-' no nome, não podemos simplesmente fazer 'touch -i', pois o comando 'touch' vai pensar que estamos passando a opção '-i' como argumento, e o comando 'touch' nem tem uma opção chamada '-i'.
As duas possíveis maneiras de criar o tal arquivo estão exemplificadas abaixo:
touch -- -i
Ou:
touch ./-i
A partir de agora, se você fizer:
rm -Rf *
O shell vai expandir o '-i' na linha de comando, de tal forma que seu comando na verdade se transforma em:
rm -Rf -i
Note que isto só funciona se você usar o 'glob' (*). Se tentar deletar um arquivo por vez, o arquivo '-i' não vai te ajudar.
Vamos aprender outro truque quando falarmos do programa 'trash-cli'.
Se quiser remover o arquivo '-i', não basta fazer 'rm -i' porque o 'rm' tem de fato a opção '-i'. Então 'rm -i' é o comando 'rm', seguido da opção '-i'; mas ainda falta dizer ao 'rm' qual arquivo ou arquivos deletar, por que ele não sabe que '-i' é um arquivo e não uma opção.
Usamos uma técnica similar à que usamos para criar o arquivo. As duas soluções possíveis são:
rm -- -i
Ou:
rm ./-i
Solução nº 2 - um alias para o Interactive Mode
A solução nº 2 consiste em colocar o que aprendemos acima em um 'alias' (um apelido em Inglês).
Vamos criar um alias que faz com que o comando 'rm' sempre seja executado com 'rm --interactive':
alias rm='rm --interactive'
Digite o comando acima em um terminal e tente remover um arquivo (não teste com nada que seja importante). Para testar, rode apenas 'rm arquivo.txt' e você vai notar que ele pergunta se temos mesmo certeza de que queremos deletar o arquivo em questão.
Se você gostou da ideia, coloque o comando que cria o 'alias' no "~/.bashrc". Para que o 'alias' entre em vigor, feche e abra o terminal novamente ou rode o comando:
source ~/.bashrc
A partir de agora, toda vez que você digitar 'rm', o Bash interpreta o 'alias' e na verdade vai executar 'rm --interactive'.
Solução nº 3 - trash-cli - lixeira na linha de comando
Instale o programa 'trash-cli'. Enquanto escrevo este documento, 'trash-cli' está disponível pelo AUR para o Arch
Linux, mas pesquisas pela WEB fazem acreditar de que já está nos repositórios oficiais de muitas distribuições.
O programa 'trash-cli' vem com três comandos principais:
1. trash-empty: esvazia a lixeira;
2. trash-list: lista os arquivos da lixeira;
3. trash-put: manda arquivos para a lixeira.
Para mais informações, leia o Help de cada uma das variações do 'trash-cli':
$ trash-empty --help
$ trash-list --help
$ trash-put --help
O problema agora é criar o hábito de usar o 'trash-cli' em vez do bom e velho 'rm'. Sim, porque nós instalamos o programa, mas por força do hábito é bem provável que continuemos usando o 'rm' sem nem notar.
Vamos então usar um truque para, digamos, desabilitar o comando 'rm'. O truque consiste em, novamente, criar um 'alias'. Mas antes disso vamos falar de comentários no Bash (com poucos ajustes todas essas dicas funcionam em outros shells).
Um comentário no Bash inicia com '#'. Rode o seguinte comando direto do terminal:
# echo 'Hello, world.'
Essa linha não vai executar nada. É um comentário apenas. Tente esta outra:
echo 'Hello, ' # world'
O 'echo' acima só vai mostrar 'Hello, '. O resto da linha é comentário.
Então, a ideia é criar um 'alias' que comente o 'rm'. É fácil:
alias rm='# rm'
Pode colocar o 'alias' no "~/.bashrc" e rodar 'source ~/.bashrc'. A partir de agora, toda vez que você digitar 'rm', ele simplesmente nem sequer será executado, pois agora ele foi 'comentado'.
No então, há alguns pontos a serem considerados:
1. Se você executar outro Shell a partir do shell que contém o 'alias', o outro shell não vai herdar o 'alias', portanto, 'rm' desse outro shell vai funcionar normalmente.
2. Importante: você executou essas operações no terminal como usuário, e configurou o "~/.bashrc" em nível de usuário. A conta do Root continua com as configurações default. Como o Root é um usuário ainda mais crítico no sistema, considere colocar essas configurações no "/root/.bashrc".
Fiz esse arquivo no Vim. Quem quiser pode baixar a versão que converti com o TOhtml.
Nota: O WordPress não me permitiu fazer upload do arquivo HTML e nem Zip, então eu renomeei ele para ".pdf" para poder fazer o upload. Baixe o arquivo e renomeie a extensão para ".html" novamente antes de tentar abrir o arquivo.