web-dev-qa-db-ja.com

ファイルのstat(atime)を変更せずにchmod

それらの(ファイルと)ディレクトリのchmodを変更せずに、ディレクトリ構造をatimeできるようにしたいと思います。

私が次のようなファイル構造から始めた場合

$ tree test/
test/
├── test1.txt
└── text2.txt

ファイルとディレクトリのatimesを一覧表示します

$ find test/ -exec stat --printf='name: %n atime: %x\n' {} \;
name: test/          atime: 2019-02-28 11:28:24.418369586 +0100  
name: test/text2.txt atime: 2019-02-28 11:28:03.609919183 +0100  
name: test/test1.txt atime: 2019-02-28 11:27:58.101799544 +0100  

そしてchmod

$ chmod -R 'u=Xrw,g=Xrw,o=Xr' test

これにより、ディレクトリのatimesが変更されます(もちろん、正当な理由があります)。 mtimesは影響を受けません:

$ find test/ -exec stat --printf='name: %n atime: %x\n' {} \;
name: test/          atime: 2019-02-28 11:38:30.590740343 +0100  
name: test/text2.txt atime: 2019-02-28 11:28:03.609919183 +0100  
name: test/test1.txt atime: 2019-02-28 11:27:58.101799544 +0100  

それを回避する簡単な方法はありますか?もちろん、変更前にatimeを保存し、後でリセットするスクリプトを作成することもできます。しかし、もっと簡単な方法はありますか?

1

あなたの例では、ディレクトリのみが変更されました。 /etc/fstabのマウントオプションにnodiratime(ディレクトリのみ)またはnoatime(ファイルとディレクトリ、nodiratimeを含む)を追加することで、atimeを無効にできます。その場合、ctimeのみが変更されます。

カーネルのデフォルトは、オーバーライドされない限りrelatimeであり、mountコマンドを実行すると表示されます。

マウント(8)

 relatime
              Update  inode  access  times relative to modify or change time.  Access time is only
              updated if the previous access time was earlier than the current  modify  or  change
              time.   (Similar  to  noatime,  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 modified.)

              Since Linux 2.6.30, the kernel defaults to the  behavior  provided  by  this  option
              (unless  noatime  was  specified),  and the strictatime 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.

ところで。あなたのchmodはここでは機能しません。 chmod -R u=rwx,g=rwx,o=rwx testのことですか?

2
Freddy