Desfazer o comando lixo do Linux

24

Podemos desfazer operações realizadas em um terminal, por exemplo, a exclusão de arquivos rm?

Soluções obtidas:

  1. Alias
  2. Recuperar utilitários
  3. Utilitários de backup
  4. LibTrash
  5. Controle de versão (FUSE)
cdb
fonte
1
Ativado rm: Desvincula um arquivo dele inode. A pergunta: "Para onde vão os arquivos quando o rmcomando é emitido" -> unix.stackexchange.com/questions/10883/… também pode ser uma boa leitura para você.
erch

Respostas:

62

Não existe um "desfazer" geral para todas as operações no terminal. Se você deseja recuperar um arquivo após o uso rm, precisará procurar no software de recuperação.

Uma opção para evitar erros futuros é fazer aliases para comandos alternativos para remover arquivos. Adicione-os ao seu ~/.bashrce adquira o hábito de usá-los em vez de rm.

  1. alias rmi = 'rm -i'

    Se você usar rmi, você será solicitado a confirmar futuras exclusões. Tente evitar desenvolver o hábito de pressionar yimediatamente após emitir um rmicomando, pois isso anulará o objetivo.

  2. Você também pode mover os arquivos excluídos pelo trshcomando no terminal para a lixeira (no KDE e no Gnome):

    alias trsh='mv --target-directory="$HOME/.Trash"'
    

    Se você usar trsh, terá um recurso limitado de "exclusão". Cuidado que

    trsh dir1/file1 dir2/file1
    

    ainda pode causar perda irrecuperável de dados.

John T
fonte
3
+1 para uma melhor resposta muito que o meu =)
O How-To Geek
9
o segundo alias é muito, muito inteligente. +1.
LiraNuna 28/08/2009
3
lixo () {mv $ @ ~ / .Trash; } # bash function, não um alias. Mudar o comportamento esperado da empresa é uma má idéia, IMHO.
Richard Hoskins
20
O risco com aliasing rmpara rm -ié que você se acostumar com a rede de segurança que ele lhe dá. Então você vai para outra máquina, que não tem esse apelido ...
Dentrasi
3
Pelas razões mencionadas por Richard e Dentrasi, prefiro criar uma função personalizada ou alias rmi-> rm -i. É realmente um erro simplesmente atrapalhar um programa existente fazendo um alias sobre ele.
Telêmaco
6

Não há lixeira para a linha de comando.

Você pode experimentar alguns dos vários utilitários não excluídos, mas não há garantia de que eles funcionariam.

O Geek Como Fazer
fonte
Sim, há uma lixeira para a linha de comando. Veja lixo-cli em outra resposta.
Sparhawk
O Trash-cli é tão bom :) e usa o Trashlib, melhor do que simplesmente mover arquivos.
M3nda
5

Você pode usar o lixo-cli se usar o KDE ao executar um gui. Este é um utilitário de linha de comando para excluir / restaurar usando as instalações da lixeira do KDE.

Joe
fonte
1
O trash-cli fornece também funciona com o lixo do GNOME e foi projetado para fornecer compatibilidade de opções rm (para o aliasing).
Andrea Francia
Não esqueça disso, para alias rm=trashque suas falhas de linha de comando típicas venham com botões de desfazer.
Ryan C. Thompson
Eu acho que alias rm=trashé potencialmente perigoso, se houver alguma chance de você usar o sistema de outra pessoa um dia e esquecer (ou ssh). Muito mais seguro se acostumar a escrever em trashvez de rm.
Sparhawk
4

Você pode criar rmum alias para o trashcomando (você precisará instalar trashprimeiro.) Adicione isso ao seu ~/.bashrc:

alias rm='trash'

Isso é preferível, alias rm='mv --target-directory=$HOME/.Trash'já que ~ / .Trash NÃO é a pasta de lixo do gnome. É melhor IMHO deixar trashdescobrir onde está a pasta de lixo real.

btw eu teria postado isso em um comentário, mas eu não tenho representante suficiente.

Alvin Row
fonte
5
+1 para "uma vez que ~ / .Trash NÃO é a pasta de lixo do gnome." No entanto, rm também não deve ser um alias para o lixo. Você deve usar o lixo em vez de rm, se é isso que deseja.
nagul
É verdade, mas para algumas pessoas os velhos hábitos são difíceis de morrer.
Alvin Row
'rmtrash' é outra opção.
Itachi
3

Ainda não foram nomeadas mais duas soluções técnicas:

  1. libtrash : Uma biblioteca dinâmica que pode ser pré-carregada em seu shell, que intercepta os syscalls de exclusão / remoção e move os arquivos para uma pasta lixeira (como um alias, mas funciona para qualquer aplicativo quando pré-carregado).
  2. Um sistema de arquivos de controle de versão. Se você excluir (ou editar, copiar ou ...) um arquivo, poderá reverter para um estado antigo. Isso pode ser feito com um sistema de arquivos FUSE e um de seus sistemas de arquivos com controle de versão .
joschi
fonte
3

Há uma pergunta maior aqui que vale a pena abordar. Os comandos do shell não são faladores (eles não checam o que você deseja) e esperam que você saiba o que está fazendo. Isso é fundamental para como eles são projetados . É um recurso, não um bug.

Algumas pessoas se sentem machões quando usam esses comandos, o que eu acho bastante tolo, mas é importante entender os perigos. Você pode causar muitos danos em um terminal, mesmo que não seja root. Acho que você provavelmente só se importou rm, mas como você disse: "Podemos desfazer as operações realizadas no terminal", pensei que valeria a pena dizer. A resposta geral é não, você não pode.

Telêmaco
fonte
2

Opção 1: Consulte Recuperar arquivos Linux de um sistema de arquivos ext2 . Esta página aponta para um programa, escrito por Sebastian Hetze, da empresa LunetIX, que (como o título sugere) anula a exclusão de arquivos excluídos recentemente de um sistema de arquivos ext2. Exemplo de uso:

# undelete -d /dev/hdc3 -a 10

Advertências:

  • O site original desapareceu. O link acima é para o arquivo da Internet.
  • Os sites estão em uma mistura de inglês e alemão.
  • Como mencionado acima, a ferramenta foi projetada especificamente para o sistema de arquivos ext2. É improvável que funcione em qualquer outro tipo de sistema de arquivos; especialmente não outros do que os ext N .

Opção 2: Tenho o rsnapshot (rsync) em execução na minha máquina, que faz instantâneos de hora em hora das minhas pastas selecionadas. Ele faz isso de forma incremental a cada hora, 2 horas ou o que você solicitar ao CRON. Após um dia inteiro, ele recicla esses instantâneos em um instantâneo diário e após 7 dias por semana, etc. Isso me permite voltar no tempo por cerca de um mês a cada hora! É muito bom com espaço em disco, pois cria links simbólicos para arquivos que nunca foram alterados ...

Cova
fonte
Apenas para esclarecer, o nº 1 é específico para os sistemas de arquivos ext2. Não funcionaria em um sistema de arquivos ext3.
nagul
1

Existem utilitários não-excluídos para o ext2, mas a maioria dos outros sistemas de arquivos Linux está paralisada na Idade da Pedra e não possui recursos avançados de usabilidade. Triste estado de coisas considerando unidades gigantescas com espaço suficiente para nunca excluir um arquivo novamente é comum.

Então você está preso a três opções:

  1. Faça backup regularmente, por exemplo, com um comando como:

    rsync -axvRP --backup --backupdir=/backup/incr/$(date -I) /home/ /backup/root/

  2. Use uma ferramenta de controle de versão, como gitem todo o seu trabalho. Embora isso não proteja contra um louco rm -rque mata o repositório, ele protege contra problemas regulares, pois você estará usando o git rmnão bruto rm.

  3. Seja extremamente cuidadoso e não confie demais rm -i, trash-clie amigos, pois a maioria dos dados que você perderá no shell não perderá acidentalmente rm, mas por tubos mal direcionados, arquivos de saída digitados incorretamente, mal direcionados mve outras coisas, ou seja, coisas que sobrescreverão seus dados, não apenas exclua-os.

Faça os três para obter o máximo de segurança.

Grumbel
fonte
É muito hilário chamar ext2 de moderno. Os sistemas de arquivos mais recentes usam formatos de disco mais complicados que o ext2 / 3 e precisavam abrir locais fáceis de encontrar, onde você pode encontrar arquivos para excluir. Eles são projetados para pessoas que fazem backup de itens importantes. BTW, eu sempre uso mv e cp -i, uma vez que normalmente não quero estragar nada. Normalmente digito \ rm, porque também tenho alias para rm -i, mas não quero responder à sua pergunta.
12269 Peter Cordes
0

verifique isso ... pode ser útil http://artmees.github.io/rm/

suponha que você fez

rm very_important_file

do terminal. recuperar esse arquivo é um processo tedioso e nem sempre bem-sucedido

em vez disso, se você usou o script mencionado acima. você não precisa se preocupar com isso porque

rm very_important_file
mv very_important_file ~/.Trash/

são equivalentes. o script lida com mais casos e não altera o seu sistema rm, porque é colocado na pasta bin local do usuário, de modo que oculta a rm do sistema e ainda não o afeta ou desativa o uso

essa é uma abordagem refinada de alias, mas sem perder nenhum recurso

a14m
fonte
1
Seria bom se você poderia adicionar alguma explicação sobre o que este faz e como ele se aplica à questão, talvez adicionar um exemplo, etc.
slhck
0

O TestDisk pode recuperar arquivos dossistemas dearquivos FAT, exFAT, NTFS e ext2 .

Cristian Ciupitu
fonte
0

Para mim (opensuse salto 42.2, pendrive NTFS) PhotoRec - também pelos testdiskcriadores - funcionou :) No entanto, ele não recuperou os nomes dos arquivos.

O PhotoRec é um software de recuperação de dados de arquivos projetado para recuperar arquivos perdidos, incluindo vídeo, documentos e arquivos de discos rígidos, CD-ROMs e fotos perdidas (portanto, o nome do Photo Recovery) da memória da câmera digital. O PhotoRec ignora o sistema de arquivos e segue os dados subjacentes; portanto, ele continuará funcionando mesmo que o sistema de arquivos da mídia tenha sido severamente danificado ou reformatado.

Instalei-o usando repositórios padrão no openSUSE

instrução

boczniak767
fonte
1
Bem-vindo ao Super Usuário! Leia Como recomendar software para obter informações e sugestões mínimas necessárias sobre como recomendar software para Superusuário. Para manter sua resposta útil, mesmo se o (s) link (s) fornecido (s) quebrar esses detalhes, deve ser editado em sua resposta.
Eu digo Restabelecer Monica