「stat(1)」-

显示文件系统或者文件的状态

命令语法格式

stat [OPTION]… FILE…

命令描述

命令stat用于显示文件系统的状态。

如果没有选项OPTION,命令stat会报告有关给定文件FILE的所有信息。但它也可用于报告给定文件所在的文件系统的信息。如果文件是链接,stat还可以提供有关链接指向的文件的信息。

命令支持的选项及含义

-L, –dereference
更改stat对于符号链接的行为。使用此选项,命令stat将作用于每个符号链接指向的文件。没有它,stat直接作用于任何符号链接。

-f, –file-system
报告有关给定文件所在的文件系统的信息,而不是有关文件本身的信息。此选项隐含了-L选项。

-c, –format=format
使用格式format,而不是默认格式。参数format是自动以换行(LF)终止的,因此使用两个或多个文件操作数运行如下命令,则每个操作数会对应一行输出:

# stat –format=%d:%i / /usr

2050:2

2057:2

–printf=format
使用格式format,而不是默认格式。与–format类似,但支持解释反斜杠转义序列,并且不会自动追加结尾换行符(LF),如果你想要使用换行,请在format中使用’\n’。以下是使用–printf打印设备以及/和/usr的inode编号的方法:

# stat –printf=’%d:%i\n’ / /usr

2050:2

2057:2

-t, –terse
以简洁的形式打印信息,适合其他程序解析。

以下命令的输出是相同的, –format还以默认格式标识打印的项目(以更完整的形式)。请注意,格式字符串format将包含另一个带有活动SELinux安全上下文的’%C’:

# stat –format=”%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o” …

# stat –terse …

同样说明了–file-system模式下的简洁输出:

# stat -f –format=”%n %i %l %t %s %S %b %f %a %c %d” …

# stat -f –terse …

如上所述。

选项–format和–printf支持的指令

%a – 八进制访问权限(注意printf标志中的’#’和’0’)
%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以来的秒数,或“0”
%x – 上次访问的时间
%X – 自Epoch以来,最后一次访问时间,秒数。
%y – 上次修改数据的时间
%Y – 自Epoch以来,最后一次数据修改时间,秒数。
%z – 上次状态更改的时间
%Z – 上次状态变化的时间,自Epoch以来的秒数。

格式’%a’打印八进制模式,因此使用printf标志中的’#’和’0’可以控制输出的零填充,这很很有用。例如,要进行填充使得宽度至少为3个,同时明确地将八进制数设为大数,可以使用’%#03a’。

设置%N的引用风格

可以使用环境变量QUOTING_STYLE来设置格式’%N’。如果未设置该环境变量,则默认值为“shell-escape-always”。可用值如下:

‘literal’
    输出字符串原样;这与-N或–literal选项相同。

‘shell’
    如果它们包含Shell元字符或者会导致不明确的输出,则对字符串进行引用。引用适用于像bash这样的POSIX兼容shell,但它并不总是适用于像csh这样的不兼容Shell。

‘shell-always’
    引用Shell的字符串,即使它们通常不需要引用。

‘shell-escape’
    像’Shell’一样,但也使用POSIX提出的$”语法引用不可打印的字符,适用于大多数Shell。

‘shell-escape-always’
    就像’shell-escape’一样,但即使它们通常不需要引用,也会进行字符串引用。

‘c’
    引用C字符串文字的字符串,包括周围的双引号字符;这与-Q或–quote-name选项相同。

‘escape’
    引用C字符串文字的字符串,除了省略周围的双引号字符;这与-b或–escape选项相同。

‘clocale’
    引用C字符串文字的字符串,除了使用适合于语言环境的引号。

‘locale’
    引用C字符串文字的字符串,除了使用适合于语言环境的引号外,并在默认的C语言环境中引用’like this’而不是”like this”。这在许多显示器上看起来更好。

关于主次设备类型

格式’%t’和’%T’在stat(2)结构的st_rdev成员上操作,并且仅为字符和块特殊文件进行了定义。在某些系统或文件类型上,st_rdev可能被用于表示其他数量。

设置精度

‘%W’,’%X’,’%Y’和’%Z’格式接受以句点开头的精度,以此来指定小数点后打印的位数。例如,’%.3X’将访问时间戳输出为毫秒精度。如果给出一个句点但没有精确度,则stat使用9位数,因此’%.X’相当于’%.9X’。当丢弃过多的精度时,时间戳会被截断为负无穷大。

zero pad:

$ stat -c ‘[%015Y]’ /usr

[000001288929712]

space align:

$ stat -c ‘[%15Y]’ /usr

[ 1288929712]

$ stat -c ‘[%-15Y]’ /usr

[1288929712 ]

precision:

$ stat -c ‘[%.3Y]’ /usr

[1288929712.114]

$ stat -c ‘[%.Y]’ /usr

[1288929712.114951834]

如上所示。

格式标志%m的输出

由’%m’打印的挂载点类似于df的输出,除了:

  • 默认情况下,stat不会解析符号链接(除非指定了-L)
  • stat不会在文件系统列表中搜索指定的设备节点,而是直接对它们进行操作
  • stat输出绑定挂载文件的别名,而不是其后备设备的初始挂载点。可以递归调用stat,直到输出没有变化,以获得当前的基本挂载点

文件系统相关(-f)的格式标识

列出文件系统信息(–file-system(-f))时,必须使用一组不同的格式指令:

%a – 非超级用户可用的空闲区块
%b – 文件系统中的总数据块数
%c – 文件系统中的文件节点总数
%d – 文件系统中的空闲文件节点
%f – 文件系统中的空闲块
%i – 十六进制文件系统ID
%l – 文件名的最大长度
%n – 文件名
%s – 块大小(用于更快的传输)
%S – 基本的块大小(用于块计数)
%t – 十六进制的类型
%T – 人类可读的形式的类型

时间戳的格式

时间戳根据TZ环境变量指定的时区规则列出,如果未设置TZ,则按系统默认规则列出。请参阅“GNU C库参考手册”中「使用TZ指定时区」。

退出状态

退出状态为零表示成功,非零值表示失败。

注意事项

由于Shell别名和内置的stat指令,命令行或交互脚本中使用的stat命令可能不属于Coretuils软件包,因此会获得与此处描述的功能不同的功能。通过env(1)来调用stat,即env stat,可以避免来自Shell的干扰。

相关手册

stat(2)

查看在线手册:http://www.gnu.org/software/coreutils/stat

查看info手册:info ‘(coreutils) stat invocation’

参考文献

  • man 1 stat, version GNU coreutils 8.28

更新日志

  • 07/09/2018 创建文章