linux中的stat介绍

核心 
1、什么是stat命令 
2、stat的格式 
3、stat的基本操作 
4、stat的案例

1、什么是stat命令 
stat指令:文件/文件系统的详细信息显示。 
stat命令主要用于显示文件或文件系统的详细信息,该命令的语法格式如下:

-f  不显示文件本身的信息,显示文件所在文件系统的信息 
-Z 打印SElinux安全上下文信息 
-L  显示符号链接 
-c 自定义输出格式,结尾有换行 
-t  简洁模式,只显示摘要信息

2、stat的格式

可选的文件信息输出格式

%F 文件类型 
%g 文件所有者的组ID 
%G 文件所有者的组名 
%h 硬链接的数量(文件本身算1个) 
%i inode号 
%n 文件名 
%N 取消软连接的文件名引用,变成普通字符串 
%o 系统格式化block的大小 
%s 文件大小(单位byte) 
%t 主要设备类型(十六进制) 
%T 次要设备类型(十六进制) 
%u 所有者的用户ID 
%U 所有者的用户名 
%x 最后访问时间 
%X 最后一次访问时间(大纪元秒) 
%y 最后修改时间(内容改变) 
%Y 最后修改时间(内容改变) 
%z 最后改变时间(文件属性,权限所有者等,格式大纪元秒) 
%Z 最后改变时间(文件属性,权限所有者等,格式大纪元秒)

可选的分区信息输出格式

%a 普通用户可用的block数量 
%b 分区的总数据块数量 
%c 文件系统的inode总数 
%d 空闲inode数量 
%f 可用的block数量 
%C 安全上下文 
%i 分区ID(十六进制) 
%l 分区文件名最大长度 
%n 文件名 
%s 块大小(都是系统block的大小) 
%S 基本块大小(都是系统block的大小) 
%t 文件系统类型(格式化的类型,十六进制) 
%T 文件系统类型(格式化的类型,可读形式) 
具体更多的信息和版本其他不同参考可以用man stat 寻求帮忙

注意以上的格式都需要使用-c来指定的 比如想看文件的修改时间,可以用

stat -c "%Y" file
  • 1

3、stat的基本操作 
查看文件的基本信息

[root@slave2 ~]# ll file
-rw-r--r--. 1 root root 0 Oct 25 09:25 file
[root@slave2 ~]# stat file
  File: `file'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 150312      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-10-25 09:25:11.382009229 -0700
Modify: 2016-10-25 09:25:09.057009266 -0700
Change: 2016-10-25 09:25:09.057009266 -0700
[root@slave2 ~]# stat -f file 
  File: "file"
    ID: 6ac2c7ac01538b07 Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 4584814    Free: 2148992    Available: 1916096
Inodes: Total: 1164592    Free: 1023078
[root@slave2 ~]# stat -c "%y" file 
2016-10-25 09:25:09.057009266 -0700
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

4、stat的案例 
有这么一个需求,如果一个文件通过scp传输到本机来处理。 
那么问题来了,这个文件什么时候能传输完成了,我们的处理程序什么时候可以开始处理呢? 
解决这个问题的方法有很多种,比如传输过程是这个名字,传输完成以后rename一下,还有传输完成以后在发一个消息过来告诉已经传输完成了等等。其实大家可以查看在做scp的时候 文件的Modify是变化的。所以文件就简单了,我们只需判断文件的Modify时间和当前系统的是比对就可以知道这个文件是否可以开始处理了,如果Modify远小于系统当前时间就可以处理了 
下面简单的介绍一下逻辑 
第一行命令是得到文件的Modify时间在转换成时间格式,在和1970-01-01 00:00:00时间做差等到一个second时间 
第二行是求出系统的时间和1970-01-01 00:00:00时间做差等到一个second时间 
在2个直接相比较就可以。如果2个值相减等于60我就开始处理等等

[root@slave2 ~]# date +%s -d "`stat -c '%y' file`"
1477412709
[root@slave2 ~]# date +%s
1488723837

猜你喜欢

转载自blog.csdn.net/wangshui898/article/details/80267523
今日推荐