Eu acho que muitas pessoas aqui por engano ' rm -rf
' ed o diretório errado, e espero que não tenha causado um grande dano. Existe alguma maneira de impedir que os usuários façam uma história de terror unix semelhante ? Alguém mencionou (na seção de comentários do link anterior ) que
... Eu tenho certeza que agora todos os cursos ou empresas unix que usam unix sets rm -fr para desativar contas de pessoas tentando executá-lo ou impedi-lo de executá-lo ...
Existe alguma implementação disso em qualquer distribuição atual do Unix ou Linux? E qual é a prática comum para impedir esse erro mesmo de um administrador de sistema (com acesso root)?
Parece que havia alguma proteção para o diretório raiz ( /
) no Solaris (desde 2005) e GNU (desde 2006). Existe alguma maneira de implementar a mesma maneira de proteção para algumas outras pastas também?
Para dar mais clareza, não estava perguntando sobre conselhos gerais sobre rm
uso (e atualizei o título para indicar mais), quero algo mais parecido com a proteção da pasta raiz: para que rm -rf /
você precise passar um parâmetro específico: rm -rf --no-preserve-root /
.. Existem implementações semelhantes para conjunto de diretórios personalizado? Ou posso especificar arquivos além /
de serem protegidos pela opção preserve-root ?
fonte
rm
comando por um que não possua esse recurso.rm -rf
pode ser um evento de geração de currículo. Verifique e verificação tripla antes de executá-loRespostas:
Para evitar um erro
rm -rf
, não digiterm -rf
.Se você precisar excluir uma árvore de diretórios, recomendo o seguinte fluxo de trabalho:
mv directory-to-delete DELETE
DELETE
e verifique se é realmente o que você deseja excluirrm -rf DELETE
Nunca ligue
rm -rf
com um argumento que não sejaDELETE
. A exclusão em várias etapas dá a você a oportunidade de verificar se você não está excluindo a coisa errada, seja por causa de um erro de digitação (como emrm -rf /foo /bar
vez derm -rf /foo/bar
) ou por causa de um braino (opa, não, eu pretendia excluirfoo.old
e manterfoo.new
) .Se o seu problema é que você não pode confiar em outras pessoas para não digitar
rm -rf
, considere remover os privilégios de administrador. Há muito mais que pode dar errado do querm
.Sempre faça backups .
Verifique periodicamente se seus backups estão funcionando e atualizados.
Mantenha tudo o que não pode ser baixado facilmente de algum lugar sob controle de versão.
Com um sistema unix básico, se você realmente deseja tornar alguns diretórios anuláveis
rm
, substitua (ou melhor sombra)rm
por um script personalizado que rejeite certos argumentos. Ou porhg rm
.Algumas variantes do unix oferecem mais possibilidades.
chmod +a 'group:everyone deny delete_child' somedir
(isso não impede a exclusão dos arquivos nos subdiretórios: se Se desejar, defina também a ACL no subdiretório).rm
modificar determinados diretórios.fonte
--no-preserve-root
opção, por outra pasta importante .. E que, aparentemente, não existe ainda como uma prática ...rm -rf
já significa "excluir isso, sim, tenho certeza que sei o que estou fazendo". Se você quiser mais, substituarm
por um script que se recuse a excluir determinados diretórios.rm
acesso a determinados diretórios. Além disso, como sua pergunta não é apenas sobre Linux, eu deveria ter mencionado o OSX, que tem algo parecido com o que você deseja.Se você estiver usando
rm *
e o zsh, poderá definir a opçãormstarwait
:Agora o shell avisa quando você estiver usando o
*
:Quando você o rejeita (
n
), nada acontece. Caso contrário, todos os arquivos serão excluídos.fonte
zsh -f
utilizado?Para se proteger contra um acidente
rm -rf *
em um diretório, crie um arquivo chamado "-i" (você pode fazer isso com o emacs ou outro programa) nesse diretório. O shell tentará interpretar -i e fará com que entre no modo interativo.Por exemplo: Você tem um diretório chamado
rmtest
com o arquivo chamado-i
inside. Se você tentarrm
tudo dentro do diretório,rm
será-i
passado primeiro a ele e entrará no modo interativo. Se você colocar esse arquivo dentro dos diretórios nos quais gostaria de ter alguma proteção, isso poderá ajudar.Observe que isso é ineficaz contra
rm -rf rmtest
.fonte
> -i
EDIT como sugerido pelo comentário:
Você pode alterar o atributo de para imutável o arquivo ou diretório e, em seguida, ele não pode ser excluído nem pela raiz até que o atributo seja removido.
chattr +i /some/important/file
Isso também significa que o arquivo não pode ser gravado ou alterado de qualquer maneira, mesmo pela raiz . Outro atributo aparentemente disponível que eu ainda não usei é o atributo append (
chattr +a /some/important/file
. O arquivo pode ser aberto apenas no modo append, o que significa que não há exclusão também, mas você pode adicioná-lo (por exemplo, um arquivo de log). não poderá editá-lo,vim
por exemplo, mas você pode fazê-loecho 'this adds a line' >> /some/important/file
. Usar em>
vez de>>
falhará.Esses atributos podem ser desabilitados usando um sinal de menos, ou seja,
chattr -i file
Caso contrário, se isso não for adequado, uma coisa que eu pratico é sempre
ls /some/dir
primeiro e, em vez de digitar novamente o comando, pressione a seta CTL-A para cima e exclua ols
e digite meurm -rf
se for necessário. Não é perfeito, mas olhando para os resultados de ls, você sabe de antemão se é o que você queria.fonte
Se você entende a linguagem de programação C, acho que é possível reescrever o código-fonte rm e fazer um pequeno patch para o kernel. Vi isso em um servidor e era impossível excluir alguns diretórios importantes e quando você digita 'rm -rf / direcotyr', ele envia um email para o sysadmin.
fonte
Uma opção possível é parar de usar
rm -rf
e começar a usarrm -ri
. Oi
parâmetro extra existe para garantir que ele pergunte se você tem certeza de que deseja excluir o arquivo.Provavelmente, sua melhor aposta seria alias de
rm -ri
algo memorávelkill_it_with_fire
. Dessa forma, sempre que lhe apetecer remover algo, vá em frente e mate-o com fogo.fonte
f
é exatamente o oposto dai
opção ?? Eu tentei e funcionou ...r
lá. Apenas consertei.Eu gosto de colocar o nome do diretório primeiro assim:
fonte