简介
stat 命令源于英文单词 "statistics",意为统计,主要用于显示文件或文件系统的状态信息。它能提供比 ls 命令更详细的信息,如文件的大小、inode号、权限、所有者、组、最后访问时间、最后修改时间等。stat 命令通过读取文件系统中的元数据来获取这些信息,这对于系统管理和脚本编写非常有用。
使用方式
bash
stat [选项] 文件...
常用选项
- -L, --dereference:跟随符号链接,显示符号链接所指向的目标文件的状态信息,而不是符号链接本身的信息。
- -f, --file-system:显示文件系统的状态信息,而不是文件或目录的信息。
- -c --format=FORMAT:指定输出格式,允许用户按照特定的方式来格式化输出信息。
- --printf=FORMAT:与 --format 类似,其提供更复杂与高级的格式控制。包括处理字符串中的反斜杠转义序列如换行符 \n,并且其不会在输出的末尾自动添加换行符。
- -t, --terse:以简洁的方式输出信息。
- --help:显示帮助信息。
- --verison:显示版本信息。
文件支持的 FORMAT
- %a:以八进制显示文件的访问权限。
- %A:以人类可读的形式显示文件的访问权限。
- %b:显示为文件分配的块的数量。可以与 %B 一起查看每个块的字节大小。
- %B:显示 %b 报告的每个块的大小(字节)。
- %C:显示 SELinux 安全上下文字符串。
- %d:以十进制显示设备号。
- %D:以十六进制显示设备号。
- %f:以十六进制显示文件的原始模式。
- %F:显示文件类型。
- %g:显示文件所有者的组ID。
- %G:显示文件所有者的组名。
- %h:显示硬链接数量。
- %i:显示 inode 号。
- %m:显示挂载点。
- %n:显示文件名。
- %N:显示引用的文件名,如果是符号链接则解引用。
- %o:显示最佳 I/O 传输大小。
- %s:显示总大小(字节)。
- %t:对于字符/块设备以十六进制显示主要设备类型。
- %T:对于字符/块设备以十六进制显示次要设备类型。
- %u:显示文件所有者的用户ID。
- %U:显示文件所有者的用户名。
- %w:以人类可读形式显示文件创建的时间。
- %W:以自 Epoch 以来(纪元时间 1970 年 1 月 1 日)的秒数显示文件创建时间
- %x:显示最后访问时间(人类可读)。
- %X:显示最后访问时间(自 Epoch 以来的秒数)。
- %y:显示最后修改时间(人类可读)。
- %Y:显示最后修改时间(自 Epoch 以来的秒数)
- %z:显示最后状态更改的时间(人类可读)。
- %Z:显示最后状态更改的时间(自 Epoch 以来的秒数)。
文件系统支持的 FORMAT
- %a:显示非超级用户可用的空闲块数。
- %b:显示文件系统中的总数据块数。
- %c:显示文件系统中的总文件节点数。
- %d:显示文件系统中的空闲文件节点数。
- %f:显示文件系统中的空闲块数。
- %i:以十六进制显示文件系统ID。
- %l(L的小写):显示文件名的最大长度限制。
- %n:显示文件系统的名称。
- %s:显示块大小(以便于更快的数据传输)。
- %S:显示基本块大小(用于块计数)。
- %t:以十六进制显示文件系统类型。
- %T:以人类可读形式显示文件系统类型。
参考示例
1. 显示文件状态
bash
stat 文件名
直接使用 stat + 文件名可以显示指定文件的所有可用状态信息,包括大小、块数、inode 编号等。
bash
jay@jaylinuxlenovo:~/test$ stat test.c
File: test.c
Size: 396 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 3407893 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ jay) Gid: ( 1000/ jay)
Access: 2024-03-08 14:51:08.980449314 +0800
Modify: 2024-03-08 14:51:08.916453851 +0800
Change: 2024-03-08 14:51:08.916453851 +0800
Birth: -
2. 使用自定义格式显示信息
bash
stat -c '%n: 大小是 %s 字节,权限是 %a' 文件名
使用 -c 选项可以指定输出的格式,类似 printf 的格式化输出:
bash
jay@jaylinuxlenovo:~/test$ stat -c '%n: 大小是 %s 字节,权限是 %a' test.c
test.c: 大小是 396 字节,权限是 664
3. 查看文件系统状态
bash
stat -f 文件系统或挂载点
使用 -f 选项可以显示指定文件系统或挂载点的状态信息,如可用空间,总空间等。
bash
jay@jaylinuxlenovo:~/test$ stat -f .
File: "."
ID: b035d513165c67f0 Namelen: 255 Type: ext2/ext3
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 57022059 Free: 45152025 Available: 42237261
Inodes: Total: 14557184 Free: 13627524
注意事项
- 使用 -c 或 --format 选项自定义输出格式时,需要熟悉可用的格式序列。
- 当使用了 --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。
- 当处理符号链接文件时,如果需要查看链接指向的文件信息,不要忘记使用 -L 选项。
- 在脚本中使用 stat 时,考虑输出格式的兼容性,特别是在不同系统间迁移脚本时。