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
3、stat的基本操作
-rw-r--r--. 1 root root 0 May 31 23:19 file
[root@localhost ~]# stat file
File: ‘file’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 33575035 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2018-05-31 23:19:17.200979912 +0800
Modify: 2018-05-31 23:19:17.200979912 +0800
Change: 2018-05-31 23:19:17.200979912 +0800
Birth: -
File: ‘file’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 33575035 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2018-05-31 23:19:17.200979912 +0800
Modify: 2018-05-31 23:19:17.200979912 +0800
Change: 2018-05-31 23:19:17.200979912 +0800
Birth: -
[root@localhost ~]# stat -f file
File: "file"
ID: 80300000000 Namelen: 255 Type: xfs
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 4453632 Free: 4182948 Available: 4182948
Inodes: Total: 8912384 Free: 8880901
File: "file"
ID: 80300000000 Namelen: 255 Type: xfs
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 4453632 Free: 4182948 Available: 4182948
Inodes: Total: 8912384 Free: 8880901
[root@localhost ~]# stat -c "%y" file
2018-05-31 23:19:17.200979912 +0800
2018-05-31 23:19:17.200979912 +0800
查看文件的基本信息
有这么一个需求,如果一个文件通过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