Я пытаюсь точно понять, когда метка времени ctime файла изменяется. Во многих местах (например, в принятом ответе здесь ) предполагается, что любое изменение атрибутов файла также изменит ctime. Однако, похоже, что это не так, по крайней мере, на моем Ubuntu 12.04 (да, я знаю, немного староват ...):
cat file.txt > /dev/null
изменяет atime, поэтому он изменяет атрибуты файла (в inode файла), но не меняет ctime.
Другие источники (например, здесь и здесь ) предполагают, что только некоторые операции над атрибутами файла фактически изменяют ctime, но точный список не предоставляется.
Где я могу найти точную ссылку на то, какие операции меняют ctime?
filesystem
VeryHardCoder
источник
источник
cat
, рассматривали ли вы этоtouch
?Ответы:
В системах Unix есть три метки времени:
atime
: Время доступаЭта отметка времени сообщает вам, когда к файлу обращались в последний раз, включая доступ только для чтения.
ctime
: Время сменыЭта отметка времени сообщает вам, когда атрибуты файла (информация об узле) изменились в последний раз. Это включает в себя, например, владение и разрешения, но изменение содержимого также вызывает обновление этой отметки времени.
Обратите внимание, что изменения в atime кажутся исключением, поскольку они не запускают обновление ctime. Вероятно, это связано с тем, что простой доступ для чтения, достаточный для запуска обновления времени, не вносит каких-либо соответствующих изменений в атрибуты файла. И одна из основных целей ctime - помочь инструментам резервного копирования определить, изменился ли файл. Atime - несущественная информация для таких инструментов, и обновление резервной копии просто для обновления измененного времени, потому что кто-то прочитал файл, будет бесполезным.
Я не уверен, но некоторые люди думают, что это поведение (изменения atime не обновляют ctime) происходит только из-за параметров монтирования (напримерrelatime
) базовой файловой системы, которая кэширует и задерживает обновления atime в inode по соображениям производительности в памяти и только применяет их к реальным inode на диске (вызывая обновление ctime) при определенных условиях.@kos попробовал это сделать, и, видимо, даже при монтировании FS с опцией `strictatime`` ctime, похоже, никогда не обновится, если atime изменится.
mtime
: Время модификацииЭта отметка времени указывает, когда содержимое файла было изменено в последний раз.
Таким образом, простой доступ на чтение, использующий
cat FILENAME
только atime , но не ctime, поскольку атрибут файла не был изменен. Измененная Atime не сосчитать.источник