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

87

Recentemente eu acidentalmente fiz rm em um conjunto de arquivos e isso me fez pensar exatamente onde esses arquivos acabaram?

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

    
por boehj 08.04.2011 / 04:32

6 respostas

111

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

Não há Lixeira para rm , nem deveria haver. Se você precisa de uma lixeira, você deve usar uma interface de nível superior. Existe um utilitário de linha de comando em trash-cli no Ubuntu, mas na maioria das vezes os gerenciadores de arquivos da GUI, como o Nautilus ou o Dolphin, são usados para fornecer uma Lixeira padrão. A lixeira é padrão em si. Arquivos lixados no Dolphin estarão visíveis no Lixo do Nautilus.

Os arquivos geralmente são movidos para algum lugar como ~/.local/share/Trash/files/ quando são lixados na lixeira. O comando rm no UNIX / Linux é comparável a del no DOS / Windows que também exclui e não move para a Lixeira. Outra coisa a perceber é que mover um arquivo através de sistemas de arquivos como o seu disco USB a partir do seu disco rígido é realmente 1) uma cópia dos dados do arquivo seguido de 2) desvinculando o arquivo original. Você não gostaria que sua Lixeira fosse preenchida com essas cópias extras.

    
por 08.04.2011 / 05:54
11

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

Então, para todos os efeitos, os arquivos removidos com rm acabaram - você poderia experimentar essa necromancia oferecida por essas ferramentas, mas não depende disso: essas são as ferramentas para tente quando tudo mais falhar. Melhor cavar seus backups mais recentes (você tem feito backups, certo? Ah, bem, viva e aprenda ...).

    
por 08.04.2011 / 20:21
7

Sobre desfazer os efeitos de rm :

Como a maioria dos sistemas de arquivos apenas remove a referência aos dados e indica que os blocos são gratuitos, você pode tentar localizar os dados diretamente do dispositivo. Com um pouco de sorte, os blocos que contêm o (s) seu (s) arquivo (s) não foram reivindicados para outra coisa.

Isso pressupõe que você tenha algo bastante exclusivo para procurar, que você tem root no sistema e acredito que juntar tudo o que abranger mais de um bloco de sistema de arquivos (provavelmente 4k) pode acabar sendo muito trabalhoso se o sistema de arquivos não conseguiu colocar o (s) arquivo (s) em blocos contíguos.

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

    
por 08.04.2011 / 19:32
6

Sempre que você excluir um arquivo usando o comando rm , os dados do arquivo nunca serão excluídos. Em outras palavras, os blocos no sistema de arquivos contendo dados ainda estão lá.

O que acontece é quando você executa o comando rm , 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, ext3 zeros a maioria dos campos no inode, quando um arquivo é excluído.

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

Mais informações: Estrutura de inode ,

    
por 04.12.2012 / 04:46
3

Em sistemas de arquivos no estilo Unix (incluindo no Linux), os arquivos não estão realmente "em" nenhum lugar específico. Em vez disso, o sistema usa hardlinks para apontar partes do que equivale a uma grande bolha de dados. Então, quando você cria um arquivo, você também cria seu primeiro hardlink: aquele que realmente reside no lugar onde você "salvou" o arquivo. Se você criar mais hardlinks, então, até onde o sistema sabe, o arquivo realmente existe em vários lugares ao mesmo tempo.

Quando você "exclui" um arquivo, normalmente você está excluindo apenas o link físico que existia no local especificado. É por isso que a chamada do sistema para excluir arquivos é chamada de unlink() . O sistema não irá realmente deletar o arquivo até que não haja links para ele. Mas uma vez que o último link é destruído, o mesmo acontece com os dados.

Então, para onde vão os arquivos que você excluir? Se ainda existem hardlinks, os arquivos são onde os hardlinks que você não excluiu são. Se não houver mais links, os arquivos desaparecerão.

    
por 17.09.2013 / 18:55
0

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

    
por 08.03.2012 / 03:11