Acabei de perder alguns dados na pasta A, que estava dentro da pasta B depois de fazer rm -rf B
. Antes que eu pudesse perceber o que fiz, tudo acabou. Agora que uma lição é aprendida, desejo tornar algumas das minhas pastas à prova de idiotas para evitar uma próxima vez em que fizer algo semelhante e quiser me matar.
Uma maneira de pensar é escrever uma função bash e alias-la rm
. Esta função procurará em cada subpasta um arquivo oculto, como .dontdelete
. Quando encontrado, perguntaria se eu realmente queria continuar. Eu não posso fazer é protegido contra gravação, pois há um processo que constantemente escreve para esta pasta. Existe alguma maneira melhor de fazer isso?
permissions
directory
rm
Dilawar
fonte
fonte
rm
pararm -i
:> -i solicitar antes de cada remoção ou> -I solicitar uma vez antes de remover mais de três arquivos ou ao remover recursivamente. Menos invasivo que -i, ao mesmo tempo em que protege contra a maioria dos erros Você pode escrever aqueles com outros sinalizadores a qualquer momento.safe-rm
tmpwatch
para excluir arquivos dessa pasta a cada hora.Respostas:
Ao pesquisar sua pergunta, me deparei com essa técnica que pode ajudá-lo no futuro.
Aparentemente, você pode tocar em um arquivo no diretório da seguinte maneira:
Agora, quando você executa o comando
rm -fr *
em um diretório em que o-i
presente está presente, será apresentado o prompt interativo derm
.A mesma coisa pode ser alcançada deixando um alias no lugar para
rm
sempre fazerrm -i
. Isso pode ser irritante. Muitas vezes, o que eu vi fazer é ter esse alias no lugar e desativá-lo quando você realmente deseja excluir sem ser solicitado.Agora, nos diretórios, você será recebido assim:
Para substituir o alias:
Isso ainda não para de
rm -fr
qualquer maneira. Mas isso fornece alguma proteção.Referências
fonte
--force
algo, realmente está falando sério.rm -I
(maiúsculasi
) pode ser útil em um alias, pois é um pouco menos invasivo (de acordo com a página do manual, somente solicita se você remover mais de três arquivos ou recursivamente).touch ./-i
truque só funciona com o GNUrm
e somente se a variável POSIXLY_CORRECT não estiver configurada (os comandos POSIX não reconhecem opções após argumentos).Muitas possibilidades:
alias rm='rm -i'
- rm perguntará - a menos que você especifique-f
...chmod -w dir
- protege os arquivos diretamente nesse diretório.chattr +i
se você realmente quer dizer issoMas uma maneira melhor é provavelmente ter um bom backup e manter dados importantes em algum tipo de controle de versão (como
git
), o que traz muitas outras vantagens também.fonte
rm -i
mas como seria de esperar, ele não funciona com-f
opção. Eu uso o git para muitos outros fins, mas e se eu acidentalmente também o fizerrm -rf *
?Use um software de controle de versão como
git
para encapsular seus projetos.Contanto que você não exclua um projeto inteiro, será necessário digitar propositadamente
rm -rf .*
para remover o.git
diretório e perder todos os dados necessários para uma reversão.Isso tem o benefício adicional de poder enviar backups de suas coisas para um servidor remoto como o github ou o bitbucket.
fonte
Veja como
rm -rf dir
funciona:dir
e lista seu conteúdo.unlink
-o.Se você pudesse, para a listagem de diretórios, retornar um nome de arquivo especial primeiro e se pudesse causar
unlink
a morte de um processo que faz um arquivo nesse arquivo, isso resolveria o problema. Isso pode ser feito usando um sistema de arquivos com fusível.Por exemplo, você pode adaptar o
loopback.pl
exemplo do módulo perl Fuse, que apenas implementa um sistema de arquivos fictício que é apenas uma passagem para um sistema de arquivos real por baixo (veja também o patch abaixo):.{{do-not-delete}}.
, anteceda a lista de entradas com dois arquivos:.{{do-not-delete}}!error
e.{{do-not-delete}}!kill
unlink
o primeiro, retorne oEPERM
código pararm
exibir uma mensagem de errounlink
o segundo, o processo é interrompido.Aqui, um patch a ser aplicado sobre esse
loopback.pl
exemplo como prova de conceito:fonte
Eu criei um script para facilitar essa tarefa. O script shell modifica a permissão de leitura / gravação e o sinalizador chattr de uma determinada lista de pastas de maneira interativa, sem solicitar a senha do root. Você pode fazer o download do arquivo zip no link abaixo.
https://drive.google.com/file/d/0B_3UYBZy2FVsMVpBSWdSWnFBYk0/edit?usp=sharing
Também incluí o script de instalação para facilitar a instalação. As instruções estão incluídas no arquivo zip.
fonte