Що вважається модифікацією чи зміною файлу?


Відповіді:


9

Перейменування оновлює час зміни:

$ mkdir tmp
$ cd tmp

$ echo abc > a
$ stat a
  File: `a'
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 26h/38d Inode: 5038682     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000 /  zelda   Gid: ( 1000/   zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:06:58.981107444 +0100
 Birth: -

$ mv a b
$ stat b
  File: `b'
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 26h/38d Inode: 5038682     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/  zelda)   Gid: ( 1000/   zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:07:14.893238472 +0100
 Birth: -

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


Чи змінюється копіювання файлу та вклеювання його часу «змінити» на новий файл? Чи зміна Ctrl + X та вставки змінюють час "зміни"?

1
Копія створює новий файл із зміною, доступом та зміною з новим значенням (все те саме). Вставте щось у редактор (а потім збережіть) оновлення всіх трьох (Змінити пізнішою часовою позначкою, ніж інші дві, звичайно, лише після збереження)
Zelda

Я мав на увазі використання CTRL + x у файлі та CTRL + v десь ще.

Для цього використовуються інструменти командного рядка cpі mvта viдля редагування. Інші редактори або ваш робочий стіл можуть вирішувати завдання по-різному, і оновити більше часових позначок.
Зельда

Напр. Nautilus не оновлює доступ і не змінює за допомогою Ctrl + X, потім Ctrl + V, лише Зміни різні, якmv
Zelda

9

Модифікація, що впливає на mtime файлу, - це зміна даних файлу: запис ненульової кількості байтів або усікання, що закінчується модифікацією файлу. Створення файлу також встановлює його mtime на поточну дату. Просто відкриття файлу для запису не впливає на mtime, якщо припустити, що файл не створений або усічений.

Читання з файлу (якщо читається ненульова кількість байтів) або виконання файлу встановлює його atime на поточний час. Просто відкриття файлу для читання ніколи не впливає на час. У Linux це тепер відключено за замовчуванням у більшості випадків; atimeкріплення опція відновлює ATIME поновлення, в той час як noatimeпараметр монтування відключає їх повністю.

Програми можуть змінювати mtime та atime файлу; основна команда для цього - це touch. Деякі програми копіювання файлів встановлюють копію на той самий час, що й оригінал, наприклад, cp -pабоrsync -t .

Зміна, що впливає на ctime файлу, - це зміна метаданих файлу: дозволи, власник, час, кількість посилань тощо. Перейменування файлу також оновлює його ctime. Зміни файлових даних також впливають на ctime, але читання з файлу не змінює ctime, навіть якщо воно змінює atime. Неможливо змінити ctime будь-яким іншим способом, ніж встановити його на поточний час (навіть корінь обмежений, але root може побічно встановити ctime, спочатку змінивши системний час або безпосередньо звернувшись до розділу, що містить файлову систему).


1

Додаткове емпіричне спостереження, яке не згадується в інших відповідях:

Відкриття файлу для запису з O_TRUNC зміною mtime, навіть якщо файл спочатку був порожнім.

Це, мабуть, так, принаймні, на ext3 в Linux 3.10.

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