【发布时间】:2012-01-10 22:09:13
【问题描述】:
我知道有一种方法可以同时修改 'modification' (mtime) 和 'last access' (atime) Unix 系统中给定文件的时间属性,使用“touch”命令。 但我想知道是否存在修改 “Last status change” (ctime) 属性的方法?
【问题讨论】:
我知道有一种方法可以同时修改 'modification' (mtime) 和 'last access' (atime) Unix 系统中给定文件的时间属性,使用“touch”命令。 但我想知道是否存在修改 “Last status change” (ctime) 属性的方法?
【问题讨论】:
ctime 是文件的 inode 上次更改的时间。 mtime 是最后一次更改文件的内容。要修改 ctime,您必须对 inode 执行一些操作,例如对文件执行 chmod 或 chown。
更改文件的内容也必然会更新 ctime,因为 atime/mtime/ctime 值存储在 inode 中。修改 mtime 意味着 ctime 也会更新。
【讨论】:
使用“utime”系统调用。如果您查看它的联机帮助页,还会有 utimes,具有微秒级分辨率,以及指向具有纳秒级分辨率的 utimensat 的链接。
对 inode 的任何更改(例如对时间的更改)都会将“ctime”设置为当前时间,因此将 ctime 设置为过去的某个值会立即将其翻转回当前时间。他们很早就意识到了这一点,所以没有设置ctime的接口。
这也有助于维护系统的完整性:你可以乱用 atime 和 mtime,但 ctime 是由系统维护的。 (例如,黑客可能会修改您的 /bin/login 以允许他访问,即使您删除了他的 /etc/passwd 条目。您发现他是因为文件中的 mtime 异常。下次他将 mtime 更改回系统时已安装,但他无法隐藏ctime!)。
【讨论】: