stat命令常用方式总结
简介:
stat命令是用来显示文件inode中的内容的。我们平时的业务需求中可能会关注一个文件的更改时间,读写权限之类的信息。stat命令可以帮助我们把这些信息从一个文件的inode中提取并显示出来。
inode介绍:
linux把一个文件存储在磁盘上的时候,会在磁盘上另外找一块地方来存储文件的元数据。存储这些数据的区域就叫做inode。inode里面东西比较多,一般比较关心的是以下几项:
<1> 文件的时间戳,inode中一共有以下3个:
a. access time, 最后一次访问的时间,只是访问,并没有修改。比如cat,head,tail之类的。
b. modify time, 最后一次修改文件内容的时间。
c. change time, 最后一次修改文件属性的时间,比如权限,大小之类的。
<2> 文件的读写权限
<3> 文件的字节数
<4> 文件拥有者的UID和GID
直接使用stat命令,就可以输出inode的大部分信息,比如 stat server:
日常使用
<1> 监控文件状态
有很多业务需要我们实时去监控文件的状态。比如,如果某个文件大小发生了变化,会起一个后台程序把发生变化的部分同步到某个数据库。stat输出信息判断方法:
a. 当我们只是读取文件,并没有改变文件时,只有access time会发生变化,modify time 和 change time 不会变化。
b. 当修改文件内容时, 如果使用vim之类的编辑软件,那么access time, modify time, change time都会发生变化。如果使用 > 或者 >> 修改文件,那么只有modify time 和 change time会发生变化,access time 不会变。
c. 当修改文件属性,比如chmode,chown, 或者做硬链接的时候, change time 会发生变化,而 access time, modify time 不会发生变化。注意,软连接不会修改三者中的任何一个。因为软连接的原理就是重新创建一个新文件,新文件中保存旧文件的文件路径,这个和旧文件的属性完全没有关系。
d. ls -l 中输出的是modify time,
<2> 目录权限的判断
目录在linux系统中也是以文件存在的,所以目录也有inode。目录文件中的内容是一系列目录项。每个目录项由2部分组成,文件名和inode号码。所以可以把目录的读权限和写权限对应到目录文件上理解。如果有读权限,代表可以读取目录文件中的文件名列表。有写权限代表可以在目录中创建,删除,重命名文件。有执行权限代表可以进入此目录。