stat
命令包含在 GNU coreutils
软件包中,提供了各种元数据,包括文件大小、inode 位置、访问权限和 SELinux 上下文,以及关于文件和文件系统的创建和修改时间。这是一种方便的方式来收集您通常需要多个不同命令才能获取的信息。
在 Linux 上安装 stat
在 Linux 上,您可能已经安装了 stat
命令,因为它是一个核心实用程序包的一部分,通常默认与 Linux 发行版捆绑在一起。
如果您没有安装 stat
,您可以使用您的软件包管理器安装 coreutils
。
或者,您可以从源代码编译 coreutils。
获取文件的状态
运行 stat
可以提供关于特定文件或目录的易于阅读的输出。
$ stat planets.xml
File: planets.xml
Size: 325 Blocks: 8 IO Block: 4096 regular file
Device: fd03h/64771d Inode: 140217 Links: 1
Access: (0664/-rw-rw-r--) Uid: (1000/tux) Gid: (100/users)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2021-08-17 18:26:57.281330711 +1200
Modify: 2021-08-17 18:26:58.738332799 +1200
Change: 2021-08-17 18:26:58.738332799 +1200
Birth: 2021-08-17 18:26:57.281330711 +1200
它可能易于阅读,但仍然有很多信息。以下是 stat
涵盖的内容
- 文件:文件名
- 大小:文件大小(字节)
- 块:硬盘驱动器上为此文件保留的块数
- IO 块:文件系统块的大小
- 普通文件:文件类型(普通文件、目录、文件系统)
- 设备:文件所在的设备
- Inode:文件所在的 inode 号
- 链接:到文件的链接数
- 访问、UID、GID:文件权限、用户和组所有者
- 上下文:SELinux 上下文
- 访问、修改、更改、创建时间:文件被访问、修改、状态更改和创建的时间戳
简洁输出
对于熟悉输出的人,或者想要使用其他实用程序(如 awk)解析输出的人,可以使用 --terse
(简写为 -t
)选项,该选项格式化输出,不带标题或换行符。
$ stat --terse planets.xml
planets.xml 325 8 81b4 100977 100 fd03 140217 1 0 0 1629181617 1629181618 1629181618 1629181617 4096 unconfined_u:object_r:user_home_t:s0
选择您自己的格式
您可以使用 --printf
选项和类似于 printf 的语法,为您自己的输出定义格式。stat
报告的每个属性都有一个格式序列(%C
代表 SELinux 上下文,%n
代表文件名,等等),因此您可以选择您想在报告中看到的内容。
$ stat --printf="%n\n%C\n" planets.xml
planets.xml
unconfined_u:object_r:user_home_t:s0
$ $ stat --printf="Name: %n\nModified: %y\n" planets.xml
Name: planets.xml
Modified: 2021-08-17 18:26:58.738332799 +1200
以下是一些常见的格式序列
- %a 访问权限
- %F 文件类型
- %n 文件名
- %U 用户名
- %u 用户 ID
- %g 组 ID
- %w 创建时间
- %y 修改时间
完整的格式序列列表可在 stat
手册页和 coreutils
信息页中找到。
文件信息
如果您曾经尝试解析 ls -l
的输出,那么您会欣赏 stat
命令的灵活性。您并不总是需要 stat
提供的所有默认信息,但是当您确实需要其中一些或全部信息时,该命令是无价的。无论您以默认格式读取其输出,还是创建自己的查询,stat
命令都使您可以轻松访问有关您的数据的数据。
2 条评论