Почему кошка не меняет время доступа?
Второй вызов cat файла не обновляет время доступа. Я ожидал, что время доступа будет обновляться каждый раз, когда отображается содержимое файла.
Я вижу такое же поведение, если я открываю файл в веб-браузере. Время доступа не обновляется постоянно.
Я неправильно понимаю время доступа? Чем отличаются две кошачьи звонки?
$ touch test $ stat test Файл: `test'Размер: 0 Блоки: 0 Блок ввода-вывода: 4096 обычный пустой файл Устройство: 803h / 2051d Индекс: 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 Блок ввода-вывода: 4096 обычный файл Устройство: 803h / 2051d Индекс: 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 Рождение: - $ cat test test $ stat test Файл: `test'Размер: 5 блоков: 8 Блок ввода-вывода: 4096 обычных файлов Устройство: 803h / 2051d Индекс: 152694 Ссылки: 1 Доступ: (0664 / -rw-rw-r--) Uid: (1001 / aaron) Гид: (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 Бир th: - $ cat test test $ stat test Файл: `test'Размер: 5 Блоки: 8 Блок ввода-вывода: 4096 обычный файл Устройство: 803h / 2051d Индекс: 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_%28system_call%29
Запись в файл изменяет его mtime и ctime, в то время как чтение файла меняет его atime. В результате в POSIX-совместимой системе чтение файла вызывает запись, которая подверглась критике. Такое поведение обычно можно отключить, добавив параметр монтирования в / etc / fstab.
Однако отключение обновления времени нарушает соответствие POSIX и некоторым приложениям, в частности, программе чтения почты Mutt (в некоторых конфигурациях), и некоторым утилитам наблюдения за использованием файлов, в частности, tmpwatch. В худшем случае отсутствие обновления atime может привести к тому, что некоторые программы резервного копирования не смогут выполнить резервное копирование файла.
Разработчик ядра Linux Инго Молнар (Ingo Molnár) назвал atime "пожалуй, самой глупой идеей дизайна Unix за все время", добавив: "[T] поразмыслите над этим:" Для каждого файла, который читается с диска, давайте сделаем ... запись на диск! И для каждого файла, который уже кэширован и который мы читаем из кэша ... сделайте запись на диск! "" Далее он подчеркнул влияние на производительность таким образом:
Atime-обновления - это самый большой дефицит производительности ввода-вывода, который есть у Linux на сегодняшний день. Избавление от временных обновлений даст нам больше повседневной производительности Linux, чем все ускорения кэша страниц за последние 10 лет, вместе взятые .
Как узнать, является ли noatime или relaytime опцией монтирования по умолчанию в ядре?
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 не обновляет время доступа, как я ожидал.