È possibile avere un file con una data modificata precedente alla data di creazione? Quali azioni causerebbero questo evento?
È possibile avere un file con una data modificata precedente alla data di creazione? Quali azioni causerebbero questo evento?
Risposte:
Considera un archivio .tar che viene estratto. In genere, i file estratti avranno un timestamp di ultima modifica assegnato dal contenuto dell'archivio (che è in genere passato se non sei un viaggiatore nel tempo). Per quanto riguarda il filesystem, questi file sono stati appena creati.
Esistono anche utility per cambiare il tempo di modifica dei file esistenti, ad esempio su Linux questo è il comando touch .
cp -p
e le cose che lo imitano come rcp -p
e scp -p
, così come rsync
con -t
o -a
, prendono il modtime dalla fonte.
Se si crea un file da zero, si ottiene un tempo di creazione di "ora" e una data di modifica di "ora". Ora immagina di copiare questo file su un'altra unità. Di Windows manterrà la data di modifica, ma l'ora di creazione di tale file verrà impostato il tempo è stato copiato il file da tale unità (cioè il tempo il file è stato creato su quella unità). Semplice come quella.
In realtà è corretto:
Su Windows, è molto facile impostare (falsificare, se vuoi) i tempi di creazione e modifica di un file. Non è necessario modificare l'orologio del computer; non hai nemmeno bisogno dell'accesso di amministratore locale. Tutto ciò che serve è l'accesso in scrittura al file in questione.
Per impostare l'ora di creazione di un file con PowerShell usando SetCreationTime
:
[System.IO.File]::SetCreationTime("C:\path\to\file.ext", (Get-Date "8/8/2088"))
Per impostare l'ora dell'ultima modifica utilizzando SetLastWriteTime
:
[System.IO.File]::SetLastWriteTime("C:\path\to\file.ext", (Get-Date "7/4/1776"))
Su Linux, puoi facilmente cambiare l'ora dell'ultima modifica di un file con il -d
flag di touch
, come mostrato in questa domanda Chiedi a Ubuntu . Non c'è davvero la nozione di una data di creazione per i file su file system Linux ( ulteriori letture su Unix e Linux ).
La cosa più importante da notare qui è che il tempo di modifica del file non è davvero speciale - è memorizzato proprio come qualsiasi altro dato. Non c'è modo di sapere quando i dati sono stati effettivamente scritti o letti dall'ultima volta.
Da qui, possiamo vedere che è sempre possibile (escludendo i supporti write-once come un CD) andare e modificare direttamente i bit su un'unità che memorizzano l'ora dell'ultima modifica, o anche l'ora della creazione.
Più praticamente, questo è fattibile anche all'interno di sistemi operativi comuni, come hanno notato altre risposte. In Windows, questo è fornito dalla SetFileTime
funzione WinAPI e puoi farlo con utime
su Linux. Strumenti come touch
build su queste API.
L'uso legittimo più comune per queste API è quello di preservare i tempi di modifica, ad esempio durante la copia di file, l'estrazione da archivi, ecc.
Nella mia esperienza è stato quando uno o più computer sono stati utilizzati per modificare il file e uno di essi ha l'ora di sistema errata. Le tre cause più comuni per cui l'ora del sistema è sbagliata, in nessun ordine particolare sono: