Як змінюється ctime?


8

Я намагаюся точно зрозуміти, коли змінюється часова марка ctime файлу. У багатьох місцях (наприклад, у прийнятій відповіді тут ) пропонується, що будь-яка зміна атрибутів файлу також змінить ctime. Однак, здається, це неправда, принаймні, на моєму Ubuntu 12.04 (так, я знаю, трохи старий ...):

cat file.txt > /dev/null

змінює atime, тому він змінює атрибути файлів (у файлі inode), але не змінює ctime.

Інші джерела (наприклад, тут і тут ) припускають, що лише деякі операції з атрибутами файлів фактично змінюють ctime, але точного списку не надано.

Де я можу знайти точне посилання на те, які операції змінюють час?


Можливо, проблема пов’язана з цим cat, ви її вивчали touch?
Махді

Відповіді:


8

У системах Unix є три позначки часу:

  • atime: Час доступу

    Ця марка часу повідомляє про те, коли в останній раз доступ до файлу , включаючи лише доступ для читання

  • ctime: Зміна часу

    Ця мітка часу повідомляє про те, коли атрибути файлу (інформація про індекси) змінювались в останній раз. Це включає, наприклад, право власності та дозволи, але зміна вмісту також викликає оновлення цієї позначки часу.

    Зауважте, що зміни в atime здаються винятком, оскільки вони не викликають оновлення ctime. Це, мабуть, тому, що простий доступ для читання, якого достатньо для запуску оновлення atime, не вносить жодних змін у атрибути файлу. І одна з головних цілей ctime - допомогти інструментам резервного копіювання визначити, чи змінився файл. Atime - це нерелевантна інформація для таких інструментів та оновлення резервної копії лише для оновлення зміненого atime, оскільки хтось прочитав файл було б марним.

    Я не впевнений, але деякі люди вважають, що така поведінка (зміни в atime не оновлюють ctime) пов’язана лише з параметрами монтування (як relatime) базової файлової системи, що кешує та затримує оновлення atime в inode з міркувань продуктивності в пам'яті і застосовує їх лише до реальних вкладів на диску (запускаючи оновлення ctime) за певних умов.
    @kos спробував це, і, мабуть, навіть при встановленні FS з опцією `strictatime``, ctime, схоже, ніколи не оновлюється, якщо зміниться atime.

  • mtime: Час модифікації

    Ця марка часу повідомляє про те, коли зміст файлу було змінено востаннє.


Таким чином, простий доступ для читання з використанням cat FILENAMEлише зміни atime , але не ctime, оскільки жоден атрибут файлу не змінювався. Змінена Atime не злічити.


Саме в цьому і полягає: чому змінений аніме не враховується? Це не атрибут файлу?
VeryHardCoder

@VeryHardCoder Я спробував розробити свою відповідь у цьому пункті і додав пояснення.
Байт-командир
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.