web-dev-qa-db-ja.com

ls-luは最終アクセス時間を与えません

lsのマンページには次のように書かれています。

   -u     with -lt: sort by, and show, access time; with -l: show access time and sort by name;
          otherwise: sort by access time

しかし、それはうまくいかないようです:

test@debian:~$ date > file
test@debian:~$ date
Sun Jan 17 13:21:12 CET 2016
test@debian:~$ cat file 
Sun Jan 17 13:20:10 CET 2016
test@debian:~$ ls -lu file 
-rw-r--r-- 1 test test 29 Jan 17 13:21 file
test@debian:~$ date
Sun Jan 17 13:22:02 CET 2016
test@debian:~$ cat file 
Sun Jan 17 13:20:10 CET 2016
test@debian:~$ ls -lu file 
-rw-r--r-- 1 test test 29 Jan 17 13:21 file

代わりに(最終アクセス時間は13:22以降であったため)次のようなものを期待する必要があります。

-rw-r--r-- 1 test test 29 Jan 17 13:22 file

説明は何ですか?ファイルはバッファリングされていますか?

3
wolf-revo-cats

ファイルシステムはデフォルトでrelatimeでマウントされます。アクセス時間は、ファイルの変更された時間以上である場合、更新されません。

これは(POSIX違反の)最適化であり、すべてのファイルの読み取りによってディスクへの書き込みが発生するのを防ぎます。

見かけの時間更新は、バッファリングの影響を受けません。 (lazyatimeは最大24時間atimeをバッファリングしますが、メモリ内のatimeは毎回更新され、それがlsに表示されます。).

5
sourcejedi