Что считается изменением или изменением файла?


Ответы:


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
Копия создает новый файл с Modify, Access и Change с новым значением (все то же самое). Вставка чего-либо в редакторе (а затем сохранение) обновляет все три (изменить с более поздней отметкой времени, чем две другие, конечно, только после сохранения)
Zelda

Я имел в виду использование CTRL + x в файле и CTRL + v в другом месте.

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

Например, Nautilus не обновляет Access и Modify с помощью Ctrl + X, а затем Ctrl + V, только изменение отличается, какmv
Zelda

9

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

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

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

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


1

Дополнительное эмпирическое наблюдение, не упомянутое другими ответами:

Открытие файла для записи с O_TRUNCизменениями mtime, даже если файл изначально был пустым.

Это, кажется, имеет место по крайней мере на ext3 в Linux 3.10.

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