Existe algum log rm com arquivos removidos?

1

Existe alguma maneira de verificar o que foi removido recentemente com o comando rm ?

    
por patryk.beza 26.01.2013 / 19:25

4 respostas

3

Algumas soluções diferentes

Não há log, mas se você quiser ...

Observe as entradas excluídas e registre-as

Você pode usar inotify bibliotecas no modo recursivo e monitor :

inotifywait -e delete --timefmt %c --format '%T %_e %w %f' -r -m / >/path/logfile
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
Fri Jul 19 11:57:39 2013 DELETE /tmp/ testfiletodelete
Fri Jul 19 11:57:46 2013 DELETE /home/user/ testfiletodelete

Esta é uma abordagem sysadmin : todos os usuários, todos os diretórios e pontos montados ...

Aviso pode ser um pouco exagero leia atentamente a página do manual e adicione algumas opções como --exclude

Correção bash rm command

Você pode adicionar algo ao seu .bashrc ...

Transforme rm de delete para o comando mover para a lixeira

mkdir -p $HOME/.Trashcan
rm() {
    local destdir=$(mktemp -d $HOME/.Trashcan/trash-XXXXXXXXX);
    mkdir $destdir/files
    echo $0 $@ >$destdir/command
    set >$destdir/environ
    mv -t $destdir/files $@
} 

Assim, cada vez que você acessar rm no seu bash, os arquivos serão movidos para um diretório, o comando e o ambiente serão salvos também.

Como cada rm criará um novo diretório com a data correta, não será necessário usar date .

Adicionando uma etapa de log ao comando rm .

Mas se você quiser apenas registrar sua operação, na alavanca do usuário:

rm() {
   date >>$HOME/.rm.log +"%a %d %b %Y %T: rm $@"
   /bin/rm $@
}

poderia fazer o trabalho.

Nota 1

Como @slhck disse corretamente: redefinir os comandos usuais pode forjar uma má prática para novos usuários, então se você modificar esses comandos padrão, você deve não esquecer quando estiver trabalhando em outro sistema!

Nota 2

Este patch somente rm é executado pelo shell do usuário interativo. Você pode editar /etc/bashrc para criá-los para todos os usuários, mas as ferramentas bash podem ser afetadas.

Se os arquivos forem removidos por unlink em perl para amostra, isso não será registrado por este.

Ou mesmo se ksh , dash ou mais for invocado em vez de bash ... no logs.

Nota 3

Para acessar o comando original, em vez de alias ou pessoal function , você precisa ter um caminho completo: /bin/rm myfile removerá myfile , mas ignorando a função rm , nada será registrado.

    
por 26.01.2013 / 19:39
3

Se foi você quem acidentalmente removeu os arquivos e seu shell suporta o histórico, você pode listar o histórico de volta assim:

history | grep rm

É claro que você precisará fazer uma pesquisa de conhecimento no histórico para saber onde excluiu o arquivo.

Se fosse outro usuário, talvez seu / a ~/.bash_history ou arquivo semelhante (para qualquer shell que o usuário use) possa ter essa informação, se não a excluir de lá.

Mas, na verdade, como outras respostas propõem, não há log. Apenas meios de escanear a superfície para arquivos removidos ainda não sobrescritos.

A propósito, usando um sistema de arquivos Copy-on-write, como ZFS ou btrfs, você pode rastrear arquivos apagados entre "estados" da unidade a tempo, chamados instantâneos.

Você pode executar uma tarefa Cron com a granularidade de tempo necessária para garantir que haja um snapshot recente e diferir entre o snapshot e o estado atual.

Existe outro jeito. Você pode compilar seu próprio binário rm, que faz salvar os traços do que ele fez.

    
por 26.01.2013 / 19:40
0

Não. Infelizmente, não existe tal log. Existem, no entanto, várias ferramentas para recuperar arquivos deletados.

    
por 26.01.2013 / 19:30
0

Não. não existe tal log. O que é removido simplesmente é removido.

Se você tiver backups, poderá comparar os arquivos em um backup com os arquivos atualmente no computador. Isso fornecerá uma lista de arquivos removidos no período de tempo entre o backup e agora.

    
por 26.01.2013 / 19:38