首页/系统/Linux 运维命令速查/stat 查看文件详细属性
文件与目录76 条

stat 查看文件详细属性

显示文件大小、inode、权限与三个时间戳(atime/mtime/ctime),排查同步与备份问题必备。

Linux 运维命令速查系统更新于 2026-10-13

stat 是什么

stat 显示文件的详细属性:大小、inode、链接数、权限与三个时间戳。它比目录列表更完整,在排查同步与备份问题时尤其有用——很多工具判断「文件是否变化」依赖的正是这几个时间。理解三个时间戳的含义差别,是用好它的前提。

基本信息

适用平台Linux、Unix;GNU 与 BSD 的参数互不兼容
命令语法stat [选项] 文件...
常用选项-c 自定义输出格式 / -f 显示文件系统信息 / -L 跟随符号链接 / -t 简洁格式
常用占位符文件名、字节数、inode 号、八进制权限、属主属组、三个时间

典型使用场景

  • 排查同步异常:确认文件的修改时间与预期是否一致
  • 查看 inode 与链接数:判断硬链接与同一份数据
  • 确认权限与属主:比目录列表更明确
  • 查看所在文件系统的块大小与 inode 使用情况
  • 脚本取值:用自定义格式输出,便于解析

常用示例

常用示例
stat app.log
stat -c '%n 大小=%s 权限=%a 属主=%U 修改=%y' /etc/passwd
stat -f /                # 查看所在文件系统信息
stat -L /usr/bin/python3 # 跟随符号链接看目标文件
stat -c '%i %h %n' *     # inode 与硬链接数

三个时间戳

时间含义易错点
访问时间最后一次读取内容的时间受挂载选项影响,不可靠
修改时间最后一次改变内容的时间备份与同步的判断依据
状态变更时间最后一次改变元数据的时间不是创建时间
状态变更时间不是创建时间,而是权限、属主、链接等元数据最后一次变化的时间,排查文件篡改时经常被误读。
自定义输出格式在 GNU 与 BSD 上写法不同,配套的文件系统查询选项在两种实现里的含义也不一样,跨平台脚本要分别验证。需要机器可读的结果时优先用自定义格式,不要解析默认的多行文本。

常用格式占位符

占位符含义用途
%n文件名批量输出时标识条目
%s字节数核对文件大小
%a八进制权限位脚本比对权限
%U 与 %G属主与属组名确认归属关系
%iinode 号判断是否同一份数据
%Y %X %Z修改、访问、变更时间的 epoch 秒便于数值比较与排序
脚本里做时间比较时用 %Y 这类 epoch 秒更省事,不必解析人类可读的时间字符串,需要展示时再用 date -d @值 转回来。这些占位符属于 GNU 方言,BSD 与 macOS 的 stat 改用 -f 加格式串,写法完全不同,跨平台脚本要分支处理。

易错点

  • 把状态变更时间当成创建时间,得出错误结论
  • 跨平台脚本混用参数,在另一个系统上得到不同行为
  • 访问时间受挂载选项影响,用它做审计并不可靠
  • 只看文件大小不看块数与 inode,对比占用时口径不一致
  • 不看链接数就判断文件唯一性,硬链接会让同一份数据看起来是两个文件
  • GNU 与 BSD 的 stat 参数含义互换:GNU 的 -f 输出文件系统信息,BSD 的 -f 是格式串,同一段脚本拿到另一平台会得到完全不同的结果

数据来源与参考

  • man 1 stat(GNU coreutils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌