Eu já vi algumas perguntas aqui onde as pessoas acidentalmente fazem rm -rf --no-preserve-root
ou rm -rf *
eliminam a maioria ou todo o sistema de arquivos antes que possam reagir.
Existe alguma razão para usar --no-preserve-root
, seja em uso normal, como desenvolvedor ou administrador?
/
, mas o »caso geral« ainda está representado. Em outras palavras: »Não é o trabalho do meu computador me dizer o que fazer.« E não deveria ser.Respostas:
IMPORTANTE: Os modernos sistemas UEFI montam o firmware no
/sys
diretório e o tornam disponível para o sistema operacional. NÃO execute este comando em um sistema moderno, pois ele removerá esse firmware, bloqueando sua máquina.O cenário mais simples em que consigo pensar é em alguém que deseja excluir todos os dados da unidade. Pode haver razões perfeitamente legítimas para fazer isso, e a maneira mais simples de pensar é
Acontece que este é realmente dado como um exemplo em
info rm
:Outro motivo perfeitamente bom é que você deseja excluir um sistema de arquivos montado no qual
chroot
inseriu. Nesse caso,rm -rf --no-preserve-root /
excluirá o sistema nochroot
ambiente, mas deixará o seu intacto.Estou certo de que existem mais motivos possíveis, mas, em geral, parece uma abordagem bastante razoável que meu sistema permita que eu faça o que eu quiser com ele. É meu trabalho ter cuidado, o sistema só deve me permitir fazer o que quero que seja feito. Se o que eu quero é estúpido, esse é o meu problema e não os SOs.
De qualquer forma, essa é uma restrição relativamente nova, foi adicionada na 7ª versão da especificação POSIX (a anterior está aqui), antes que esse
rm -rf /
fosse um comando perfeitamente válido. Em uma nota histórica, os diretórios.
e..
sempre foram protegidosrm
, desde 1979, quandorm
adquiriram a capacidade de excluir diretórios. Mais sobre isso aqui .fonte
/
.rm -rf /
você pode colocar uma máquina remota em branco sobre a montagem NFS / CIFS / SSHFS de alguém, por exemplo.A existência do
--no-preserve-root
interruptor não é para adicionar funcionalidades adicionais, mas para substituir uma redução muito sã em termos de funcionalidade. Essa opção provavelmente se baseia na filosofia de que o computador deve fazer o que foi solicitado e que os comandos devem estar disponíveis para expressar qualquer ação desejada. Essa opção é anterior à UEFI e, com base na minha experiência, digo que agora está obsoleta.Na prática moderna, sem essa opção, o
rm
comando evita a exclusão acidental do diretório raiz ao usar uma variável não inicializada ou um espaço disperso.Nota de rodapé divertida: A proteção não era sua intenção. Em um blog da Sun Microsystems, a remoção do
/
diretório removerá implicitamente o diretório de trabalho atual, uma violação da consideração especial já feita para os diretórios.
e..
. É por isso que o comitê de padrões permitiu essa exceção especial - não para prevenir um acidente. Esta alteração foi introduzida pela primeira vez com o Solaris 10 build 36.http://archive.is/5lmc9
fonte
Talvez essa não seja uma resposta que o solicitante original deseja, mas existe um caso de uso que precisa excluir todos os arquivos recursivamente do diretório raiz. Embora não seja através do
rm
comando, ele faz parte do processo switch_root (8) durante a inicialização do seu sistema Linux (não incorporado).fonte