stat命令用来显示文件或文件系统的状态。

命令功能

stat命令用来显示文件或文件系统的状态。stat命令从文件的索引节点获取信息,它们包括文件类型的信息,八进制访问权限和人类可读形式的权限,SELinux安全上下文字符串,文件创建时间,上次访问时间,上次数据修改时间,上次状态改变时间以及Epoch以来的秒数等等。因此,stat命令的输出信息比ls命令的输出信息要更详细。见touch命令。

命令格式

stat [OPTION]… FILE…

命令参数

  • -c或–format:使用特定或自定义格式而不是默认格式,在每一行结束之后打印一个新行。
  • -L:支持符号连接。
  • -f:显示文件系统状态而非文件状态。
  • –printf:类似于format,但它能够解释反斜线转义,并关闭后续换行符的打印,可以手动添加\n打印新行。
  • -t:以简洁方式输出信息。
  • –help:显示指令的帮助信息。
  • –version:显示指令的版本信息。

命令实例

stat显示更多信息

描述:使用ls命令的长列表模式和使用stat命令查看文件信息。
命令:
ls -l names.txt
stat names.txt
输出:

说明:图中,文件状态改变和文件修改的日期/时间是相同的,而访问时间是更近的时间。文件使用了8个块,以两个格式显示文件权限,八进制(0664)和-rw-rw-r–格式。在第三行显示索引为393342,文件没有其他硬链接(Links:1)。这个文件是一个常规文件。

显示文件系统的状态

描述:f选项将显示指定文件系统的信息。需要提供一个目录/文件系统作为参数。
命令:
stat -f /dev/vda1
输出:

重命名改变状态时间

描述:重命名文件将会改变状态时间,即ctime。文件创建的时候ctime存储文件的创建日期和时间,修改文件后就变为记录文件的状态改动时间。
命令:
mv fairy fairy2
stat fairy2
输出:

查看多个文件

描述:使用通配符查看多个文件的状态。
命令:stat t*
输出:

用ls获取额外的信息

描述:ls的u选项显示最后访问时间,c选项显示状态改动时间。
命令:
ls -lu fairy2
ls -lc fairy2
输出:

用ls获取额外的信息

描述:ls的u选项显示最后访问时间,c选项显示状态改动时间。
命令:
ls -lu fairy2
ls -lc fairy2
输出:

显示指定的信息

--format选项可以单独显示具体的信息。可用的选项如下:

表: 文件的格式序列

选项 含义
%a 八进制表示的访问权限
%A 可读格式表示的访问权限
%b 分配的块数(参见%B)
%B %b参数显示的每个块的字节数
%d 十进制表示的设备号
%D 十六进制表示的设备号
%f 十六进制表示的Raw模式
%F 文件类型
%g 属主的组ID
%G 属主的组名
%h 硬连接数
%i Inode号
%n 文件名
%N 如果是符号链接,显示器所链接的文件名
%o I/O块大小
%s 全部占用的字节大小
%t 十六进制的主设备号
%T 十六进制的副设备号
%u 属主的用户ID
%U 属主的用户名
%x 最后访问时间
%X 最后访问时间,自Epoch开始的秒数
%y 最后修改时间
%Y 最后修改时间,自Epoch开始的秒数
%z 最后改变时间
%Z 最后改变时间,自Epoch开始的秒数

表: 文件系统的格式序列

选项 含义
%a 普通用户可用的块数
%b 文件系统的全部数据块数
%c 文件系统的全部文件节点数
%d 文件系统的可用文件节点数
%f 文件系统的可用节点数
%C SELinux的安全上下文
%i 十六进制表示的文件系统ID
%l 文件名的最大长度
%n 文件系统的文件名
%s 块大小(用于更快的传输)
%S 基本块大小(用于块计数)
%t 十六进制表示的文件系统类型
%T 可读格式表示的文件系统类型

描述:–format选项可以一次显示所有指定的信息。例如只查看文件类型,和硬链接数。
命令:
stat --format=%F %h fairy2
输出:

描述:以两种格式查看权限,查看文件的最后访问时间,自Epoch开始的秒数,还查看了文件的属主。–format或-c选项可以打印特定或自定义格式,在每一行结束之后打印一个新行。
命令:
stat --format=%a fairy2
stat --format=%A fairy2
stat --format=%X fairy2
stat --format=%U fairy2
输出:

描述:以两种格式查看权限,查看文件的最后访问时间,自Epoch开始的秒数,还查看了文件的属主。–printf类似于format,但它能够解释反斜线转义,并关闭后续换行符的打印,可以手动添加\n打印新行。
命令:
stat --printf="%a\n" fairy2
stat --printf="%A\n" fairy2
stat --printf="%X\n" fairy2
stat --printf="%U\n" fairy2
输出: