bashubuntutimeubuntu-12.04lastaccesstime

Last access time not updated?


Here is what I am trying to do: I need to know whenever a file is read or used by a tool (e.g. compiler). I use ls to get the last accessed time using the following command

ls -l --time=access -u --sort=time --time-style=+%H:%M:%S

or

stat "filename"

But my files access times are not getting updated, I figured its because of caching! please correct me if I am wrong. So my next step was how can I clear the cache, researching it I came across some variations of the following command:

sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

The thing is even after I execute this command my file access time is not updated! My way of testing access time is by opening the file in gEdit or call gcc on my source file.

My setting: Ubunto 12.0.4 running on VMware, which is running on Win 7

Question: what am I missing or doing wrong that my access time is not being updated??


Solution

  • What you're observing is the change in the default mount option starting 2.6.30 in order to bring about filesystem performance improvement.

    Quoting from 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.
    

    (Also refer to this and this.) You might be looking for the following mount option:

       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.