ctime, atime与mtime释疑

每个档案都有属性及内容。除了档案内容很重要外,时间标记也非常重要--系统管理员可以藉由时间标记进行备份、例行性检查;使用者可以从时间标记找出重要的档案,硬碟的I/O也依靠时间标记(time flag)来进行处理。

UNIX系统将时间标记分成三种:

  1. atime( A ccess time):档案上次被读取的时间。
  2. ctime(status C hange time):档案的属性或内容上次被修改的时间。
  3. mtime( M odified time):档案的内容上次被修改的时间。

 

我们可以用一个很简单的script来印证这些东西。

 

#!/bin/bash
echo "ctime: $(ls -lc newFile | awk '{print $6, $7, $8}')"
echo "atime: $(ls -lu newFile | awk '{print $6, $7, $8}')"
echo "mtime: $(ls -l newFile | awk '{print $6, $7, $8}')"

 

exit 0;


姑且把他命名为showTime.sh

1. 假设我们建立一个新档:

touch newFile
执行showTime.sh,你会发现三种时间是相同的:
ctime: Nov 17 23:14
atime: Nov 17 23:14
mtime: Nov 17 23:14
2. 隔一分钟后,写入一些东西到档案里面:
echo "1st modified" > newFile
结果发现:
ctime: Nov 17 23:15
atime: Nov 17 23:14
mtime: Nov 17 23:15
3. 再隔一分钟后,读取这个档案但不更动内容:
cat newFile
结果发现:
ctime: Nov 17 23:15
atime: Nov 17 23:16
mtime: Nov 17 23:15
4. 在隔一分钟,仅修改属性:
chmod g+wx newFile
结果发现:
ctime: Nov 17 23:17
atime: Nov 17 23:16
mtime: Nov 17 23:15

 

从这个lab里我们可以得到以下结论:

  • ls -l所列出的长资讯,该时间是mtime。
  • 如果利用touch某档案,则三种时间属性均被更新。
  • 如果你修改了某一档案内容,则ctime与mtime会更新。
  • 如果某档案仅被读取或另存新档,则只有atime会被改变。
  • 如果你只改变档案属性(如权限、档名、所有人或是suid、acl、chattr等),则只有ctime被更新。
  • atime相较之下是最常变动的时间标记,可以将之关闭以增进I/O,特别是多人多工,小档案多以及laptop环境。filesystem设定里可以增加noatime属性,或是chattr +A固定住atime(chattr仅适用于ext2/3/4系列的filesystem)
posted @ 2016-02-21 16:58  YiYezc  阅读(963)  评论(0编辑  收藏  举报