Questão Desfazer o comando de lixo do Linux


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

Soluções obtidas:

  1. Aliasing
  2. Desativar utilitários
  3. Utilitários de backup
  4. LibTrash
  5. Versionamento (FUSE)

22


origem


Em rm: Isto desvios um arquivo dele inode. A pergunta: "Onde vão os arquivos quando o rmo comando é emitido "-> unix.stackexchange.com/questions/10883/…também pode ser uma boa leitura para você. - erch


Respostas:


Não há "desfazer" geral para todas as operações no terminal. Se você deseja recuperar um arquivo depois de usar rm você precisará examinar o software de recuperação.

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

  1. alias rmi = 'rm -i'

    Se você usar rmi, você será solicitado a confirmar as exclusões futuras. Tente evitar desenvolver o hábito de pressionar y imediatamente depois de emitir um rmi comando, como isso vai derrotar o propósito.

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

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

    Se você usar trsh, você terá um recurso "undelete" limitado. Cuidado com isso

    trsh dir1/file1 dir2/file1
    

    ainda pode causar perda de dados irrecuperável.


61



1 para uma resposta muito melhor que a minha =) - The How-To Geek
o segundo alias é muito, muito inteligente. +1. - LiraNuna
Lixeira () {mv $ @ ~ / .Trash; } # função bash, não um alias. Mudar o comportamento esperado de rm é uma má ideia, IMHO. - Richard Hoskins
O risco com aliasing rm para rm -i é que você se acostumar com a rede de segurança que lhe dá. Então você vai para outra máquina, que não tem esse alias ... - Dentrasi
Pelas razões mencionadas por Richard e Dentrasi, prefiro criar uma função personalizada ou um pseudônimo rmi -> rm -i. É realmente um erro simplesmente atrapalhar um programa existente com o aliasing sobre ele. - Telemachus


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

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


6



Sim, há uma lixeira para a linha de comando. Veja trash-cli em outra resposta. - Sparhawk
Trash-cli é tão bom :) e usa Trashlib, melhor do que simplesmente mover arquivos. - erm3nda


Você poderia usar lixo-cli se você usa o KDE quando você roda um gui. Este é o utilitário de linha de comando para excluir / restaurar usando as instalações de lixo do KDE.


5



O trash-cli fornece também funciona com a lixeira do GNOME e é projetado para fornecer compatibilidade de opções de rm (para o aliasing). - Andrea Francia
Não se esqueça de alias rm=trash de modo que suas típicas falhas de linha de comando vêm com botões de desfazer. - Ryan 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 apenas se acostumar a escrever trash ao invés de rm. - Sparhawk


Você poderia fazer rm um alias para o trash comando (você precisará instalar trash primeiro.) Adicione isto 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 trash descobrir onde a pasta de lixo atual é.

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


4



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


Mais duas soluções técnicas ainda não foram nomeadas:

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

3





Há uma questão maior aqui que vale a pena abordar. Os comandos do shell não são chatty (eles não checam o que você quer), e eles esperam que você saiba o que está fazendo. Isso é fundamental para como eles são projetado. É uma característica, não um bug.

Algumas pessoas se sentem machistas quando usam esses comandos, o que eu acho muito bobo, mas é importante compreender os perigos. Você pode causar muito dano em um terminal, mesmo que você não seja root. Eu acho que você provavelmente só se importava rm, mas desde que você disse "Podemos desfazer as operações feitas no terminal", pensei que valeria a pena dizer. A resposta geral é não, você não pode.


3





Opção 1: ver Undelete arquivos do Linux a partir 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) desfaz a exclusão de arquivos recentemente apagados de um sistema de arquivos ext2. Exemplo de uso:

# undelete -d /dev/hdc3 -a 10

Avisos:

  • O site original desapareceu. O link, acima, é para o Internet Archive.
  • O site (s) estão em uma mistura de inglês e alemão.
  • Como dito acima, a ferramenta é projetada especificamente para o sistema de arquivos ext2. É improvável que funcione em qualquer outro tipo de sistema de arquivos; especialmente não aqueles que não extN.

Opção 2: Eu tenho rsnapshot (rsync) em execução na minha máquina que faz instantâneos de hora em hora das minhas pastas selecionadas. Isso incrementalmente faz isso a cada hora, 2 horas ou o que quer que você diga CRON para fazer. Depois de um dia inteiro, ele recicla esses instantâneos em um instantâneo diário e depois de 7 dias em um semanário e assim por diante. Isso me faz voltar no tempo cerca de um mês para cada hora! É muito bom com espaço em disco, pois cria links simbólicos para arquivos que nunca mudaram ...


2



Apenas para esclarecer, # 1 é específico para sistemas de arquivos ext2. Não funcionaria em um sistema de arquivos ext3. - nagul


Recuperar usando grep on /dev/partition (Linux ou Unix Recuperar arquivos excluídos - undelete arquivos)

grep -b 'search-text' /dev/partition > file.txt

Apenas uma tentativa


1





Existem utilitários undelete para ext2, mas a maioria dos outros sistemas de arquivos Linux estão presos na Idade da Pedra e não possuem nenhum recurso de usabilidade avançado. Um estado de coisas triste considerando unidades gigantescas com espaço suficiente para nunca excluir um arquivo novamente é comum.

Então você está preso com 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 git por todo o seu trabalho. Enquanto isso não irá proteger contra um louco rm -r que mata o repositório, ele irá proteger contra problemas regulares como você estará usando git rm não cru rm.

  3. Seja extremamente cuidadoso e não confie muito em rm -i, trash-cli e amigos, como a maioria dos dados que você vai perder no shell você não vai perder por acidental rm, mas por tubos mal direcionados, arquivos de saída com erros de digitação, mal direcionados mv e outras coisas, isto é, coisas que sobrescrevem seus dados, não apenas apagam.

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


1



É muito divertido chamar o ext2 de moderno. Os sistemas de arquivos mais novos usam formatos de disco mais complicados que o ext2 / 3, e tiveram que desistir de locais fáceis de encontrar onde você possa encontrar arquivos para remover a exclusão. Eles são projetados para pessoas que fazem backups de coisas que importam. BTW, eu sempre uso mv e cp -i, desde que eu normalmente não quero bater em nada. Eu normalmente digito \ rm, porque também tenho rm alias para rm -i, mas não quero responder a sua pergunta. - Peter Cordes


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

suponha que você fez

rm very_important_file

do terminal. recuperar este 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 seu sistema rm em absoluto e isso é porque ele é colocado na pasta bin local do usuário para que ele faça sombra ao sistema rm e ainda não o afete ou desabilite o uso dele

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


0



Seria bom se você pudesse adicionar algumas explicações sobre o que isso faz e como se aplica à pergunta, talvez adicione um exemplo, etc. - slhck