1. 简介
众所周知,Linux 下一切皆文件。当我们想要去查看某个文件的具体信息时,可以使用 stat
命令进行查看。
2. 格式
代码语言:javascript复制stat filename [filename...]
以 stat /home
为例,以下为我电脑的输出结果:
- 中文显示
文件:/home
大小:4096 块:8 IO 块:4096 目录
设备:815h/2069d Inode:15204353 硬链接:5
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2021-06-12 15:24:19.791590697 0800
最近更改:2021-01-14 13:22:37.236297689 0800
最近改动:2021-01-14 13:22:37.236297689 0800
创建时间:2020-04-12 02:04:12.604134012 0800
- 英文显示
File: /home
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 815h/2069d Inode: 15204353 Links: 5
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-06-12 15:24:19.791590697 0800
Modify: 2021-01-14 13:22:37.236297689 0800
Change: 2021-01-14 13:22:37.236297689 0800
Birth: 2020-04-12 02:04:12.604134012 0800
可以看到,stat
命令能够查询到文件的信息有:
字段 | 说明 |
---|---|
File | 文件名 |
Size | 文件大小 |
Blocks | 文件占用的物理磁盘块数目 |
IO Block | 文件系统进行 IO 操作的块大小 |
directory/regular file/symbolic link | 文件类型 |
Device | 设备编号 |
Inode | 文件 Inode 号 |
Links | 当前文件的硬链接数 |
Access | 文件的权限 |
Uid | 文件的 uid,表示文件的所有者 |
Gid | 文件的 gid,表示文件的所有组 |
Access | 文件的最近访问时间 |
Modify | 文件的最近更改时间 |
Change | 文件的最近改动时间 |
Birth | 文件的创建时间 |
2.1 块信息
- Blocks 表示的是文件实际占用的物理磁盘块个数,磁盘块大小固定为 512 字节。
- IO Block 表示文件系统实际进行 IO 操作时,每次读写的块大小。因此 IO Block 因不同的文件系统而异,本人电脑为 ext4,故 IO Block 固定为 4096。
2.2 设备编号
- 文件的设备编号占两个字节,第一个字节为设备主编号,第二个字节为设备从编号。
以上述例子为例,815h
表示十六进制结果,即 0x0815
;2069d
表示十进制结果。0x0815
中,0x08
表示设备主编号,一般取决于设备类型,对于磁盘分区等块设备,一般主编号就是 0x08
;0x15
表示设备从编号,这里就是表示此系统上的第 0x15
个块设备。可以查看 ls -l /dev/block
,按照字母顺序排序,其中第 0x15
个设备便是本系统的磁盘分区。
【注】/dev
目录下除了包含块设备,也还有其他类型的设备,比如 CPU 设备等。
2.3 硬链接数
文件的硬链接数表示访问到该文件的方式数目,普通文件的硬链接数一般为 1,目录文件的硬链接数至少为 2。
- 因为目录下默认包含
.
目录,通过cd .
可以访问到该目录,因此至少为 2。 - 每增加一个子目录,父目录的硬链接数就加 1,因为子目录下可以通过
cd ..
访问父目录。
2.4 文件时间信息
- Access Time:简写为 atime,表示文件的最后访问时间。当文件被访问时,该时间被更新。
- Modify Time:简写为 mtime,表示文件的最后修改时间。当文件的数据内容被修改时,该时间被更新。
- Change Time:简写为 ctime,表示文件的最后更改时间。当文件的属性状态被修改时,该时间被更新。文件的属性状态即其 Inode 中的属性字段,当文件所有者、访问权限、文件内容发生改变时,文件的属性状态都会被更新。
- Birth Time:简写为 btime,表示文件的创建时间。一旦文件创建,该时间就固定不变。
3. 选项
选项 | 说明 |
---|---|
-L、--dereference | 显示符号链接所指向文件的信息 |
-f、--file-system | 展示文件系统的状态信息而不是文件的状态信息 |
-c、--format=FORMAT | 指定格式输出文件的某些状态信息 |
-t、--terse | 以简洁形式输出文件的状态信息 |
--cached=MODE | 使用属性信息缓存的方式 |
--printf=FORMAT | 类似 --format 选项,结尾无换行符,可以使用转义字符实现换行等操作 |
MODE
取值范围:always
、never
、default
。always
表示如果存在缓存信息则使用缓存信息;never
表示不使用缓存信息,并将最新属性信息同步到缓存;default
表示默认方式,取决于文件系统。FORMAT
选项对于文件和文件系统的取值是不同的:
- 对于文件,
FORMAT
可选选项如下表所示:
【注】文件信息的简洁模式等价于输出格式:%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o
。
- 对于文件系统,
FORMAT
可选选项如下表所示:
【注】文件系统信息的简洁模式等价于输出格式:%n %i %l %t %s %S %b %f %a %c %d
。
附录
参考资料:
- What is “raw mode in hex” from stat output?
- The stat command
- stat: Report file or file system status