分类: 系统运维
2012-03-28 13:56:11
每个文件维护了三个时间域。下表总结了它们的目的:
与每个文件相关的三个时间域 |
|||
域 | 描述 | 例子 | ls 选项 |
st_atime | 文件数据的最后访问时间 | read | -u |
st_mtime | 文件数据的最后修改时间 | write | 默认 |
st_ctime | i-node状态的最后改变时间 | chmod, chown | -c |
注意修改时间(st_mtime)和改变状态时间(st_ctime)的区别。修改时间是文件内容最后被修改的时间。状态改变时间是文件的i-node最
后被修改的时间。在本章,我们已经描述过许多影响i-node而不改变文件真实内容的操作:改变文件的访问权限、改变用户ID、改变链接数、等等。因为
i-node的信息与文件真实内容分开存放,所以我们在修改时间之外,需要状态改变时间。
注意系统没有为一个i-node维护最后访问时间。这是为什么函数access以及stat没有改变这三个时间的任一个的原因。
访问时间通常被系统管理员使用来删除有一定时间没有被访问过的文件。典型的例子是删除上星期没被访问过的名为a.out和core的文件。find命令经常被作为这种类型的操作。
修改时间和状态改变时间可以用来存档那些内容或i-node被修改过的文件。
ls命令显示或排序这三个时间值中的一个。当使用-l或-t选项时,它默认使用文件的修改时间。-u选项使它使用访问时间,而-c选项令它使用状态改变时间。
下表总结了我们描述过的操作这三个时间的各种函数。回想在4.14节,一个目录只是一个简单地包含目录项(文件名和相关的i-node号)的文件。增加、 删除或修改这些目录项会影响目录相关的三个时间。这也是为什么下表包含了一行来展示文件或目录的三个时间,和另一行展示父目录相关的三个时间。例如,创建 一个新文件影响包含该新建文件的目录,也会影响这个新文件的i-node。然而,读或写一个文件仅影响文件的i-node而不影响目录。
(mkdir和 rmdir函数在4.20节介绍。utime函数在下节介绍。6个exec函数在8.10节介绍。mkfifo和pipe函数在第15章介绍。)
各种函数对访问时间、修改时间和状态改变时间的影响 | ||||||||
函数 | 引用的文件或目录 | 引用文件或目录的父目录 | 章节 | 注释 | ||||
a | m | c | a | m | c | |||
chmod, fchmod | * | 4.9 | ||||||
chown, fchown | * | 4.11 | ||||||
creat | * | * | * | * | * | 3.4 | O_CREAT新文件 | |
creat | * | * | 3.4 | O_TRUNC已有文件 | ||||
exec | * | 8.10 | ||||||
lchown | * | 4.11 | ||||||
link | * | * | * | 4.15 | 第二个参数的父目录 | |||
mkdir | * | * | * | * | * | 4.20 | ||
mkfifo | * | * | * | * | * | 15.5 | ||
open | * | * | * | * | * | 3.3 | O_CREAT新文件 | |
open | * | * | 3.3 | O_TRUNC已有文件 | ||||
pipe | * | * | * | 15.2 | ||||
read | * | 3.7 | ||||||
remove | * | * | * | 4.15 | 删除文件=unlink | |||
remove | * | * | 4.15 | 删除目录=rmdir | ||||
rename | * | * | * | 4.15 | 两个参数的时间 | |||
rmdir | * | * | 4.20 | |||||
truncate, ftruncate | * | * | 4.13 | |||||
unlink | * | * | * | 4.15 | ||||
utime | * | * | * | 4.19 | ||||
write | * | * | 3.8 |