本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/。
对每个文件保持有三个时间字段,它们的意义见表4-10:
表4-10 与每个文件相关的三个时间值
字段 | 说明 | 例子 | ls(1)选项 |
st_atime | 文件数据的最后访问时间 | read | -u |
st_mtime | 文件数据的最后修改时间 | write | 默认 |
st_ctime | i节点状态的最后更改时间 | chmod、chown | -c |
注意修改时间(st_mtime)和更改状态时间(st_ctime)之间的区别。修改时间是文件内容最后一次被修改的时间。更改状态时间是该文件的i节点最后一次被修改的时间。很多操作,例如,更改文件的访问权限、用户ID、链接数等,都会影响到i节点,但它们并没有更改文件的实际内容。因为i节点中的所有信息都是与文件的实际内容分开存放的,所以,除了文件数据修改时间以外,还需要更改状态的时间。
注意,系统并不保存对一个i节点的最后一次访问时间,所以access和stat函数并不更改这三个时间中的任一个。
系统管理员常常使用访问时间来删除在一定时间范围内没有访问过的文件。find(1)命令常被用来进行这类操作。
修改时间和更改状态时间可被用来归档其内容已经被修改或其i节点已经被更改的那些文件。
ls命令按着三个时间值中的一个排序进行显示。按系统默认(用-l或-t选项调用时),它按文件的修改时间的先后排序显示。-u选项使用其访问时间排序,-c选项使用其更改状态时间排序。
表4-11列出了已说明过的各种函数对这三个时间的作用。目录是包含目录项(文件名和相关的i节点编号)的文件,增加、删除或修改目录项会影响到与其所在目录相关的三个时间。
图4-11 各种函数对访问、修改和更改状态时间的作用