마지막으로 사용한 .sh 파일 확인

마지막으로 사용한 .sh 파일 확인

달리는 경우 ./myscript.sh이 시간이 "방문" 시간으로 간주됩니까?

스크립트가 마지막 으로 실행된 시간을 알아야 하지만 그게 중요한지 확실하지 않습니다 mtime.ctimeatime여기).

답변1

설명된 대로답변연결 대상은 설정에 따라 다릅니다. 원칙적으로 atime파일이 수정될 때마다 변경됩니다.읽다스크립트를 실행하려면 읽어야 합니다. 그렇습니다. 일반적으로 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이 옵션으로 마운트된 파일 시스템에서 실행되었습니다. 이 옵션을 사용하면 atimei) 현재가 atime현재 수정 또는 변경 시간보다 빠르거나 ii) 하루 이상 업데이트가 없는 경우 업데이트됩니다.

따라서 다음을 사용하는 시스템에서는 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하루 이상 지난 경우 방문할 때 항상 변경됩니다. 수정 시간이 오래된 경우에도:

$ 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마지막으로 액세스한 이후 파일이 수정되지 않는 한 업데이트는 하루에 한 번 정도만 발생합니다.

관련 정보