使用 stat 命令在 Linux 上检查文件状态

您需要的关于任何文件或文件系统的所有信息只需一个 Linux 命令即可获得。
48 位读者喜欢这篇文章。
Why the operating system matters even more in 2017

Internet Archive Book Images。由 Opensource.com 修改。CC BY-SA 4.0

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 命令都使您可以轻松访问有关您的数据的数据。

接下来阅读
标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,并且经常同时从事这两个行业。

2 条评论

我发现 ls -lh 最常给我我需要的东西:权限、所有者/组、人类可读的大小和上次保存日期。

很高兴看到上下文被显示出来,有时我认为 SELinux 兼容性被忽视了。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可发布。
© . All rights reserved.