Второй вызов cat файла не обновляет время доступа. Я ожидал, что время доступа будет обновляться каждый раз, когда отображается содержимое файла.
Я вижу то же самое поведение, если открываю файл в веб-браузере. Его время доступа не обновляется последовательно.
Я неправильно понимаю время доступа? В чем разница между двумя кошачьими криками?
$ сенсорный тест $ стат тест Файл: `test' Размер: 0 Блоки: 0 Блок ввода-вывода: 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 Блок ввода-вывода: 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 Блок ввода-вывода: 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 Блок ввода-вывода: 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 Инго Молнар назвал atime «возможно, самой глупой идеей дизайна Unix всех времен», добавив: «[П]одумайте об этом немного: «Для каждого файла, который считывается с диска, давайте сделаем... запись на диск! И для каждого файла, который уже кэширован и который мы считываем из кэша... сделаем запись на диск!» Он далее подчеркнул влияние на производительность следующим образом:
Обновления atime — это, безусловно, самый большой недостаток производительности ввода-вывода, который есть у Linux сегодня. Избавление от обновлений atime дало бы нам больше повседневной производительности Linux, чем все ускорения pagecache за последние 10 лет,комбинированный.
как узнать, является ли 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 не обновляет время доступа, как я ожидал.