Como o ctime muda?

8

Estou tentando entender com precisão quando o timestamp ctime de um arquivo é alterado. Em muitos lugares (por exemplo, na resposta aceita aqui ) é sugerido que qualquer alteração nos atributos do arquivo também alterará a hora. No entanto, isso parece não ser verdade, pelo menos no meu Ubuntu 12.04 (sim, eu sei, um pouco velho ...):

cat file.txt > /dev/null

altera o atime, por isso altera os atributos do arquivo (no arquivo inode), mas não altera o ctime.

Outras fontes (por exemplo, aqui e here ) sugerem que apenas algumas operações nos atributos de arquivo realmente alteram o ctime, mas uma lista precisa não é fornecida.

Onde posso encontrar uma referência precisa para quais operações alteram a hora?

    
por VeryHardCoder 22.03.2016 / 10:20

1 resposta

8

Existem três carimbos de tempo nos sistemas Unix:

  • atime : tempo de acesso

    Este registro de data e hora informa quando o arquivo foi acessado na última vez, incluindo apenas o acesso de leitura.

  • ctime : tempo de alteração

    Este registro de data e hora informa quando os atributos do arquivo (inode information) foram alterados na última vez. Isso inclui, por exemplo, propriedade e permissões, mas uma alteração de conteúdo também aciona uma atualização desse registro de data e hora.

    Observe que as alterações no atime parecem ser uma exceção , pois não acionam uma atualização do ctime. Provavelmente, isso ocorre porque um simples acesso de leitura, que é suficiente para acionar uma atualização atime, não faz alterações relevantes nos atributos do arquivo. E um dos principais objetivos da ctime é ajudar as ferramentas de backup a determinar se um arquivo foi alterado. O atime é uma informação irrelevante para tais ferramentas e atualizar um backup apenas para atualizar um atime alterado porque alguém leu o arquivo seria inútil.

    Não tenho certeza, mas algumas pessoas acham que esse comportamento (alterações no atime não atualizam o ctime) é devido apenas às opções de montagem (como relatime ) do sistema de arquivos subjacente que armazena em cache e atrasa o atime atualiza no inode por razões de performance na memória e só os aplica aos inodes reais no disco (disparando uma atualização ctime) sob certas condições.
    @kos tentou e aparentemente mesmo quando montou um FS com o 'strictatime''option, o ctime parece nunca atualizar se o atime mudar.

  • mtime : tempo de modificação

    Este registro de data e hora informa quando o conteúdo do arquivo foi modificado na última vez.

Portanto, um acesso de leitura simples usando cat FILENAME altera apenas o atime , mas não o ctime , pois nenhum atributo de arquivo foi modificado. O atime alterado não conta.

    
por Byte Commander 22.03.2016 / 10:41

Tags