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
# 具体每个参数代表什么可以参考说明
相关推荐
龙鸣丿1 小时前
Linux基础学习笔记
linux·笔记·学习
耶啵奶膘3 小时前
uniapp-是否删除
linux·前端·uni-app
_.Switch3 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
2401_850410833 小时前
文件系统和日志管理
linux·运维·服务器
JokerSZ.4 小时前
【基于LSM的ELF文件安全模块设计】参考
运维·网络·安全
XMYX-04 小时前
使用 SSH 蜜罐提升安全性和记录攻击活动
linux·ssh
芯盾时代4 小时前
数字身份发展趋势前瞻:身份韧性与安全
运维·安全·网络安全·密码学·信息与通信
心灵彼岸-诗和远方5 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
一只哒布刘5 小时前
NFS服务器
运维·服务器
苹果醋36 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx