Lệnh stat trong Linux là một tiện ích dòng lệnh dùng để hiển thị thông tin chi tiết về một file hoặc thư mục, cung cấp các thuộc tính như kích thước file, quyền truy cập, quyền sở hữu, các dấu thời gian liên quan đến lần truy cập, chỉnh sửa và thay đổi metadata của file. Trong bài viết dưới đây, mình sẽ cùng bạn tìm hiểu chi tiết về lệnh stat Linux và xem xét năm ví dụ sử dụng lệnh này cho người mới bắt đầu.
Những điểm chính
- Định nghĩa lệnh stat linux: Hiểu rõ khái niệm, cú pháp và những thông tin chi tiết mà lệnh
statcung cấp về một file hoặc hệ thống file. - Cú pháp và tùy chọn: Nắm vững cấu trúc lệnh và các tham số quan trọng để tùy biến dữ liệu hiển thị theo đúng nhu cầu quản trị.
- Giải thích thông số kết quả: Biết cách đọc và hiểu các trường dữ liệu kỹ thuật như số Inode, kích thước khối I/O và các loại quyền truy cập.
- Các ví dụ thực tế: Nắm vững 5 cách sử dụng lệnh
stattrong các tình huống thực tế, từ kiểm tra trạng thái file, hệ thống file, đến việc tùy chỉnh định dạng đầu ra. - Giải đáp thắc mắc (FAQ): Có được câu trả lời cho các câu hỏi thường gặp, giúp bạn giải quyết các vấn đề cụ thể như kiểm tra nhiều file và lấy quyền truy cập dạng số.
Lệnh stat linux là gì?
Lệnh stat Linux là công cụ dùng để hiển thị thông tin chi tiết về trạng thái của một file, thư mục hoặc hệ thống file. Khi sử dụng lệnh này, bạn sẽ nhận được các thông số như: Loại file, quyền truy cập, chủ sở hữu, nhóm sở hữu, thời gian tạo/lần truy cập cuối/lần chỉnh sửa cuối, số inode, số liên kết, kích thước và nhiều thông tin khác liên quan đến đối tượng cần kiểm tra.

Cú pháp và các tùy chọn lệnh stat phổ biến
Cú pháp để thực thi lệnh stat rất đơn giản và tuân theo cấu trúc sau:
stat [Tùy_Chọn] [Tên_File]Trong đó:
- [Tùy_Chọn]: Các cờ để điều chỉnh định dạng đầu ra hoặc cách thức hoạt động của lệnh.
- [Tên_File]: Đường dẫn đến tệp tin hoặc thư mục cần kiểm tra.
Lệnh này chấp nhận một hoặc nhiều tên file làm đối số đầu vào, cho phép bạn kiểm tra đồng thời nhiều đối tượng.
Người dùng có thể sử dụng các tùy chọn sau để tùy biến kết quả:
| Tùy chọn | Chức năng |
|---|---|
-L hoặc --dereference | Lệnh sẽ hiển thị thông tin của tệp gốc thay vì thông tin của symlink. |
-f hoặc --file-system | Lệnh sẽ hiển thị trạng thái của filesystem nơi chứa tệp tin, thay vì trạng thái của chính tệp tin đó. |
-t hoặc --terse | Lệnh sẽ in kết quả dưới dạng tóm tắt, thuận tiện cho việc xử lý bằng các script tự động. |
-c hoặc --format | Người dùng sử dụng tùy chọn này để định dạng kết quả đầu ra theo ý muốn, chỉ hiển thị các trường thông tin cụ thể. |
--help | Hệ thống sẽ hiển thị hướng dẫn sử dụng và danh sách đầy đủ các tùy chọn. |
Ý nghĩa các thông tin trong kết quả
Khi người dùng chạy lệnh mà không có bất kỳ tùy chọn nào, stat sẽ hiển thị một báo cáo chi tiết về file, bao gồm các trường thông tin quan trọng sau:
- File: Tên của file đang được kiểm tra.
- Size: Kích thước thực tế của file, tính bằng byte.
- Blocks: Số lượng khối đĩa (allocated blocks) đã được cấp phát để lưu trữ file này.
- IO Block: Kích thước của mỗi khối trên hệ thống tập tin, tính bằng byte.
- File type: Loại của đối tượng (ví dụ: regular file cho file thông thường, directory cho thư mục, symbolic link cho liên kết tượng trưng).
- Device: Mã định danh của thiết bị chứa chứa file, được hiển thị ở cả dạng thập lục phân (hex) và thập phân (decimal).
- Inode: Số inode duy nhất đại diện cho tệp tin trên hệ thống.
- Links: Số lượng liên kết cứng (hard links) đang trỏ đến inode này.
- Access (Quyền): Quyền truy cập của file, được hiển thị ở cả dạng số (ví dụ: 0640) và dạng ký hiệu (-rw-r—–).
- Uid (User ID): ID người dùng và tên tài khoản của chủ sở hữu file.
- Gid (Group ID): ID nhóm và tên nhóm sở hữu file.
- Context: Chuỗi ngữ cảnh bảo mật SELinux (nếu hệ thống có sử dụng SELinux).
- Access (Thời gian): Thời điểm cuối cùng tệp tin được truy cập hoặc đọc nội dung.
- Modify (Thời gian): Thời điểm cuối cùng nội dung của tệp tin bị thay đổi.
- Change (Thời gian): Thời điểm cuối cùng siêu dữ liệu (metadata) của tệp tin bị thay đổi (ví dụ: thay đổi quyền hạn, đổi tên, hoặc di chuyển).
- Birth (Thời gian): Thời điểm tệp tin được tạo ra. (Lưu ý: Trường này thường không được hỗ trợ trên hầu hết các hệ thống tập tin của Linux và có thể hiển thị là “0” hoặc “-“).
Các ví dụ thực tế sử dụng lệnh stat Linux
Kiểm tra trạng thái file trên Linux
Để sử dụng stat ở dạng cơ bản nhất, bạn chỉ cần cung cấp tên của file cần kiểm tra làm đối số. Lệnh dưới đây sẽ hiển thị kích thước, số khối, số khối I/O, loại file, giá trị inode, số liên kết và nhiều thông tin khác về file /var/log/syslog, như dưới đây:
$ stat /var/log/syslog
Kiểm tra trạng thái hệ thống file
Để chuyển stat từ chế độ báo cáo thông tin file sang chế độ báo cáo thông tin hệ thống file, bạn cần sử dụng tùy chọn -f. Bạn có thể áp dụng lệnh này cho một file bất kỳ, và stat sẽ tự động hiển thị thông tin về hệ thống file chứa file đó.
$ stat -f /var/log/syslog
Bạn cũng có thể cung cấp một thư mục hoặc hệ thống file làm đối số như ví dụ dưới đây:
$ stat -f /
Khi được thực thi với tùy chọn -f, stat sẽ trả về một bộ thông tin hoàn toàn khác, tập trung vào các thuộc tính của hệ thống file, bao gồm:
- File: Tên của file đã được dùng để truy vấn.
- ID: ID của hệ thống file, hiển thị ở dạng thập lục phân.
- Namelen: Độ dài tối đa (tính bằng ký tự) được phép cho tên file trên hệ thống file này.
- Type: Loại của hệ thống file (ví dụ:
ext2/ext3,xfs,btrfs). - Block size: Kích thước khối được khuyến nghị để đạt tốc độ truyền dữ liệu tối ưu khi đọc/ghi.
- Fundamental block size: Kích thước cơ bản của mỗi khối trên hệ thống file.
- Blocks (Thông tin về các khối dữ liệu):
- Total: Tổng số khối dữ liệu có trong hệ thống file.
- Free: Số lượng khối còn trống.
- Available: Số lượng khối trống có sẵn cho người dùng thông thường (không phải người dùng root).
- Inodes (Thông tin về các inode):
- Total: Tổng số inode có trong hệ thống file.
- Free: Số lượng inode còn trống, sẵn sàng để sử dụng cho các file và thư mục mới.
Cho phép theo dõi liên kết tượng trưng
Vì Linux hỗ trợ liên kết tượng trưng (Symbolic link) và liên kết cứng (hard link), một số file có thể có một hoặc nhiều liên kết, hoặc chúng có thể tồn tại trong một hệ thống file. Để cho phép lệnh stat theo dõi các liên kết, bạn sử dụng tùy chọn -L như sau:
$ stat -L /
Sử dụng định dạng tùy chỉnh để hiển thị thông tin
Lệnh stat cho phép người dùng lọc và chỉ hiển thị những thông tin cần thiết thông qua tùy chọn -c hoặc --format. Điều này rất hữu ích khi viết các script tự động hóa.
Các mã định dạng phổ biến:
- %n: Tên tập tin.
- %s: Kích thước tập tin (bytes).
- %a: Quyền truy cập dạng số (octal).
- %U: Tên người sở hữu (Owner).
Ngoài ra, bạn cũng có thể sử dụng tùy chọn --printf, cho phép diễn giải các chuỗi thoát như dấu gạch chéo ngược (\) và sẽ không tự động in dòng mới ở cuối. Trong trường hợp này, bạn cần sử dụng \n trong định dạng nếu muốn in xuống dòng, ví dụ như sau:
# stat --printf='%U\n%G\n%C\n%z\n' /Ý nghĩa của các chuỗi định dạng được sử dụng trong ví dụ trên:
- %U: Tên người sở hữu file.
- %G: Tên nhóm sở hữu file.
- %C: Chuỗi ngữ cảnh bảo mật SELinux.
- %z: Thời gian thay đổi trạng thái cuối cùng, ở định dạng dễ đọc.
Dưới đây là một ví dụ minh họa việc sử dụng các chuỗi định dạng được hỗ trợ dành cho hệ thống file:
test@computer:~$ stat --printf='%U\n%G\n%C\n%z\n' /
root
root
stat: failed to get security context of '/': No data available
?
2025-05-26 03:08:53.940011762 +0700 Chú thích:
- Chủ sở hữu của thư mục / là user root.
- Nhóm sở hữu của / là group root.
- stat: failed to get security context of ‘/’: No data available: Lỗi này là do máy của mình chưa bật SElinux nên %C không thể lấy chuỗi cảnh báo bảo mật của SElinux.
- 2025-05-26 03:08:53.940011762 +0700: Đây là thời gian chỉnh sửa lần cuối cùng của thư mục.
In thông tin ở dạng rút gọn
Ngoài việc tùy chỉnh định dạng, stat còn cung cấp một chế độ báo cáo đặc biệt gọi là “terse form” thông qua tùy chọn -t. Chế độ này in ra tất cả thông tin dưới dạng một dòng duy nhất, với các trường được phân tách bằng khoảng trắng. Để thực hiện, bạn nhập lệnh như sau (thay thế /var/log/syslog bằng tên file muốn rút gọn thông tin):
$ stat -t /var/log/syslog
Định dạng cô đọng này được thiết kế để dễ dàng cho việc phân tích cú pháp bởi các kịch bản hoặc các tiện ích khác. Tuy nhiên, để hiểu ý nghĩa của từng trường trong chuỗi đầu ra, bạn cần phải tham khảo tài liệu hướng dẫn (man stat) hoặc đối chiếu với kết quả của định dạng đầy đủ.
$ man statCâu hỏi thường gặp
Có thể dùng lệnh stat để kiểm tra nhiều file cùng lúc không?
Có . Bạn chỉ cần ghi các tên file cách nhau bởi dấu cách, ví dụ:stat file1.txt file2.txt file3.txtLệnh này sẽ hiển thị thông tin của từng file lần lượt trong kết quả đầu ra.
Làm sao để hiển thị quyền truy cập của file theo định dạng số (octal) bằng lệnh stat?
Bạn có thể sử dụng định dạng tùy chỉnh, ví dụ:stat --format='%a' file.txtKết quả trả về là quyền truy cập dạng số (vd: 644).
Công dụng của trường “Links” trong kết quả lệnh stat là gì?
Trường “Links” cho biết số liên kết cứng (hard link) trỏ tới inode của file. Một số liên kết lớn nghĩa là có nhiều tên file cùng trỏ tới cùng một vùng dữ liệu.
Lệnh stat là một tiện ích dòng lệnh mạnh mẽ, được thiết kế để hiển thị thông tin trạng thái chi tiết của một hoặc nhiều file, liên kết, hoặc toàn bộ hệ thống file. Việc hiểu rõ và thành thạo lệnh stat sẽ giúp bạn nâng cao khả năng quản lý và phân tích hệ thống file của mình.




