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


12

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

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

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

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


Какую ОС вы используете? Многие современные дистрибутивы 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 .


Когда я набираю ls -l --time=atimeвремя, оно не изменяется (я предполагаю, что столбец со временем является atime), и порядок сортировки не изменяется, файлы с последним временем должны быть в начале или в конце списка (если к ним обращались в последний раз) ).
xralf

@xralf Ты повторил и то touch и другоеls ? Я отредактировал ответ, чтобы сделать его более очевидным.
rozcietrzewiacz

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

1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.