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

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

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

你可能感兴趣的:(linux,stat,linux)