Возможно ли иметь файл с измененной датой, предшествующей дате его создания? Какие действия могут вызвать это событие?
Возможно ли иметь файл с измененной датой, предшествующей дате его создания? Какие действия могут вызвать это событие?
Ответы:
Рассмотрим архив .tar, который извлечен. Как правило, извлеченные файлы будут иметь метку времени последнего изменения, назначенную из содержимого архива (что обычно в прошлом, если вы не путешественник во времени). Что касается файловой системы, то эти файлы только что были созданы.
Существуют также утилиты для изменения времени модификации существующих файлов, например, в Linux это команда touch .
cp -p
и для вещей, которые имитируют его, как rcp -p
и scp -p
, а также rsync
с -t
или -a
, берет modtime из источника.
Если вы создаете файл с нуля, он получает время создания «сейчас» и дату изменения «сейчас». Теперь представьте, что вы копируете этот файл на другой диск. Windows сохранит время изменения, но время создания этого файла будет равно времени, когда вы скопировали файл на этот диск (то есть время, когда файл был создан на этом диске). Просто как тот.
Это на самом деле правильно:
В Windows очень легко установить (фальсифицировать, если хотите) время создания и изменения файла. Вам не нужно менять часы компьютера; вам даже не нужен локальный доступ администратора. Все, что вам нужно, это доступ на запись к рассматриваемому файлу.
Чтобы установить время создания файла с помощью PowerShell, используйте SetCreationTime
:
[System.IO.File]::SetCreationTime("C:\path\to\file.ext", (Get-Date "8/8/2088"))
Чтобы установить время последнего изменения, используйте SetLastWriteTime
:
[System.IO.File]::SetLastWriteTime("C:\path\to\file.ext", (Get-Date "7/4/1776"))
В Linux вы можете легко изменить время последнего изменения файла с -d
флагом touch
, как показано в этом ответе Ask Ubuntu . На самом деле нет понятия даты создания файлов в файловых системах Linux ( дальнейшее чтение в Unix & Linux ).
Здесь важно отметить, что время модификации файла не является особенным - оно хранится так же, как и любые другие данные. Там нет никакого способа узнать , когда данные были фактически последней записи или чтения с.
Отсюда мы видим, что всегда можно (за исключением носителя с однократной записью, например, компакт-диска) перейти и напрямую изменить биты на диске, которые хранят время последнего изменения или даже время создания.
На практике это также выполнимо из обычных операционных систем, как отмечалось в других ответах. В Windows это обеспечивается SetFileTime
функцией WinAPI , и вы можете сделать это utime
в Linux. Такие инструменты, как touch
строить на основе этих API.
Наиболее распространенным законным использованием этих API-интерфейсов является сохранение времени модификации, например, при копировании файлов, извлечении их из архивов и т. Д.
По моему опыту, это было, когда один или несколько компьютеров были использованы для изменения файла, и один из них имеет неправильное системное время. Три наиболее распространенные причины неправильной работы системного времени: