sudo rm -rf --no-preservar-root / vs sudo rm -rf / *

1

Como todos sabem, estes são dois comandos mortais de unix que dizem a uma máquina para cometer suicídio. Mas qual é a diferença entre os dois? O primeiro exclui o diretório raiz, enquanto o segundo exclui tudo nele. Ambos são igualmente ruins, mas o primeiro excluirá o sistema de arquivos porque ele exclui o próprio diretório raiz? Qual a diferença?

    
por jadenPete 10.08.2016 / 07:56

2 respostas

2

A mesma diferença que com rm -r dir e rm -r dir/* .

O segundo apenas remove o que quer que seja o glob, normalmente todos os arquivos cujo nome não começa com um ponto, mas podem ser configurados no bash e provavelmente em outros. Ele também falhará se você tiver lotes de arquivos no diretório, já que a linha de comando só pode se ajustar tanto. Não que você normalmente tenha no diretório raiz, mas ainda assim.

O primeiro irá recorrer a dir , removendo todo o conteúdo e, em seguida, o próprio diretório. Mas, como dito, você não pode remover o diretório raiz de qualquer maneira. No Linux, o erro que você recebe é Device or resource busy , que é exatamente o que você está tentando remover qualquer diretório que possua um sistema de arquivos montado. (Ele nem se incomoda em verificar se o diretório está vazio antes de soltar isso.)

Pela mesma razão, normalmente não é possível obter o diretório raiz vazio, você terá coisas como /proc e /sys (no Linux) montadas e não será possível remover os pontos de montagem sem desmontar eles.

E bem, estritamente falando, remover todos os arquivos não mata o sistema ... Ele apenas faz o paradigma usual de lançar programas externos para fazer coisas um pouco difíceis de usar. Mas a execução de programas que não precisam mais de arquivos no sistema de arquivos não seria afetada. Você pode tentar com algo como busybox shell, que integrou rm e ls . (Inicializar da próxima vez pode ser difícil, se os arquivos de inicialização estiverem em um sistema de arquivos montado).

    
por 10.08.2016 / 10:16
0

--no-preserve-root ignora a diretiva --preserve-root oposta, que pode ser definida como um alias ou até mesmo uma opção padrão em rm , dependendo do sistema. Esta opção é meramente uma proteção super novato que não protege muito o sistema contra alguém que executaria tal comando em primeiro lugar.

Se não houver uma diretiva --preserver-root (ignorada ou padrão), rm tentará excluir tudo no sistema.

Observe que sempre falhará, pois há muitos arquivos que não poderão ser excluídos porque estão abertos. Observe também que / é uma construção de kernel e não pode ser excluída em nenhum caso, mesmo se fosse possível excluir todo o conteúdo montado.

    
por 10.08.2016 / 08:23