Влияет ли переименование на изменение файла или время доступа? Есть ли где-нибудь список того, что меняется, когда?
Влияет ли переименование на изменение файла или время доступа? Есть ли где-нибудь список того, что меняется, когда?
Ответы:
Переименование обновляет время изменения:
$ 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: -
Время доступа обновляется при чтении содержимого файла. Изменить, когда вы действительно обновите файл (открытия для изменения недостаточно, чтобы изменить время изменения).
cp
и mv
, и vi
для редактирования. Другие редакторы или ваш рабочий стол могут обрабатывать задачу по-другому и обновлять больше временных меток.
mv
Модификация, влияющая на mtime файла, - это изменение данных файла: запись ненулевого количества байтов или усечение, которое приводит к изменению файла. Создание файла также устанавливает его mtime на текущую дату. Простое открытие файла для записи не влияет на mtime, при условии, что файл не создан или не обрезан.
Чтение из файла (если читается ненулевое число байтов) или выполнение файла устанавливает его время в текущее время. Простое открытие файла для чтения никогда не влияет на время. В Linux это теперь отключено по умолчанию в большинстве случаев; atime
крепление опция восстанавливает ATIME обновления, в то время как noatime
параметр монтирования отключает их полностью.
Программы могут изменять mtime и atime файла; Основная команда для этого touch
. Некоторые программы копирования файлов устанавливают то же время копирования, что и оригинал, например cp -p
или rsync -t
.
Изменение, влияющее на ctime файла, - это изменение метаданных файла: разрешений, владельца, времени, количества ссылок и т. Д. Переименование файла также обновляет его ctime. Изменения данных файла также влияют на ctime, но чтение из файла не меняет ctime, даже если оно меняет atime. Невозможно изменить ctime каким-либо иным способом, кроме как установить его на текущее время (даже root ограничен, но root может косвенно установить ctime, сначала изменив системное время или получив прямой доступ к разделу, содержащему файловую систему).
Дополнительное эмпирическое наблюдение, не упомянутое другими ответами:
Открытие файла для записи с O_TRUNC
изменениями mtime, даже если файл изначально был пустым.
Это, кажется, имеет место по крайней мере на ext3 в Linux 3.10.