Por que “touch -a” também define a hora?

3

É o touch (1) do coreutils-8.4-37.el6.x86_64 ou o meu cérebro que está quebrado?

$ touch abc
$ LANG=C stat abc
  File: 'abc'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd04h/64772d    Inode: 10485773    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (3060399/ nodakai)   Gid: (  418/   quant)
Access: 2016-10-14 18:42:06.189751847 +0800
Modify: 2016-10-14 18:42:06.189751847 +0800
Change: 2016-10-14 18:42:06.189751847 +0800
$ touch -a abc
$ LANG=C stat abc
  File: 'abc'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd04h/64772d    Inode: 10485773    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (3060399/ nodakai)   Gid: (  418/   quant)
Access: 2016-10-14 18:42:17.374235446 +0800
Modify: 2016-10-14 18:42:06.189751847 +0800
Change: 2016-10-14 18:42:17.374235446 +0800
$ touch --help | grep 'access time'
  -a                     change only the access time

Como você pode ver, não foi apenas o atime, mas também o ctime, que foi atualizado por touch -a !?!?

O sistema de arquivos é ext4 sobre LVM se isso faz alguma diferença.

    
por nodakai 14.10.2016 / 12:46

1 resposta

7

touch é especificado para alterar o acesso a arquivos e horários de modificação; alterar o tempo de alteração é um efeito colateral da alteração nos metadados do arquivo, e touch não tem nenhum controle sobre isso (veja também o futimens() e utimensat() funções usadas por touch ).

-a e -m são entendidos neste contexto: por padrão touch altera os tempos de acesso e modificação (e o sistema atualiza o tempo de alteração); com -a , altera apenas o tempo de acesso, com -m , altera apenas o tempo de modificação.

Você pode ver a diferença se você especificar uma hora diferente da hora atual: os horários de acesso e / ou modificação serão alterados para o valor especificado, mas o tempo de alteração será atualizado para a hora atual.

    
por 14.10.2016 / 12:54