web-dev-qa-db-ja.com

猫がアクセス時間を変更しないのはなぜですか?

ファイルをcatする2回目の呼び出しでは、アクセス時間は更新されません。ファイルの内容が表示されるたびにアクセス時間が更新されることを期待していました。

Webブラウザーでファイルを開くと、同じ動作が見られます。アクセス時間は常に更新されません。

アクセス時間を誤解していますか? 2つの猫の鳴き声の違いは何ですか?

 $タッチテスト
 $ stat test 
ファイル: `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 
 $ stat test 
ファイル: `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 
 Modify:2012 -08-21 11:06:31.606023626 +0200 
変更:2012-08-21 11:06:31.638023629 +0200 
誕生:-
 
 $猫test 
 test 
 
 $ stat test 
ファイル: `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 
誕生:-
 
 $ cat test 
 test 
 
 $ stat test 
ファイル: `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 
出生:-
25
nelaaro

http://en.wikipedia.org/wiki/Stat_(system_call)

時代の批判

ファイルに書き込むとmtimeとctimeが変更され、ファイルを読み取るとatimeが変更されます。その結果、POSIX準拠のシステムでは、ファイルを読み取ると書き込みが発生しますが、これは批判されています。この動作は通常、/ etc/fstabにマウントオプションを追加することで無効にできます。

ただし、atime更新をオフにすると、POSIX準拠、および一部のアプリケーション、特にmuttメールリーダー(一部の構成)、および一部のファイル使用監視ユーティリティ(特にtmpwatch)が壊れます。最悪の場合、atimeを更新しないと、一部のバックアッププログラムがファイルのバックアップに失敗する可能性があります。

Linuxカーネルの開発者であるIngoMolnárは、「おそらく、これまでで最も愚かなUnixの設計アイデア」と呼び、次のように付け加えました。そして、すでにキャッシュされており、キャッシュから読み取ったすべてのファイルについて、ディスクに書き込みを行います! '"彼はさらに、パフォーマンスへの影響を強調しました。

Atimeの更新は、Linuxが今日持っている最大のIOパフォーマンス不足です。 atime更新を取り除くことで、過去10年間のすべてのページキャッシュ速度向上combinedよりも毎日の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.
....

これは、特定のパーティションがどのようにマウントされたか、そして猫が私が期待したとおりにアクセス時間を更新しない理由です。

46
nelaaro