目录
- [1 简介](#1 简介)
- [2 说明](#2 说明)
- [3 实例](#3 实例)
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
# 具体每个参数代表什么可以参考说明