Подтвердить что ты не робот

Настройка создания или изменения временных меток

Используя utimes, futimes, futimens и т.д., можно установить отметки времени доступа и изменения в файле.

Время модификации - это последний раз, когда данные файла изменились. Аналогично, "ctime" или время изменения - это атрибуты последнего времени в файле, такие как разрешения, были изменены. (Linux/POSIX поддерживает три временных метки: mtime и ctime, уже обсуждались и "atime", или время доступа.)

Есть ли функция для установки временных меток изменения? (Где "изменение" - это изменение атрибута или "ctime", а не время модификации "mtime".) (Я понимаю цикличность, желающую изменить временную метку изменения, но думаю, что программное обеспечение для архивирования - было бы неплохо восстановить файл точно как это было.)

Существуют ли какие-либо функции для создания временных меток? (Я понимаю, что ext2 не поддерживает это, но мне было интересно, работает ли Linux для тех файловых систем, которые его поддерживают.)

Если это невозможно, какова его аргументация не так?

4b9b3361

Ответ 1

Для ext2/3 и, возможно, для ext4 вы можете сделать это с помощью инструмента debugfs, если вы хотите изменить ctime файла /tmp/foo, который находится на диске /dev/sda1, мы хотим установить ctime для 201001010101, что означает 01 января 2010 года, время 01:01:

Предупреждение: диск должен быть размонтирован перед этой операцией

# Update ctime
debugfs -w -R 'set_inode_field /tmp/foo ctime 201001010101' /dev/sda1

# Drop vm cache so ctime update is reflected
echo 2 > /proc/sys/vm/drop_caches

Информация взята из Command Line Kung Fu в блоге.

Ответ 2

У меня была аналогичная проблема, и я написал здесь свой ответ.

fooobar.com/questions/269255/...

Существует по существу два варианта:

  • Незначительное изменение в ядре (код включен в ссылку)
  • Измените системные часы на желаемое время, коснитесь файла, а затем восстановите текущее время. (оболочка script для включения в ссылку).

Ответ 3

Согласно http://lists.gnu.org/archive/html/coreutils/2010-08/msg00010.html ctime нельзя подделать (по крайней мере, он не предназначен для подделки):

POSIX говорит, что atime и mtime настраиваются пользователем в произвольные моменты времени через семейство системных вызовов utimensat(), но ctime должен неявно отслеживать текущее время любого действия, которое изменяет файл метаданных или содержимого.

Если вам просто нужно изменить файл ctime для некоторой проверки/отладки, bindfs может оказаться полезным. Это файловая система FUSE, которая монтирует один каталог в другое место и может выполнять некоторую трансформацию по атрибутам файла. С опцией --ctime-from-mtime время ctime каждого файла совпадает с mtime, которое вы можете установить с помощью touch -t.

Ответ 4

Самый простой способ:

1) change System time
2) copy paste a file on another location.

Я пробовал это на Windows 7, и мне удалось изменить все три временных метки. Команда stat в linux показывает, что все три метки времени изменены.