alteração de atime, mtime ou ctime de um arquivo e de seu diretório ancestral?

4

Como a mudança de atime, mtime ou ctime de um arquivo afeta

  • o atime, mtime ou ctime do diretório pai e
  • o atime, mtime ou ctime de seus diretórios ancestrais?
por Tim 27.02.2015 / 16:02

2 respostas

5

Você pode obter facilmente essas informações usando stat . Quanto aos diretórios ancestrais, é fácil verificar se, se um arquivo mudar, isso não afeta nada "na hierarquia", olhando para / :

root@pooh:/home/anthon-mint# stat /
  File: ‘/’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 804h/2052d  Inode: 2           Links: 30
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-02-22 09:57:14.028146463 +0100
Modify: 2015-01-01 10:34:05.528461374 +0100
Change: 2015-01-01 10:34:05.528461374 +0100
 Birth: -

como o sistema está constantemente alterando arquivos, esses valores devem estar próximos da hora atual.

Se você criar um novo diretório e, em seguida, um arquivo nele, o horário de acesso e modificação do diretório será alterado:

$ mkdir tmp
$ stat tmp
  File: ‘tmp’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 700h/1792d  Inode: 144141      Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1001/  anthon)   Gid: (  100/   users)
Access: 2015-02-27 16:19:02.523585508 +0100
Modify: 2015-02-27 16:19:02.523585508 +0100
Change: 2015-02-27 16:19:02.523585508 +0100
 Birth: -
$ touch tmp/bla
$ stat tmp
  File: ‘tmp’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 700h/1792d  Inode: 144141      Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1001/  anthon)   Gid: (  100/   users)
Access: 2015-02-27 16:19:02.523585508 +0100
Modify: 2015-02-27 16:19:18.639585445 +0100
Change: 2015-02-27 16:19:18.639585445 +0100
 Birth: -

O tempo de acesso não muda, mas a criação do novo arquivo altera a modificação e o horário de alteração.

Agora toque no arquivo novamente:

$ touch tmp/bla
$ stat tmp
  File: ‘tmp’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 700h/1792d  Inode: 144141      Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1001/  anthon)   Gid: (  100/   users)
Access: 2015-02-27 16:19:02.523585508 +0100
Modify: 2015-02-27 16:19:18.639585445 +0100
Change: 2015-02-27 16:19:18.639585445 +0100
 Birth: -
$ 

E o diretório não muda, mas nenhuma das informações do diretório é alterada, pois nenhum arquivo novo é criado.

Alterar o mtime, atime ou ctime de um arquivo existente não tem efeito no diretório em que está, nem em nenhum dos pais desse diretório.

    
por 27.02.2015 / 16:19
3

No máximo, o campo atime (tempo de acesso) do diretório será atualizado, se o inode do arquivo já não estiver no cache. No entanto, o padrão com os kernels Linux modernos é montar o sistema de arquivos com o relatime flag, significando que o atime só é atualizado se o arquivo ou diretório for acessado após o tempo de modificação (mtime) e o atime atual for anterior ao mtime. / p>

O mtime (hora da modificação) só será atualizado se o diretório for realmente modificado, e..g. um arquivo (ou diretório, ou outra entrada) é excluído, renomeado ou adicionado, ou o diretório é renomeado (movido).

O ctime (tempo de troca do inode) é modificado sempre que qualquer coisa no inode do diretório é alterada, incluindo permissões, owener e também mtime ...

    
por 27.02.2015 / 16:28

Tags