我正在使用stat来获取文件的访问时间(当前日期为2013年10月23日)

[juan@JN-LNXSVR-02 labfiles]$ stat nursery
  File: `nursery'
  Size: 837         Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 139539      Links: 1
Access: (0644/-rw-r--r--)  Uid: (  500/    juan)   Gid: (  500/    juan)
Access: 2013-10-22 18:03:20.703888346 -0400
Modify: 2013-10-21 16:57:07.801165793 -0400

然后我编辑该文件并关闭它,不做任何修改,然后再次提交统计信息
juan@JN-LNXSVR-02 labfiles]$ vi nursery
[juan@JN-LNXSVR-02 labfiles]$ stat nursery
  File: `nursery'
  Size: 837         Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 139539      Links: 1
Access: (0644/-rw-r--r--)  Uid: (  500/    juan)   Gid: (  500/    juan)
Access: 2013-10-22 18:03:20.703888346 -0400
Modify: 2013-10-21 16:57:07.801165793 -0400
Change: 2013-10-21 16:57:07.801165793 -0400

但是访问时间没有改变,为什么?

我找不到任何noatime属性
juan@JN-LNXSVR-02 labfiles]$ grep noatime /proc/mounts
[juan@JN-LNXSVR-02 labfiles]$

mount命令的输出为

[juan @ JN-LNXSVR-02 labfiles] $挂载

/dev/mapper/vg_jnlnxsvr02-lv_root on/输入ext4(rw)

proc/proc类型proc(rw)

/sys类型上的sysfs sysfs(rw)

/dev/pts上的devpts类型devpts(rw,gid = 5,mode = 620)

/dev/shm上的tmpfs类型tmpfs(rw,rootcontext =“system_u:object_r:tmpfs_t:s0”)

/boot上的/dev/sda1输入ext4(rw)
/proc/sys/fs/binfmt_misc上没有任何类型binfmt_misc(rw)

在/var/lib/nfs/rpc_pipefs上的sunrpc类型rpc_pipefs(rw)

[juan @ JN-LNXSVR-02 labfiles] $

最佳答案

您可以包括mount的输出吗?也许您的磁盘已安装noatime

编辑(再次):relatime在修改后读取时只会更新一次,而不是每次都更新。从Linux 2.6.30开始,这似乎是标准选项,因此,如果您执行write + read,它将在读取时更新。但是write + read + read只会在第一次读取时(并且在每次后续修改之后才更新)对其进行更新。

鉴于您的访问时间已经比修改时间新,因此,如果仅读取,则使用relatime(或不使用atime选项)装入时,访问时间将不会更新。

来自man mount:

noatime
 Do not update inode access times on this filesystem (e.g., for faster access on
 the news spool to speed up news servers).

relatime
 Update  inode  access  times relative to modify or change time.  Access time is
 only updated if the previous access time was earlier than the current modify or
 change  time. (Similar to noatime, but doesn't break mutt or other applications
 that need to know if a file has been read since the last time it was modified.)
 Since Linux 2.6.30, the kernel defaults to the behavior provided by this option
 (unless  noatime  was   specified),  and  the strictatime 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.

作为记录,如果您想恢复旧的行为,请使用strictatime
Allows to explicitly requesting full atime updates. This makes it possible for
kernel to defaults to relatime or noatime but still allow userspace to override
it. For more details about the default system mount options see /proc/mounts.

关于linux - 打开文件后访问时间不会更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19551139/

10-11 10:45