LinuxShell命令stat

2022-02-28 20:27:22 浏览数 (1)

1. 简介

众所周知,Linux 下一切皆文件。当我们想要去查看某个文件的具体信息时,可以使用 stat 命令进行查看。

2. 格式

代码语言:javascript复制
stat filename [filename...]

stat /home 为例,以下为我电脑的输出结果:

  • 中文显示
代码语言:javascript复制
  文件:/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
  • 英文显示
代码语言:javascript复制
  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 表示十六进制结果,即 0x08152069d 表示十进制结果。0x0815 中,0x08 表示设备主编号,一般取决于设备类型,对于磁盘分区等块设备,一般主编号就是 0x080x15 表示设备从编号,这里就是表示此系统上的第 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 取值范围:alwaysneverdefaultalways 表示如果存在缓存信息则使用缓存信息;never 表示不使用缓存信息,并将最新属性信息同步到缓存;default 表示默认方式,取决于文件系统。
  • FORMAT 选项对于文件和文件系统的取值是不同的:
  1. 对于文件,FORMAT 可选选项如下表所示:

【注】文件信息的简洁模式等价于输出格式:%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o

  1. 对于文件系统,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

0 人点赞