É possível ter um arquivo com uma data modificada anterior à data de criação? Quais ações causariam esse evento?
É possível ter um arquivo com uma data modificada anterior à data de criação? Quais ações causariam esse evento?
Respostas:
Considere um arquivo .tar que é extraído. Normalmente, os arquivos extraídos terão um carimbo de data / hora da última modificação atribuído a partir do conteúdo do arquivo (o que normalmente ocorre no passado, a menos que você seja um viajante do tempo). No que diz respeito ao sistema de arquivos, esses arquivos foram criados.
Também existem utilitários para alterar o tempo de modificação dos arquivos existentes; no Linux, por exemplo, este é o comando touch .
cp -p
e as coisas que imitam-lo como rcp -p
e scp -p
, assim como rsync
com -t
ou -a
, leva o modtime da fonte.
Se você criar um arquivo a partir do zero, receberá um horário de criação de "agora" e uma data de modificação de "agora". Agora imagine copiar esse arquivo para outra unidade. O Windows manterá a hora da modificação, mas a hora de criação desse arquivo será definida para a hora em que você copiou o arquivo para essa unidade (ou seja, a hora em que o arquivo foi criado nessa unidade). Simples assim.
Na verdade, está correto:
No Windows, é muito fácil definir (falsificar, se você desejar) os horários criados e modificados de um arquivo. Você não precisa alterar o relógio do computador; você nem precisa de acesso de administrador local. Tudo o que você precisa é de acesso de gravação ao arquivo em questão.
Para definir a hora de criação de um arquivo com o PowerShell usando SetCreationTime
:
[System.IO.File]::SetCreationTime("C:\path\to\file.ext", (Get-Date "8/8/2088"))
Para definir a hora da última modificação usando SetLastWriteTime
:
[System.IO.File]::SetLastWriteTime("C:\path\to\file.ext", (Get-Date "7/4/1776"))
No Linux, você pode facilmente alterar a hora da última modificação de um arquivo com o -d
sinalizador de touch
, como mostrado nesta resposta ao Ubuntu . Não há realmente uma noção de data de criação para arquivos em sistemas de arquivos Linux ( leia mais em Unix e Linux ).
O mais importante a ser observado aqui é que o tempo de modificação do arquivo não é realmente especial - ele é armazenado como qualquer outro dado. Não há como saber quando os dados foram realmente gravados ou lidos pela última vez.
A partir daqui, podemos ver que sempre é possível (excluindo a mídia de gravação única, como um CD) modificar diretamente os bits em uma unidade que armazena a hora da última modificação, ou mesmo a hora da criação.
Mais praticamente, isso também é possível a partir de sistemas operacionais comuns, como outras respostas observaram. No Windows, isso é fornecido pela SetFileTime
função WinAPI , e você pode fazer isso utime
no Linux. Ferramentas como touch
compilação sobre essas APIs.
O uso legítimo mais comum para essas APIs é preservar o tempo de modificação, por exemplo, ao copiar arquivos, extraí-los de arquivos, etc.
Na minha experiência, foi quando um ou mais computadores foram usados para modificar o arquivo e um deles tem a hora errada do sistema. As três causas mais comuns para o horário do sistema estar errado, em nenhuma ordem específica são: