Linux stat命令详解与教程
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命令提供的一部分信息。如果您有任何问题或反馈,请随时发表评论。