Não se esqueça da possibilidade de o servidor estar inacessível após o comando rm
não ter nada a ver com isso. Pode ser uma coincidência!
O mais provável é que o diretório de trabalho atual não tenha sido o que você pensou, quando o comando foi emitido.
Você estava zangado ao fazer isso?
Isso é o que acontece ao emitir o comando rm -rf *
:
- O shell resolve os padrões de curinga (
*
neste caso) para todos os arquivos (incluindo diretórios, links simbólicos e arquivos especiais de dispositivo) que correspondam ao padrão de globbing usado, neste caso tudo não começando com.
Normalmente , estes são classificados "alfabeticamente" pelo shell. - O shell então bifurca um novo processo e
exec()
s a primeira versão derm
encontrada em seu$PATH
, com-rf
como o primeiro argumento e os arquivos correspondentes, um por um como os argumentos consecutivos .
Se o rm
que foi invocado for o comando rm
padrão, ele primeiro analisa os argumentos, um por um, tratando todos os argumentos (incluindo os resultantes da globalização shell) que começam com -
como opções até chega-se a um argumento que não começa com -
(exceto para comandos usando GNU getopt()
que aceitam opções após não-opções), ou um que é exatamente --
. Tudo depois disso é considerado nomes de arquivos.
Em outras palavras, se você tivesse um arquivo chamado (por exemplo) --no-preserve-root
no diretório atual, isso seria interpretado como uma opção para rm
, não como um nome de arquivo para remover!
Tenha cuidado com os curingas (e com a nomeação de arquivos). Se você tiver um arquivo chamado -r
no diretório atual, o comando ls *
listaria os outros arquivos na ordem inversa e não mostraria o arquivo '-r'.
Em outras palavras, se você tivesse um arquivo chamado --no-preserve-root
, isso seria passado como uma opção para rm
, não como um nome de arquivo.
Use rm -rf -- *
para evitar que isso aconteça e remova os arquivos que começam com -
. Ou simplesmente use nomes de caminho absolutos ou relativos para fazer com que os nomes de arquivos comecem com algo diferente de -
, como em: rm ./--flagfile
ou rm /abs/path/to/--flagfile
.
Existe também um sinal -i
para rm
que faz com que seja solicitado ("interativamente") antes de remover qualquer coisa.