【问题标题】:How to modify 'last status change' (ctime) property of a file in Unix?如何在 Unix 中修改文件的“最后状态更改”(ctime)属性?
【发布时间】:2012-01-10 22:09:13
【问题描述】:

我知道有一种方法可以同时修改 'modification' (mtime) 和 'last access' (atime) Unix 系统中给定文件的时间属性,使用“touch”命令。 但我想知道是否存在修改 “Last status change” (ctime) 属性的方法?

【问题讨论】:

标签: unix ctime


【解决方案1】:

ctime 是文件的 inode 上次更改的时间。 mtime 是最后一次更改文件的内容。要修改 ctime,您必须对 inode 执行一些操作,例如对文件执行 chmod 或 chown。

更改文件的内容也必然会更新 ctime,因为 atime/mtime/ctime 值存储在 inode 中。修改 mtime 意味着 ctime 也会更新。

【讨论】:

  • 感谢您的反馈。但我的意思是将日期修改回过去的日期,而不是向前..
  • 我在以下答案中发布了解决此问题的方法(连同代码)。 stackoverflow.com/a/17066309/391040
  • Eitan 的解决方案(设置系统时间和 chmod)对我有用。
【解决方案2】:

使用“utime”系统调用。如果您查看它的联机帮助页,还会有 utimes,具有微秒级分辨率,以及指向具有纳秒级分辨率的 utimensat 的链接。

对 inode 的任何更改(例如对时间的更改)都会将“ctime”设置为当前时间,因此将 ctime 设置为过去的某个值会立即将其翻转回当前时间。他们很早就意识到了这一点,所以没有设置ctime的接口。

这也有助于维护系统的完整性:你可以乱用 atime 和 mtime,但 ctime 是由系统维护的。 (例如,黑客可能会修改您的 /bin/login 以允许他访问,即使您删除了他的 /etc/passwd 条目。您发现他是因为文件中的 mtime 异常。下次他将 mtime 更改回系统时已安装,但他无法隐藏ctime!)。

【讨论】:

    猜你喜欢
    • 2013-04-14
    • 2011-03-20
    • 2021-06-26
    • 1970-01-01
    • 2021-01-30
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    相关资源
    最近更新 更多