ファイルの cat の 2 回目の呼び出しでは、アクセス時間が更新されません。ファイルの内容が表示されるたびにアクセス時間が更新されることを期待していました。
Web ブラウザでファイルを開くと、同じ動作が見られます。アクセス時間が一貫して更新されません。
アクセスタイムについて誤解しているのでしょうか? 2 つのキャットコールの違いは何でしょうか?
$ タッチテスト $ 統計テスト ファイル: `test' サイズ: 0 ブロック: 0 IO ブロック: 4096 通常の空ファイル デバイス: 803h/2051d Inode: 152694 リンク: 1 アクセス: (0664/-rw-rw-r--) Uid: ( 1001/ aaron) Gid: ( 1001/ aaron) アクセス: 2012-08-21 11:05:40.586020996 +0200 修正: 2012-08-21 11:05:40.586020996 +0200 変更: 2012-08-21 11:05:40.586020996 +0200 生年月日: - $ vimテスト $ 統計テスト ファイル: `test' サイズ: 5 ブロック: 8 IO ブロック: 4096 通常ファイル デバイス: 803h/2051d Inode: 152694 リンク: 1 アクセス: (0664/-rw-rw-r--) Uid: ( 1001/ aaron) Gid: ( 1001/ aaron) アクセス: 2012-08-21 11:05:52.890021630 +0200 修正: 2012-08-21 11:06:31.606023626 +0200 変更: 2012-08-21 11:06:31.638023629 +0200 生年月日: - $ 猫テスト テスト $ 統計テスト ファイル: `test' サイズ: 5 ブロック: 8 IO ブロック: 4096 通常ファイル デバイス: 803h/2051d Inode: 152694 リンク: 1 アクセス: (0664/-rw-rw-r--) Uid: ( 1001/ aaron) Gid: ( 1001/ aaron) アクセス: 2012-08-21 11:06:44.662024298 +0200 修正: 2012-08-21 11:06:31.606023626 +0200 変更: 2012-08-21 11:06:31.638023629 +0200 生年月日: - $ 猫テスト テスト $ 統計テスト ファイル: `test' サイズ: 5 ブロック: 8 IO ブロック: 4096 通常ファイル デバイス: 803h/2051d Inode: 152694 リンク: 1 アクセス: (0664/-rw-rw-r--) Uid: ( 1001/ aaron) Gid: ( 1001/ aaron) アクセス: 2012-08-21 11:06:44.662024298 +0200 修正: 2012-08-21 11:06:31.606023626 +0200 変更: 2012-08-21 11:06:31.638023629 +0200 生年月日: -
答え1
http://en.wikipedia.org/wiki/Stat_(システムコール)
ファイルに書き込むと mtime と ctime が変更され、ファイルを読み取ると atime が変更されます。その結果、POSIX 準拠のシステムでは、ファイルを読み取ると書き込みが発生し、批判されてきました。この動作は通常、/etc/fstab にマウント オプションを追加することで無効にできます。
ただし、atime の更新をオフにすると、POSIX 準拠が破られ、一部のアプリケーション、特に mutt メール リーダー (一部の構成) や一部のファイル使用状況監視ユーティリティ、特に tmpwatch が破られます。最悪の場合、atime を更新しないと、一部のバックアップ プログラムがファイルのバックアップに失敗する可能性があります。
Linux カーネル開発者の Ingo Molnár 氏は、atime を「おそらく史上最も愚かな Unix 設計アイデア」と呼び、次のように付け加えています。「少し考えてみてください。『ディスクから読み取られるすべてのファイルに対して、ディスクに書き込みます。そして、すでにキャッシュされていてキャッシュから読み取られるすべてのファイルに対して、ディスクに書き込みます。』」さらに、次のようにパフォーマンスへの影響を強調しています。
atime アップデートは、現在の Linux が抱える最大の IO パフォーマンスの欠陥です。atime アップデートをなくすことで、過去 10 年間のページキャッシュの高速化よりも、日常的な Linux のパフォーマンスが向上します。組み合わせた。
カーネルのデフォルトのマウント オプションが noatime か relatime かを知るにはどうすればよいでしょうか?
man mount
....
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 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.
....
これが、その特定のパーティションがマウントされた方法であり、cat がアクセス時間を期待どおりに更新しない理由です。