Por vários anos, o rm
utilitário GNU não será excluído, a /
menos que seja chamado com a --no-preserve-root
opção No entanto, o comando rm -rf /
foi apresentado no subconsciente coletivo como perigoso por muito tempo e as pessoas ainda o citam como um comando "assustador".
Eu queria saber quando esta regra que rm
não pode excluir /
apareceu pela primeira vez. Eu verifiquei as especificações do POSIX e posso ver que, embora o POSIX: 2008 inclua esse recurso de segurança, o POSIX: 2001 não. Como as versões online das especificações do POSIX são atualizadas de tempos em tempos, a cada novo sub-release, eu também verifiquei a máquina de wayback e encontrei a página relevante do POSIX: 2008 a partir de 2010 e pude confirmar que a regra que rm
não pode ser removida /
já estava listado então.
Então, minhas perguntas são:
- Quando a regra que
rm
não pode ser removida foi/
adicionada às especificações do POSIX? Foi na edição original de 2008 da Single UNIX Specification versão 4 ou foi adicionada em uma revisão? - Quando essa limitação foi adicionada ao GNU
rm
? Tenho certeza de que foi antes de ser adicionado ao POSIX, mas quando isso aconteceu?
Respostas:
Você pode encontrar a versão HTML de todas as edições do POSIX 2008 online:
Isso foi adicionado na edição de 2008.
As corrigendas técnicas geralmente não adicionam novos recursos.
Você pode ver a versão anterior ( http://pubs.opengroup.org/onlinepubs/009695399/utilities/rm.html ) (POSIX 2004) não tinha esse texto.
O novo texto foi aceito na conferência do grupo austin de 2003-05-09 para inclusão em uma revisão posterior do padrão.
Foi solicitado por John Beck, da Sun Microsystems, em março do mesmo ano (o link requer registro de grupo aberto, consulte também o Pedido de Aprimoramento Número 5 aqui ).
O GNU
rm
adicionou--preserve-root
e--no-preserve-root
opções neste commit de 2003-11-09 , mas--preserve-root
só se tornou o padrão no commit de 03-09-2006 , portanto no coreutils 6.2O FreeBSD preserva a barra desde o commit de 04/10/2004 (com um log de commit "Descubra como minhas roupas íntimas são à prova de chamas" ), mas inicialmente não quando estava abaixo
POSIXLY_CORRECT
, até que eles se lembraram de verificar uma década depois que o POSIX estava agora obrigando-o a que ponto foi feito também no modo POSIX .O commit inicial do FreeBSD menciona que o Solaris já estava fazendo naquele momento.
O @JdePB (no comentário abaixo) descobriu que o link para uma matéria privilegiada da Sun corroborava e fornecia mais detalhes sobre a origem do Solaris e sugeria que o Solaris já tinha a salvaguarda em vigor antes de fazer a solicitação ao grupo de Austin.
Explica a justificativa para adicionar essa exclusão. Enquanto um só pode culpar a si mesmo se eles fizerem isso
rm -rf /
, há um caso em que um script poderia fazê-lo se fazerrm -rf -- "$1/$2"
sem verificar que$1
/$2
foram fornecidos que é a coisa que atingiu alguns Sun clientes ruim quando aplicar erradamente um patch Solaris (de acordo com esse link).A proibição de exclusão
.
e..
foi adicionada muito antes disso e novamente para proteger contra possíveis contratempos.rm
ainda é um comando perigoso. Ele faz o que deve fazer: remova o que você mandou.Também removeria tudo. Sabe-se que a conclusão do nome de arquivo do shell causa esses problemas quando você faz
Expandido para:
Porque
something
assim aconteceu para não ser um diretório.Os shells gostam
tcsh
ouzsh
adicionam um prompt extra ao tentar chamarrm
com um*
curinga (tcsh
não por padrão).fonte
rm -rf .*
seu diretório pessoal. Logo depois, todas as linhas telefônicas se iluminaram ...