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 ), sugere-se que qualquer alteração nos atributos do arquivo também mude o ctime. No entanto, isso parece não ser verdade, pelo menos no meu Ubuntu 12.04 (sim, eu sei, um pouco antigo ...):

cat file.txt > /dev/null

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

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

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

VeryHardCoder
fonte
Talvez o problema esteja relacionado cat, você o examinou touch?
Mahdi

Respostas:

8

Existem três carimbos de hora nos sistemas Unix:

  • atime: Tempo de acesso

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

  • ctime: Mudar hora

    Este registro de data e hora indica quando os atributos do arquivo (informações do inode) foram alterados na última vez. Isso inclui, por exemplo, propriedade e permissões, mas uma alteração no conteúdo também aciona uma atualização desse carimbo de data / 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 acesso de leitura simples, suficiente para acionar uma atualização do atime, não faz alterações relevantes nos atributos do arquivo. E um dos principais objetivos do ctime é ajudar as ferramentas de backup a determinar se um arquivo foi alterado. O atime é uma informação irrelevante para essas ferramentas e a atualização de um backup apenas para atualizar um atime alterado porque alguém leu o arquivo seria inútil.

    Não tenho certeza, mas algumas pessoas pensam que esse comportamento (alterações no atime não atualizam o ctime) é apenas devido às opções de montagem (como relatime) do sistema de arquivos subjacente que armazena em cache e atrasa as atualizações do atime no inode por motivos de desempenho na memória e os aplica somente aos inodes reais no disco (acionando uma atualização do ctime) sob determinadas condições.
    O @kos tentou e, aparentemente, mesmo ao montar um FS com a opção `strictatime``, o ctime parece nunca ser atualizado se o atime mudar.

  • mtime: Hora da modificação

    Esse registro de data e hora indica quando o conteúdo do arquivo foi modificado pela última vez.


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

Byte Commander
fonte
Esse é exatamente o ponto: por que o atime alterado não conta? Não é um atributo de arquivo?
VeryHardCoder 22/03
@VeryHardCoder Tentei elaborar minha resposta nesse ponto e adicionei algumas explicações.
Byte Commander