./myscript.sh
を実行すると、「アクセス」時間と見なされますか?
スクリプトが最後に実行された時刻を知る必要がありますが、これがmtime
、ctime
またはatime
としてカウントされるかどうかはわかりません(説明されている違い here )。
回答 で説明したように、リンク先は設定によって異なります。原則として、atime
は、ファイルがreadになるたびに変更され、スクリプトを実行するには、ファイルを読み取る必要があります。つまり、通常、atime
はスクリプトが実行されるたびに変更されます。これは、現在のatimeを確認し、スクリプトを実行してからもう一度確認することで簡単に確認できます。
$ 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
ただし、スクリプトがnoatime
またはrelatime
オプション(またはatime
の変更方法に影響を与える可能性のあるその他のオプション)を使用してマウントされたファイルシステムにある場合、動作は異なります。
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.
引数なしでコマンドmount
を実行すると、マウントされたシステムが使用しているオプションを確認できます。上記で示したテストは、relatime
オプションを使用してマウントされたファイルシステムで実行されました。このオプションを使用すると、i)現在のatime
が現在の変更または変更時刻よりも古い場合、またはii)1日以上更新されていない場合、atime
が更新されます。
したがって、relatime
を備えたシステムでは、現在のatime
が現在の変更時刻よりも新しい場合、ファイルにアクセスしてもatime
は変更されません。
$ 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
は、1日以上経過している場合、アクセス時に常に変更されます。変更時間が古い場合でも:
$ 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
したがって、最新のほとんどのLinuxシステムでは、最後にアクセスしてからファイルが変更されていない限り、atime
は毎日程度しか更新されません。