Relação entre timestamps de arquivos

3

Se eu estiver correto:

  • atime é a última vez que o arquivo foi lido / acessado.

  • mtime é a hora em que o conteúdo do arquivo foi modificado pela última vez.

  • ctime é a hora em que o inode do arquivo foi alterado pela última vez.

Perguntas:

  1. Se o conteúdo de um arquivo for armazenado fora de seu inode, a alteração de seu conteúdo alterará o mtime para o presente, mas isso alterará seu tempo e tempo para o presente?

  2. Se alterarmos os atributos de um arquivo armazenados em seu inode, isso mudará a hora para apresentar, mas isso mudará o mtime e o atime para apresentar?

  3. A alteração de algo relacionado a um arquivo, como seu conteúdo, atributos ou inode, também muda de horário?

por Tim 06.05.2015 / 17:42

2 respostas

3

Como o @Celada disse, isso é realmente fácil de testar.

Uma nota, no entanto: ctime é a última vez em que as informações do inode foram alteradas (o número do inode não muda).

Então:

  1. If a file's content is stored outside its inode, changing its content will change the mtime to the present, but will that changes its ctime and atime to the present?

Se você alterar o conteúdo, o mtime será alterado, mas também o ctime , porque os registros de data e hora do arquivo (e talvez seu tamanho) serão atualizados e essas informações serão armazenadas no inode.

Além disso, digamos que este é um arquivo de texto e você modifica seu conteúdo usando vi , então o atime também será atualizado porque obviamente vi lerá o arquivo antes de exibi-lo.

Exemplo:

$ touch file1

$ stat file1
    Access: 2015-05-06 19:11:41.887622158 +0200
    Modify: 2015-05-06 19:11:41.887622158 +0200
    Change: 2015-05-06 19:11:41.887622158 +0200

$ echo "hello" >> file1

$ stat file1
    Access: 2015-05-06 19:11:41.887622158 +0200
    Modify: 2015-05-06 19:12:27.816047883 +0200
    Change: 2015-05-06 19:12:27.816047883 +0200
  1. If we change a file's attributes stored in its inode, that will change ctime to present, but will that change mtime and atime to present?

Se você alterar apenas o atributo do arquivo, apenas as informações armazenadas no inode serão alteradas. Portanto, sim, somente ctime será alterado.

$ stat file2
Access: 2015-05-06 19:28:09.378880724 +0200
Modify: 2015-05-06 19:28:09.378880724 +0200
Change: 2015-05-06 19:28:09.378880724 +0200

$ chmod 700 file2

$ stat file2
Access: 2015-05-06 19:28:09.378880724 +0200
Modify: 2015-05-06 19:28:09.378880724 +0200
Change: 2015-05-06 19:30:24.679022346 +0200
  1. Does changing anything related to a file such as its content, attributes, or inode, also change atime?

Como eu disse para a primeira pergunta, se você não precisar ler o arquivo para alterar essas informações, não, atime não será alterado.

    
por 06.05.2015 / 19:33
2

Você precisa de mais duas frases:

  • atime será alterado somente quando você ler, abrir ou tocar no arquivo.

  • ctime também é alterado quando o conteúdo do arquivo é alterado.

Com isso em mente, podemos responder às suas perguntas com facilidade:

  1. If a file's content is stored outside its inode, changing its content will change the mtime to the present, but will that changes its ctime and atime to the present?

Isso alterará o ctime , não o atime .

  1. If we change a file's attributes stored in its inode, that will change ctime to present, but will that change mtime and atime to present?

Não, isso não muda mtime e atime

  1. Does changing anything related to a file such as its content, attributes, or inode, also change atime? No, atime only change when you read, open or touch the file.

Coisas para lembrar:

  • atime só muda quando você , abre , ou toca no arquivo.
  • ctime será atualizado para o mesmo com mtime se mtime tiver sido atualizado.
  • Alterar ctime pode ou não alterar mtime e não alterar atime .
por 06.05.2015 / 19:32