Tìm hiểu về Dấu thời gian file Linux: mtime, ctime và atime

Tìm hiểu về Dấu thời gian file Linux: mtime, ctime và atime

Chia sẻ kiến thức 23/02/2022

Bạn muốn tìm hiểu thêm về cách Linux theo dõi các thay đổi trong file? Đây là những gì bạn cần biết về Dấu thời gian file trong Linux.

Bạn muốn tìm hiểu thêm về cách Linux theo dõi các thay đổi trong file? Đây là những gì bạn cần biết về Dấu thời gian file trong Linux.

Hệ điều hành Linux theo dõi ba dấu thời gian (timestamp) cho mỗi file (tệp) trên hệ thống của bạn. Các dấu thời gian này cho phép bạn biết thời điểm tệp được cập nhật lần cuối. Nhưng tất cả chúng có nghĩa là gì? Và làm thế nào để bạn tìm được những thời điểm này cho một tệp? Có sự khác biệt gì khi nói đến thư mục (directory) không?

Hiểu biết về atime, ctime và mtime có thể trả lời tất cả những câu hỏi này. Đây là ba dấu thời gian mà hệ thống tệp Unix theo dõi. Hãy đọc tiếp để cùng tìm hiểu về chúng nhé.

1. Ba dấu thời gian Unix là gì?

Mỗi tệp có ba dấu thời gian được liên kết với nó. Linux lưu trữ các dữ liệu này ở  định dạng thời gian Unix , tính bằng số giây kể từ 01/01/1970 (UTC) 00:00:00. Ba dấu thời gian thường được gọi là atime, ctime mtime.

Mtime là dấu thời gian phổ  biến nhất và thường hữu ích nhất. Viết tắt của modified time (thời gian sửa đổi), đây là thời điểm mà nội dung của tệp được ghi lần cuối vào đĩa.

ctime  là viết tắt của change time (thời gian thay đổi), theo dõi các thay đổi về siêu dữ liệu, chẳng hạn như quyền sở hữu và các quyền khác liên quan đến file. Nó cũng bao gồm việc đổi tên tệp — ít nhất, trên hệ điều hành Linux hiện đại điển hình. Nhưng nó cũng cập nhật khi nội dung của tệp thay đổi, vì vậy nó luôn được cập nhật như mtime.

Dấu thời gian thứ ba là atime, viết tắt cho access time (thời gian truy cập), lưu trữ lần cuối ai đó truy cập vào file.

>>> Đọc ngay: 6 yếu tố cần xem xét khi lựa chọn một bản phân phối Linux

2. Cách áp dụng dấu thời gian cho thư mục

Về cơ bản, thư mục Linux là một danh sách các tệp trong thư mục đó. Vì vậy, tạo một tệp bên trong một thư mục sẽ cập nhật mtime của thư mục đó. Việc liệt kê các tệp trong thư mục, sử dụng lệnh ls chẳng hạn, cập nhật atime của nó. Và, cũng như với một tệp, việc thay đổi quyền hoặc tên của thư mục sẽ cập nhật ctime của nó.

3. Thời điểm tạo file

Bạn có thể ngạc nhiên khi biết rằng Linux không theo dõi thời gian tạo file. 

Nhiều ứng dụng lưu tệp bằng cách tạo lại chúng từ đầu mỗi lần lưu. Điều này sẽ làm cho việc sử dụng thời gian tạo bị sai lệch.

>>> Đọc ngay: Cách cài đặt Microsoft Office trên Linux

4. Cách xem các dấu thời gian khác nhau

Cách đơn giản nhất để lấy thông tin dấu thời gian là sử dụng lệnh ls. Định dạng dài mặc định hiển thị chi tiết cho mtime:

$ date
Sat Mar 6 16:57:01 GMT 2021
$ echo "hello, world" > tmp
$ ls -l tmp.txt
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp

Bạn có thể hiển thị atime bằng cách sử dụng flag -u :

$ date
Sat Mar 6 16:59:33 GMT 2021
$ cat tmp
hello, world
$ ls -lu tmp
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:59 tmp
$ ls -l tmp
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp

Dòng cuối cùng xác nhận rằng mtime của tệp này khác với atime. Cuối cùng, sử dụng flag -c để xem ctime:

$ date
Sat Mar 6 17:02:34 GMT 2021
$ mv tmp tmp2
$ ls -lc tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 17:02 tmp2
$ ls -l tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp2
$ ls -lu tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:59 tmp2

Ngoài lệnh ls, bạn cũng có thể dùng  lệnh stat. Lệnh này hiển thị chi tiết cấp thấp từ inode của tệp. Đây là một ví dụ đầu ra cho cùng một tệp:

$ stat tmp2
File: `tmp2'
Size: 13 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 327688 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ubuntu) Gid: ( 1000/ ubuntu)
Access: 2021-03-06 16:59:45.000000000 +0000
Modify: 2021-03-06 16:57:59.000000000 +0000
Change: 2021-03-06 17:02:43.000000000 +0000

5. Cách cập nhật dấu thời gian

Lệnh touch thay đổi thời gian sửa đổi và truy cập của một tệp. Đây cũng là một cách thuận tiện để tạo một tệp trống, nó sẽ thực hiện điều này nếu tệp chưa tồn tại:

touch tmp

Theo mặc định, nó sẽ đặt mtime và atime thành thời gian hiện tại. Bạn có thể đặt thời gian khác với flag -t :

touch -t 202103061200 tmp

Bạn cũng có thể chỉ đặt mtime hoặc atime với các flag -m và  -a tương ứng:

touch -t 202103061300 -m tmp

Lưu ý rằng ctime luôn cập nhật khi chúng ta đặt atime hoặc mtime.

 

>>> Đọc ngay: Cách bắt đầu sử dụng Linux

6. Cách tìm tệp dựa trên dấu thời gian

Lệnh find là một công cụ khác hoạt động dựa trên dấu thời gian. Nó có thể lọc các tệp dựa trên atime, ctime hoặc mtime. Ví dụ:

find . -amin 15

sẽ tìm thấy các tệp được truy cập chính xác 15 phút trước, trong khi:

find . -mtime -2

sẽ tìm thấy các tệp được sửa đổi trong vòng hai ngày qua.

Kết luận

Dấu thời gian tệp được tham chiếu phổ biến nhất là mtime. Ví dụ: đây là ngày và giờ mà danh sách tệp hiển thị. Nhưng hai dấu thời gian khác cũng có thể hữu ích, miễn là bạn hiểu chúng đang đề cập đến điều gì. 

>>>  Tìm hiểu ngay các khóa học lập trình của FUNiX tại:

>>> Xem thêm nhiều hơn bài viết tại đây:

Cách tạo ảnh Mosaic trên Linux với Polyfoto

Cách ghi chú trong Terminal Linux với ứng dụng ghi chú tnote

Cách sử dụng lệnh wc trong Linux

Hướng dẫn cách sử dụng lsof để theo dõi file đang mở trên Linux

 

Dịch từ: https://www.makeuseof.com/linux-file-timestamps/

Vân Nguyễn

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
FUNiX V2 GenAI Chatbot ×

yêu cầu gọi lại