Apenas 'rm -rf' exclui arquivos?


16

Recentemente corri rm -rf, não rm -rf /, mas nada aconteceu. Acabei de obter um resultado como este:

terminal

Fiquei assustado porque estou preocupado que ele possa ter excluído alguns arquivos, mas não o fez. Apenas tenha certeza, isso poderia ter excluído arquivos do meu diretório?


36
Se você não tiver certeza (certos 100%), não execute um comando.
Solar Mike

5
Nunca digite comandos que você não entende. Tudo que você precisava era de. ou um / e você excluirá MUITAS coisas.
Nelson

18
Se você quiser experimentar comandos potencialmente perigosos, considere instalar uma máquina virtual.
musicman523

6
Experimente tudo o que quiser (desde que seus dados sejam armazenados em backup com segurança). É apenas um software e você sempre pode reinstalá-lo se algo der errado. Não deixe ninguém treiná-lo para ter medo do computador.
hobbs

3
Absolutamente, execute um comando se você não tiver certeza de 100%. Existem tantas maneiras de aprender, e realmente executá-las é uma delas. Advertência ao emptor e possui backups, obviamente, e use VMs e tudo mais. Mas não deixar nada sem medo fará pouco para ajudá-lo a crescer. Deveria ser óbvio quando ter cuidado extra (por exemplo, rm), mas para muitos / muitos outros comandos, por exemplo, todos os comandos de manipulação de texto baseados em pipe, apenas testá-los com frequência é o mais fácil / mais simples que você pode fazer. Juntamente com o estudo da página de manual, obviamente.
AnoE

Respostas:


49

Não, rm -rfnão excluirá nenhum arquivo porque você não forneceu um argumento para o comando.


5
E por causa -fdisso, não é um erro executá-lo sem argumentos. rm -rreclamará de "operando ausente", mas -fsuprime isso e também suprime erros para arquivos que não existem. (Assim, por exemplo, um script poderia usar rm -rf /foo/bar/*para esvaziar um diretório que já pode estar vazio, sem ter que 2>/dev/nulla erros de squash.)
Peter Cordes

34

Na página do manual :

rm remove cada arquivo especificado.

Isso significa que você pode usá-lo para remover uma lista de arquivos de uma só vez, por exemplo, com

rm -rf test1.txt test2.txt

Felizmente, tudo o que você fez foi passar uma lista vazia de arquivos e, portanto, nada foi excluído. Além disso, o que o @SolarMike diz : se você não sabe o que um comando faz, não o execute . O macOS foi projetado para 'ocultar' todas as operações Unix perigosas (mas potencialmente poderosas) do usuário final.


7
Para sua informação, o -rsinalizador é desnecessário, a menos que você esteja excluindo diretórios recursivamente. Se são apenas arquivos, rmé suficiente - o que -fé forçado a fazer, não pede "você tem certeza" para cada arquivo.
Tim S.

9
Além disso, o -f faz com que a mensagem de uso não seja exibida quando você a usa incorretamente. É por isso que não houve saída quando o OP foi executado rm -rf. Se eles tivessem executado 'rm -r' sem especificados arquivos / diretórios, eles teriam obtido esta mensagem de uso: JanNash ~ $ usage: rm [-f | -i] [-dPRrvW] file ... unlink file
Jan Nash

2
@barrycarter Isso não é totalmente verdade - ele ainda tentará excluir /, apenas ignorará o arquivo inexistente xyz*(que simplesmente não será expandido devido à falta de correspondência).
fofo

3
@barrycarter Esse comportamento depende da configuração de globbing do seu shell. Pelo menos no padrão do bash no macOS, ele de fato exclui ae bpara mim - mesmo sem especificar -f. Execute os mesmos comandos com echo rm -f a b c*para ver o comportamento real.
fofo

2
@ barrycarter e fluffy: O que acontece depende se a variável shell nonomatch está configurada ou não.
Thomas Padron-McCarthy

13

Para o iniciante leigo / Linux / Unix:

rm sozinho não faz nada porque você não disse do que se livrar.

man rm pode explicar a maior parte disso, se você entender.

-r significa recursivo, como em "incluir tudo nas subpastas"

-f significa força ", não me peça para confirmar"

rm -rf(NÃO FAÇA ISSO)/ diria excluir tudo sob /(a pasta raiz) sem verificar (nas versões recentes do macOS, o SIP impedirá que você remova o próprio macOS por isso, mas muitas outras coisas serão excluídas)

rm [some file name] apenas excluiria esse arquivo.

rm -rf /home/myuser/booksiria apagar tudo em myuser's bookspasta, bem como a pasta.


6
Hoje em dia você precisa fazer rm -rf / --no-preserve-rootpara atirar na perna corretamente.
precisa

11
@Gallifreyan Existe alguma maneira de atirar na sua perna corretamente?
PascalVKooten

11
Diz-se que este funciona bem. Não conheço outro :)
Gallifreyan

11
@Gallifreyan no macOS? pastebin.com/aVAsNcKC indica o contrário
nohillside

@Gallifreyan: find / -deletedeve "trabalho" (coisas ou seja, na verdade, eliminar, por isso não executá-lo.)
Peter Cordes

4

Não, mas se você deseja excluir Aqui está um exemplo:

Depois de iniciar o Terminal (na sua pasta / Aplicativos / Utilitários), digite cd ~ / Desktop para navegar para o diretório Desktop. Se você tiver um arquivo aqui chamado MyFile.rtf que nunca mais desejou ver novamente, poderá executar este comando:

rm MyFile.rtf

Quando você pressiona Return, o arquivo vai parar! Terá desaparecido, brinde, história. Você não pode recuperá-lo.


Na verdade, rm remove todas as referências do arquivo, não limpa o disco rígido do arquivo substituindo cada byte, se estou entendendo a documentação corretamente.
NoBugs

@NoBugs Mas, para ser justo, é assim que todas as 'exclusões' modernas funcionam, incluindo o Windows. Se o recurso de exclusão estiver substituindo cada byte, ele será anunciado como tal (principalmente porque leva mais tempo e é desnecessário na maioria das vezes).
Insana
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.