Existe um cenário onde rm -rf -no-preserve-root é necessário?

16

Eu tenho visto algumas perguntas aqui onde as pessoas acidentalmente fazem rm -rf --no-preserve-root ou rm -rf * , eliminando a maioria ou todo o sistema de arquivos antes que eles possam reagir.

Existe algum motivo para usar --no-preserve-root , seja em uso normal, como desenvolvedor ou como administrador?

    
por Nzall 16.04.2014 / 10:20

3 respostas

13

IMPORTANTE: Modernos sistemas UEFI, monte o firmware no diretório /sys e disponibilize-o para o sistema operacional. NÃO execute este comando em um sistema moderno, já que ele removerá este firmware, basicamente impedindo a sua máquina.

O cenário mais simples que posso imaginar é alguém que queira excluir todos os dados da sua unidade. Pode haver razões perfeitamente legítimas para isso e a maneira mais simples de pensar é

rm -rf --no-preserve-root /

Acontece que este é realmente dado como um exemplo em info rm :

'--no-preserve-root'
    Do not treat '/' specially when removing recursively.  This option
    is not recommended unless you really want to remove all the files
    on your computer. 

Outra boa razão é que você deseja excluir um sistema de arquivos montado em que você tem chroot . Nesse caso, rm -rf --no-preserve-root / excluirá o sistema no ambiente chroot , mas deixará a sua intacta.

Tenho certeza de que existem mais razões possíveis, mas em geral parece uma abordagem bastante razoável que meu sistema me permite fazer o que eu quiser com ele. Meu trabalho é ter cuidado, o sistema só deve me permitir fazer o que eu quero fazer. Se o que eu quero é estúpido, isso é problema meu e não do sistema operacional.

De qualquer forma, esta é uma restrição relativamente nova, foi adicionada na 7ª versão do a especificação POSIX (a anterior está aqui), antes que rm / fosse perfeitamente válido comando. Em uma observação histórica, os diretórios . e .. sempre foram protegidos de rm , desde 1979, quando rm adquiriu a capacidade de excluir diretórios. Mais sobre aqui .

    
por 17.04.2014 / 03:15
6

A existência da opção --no-preserve-root não é para adicionar funcionalidade adicional, mas para sobrescrever uma redução muito sã na funcionalidade. Essa opção é provavelmente baseada na filosofia de que o computador deve fazer o que é dito e que os comandos devem estar disponíveis para expressar qualquer ação desejada. Essa opção é anterior à UEFI e, com base em minha experiência, digo que agora está obsoleta.

Na prática moderna, sem essa opção, o comando rm evita a exclusão acidental do diretório raiz ao usar uma variável não inicializada ou um espaço perdido.

rm -rf /${my_directory}
rm -rf / var/log/httpd/*

Nota de rodapé divertida: a proteção não foi sua intenção. Por um blog da Sun Microsystems, a remoção do diretório / implicitamente removerá o diretório de trabalho atual, uma violação da consideração especial já feita para os diretórios . e .. . É por isso que seu comitê de normas permitiu essa exceção especial - não para evitar um acidente. Essa alteração foi introduzida pela primeira vez com o Solaris 10 build 36.

link

    
por 26.12.2017 / 23:07
0

Talvez essa não seja uma resposta desejada pelo comprador original, mas há um caso de uso que precisa excluir todos os arquivos recursivamente do diretório raiz. Embora não seja através do comando rm , faz parte do processo switch_root (8) durante a inicialização do seu sistema Linux (não integrado).

    
por 15.05.2017 / 17:28

Tags