
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!






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
vc eh corajoso e testou isso na sua maquina ou foi direto pro fonte?
Nada!
Fui ver no código fonte e mandei ver em uma vm que uso só para testes!
[]s
Já não era sem tempo, tardou mas não falhou
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.
Gabriel,
Tu continua maluco como sempre cara!
Abraços!
Jorge,
avisa a Beto que agora ele pode usar Linux sossegado sem precisar fazer backup diário
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?
Aline,
So se for na “velocidade da luz” e de qualquer forma não e uma brincadeira ou teste nada saudável!
[]s
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
Edmar,
Experimente procurar pelo pacote “coreutils”
Abraços,