Por que cat não está alterando o tempo de acesso?

Por que cat não está alterando o tempo de acesso?

A segunda chamada para cat um arquivo não atualiza o tempo de acesso. Eu esperava que o tempo de acesso fosse atualizado sempre que o conteúdo de um arquivo fosse exibido.

Vejo o mesmo comportamento se abrir o arquivo no navegador da web. Seu tempo de acesso não é atualizado de forma consistente.

Estou entendendo mal o tempo de acesso? O que há de diferente entre as duas chamadas de gato?

$ teste de toque
$ teste estatístico
  Arquivo: `teste'
  Tamanho: 0 Blocos: 0 Bloco IO: 4096 arquivo vazio regular
Dispositivo: 803h/2051d Inode: 152694 Links: 1
Acesso: (0664/-rw-rw-r--) Uid: ( 1001/ aaron) Gid: ( 1001/ aaron)
Acesso: 21/08/2012 11:05:40.586020996 +0200
Modificar: 21/08/2012 11:05:40.586020996 +0200
Alteração: 21/08/2012 11:05:40.586020996 +0200
 Aniversário: -

$ vim teste
$ teste estatístico
  Arquivo: `teste'
  Tamanho: 5 Blocos: 8 Bloco IO: 4096 arquivo regular
Dispositivo: 803h/2051d Inode: 152694 Links: 1
Acesso: (0664/-rw-rw-r--) Uid: ( 1001/ aaron) Gid: ( 1001/ aaron)
Acesso: 21/08/2012 11:05:52.890021630 +0200
Modificar: 21/08/2012 11:06:31.606023626 +0200
Alteração: 21/08/2012 11:06:31.638023629 +0200
 Aniversário: -

$ teste de gato
teste

$ teste estatístico
  Arquivo: `teste'
  Tamanho: 5 Blocos: 8 Bloco IO: 4096 arquivo regular
Dispositivo: 803h/2051d Inode: 152694 Links: 1
Acesso: (0664/-rw-rw-r--) Uid: ( 1001/ aaron) Gid: ( 1001/ aaron)
Acesso: 21/08/2012 11:06:44.662024298 +0200
Modificar: 21/08/2012 11:06:31.606023626 +0200
Alteração: 21/08/2012 11:06:31.638023629 +0200
 Aniversário: -

$ teste de gato
teste

$ teste estatístico
  Arquivo: `teste'
  Tamanho: 5 Blocos: 8 Bloco IO: 4096 arquivo regular
Dispositivo: 803h/2051d Inode: 152694 Links: 1
Acesso: (0664/-rw-rw-r--) Uid: ( 1001/ aaron) Gid: ( 1001/ aaron)
Acesso: 21/08/2012 11:06:44.662024298 +0200
Modificar: 21/08/2012 11:06:31.606023626 +0200
Alteração: 21/08/2012 11:06:31.638023629 +0200
 Aniversário: -

Responder1

http://en.wikipedia.org/wiki/Stat_(system_call)

Crítica de um tempo

Escrever em um arquivo altera seu mtime e ctime, enquanto a leitura de um arquivo altera seu atime. Como resultado, em um sistema compatível com POSIX, a leitura de um arquivo causa uma gravação, o que foi criticado. Este comportamento geralmente pode ser desabilitado adicionando uma opção de montagem em /etc/fstab.

No entanto, desligar a atualização atime quebra a conformidade com POSIX e alguns aplicativos, notadamente o leitor de e-mail mutt (em algumas configurações) e alguns utilitários de monitoramento de uso de arquivos, notadamente tmpwatch. Na pior das hipóteses, não atualizar o atime pode fazer com que alguns programas de backup não consigam fazer backup de um arquivo.

O desenvolvedor do kernel Linux, Ingo Molnár, chamou o atime de "talvez a ideia de design Unix mais estúpida de todos os tempos", acrescentando: "[T] pense um pouco sobre isso: 'Para cada arquivo que é lido do disco, vamos fazer um ... escreva para o disco! E, para cada arquivo que já está em cache e que lemos do cache... faça uma gravação no disco!'" Ele enfatizou ainda mais o impacto no desempenho:

As atualizações Atime são de longe a maior deficiência de desempenho de IO que o Linux tem hoje. Livrar-se das atualizações atime nos daria mais desempenho diário do Linux do que todas as acelerações de pagecache dos últimos 10 anos,combinado.

como saber se noatime ou relatime é a opção de montagem padrão no kernel?

man mount
....
   relatime
          Update inode access times relative to  modify  or  change  time.
          Access time is only updated if the previous access time was ear‐
          lier than the current modify or change time. (Similar  to  noat‐
          ime,  but  doesn't break mutt or other applications that need to
          know if a file has been read since the last time  it  was  modi‐
          fied.)

          Since Linux 2.6.30, the kernel defaults to the behavior provided
          by this option (unless noatime was  specified), and the stricta‐
          time  option  is  required  to  obtain traditional semantics. In
          addition, since Linux 2.6.30, the file's  last  access  time  is
          always  updated  if  it  is more than 1 day old.
....

É assim que essa partição específica foi montada e por que cat não atualiza o tempo de acesso como eu esperava.

informação relacionada