touch、find和atime、ctime、mtime的用法
一、档案的3种时间
我们在 ls 这个指令的介绍时,有稍微提到每个档案在 linux 底下都会记录三个主要的变动时间:
modification time (mtime):当该档案的『内容数据』变更时,就会更新这个时间! 内容数据指的是档案的内容,而不是档案的属性喔!
status time (ctime):当该档案的『状态 (status)』改变时,就会更新这个时间,举例来说, 像是权限与属性被更改了,都会更新这个时间啊~
access time (atime):当『该档案的内容被取用』时,就会更新这个读取时间 (access)。 举例来说,我们使用 cat 去读取 ~/.bashrc ,就会更新 atime 了。
举例:
[root@linux ~]# ls -l /etc/man.config
-rw-r--r-- 1 root root 4506 Apr 8 19:11 /etc/man.config
[root@linux ~]# ls -l --time=atime /etc/man.config
-rw-r--r-- 1 root root 4506 Jul 19 17:53 /etc/man.config
[root@linux ~]# ls -l --time=ctime /etc/man.config
-rw-r--r-- 1 root root 4506 Jun 25 08:28 /etc/man.config
在预设的情况下, ls 显示出来的是该档案的 mtime.
二、touch指令
[root@linux ~]# touch [-acdmt] 档案
参数:
-a :仅修订 access time;
-c :仅修改时间,而不建立档案;
-d :后面可以接日期,也可以使用 --date="日期或时间"
-m :仅修改 mtime ;
-t :后面可以接时间,格式为[YYMMDDhhmm]
三、 find指令
[root@www ~]# find [PATH] [option] [action]
选项与参数:
1. 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
-mtime n :n 为数字,意义为在 n 天之前的『一天之内』被更改过内容的档案;
-mtime +n :列出在 n 天之前(不含n 天本身)被更改过内容的档案档名;
-mtime -n :列出在 n 天之内(含 n 天本身)被更劢过内容的档案档名。
-newer file :file 为一个存在的档案,列出比 file 还要新的档案档名
范例一:将过去系统上面 24 小时内有更改过内容 (mtime) 的档案列出
[root@www ~]# find / -mtime 0
# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前,
# 有变动过内容的档案都会被列出来!那如果是三天前的 24 小时内?
# find / -mtime 3 有变动过的档案都被列出的意思!
范例二:寻找 /etc 底下的档案,如果档案日期比 /etc/passwd 新就列出
[root@www ~]# find /etc -newer /etc/passwd
# -newer 用在分辨两个档案之间的新旧关系是很有用的!
时间参数真是挺有意思的!我们现在知道 atime, ctime 与 mtime 的意义,如果你想要找出一天内被更改过的文件名, 可以使用上述范例一的作法。但如果我想要找出『4 天内被更动过的档案档名』呢?那可以使用『 find /var -mtime -4 』。那如果是『4 天前的那一天』就用『 find /var -mtime 4 』。有没有加上『+, -』差别很大喔!我们可以用简单的图示来说明一下:
图中最右边为目前的时间,越往左边则代表越早之前的时间轴啦。由图我们可以清楚的知道:
+4 代表大于等于 5 天前的档名:ex> find /var -mtime +4
-4 代表小于等于 4 天内的档案档名:ex> find /var -mtime -4
4 则是代表 4-5 那一天的档案档名:ex> find /var -mtime 4
您阅读这篇文章共花了: