Linux 中的 stat 命令

stat  是一个命令行实用程序,用于显示有关给定文件或文件系统的详细信息。

本文介绍 stat 命令的各种用法。

使用 stat 命令

stat 命令的语法如下:

stat [OPTION]... FILE...

stat 接受一个或多个输入文件名称 FILE ,并包含许多控制命令行为和输出的选项。

让我们看下面的例子:

stat file.txt

输出将如下所示:

  File: file.txt
  Size: 4030      	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 13633379    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   linuxize)   Gid: ( 1000/   linuxize)
Access: 2019-11-06 09:52:17.991979701 +0100
Modify: 2019-11-06 09:52:17.971979713 +0100
Change: 2019-11-06 09:52:17.971979713 +0100
 Birth: -

不带任何选项调用时,将 stat 显示以下文件信息:

  • File - 文件名。
  • Size - 文件的大小(以字节为单位)。
  • Blocks - 文件占用的已分配块数。
  • IO Block - 每个块的大小(以字节为单位)。
  • File type -( 例如 regular file, directory, symbolic link …)
  • Device - 设备编号(十六进制和十进制)。
  • Inode - 索引节点编号。
  • Links - 硬链接数。
  • Access - 数字和符号方法中的文件权限
  • Uid - 所有者的用户 ID 和名称。
  • Gid - 群组 ID 和所有者名称。
  • Context - SELinux 安全上下文。
  • Access - 上次访问文件的时间。
  • Modify - 上次修改文件内容的时间。
  • Change - 上次更改文件属性或内容的时间。
  • Birth - 文件创建时间 (Linux 不支持)。

显示有关文件系统的信息

要获取有关给定文件所在的文件系统的信息,而不是有关文件本身的信息,请使用 -f((--file-system) 选项:

stat -f file.txt

命令的输出将如下所示:

  File: "package.json"
    ID: 8eb53097b4494d20 Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 61271111   Free: 25395668   Available: 22265851
Inodes: Total: 15630336   Free: 13979610

stat 使用 -f 选项调用时,它将显示以下信息:

  • File - 文件名。
  • ID-文件系统 ID( 十六进制)。
  • Namelen - 文件名的最大长度。
  • Fundamental block size - 文件系统上每个块的大小。
  • Blocks:
    • Total - 文件系统中的总块数。
    • Free - 文件系统中可用块的数量。
    • Available - 非 root 用户可用的可用块数。
  • Inodes:
    • Total - 文件系统中的总索引节点数。
    • Free - 文件系统中空闲索引节点的数量。

取消引用(跟随)符号链接

默认情况下, stat 不遵循符号链接。如果在符号链接上运行命令,则输出将包含有关符号链接的信息,而不是其指向的文件:

stat /etc/resolv.conf
  File: /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
  Size: 39        	Blocks: 0          IO Block: 4096   symbolic link
Device: 801h/2049d	Inode: 8126659     Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-11-06 21:12:26.875956073 +0100
Modify: 2018-07-24 11:11:48.128794519 +0200
Change: 2018-07-24 11:11:48.128794519 +0200
 Birth: -

要显示该符号链接指向的文件的信息,请使用 -L , (--dereference) 选项:

stat -L /etc/resolv.conf
  File: /etc/resolv.conf
  Size: 715       	Blocks: 8          IO Block: 4096   regular file
Device: 17h/23d	Inode: 989         Links: 1
Access: (0644/-rw-r--r--)  Uid: (  101/systemd-resolve)   Gid: (  103/systemd-resolve)
Access: 2019-11-06 20:35:25.603689619 +0100
Modify: 2019-11-06 20:35:25.555689733 +0100
Change: 2019-11-06 20:35:25.555689733 +0100
 Birth: -

自定义输出

stat 命令有两个选项,可让您根据需要自定义输出: -c (--format= "format") 和 --printf= "format"

这两个选项之间的区别在于,当两个或多个文件时, --format 会在输出之后自动添加换行符。该 --printf 解释反斜杠。

对文件和文件系统来说,有许多格式指令可以与 --format--printf 一起使用。

例如,仅查看文件类型,可以使用:

stat --format="%F" /dev/null
character special file

您可以组合任意数量的格式指令,并可以选择在它们之间使用自定义分隔符。分隔符可以是单个字符或字符串:

stat --format="%n,%F" /dev/null
/dev/null,character special file

要解释特殊字符,例如换行符或制表符,请使用以下 --printf 选项:

stat --printf='Name: %n\nPermissions: %a\n' /etc

\n  打印新行:

Name: /etc
Permissions: 755

stat 也可以显示简洁形式的信息。此格式对于其他实用程序的解析很有用。

使用 -t(--terse) 选项调用命令以以简洁形式打印输出:

stat -t /etc
/etc 12288 24 41ed 0 0 801 8126465 147 0 0 1573068933 1573068927 1573068927 0 4096

有关文件和文件系统的所有格式指令的完整列表,请在终端中输入 man statstat --help进行查看 。

结论

stat 命令显示有关给定文件和文件系统的信息。

在 Linux 中,还有其他几个命令可以显示有关给定文件的信息,其中 ls 最常用的是一个命令,但它仅显示该 stat 命令提供的信息中的一部分。