Determina se um arquivo foi modificado

9

No Linux (atualmente usando o sistema de arquivos ext4), como é possível verificar rapidamente se o conteúdo de um arquivo foi modificado sem ler qualquer um dos seus conteúdos?

O comando stat é uma abordagem recomendada? Eu atualmente faço

$ stat --format "%Y" hello.txt

e depois eu posso verificar se o mesmo comando produz a mesma saída. Em caso afirmativo, concluo que hello.txt não mudou.

Meu sentimento é que alguém quer colocar mais parâmetros para ter mais certeza. Por exemplo, adicionar o tamanho do arquivo, o nome do arquivo, etc., fornece uma "impressão digital" ainda melhor do arquivo?

Neste tópico, lembro-me de que um volume TrueCrypt que eu já tive foi sempre ignorado pelo meu programa de backup incremental, possivelmente porque o TrueCrypt não deixou nenhuma alteração de meta-dados para trás. Eu suponho que é realmente possível alterar todos os dados retornados por stat , portanto, não pode ser garantido para pegar em cada modificação possível do arquivo?

    
por DustByte 29.12.2014 / 18:07

3 respostas

5

Se você quiser detectar se um arquivo foi modificado através de meios normais (editando-o em algum aplicativo, verificando uma nova versão de um sistema de controle de revisão, reconstruindo-o, etc.), verifique se o tempo de modificação (mtime) mudou desde o último cheque. Isso é o que stat -c %Y relata.

A hora da modificação pode ser definida pelo comando touch . Se você quiser detectar se o arquivo foi alterado de alguma forma (incluindo o uso de touch , extração de um arquivo, etc.), verifique se o tempo de alteração do inode ( ctime ) foi alterado última verificação. Isso é o que stat -c %Z relata. O ctime não pode ser falsificado, exceto pelo administrador do sistema (e, mesmo assim, apenas por meios indiretos: alterando o relógio do sistema ou acessando o disco diretamente, ignorando o sistema de arquivos).

    
por 30.12.2014 / 01:30
3

O comando stat tem apenas uma resolução de um segundo. Então, se o arquivo foi modificado duas vezes no mesmo segundo, você pode perder uma modificação. Sistemas de arquivos mais recentes, como o ext4, fornecem timestamps de resolução mais alta em nanossegundos, mas algumas das ferramentas antigas ainda não foram atualizadas.

Além disso, é possível que outros programas definam uma hora de modificação arbitrária. Você pode ver como isso pode acontecer através do comando touch.

Se você está preocupado com qualquer uma dessas duas possibilidades, não seria uma má ideia analisar o tamanho do arquivo também. Isto é o que o rsync faz quando procura por arquivos modificados.

    
por 29.12.2014 / 19:42
1

My feeling is that one wants to throw in more parameters to be even more sure.

O que você tem é o método correto. A única razão para isso falhar seria se o sistema de arquivos não estivesse atualizando corretamente - nesse caso, você acabará com um monte de problemas mais sérios.

É claro, presumo que alguém com o conhecimento correto e acesso root a um sistema no qual a partição está acessível possa alterar as informações para parecer como se o arquivo não tivesse sido mudou. No entanto, neste caso, eles certamente teriam feito o mesmo com o tamanho, etc.

    
por 29.12.2014 / 18:36