Почему сортировка файлов по времени доступа не работает?

12

Я пытался использовать команду ls --time=atime

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

Когда я печатаю, touch file.txtвремя доступа изменяется, но когда я печатаю, vim file.txtвремя доступа не изменяется.

Что здесь не так?

xralf
источник
Какую ОС вы используете? Многие современные дистрибутивы Linux отключаются; по умолчанию он отключен в последних ядрах Linux.
Жиль "ТАК - перестань быть злым"
Я использую Ubuntu 10.04.
xralf
Что ты делаешь после бега vim file.txt? Вы выходите из Vim :qили :wq? Если не пишешь, vimне изменяешь время доступа к файлу - это умышленно.
rozcietrzewiacz
Теперь у меня меньше файлов в каталоге, и время доступа изменяется с помощью vim, и мне не нужно редактировать файл, но когда я открываю файл с .jpgрасширением, он не изменяется. Когда я открываю его в средстве просмотра изображений, оно тоже не меняется. Мне нужно, чтобы время доступа менялось при каждом чтении файла каким-либо приложением.
xralf

Ответы:

14

С опциями монтирования по умолчанию время доступа обрабатывается особым образом в Linux:

relatime- Монтирование файловой системы с этой опцией приводит к обновлению времени доступа, если они (до того, как произошло обновление) раньше времени модификации. Это значительно сокращает записи, вызванные обновлениями atime.

Опция relatimeмонтирования была сделана опцией по умолчанию начиная с ядра Linux 2.6.30. Это причина ls --time=atimeне перечислять то, что вы ожидаете.

Решение: Чтобы использовать строгое (устаревшее) поведение для времени, используйтеstrictatimeопцию монтирования (например, в/etc/fstab).

Примечание: чтобы полностью отключить обновления atime, можно использовать noatime.

Стефан Хименес
источник
Это помогло. Спасибо. Насколько медленнее будет система strictatime?
xralf
Обновление времени довольно дорого (один запланированный доступ к диску для обновления inode каждый раз, когда к их содержимому обращаются). В частности, если задействовано много небольших файлов, временные обновления могут удвоить загрузку диска. В большинстве случаев программы, зависящие от времени доступа, хотят только проверить, является ли atime> mtime или нет. Таким образом, новая опция по умолчанию relatimeсохраняет совместимость для этих программ. Фактически, очень немногие программы все еще полагаются на это, и это часто безопасно для использования noatime.
Стефан Гименес
Мне нравится эта strictatimeфункция, которую я пробую сегодня, но если она замедлит работу системы, я бы хотел установить ее strictatimeтолько в определенных каталогах, если это будет возможно.
xralf
1
На практике это не более чем на 1% или 2% медленнее, может быть, до 5% на сервере с высокой загрузкой диска. Что ж, если вы действительно заботитесь о производительности, можно ограничить временные обновления определенным каталогом, используя специальный fs, смонтированный вместе с этим, strictatimeкоторый будет использовать этот каталог в качестве точки монтирования.
Стефан Гименес
2

Вы можете отключить запись времени доступа для некоторых файловых систем (ищите noatimeв /etc/fstab). Чтобы проверить это, вы можете попробовать touch -a file; ls -l --time=atime file, а затем повторить, touch -a file; ls -l --time=atime fileчтобы увидеть, если он изменится.

lsПоведение объясняется man ls: ls -l --time=atimeпоказывает время доступа в дате / времени столбца. Для сортировки по этому ключу нужно также использовать --sort=time.

Если вы под «временем не изменились», это означает, что он показывает тот же результат, то есть либо потому, что atime отключен для файловой системы (см. /etc/fstab), Либо потому, что время доступа действительно совпадает со временем модификации (довольно часто).

Обратите внимание, что перечисление файлов не меняет их время доступа - файлы не доступны ls, только кэш-память inode .

l0b0
источник
Когда я набираю ls -l --time=atimeвремя, оно не изменяется (я предполагаю, что столбец со временем является atime), и порядок сортировки не изменяется, файлы с последним временем должны быть в начале или в конце списка (если к ним обращались в последний раз) ).
xralf
@xralf Ты повторил и то touch и другоеls ? Я отредактировал ответ, чтобы сделать его более очевидным.
rozcietrzewiacz
Когда я набираю touch file.txt, время доступа изменяется, но когда я набираю vim file.txt, время доступа не изменяется.
xralf
1

Также при тестировании может быть полезно добавить --full-timeфлаг, чтобы lsвы могли видеть секунды и субсекунды, чтобы вы могли видеть эффект, не ограничиваясь минутными границами.

ОБП
источник