23

Второй вызов cat файла не обновляет время доступа. Я ожидал, что время доступа будет обновляться каждый раз, когда отображается содержимое файла.

Я вижу то же самое поведение, если я открываю файл в веб-браузере. Время доступа не обновляется постоянно.

Я неправильно понимаю время доступа? Чем отличаются две кошачьи звонки?

$ touch test
$ stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d  Inode: 152694      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/   aaron)   Gid: ( 1001/   aaron)
Access: 2012-08-21 11:05:40.586020996 +0200
Modify: 2012-08-21 11:05:40.586020996 +0200
Change: 2012-08-21 11:05:40.586020996 +0200
 Birth: -

$ vim test
$ stat test
  File: `test'
  Size: 5           Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 152694      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/   aaron)   Gid: ( 1001/   aaron)
Access: 2012-08-21 11:05:52.890021630 +0200
Modify: 2012-08-21 11:06:31.606023626 +0200
Change: 2012-08-21 11:06:31.638023629 +0200
 Birth: -

$ cat test
test

$ stat test
  File: `test'
  Size: 5           Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 152694      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/   aaron)   Gid: ( 1001/   aaron)
Access: 2012-08-21 11:06:44.662024298 +0200
Modify: 2012-08-21 11:06:31.606023626 +0200
Change: 2012-08-21 11:06:31.638023629 +0200
 Birth: -

$ cat test
test

$ stat test
  File: `test'
  Size: 5           Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 152694      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/   aaron)   Gid: ( 1001/   aaron)
Access: 2012-08-21 11:06:44.662024298 +0200
Modify: 2012-08-21 11:06:31.606023626 +0200
Change: 2012-08-21 11:06:31.638023629 +0200
 Birth: -

1 ответ1

43

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

Критика времени

Запись в файл изменяет его 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 не обновляет время доступа, как я ожидал.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .