When you run
./myscript.sh is that considered as "access" time?
I need to know the last time a script was run, but I'm not sure if this counts as
atime (differences described here).
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.Sign up to join this community
As explained in the answer you linked to, that depends on your settings. In principle,
atime will change each time a file is read and in order to run a script, you need to read it. So yes, normally, the
atime will change each time the script is executed. This is easily demonstrated by checking the current atime, running the script and then checking it again:
$ printf '#!/bin/sh\necho "running"\n' > ~/myscript.sh $ stat -c '%n : %x' ~/myscript.sh /home/terdon/myscript.sh : 2016-02-23 10:36:49.349656971 +0200 $ chmod 700 ~/myscript.sh $ stat -c '%n : %x' ~/myscript.sh ## This doesn't change atime /home/terdon/myscript.sh : 2016-02-23 10:36:49.349656971 +0200 $ ~/myscript.sh running $ stat -c '%n : %x' ~/myscript.sh ## Running the script does /home/terdon/myscript.sh : 2016-02-23 10:38:20.954893580 +0200
However, if the script resides on a filesystem that is mounted with the
relatime options (or any of the other possible options that can affect how
atime is modified), the behavior will be different:
noatime Do not update inode access times on this filesystem (e.g., for faster access on the news spool to speed up news servers). This works for all inode types (directories too), so implies nodira‐ time. 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 it 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.
You can check what options your mounted systems are using by running the command
mount with no arguments. The tests I show above were run on a filesystem that was mounted using the
relatime option. With this option,
atime is updated if i) the current
atime is older than the current modification or change time or ii) it is hasn't been updated for more than a day.
So, on a system with
atime is not changed when a file is accessed if the current
atime is newer than the current modification time:
$ touch -ad "+2 days" file $ stat --printf 'mtime: %y\natime: %x\n' file mtime: 2016-02-23 11:01:53.312350725 +0200 atime: 2016-02-25 11:01:53.317432842 +0200 $ cat file $ stat --printf 'mtime: %y\natime: %x\n' file mtime: 2016-02-23 11:01:53.312350725 +0200 atime: 2016-02-25 11:01:53.317432842 +0200
atime is always changed on access if it is more than a day old. Even if the modification time is older:
$ touch -ad "-2 days" file $ touch -md "-4 days" file $ stat --printf 'mtime: %y\natime: %x\n' file mtime: 2016-02-19 11:03:59.891993606 +0200 atime: 2016-02-21 11:03:37.259807129 +0200 $ cat file $ stat --printf 'mtime: %y\natime: %x\n' file mtime: 2016-02-19 11:03:59.891993606 +0200 atime: 2016-02-23 11:05:17.783535537 +0200
So, on most modern Linux systems,
atime will only be updated every day or so, unless the file has been modified since it was last accessed.