410gone.click

©2021 sumomo-99

[Linux] ファイルのアクセス日時を更新しない方法(chattr編)

更新日: 2021-04-11T07:17:40.974Z

Linux

ファイルのタイムスタンプの一つに最終アクセス日時(atime)があります。通常はファイルにアクセスしたタイミングで最終アクセス日時も更新されます。しかし、パフォーマンスなどの観点から最終アクセス日時の更新を無効にしたい場合があります(noatime)。
マウントオプションでマント単位でnoatimeの設定ができますが、ファイル単位でもnoatimeの設定ができます。ファイル単位でnoatimeの設定を行うには、chattrコマンドで'A'フラグを設定します。
noatime属性を追加
chattr +A filename
 
noatimeフラグを削除するには'-A'を指定します。
noatime属性を削除
chattr -A filename
 
それでは、ファイル単位でnoatimeの設定ができるか確認していきましょう。はじめに、デフォルトの状態でファイルの最終アクセス日時が更新されるか確認してみます。

$ # 確認用のファイルを作成し、ファイルの属性を確認しておきます。
$ touch atime.txt
$ lsattr atime.txt
--------------e---- atime.txt
$
$ # ファイル作成直後の最終アクセス日時を確認します。(stat)
$ stat atime.txt
...省略...
Access: 2018-02-27 12:41:39.743407468 +0900
Modify: 2018-02-27 12:41:39.743407468 +0900
Change: 2018-02-27 12:41:39.743407468 +0900
$
$ # ファイルにアクセスして、最終アクセス日時が変化するか確認します。
$ cat atime.txt
$ stat atime.txt
...省略...
Access: 2018-02-27 12:43:03.441830071 +0900
Modify: 2018-02-27 12:41:39.743407468 +0900
Change: 2018-02-27 12:41:39.743407468 +0900

最終アクセス日時(Access)が更新されました。次に最終アクセス日時の更新を無効にして確認してみます。

$ # 確認用のファイルを作成し、ファイルの属性を確認しておきます。
$ touch noatime.txt
$ lsattr noatime.txt
--------------e---- noatime.txt
$
$ # ファイルの属性にnoatime(最終更新日時を記録しない)を追加します。
$ chattr +A noatime.txt
$ lsattr noatime.txt
-------A------e---- noatime.txt
$ stat noatime.txt
...省略...
Access: 2018-02-27 12:43:46.142896542 +0900
Modify: 2018-02-27 12:43:46.142896542 +0900
Change: 2018-02-27 12:44:01.199278806 +0900
$
$ # ファイルにアクセスして、最終更新日時が更新されないことを確認します。
$ cat noatime.txt
$ stat noatime.txt
...省略...
Access: 2018-02-27 12:43:46.142896542 +0900
Modify: 2018-02-27 12:43:46.142896542 +0900
Change: 2018-02-27 12:44:01.199278806 +0900

ファイルにA属性が設定されている場合、最終アクセス日時(Access)は更新されませんでした。最後にファイルからA属性を削除してみます。

$ # noatime属性を削除します。
$ chattr -A noatime.txt
$ lsattr noatime.txt
--------------e---- noatime.txt
$ cat noatime.txt
$ stat noatime.txt
...省略...
Access: 2018-02-27 12:46:19.562910338 +0900
Modify: 2018-02-27 12:43:46.142896542 +0900
Change: 2018-02-27 12:45:54.486238764 +0900

noatime属性を削除したので、最終アクセス日時(Access)が更新されました。
 
以上、ファイルのアクセス日時を更新しない方法(chattr編)の紹介でした。