ctime, atime与mtime释疑
每个档案都有属性及内容。除了档案内容很重要外,时间标记也非常重要--系统管理员可以藉由时间标记进行备份、例行性检查;使用者可以从时间标记找出重要的档案,硬碟的I/O也依靠时间标记(time flag)来进行处理。
UNIX系统将时间标记分成三种:
- atime( A ccess time):档案上次被读取的时间。
- ctime(status C hange time):档案的属性或内容上次被修改的时间。
- 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)