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
块的大小。
%C
SELinux安全上下文字符串,%d
十进制的设备号,%D
十六进制的设备号,%f
十六进制原始模式,%F
文件类型。
%g
所属组ID,%G
所数组的名称,%h
硬链接数,%i
inode号码,%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
命令提供的一部分信息。如果您有任何问题或反馈,请随时发表评论。