名称

stat - 显示文件或文件系统的状态信息

简介

stat [选项]... 文件...

描述

stat 命令显示指定文件或文件系统的详细信息,包括大小、权限、拥有者、时间戳、inode 编号、块大小等。这些信息主要来自系统调用 stat()。该命令主要用于:

  • 查看文件的详细元数据。

  • 检查文件权限、时间戳、链接数等。

  • 以自定义格式输出信息(如供脚本解析)。

  • 显示文件系统(而非文件本身)的状态信息。

选项

短选项

长选项

描述

-L

--dereference

跟随符号链接,显示链接指向的文件的信息(而非链接本身)。

-f

--file-system

显示文件系统状态(而非文件本身)。

-c

--format=格式

使用指定格式输出(类似 printf)。每文件后自动换行。

--printf=格式

类似 --format,但解释反斜杠转义序列,且末尾不自动添加换行。

-t

--terse

简洁模式,以一行显示摘要信息(适合脚本解析)。

--help

显示帮助信息并退出。

--version

显示版本信息并退出。

格式说明符

--format--printf 选项使用格式字符串,其中以 % 开头的指令会被替换为相应值。常用格式指令:

指令

描述

%a

以八进制表示的访问权限

%A

以人类可读形式(如 -rw-r--r--)表示的访问权限

%b

已分配的块数(参见 %B

%B

%b 报告的每个块的大小(字节数)

%d

十进制设备号

%D

十六进制设备号

%f

十六进制原始模式

%F

文件类型(如“普通文件”、“目录”、“符号链接”等)

%g

所有者的组 ID

%G

所有者的组名

%h

硬链接数

%i

inode 编号

%n

文件名

%N

如果文件是符号链接,显示引用内容(如 'a' -> 'b'

%o

I/O 块大小(优化传输块大小)

%s

总大小(字节数)

%u

所有者的用户 ID

%U

所有者的用户名

%w

文件创建时间(若支持),如未知则显示 -

%W

文件创建时间的 Unix 时间戳(自 1970-01-01 起的秒数),若未知则为 0

%x

最后访问时间(人类可读)

%X

最后访问时间的 Unix 时间戳

%y

最后修改时间(人类可读)

%Y

最后修改时间的 Unix 时间戳

%z

最后状态更改时间(人类可读)

%Z

最后状态更改时间的 Unix 时间戳

对于文件系统模式(-f),还有另外一组格式指令,如 %a(可用块数)、%b(总块数)、%c(文件节点总数)等。详情请参见 man stat

退出状态

  • 0 – 成功。

  • >0 – 发生错误(例如文件不存在、权限不足等)。

常用示例

1. 显示文件的详细信息

stat file.txt

输出示例:

  File: file.txt
  Size: 1024            Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d      Inode: 1234567     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   user)   Gid: ( 1000/   group)
Access: 2025-03-15 10:30:00.000000000 +0800
Modify: 2025-03-14 09:20:00.000000000 +0800
Change: 2025-03-14 09:20:00.000000000 +0800
 Birth: 2025-03-13 15:10:00.000000000 +0800

2. 显示符号链接指向的文件信息

stat -L symlink

3. 显示文件系统信息(而非文件本身)

stat -f /

输出示例:

  File: "/"
    ID: 1234567890abcde Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 12345678   Free: 9876543   Available: 8765432
Inodes: Total: 1234567    Free: 1234560

4. 简洁输出(适合脚本)

stat -t file.txt

输出一行摘要,各字段用空格分隔,如:

file.txt 1024 8 81a4 1000 1000 801 1234567 1 0 0 1742029800 1741987200 1741987200 1741936200 4096

5. 自定义格式输出

stat -c "%n: %s bytes, permissions %A" file.txt

输出:

file.txt: 1024 bytes, permissions -rw-r--r--

6. 仅获取文件大小

stat -c %s file.txt

7. 获取文件的最后修改时间(Unix 时间戳)

stat -c %Y file.txt

8. 获取文件权限(八进制)

stat -c %a file.txt

9. 同时显示多个文件的信息

stat file1.txt file2.txt

10. 使用 --printf 输出不带换行的信息

stat --printf "%n\t%s\n" file1.txt file2.txt

11. 获取文件系统块大小和可用空间

stat -f -c "块大小: %S, 可用块: %a" /home

12. 查找最近修改过的文件(结合 find)

find . -type f -exec stat -c "%y %n" {} \; | sort

按修改时间排序显示文件。

注意事项

  • stat 显示的时间精度取决于文件系统和系统支持,可能包含纳秒部分。

  • 文件创建时间(%w%W)并非所有文件系统都支持(如 ext4 记录创建时间,但某些 Unix 可能不支持)。在不支持的系统上会显示 -0

  • 对于符号链接,默认显示链接本身的信息(大小、权限等),使用 -L 显示目标文件信息。

  • 简洁模式 -t 输出的字段顺序和数量固定,但不同系统可能略有差异,脚本使用时建议用 -c 自定义格式以保证兼容性。

  • 某些旧系统可能没有 stat 命令,或功能较弱(如 BSD 的 stat 选项与 Linux 不同)。可参考 man stat 确认当前环境支持的选项。

相关命令

  • ls -l – 列出文件基本信息(权限、链接数、所有者、大小、修改时间)。

  • ls -i – 显示 inode 编号。

  • file – 确定文件类型。

  • du – 估计文件空间使用量。

  • df – 报告文件系统磁盘空间使用情况。

  • touch – 更改文件时间戳。

  • chmod/chown – 更改文件权限和所有者。

  • stat (系统调用) – C 语言中的同名函数。