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@localhost ~]# ll file
-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: -

[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

[root@localhost ~]# stat -c "%y" file
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

猜你喜欢

转载自blog.csdn.net/Wxq960906/article/details/80531595