Desfazer um comando "rm -rf ~"?

115

Eu tinha uma pasta que não queria que tivesse o nome '~', então, na linha de comando, digitei

rm -rf ~

e excluiu acidentalmente minha pasta pessoal (desde que ~ foi resolvido para / home / nome de usuário). Existe algum caminho de volta ou eu basicamente preciso recriar a conta do zero?

Chris
fonte
18
Qual sistema de arquivos?
Tarnay Kálmán
6
Claramente, vocês não têm senso de humor.
Blomkvist
21
Embora isso não responda diretamente à sua pergunta, as rm -rf "~"aspas procurarão esse nome literal em vez de expandi-lo. Mas eu ficaria com medo de usá-lo de qualquer maneira - eu usaria algo como lsou cdprimeiro para verificar se eu tenho o diretório certo ou excluir a pasta de um gerenciador de arquivos da GUI. Talvez primeiro renomeie o dir ( mv "~" tilde), verifique e remova.
Henrik N
2
Para o futuro, não use rm interativamente na linha de comando. Use um utilitário como o lixo e você 1) não poderá cometer o mesmo erro novamente e 2) não poderá se acostumar com um apelido de shell ruim da rm que causará problemas.
Fred Nurk
9
@HenrikN: ./~ em vez de "~" faz o mesmo, mas também funciona com outros nomes de arquivos problemáticos comuns, como aqueles que começam com traços e se parecem com opções.
Fred Nurk

Respostas:

148

Em geral, não há caminho fácil de volta.

Você pode restaurar do seu backup diário.

RedGrittyBrick
fonte
194
Sua observação sobre backups é cruel e 100% direta.
Benjamin Bannier
3
OS X define a barra de como backups devem trabalhar (especialmente com o Time Capsule). Veja maketecheasier.com/… para obter sugestões sobre como obter a mesma coisa com o Ubuntu.
Thorbjørn Ravn Andersen
4
@ Thorbjørn Ravn Andersen - Sim, exceto quando o Time Machine tem um colapso nervoso. Eu tive uma máquina do tempo surtando comigo duas vezes em seis meses.
Fake Name
O backup externo é excelente e pode ser bastante acessível. Eu uso o Backblaze (Mac / Windows) a US $ 5 / computador / mês. Muitas pessoas parecem gostar do Crashplan (Mac / Windows / Linux).
Henrik N
23
diariamente o que ????
Luc M
66

Outros (como @RiMMER , @ Adam , e @ James T ) ter mencionado que, para a maioria dos sistemas de arquivos, é possível recuperar a maioria ou todos os seus dados (talvez sem nomes), porque os dados não são realmente zerado apenas removido da tabela de arquivos. Isso não se aplica apenas ao Linux - o mesmo se aplica ao Windows e Mac.

No entanto, ninguém mencionou a coisa mais importante - DESLIGUE O COMPUTADOR. AGORA. .

Muitos programas - incluindo o navegador da Internet que você está usando no momento - armazenam em cache os dados no disco rígido e praticamente qualquer coisa que você faça pode fazer com que o computador redimensione / grave no arquivo de troca. Ambas as coisas serão gravadas em setores livres no disco rígido, potencialmente substituindo seus dados preciosos.

Portanto, desligue o computador, retire o disco rígido e coloque-o em outro computador. Monte o disco rígido como somente leitura e recupere os arquivos em um disco rígido separado. Quando você recupera tudo o que pode interessar - e somente então -, grave os arquivos de volta na unidade original.

BlueRaja - Danny Pflughoeft
fonte
11
Até o processo de desligamento pode gravar no disco rígido. Estou hesitante para recomendar imediatamente desligar o computador, porque isso pode definitivamente fazer coisas muito piores, mas ... bem, dependendo da importância dos dados é, você pode querer considerar isso.
BlueRaja - Danny Pflughoeft
1
Dependendo da unidade / OS / ponto de montagem pode ser possível desmontar imediatamente e / ou remontar somente leitura ao vivo sem transformar o PC desligado, em seguida, desligar etc.
Matthew Scharley
1
killall rmem vez de desligar.
Fred Nurk
1
Dependendo do tamanho do diretório inicial e do tamanho do disco rígido, as chances de sobrescrever os setores livres que contêm seus dados são muito pequenas.
Mike Speed
Você pode recuperar arquivos de texto usando esse método sem muita dificuldade (desde que tenha uma idéia aproximada do que há neles), mas os arquivos binários são tão difíceis que são basicamente impossíveis.
6789 Satanicpuppy
13

Eu acredito que todo usuário de Linux em um determinado momento precisa aprender esta lição dolorosa em primeira mão antes de aprender a importância dos backups, além de prestar atenção aos detalhes e ter cuidado.

Por exemplo, se você estiver excluindo arquivos com aparência estranha, primeiro poderá executar comandos nesse arquivo estranho que não têm efeitos colaterais e que não fazem alterações nos seus dados. Por exemplo, você correu

cd ~

antes de tentar excluir a pasta, você perceberia que ela mudaria o diretório para a sua pasta pessoal, não para a ~pasta. Depois de seguir as etapas de solução de problemas suficientes para aprender o verdadeiro comando que você precisaria acessar corretamente cdna ~pasta, pressione a tecla de seta para cima para puxar o último comando do histórico e depois altere cdpara rme então e somente então tente excluir a pasta .

Sugiro tomar medidas como essa antes de executar qualquer ação permanente. Não é permanente ou infalível, mas você tem uma chance muito maior de impedir esses momentos difíceis se tomar esse grau de cuidado ao executar ações que tenham efeitos colaterais.

jmort253
fonte
4
Olhe antes de saltar e lsantes de você rm.
LawrenceC
7

Se você estiver usando o sistema de arquivos ext3, o ext3grep é seu novo melhor amigo. Um bom tutorial (entre muitos outros) sobre o uso do ext3grep pode ser encontrado aqui .

Adam Prax
fonte
6

Você pode tentar usar o testdisk para recuperar arquivos individuais . Aparentemente, isso funciona apenas no ext2 e NTFS (mas ainda vale a pena tentar).

Se você possui ext3 ou ext4, pode recuperar arquivos conhecidos usando o photorec , o que provavelmente acabará se recuperando mais do que você deseja. O Photorec recupera arquivos sem as informações do nome do arquivo, portanto pode ser entediante percorrer os arquivos.

James T
fonte
4

Se você possui uma unidade externa grande o suficiente, tem outra opção possivelmente mais segura. Você precisará de espaço suficiente para armazenar toda a partição pessoal, incluindo espaço livre.

Inicialize a partir de um CD e não monte a unidade doméstica. Monte a unidade externa. dd a partição da unidade inicial em um arquivo na unidade externa. monte o arquivo como um dispositivo de loopback, faça seu trabalho de exclusão nesta imagem, com a certeza de que você não pode danificar o sistema de arquivos original. Dependendo do sistema de arquivos, pode haver muitas coisas para tentar, algumas delas potencialmente destrutivas.

Isso me salvou uma vez com uma versão beta do Reiser4, quando eu não sabia o que faria, mesmo que eu o montasse apenas para leitura. Eu li em algum lugar no momento em que as redações de diário ainda eram possíveis.

Também é uma boa técnica para salvar dados de uma unidade que está morrendo.

barrymac
fonte
1
+1 por mencionar que na maioria dos FSs registrados no diário, mesmo uma montagem somente leitura pode gravar dados como parte das atividades do diário.
sleske
2

Existem técnicas para recuperar arquivos inspecionando os inodes que não foram reciclados. Quanto mais dados você gravar no sistema de arquivos após a exclusão, menor a probabilidade de recuperar seus dados. A melhor estratégia para recuperar uma exclusão acidental de dados é restaurar do backup.

Xenoactive
fonte
2
alias rm="rm -i"

Supondo que você esteja usando o shell Bash (coloque isso no seu arquivo .bashrc para que ele persista em novos shells que você abrir).

Isso deve resultar em rm solicitando que você confirme o que deseja excluir, o que é bom, especialmente quando você está executando -rf, mas também expandirá '~' para o caminho completo para o diretório inicial no prompt, o que deve fornecer uma pista de que você não está excluindo um arquivo '~', mas na verdade seu proprietário.

$ rm -rf ~
rm: examine files in directory /nas/users/u12345/unix (yes/no)? n

Tecnicamente, essa não é uma resposta para sua pergunta, mas pode ajudá-lo a evitar esse problema no futuro.

EDIT: Algumas pessoas podem desencorajá-lo a usar essa técnica, pois isso torna você menos cuidadoso com o comando "rm". Na minha experiência, isso está longe da verdade. Na realidade, o efeito do alias é desencorajá-lo a usar "rm -rf" - como você sabe, isso resultará em muitos prompts que você não deseja responder - e para obter um "rm -rf" não solicitado "você precisa se referir deliberadamente ao comando rm como / bin / rm (ou o que seja). Isso leva a um uso muito mais consciente e deliberado do comando "rm" em geral - como você sempre precisa preceder o uso do rm com uma opção mental de "rm ou / bin / rm" - no servidor e em qualquer outro para estar conectado. E um mundo em que todos pensassem antes de usar a rm seria realmente mais seguro!

aaa90210
fonte
2
Depende do sistema em que você está. No RHEL5 e OS X 10.6, pelo menos, -fsubstitui a -iopção.
Daniel Beck
Eu não sabia disso. Acrescento meu conselho ao YMMV e "não tente fazer isso em casa, ou provavelmente o mais importante no trabalho"!
Aaa90210 #
9
Se você fizer isso, um dia não terá esse alias no lugar - talvez esteja sentado em outro computador ou tenha se hospedado em algum lugar - e usará o rm sendo usado para a rede de segurança. Você fará algo de que se arrependa.
Fred Nurk
1
@FredNurk Exatamente. A melhor aposta é apenas adicionar o -i você mesmo ou simplesmente não usar a opção -f.
Arda Xi #:
Quando tenho muitos arquivos para excluir, começo com rm -i my_list_of_files. Então eu uso CTRL-C e lembro o meu comando para modificá-lo pararm -rvf my_list_of_files
Luc M #:
2

Sinto muito pelos seus dados. Todos os demais entraram em contato com a forma de lidar com o problema dos dados, mas aqui estão algumas informações sobre como lidar com a próxima vez que uma pasta for calibrada ~.

  1. Encontre quem o criou e garanta que nunca mais o faça.
  2. Não use -rfnenhum argumento louco e poderoso para a rm fazer a exclusão. Em vez disso, tome calma e devagar e verifique se você pode ver o que está acontecendo. É possível inserir o til sem expandir para o diretório inicial, escapando-o no shell. Em teoria, você poderia rm -rI \~ , no entanto, pode dar um passo adiante.
    1. Primeiro, cd \~para entrar nessa pasta, talvez até use pwdpara verificar se você chegou lá. Dez removem o conteúdo enquanto você está lá. Mais uma vez, tenha cuidado, mas limpe a pasta rf -rI *e, se precisar, .*também.
    2. Agora volte para cima cd ..e remova o diretório com rmdir \~.
Caleb
fonte
1

Eu apenas CD. Instantâneo e restaurar os arquivos. Mas faço isso no trabalho e não faço ideia de que o diretório .snapshot vem. Eu pensei que talvez fosse um recurso do Linux.

meBigGuy
fonte
1

Ferramentas de recuperação - linha de comando:

Ferramentas de recuperação - Gui:

Informações:

Na minha experiência pessoal, recupero meus dados usando o "UFS Explorer" e o photorec

(1) = Não é de código aberto, não é livre

(2) = Não é de código aberto, gratuito

(3) = Código aberto e gratuito

(4) = Ter suporte a NTFS

(5) = Possui recurso de estrutura de diretório

intika
fonte
-3

rm é para sempre.

Embora isso não o ajude agora, no futuro, você não poderá usar o rm ou, para forçar a si mesmo, adicionar um script encontrado anteriormente no seu caminho chamado rm, que moverá os arquivos para uma pasta lixeira que você limpará em outra hora (permitindo você cometer erros e não ser SOL).

Corey
fonte
7
O único problema com isso é que você pode se tornar um pouco rápido e solto com o comando rm e esquecer que você não tem a funcionalidade undelete acessível em sua empresa servidor Linux ... oops ...
jmort253
2
-1 Isso tem o mesmo problema que as respostas com votos negativos (por isso vou roubar o comentário de outra pessoa): um dia não há esse script no lugar - talvez você esteja sentado em outro computador ou tenha se hospedado em algum lugar - e você usará o rm sendo usado na rede de segurança e fará algo de que se arrepende.
DMA57361
@Corey Embora eu concorde que isso poderia causar um mau habbit, +1 porque esta resposta tem sido muito fortemente downvoted
John Militer