Làm thế nào để kiểm tra tất cả dấu thời gian của một tập tin?


52

Có lệnh nào trong Linux để kiểm tra tất cả dấu thời gian của tệp không?

Tôi đang cố gắng xem ngày sửa đổi, tạo và chạm ngày cuối cùng trên tệp.


4
Chỉ cần chỉ ra, các tệp Linux không có ngày sinh. Do đó, không thể xác định ngày một tệp được tạo.
FatalError

nhận thấy rằng = (. Cảm ơn vì đã chỉ ra cho tôi.
Mechaflash

4
@FirthError: Các hệ thống tập tin khác nhau đã hỗ trợ dấu thời gian sinh / tạo; rắc rối thực sự là trong việc truy cập thêm thông tin. (Một người không thể gia hạn struct statmà không phá vỡ mọi thứ, thật không may ...) Bạn có thể dùng thử debugfs -R "stat <1234>" /dev/sdXYext4, thay thế 1234bằng ino.
grawity

@grawity: gọn gàng! Tôi luôn tự hỏi tại sao không có fs nào có nó ... nhưng tôi đoán họ làm vậy, nhưng như bạn đã nói, không thể phá vỡ ABI cho các nhị phân hiện có. Cảm ơn vì tiền hỗ trợ :).
FatalError

1
@FirthError, Thời gian sinh có thể được hiển thị bằng statlệnh Linux , xem Cách tìm ngày tạo tệp? hệ thống tập tin gì trên Linux lưu trữ thời gian sáng tạo? .
Franklin Piat

Câu trả lời:


73

Lệnh được gọi stat.

$ stat test
234881026 41570368 -rw-r--r-- 1 werner staff 0 0 "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" 4096 0 0 test

Nếu bạn muốn điều chỉnh định dạng, hãy tham khảo các trang hướng dẫn, vì đầu ra là dành riêng cho hệ điều hành và thay đổi theo Linux / Unix.

Nói chung, bạn cũng có thể nhận được thời gian thông qua một danh sách thư mục bình thường:

  • ls -l đầu ra lần trước nội dung tập tin đã được sửa đổi, mtime
  • ls -lcxuất ra lần cuối sửa đổi trạng thái tệp, ctime( Sự khác biệt là gì? )
  • ls -luđưa ra thời gian truy cập cuối cùng, atime(mặc dù tính hữu ích của khái niệm này là chủ đề thảo luận )

Và tất nhiên, ctimekhông ghi lại khi một tập tin được "tạo". Đặc tả POSIX chỉ xác định ba dấu thời gian, nhưng một số hệ thống tệp Linux lưu trữ Thời gian sinh / Thời gian tạo. Làm thế nào để tìm ngày tạo của tập tin? Trên một cấu hình được hỗ trợ như vậy, người ta có thể sử dụng

stat --printf '%n\nmtime: %y\nctime: %z\natime: %x\ncrtime:%w\n'

statlà thực sự chi tiết. Nhưng lschỉ cần một dòng. Sẽ tốt hơn nếu nó cũng có thể hiển thị giây. Tuy nhiên, khi tạo danh sách các tập tin, cái trước là hoàn toàn phù hợp.
neverMind9

ls -l là giải pháp nhanh chóng cho tôi
Andrew

Tôi đã nhận thấy rằng kết quả ls -lcó thể hiển thị định dạng ngày khác khi có BusyBox được cài đặt (trên Android). Tôi nghĩ rằng không có nó, nó giống như "2019-07-26 14:41", và với nó, nó giống như "ngày 6 tháng 5, 21 tháng 5". Làm thế nào đến năm mất tích? Có cách nào để buộc nó sử dụng định dạng mà không có nó không?
nhà phát triển Android

@androiddeveloper Giống như tôi đã nói, câu trả lời phụ thuộc vào HĐH. Tôi nghĩ bạn nên mở một câu hỏi mới. Nếu bạn đang nói về Android một cách cụ thể, có lẽ Stack Overflow hoặc Android Enthusiasts sẽ phù hợp hơn.
slhck

@slhck Vâng, đó là cùng một hệ điều hành, chỉ với BusyBox được cài đặt. Tôi hỏi nếu có thể (nghĩa là: có lệnh sử dụng) để có được định dạng sẽ được hiển thị.
nhà phát triển Android

21

Chỉ có BA giá trị thời gian riêng biệt được lưu trữ cho mỗi tệp của bạn, như được xác định theo Tiêu chuẩn POSIX : http://pub.opengroup.org/onlinepub/9699919799/ (xem phần Định nghĩa cơ sở -> 4. Khái niệm chung -> 4.8 Tệp Cập nhật lần)

Mỗi tệp có ba dấu thời gian liên quan riêng biệt: thời gian truy cập dữ liệu lần cuối , thời gian sửa đổi dữ liệu lần cuối và thời gian thay đổi trạng thái tệp lần cuối . Các giá trị này được trả về trong cấu trúc đặc điểm cấu trúc tệp, như được mô tả trong <sys / stat.h> .

Và từ <sys / stat.h> :

atime is for Last data access timestamp.
mtime is for Last data modification timestamp.
ctime is for Last file status change timestamp.

Các ví dụ sau đây cho thấy sự khác biệt giữa atime , mtimectime , những ví dụ này có trong GNU / Linux BASH. Bạn có thể sử dụng stat -xtrong Mac OS X hoặc BSD Dist khác. để xem định dạng đầu ra tương tự.

$ stat --version
stat (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ touch test
$ stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:58:28.609223953 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800

Khi tệp vừa được tạo, ba dấu thời gian là như nhau.


1. atime

Trước tiên, hãy truy cập dữ liệu của tệp bằng cách đọc ( lesshoặc vim), in ra ( cat) hoặc sao chép nó sang tệp khác ( cp).

$ cat test #Nothing will be printed out, since the file is empty
$ stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800  <-- atime Changed!
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800

2. thời gian

Bây giờ, hãy thay đổi trạng thái tệp, bằng cách thay đổi quyền ( chmod) hoặc đổi tên nó ( mv)

$ chmod u+x test
$ stat stet
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:04:10.178285430 +0800  <-- ctime Changed!
$    
$ mv test testing
$ stat testing
  File: `testing'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:06:33.342207679 +0800  <-- ctime Changed again!

Lưu ý rằng cho đến bây giờ, nội dung ( dữ liệu ) của tệp vẫn giống như khi nó được tạo.


3. thời gian

Cuối cùng, hãy sửa đổi nội dung của tệp bằng cách chỉnh sửa tệp.

$ echo 'Modify the DATA of the file' > testing
$ echo 'Modify the DATA of the file also change the file status' > testing
$ stat testing
  File: `testing'
  Size: 56          Blocks: 8          IO Block: 4096   regular file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 11:09:48.247345148 +0800  <-- mtime Changed!
Change: 2014-03-16 11:09:48.247345148 +0800  <-- ctime also Changed!

4. giờ sinh

Cũng lưu ý rằng phiên bản mới hơn stat(ví dụ stat --version 8.13trong Ubuntu 12.04) có thông tin dấu thời gian thứ 4 - Thời gian sinh (thời gian tạo tệp). Mặc dù hiện tại nó có thể không hiển thị thời gian chính xác:

$ stat --version
stat (GNU coreutils) 8.13
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ stat birth_time
  File: `birth_time'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d  Inode: 4073946     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/ bingyao)   Gid: ( 1000/ bingyao)
Access: 2014-03-16 10:46:48.838718970 +0800
Modify: 2014-03-16 10:46:48.838718970 +0800
Change: 2014-03-16 10:46:48.838718970 +0800
 Birth: -

Ý nghĩa của 10: 46: 48.838718970 là gì? HH: MM: SS. nano giây?
Dzung Nguyễn

2
. "Kể từ kernel 2.5.48, cấu trúc stat hỗ trợ độ phân giải nano giây cho ba trường dấu thời gian tệp ...."
Tom Lord

Thời gian tạo có thể được tìm ra với quyền truy cập root và gỡ lỗi nếu cần: moiseevigor.github.io/software/2015/01/30/ Kẻ
Mikko Rantalainen

2
Giờ sinh nhật vui mừng. Bởi vì lần sửa đổi cuối cùng và thay đổi cuối cùng gần như cho cùng một mục đích nhưng vẫn khác biệt. Thật tốt nếu cả bốn tồn tại.
neverMind9
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.