如何修改';上次状态更改';Unix中文件的(ctime)属性?

如何修改';上次状态更改';Unix中文件的(ctime)属性?,unix,ctime,Unix,Ctime,我知道有一种方法可以通过使用“touch”命令在Unix系统中修改给定文件的“modification”(mtime)和“last access”(atime)时间属性。 但我想知道是否存在修改“上次状态更改”(ctime)属性的方法?ctime是文件的inode上次更改的时间。mtime是上次更改文件内容的时间。要修改ctime,您必须对inode执行一些操作,例如对文件执行chmod或chown 更改文件内容也必然会更新ctime,因为atime/mtime/ctime值存储在inode中。

我知道有一种方法可以通过使用“touch”命令在Unix系统中修改给定文件的“modification”(mtime)和“last access”(atime)时间属性。
但我想知道是否存在修改“上次状态更改”(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!)

可能重复感谢您的反馈。但是我的意思是将日期修改回过去的日期,而不是向前的日期。我在下面的答案中公布了我解决这个问题的方法(以及代码)。Eitan的解决方案(设置系统时间和chmod)对我很有效。