Mtime使用误区解析

作者简介:杨春龙,现就职于北京海天起点,持有Oracle 10g OCP 、Oracle 11g OCP、Oracle 11g OCM证书。7年移动、联通、电信三大运营商现场运维经验。擅长Oralce数据库性能优化、故障处理。

 

作为一名运维人员,维护目录使用是日常工作之一,经常需要清理一些保留时间较长的文件,如 .xml、.trc、.trm、.log等。直接把这些过期文件rm掉肯定不会被允许;有一些文件可能 保存了几年,甚至是从建库以来就没有清理过,因此,把所有文件名查出来再逐一删除显然不现实。利用find –mtime +n可以高效的过滤出想要的结果集。相信大多数人对Mtime +n 的使用都存在一个误区,就是想查找几天前的文件就把+n指定成+几,如: 想查找5天前的文件,则只需要将mtime +5 即可找到5天前的文件。接下来我们用实验来说明一下,mtime +n 是不是真的是N天。

首先:用Date 查看当前的系统时间为5月12日 9:35:57

接下来,先执行下面的命令 ,让文件保留在一定的时间内,这里是mtime -50

ls -ltr|more 按时间排序查看文件的详细信息,发现当前的目录下最早的trc文件,只有4月12日 03:19 ,那么mtime -50 也就没有统计结果了。。。。

由于文件生成日期是4月12日 03:19分,今天是5月12日 9:35:57 时长为30天零6小时17分,将mtime -50 修改成mtime -30 看看是否有文件被删除

结果显示,mtime -30 并没有将30周天之前的文件删除 ,再试一下mtime -29

在修改Mtime -29后后,删除了Apr 12 09:48之前的文件,那么问题来了,这个时间点距离当前时间是29周天,还是30周天?

再试一下mtime +28

执行命令find ./ -mtime +28 |grep “\.trc”|xargs rm -f

从上述的命令可以看到 ,文件保存时间点来到了Apr 13 09:48

做一下推演,看一下,mtime +28到底是28天还是29天。

Date 4-13 4-14 4-15 4-16 4-17 4-18 4-19 4-20 4-21 4-22
Mtime +28 +27 +26 +25 +24 +23 +22 +21 +20 +19
Date 4-23 4-24 4-25 4-26 4-27 4-28 4-29 4-30 5-1 5-2
Mtime +18 +17 +16 +15 +14 +13 +12 +11 +10 +9
Date 5-3 5-4 5-5 5-6 5-7 5-8 5-9 5-10 5-11 5-12
Mtime +8 +7 +6 +5 +4 +3 +2 +1 +0 -1

实验中可以看到,Mtime +28,最终文件保留日期停留在了4月13日9:38那么从4月13日往回推算会发现,推到当前日期时,成了Mtime -1,距当前时间1天之外的,则成了mtime +0,2天之前的时间为mtime +1,…… 29天之前的时间为mtime +28 。反观我们做mtime -30时候的具体时间,实际上是查找的4月11日的文件,所以当我们做mtime -30进行搜索的时候,不能删除4月12日 3点18分的文件 。至此可以断定关于”删除几天前的文件就把n换成几”这种说法是错误的。

关于Mtime正确解释如下:

Man find会发现下面这段话:

-mtime n

True if the file modification time subtracted from the

initialization time is n-1 to n multiples of 24 h. The

initialization time shall be a time between the invocation of

the find utility and the first access by that invocation of

the find utility to any file specified in its path operands.

初始化时间是n-1~!是24小时的整数倍~!也就是从当前的精确时间算,24小时为一个单位 ,而非按日期算。

总结:

mtime 用法可以理解成Mtime +(n-1),这样就可以做到想查找几天前的文件就把n指定为几。

未经允许不得转载:Oracle一体机用户组 » Mtime使用误区解析

相关推荐