每一个文件都有3中时间(称为时间戳timestamps),对这3种时间,很多时候容易混淆不清,因此 这里要说明下:
- Access time(atime):是指取用文件的时间,所谓取用,常见的操作有:使用编辑器查看文件内容,使用cat命令显示文件内容,使用cp命令把该文件(即来源文件)复制成其他文件,或者在这个文件上运用grep sed more less tail head 等命令,凡是读取而不修改文件的操作,均衡改变文件的Access time.
- Modify time(mtime):是指修改文件内容的时间,只要文件内容有改动(如使用转向输出或转向附加的方式)或存盘的操作,就会改变文件的Modify time,平常我们使用ls –l查看文件时,显示的时间就是Modify time
- Change time(ctime):是指文件属性或文件位置改动的时间,如使用chmod,chown,mv指令集使用ln做文件的硬是连接,就会改变文件的Change time.
如果修改文件(使用编辑器存盘或使用) >>转向操作),则Modify time和Change time
会同步更新成写入的时间,但Access time不变。
如果执行touch文件,则3中时间全部改变
使用ln –s做文件的软式连接,会改变文件的取用时间
使用ls –la查看一般文件,不会更改这三种时间,但如果这个文件时符号链接文件,则会改变取用的时间(Access time)
关于时间戳的使用,在系统运维中,时间戳是至关重要的,尤其是配合find命令使用更是大大简化了我们的工作。
Stat是获取关于文件的额外信息,获得两种信息:
1、 文件系统
2、 文件
基本用法:
1)取得文件系统属性
Stat –f /dev/sda1
-f :表示取用的是文件系统(分区)而不是文件
可选用的格式码有:
%a 普通用户可用的块数
%b 文件系统的全部数据块数
%c 文件系统的全部文件节点数
%d 文件系统的可用文件节点数
%f 文件系统的可用节点数
%C SELinux 的安全上下文
%i 十六进制表示的文件系统 ID
%l 文件名的最大长度
%n 文件系统的文件名
%s 块大小(用于更快的传输)
%S 基本块大小(用于块计数)
%t 十六进制表示的文件系统类型
%T 可读格式表示的文件系统类型
2)取得文件属性
Stat –c 格式代码 文件
–c :表示文件;
格式码如下:
%a 八进制表示的访问权限
%A 可读格式表示的访问权限
%b 分配的块数(参见 %B)
%B %b 参数显示的每个块的字节数
%d 十进制表示的设备号
%D 十六进制表示的设备号
%f 十六进制表示的 Raw 模式
%F 文件类型
%g 属主的组 ID
%G 属主的组名
%h 硬连接数
%i Inode 号
%n 文件名
%N 如果是符号链接,显示器所链接的文件名
%o I/O 块大小
%s 全部占用的字节大小
%t 十六进制的主设备号
%T 十六进制的副设备号
%u 属主的用户 ID
%U 属主的用户名
%x 最后访问时间
%X 最后访问时间,自 Epoch 开始的秒数
%y 最后修改时间
%Y 最后修改时间,自 Epoch 开始的秒数
%z 最后改变时间
%Z 最后改变时间,自 Epoch 开始的秒数
例子:
# stat testfile #输入命令
File: `testfile'
Size: 102 Blocks: 8 IO Block: 4096 regular file
Device: 807h/2055d Inode: 1265161 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-08-13 14:07:20.000000000 +0800
Modify: 2014-08-13 14:07:07.000000000 +0800
Change: 2014-08-13 14:07:07.000000000 +0800
查看文件的修改时间:
# stat -c %Y zk-jaas.conf
1482740854
判断文件修改后进行操作:
a=`stat -c %Y filename`
b=`date +%s`
if [ $[ $b - $a ] -gt 180 ];then
command
else
othercommand
fi