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 alojado no subconsciente coletivo como perigoso por muito tempo e as pessoas ainda o citam como um comando "assustador".
Eu queria saber quando essa 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-lançamento, também verifiquei a máquina de retorno e encontrei a página relevante do POSIX:2008 de 2010 e pude confirmar que a regra que rm
não pode remover /
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 POSIX? Ele estava na edição original de 2008 da Single UNIX Specification versão 4 ou foi adicionado 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?
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 correções técnicas geralmente não adicionam novos recursos.
Você pode ver que 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 de austin em 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 em opengroup, veja também Solicitação de Aprimoramento Número 5 aqui ).
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 neste commit de 2006-09-03 , então no coreutils 6.2O FreeBSD tem preservado o slash desde o commit de 2004-10-04 (com um log de commit "Descubra como minha cueca realmente é à prova de chamas" ), mas inicialmente não quando sob
POSIXLY_CORRECT
, até que eles se lembraram de verificar uma década depois que o POSIX era agora obrigando-o em que ponto foi feito também no modo POSIX .O commit inicial do FreeBSD menciona que o Solaris já estava fazendo isso naquela época.
@JdePB (no comentário abaixo) encontrou esse link para uma história interna da Sun corroborando e dando mais detalhes sobre a origem do Solaris e sugerindo que o Solaris já tinha a proteção em vigor antes de fazer o pedido ao grupo de Austin.
Ele explica a justificativa para adicionar essa exclusão. Embora alguém só possa se culpar se o fizer
rm -rf /
, há um caso em que um script poderia fazê-lorm -rf -- "$1/$2"
sem verificar se$1
/$2
foram fornecidos, o que atingiu alguns clientes da Sun ao aplicar incorretamente um patch do Solaris (de acordo com esse link).A proibição de exclusão de
.
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: remove o que você manda.Também removeria tudo. A conclusão do nome do arquivo Shell é conhecida por causar tais problemas quando você faz
Expandido para:
Porque
something
aconteceu de 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).