it-swarm-vi.com

dấu thời gian, thời gian sửa đổi và thời gian tạo tệp

Tôi chỉ biết rằng ls -tls -f đưa ra các cách sắp xếp khác nhau của các tệp và thư mục con trong một thư mục.

  • Sự khác biệt giữa dấu thời gian, thời gian sửa đổi và thời gian tạo của tệp là gì?
  • Làm thế nào để có được và thay đổi các loại thông tin bằng các lệnh?
  • Về mặt thông tin nào người ta nói một tập tin "mới" hơn tập tin kia?
  • Những loại thông tin thay đổi sẽ không làm cho tập tin khác nhau?

Ví dụ, tôi thấy ai đó đã viết:

Theo mặc định, chương trình rsync chỉ để xem các tệp có kích thước và dấu thời gian khác nhau hay không. Nó không quan tâm tập tin nào mới hơn, nếu nó khác, nó sẽ bị ghi đè. Bạn có thể chuyển cờ '--update' cho rsync, điều này sẽ khiến nó bỏ qua các tệp trên đích nếu chúng mới hơn tệp trên nguồn, nhưng chỉ miễn là chúng cùng loại tệp. Điều này có nghĩa là nếu, ví dụ, tệp nguồn là một tệp thông thường và đích là một liên kết tượng trưng, ​​tệp đích sẽ bị ghi đè, bất kể dấu thời gian.

Mặt khác, loại tệp ở đây chỉ có nghĩa là tệp thông thường và simlink, không phải loại như pdf, jpg, htm, txt, v.v.?

108
Tim

Có 3 loại "dấu thời gian":

  • Truy cập - lần cuối cùng đọc tệp
  • Sửa đổi - lần cuối cùng tệp được sửa đổi (nội dung đã được sửa đổi)
  • Thay đổi - lần cuối cùng dữ liệu meta của tệp đã được thay đổi (ví dụ: quyền)

Để hiển thị thông tin này, bạn có thể sử dụng stat là một phần của coreutils.

stat cũng sẽ hiển thị cho bạn một số thông tin khác như thiết bị, nút, liên kết, v.v.

Hãy nhớ rằng loại thông tin này phụ thuộc nhiều vào các tùy chọn hệ thống tập tin và gắn kết. Ví dụ: nếu bạn gắn kết một phân vùng với tùy chọn noatime, sẽ không có thông tin truy cập nào được ghi.

Một tiện ích để thay đổi dấu thời gian sẽ là touch. Có một số đối số để quyết định thay đổi dấu thời gian nào (ví dụ: -a cho thời gian truy cập, -m cho thời gian sửa đổi) và ảnh hưởng đến việc phân tích cú pháp của dấu thời gian mới. Xem man touch để biết thêm chi tiết.

touch có thể trở nên tiện dụng khi kết hợp với cp -u ( "chỉ sao chép khi tệp SOURCE mới hơn tệp đích hoặc khi tệp đích bị thiếu" ) hoặc để tạo điểm đánh dấu trống các tập tin.

146
echox

Câu trả lời của echox là hợp lệ nhưng tôi muốn thêm thông tin về thời gian tạo tập tin.

Hỗ trợ hệ thống tập tin

Một số hệ thống tệp hỗ trợ một mục nhập bổ sung trong nút liên quan đến thời gian tạo (hoặc thời gian sinh). Tôi biết rằng ext4 hỗ trợ tính năng này và cả JFS và BTRFS .

Tuy nhiên, hầu hết các công cụ và API chưa được cập nhật để đọc thông tin bổ sung này. Vì vậy, ngay cả khi nó có thể ở đó, nó không thể truy cập được.

Ví dụ trên Ubuntu 12.04 LTS Tôi nhận được những điều sau đây cho một tệp tôi đã tạo ngày hôm nay:

$ echo Just another test > /tmp/mytest
$ sleep 3
$ touch /tmp/mytest
$ sleep 2
$ cat /tmp/mytest > /dev/null
$ stat /tmp/mytest 
[...]
Access: 2012-06-05 13:33:44.279774711 +0200
Modify: 2012-06-05 13:33:34.611893317 +0200
Change: 2012-06-05 13:33:34.611893317 +0200
 Birth: -
$ Sudo debugfs -R 'stat /tmp/mytest' /dev/sda1
[...]
 ctime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
 atime: 0x4fcdee98:42b417dc -- Tue Jun  5 13:33:44 2012
 mtime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
crtime: 0x4fcdee46:01258f1c -- Tue Jun  5 13:32:22 2012
[...]

Bạn có thể thấy rằng hàm stat mới hơn có trường sinh, mặc dù đầu ra có vẻ không chính xác. Và thông qua gỡ lỗi, chúng tôi có thể nhận được thông tin (thời gian như tôi trên hệ thống tệp ext4).

hỗ trợ statx

Hiện tại đã có kể từ Kernel 4.11, một cuộc gọi hệ thống statx mới , ngoài sự hỗ trợ tốt hơn của Y2038 hoặc các hệ thống tệp mạng, nó cũng mang đến một vài tính năng bổ sung như btime hoặc thời gian sinh ( thời gian tạo) truy cập. Hỗ trợ cho ext4 phải ở cùng bản phát hành kernel 4.11.

Đã có các bản vá để thêm hỗ trợ cho tòa nhà mới này trong các bản phát hành Kernel sau này: ví dụ: BTRFS và F2FS trong Kernel 4.13, SMB3 trong 4.14, GFS2 trong 4.15, NFS trong 4.16, v.v.

Glibc sắp tới sẽ cung cấp một lệnh gọi chức năng để truy vấn giao diện này (xem Tin tức Phoronix về hỗ trợ statib của glibc ). Vì vậy, chúng tôi có thể mong đợi hỗ trợ cho tính năng này trong không gian người dùng khá sớm.

38
Huygens