显示文件系统或者文件的状态
命令语法格式
stat [OPTION]… FILE…
命令描述
命令stat用于显示文件系统的状态。
如果没有选项OPTION,命令stat会报告有关给定文件FILE的所有信息。但它也可用于报告给定文件所在的文件系统的信息。如果文件是链接,stat还可以提供有关链接指向的文件的信息。
命令支持的选项及含义
-L, –dereference
更改stat对于符号链接的行为。使用此选项,命令stat将作用于每个符号链接指向的文件。没有它,stat直接作用于任何符号链接。
-f, –file-system
报告有关给定文件所在的文件系统的信息,而不是有关文件本身的信息。此选项隐含了-L选项。
-c, –format=format
使用格式format,而不是默认格式。参数format是自动以换行(LF)终止的,因此使用两个或多个文件操作数运行如下命令,则每个操作数会对应一行输出:
2050:2
2057:2
–printf=format
使用格式format,而不是默认格式。与–format类似,但支持解释反斜杠转义序列,并且不会自动追加结尾换行符(LF),如果你想要使用换行,请在format中使用’\n’。以下是使用–printf打印设备以及/和/usr的inode编号的方法:
2050:2
2057:2
-t, –terse
以简洁的形式打印信息,适合其他程序解析。
以下命令的输出是相同的, –format还以默认格式标识打印的项目(以更完整的形式)。请注意,格式字符串format将包含另一个带有活动SELinux安全上下文的’%C’:
# stat –terse …
同样说明了–file-system模式下的简洁输出:
# 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’。当丢弃过多的精度时,时间戳会被截断为负无穷大。
$ 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 创建文章