0%

Linux的stat命令

Linux 的 stat 命令

Linux stat 命令用于显示 inode 内容。

话说这个inode是个什么东西呢?对于存储在硬盘上的文件,特别是Linux的概念就是,一切皆文件。其最小的存储单元为512字节即一个扇区sector;在读取文件的时候,为了提高效率,是按照4KB的块block来读取的,所以这样看来每次读取了8个sector。而对于每个文件为了索引,其元数据的各种信息就是stat获取的,用于描述创建者、文件的各种日期、大小等等等等信息,这个元数据的id就可以认为是inode了,以上。

官方的定义为:

stat - display file or file system status

用法为:

1
$ stat [options] filename/directory

其中的参数为:

  • -L, --dereference : 不显示链接的原始文件

  • -f, --file-system :显示文件系统状态

  • --printf=FORMAT : 与C语言的类似,不过看着转义符更多一些

  • -t, --terse:超级简介的模式

最简单的使用

最简单的其实也是最有用的,直接跟上文件或者目录,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ stat text.txt 
File: ‘text.txt’
Size: 51 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 1610934260 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2012-09-11 21:24:49.660510438 +0800
Modify: 2012-09-09 17:31:54.518005296 +0800
Change: 2012-09-09 17:33:09.670327180 +0800
Birth: -

$ stat dir
File: ‘dir
Size: 51 Blocks: 0 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1610934255 Links: 2
Access: (0775/drwxrwxr-x) Uid: ( 1000/ user) Gid: ( 1000/ user)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2012-09-13 16:44:56.802331727 +0800
Modify: 2012-09-13 16:44:55.624342864 +0800
Change: 2012-09-13 16:44:55.624342864 +0800
Birth: -

各个段的解释为:

  • File:文件或文件夹名
  • Size:文件大小
  • Blocks:文件使用的数据块总数
  • IO Block:IO块大小
  • regular file:文件类型(常规文件)或者directory文件夹
  • Device:设备的编号
  • Inode:Inode号
  • Links:链接数
  • Access:文件的权限
  • Gid, Uid:文件所有者的Gid和Uid
  • Access:文件的访问时间
  • Modify:文件的修改时间
  • Change:文件的状态时间

显示文件系统

参数-f将显示文件系统信息,可以看到Type:xfs这个信息。

1
2
3
4
5
6
7
$ stat -f text.txt 
File: "text.txt"
ID: fd0000000000 Namelen: 255 Type: xfs
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 244020823 Free: 182831648 Available: 182831648
Inodes: Total: 488280064 Free: 487587798

关于printf的那些格式化字符串

--printf=FORMAT选项可以跟的FORMAT有很多,较常用为:

格式化字符串 含义
%A 易读的访问状态
%B 每个块的大小(单位为字节)
%d 十进制的设备号
%F 文件类型
%G 所有者的组名
%i inode数字
%m 挂载点
%n 文件名
%s 总大小(单位:字节)
%U 所有者的用户名
%w 易读的文件生成时间(大写的为Epoch)
%x 易读的文件访问时间(大写的为Epoch)
%y 易读的文件修改时间(大写的为Epoch)
%z 易读的文件上一次修改状态时间(大写的为Epoch)

炫技 : 一个类似ls -l的用法

下面的这个命令可以实现类似ls -l的用法,可以扩展更多,也可以自定义使用,比如alias等等。

1
2
$ stat --print="%A. %U %G %s %x %n \n" text.txt 
-rw-rw-r--. user user 51 2012-09-11 21:24:49.660510438 +0800 text.txt
处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道