> For the complete documentation index, see [llms.txt](https://linux-in-action.gitbook.io/project/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://linux-in-action.gitbook.io/project/wen-ben-cao-zuo/stat.md).

# stat 命令

`stat` 命令用于显示文件或文件系统的状态信息，`stat` 命令输出的信息比 `ls` 命令输出的信息要详尽得多。

## 命令用法

```
$ stat [OPTION]... FILE...
```

## 常用可选参数

| 参数                  | 说明                           |
| ------------------- | ---------------------------- |
| -L, --dereference   | 跟踪符号连接                       |
| -f, --file-system   | 显示文件系统状态信息而不是文件的状态信息         |
| -c, --format=FORMAT | 指定输出格式 FORMAT, 每个打印信息会跟随输出空行 |
| -t, --terse         | 以简洁的形式打印信息                   |

至于上述提到的 FORMAT，根据要查看文件还是文件系统有不同的参数：

对于文件状态信息：

| 参数 | 说明               |
| -- | ---------------- |
| %A | 以可读形式显示访问权限      |
| %b | 显示分配的块数目         |
| %B | 每一个块的字节大小        |
| %d | 十进制的设备编号         |
| %D | 十六进制的设备编号        |
| %F | 文件类型             |
| %g | 文件拥有者属组 ID       |
| %G | 文件拥有者属组名         |
| %h | 硬链接的数目           |
| %i | inode 编号         |
| %m | 挂载点              |
| %n | 文件名              |
| %N | 如果是符号链接的话，显示引用名  |
| %s | 总字节数             |
| %u | 拥有者的用户 ID        |
| %U | 拥有者的用户名          |
| %w | 文件创建时间，以可读形式显示   |
| %x | 最后访问时间，以可读形式显示   |
| %y | 最后修改时间，以可读形式显示   |
| %z | 状态最近修改时间，以可读形式显示 |

对于文件系统状态信息：

| 参数 | 说明            |
| -- | ------------- |
| %a | 对非超级用户的可用空闲块  |
| %b | 文件系统的总块数      |
| %c | 文件系统的总文件节点数   |
| %d | 文件系统的空闲文件节点数  |
| %f | 文件系统的空闲块数     |
| %l | 文件名的最大长度      |
| %n | 文件名           |
| %s | 用于快速传输的块大小    |
| %S | 用于块计算的块大小     |
| %T | 以可读形式显示文件系统类型 |

## 结果参数解析

### 显示文件状态信息

```bash
$ stat sniffer.py
  File: 'sniffer.py'
  Size: 875             Blocks: 8          IO Block: 512    regular file
Device: ch/12d  Inode: 1407374883601372  Links: 1
Access: (0777/-rwxrwxrwx)  Uid: ( 1000/ kingdee)   Gid: ( 1000/ kingdee)
Access: 2018-06-05 14:49:48.510377700 +0800
Modify: 2018-06-07 17:23:04.547884800 +0800
Change: 2018-06-07 17:23:04.547884800 +0800
 Birth: -
```

各参数说明如下：

* File：显示文件名&#x20;
* Size：显示文件大小&#x20;
* Blocks：文件使用的数据块总数&#x20;
* IO Block：IO块大小&#x20;
* regular file：文件类型（常规文件）&#x20;
* Device：设备编号&#x20;
* Inode：Inode 号&#x20;
* Links：链接数&#x20;
* Access：文件的权限&#x20;
* Gid、Uid：文件所有权的 Gid 和 Uid。

> 注意，这里 Birth 的值为 `-`，是因为在 Linux 上没有创建时间的概念。但如果文件建立后就没有修改过， **修改时间=建立时间** ；如果文件建立后，状态就没有改动过，那么 **状态改动时间=建立时间** ；如果文件建立后，没有被读取过，那么 **访问时间=建立时间**，因为不好判断文件是否被改过、读过、其状态是否变过，所以判断文件的建立时间基本上能为不可能。

### 显示文件系统状态信息

```bash
$ stat -f sniffer.py
  File: "sniffer.py"
    ID: 100000000 Namelen: 255     Type: UNKNOWN (0x53464846)
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 59417343   Free: 30491021   Available: 30491021
Inodes: Total: 999        Free: 1000000
```

其中各参数如下：

* File：文件名
* Namelen：文件名长度限制
* Block size：块大小
* Fundamental block size：基础块大小，用于快速传输
* Block：块信息，包括总大小，空闲大小以及已用大小
* Inodes：系统 inode 信息，包括总数和可用
