Linux中的Stat命令

评论 0 浏览 0 2019-11-07

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 -(例如,普通文件、目录、符号链接)。
  • 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 - 文件系统中空闲的inode数量。

默认情况下,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命令所提供的一大块信息。

如果你有任何问题或反馈意见,请随时留言。

最后更新2023-09-16
0 个评论
标签