Làm thế nào để ctime thay đổi?


8

Tôi đang cố gắng hiểu chính xác khi dấu thời gian của tệp bị thay đổi. Ở nhiều nơi (ví dụ, trong câu trả lời được chấp nhận ở đây ), có ý kiến ​​cho rằng mọi thay đổi trong thuộc tính tệp cũng sẽ thay đổi thời gian. Tuy nhiên, điều này dường như không đúng, ít nhất là trên Ubuntu 12.04 của tôi (vâng, tôi biết, hơi cũ ...):

cat file.txt > /dev/null

thay đổi atime, do đó, nó thay đổi các thuộc tính tệp (trong tệp inode), nhưng không thay đổi thời gian.

Các nguồn khác (ví dụ, ở đâyở đây ) đề xuất rằng chỉ một số thao tác trên các thuộc tính tệp thực sự thay đổi thời gian, nhưng một danh sách chính xác không được cung cấp.

Tôi có thể tìm tài liệu tham khảo chính xác về hoạt động nào thay đổi thời gian?


Có lẽ vấn đề có liên quan đến cat, bạn đã kiểm tra nó với touch?
Mahdi

Câu trả lời:


8

Có ba dấu thời gian trên các hệ thống Unix:

  • atime: Thời gian truy cập

    Dấu thời gian này cho bạn biết khi tệp được truy cập lần cuối, bao gồm chỉ đọc quyền truy cập.

  • ctime: Thay đổi thời gian

    Dấu thời gian này cho bạn biết khi các thuộc tính tệp (thông tin inode) thay đổi lần cuối. Điều đó bao gồm quyền sở hữu và quyền, nhưng thay đổi nội dung cũng kích hoạt cập nhật dấu thời gian này.

    Lưu ý rằng thay đổi đối với atime dường như là một ngoại lệ vì họ không gây ra một bản cập nhật ctime. Điều này có thể là do một truy cập đọc đơn giản, đủ để kích hoạt cập nhật atime không thực hiện bất kỳ thay đổi liên quan nào đến các thuộc tính tệp. Và một trong những mục đích chính của ctime là giúp các công cụ sao lưu xác định xem một tập tin đã thay đổi hay chưa. Atime là một thông tin không liên quan cho các công cụ như vậy và cập nhật bản sao lưu chỉ để cập nhật một atime đã thay đổi vì ai đó đã đọc tệp sẽ vô dụng.

    Tôi không chắc chắn, nhưng một số người cho rằng hành vi này (thay đổi thời gian không cập nhật ctime) chỉ là do các tùy chọn gắn kết (như relatime) của hệ thống tệp cơ bản lưu trữ và trì hoãn cập nhật atime trong nút vì lý do hiệu năng trong bộ nhớ và chỉ áp dụng chúng cho các nút thực trên đĩa (kích hoạt cập nhật ctime) trong các điều kiện nhất định.
    @kos đã thử nó và dường như ngay cả khi gắn một FS với'rictatime``tion, thời gian dường như không bao giờ cập nhật nếu thay đổi thời gian.

  • mtime: Thời gian sửa đổi

    Dấu thời gian này cho bạn biết khi nào nội dung của tệp đã được sửa đổi lần cuối.


Vì vậy, một đơn giản truy cập đọc sử dụng cat FILENAMEchỉ thay đổi atime , nhưng không phải là ctime như không có thuộc tính tập tin bị sửa đổi. Các thay đổi atime không được tính.


Đó chính xác là vấn đề: tại sao đồng hồ thay đổi không được tính? Nó không phải là một thuộc tính tập tin?
VeryHardCoder 22/03/2016

@VeryHardCoder Tôi đã cố gắng xây dựng câu trả lời của mình vào thời điểm đó và thêm một số giải thích.
Chỉ huy Byte
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.