使用stat命令在shell中读取文件状态(修改时间,大小,权限模式,磁盘占用)

通常我们通过ls 命令显示文件信息,查看目录信息时,再加上参数 -d 。这没有错,看总觉得不方便,尤其是不能显示文件修改时间,访问时间什么的,时间一列显示有时并不方便阅读。这种情况下,你需要的是stat命令,尤其适合查阅单个文件信息。

尤其是,在编写shell脚本时,stat绝对比从ls里面截取方便得多,而且更高的自由度!

stat命令简单示例

列表出文件的一系列摘要信息:

[root@localhost ~]# stat install.log
  File: "install.log"
  Size: 7730            Blocks: 16         IO Block: 4096   普通文件
Device: fd00h/64768d    Inode: 1048578     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-10-20 10:21:05.473712000 +0800
Modify: 2015-10-20 10:23:50.061712001 +0800
Change: 2015-10-20 10:23:56.028712002 +0800
[root@localhost ~]#

很自然,它不包含任何文件内容,事实上该命令读不出文件内容,它也不会去读。

查看指定目录的stat

[root@localhost ~]# stat .
  File: "."
  Size: 4096            Blocks: 8          IO Block: 4096   目录
Device: fd00h/64768d    Inode: 1048577     Links: 5
Access: (0550/dr-xr-x---)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-10-27 13:35:30.473108443 +0800
Modify: 2015-10-21 18:54:30.420109149 +0800
Change: 2015-10-21 18:54:30.420109149 +0800
[root@localhost ~]#

玩点高级一点的

上次访问时间:

[root@localhost ~]# stat -c %x install.log
2015-10-20 10:21:05.473712000 +0800

文件大小

[root@localhost ~]# stat -c %s install.log
7730

同时并格式化输出多个参数

$ stat --printf="%n %X %s" plan.jpg
plan.jpg 1445912536 197196

更多使用方法,参考联机帮助或手册

联机帮助:

[root@localhost ~]# stat --help
用法:stat [选项]... 文件...
Display file or file system status.

-L, --dereference     follow links
-Z, --context         print the SELinux security context
-f, --file-system     display file system status instead of file status
-c --format=格式      使用指定输出格式代替默认值,每用一次指定格式换一新行
--printf=格式     类似 --format,但是会解释反斜杠转义符,不使用换行作
输出结尾。如果您仍希望使用换行,可以在格式中
加入"\n"
-t, --terse           使用简洁格式输出
--help            显示此帮助信息并退出
--version         显示版本信息并退出

有效的文件格式序列(不使用 --file-system):

%a    八进制权限
%A   用可读性较好的方式输出权限
%b   计算已分配块数(参见%B)
%B   以字节为单位输出%b 所报告的每个块的大小
%C   SELinux 安全环境字符串
%d    十进制设备编号
%D    十六进制设备编号
%f    十六进制原始模式
%F    文件类型
%g    文件的属组ID
%G    文件的属组组名
%h    硬链接数量
%i    Inode 编号
%n    文件名
%N    如果对象是一个符号链接,显示引用到的其它文件名
%o    I/O 块大小
%s    总计大小,以字节为单位
%t    十六进制主设备类型
%T    十六进制子设备类型
%u    文件的属主ID
%U    文件的属主用户名
%x    上次访问时间
%X    从UNIX 元年起计的上次访问时间
%y    上次修改时间
%Y    从UNIX 元年起计的上次修改时间
%z    上次更改时间
%Z    从UNIX 元年起计的上次更改时间

有效的文件系统格式序列:

%a    非超级用户可用的剩余块数
%b    文件系统的总数据块数
%c    文件系统中文件节点总数
%d    文件系统中空闲文件节点数
%f    文件系统中空闲块数
%C    SELinux 安全环境字符串
%i    十六进制文件系统ID
%I    允许的文件名最大长度
%n    文件名
%s    块大小(用于快速传输)
%S    基本块大小(用于块计数)
%t    十六进制类型描述
%T    可读性较好的类型描述

注意:您的shell 内含自己的stat 程序版本,它会覆盖这里所提及的相应
版本。请查阅您的shell 文档获知它所支持的选项。

请向bug-coreutils@gnu.org 报告stat 的错误
GNU coreutils 项目主页:<http://www.gnu.org/software/coreutils/>
GNU 软件一般性帮助:<http://www.gnu.org/gethelp/>
请向<http://translationproject.org/team/zh_CN.html> 报告stat 的翻译错误
要获取完整文档,请运行:info coreutils 'stat invocation'