Ist es möglich, eine Datei zu haben, deren Änderungsdatum vor dem Erstellungsdatum liegt? Welche Aktionen würden dieses Ereignis verursachen?
Ist es möglich, eine Datei zu haben, deren Änderungsdatum vor dem Erstellungsdatum liegt? Welche Aktionen würden dieses Ereignis verursachen?
Antworten:
Betrachten Sie ein extrahiertes .tar-Archiv. In der Regel wird den extrahierten Dateien ein Zeitstempel für die letzte Änderung aus dem Archivinhalt zugewiesen (was normalerweise in der Vergangenheit liegt, es sei denn, Sie sind Zeitreisender). Was das Dateisystem betrifft, wurden diese Dateien jedoch gerade erstellt.
Es gibt auch Dienstprogramme zum Ändern der Änderungszeit vorhandener Dateien. Unter Linux ist dies beispielsweise der Befehl touch .
cp -p
und Dinge, die sie imitieren, wie rcp -p
und scp -p
, sowie rsync
mit -t
oder -a
, nimmt die Modtime von der Quelle.
Wenn Sie eine Datei von Grund auf neu erstellen, wird die Erstellungszeit "jetzt" und das Änderungsdatum "jetzt" angezeigt. Stellen Sie sich nun vor, Sie kopieren diese Datei auf ein anderes Laufwerk. Windows behält die Änderungszeit bei, aber die Erstellungszeit dieser Datei wird auf den Zeitpunkt festgelegt, zu dem Sie die Datei auf dieses Laufwerk kopiert haben (dh den Zeitpunkt, zu dem die Datei auf diesem Laufwerk erstellt wurde). So einfach ist das.
Es ist eigentlich richtig:
Unter Windows ist es sehr einfach, die Erstellungs- und Änderungszeiten einer Datei festzulegen (wenn Sie so wollen, zu verfälschen). Sie müssen die Uhr des Computers nicht ändern. Sie benötigen nicht einmal lokalen Administratorzugriff. Sie benötigen lediglich Schreibzugriff auf die betreffende Datei.
So legen Sie die Erstellungszeit einer Datei mit PowerShell fest SetCreationTime
:
[System.IO.File]::SetCreationTime("C:\path\to\file.ext", (Get-Date "8/8/2088"))
So stellen Sie die zuletzt geänderte Zeit ein SetLastWriteTime
:
[System.IO.File]::SetLastWriteTime("C:\path\to\file.ext", (Get-Date "7/4/1776"))
Unter Linux können Sie die zuletzt geänderte Zeit einer Datei einfach mit dem -d
Flag von ändern touch
, wie in dieser Antwort von Ubuntu gezeigt . Es gibt eigentlich keine Vorstellung von einem Erstellungsdatum für Dateien auf Linux-Dateisystemen ( weiterführende Literatur unter Unix & Linux ).
Das Wichtigste dabei ist, dass die Änderungszeit von Dateien nichts Besonderes ist - sie wird wie alle anderen Daten gespeichert. Es ist nicht zu erkennen, wann Daten tatsächlich zuletzt geschrieben oder gelesen wurden.
Von hier aus können wir sehen, dass es immer möglich ist (ausgenommen einmal beschreibbare Medien wie eine CD), die Bits auf einem Laufwerk, auf dem die zuletzt geänderte Zeit oder sogar die Erstellungszeit gespeichert ist, direkt zu ändern.
In der Praxis ist dies auch innerhalb gängiger Betriebssysteme möglich, wie andere Antworten festgestellt haben. Unter Windows wird dies von der WinAPI- SetFileTime
Funktion bereitgestellt , und Sie können dies unter utime
Linux tun . Tools wie touch
bauen auf diesen APIs auf.
Die häufigste legitime Verwendung für diese APIs besteht darin, die Änderungszeit beizubehalten, z. B. beim Kopieren von Dateien, Extrahieren aus Archiven usw.
Nach meiner Erfahrung wurde ein oder mehrere Computer zum Ändern der Datei verwendet, und einer von ihnen hat die falsche Systemzeit. Die drei häufigsten Ursachen dafür, dass die Systemzeit in keiner bestimmten Reihenfolge falsch ist, sind: