Czy można mieć plik, którego data modyfikacji jest wcześniejsza niż data jego utworzenia? Jakie działania spowodowałyby wystąpienie tego zdarzenia?
Czy można mieć plik, którego data modyfikacji jest wcześniejsza niż data jego utworzenia? Jakie działania spowodowałyby wystąpienie tego zdarzenia?
Odpowiedzi:
Rozważ rozpakowane archiwum .tar. Zazwyczaj wyodrębnione pliki będą miały znacznik czasu ostatniej modyfikacji przypisany z zawartości archiwum (co zwykle ma miejsce w przeszłości, chyba że jesteś podróżnikiem w czasie). Jeśli chodzi o system plików, pliki te zostały właśnie utworzone.
Istnieją również narzędzia do zmiany czasu modyfikacji istniejących plików, na przykład w Linuksie jest to polecenie dotykowe .
cp -p
a rzeczy, które imitują go jak rcp -p
i scp -p
, a także rsync
z -t
lub -a
bierze czasy modyfikacji ze źródła.
Jeśli utworzysz plik od zera, otrzyma on czas utworzenia „teraz” i datę modyfikacji „teraz”. Teraz wyobraź sobie kopiowanie tego pliku na inny dysk. System Windows zachowa czas modyfikacji, ale czas utworzenia tego pliku zostanie ustawiony na czas skopiowania pliku na ten dysk (tj. Czas utworzenia pliku na tym dysku). Proste.
To jest właściwie poprawne:
W systemie Windows bardzo łatwo jest ustawić (sfałszować, jeśli chcesz) czas utworzenia i modyfikacji pliku. Nie musisz zmieniać zegara komputera; nie potrzebujesz nawet dostępu lokalnego administratora. Wszystko czego potrzebujesz to dostęp do zapisu do danego pliku.
Aby ustawić czas tworzenia pliku za pomocą programu PowerShell przy użyciu SetCreationTime
:
[System.IO.File]::SetCreationTime("C:\path\to\file.ext", (Get-Date "8/8/2088"))
Aby ustawić czas ostatniej modyfikacji za pomocą SetLastWriteTime
:
[System.IO.File]::SetLastWriteTime("C:\path\to\file.ext", (Get-Date "7/4/1776"))
W systemie Linux możesz łatwo zmienić czas ostatniej modyfikacji pliku za pomocą -d
flagi touch
, jak pokazano w odpowiedzi na pytanie Ubuntu . Tak naprawdę nie ma pojęcia daty utworzenia plików w systemach plików Linux ( dalsze czytanie w Unix i Linux ).
Najważniejszą rzeczą do odnotowania tutaj jest to, że czas modyfikacji pliku nie jest tak naprawdę szczególny - jest przechowywany tak jak inne dane. Nie sposób powiedzieć, kiedy dane zostały faktycznie ostatni zapisywane lub odczytywane z.
Stąd możemy zobaczyć, że zawsze jest możliwe (z wyjątkiem nośników jednokrotnego zapisu, takich jak CD), aby przejść i bezpośrednio zmodyfikować bity na dysku przechowującym czas ostatniej modyfikacji, a nawet czas utworzenia.
Praktycznie rzecz biorąc, jest to również wykonalne z poziomu wspólnych systemów operacyjnych, jak zauważyły inne odpowiedzi. W systemie Windows jest to zapewniane przez funkcję WinAPI SetFileTime
i można to zrobić utime
w systemie Linux. Narzędzia takie jak touch
budowanie na tych interfejsach API.
Najczęstszym uzasadnionym zastosowaniem tych interfejsów API jest zachowanie czasu modyfikacji, np. Podczas kopiowania plików, wyodrębniania ich z archiwów itp.
Z mojego doświadczenia wynika, że jeden lub więcej komputerów zostało użytych do modyfikacji pliku, a jeden z nich ma niewłaściwy czas systemowy. Trzy najczęstsze przyczyny nieprawidłowego działania systemu, w żadnej określonej kolejności, to: