Para onde vão os arquivos quando o comando rm é emitido?

98

Recentemente, acidentalmente, fiz rmum conjunto de arquivos e me fez pensar onde exatamente esses arquivos acabariam?

Ou seja, ao trabalhar com uma GUI, os arquivos excluídos vão para a Lixeira. Qual é o equivalente rme existe uma maneira de desfazer um rmcomando?

boehj
fonte
3
aqui está uma possível duplicata. desfazer no linux . Mas não tenho muita certeza de que é para onde os arquivos são diferentes. Existe uma maneira de desfazer.
Xenoterracide

Respostas:

120

Em nenhum lugar, desapareceu. Bem, mais especificamente, o arquivo é desvinculado. Os dados ainda estão lá no disco, mas o link para ele é removido. Antes era possível recuperar os dados, mas hoje em dia os metadados são limpos e nada é recuperável.

Não há lixeira para rm, nem deveria haver. Se você precisar de uma lata de lixo, use uma interface de nível superior. Existe um utilitário de linha de comando no trash-cliUbuntu, mas na maioria das vezes os gerenciadores de arquivos da GUI como Nautilus ou Dolphin são usados ​​para fornecer uma lata de lixo padrão. A lata de lixo é padrão em si. Os arquivos da Lixeira no Dolphin serão visíveis na Lixeira do Nautilus.

Os arquivos geralmente são movidos para algum lugar como ~/.local/share/Trash/files/quando estão no lixo. O rmcomando no UNIX / Linux é comparável ao delDOS / Windows, que também exclui e não move arquivos para a Lixeira. Outra coisa a perceber é que mover um arquivo através de sistemas de arquivos como o seu disco USB a partir da unidade de disco rígido é realmente 1) uma cópia dos dados do arquivo seguida por 2) desvincular o arquivo original. Você não gostaria que seu lixo fosse preenchido com essas cópias extras.

penguin359
fonte
4
Muito obrigado pela explicação clara. Não me importo de usar a CLI, só preciso ter um pouco mais de cuidado ao usar caracteres curinga. :)
boehj
16
Eu seria cauteloso ao usar algo como libtrashmudar o comportamento da rm. Muitos scripts são usados rmpara limpar arquivos e você não deseja que apareçam no Lixo. Eu recomendo usar um comando dedicado como trashno trash-clipacote. @pedro Devo acrescentar que uma vez criei um arquivo * no meu diretório pessoal. Eu tinha citado acidentalmente * quando não deveria criá-lo, então decidi removê-lo com o rm * nativamente. Quando percebi o que fiz, acabei rapidamente com o comando, mas ele já havia excluído vários arquivos no meu diretório pessoal.
Penguin359
4
É muito raro haver algo parecido com uma lata de lixo no shell, portanto, se você a adicionar na máquina local e se acostumar com ela, ou até depender dela no seu trabalho diário. Você pode ter problemas ao usar alguns dos outros 99% do unix: s sem um ...
Johan
3
Penso que a mensagem de levar para casa aqui é que preciso parar de fazer CLI nas primeiras horas e prestar mais atenção.
boehj
2
Na mesma linha que o @Johan disse, o RedHat costumava (ainda o faz?) Definir aliases para comandos como cp, e mv, para cp -ie mv -iquando estiver executando como root. Isso altera o comportamento padrão para que esses comandos sempre perguntem antes de substituir os arquivos existentes. Alguns administradores de sistema recomendaram remover especificamente esses aliases para que você não espere que esse comportamento possa ser letal quando em outro sistema que segue o comportamento padrão.
Penguin359
11

Para ext3 / ext4, você pode tentar recuperar arquivos usando ferramentas como extundelete ou ext3grep , ou até mesmo mexer nas estruturas de baixo nível manualmente (não para os fracos de coração); para muitos sistemas de arquivos, você pode tentar procurar os blocos ainda não substituídos por certos padrões (por exemplo, magicrescue pode procurar por cabeçalhos JPEG, entre outras coisas). Observe que eles estão usando heurísticas para recuperar os arquivos dos metadados deixados para trás, de modo que a recuperação total não é garantida - é mais uma aposta de última chance (pois eles exigem que alguns traços dos arquivos permaneçam no diário e que os blocos ainda não foram substituídos).

Portanto, para todos os efeitos, os arquivos removidos rmdesaparecem - você pode tentar a necromancia que essas ferramentas oferecem, mas não depende disso: essas são as ferramentas para tentar quando tudo mais falhar. É melhor desenterrar seus backups mais recentes (você fez backups, certo? Ah, bem, viva e aprenda ...).

Piskvor
fonte
2
Para dados de texto de alto valor, você sempre pode usar qualquer ferramenta robusta de uso geral (até emacs ou perl) para examinar o "dispositivo bruto" do disco que continha o arquivo removido e procurar cadeias conhecidas; Recuperei documentos do Word para pessoas dessa maneira; eles perdem a marcação, mas podem recuperar a maior parte do texto. Obviamente, isso é recuperação de desastre, não "Desfazer".
Alexis12
Um link 'manual' adequado: web.archive.org/web/20131221183925/http://…
sjas
8

Em relação a desfazer os efeitos de rm:

Como a maioria dos sistemas de arquivos remove apenas a referência aos dados e indica que os blocos estão livres, você pode tentar localizar a leitura dos dados diretamente do dispositivo. Com um pouco de sorte, os blocos que contêm seus arquivos não foram reivindicados por outra coisa.

Isso pressupõe que você tenha algo bastante singular para procurar, que você tem rootno sistema e, suponho, reunir tudo que abranja mais de um bloco de sistema de arquivos (provavelmente 4k) pode acabar sendo bastante trabalhoso se o sistema de arquivos não gerenciar colocar o (s) arquivo (s) em blocos contíguos.

Recuperei com êxito o conteúdo de alguns arquivos de texto sem formatação, executando strings no dispositivo em que o sistema de arquivos estava e usando grepprocurando algo desses arquivos com um grande contexto ( -C). (E logo após esse incidente, a empresa decidiu gastar alguns recursos na implementação de backups)

Kjetil Jorgensen
fonte
É um pouco mais complicado, por exemplo, ext3 zerando os ponteiros do bloco no inode, mas sim, procurar os arquivos diretamente pode funcionar - se eles forem pequenos o suficiente ou alocados em um bloco contíguo. Às vezes, isso é chamado de escultura de arquivo e existem ferramentas como magicrescueessa que tentam encontrar imagens ou sons por seus padrões distintos.
Piskvor
6

Sempre que você exclui um arquivo usando o rmcomando, os dados do arquivo nunca são excluídos. Em outras palavras, os blocos no sistema de arquivos que contêm dados ainda estão lá.

O que acontece é que, quando você executa o rmcomando, o sistema marca o inode pertencente a esse arquivo como não utilizado e os blocos de dados desse arquivo também como não utilizados (mas não eliminados). No entanto, ext3zera a maioria dos campos no inode, quando um arquivo é excluído.

Essa marcação normal de não utilizada é feita para a velocidade ... Caso contrário, para exclusão, levará mais tempo. É por isso que você deve ter notado que a exclusão de arquivos grandes é mais rápida (você pode recuperar os dados se esses blocos de dados não forem substituídos).

Mais informações: Estrutura do inode , como funciona a exclusão de arquivo

sarath
fonte
... a menos que o arquivo seja explicitamente marcado com o chattr +satributo ("shred"). Diz ao sistema de arquivos para substituir especificamente esse arquivo com zeros na exclusão. Apenas alguns sistemas de arquivos suportam esse atributo.
telcoM 04/02
3

Nos sistemas de arquivos no estilo Unix (inclusive no Linux), os arquivos não estão "em" nenhum lugar específico. Em vez disso, o sistema usa links físicos para apontar em partes o que equivale a um grande blob de dados. Portanto, ao criar um arquivo, você também cria seu primeiro hardlink: aquele que realmente reside no local em que você "salvou" o arquivo. Se você criar mais links físicos, até onde o sistema sabe, o arquivo realmente existe em vários locais ao mesmo tempo.

Quando você "exclui" um arquivo, normalmente você está realmente excluindo apenas o hardlink existente no local especificado. É por isso que a chamada do sistema para excluir arquivos é chamada unlink(). O sistema não excluirá o arquivo até que não haja mais links físicos. Mas uma vez que o último hardlink é destruído, os dados também.

Então, para onde vão os arquivos que você exclui? Se ainda houver hardlinks, esses arquivos estarão onde estiverem os hardlinks que você não excluiu. Se não houver mais hardlinks, os arquivos desaparecerão.

The Spooniest
fonte
0

Procure também em ~ / .snapshot se o arquivo foi removido recentemente.

Andy
fonte
4
Isso só funcionará se você tiver algum sistema de arquivos mágico que forneça esse recurso (como um NetApp) ou se estiver usando uma versão especial do rm.
mattdm