Một tập tin có thể được sửa đổi trước khi nó được tạo ra? [bản sao]


9

Có thể có một tệp có ngày sửa đổi trước ngày được tạo không? Những hành động sẽ gây ra sự kiện này xảy ra?


7
Tạo tập tin. Quay ngược đồng hồ. Sửa đổi tập tin. Đặt lại đồng hồ một lần nữa.
DavidPostill

@DavidPostill Lưu ý rằng, ít nhất là trên Windows, việc thay đổi thời gian hệ thống đòi hỏi phải có quyền quản trị, trong khi có những cách khác để tạo thời gian tệp vui nhộn mà không được.
Ben N

Câu trả lời:


8

Hãy xem xét một kho lưu trữ .tar được trích xuất. Thông thường, các tệp được trích xuất sẽ có dấu thời gian sửa đổi lần cuối được chỉ định từ nội dung lưu trữ (thường là trong quá khứ trừ khi bạn là người du hành thời gian). Theo như hệ thống tập tin, những tập tin này vừa được tạo.

Ngoài ra còn có các tiện ích để thay đổi thời gian sửa đổi của các tệp hiện có, trên Linux, ví dụ đây là lệnh cảm ứng .


Và đối với một tập tin duy nhất, cp -pvà điều đó bắt chước nó như rcp -pscp -p, cũng như rsyncvới -thoặc -a, lấy modtime từ nguồn.
dave_thndry_085

"Thời gian tạo" là một thuật ngữ cửa sổ không phải là * nix. * nix có "thời gian thay đổi" rất dễ nhầm lẫn với "thời gian tạo" nhưng không giống nhau.
cắm vào

ext4 rõ ràng không lưu trữ "thời gian sinh" tương tự (nhưng không giống với) "thời gian tạo" của windows nhưng không có cách nào tốt để truy cập nó. unix.stackexchange.com/a/50184/122182
plugwash

8

Nếu bạn tạo một tệp từ đầu, nó sẽ có thời gian tạo là "ngay bây giờ" và ngày sửa đổi là "ngay bây giờ". Bây giờ hãy tưởng tượng sao chép tập tin này vào ổ đĩa khác. Windows sẽ giữ thời gian sửa đổi, nhưng thời gian tạo tệp đó sẽ được đặt thành thời gian bạn sao chép tệp vào ổ đĩa đó (tức là thời gian tệp được tạo trên ổ đĩa đó ). Đơn giản như thế.

Nó thực sự đúng:

  • Lần cuối cùng nội dung của tệp được thay đổi được lưu trữ trong thời gian sửa đổi.
  • Thời gian tệp được tạo trên chính ổ đĩa này được lưu trữ trong thời gian tạo.

Nhận xét này có ý nghĩa nhất bởi vì nó thể hiện một kịch bản rất có thể xảy ra khi sự khác biệt ngày được tạo / sửa đổi sẽ xảy ra.
Shukri Adams

7

Trên Windows, rất dễ cài đặt (giả mạo, nếu bạn muốn) một lần tạo và sửa đổi tệp. Bạn không phải thay đổi đồng hồ của máy tính; bạn thậm chí không cần truy cập quản trị viên địa phương. Tất cả bạn cần là viết quyền truy cập vào tập tin trong câu hỏi.

Để đặt thời gian tạo tệp với PowerShell bằng cách sử dụng SetCreationTime:

[System.IO.File]::SetCreationTime("C:\path\to\file.ext", (Get-Date "8/8/2088"))

Để đặt thời gian sửa đổi lần cuối bằng cách sử dụng SetLastWriteTime:

[System.IO.File]::SetLastWriteTime("C:\path\to\file.ext", (Get-Date "7/4/1776"))

Trên Linux, bạn có thể dễ dàng thay đổi thời gian sửa đổi lần cuối của tệp bằng -dcờ của touch, như thể hiện trong câu trả lời Hỏi Ubuntu này . Thực sự không có khái niệm về ngày tạo cho các tệp trên hệ thống tệp Linux ( đọc thêm tại Unix & Linux ).


3

Đúng. Trên Windows, thay đổi tập tin và lưu nó. Bây giờ sao chép tập tin. Nhìn vào các thuộc tính của bản sao, bạn sẽ thấy nó có ngày sửa đổi sớm hơn.


1

Điều quan trọng nhất cần lưu ý ở đây là thời gian sửa đổi tệp không thực sự đặc biệt - nó được lưu trữ giống như bất kỳ dữ liệu nào khác. Không có cách nào để biết khi nào dữ liệu thực sự được ghi vào lần cuối hoặc đọc từ đó.

Từ đây, chúng ta có thể thấy rằng luôn luôn có thể (không bao gồm phương tiện ghi một lần như CD) và trực tiếp sửa đổi các bit trên ổ đĩa lưu trữ thời gian sửa đổi lần cuối hoặc thậm chí là thời gian tạo.

Thực tế hơn, điều này cũng có thể thực hiện được từ bên trong các hệ điều hành phổ biến, như các câu trả lời khác đã lưu ý. Trong Windows, SetFileTimechức năng này được cung cấp bởi chức năng WinAPI và bạn có thể thực hiện việc này với utimeLinux. Các công cụ như touchxây dựng trên đầu các API này.

Việc sử dụng hợp pháp phổ biến nhất cho các API này là trong việc duy trì thời gian sửa đổi, ví dụ như khi sao chép tệp, trích xuất chúng từ kho lưu trữ, v.v.


0

Theo kinh nghiệm của tôi, đó là khi một hoặc nhiều máy tính đã được sử dụng để sửa đổi tệp và một trong số chúng có thời gian hệ thống sai. Ba nguyên nhân phổ biến nhất khiến thời gian hệ thống bị sai, không theo thứ tự cụ thể là:

  1. Không phải tất cả các máy tính được cấu hình để tự động thay đổi thành thời gian tiết kiệm ánh sáng ban ngày.
  2. Mọi người đã "vô tình" thay đổi thời gian hệ thống trên máy tính.
  3. Mọi người đã "cố tình" thay đổi thời gian hệ thống trên máy tính như một trò đùa.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.