6

我正在使用 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

然后我编辑文件并关闭它而不做任何修改,然后再次提交 stat

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]$ mount

/dev/mapper/vg_jnlnxsvr02-lv_root on / type ext4 (rw)

proc on /proc 类型 proc (rw)

sysfs on /sys 类型 sysfs (rw)

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

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


/dev/sda1 on /boot type ext4 (rw)
/proc/sys/fs/binfmt_misc 上没有类型 binfmt_misc (rw)

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

[juan@JN-LNXSVR-02 实验室文件]$
4

1 回答 1

11

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

编辑(再次)relatime在修改后阅读时只会更新一次,但不是每次都更新。由于 Linux 2.6.30 这似乎是标准选项,所以如果你这样做write+read它会在读取时更新。但是write++只会在第一次读取时更新它(并且在每次修改后更新一次)readread

鉴于您的访问时间已经比您的修改时间新,如果您只阅读,则在使用(或不使用选项)安装时不会更新访问时间。relatimeatime

来自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.
于 2013-10-23T19:59:48.033 回答