.:: Jorge Pereira ::.

- O Fim do rm -rf /

rm -rf /

Algumas pessoas que me conhecem sabem que eu costumo brincar fazendo analogias ao comando rm -rf /, pois bem! Recentemente foi adicionado um patch ao pacote coreutils que por sua vez foi adotado por algumas distribuições Linux, entre elas o pessoal do Debian aderiu este patch na sua versão unstable assim como percebi também que no Ubuntu 8.10 já possui tal modificação no coreutils. Que por sua vez desabilita a possibilidade de você acidentalmente ou não execute um rm -rf /, veja exemplo abaixo.

# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 5.0 (lenny)
Release: 5.0
Codename: lenny
# rm -rf /
rm: cannot remove root directory ‘/’
#

Pois se caso você queira realmente desestressar e mostrar que você e quem manda na sua máquina, não tem problema! basta adicionar a opção –no-preserve-root e dai você terá a liberdade de expressar seus sentimentos de fúria ou autoridade sobre o seu Linux! Mesmo assim fiquei ainda curioso e fui ver no código fonte sobre a veracidade deste feito, abaixo seguem os trechos para caso você queira também dar uma olhada tanto no funcionamento do comando rm como também tal “cuidado” adicionado recentemente.

1) Baixando o fonte via apt-get

$ lsb_release -c -r
Release: 8.10
Codename: intrepid
$
$ sudo apt-get source coreutils
$ cd coreutils-6.10/
$ sudo tar -xzf coreutils-6.10.tar.gz
$ find $PWD -iname “rm.c”
/tmp/coreutils-6.10/src/rm.c
$

2) Verificando tais trechos mais interessantes.

//$ cat -n coreutils-6.10/src/rm.c | sed '227,233!d'
227    int
228    main (int argc, char **argv)
229    {
230      bool preserve_root = true;
231      struct rm_options x;
232      bool prompt_once = false;
233      int c;
// $ cat -n coreutils-6.10/src/rm.c | sed '348,355!d'
348      if (x.recursive & preserve_root)
349        {
350          static struct dev_ino dev_ino_buf;
351          x.root_dev_ino = get_root_dev_ino (&dev_ino_buf);
352          if (x.root_dev_ino == NULL)
353            error (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
354            quote ("/"));
355       }
// $

3) Conforme trecho do próprio man do comando rm, a opção vem habilitada por padrão para evitar tais “imprevistos”!

$ cat -n <(man rm) | sed ’45,51!d’
45
46 –no-preserve-root
47 do not treat ‘/’ specially
48
49 –preserve-root
50 do not remove ‘/’ (default)
51
$

Então concluímos que não e bem o fim do famoso “rm -rf /”, agora e preciso adicionar o parâmetro “–no-preserve-root” para que você consiga mostrar quem e que manda! e durante pesquisas descobri que tal cuidado já havia sido adotado pela Sun no Solaris conforme este link.

OBS: Eu não me responsabilizo por nada que você venha a testar ou fazer relacionado a leitura deste POST, seja cuidadoso! :P

10 Comments

  1. Fabiano Arruda says:

    leva teu laptop la pra o trabalho que eu quero fazer um teste passando no-preserve-root pra ver no que dá =D

    sei que é esse comando que vc tá colocando no crontab agora viu =)

    []s
    fafg

  2. Larry Jr. says:

    vc eh corajoso e testou isso na sua maquina ou foi direto pro fonte?

  3. jpereira says:

    Nada!

    Fui ver no código fonte e mandei ver em uma vm que uso só para testes! :)

    []s

  4. Já não era sem tempo, tardou mas não falhou :D
    Jorge, agora assim.. não deixe de fazer suas “analogias” como você mesmo disse, por conta disto não. Faça feito eu, nem mesmo fora do IRC, ou das rodas de bate-papo com os amigos, eu deixo de dizer: BORA VUGO!!!!!!!!!!!!!!!!!!!!!!
    (só quem é da turma sabe oq eu to falando)
    OBS: este meu post não foi e não é inútil, é apenas pra descontrair. :D

  5. jpereira says:

    Gabriel,

    Tu continua maluco como sempre cara!

    Abraços! :)

  6. Rafael says:

    Jorge,

    avisa a Beto que agora ele pode usar Linux sossegado sem precisar fazer backup diário :twisted:

  7. Aline says:

    Outra opção em vez de montar um vm e rodar diretamente e (muito) rapido depois botar Ctrl-C. No tempo que roda, não deve tocar arquivos super importantes, deixando a maquina inútil. Só pra ver se mostra “cannot remove root directory” ou não. Mas tem que ser rápido, viu?

  8. jpereira says:

    Aline,

    So se for na “velocidade da luz” e de qualquer forma não e uma brincadeira ou teste nada saudável!

    []s

  9. edmar says:

    Boa tarde, estou precisando fazer um comando um programa no Shell do Gnu Linux em que ao deletar um arquivo com ele não exclua definitivamente mas não consigo acha um código fonte do rm para estudar como ele é construído e a partir dai então elaborar meu código, vc tem ou sabe onde consigo o código fonte do rm?
    Agradeço a atenção e fico no aguardo.

    Atenciosamente
    Jose Edmar de Siqueira

    1. jpereira says:

      Edmar,

      Experimente procurar pelo pacote “coreutils”

      Abraços,

Leave a Reply

*