stat是一个命令行程序,用于显示指定文件或文件系统的详细信息。本教程介绍如何使用stat命令。

stat命令的语法形式是stat [OPTION]... FILE...[OPTION]是stat命令的选项,控制stat命令行为和输出。

FILE...是必须参数,可以指定一个或多个文件名称,多个文件使用空格进行分隔。

stat file.txt
  File: file.txt
  Size: 4030      	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 13633379    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/myfreax)   Gid: ( 1000/myfreax)
Access: 2019-11-06 09:52:17.991979701 +0100
Modify: 2019-11-06 09:52:17.971979713 +0100
Change: 2019-11-06 09:52:17.971979713 +0100
 Birth: -

在不指定任何选项运行stat命令,stat命令显示的文件信息包括,File文件名称,Size文件的大小,以字节为单位。

Blocks文件占用的块数。IO Block每个块的字节大小。File type文件类型,可以是文件,目录,符号链接等。

Device设备编号,以十六进制和十进制表示。Inode索引节点号码。Links硬链接数。Access: (0664/-rw-rw-r--)数字和符号的文件权限模式。

Uid文件拥有者的用户ID。Gid文0件所属组的ID。Context-SELinux安全上下文。Access: 2019-11-06 09:52:17.991979701 +0100上次访问文件时间。

Modify: 2019-11-06 09:52:17.971979713 +0100上次修改文件的内容的时间。Change上次更改文件的属性的时间。

显示文件系统的信息

要获取指定文件所在的文件系统信息,而不是文件本身的信息,请使用stat命令的-f/--file-system选项。

当使用-f选项调用stat时,它显示的信息包括。File文件名。ID以十六进制表示的文件系统ID。

Namelen文件名的最大长度。Block size文件系统每个块的大小,在格式化分区时指定。

Blocks Total文件所在分区的总块数。Free文件所在的分区可用的总块数。Available非root用户可用的块数。

Inodes Total文件所在分区inode总数。Free文件所在分区空闲的Inode索引节点数。

stat -f file.txt
  File: "package.json"
    ID: 8eb53097b4494d20 Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 61271111   Free: 25395668   Available: 22265851
Inodes: Total: 15630336   Free: 13979610

符号链接

默认情况下,stat命令不跟随符号链接。如果在stat命令指定的文件是符号链接,输出是符号链接的信息,而不是符号链接指向的文件。

要跟随符号链接并显示符号链接指向的文件的信息,可以指定stat命令的-L/--dereference选项。

你可以创建文件的软链接来验证这一点,然后对比stat命令使用与不使用-L选项的显示Inode信息,你将会发现两个 文件的Inode是不一样的。

ln -sf test.txt test1.txt
stat test1.txt
stat -L test1.txt

自定义输出

stat命令有两个选项,可让您根据需要自定义命令的输出,分别是-c/--format="format"--printf="format"

这两个选项之间的区别在于,当为stat命令指定或多个文件时,--format选项为每个文件的信息之后自动添加换行符。 --printf可以自定任意格式,自由度更高。

您可以组合任意的格式序列,%a八进制访问权限,%A 友好的权限阅读格式,
%b 使用的块数,%B块的大小。

%CSELinux安全上下文字符串,%d十进制的设备号,%D 十六进制的设备号,
%f十六进制原始模式,%F 文件类型。

%g所属组ID,%G所数组的名称,%h 硬链接数,%iinode号码,%m挂载点,
%n文件名称,%N引用的文件名称。

%o最佳 I/O 传输大小提示,%s总大小,以字节为单位,%t 十六进制的主要设备类型。

%T十六进制的主要设备类型,%u所有者的用户 ID,%U所有者的用户名,
%w文件创建时间,友好的阅读时间格式。%W文件创建时间,Unix时间戳,

%x最后访问时间,友好的阅读时间格式。%X文件最后访问时间,Unix时间戳,%y文件修改时间,友好的阅读时间格式。

%Y文件修改时间,Unix时间戳。%z最后更改时间,友好的阅读时间格式,%Z文件更改时间,Unix时间戳。

例如命令stat --format="%F" /dev/null仅打印文件类型,--format选项指定多个格式化序列--format="%n,%F"

stat --format="%F" /dev/null
stat --format="%n,%F" /dev/null
stat --printf='Name: %n\nPermissions: %a\n' /etc

结论

stat命令打印指定文件或者文件系统的信息。在Linux,还有一些其他命令可以显示指定文件的信息。

其中ls是最常用的命令,但仅显示stat命令提供的一部分信息。如果您有任何问题或反馈,请随时发表评论。