Linux命令:stat命令

目录

1 简介

stat命令:显示文件或文件系统的状态

2 说明

使用:stat [OPTION]... FILE

常用选项:

  • -L, --dereference:如果一个文件是一个链接文件,显示链接指向的文件的信息。不加-L时,默认显示的是链接文件本身
  • -f, --file-system:显示文件系统的状态而不是文件本身的状态
  • -c --format=FORMAT:按照FORMAT输出内容;输出内容末尾会自动换行
  • -c --printf=FORMAT:和--format类似,不过末尾不输出换行符
  • -t, --terse:以简洁的形式输出,具体的每个FORMAT代表什么参考下面
  • 文件输出内容为:%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o %C
  • 文件系统输出内容为:%n %i %l %t %s %S %b %f %a %c %d,需要在-t后跟选项:--file-system

文件的FORMAT:

  • %a:八进制的权限位,如:644
  • %A:以人类可读的形式显示权限位和文件类型
  • %b:分配的块数
  • %B:分配的大小
  • %C:SELinux安全上下文字符串
  • %d:十进制设备编号
  • %D:十六进制的设备编号
  • %F:文件类型
  • %g:属组的gid
  • %G:属组的组名
  • %h:硬链接数
  • %i:inode号
  • %m:挂载点
  • %n:文件名
  • %N:带引号的文件名,如果是符号链接则解除引用
  • %s:文件大小,单位是bytes
  • %u:属主的uid
  • %U:属主的用户名
  • %w:文件创建时间,人类可读;-未知
  • %W:文件创建时间,自纪元以来的秒数;0表示未知
  • %x:上次访问时间,人类可读
  • %X:上次访问时间,从Epoch到现在的秒数
  • %y:上次修改数据的时间,人类可读
  • %Y:上次修改数据的时间,距离Epoch的秒数
  • %z:上一次状态改变的时间,人类可读
  • %Z:上次状态改变的时间,从Epoch到现在的秒数

文件系统的FORMAT:

  • %a:非超级用户可用的空闲块
  • %b:文件系统中数据块总数
  • %c:文件系统中文件节点总数
  • %d:文件系统中文件节点的空闲数
  • %f:文件系统中空闲的块
  • %i:十六进制文件系统ID
  • %n:文件名
  • %s:块大小(用于更快的传输)
  • %S:基本块大小(用于块计数)
  • %t:十六进制文件系统类型
  • %T:文件系统类型,人类可读的形式

3 实例

-L:显示链接指向的文件的信息

bash 复制代码
root@con01:~# ln -s a1 a2
root@con01:~# ln a1 a3

root@con01:~# ls
a1  a2 a3 haproxy-2.8.5  haproxy-2.8.5.tar.gz  lua-5.4.6.tar.gz  snap  test

# 原文件
root@con01:~# stat a1
  File: a1
  Size: 82              Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 787977      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-02-02 10:35:40.894002209 +0000
Modify: 2024-02-02 10:35:38.045956495 +0000
Change: 2024-02-02 10:35:38.045956495 +0000
 Birth: 2024-02-02 10:35:38.045956495 +0000
# 对于链接文件,默认显示的是链接文件本身 --》 软链接
root@con01:~# stat a2
  File: a2 -> a1
  Size: 2               Blocks: 0          IO Block: 4096   symbolic link
Device: 803h/2051d      Inode: 787982      Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-02-08 07:40:29.763718140 +0000
Modify: 2024-02-08 07:40:28.523696058 +0000
Change: 2024-02-08 07:40:28.523696058 +0000
 Birth: 2024-02-08 07:40:28.523696058 +0000

 # 硬链接  
root@con01:~# stat a3
  File: a3
  Size: 82              Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 787977      Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-02-02 10:35:40.894002209 +0000
Modify: 2024-02-02 10:35:38.045956495 +0000
Change: 2024-02-08 08:48:35.164126097 +0000
 Birth: 2024-02-02 10:35:38.045956495 +0000


# 使用-L选项  
root@con01:~# stat -L a2
  File: a2
  Size: 82              Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 787977      Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-02-02 10:35:40.894002209 +0000
Modify: 2024-02-02 10:35:38.045956495 +0000
Change: 2024-02-08 08:48:35.164126097 +0000
 Birth: 2024-02-02 10:35:38.045956495 +0000
root@con01:~# stat -L a1
  File: a1
  Size: 82              Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 787977      Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-02-02 10:35:40.894002209 +0000
Modify: 2024-02-02 10:35:38.045956495 +0000
Change: 2024-02-08 08:48:35.164126097 +0000
 Birth: 2024-02-02 10:35:38.045956495 +0000

对输出内容的解释:

  • File: a2:文件名
  • Size: 82:文件大小,82字节
  • Blocks: 8:文件系统上为该文件分配了 8 个块。注意,这里的"块"大小可能因文件系统而异,但通常是 4096 字节,可以从IO Block中看出来
  • regular file:文件类型,此处显示是一个普通文件。directory为目录,symbolic link为软连接等
  • Device: 803h/2051d:文件所在的设备的主设备号和次设备号。
  • Inode: 787977:inode号
  • Links: 2:链接数
  • Access: (0644/-rw-r--r--):文件权限
  • Uid: ( 0/ root) :属主的id号和名字
  • Gid: ( 0/ root):属组的id号和名字
  • Access: 2024-02-02 10:35:40.894002209 +0000:上次访问文件的时间,如:打开文件,执行文件
  • Modify: 2024-02-02 10:35:38.045956495 +0000:上次修改文件内容的时间,如:给目录增加内容,修改文件内容
  • Change: 2024-02-08 08:48:35.164126097 +0000:状态改动时间,也就是上次改变文件的元数据(如权限、所有权等)的时间。对于许多文件系统,Change时间与Modify时间有可能相同,但在某些情况下,它们可能会有所不同
  • Birth: 2024-02-02 10:35:38.045956495 +0000:文件的创建时间。但是,请注意,并非所有的文件系统都支持"Birth"时间,并且在某些文件系统或平台上,这个字段可能没有意义或不可用。

扩展:文件系统中的文件数据分为两类,元数据和数据

  • 元数据:用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者、以及文件数据块的分布信息等等。
  • 数据:是指普通文件中的实际数据。
  • stat输出的Modify指的是修改文件数据,而Change指的是修改文件的元数据

-f:显示文件系统信息

bash 复制代码
stat -f a1
  File: "a1"
    ID: ff67a29b7db6b99a Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 9468520    Free: 7428126    Available: 6939102
Inodes: Total: 2424832    Free: 2287587

参数解释:

  • File: "a1":文件名
  • ID: ff67a29b7db6b99a:文件系统的唯一标识符(UUID)
  • Namelen: 文件名
  • Type: ext2/ext3:文件系统类型
  • Block size: 4096:块大小
  • Fundamental block size: 4096:基本块大小
  • Blocks: Total: 9468520 Free: 7428126 Available: 6939102
    • Total: 9468520:文件系统中总共的块数
    • Free: 7428126:文件系统中未使用的块数
    • Available: 6939102:在不影响文件系统性能的情况下,可以分配给新文件的块数。
  • Inodes: Total: 2424832 Free: 2287587
    • Total: 2424832:文件系统中总的inodes数
    • Free: 2287587:文件系统中未使用的 inode 数

-t:以简洁的形式输出

bash 复制代码
stat -t a1
a1 82 8 81a4 0 0 803 787977 1 0 0 1706870140 1706870138 1706870138 1706870138 4096
# 输出内容如下
# --terse: %n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o %C
# --terse --file-system: %n %i %l %t %s %S %b %f %a %c %d
# 具体每个参数代表什么可以参考说明
相关推荐
聆风吟º5 小时前
CANN开源项目深度实践:基于amct-toolkit实现自动化模型量化与精度保障策略
运维·开源·自动化·cann
Coder个人博客6 小时前
Linux6.19-ARM64 mm mmu子模块深入分析
大数据·linux·车载系统·系统架构·系统安全·鸿蒙系统
较劲男子汉8 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
Doro再努力9 小时前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim
wypywyp9 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
风流倜傥唐伯虎9 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Doro再努力9 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
senijusene9 小时前
Linux软件编程:IO编程,标准IO(1)
linux·运维·服务器
不像程序员的程序媛9 小时前
Nginx日志切分
服务器·前端·nginx
忧郁的橙子.9 小时前
02-本地部署Ollama、Python
linux·运维·服务器