O que rm -rf faz?

25

O que rm -rffaz quando usado para remover arquivos ou diretórios?

Como as opções -re -ffuncionam juntas?

Diga-me o porquê
fonte
6
Como é que isso não foi perguntado antes ?
Dan Dascalescu
16
@DanDascalescu Porque é trivialmente respondido lendo a página de manual, que deve ser o primeiro porto de escala de qualquer pessoa para responder a uma pergunta como esta.
precisa saber é o seguinte
9
Experimente e veja. (Spoiler: don't.)
imallett
3
Por Golly! Esta pergunta deve ser uma brincadeira do DevRobot! Como você poderia chegar ao seu nível de carma sem consultar as páginas de manual? Agora ... você é humano ?!
Cbhihe
2
Totalmente lê como uma brincadeira de fato. Como se alguém tentasse perguntar: "a chuva é feita de H2O?" (Uma boa resposta seria: Normalmente sim, mas no futuro, uma vez que o homem seja destruído metade da flora da Terra, 50% dela se transformará em ácido (como na chuva ácida))
syntaxerror

Respostas:

52

O comando rm -rfé o mesmo que rm -r -f.

Na rmpágina do manual (digite man rmum terminal para vê-lo) -r:

remove directories and their contents recursively

E -ffaz:

ignore nonexistent files and arguments, never prompt

Então, em combinação, eles fazem as duas coisas.

Na verdade, é um comando muito perigoso, porque removerá recursivamente tudo o que estiver dentro do diretório que você escolher (ou apenas removerá o arquivo que você escolher) e fará isso sem nunca solicitar a solicitação.

Por favor, use este comando com cuidado!

Fabby
fonte
@Paul, o que a barra faria? Eu uso esse comando para remover diretórios frequentemente e sem uma barra.
Octopus
1
@ Octopus, a barra por si só indica o diretório raiz. rm -rf /teoricamente excluirá todos os arquivos do seu computador que residam em um diretório para o qual você tenha permissão de gravação. Se você é root, isso significa acabar com o sistema inteiro. (Na prática, ele não funciona porque GNU rmtem um caso especial que se recusa a permitir que rm -r /a menos que você também dizem --no-preserve-root.)
CJM
10
Mesmo assim, não recomendo tentar rm -rf /ver se foi capturado corretamente.
Cjm 06/09/2015
2
@mattburnett Também é perigoso em uma VM: você pode ter montagens que não são locais para a VM. Em particular, acredito que seja bastante comum montar um dos diretórios da máquina host na VM para compartilhar arquivos entre o host e a VM.
hvd
1
@mattburnett Eu tenho VMs. Eu não tenho uma VM em quarentena. Eu apenas não corro executáveis ​​desconhecidos. :)
hvd
22

Além da resposta correta anterior, eu gostaria de ensinar como pescar:

Quando você não tiver certeza de como um comando funciona, quais opções têm e o que faz, abra um terminal e digite

man <command>

Por exemplo:

man rm

Uma vez lá, você pode procurar a opção. Uma página de manual pode ser muito longa para ler, portanto, no tipo de terminal:

/<pattern>

Então, por exemplo, fazendo:

/-f

Você pode facilmente chegar a:

-f, --force
              ignore nonexistent files and arguments, never prompt

Para -r do:

-r, -R, --recursive
              remove directories and their contents recursively

Você pode alternar entre os resultados da pesquisa usando n(próximo) e N(anterior).

Bônus:

Se você precisar fazer algo, mas não souber o nome do comando, use apropospara pesquisar nas páginas do manual:

apropos <pattern>

Por exemplo:

apropos directory listing
Federico Ponzi
fonte
8

rmé curto para remover. O rsinalizador é para remover diretórios e seu conteúdo recursivamente e os fmeios forçam, e substitui qualquer solicitação de confirmação.

Chris
fonte
3
Estritamente falando, r flag is to remove directories não é certo .. remove os diretórios junto com seu conteúdo, é uma operação recursiva .. de acordo com suas palavras, ele apenas removeria os diretórios, e quanto aos subdiretórios, arquivos sob ele? como entrada de diretório contém o mapeamento nome-inode somente, isso só não faz qualquer sentido ..
heemayl
Você está certo, eu vou editar minha resposta.
Chris
1
-r remove diretórios e seu conteúdo recursivamente.
Jim Balter
3

Como já foi mencionado, o rm -rf <ARG>objetivo é remover arquivos recursivamente à força, onde <ARG>há um diretório (embora possa ser um arquivo muito bem).

O ponto principal de -r(remoção recursiva) é que rmnão é possível remover diretórios se eles não estiverem vazios, simplesmente porque a chamada do sistema subjacente que rmusa ( desvincular ) opera apenas em diretórios vazios. Assim, o que o -rsinalizador faz é a pesquisa aprofundada, descendente nos diretórios e a remoção dos arquivos primeiro, e somente quando o diretório estiver vazio - ele será removido. Esse mesmo efeito é alcançado via findcomando com -deletesinalizador (quando você não especifica a filtragem por -type, mas isso é outra história).

Quanto a -fisso, ele faz duas coisas - uma evita perguntar se você deseja remover o arquivo ou não (como quando você está removendo um arquivo pertencente a outro usuário de dentro do seu diretório, ele não mostra rm: remove write-protected regular empty file 'f1'?o prompt de confirmação) e ignora arquivos inexistentes. Por exemplo, com um nome de arquivo inexistente, você deve receber um rm: cannot remove 'nonexistent': No such file or directoryerro.

Veja também:

Sergiy Kolodyazhnyy
fonte